332_3_uppsrc.diff

The diff file to apply for uppsrc directory (third patch) - Sender Ghost, 10/04/2012 09:48 AM

Download (1.33 KB)

View differences:

uppsrc/CtrlLib/MenuBar.cpp 2012-10-04 11:43:09 +0400
50 50
	pullshift.y = -1;
51 51
}
52 52

  
53
class MenuBarEntity : public Moveable<MenuBarEntity> {
54
private:
55
	MenuBar *menu;
56
public:
57
	MenuBarEntity() : menu(NULL) { }
58
	~MenuBarEntity() {
59
		if(menu) {
60
			LLOG("MenuBarEntity: CloseMenu");
61
			menu->CloseMenu();
62
		}
63
	}
64
	void ClearMenu()             { menu = NULL; }
65
	void SetMenu(MenuBar *bar)   { menu = bar; }
66
};
67

  
68
static One<MenuBarEntity> mbe;
69

  
53 70
MenuBar::MenuBar()
54 71
{
55 72
	LLOG("MenuBar " << Name());
......
556 573

  
557 574
void MenuBar::Execute(Ctrl *owner, Point p)
558 575
{
559
	static Vector<Ctrl *> ows; // Used to prevent another open local menu for single owner to be opened (repeated right-click)
560
	int level = ows.GetCount();
561
	if(IsEmpty() || FindIndex(ows, owner) >= 0)
576
	if(IsEmpty())
562 577
		return;
563
	ows.Add(owner);
578
	mbe.Create().SetMenu(this);
564 579
	PopUp(owner, p);
565 580
	EventLoop(this);
566
	CloseMenu();
567
	ows.SetCount(level);
568 581
}
569 582

  
570 583
void MenuBar::Execute(Ctrl *owner, Callback1<Bar&> proc, Point p)
......
591 604
	if(parentmenu)
592 605
		parentmenu->SetActiveSubmenu(NULL, NULL);
593 606
	LLOG("~MenuBar 1");
607
	if(!mbe.IsEmpty())
608
		mbe.Clear();
594 609
}
595 610

  
596 611
END_UPP_NAMESPACE