summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl_MacOS_Sys_Menu_Bar.mm2
-rw-r--r--src/Fl_Menu.cxx21
-rw-r--r--src/Fl_Menu_.cxx7
3 files changed, 26 insertions, 4 deletions
diff --git a/src/Fl_MacOS_Sys_Menu_Bar.mm b/src/Fl_MacOS_Sys_Menu_Bar.mm
index b76deb27e..87c5089cd 100644
--- a/src/Fl_MacOS_Sys_Menu_Bar.mm
+++ b/src/Fl_MacOS_Sys_Menu_Bar.mm
@@ -167,7 +167,7 @@ const char *Fl_Mac_App_Menu::quit = "Quit %@";
{
fl_lock_function();
Fl_Menu_Item *item = (Fl_Menu_Item *)[(NSData*)[self representedObject] bytes];
- if ( item && item->callback() ) item->do_callback(NULL);
+ if ( item && item->callback() ) item->do_callback(NULL, FL_REASON_SELECTED);
fl_unlock_function();
}
- (void) setKeyEquivalentModifierMask:(int)value
diff --git a/src/Fl_Menu.cxx b/src/Fl_Menu.cxx
index 500b20a5c..a91666ad3 100644
--- a/src/Fl_Menu.cxx
+++ b/src/Fl_Menu.cxx
@@ -146,6 +146,7 @@ class menuwindow : public window_with_items {
public:
menutitle* title;
int handle(int) FL_OVERRIDE;
+ void hide() override;
int itemheight; // zero == menubar
int numitems;
int selected;
@@ -480,6 +481,11 @@ menuwindow::~menuwindow() {
delete title;
}
+void menuwindow::hide() {
+ set_selected(-1);
+ window_with_items::hide();
+}
+
void menuwindow::position(int X, int Y) {
if (title) {title->position(X, title->y()+Y-y());}
Fl_Menu_Window::position(X, Y);
@@ -592,7 +598,20 @@ void menuwindow::draw() {
}
void menuwindow::set_selected(int n) {
- if (n != selected) {selected = n; damage(FL_DAMAGE_CHILD);}
+ if (n != selected) {
+ if ((selected!=-1) && (menu)) {
+ const Fl_Menu_Item *mi = menu->next(selected);
+ if ((mi) && (mi->callback_) && (mi->flags & FL_MENU_CHATTY))
+ mi->do_callback(this, FL_REASON_LOST_FOCUS);
+ }
+ selected = n;
+ if ((selected!=-1) && (menu)) {
+ const Fl_Menu_Item *mi = menu->next(selected);
+ if ((mi) && (mi->callback_) && (mi->flags & FL_MENU_CHATTY))
+ mi->do_callback(this, FL_REASON_GOT_FOCUS);
+ }
+ damage(FL_DAMAGE_CHILD);
+ }
}
////////////////////////////////////////////////////////////////
diff --git a/src/Fl_Menu_.cxx b/src/Fl_Menu_.cxx
index 20964e748..6a34278ff 100644
--- a/src/Fl_Menu_.cxx
+++ b/src/Fl_Menu_.cxx
@@ -401,8 +401,11 @@ const Fl_Menu_Item* Fl_Menu_::picked(const Fl_Menu_Item* v) {
value_ = v;
if (when()&(FL_WHEN_CHANGED|FL_WHEN_RELEASE)) {
if (changed() || when()&FL_WHEN_NOT_CHANGED) {
- if (value_ && value_->callback_) value_->do_callback((Fl_Widget*)this);
- else do_callback();
+ if (value_ && value_->callback_) {
+ value_->do_callback((Fl_Widget*)this, value_->user_data(), FL_REASON_SELECTED);
+ } else {
+ do_callback(FL_REASON_SELECTED);
+ }
}
}
}