Refactor Tooltip's in Deskbar.
Only update the tooltip if the mouse goes over a new menu item making sure to exit if the item is NULL, there is a visible label, or it is the same item. If the mouse moves outside the view reset the last item to NULL. * Rename DrawLabel() and SetDrawLabel() to HasLabel() and SetHasLabel() to make it clear what these methods are setting a getting and setting a bool and not doing the actual work for drawing the label.
This commit is contained in:
@@ -45,6 +45,7 @@ All rights reserved.
|
||||
#include <NodeInfo.h>
|
||||
#include <Roster.h>
|
||||
#include <Screen.h>
|
||||
#include <ToolTip.h>
|
||||
|
||||
#include "BarApp.h"
|
||||
#include "BarMenuTitle.h"
|
||||
@@ -395,19 +396,43 @@ TExpandoMenuBar::MouseMoved(BPoint where, uint32 code, const BMessage* message)
|
||||
// force a cleanup
|
||||
_FinishedDrag();
|
||||
|
||||
if (code == B_INSIDE_VIEW) {
|
||||
TTeamMenuItem* item = TeamItemAtPoint(where);
|
||||
switch (code) {
|
||||
case B_ENTERED_VIEW:
|
||||
case B_INSIDE_VIEW:
|
||||
{
|
||||
TTeamMenuItem* item = TeamItemAtPoint(where);
|
||||
if (item == NULL) {
|
||||
// item is NULL, break out
|
||||
fLastMousedOverItem = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
if (item != NULL) {
|
||||
if (!item->DrawLabel() && item != fLastMousedOverItem) {
|
||||
// set the tooltip
|
||||
SetToolTip(item->Name());
|
||||
} else
|
||||
if (item->HasLabel()) {
|
||||
// item has a visible label, set the item and break out
|
||||
fLastMousedOverItem = item;
|
||||
break;
|
||||
}
|
||||
|
||||
if (item == fLastMousedOverItem) {
|
||||
// already set the tooltip for this item, break out
|
||||
break;
|
||||
}
|
||||
|
||||
// new item, update the tooltip with the item name
|
||||
SetToolTip(item->Name());
|
||||
|
||||
// save the current item for the next MouseMoved() call
|
||||
fLastMousedOverItem = item;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case B_OUTSIDE_VIEW:
|
||||
case B_EXITED_VIEW:
|
||||
fLastMousedOverItem = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
fLastMousedOverItem = NULL;
|
||||
BMenuBar::MouseMoved(where, code, message);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -171,14 +171,14 @@ TTeamMenuItem::SetOverrideSelected(bool selected)
|
||||
|
||||
|
||||
bool
|
||||
TTeamMenuItem::DrawLabel() const
|
||||
TTeamMenuItem::HasLabel() const
|
||||
{
|
||||
return fDrawLabel;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TTeamMenuItem::SetDrawLabel(bool drawLabel)
|
||||
TTeamMenuItem::SetHasLabel(bool drawLabel)
|
||||
{
|
||||
fDrawLabel = drawLabel;
|
||||
}
|
||||
|
||||
@@ -64,8 +64,8 @@ class TTeamMenuItem : public BMenuItem {
|
||||
void SetOverrideHeight(float height);
|
||||
void SetOverrideSelected(bool selected);
|
||||
|
||||
bool DrawLabel() const;
|
||||
void SetDrawLabel(bool drawLabel);
|
||||
bool HasLabel() const;
|
||||
void SetHasLabel(bool drawLabel);
|
||||
|
||||
bool IsExpanded();
|
||||
void ToggleExpandState(bool resizeWindow);
|
||||
|
||||
Reference in New Issue
Block a user