diff options
author | Owen Taylor <otaylor@redhat.com> | 2002-12-14 04:07:08 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2002-12-14 04:07:08 +0000 |
commit | 4f14fc15e6c23fabdb785d94e71cc7bd822f63e0 (patch) | |
tree | 708cec819279d7625df3373adab2ad768df45b32 /gtk/gtkmenu.c | |
parent | 30b328e79aada4b0d029879e11b58cf6ca2b0073 (diff) | |
download | gtk+-4f14fc15e6c23fabdb785d94e71cc7bd822f63e0.tar.gz |
If the screen for the menu changes while the menu is torn off, move the
Fri Dec 13 22:55:27 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkmenu.c (menu_change_screen): If the screen
for the menu changes while the menu is torn off, move
the tearoff along with it. (#85669)
* gtk/gtkmenu.c (gtk_menu_set_tearoff_state): When
reattaching, get rid of the get rid of the tearoff window.
Diffstat (limited to 'gtk/gtkmenu.c')
-rw-r--r-- | gtk/gtkmenu.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index ee2f8a0e15..3e93a8e5cf 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -531,6 +531,19 @@ gtk_menu_finalize (GObject *object) } static void +menu_change_screen (GtkMenu *menu, + GdkScreen *new_screen) +{ + if (menu->torn_off) + { + gtk_window_set_screen (GTK_WINDOW (menu->tearoff_window), new_screen); + gtk_menu_position (menu); + } + + gtk_window_set_screen (GTK_WINDOW (menu->toplevel), new_screen); +} + +static void attach_widget_screen_changed (GtkWidget *attach_widget, GdkScreen *previous_screen, GtkMenu *menu) @@ -538,8 +551,7 @@ attach_widget_screen_changed (GtkWidget *attach_widget, if (gtk_widget_has_screen (attach_widget) && !g_object_get_data (G_OBJECT (menu), "gtk-menu-explicit-screen")) { - gtk_window_set_screen (GTK_WINDOW (menu->toplevel), - gtk_widget_get_screen (attach_widget)); + menu_change_screen (menu, gtk_widget_get_screen (attach_widget)); } } @@ -1307,6 +1319,12 @@ gtk_menu_set_tearoff_state (GtkMenu *menu, { gtk_widget_hide (menu->tearoff_window); gtk_menu_reparent (menu, menu->toplevel, FALSE); + gtk_widget_destroy (menu->tearoff_window); + + menu->tearoff_window = NULL; + menu->tearoff_hbox = NULL; + menu->tearoff_scrollbar = NULL; + menu->tearoff_adjustment = NULL; } } } @@ -2972,7 +2990,7 @@ gtk_menu_set_screen (GtkMenu *menu, if (screen) { - gtk_window_set_screen (GTK_WINDOW (menu->toplevel), screen); + menu_change_screen (menu, screen); } else { |