diff --git a/src/apps/deskbar/ExpandoMenuBar.cpp b/src/apps/deskbar/ExpandoMenuBar.cpp index 02a35b4572..30b912ce22 100644 --- a/src/apps/deskbar/ExpandoMenuBar.cpp +++ b/src/apps/deskbar/ExpandoMenuBar.cpp @@ -739,10 +739,9 @@ TExpandoMenuBar::DrawBackground(BRect) } -/** Something to help determine if we are showing too many apps - * need to add in scrolling functionality. - */ - +/*! Something to help determine if we are showing too many apps + need to add in scrolling functionality. +*/ void TExpandoMenuBar::CheckForSizeOverrun() { @@ -833,7 +832,9 @@ TExpandoMenuBar::monitor_team_windows(void* arg) ((1 << current_workspace()) & wInfo->workspaces) != 0, false); item->ExpandedItem(true); - teamMenu->AddItem(item, i + 1); + teamMenu->AddItem(item, + TWindowMenuItem::InsertIndexFor( + teamMenu, i + 1, item)); resize = true; } } diff --git a/src/apps/deskbar/WindowMenu.cpp b/src/apps/deskbar/WindowMenu.cpp index 7ab785f605..b0a65dcefe 100644 --- a/src/apps/deskbar/WindowMenu.cpp +++ b/src/apps/deskbar/WindowMenu.cpp @@ -143,7 +143,8 @@ TWindowMenu::AttachedToWindow() if (dragging) item->SetEnabled(false); - AddItem(item, addIndex); + AddItem(item, + TWindowMenuItem::InsertIndexFor(this, 0, item)); } else { TTeamMenuItem* parentItem = static_cast(Superitem()); diff --git a/src/apps/deskbar/WindowMenuItem.cpp b/src/apps/deskbar/WindowMenuItem.cpp index f133f0ad6d..42802e4172 100644 --- a/src/apps/deskbar/WindowMenuItem.cpp +++ b/src/apps/deskbar/WindowMenuItem.cpp @@ -56,7 +56,8 @@ const BRect kIconRect(1.0f, 1.0f, 13.0f, 14.0f); TWindowMenuItem::TWindowMenuItem(const char* title, int32 id, bool mini, bool currentWorkspace, bool dragging) - : BMenuItem(title, NULL), + : + BMenuItem(title, NULL), fID(id), fMini(mini), fCurrentWorkSpace(currentWorkspace), @@ -85,6 +86,7 @@ TWindowMenuItem::Initialize(const char* title) BFont font(be_plain_font); fTitleWidth = ceilf(font.StringWidth(title)); + fFullTitle = title; font_height fontHeight; font.GetHeight(&fontHeight); fTitleAscent = ceilf(fontHeight.ascent); @@ -134,6 +136,27 @@ TWindowMenuItem::SetLabel(const char* string) } +const char* +TWindowMenuItem::FullTitle() const +{ + return fFullTitle.String(); +} + + +/*static*/ int32 +TWindowMenuItem::InsertIndexFor(BMenu* menu, int32 startIndex, + TWindowMenuItem* newItem) +{ + for (int32 index = startIndex;; index++) { + TWindowMenuItem* item + = dynamic_cast(menu->ItemAt(index)); + if (item == NULL + || strcasecmp(item->FullTitle(), newItem->FullTitle()) > 0) + return index; + } +} + + int32 TWindowMenuItem::ID() { diff --git a/src/apps/deskbar/WindowMenuItem.h b/src/apps/deskbar/WindowMenuItem.h index 8e441aadd2..bfe14da4f4 100644 --- a/src/apps/deskbar/WindowMenuItem.h +++ b/src/apps/deskbar/WindowMenuItem.h @@ -31,14 +31,10 @@ of Be Incorporated in the United States and other countries. Other brand product names are registered trademarks or trademarks of their respective holders. All rights reserved. */ - -// individual windows of an application -// item for WindowMenu, sub of TeamMenuItem -// all DB positions - #ifndef WINDOWMENUITEM_H #define WINDOWMENUITEM_H + #include #include #include @@ -47,43 +43,51 @@ All rights reserved. class BBitmap; +/*! Individual windows of an application item for WindowMenu, + sub of TeamMenuItem all DB positions +*/ class TWindowMenuItem : public BMenuItem { - public: - TWindowMenuItem(const char* title, int32 id, bool mini, - bool currentWorkSpace, bool dragging = false); +public: + TWindowMenuItem(const char* title, int32 id, + bool mini, bool currentWorkSpace, + bool dragging = false); - void ExpandedItem(bool state); - void SetTo(const char* title, int32 id, bool mini, - bool currentWorkSpace, bool dragging = false); - int32 ID(); - void SetRequireUpdate(); - bool RequiresUpdate(); - bool ChangedState(); + void ExpandedItem(bool state); + void SetTo(const char* title, int32 id, bool mini, + bool currentWorkSpace, + bool dragging = false); + int32 ID(); + void SetRequireUpdate(); + bool RequiresUpdate(); + bool ChangedState(); - virtual void SetLabel(const char* string); + virtual void SetLabel(const char* string); + const char* FullTitle() const; - protected: - void Initialize(const char* title); - virtual void GetContentSize(float* width, float* height); - virtual void DrawContent(); - virtual status_t Invoke(BMessage* message = NULL); - virtual void Draw(); + static int32 InsertIndexFor(BMenu* menu, int32 startIndex, + TWindowMenuItem* item); - private: - int32 fID; - bool fMini; - bool fCurrentWorkSpace; - const BBitmap* fBitmap; - float fTitleWidth; - float fTitleAscent; - float fTitleDescent; - bool fDragging; - bool fExpanded; - bool fRequireUpdate; - bool fModified; - BString fFullTitle; +protected: + void Initialize(const char* title); + virtual void GetContentSize(float* width, float* height); + virtual void DrawContent(); + virtual status_t Invoke(BMessage* message = NULL); + virtual void Draw(); + +private: + int32 fID; + bool fMini; + bool fCurrentWorkSpace; + const BBitmap* fBitmap; + float fTitleWidth; + float fTitleAscent; + float fTitleDescent; + bool fDragging; + bool fExpanded; + bool fRequireUpdate; + bool fModified; + BString fFullTitle; }; #endif /* WINDOWMENUITEM_H */ -