From: Simon Tatham Date: Mon, 24 Aug 2015 18:31:44 +0000 (+0100) Subject: Make string_width() work in GTK3. X-Git-Tag: 0.68~418 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=afe2c355cf89216942240c58c701fde77a20a567;p=PuTTY.git Make string_width() work in GTK3. This was another piece of code that determined text size by instantiating a GtkLabel and asking for its size, which I had to fix in gtkfont.c recently because that strategy doesn't work in GTK3. Replaced the implementation of string_width() with a call to the function I added in gtkfont.c, and now dialog boxes which depend on that for their width measurement (e.g. the one in reallyclose()) don't come out in silly sizes on GTK3 any more. --- diff --git a/unix/gtkdlg.c b/unix/gtkdlg.c index 74b735fe..a584501c 100644 --- a/unix/gtkdlg.c +++ b/unix/gtkdlg.c @@ -3428,11 +3428,9 @@ int messagebox(GtkWidget *parentwin, const char *title, const char *msg, int string_width(const char *text) { - GtkWidget *label = gtk_label_new(text); - GtkRequisition req; - gtk_widget_size_request(label, &req); - g_object_ref_sink(G_OBJECT(label)); - return req.width; + int ret; + get_label_text_dimensions(text, &ret, NULL); + return ret; } int reallyclose(void *frontend) diff --git a/unix/gtkfont.c b/unix/gtkfont.c index 95039910..97983618 100644 --- a/unix/gtkfont.c +++ b/unix/gtkfont.c @@ -2958,8 +2958,7 @@ static gint unifontsel_configure_area(GtkWidget *widget, return TRUE; } -static void get_label_text_dimensions(const char *text, - int *width, int *height) +void get_label_text_dimensions(const char *text, int *width, int *height) { /* * Determine the dimensions of a piece of text in the standard @@ -2976,13 +2975,17 @@ static void get_label_text_dimensions(const char *text, PangoLayout *layout = gtk_label_get_layout(GTK_LABEL(label)); PangoRectangle logrect; pango_layout_get_extents(layout, NULL, &logrect); - *width = logrect.width / PANGO_SCALE; - *height = logrect.height / PANGO_SCALE; + if (width) + *width = logrect.width / PANGO_SCALE; + if (height) + *height = logrect.height / PANGO_SCALE; #else GtkRequisition req; gtk_widget_size_request(label, &req); - *width = req.width; - *height = req.height; + if (width) + *width = req.width; + if (height) + *height = req.height; #endif g_object_ref_sink(G_OBJECT(label)); diff --git a/unix/unix.h b/unix/unix.h index 6359a2cd..fbe025ba 100644 --- a/unix/unix.h +++ b/unix/unix.h @@ -137,6 +137,9 @@ void unix_setup_config_box(struct controlbox *b, int midsession, int protocol); /* gtkcfg.c */ void gtk_setup_config_box(struct controlbox *b, int midsession, void *window); +/* Helper function which happens to be in gtkfont.c at the moment */ +void get_label_text_dimensions(const char *text, int *width, int *height); + /* * In the Unix Unicode layer, DEFAULT_CODEPAGE is a special value * which causes mb_to_wc and wc_to_mb to call _libc_ rather than