MenuWindow now uses the private window_feel "1025", which I guess we'll need to implement server side too, since it behaves differently than B_MODAL_WINDOW_FEEL. Menu items added to a menubar didn't appear immediately, so I forced an Invalidate(). Could be made better, I think.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10552 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
31e911da16
commit
b0d01b5f78
|
@ -173,7 +173,8 @@ BMenu::BMenu(BMessage *archive)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BArchivable *BMenu::Instantiate(BMessage *data)
|
BArchivable *
|
||||||
|
BMenu::Instantiate(BMessage *data)
|
||||||
{
|
{
|
||||||
if (validate_instantiation(data, "BMenu"))
|
if (validate_instantiation(data, "BMenu"))
|
||||||
return new BMenu(data);
|
return new BMenu(data);
|
||||||
|
@ -872,7 +873,7 @@ BMenu::ScreenLocation()
|
||||||
point = superItem->Frame().LeftBottom() + BPoint(0.0f, 1.0f);
|
point = superItem->Frame().LeftBottom() + BPoint(0.0f, 1.0f);
|
||||||
|
|
||||||
superMenu->ConvertToScreen(&point);
|
superMenu->ConvertToScreen(&point);
|
||||||
|
|
||||||
return point;
|
return point;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1121,10 +1122,11 @@ BMenu::LayoutItems(int32 index)
|
||||||
CalcTriggers();
|
CalcTriggers();
|
||||||
|
|
||||||
float width, height;
|
float width, height;
|
||||||
|
|
||||||
ComputeLayout(index, true, true, &width, &height);
|
ComputeLayout(index, true, true, &width, &height);
|
||||||
|
|
||||||
ResizeTo(width, height);
|
ResizeTo(width, height);
|
||||||
|
|
||||||
|
Invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1318,9 +1320,13 @@ BMenu::DeleteMenuWindow()
|
||||||
BMenuItem *
|
BMenuItem *
|
||||||
BMenu::HitTestItems(BPoint where, BPoint slop) const
|
BMenu::HitTestItems(BPoint where, BPoint slop) const
|
||||||
{
|
{
|
||||||
for (int i = 0; i < CountItems(); i++)
|
// TODO: Take "slop" into account ?
|
||||||
if (ItemAt(i)->fBounds.Contains(where))
|
int32 itemCount = CountItems();
|
||||||
return ItemAt(i);
|
for (int32 i = 0; i < itemCount; i++) {
|
||||||
|
BMenuItem *item = ItemAt(i);
|
||||||
|
if (item->fBounds.Contains(where))
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1345,7 +1351,7 @@ BMenu::CacheFontInfo()
|
||||||
GetFontHeight(&fh);
|
GetFontHeight(&fh);
|
||||||
fAscent = fh.ascent;
|
fAscent = fh.ascent;
|
||||||
fDescent = fh.descent;
|
fDescent = fh.descent;
|
||||||
fFontHeight = (float)ceil(fh.ascent + fh.descent + 0.5f);
|
fFontHeight = (float)ceil(fh.ascent + fh.descent + fh.leading);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -30,10 +30,13 @@
|
||||||
|
|
||||||
#include <MenuWindow.h>
|
#include <MenuWindow.h>
|
||||||
|
|
||||||
|
// TODO: taken from Deskbar's WindowMenu.cpp.
|
||||||
|
// this should go to some private header.
|
||||||
|
const window_feel kMenuWindowFeel = (window_feel)1025;
|
||||||
|
|
||||||
BMenuWindow::BMenuWindow(BRect frame, BMenu *menu)
|
BMenuWindow::BMenuWindow(BRect frame, BMenu *menu)
|
||||||
:
|
:
|
||||||
BWindow(frame, "Menu", B_NO_BORDER_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL,
|
BWindow(frame, "Menu", B_NO_BORDER_WINDOW_LOOK, kMenuWindowFeel,
|
||||||
B_NOT_ZOOMABLE)
|
B_NOT_ZOOMABLE)
|
||||||
{
|
{
|
||||||
fMenu = menu;
|
fMenu = menu;
|
||||||
|
|
Loading…
Reference in New Issue