summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-12-14 04:07:08 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-12-14 04:07:08 +0000
commit4f14fc15e6c23fabdb785d94e71cc7bd822f63e0 (patch)
tree708cec819279d7625df3373adab2ad768df45b32 /gtk
parent30b328e79aada4b0d029879e11b58cf6ca2b0073 (diff)
downloadgdk-pixbuf-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')
-rw-r--r--gtk/gtkmenu.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index ee2f8a0e1..3e93a8e5c 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
{