diff --git a/src/apps/deskbar/BarApp.cpp b/src/apps/deskbar/BarApp.cpp index 8795c05022..e63afc38ed 100644 --- a/src/apps/deskbar/BarApp.cpp +++ b/src/apps/deskbar/BarApp.cpp @@ -570,8 +570,15 @@ TBarApp::MessageReceived(BMessage* message) ResizeTeamIcons(); + if (BarView()->MiniState()) + break; + fBarWindow->Lock(); - BarView()->PlaceApplicationBar(); + if (BarView()->Vertical()) + BarView()->PlaceApplicationBar(); + else + BarView()->UpdatePlacement(); + fBarWindow->Unlock(); break; } diff --git a/src/apps/deskbar/BarView.cpp b/src/apps/deskbar/BarView.cpp index b15e384656..adb7d0153b 100644 --- a/src/apps/deskbar/BarView.cpp +++ b/src/apps/deskbar/BarView.cpp @@ -70,13 +70,13 @@ const int32 kMenuTrackMargin = 20; TBarView::TBarView(BRect frame, bool vertical, bool left, bool top, - bool showInterval, uint32 state, float, bool showTime) + bool showInterval, uint32 state, float, bool showClock) : BView(frame, "BarView", B_FOLLOW_ALL_SIDES, B_WILL_DRAW), fBarMenuBar(NULL), fExpando(NULL), fTrayLocation(1), fShowInterval(showInterval), - fShowClock(showTime), + fShowClock(showClock), fVertical(vertical), fTop(top), fLeft(left), @@ -143,7 +143,7 @@ TBarView::Draw(BRect) else if (AcrossBottom()) StrokeLine(bounds.LeftTop(), bounds.RightTop()); - if (Vertical() && Expando()) { + if (fVertical && fState == kExpandoState) { SetHighColor(hilite); BRect frame(fExpando->Frame()); StrokeLine(BPoint(frame.left, frame.top - 1), @@ -200,8 +200,7 @@ TBarView::MouseMoved(BPoint where, uint32 transit, const BMessage* dragMessage) // Auto-Raise where = ConvertToScreen(where); - BScreen screen(Window()); - BRect screenFrame = screen.Frame(); + BRect screenFrame = (BScreen(Window())).Frame(); if ((where.x == screenFrame.left || where.x == screenFrame.right || where.y == screenFrame.top || where.y == screenFrame.bottom) && Window()->Frame().Contains(where)) { @@ -276,7 +275,7 @@ TBarView::PlaceDeskbarMenu() // only for vertical mini or expanded // mini mode will have team menu added as part of BarMenuBar if (fVertical && !fBarMenuBar) { - // create the Be menu + // create the Be menu BRect mbarFrame(Bounds()); mbarFrame.bottom = mbarFrame.top + kMenuBarHeight; fBarMenuBar = new TBarMenuBar(this, mbarFrame, "BarMenuBar"); @@ -341,7 +340,7 @@ TBarView::PlaceTray(bool vertSwap, bool leftSwap) if (fVertical) { statusLoc.y = fBarMenuBar->Frame().bottom + 1; statusLoc.x = 0; - if (Left() && Vertical()) + if (fLeft && fVertical) fReplicantTray->MoveTo(5, 2); else fReplicantTray->MoveTo(2, 2); @@ -420,11 +419,20 @@ TBarView::GetPreferredWindowSize(BRect screenFrame, float* width, float* height) { float windowHeight = 0; float windowWidth = sMinimumWindowWidth; - bool calcHiddenSize = ((TBarApp*)be_app)->Settings()->autoHide + bool setToHiddenSize = ((TBarApp*)be_app)->Settings()->autoHide && IsHidden() && !DragRegion()->IsDragging(); int32 iconSize = static_cast(be_app)->IconSize(); - if (!calcHiddenSize) { + if (setToHiddenSize) { + windowHeight = kHiddenDimension; + + if (fState == kExpandoState && !fVertical) { + // top or bottom, full + fExpando->CheckItemSizes(0); + windowWidth = screenFrame.Width(); + } else + windowWidth = kHiddenDimension; + } else { if (fState == kFullState) { windowHeight = screenFrame.bottom; windowWidth = fBarMenuBar->Frame().Width(); @@ -445,16 +453,6 @@ TBarView::GetPreferredWindowSize(BRect screenFrame, float* width, float* height) else windowHeight = fBarMenuBar->Frame().bottom; } - } else { - windowHeight = kHModeHiddenHeight; - - if (fState == kExpandoState && !fVertical) { - // top or bottom, full - fExpando->CheckItemSizes(0); - windowHeight = iconSize + 4; - windowWidth = screenFrame.Width(); - } else - windowWidth = kHModeHiddenHeight; } *width = windowWidth; @@ -501,13 +499,13 @@ TBarView::SaveSettings() { desk_settings* settings = ((TBarApp*)be_app)->Settings(); - settings->vertical = Vertical(); - settings->left = Left(); - settings->top = Top(); - settings->ampmMode = MilTime(); - settings->state = (uint32)State(); + settings->vertical = fVertical; + settings->left = fLeft; + settings->top = fTop; + settings->ampmMode = fShowInterval; + settings->state = (uint32)fState; settings->width = 0; - settings->showTime = ShowingClock(); + settings->showTime = fShowClock; fReplicantTray->RememberClockSettings(); } @@ -584,7 +582,7 @@ TBarView::RemoveExpandedItems() void TBarView::ExpandItems() { - if (fExpando == NULL || !fVertical || !Expando() + if (fExpando == NULL || !fVertical || fState != kExpandoState || !static_cast(be_app)->Settings()->superExpando || fExpandedItems.CountItems() <= 0) return; @@ -653,8 +651,7 @@ TBarView::RaiseDeskbar(bool raise) void TBarView::HideDeskbar(bool hide) { - BScreen screen(Window()); - BRect screenFrame = screen.Frame(); + BRect screenFrame = (BScreen(Window())).Frame(); if (hide) { Hide(); @@ -668,80 +665,6 @@ TBarView::HideDeskbar(bool hide) } -// window placement functions - -bool -TBarView::Vertical() const -{ - return fVertical; -} - - -bool -TBarView::Left() const -{ - return fLeft; -} - - -bool -TBarView::AcrossTop() const -{ - return fTop && !fVertical; -} - - -bool -TBarView::AcrossBottom() const -{ - return !fTop && !fVertical; -} - - -bool -TBarView::Expando() const -{ - return fState == kExpandoState; -} - - -bool -TBarView::Top() const -{ - return fTop; -} - - -int32 -TBarView::State() const -{ - return fState; -} - - -// optional functionality functions - -bool -TBarView::MilTime() const -{ - return fShowInterval; -} - - -void -TBarView::ShowClock(bool on) -{ - fShowClock = on; -} - - -bool -TBarView::ShowingClock() const -{ - return fShowClock; -} - - // #pragma mark - Drag and Drop @@ -1002,7 +925,7 @@ TBarView::HandleDeskbarMenu(BMessage* messagewithdestination) return; // in mini-mode - if (Vertical() && !Expando()) { + if (fVertical && fState != kExpandoState) { // if drop is in the team menu, bail if (fBarMenuBar->CountItems() >= 2) { uint32 buttons; diff --git a/src/apps/deskbar/BarView.h b/src/apps/deskbar/BarView.h index d81d1aa7a5..065ff6bdad 100644 --- a/src/apps/deskbar/BarView.h +++ b/src/apps/deskbar/BarView.h @@ -57,7 +57,7 @@ const float kMiniHeight = 46.0f; const float kHModeHeight = 21.0f; const float kMenuBarHeight = 21.0f; const float kStatusHeight = 22.0f; -const float kHModeHiddenHeight = 1.0f; +const float kHiddenDimension = 1.0f; const float kMaxPreventHidingDist = 80.0f; class BShelf; @@ -89,17 +89,23 @@ class TBarView : public BView { void RaiseDeskbar(bool raise); void HideDeskbar(bool hide); - bool Vertical() const; - bool Left() const; - bool Top() const; - bool AcrossTop() const; - bool AcrossBottom() const; - bool Expando() const; - int32 State() const; + // window placement methods + bool Vertical() const { return fVertical; }; + bool Left() const { return fLeft; }; + bool Top() const { return fTop; }; + bool AcrossTop() const { return fTop && !fVertical; }; + bool AcrossBottom() const { return !fTop && !fVertical; }; - bool MilTime() const; - void ShowClock(bool); - bool ShowingClock() const; + // window state methods + bool ExpandoState() const { return fState == kExpandoState; }; + bool FullState() const { return fState == kFullState; }; + bool MiniState() const { return fState == kMiniState; }; + int32 State() const { return fState; }; + + // optional functionality methods + bool MilTime() const { return fShowInterval; }; + void ShowClock(bool show) { fShowClock = show; }; + bool ShowingClock() const { return fShowClock; }; void CacheDragData(const BMessage* incoming); status_t DragStart(); diff --git a/src/apps/deskbar/BarWindow.cpp b/src/apps/deskbar/BarWindow.cpp index af65febd5b..fe5cec6696 100644 --- a/src/apps/deskbar/BarWindow.cpp +++ b/src/apps/deskbar/BarWindow.cpp @@ -252,7 +252,7 @@ TBarWindow::WorkspaceActivated(int32 workspace, bool active) { BWindow::WorkspaceActivated(workspace, active); - if (active && !(fBarView->Expando() && fBarView->Vertical())) + if (active && !(fBarView->ExpandoState() && fBarView->Vertical())) fBarView->UpdatePlacement(); else { BRect screenFrame = (BScreen(fBarView->Window())).Frame(); @@ -346,7 +346,7 @@ TBarWindow::GetLocation(BMessage* message) { BMessage reply('rply'); reply.AddInt32("location", (int32)DeskbarLocation()); - reply.AddBool("expanded", fBarView->Expando()); + reply.AddBool("expanded", fBarView->ExpandoState()); message->SendReply(&reply); } @@ -430,7 +430,7 @@ void TBarWindow::IsExpanded(BMessage* message) { BMessage reply('rply'); - reply.AddBool("expanded", fBarView->Expando()); + reply.AddBool("expanded", fBarView->ExpandoState()); message->SendReply(&reply); } diff --git a/src/apps/deskbar/PreferencesWindow.cpp b/src/apps/deskbar/PreferencesWindow.cpp index 8140a872fd..38947aca09 100644 --- a/src/apps/deskbar/PreferencesWindow.cpp +++ b/src/apps/deskbar/PreferencesWindow.cpp @@ -302,7 +302,7 @@ PreferencesWindow::_EnableDisableDependentItems() { TBarApp* barApp = static_cast(be_app); if (barApp->BarView()->Vertical() - && barApp->BarView()->Expando()) { + && barApp->BarView()->ExpandoState()) { fAppsShowExpanders->SetEnabled(true); fAppsExpandNew->SetEnabled(fAppsShowExpanders->Value()); } else { diff --git a/src/apps/deskbar/TeamMenuItem.cpp b/src/apps/deskbar/TeamMenuItem.cpp index 982d19d552..a98a5230d9 100644 --- a/src/apps/deskbar/TeamMenuItem.cpp +++ b/src/apps/deskbar/TeamMenuItem.cpp @@ -404,7 +404,7 @@ TTeamMenuItem::DrawContent() // Draw the expandable icon. TBarView* barView = (static_cast(be_app))->BarView(); if (fVertical && static_cast(be_app)->Settings()->superExpando - && barView->Expando()) { + && barView->ExpandoState()) { BRect frame(Frame()); BRect rect(0, 0, kSwitchWidth, 10); rect.OffsetTo(BPoint(frame.right - rect.Width(), diff --git a/src/apps/deskbar/WindowMenu.cpp b/src/apps/deskbar/WindowMenu.cpp index 0e2cf2d936..7ce5c0247a 100644 --- a/src/apps/deskbar/WindowMenu.cpp +++ b/src/apps/deskbar/WindowMenu.cpp @@ -105,7 +105,7 @@ TWindowMenu::AttachedToWindow() // and then. Window()->Hide(); // if in expando (horizontal or vertical) - if (barview->Expando()) { + if (barview->ExpandoState()) { SetTrackingHook(barview->MenuTrackingHook, barview->GetTrackingHookData()); } @@ -232,7 +232,7 @@ TWindowMenu::DetachedFromWindow() // in expando mode the teammenu will not call DragStop, thus, it needs to // be called from here TBarView* barview = (dynamic_cast(be_app))->BarView(); - if (barview && barview->Expando() && barview->Dragging() + if (barview && barview->ExpandoState() && barview->Dragging() && barview->LockLooper()) { // We changed the show level in AttachedToWindow(). Undo it. Window()->Show();