summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJan D. <jan.h.d@swipnet.se>2010-11-20 14:50:55 +0100
committerJan D. <jan.h.d@swipnet.se>2010-11-20 14:50:55 +0100
commitd3a82a4fd9a2db6205bc7042eb30ab27338067ad (patch)
tree5b85dc369d0bf8c03274156a01620fafe2c4ad00 /src
parent4a6dcc6a1c0bd007c7b24559e2d58dc0d2ae8ab2 (diff)
downloademacs-d3a82a4fd9a2db6205bc7042eb30ab27338067ad.tar.gz
Fix bug 7425.
NOTE: When merging to trunk: xg_height_changed is xg_height_or_width_changed in trunk. * src/gtkutil.c (menubar_map_cb): New function. (xg_update_frame_menubar): Connect signal map to menubar_map_cb. Use 23 as menubar height if 0. (Bug#7425).
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog6
-rw-r--r--src/gtkutil.c30
2 files changed, 34 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 6a9aa6effa1..5c42a177516 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2010-11-20 Jan Djärv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (menubar_map_cb): New function (Bug#7425).
+ (xg_update_frame_menubar): Connect signal map to menubar_map_cb.
+ Use 23 as menubar height if 0. (Bug#7425).
+
2010-11-14 Jan Djärv <jan.h.d@swipnet.se>
* xsettings.c (init_gconf): Check HAVE_G_TYPE_INIT.
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 7a25bbb1e3f..7102823a814 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -2936,6 +2936,23 @@ xg_modify_menubar_widgets (menubar, f, val, deep_p,
gtk_widget_show_all (menubar);
}
+/* Callback called when the menu bar W is mapped.
+ Used to find the height of the menu bar if we didn't get it
+ after showing the widget. */
+
+static void
+menubar_map_cb (GtkWidget *w, gpointer user_data)
+{
+ GtkRequisition req;
+ FRAME_PTR f = (FRAME_PTR) user_data;
+ gtk_widget_size_request (w, &req);
+ if (FRAME_MENUBAR_HEIGHT (f) != req.height)
+ {
+ FRAME_MENUBAR_HEIGHT (f) = req.height;
+ xg_height_changed (f);
+ }
+}
+
/* Recompute all the widgets of frame F, when the menu bar has been
changed. Value is non-zero if widgets were updated. */
@@ -2958,10 +2975,19 @@ xg_update_frame_menubar (f)
FALSE, FALSE, 0);
gtk_box_reorder_child (GTK_BOX (x->vbox_widget), x->menubar_widget, 0);
+ g_signal_connect (x->menubar_widget, "map", G_CALLBACK (menubar_map_cb), f);
gtk_widget_show_all (x->menubar_widget);
gtk_widget_size_request (x->menubar_widget, &req);
- FRAME_MENUBAR_HEIGHT (f) = req.height;
- xg_height_changed (f);
+ /* If menu bar doesn't know its height yet, cheat a little so the frame
+ doesn't jump so much when resized later in menubar_map_cb. */
+ if (req.height == 0)
+ req.height = 23;
+
+ if (FRAME_MENUBAR_HEIGHT (f) != req.height)
+ {
+ FRAME_MENUBAR_HEIGHT (f) = req.height;
+ xg_height_changed (f);
+ }
UNBLOCK_INPUT;
return 1;