From 8d7f026f625a02854b3214f7a54e778121d266bc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Sat, 20 Nov 2010 14:50:55 +0100 Subject: [PATCH] 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). --- src/ChangeLog | 6 ++++++ src/gtkutil.c | 30 ++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 6268dcf33ae..4655ea714ad 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2010-11-20 Jan Djärv + + * 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 * 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; -- 2.39.5