- menu->torn_off = torn_off;
- menu->tearoff_active = torn_off;
-
- if (menu->torn_off)
- {
- if (gtk_widget_get_visible (GTK_WIDGET (menu)))
- gtk_menu_popdown (menu);
-
- if (!menu->tearoff_window)
- {
- GtkWidget *toplevel;
-
- menu->tearoff_window = g_object_new (GTK_TYPE_WINDOW,
- "type", GTK_WINDOW_TOPLEVEL,
- "screen", gtk_widget_get_screen (menu->toplevel),
- "app-paintable", TRUE,
- NULL);
-
- gtk_window_set_type_hint (GTK_WINDOW (menu->tearoff_window),
- GDK_WINDOW_TYPE_HINT_MENU);
- gtk_window_set_mnemonic_modifier (GTK_WINDOW (menu->tearoff_window), 0);
- g_signal_connect (menu->tearoff_window, "destroy",
- G_CALLBACK (tearoff_window_destroyed), menu);
- g_signal_connect (menu->tearoff_window, "event",
- G_CALLBACK (gtk_menu_window_event), menu);
-
- gtk_menu_update_title (menu);
-
- gtk_widget_realize (menu->tearoff_window);
-
- toplevel = gtk_menu_get_toplevel (GTK_WIDGET (menu));
- if (toplevel != NULL)
- gtk_window_set_transient_for (GTK_WINDOW (menu->tearoff_window),
- GTK_WINDOW (toplevel));
-
- menu->tearoff_hbox = gtk_hbox_new (FALSE, FALSE);
- gtk_container_add (GTK_CONTAINER (menu->tearoff_window), menu->tearoff_hbox);
-
- gdk_drawable_get_size (gtk_widget_get_window (GTK_WIDGET (menu)),
- &width, &height);
- menu->tearoff_adjustment =
- GTK_ADJUSTMENT (gtk_adjustment_new (0,
- 0,
- priv->requested_height,
- MENU_SCROLL_STEP2,
- height/2,
- height));
- g_object_connect (menu->tearoff_adjustment,
- "signal::value-changed", gtk_menu_scrollbar_changed, menu,
- NULL);
- menu->tearoff_scrollbar = gtk_vscrollbar_new (menu->tearoff_adjustment);
-
- gtk_box_pack_end (GTK_BOX (menu->tearoff_hbox),
- menu->tearoff_scrollbar,
- FALSE, FALSE, 0);
-
- if (menu->tearoff_adjustment->upper > height)
- gtk_widget_show (menu->tearoff_scrollbar);
-
- gtk_widget_show (menu->tearoff_hbox);
- }
-
- gtk_menu_reparent (menu, menu->tearoff_hbox, FALSE);
-
- gdk_drawable_get_size (gtk_widget_get_window (GTK_WIDGET (menu)),
- &width, NULL);
-
- /* Update menu->requisition
- */
- gtk_widget_size_request (GTK_WIDGET (menu), NULL);
-
- gtk_menu_set_tearoff_hints (menu, width);
-
- gtk_widget_realize (menu->tearoff_window);
- gtk_menu_position (menu);
-
- gtk_widget_show (GTK_WIDGET (menu));
- gtk_widget_show (menu->tearoff_window);
+ priv->torn_off = torn_off;
+ priv->tearoff_active = torn_off;
+
+ if (priv->torn_off)
+ {
+ if (gtk_widget_get_visible (GTK_WIDGET (menu)))
+ gtk_menu_popdown (menu);
+
+ if (!priv->tearoff_window)
+ {
+ GtkWidget *toplevel;
+
+ priv->tearoff_window = g_object_new (GTK_TYPE_WINDOW,
+ "type", GTK_WINDOW_TOPLEVEL,
+ "screen", gtk_widget_get_screen (priv->toplevel),
+ "app-paintable", TRUE,
+ NULL);
+
+ gtk_window_set_type_hint (GTK_WINDOW (priv->tearoff_window),
+ GDK_WINDOW_TYPE_HINT_MENU);
+ gtk_window_set_mnemonic_modifier (GTK_WINDOW (priv->tearoff_window), 0);
+ g_signal_connect (priv->tearoff_window, "destroy",
+ G_CALLBACK (tearoff_window_destroyed), menu);
+ g_signal_connect (priv->tearoff_window, "event",
+ G_CALLBACK (gtk_menu_window_event), menu);
+
+ gtk_menu_update_title (menu);
+
+ gtk_widget_realize (priv->tearoff_window);
+
+ toplevel = gtk_menu_get_toplevel (GTK_WIDGET (menu));
+ if (toplevel != NULL)
+ gtk_window_set_transient_for (GTK_WINDOW (priv->tearoff_window),
+ GTK_WINDOW (toplevel));
+
+ priv->tearoff_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+ gtk_container_add (GTK_CONTAINER (priv->tearoff_window),
+ priv->tearoff_hbox);
+
+ height = gdk_window_get_height (gtk_widget_get_window (GTK_WIDGET (menu)));
+ priv->tearoff_adjustment = gtk_adjustment_new (0,
+ 0, priv->requested_height,
+ MENU_SCROLL_STEP2,
+ height/2,
+ height);
+ g_object_connect (priv->tearoff_adjustment,
+ "signal::value-changed", gtk_menu_scrollbar_changed, menu,
+ NULL);
+ priv->tearoff_scrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, priv->tearoff_adjustment);
+
+ gtk_box_pack_end (GTK_BOX (priv->tearoff_hbox),
+ priv->tearoff_scrollbar,
+ FALSE, FALSE, 0);
+
+ if (gtk_adjustment_get_upper (priv->tearoff_adjustment) > height)
+ gtk_widget_show (priv->tearoff_scrollbar);
+
+ gtk_widget_show (priv->tearoff_hbox);
+ }
+
+ gtk_menu_reparent (menu, priv->tearoff_hbox, FALSE);
+
+ /* Update menu->requisition */
+ gtk_widget_get_preferred_size (GTK_WIDGET (menu), NULL, NULL);