summaryrefslogtreecommitdiff
path: root/src/Fl_Menu.cxx
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-01-21 08:30:49 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-01-21 08:30:49 +0100
commit2fbf5bed0db2aec0ef6462d58150a40064f0333b (patch)
tree91b35518e8ee3abecf2c11125d3ea28124e576ed /src/Fl_Menu.cxx
parentb5b839e4f00f5cb0dde2de165ebb7c4bcbf65c3c (diff)
Fix "Wayland: crash with set_menu_window()" (#892)
Fixes also a similar crash occuring after use of set_tooltip_window(). Two bool member variables are added to class Fl_Window_Driver to indicate true FLTK menu windows (i.e., created by Fl_Menu_Item::pulldown()) and true FLTK tooltip windows (i.e., Fl_Tooltip).
Diffstat (limited to 'src/Fl_Menu.cxx')
-rw-r--r--src/Fl_Menu.cxx7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/Fl_Menu.cxx b/src/Fl_Menu.cxx
index 3a3e70708..115e69fe7 100644
--- a/src/Fl_Menu.cxx
+++ b/src/Fl_Menu.cxx
@@ -115,6 +115,7 @@ protected:
Fl_Menu_Window(X, Y, W, H, 0) {
menu = m;
set_menu_window();
+ Fl_Window_Driver::driver(this)->fltk_menu_window = true;
end();
set_modal();
clear_border();
@@ -183,13 +184,13 @@ Fl_Window *Fl_Window_Driver::menu_parent(int *display_height) {
}
static menuwindow *to_menuwindow(Fl_Window *win) {
- if (!win->menu_window()) return NULL;
+ if (!Fl_Window_Driver::driver(win)->fltk_menu_window) return false;
return ((window_with_items*)win)->as_menuwindow();
}
/** Returns whether win is a menutitle window */
bool Fl_Window_Driver::is_menutitle(Fl_Window *win) {
- if (!win->menu_window()) return false;
+ if (!Fl_Window_Driver::driver(win)->fltk_menu_window) return false;
return (((window_with_items*)win)->as_menuwindow() == NULL);
}
@@ -233,7 +234,7 @@ int *Fl_Window_Driver::menu_offset_y(Fl_Window *win) {
/** Returns whether win is a non-menubar menutitle */
bool Fl_Window_Driver::is_floating_title(Fl_Window *win) {
- if (!win->menu_window()) return false;
+ if (!Fl_Window_Driver::driver(win)->fltk_menu_window) return false;
Fl_Window *mwin = ((window_with_items*)win)->as_menuwindow();
return !mwin && !((menutitle*)win)->in_menubar;
}