267
267
menubar_item->area->SetMinMaxSize (MENUBAR_ICON_WIDTH, MENUBAR_ICON_HEIGHT);
270
menubar_item->area->OnMouseEnter.connect (sigc::bind ( sigc::mem_fun (this, &MenuBar::EmitItemMouseEnter), menubar_item) );
271
menubar_item->area->OnMouseLeave.connect (sigc::bind ( sigc::mem_fun (this, &MenuBar::EmitItemMouseLeave), menubar_item) );
272
menubar_item->area->OnMouseDown.connect (sigc::bind ( sigc::mem_fun (this, &MenuBar::EmitItemMouseDown), menubar_item) );
273
menubar_item->area->OnMouseDrag.connect (sigc::bind ( sigc::mem_fun (this, &MenuBar::RecvItemMouseDrag), menubar_item) );
274
menubar_item->area->OnMouseUp.connect (sigc::bind ( sigc::mem_fun (this, &MenuBar::EmitItemMouseUp), menubar_item) );
270
menubar_item->area->mouse_enter.connect (sigc::bind ( sigc::mem_fun (this, &MenuBar::EmitItemMouseEnter), menubar_item) );
271
menubar_item->area->mouse_leave.connect (sigc::bind ( sigc::mem_fun (this, &MenuBar::EmitItemMouseLeave), menubar_item) );
272
menubar_item->area->mouse_down.connect (sigc::bind ( sigc::mem_fun (this, &MenuBar::EmitItemMouseDown), menubar_item) );
273
menubar_item->area->mouse_drag.connect (sigc::bind ( sigc::mem_fun (this, &MenuBar::RecvItemMouseDrag), menubar_item) );
274
menubar_item->area->mouse_up.connect (sigc::bind ( sigc::mem_fun (this, &MenuBar::EmitItemMouseUp), menubar_item) );
276
276
menubar_item->menu->SetParentMenu (0);
277
277
menubar_item->menu->sigActionTriggered.connect (sigc::mem_fun (this, &MenuBar::RecvSigActionTriggered) );
378
378
void MenuBar::RecvItemMouseDrag (int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags, MenuBarItem *menubar_item)
380
// Transition between one menu bar item to another
381
if (GetWindowCompositor().GetMouseFocusArea() == menubar_item->area)
383
if (!menubar_item->area->IsMouseInside() ) // can also test GetWindowCompositor().GetMouseOverArea() != &menubar_item->area
385
std::list< MenuBarItem * >::iterator it;
386
// compute window coordinates x and y;
387
int winx = menubar_item->area->GetBaseX() + x;
388
int winy = menubar_item->area->GetBaseY() + y;
390
for (it = m_MenuBarItemList.begin(); it != m_MenuBarItemList.end(); it++)
392
InputArea *area = (*it)->area;
393
Geometry geometry = area->GetGeometry();
395
if (geometry.IsPointInside (winx, winy) )
397
// Close the menu below menubar_item (the one that has the focus
398
menubar_item->area->ForceStopFocus (0, 0);
400
// EmitItemMouseEnter is going to open the menu below (*it)
402
EmitItemMouseEnter (winx, winy, button_flags, key_flags, (*it) );
403
m_IsOpeningMenu = true;
404
area->ForceStartFocus (0, 0);
406
GetWindowCompositor().SetMouseFocusArea (area);
407
GetWindowCompositor().SetMouseOverArea (area);
380
// TODO: Port to new event architecture
381
// // Transition between one menu bar item to another
382
// if (GetWindowCompositor().GetMouseFocusArea() == menubar_item->area)
384
// if (!menubar_item->area->IsMouseInside() ) // can also test GetWindowCompositor().GetMouseOverArea() != &menubar_item->area
386
// std::list< MenuBarItem * >::iterator it;
387
// // compute window coordinates x and y;
388
// int winx = menubar_item->area->GetBaseX() + x;
389
// int winy = menubar_item->area->GetBaseY() + y;
391
// for (it = m_MenuBarItemList.begin(); it != m_MenuBarItemList.end(); it++)
393
// InputArea *area = (*it)->area;
394
// Geometry geometry = area->GetGeometry();
396
// if (geometry.IsPointInside (winx, winy) )
398
// // Close the menu below menubar_item (the one that has the focus
399
// menubar_item->area->ForceStopFocus (0, 0);
401
// // EmitItemMouseEnter is going to open the menu below (*it)
403
// EmitItemMouseEnter (winx, winy, button_flags, key_flags, (*it) );
404
// m_IsOpeningMenu = true;
405
// area->ForceStartFocus (0, 0);
407
// GetWindowCompositor().SetMouseFocusArea (area);
408
// GetWindowCompositor().SetMouseOverArea (area);
417
418
void MenuBar::RecvSigActionTriggered (MenuPage *menu, ActionItem *action)