X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/0a8bf3afca415fec94742cf830622b22f186062c..d64d97e537301a9787a569982d67eed8ecdabe8b:/src/gtkutil.c diff --git a/src/gtkutil.c b/src/gtkutil.c index 95ac04b8ff..d6e4dcebcd 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -983,7 +983,7 @@ xg_frame_set_char_size (FRAME_PTR f, int cols, int rows) size as fast as possible. For unmapped windows, we can set rows/cols. When the frame is mapped again we will (hopefully) get the correct size. */ - if (f->async_visible) + if (FRAME_VISIBLE_P (f)) { /* Must call this to flush out events */ (void)gtk_events_pending (); @@ -1650,8 +1650,7 @@ xg_dialog_response_cb (GtkDialog *w, static Lisp_Object pop_down_dialog (Lisp_Object arg) { - struct Lisp_Save_Value *p = XSAVE_VALUE (arg); - struct xg_dialog_data *dd = (struct xg_dialog_data *) p->pointer; + struct xg_dialog_data *dd = XSAVE_POINTER (arg, 0); block_input (); if (dd->w) gtk_widget_destroy (dd->w); @@ -1717,7 +1716,7 @@ xg_dialog_run (FRAME_PTR f, GtkWidget *w) g_signal_connect (G_OBJECT (w), "delete-event", G_CALLBACK (gtk_true), NULL); gtk_widget_show (w); - record_unwind_protect (pop_down_dialog, make_save_value (&dd, 0)); + record_unwind_protect (pop_down_dialog, make_save_pointer (&dd)); (void) xg_maybe_add_timer (&dd); g_main_loop_run (dd.loop); @@ -3795,13 +3794,17 @@ xg_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar, adj = gtk_range_get_adjustment (GTK_RANGE (wscroll)); - /* We do the same as for MOTIF in xterm.c, assume 30 chars per line - rather than the real portion value. This makes the thumb less likely - to resize and that looks better. */ - portion = WINDOW_TOTAL_LINES (XWINDOW (bar->window)) * 30; - /* When the thumb is at the bottom, position == whole. - So we need to increase `whole' to make space for the thumb. */ - whole += portion; + if (scroll_bar_adjust_thumb_portion_p) + { + /* We do the same as for MOTIF in xterm.c, use 30 chars per + line rather than the real portion value. This makes the + thumb less likely to resize and that looks better. */ + portion = WINDOW_TOTAL_LINES (XWINDOW (bar->window)) * 30; + + /* When the thumb is at the bottom, position == whole. + So we need to increase `whole' to make space for the thumb. */ + whole += portion; + } if (whole <= 0) top = 0, shown = 1; @@ -4350,6 +4353,21 @@ xg_pack_tool_bar (FRAME_PTR f, Lisp_Object pos) x->toolbar_is_packed = true; } +static bool xg_update_tool_bar_sizes (FRAME_PTR f); + +static void +tb_size_cb (GtkWidget *widget, + GdkRectangle *allocation, + gpointer user_data) +{ + /* When tool bar is created it has one preferred size. But when size is + allocated between widgets, it may get another. So we must update + size hints if tool bar size changes. Seen on Fedora 18 at least. */ + FRAME_PTR f = (FRAME_PTR) user_data; + if (xg_update_tool_bar_sizes (f)) + x_wm_set_size_hint (f, 0, 0); +} + /* Create a tool bar for frame F. */ static void @@ -4381,6 +4399,8 @@ xg_create_tool_bar (FRAME_PTR f) gtk_toolbar_set_style (GTK_TOOLBAR (x->toolbar_widget), GTK_TOOLBAR_ICONS); toolbar_set_orientation (x->toolbar_widget, GTK_ORIENTATION_HORIZONTAL); + g_signal_connect (x->toolbar_widget, "size-allocate", + G_CALLBACK (tb_size_cb), f); #if GTK_CHECK_VERSION (3, 3, 6) gsty = gtk_widget_get_style_context (x->toolbar_widget); gtk_style_context_add_class (gsty, "primary-toolbar"); @@ -5041,7 +5061,9 @@ xg_initialize (void) "cancel", 0); update_theme_scrollbar_width (); +#ifdef HAVE_FREETYPE x_last_font_name = NULL; +#endif } #endif /* USE_GTK */