diff options
author | Havoc Pennington <hp@pobox.com> | 2002-10-28 05:35:30 +0000 |
---|---|---|
committer | Havoc Pennington <hp@src.gnome.org> | 2002-10-28 05:35:30 +0000 |
commit | effec94613aec6570e1797dbea533ec3643262be (patch) | |
tree | 79dbcc64b36d7f6de0c679d70dcada2487b04bf2 | |
parent | c9c67387ce50a7499de8a90fa57bad5a5c3adb23 (diff) | |
download | metacity-effec94613aec6570e1797dbea533ec3643262be.tar.gz |
store the window menu on the display and blow it away when a window
2002-10-28 Havoc Pennington <hp@pobox.com>
* src/window.c, src/display.c: store the window menu on the
display and blow it away when a window closes, so we don't
get funny stuck menus. Patch from Martin Garton #87514
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | src/display.c | 5 | ||||
-rw-r--r-- | src/display.h | 3 | ||||
-rw-r--r-- | src/window.c | 17 |
4 files changed, 30 insertions, 1 deletions
@@ -1,3 +1,9 @@ +2002-10-28 Havoc Pennington <hp@pobox.com> + + * src/window.c, src/display.c: store the window menu on the + display and blow it away when a window closes, so we don't + get funny stuck menus. Patch from Martin Garton #87514 + 2002-10-27 Anders Carlsson <andersca@gnu.org> * configure.in: Make XRandr detection work better. diff --git a/src/display.c b/src/display.c index 033c8101..033d67e9 100644 --- a/src/display.c +++ b/src/display.c @@ -394,8 +394,11 @@ meta_display_open (const char *name) display->groups_by_leader = NULL; + display->window_with_menu = NULL; + display->window_menu = NULL; + display->screens = NULL; - + #ifdef HAVE_STARTUP_NOTIFICATION display->sn_display = sn_display_new (display->xdisplay, sn_error_trap_push, diff --git a/src/display.h b/src/display.h index faba61e3..b748a1ad 100644 --- a/src/display.h +++ b/src/display.h @@ -259,6 +259,9 @@ struct _MetaDisplay /* Managed by group.c */ GHashTable *groups_by_leader; + /* currently-active window menu if any */ + MetaWindowMenu *window_menu; + MetaWindow *window_with_menu; #ifdef HAVE_STARTUP_NOTIFICATION /* This is at the end in case someone doesn't include config.h before this file diff --git a/src/window.c b/src/window.c index 0c042e46..cddfbdd6 100644 --- a/src/window.c +++ b/src/window.c @@ -820,6 +820,13 @@ meta_window_free (MetaWindow *window) meta_verbose ("Unmanaging 0x%lx\n", window->xwindow); + if (window->display->window_with_menu == window) + { + meta_ui_window_menu_free (window->display->window_menu); + window->display->window_menu = NULL; + window->display->window_with_menu = NULL; + } + if (destroying_windows_disallowed > 0) meta_bug ("Tried to destroy window %s while destruction was not allowed\n", window->desc); @@ -5884,6 +5891,12 @@ menu_callback (MetaWindowMenu *menu, { meta_verbose ("Menu callback on nonexistent window\n"); } + + if (display->window_menu == menu) + { + display->window_menu = NULL; + display->window_with_menu = NULL; + } meta_ui_window_menu_free (menu); } @@ -5950,7 +5963,11 @@ meta_window_show_menu (MetaWindow *window, menu_callback, NULL); + window->display->window_menu = menu; + window->display->window_with_menu = window; + meta_verbose ("Popping up window menu for %s\n", window->desc); + meta_ui_window_menu_popup (menu, root_x, root_y, button, timestamp); } |