1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 09:58:01 +00:00

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.
This commit is contained in:
Simon Tatham 2015-08-24 19:31:44 +01:00
parent 22ed04d00e
commit afe2c355cf
3 changed files with 15 additions and 11 deletions

View File

@ -3428,11 +3428,9 @@ int messagebox(GtkWidget *parentwin, const char *title, const char *msg,
int string_width(const char *text) int string_width(const char *text)
{ {
GtkWidget *label = gtk_label_new(text); int ret;
GtkRequisition req; get_label_text_dimensions(text, &ret, NULL);
gtk_widget_size_request(label, &req); return ret;
g_object_ref_sink(G_OBJECT(label));
return req.width;
} }
int reallyclose(void *frontend) int reallyclose(void *frontend)

View File

@ -2958,8 +2958,7 @@ static gint unifontsel_configure_area(GtkWidget *widget,
return TRUE; return TRUE;
} }
static void get_label_text_dimensions(const char *text, void get_label_text_dimensions(const char *text, int *width, int *height)
int *width, int *height)
{ {
/* /*
* Determine the dimensions of a piece of text in the standard * 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)); PangoLayout *layout = gtk_label_get_layout(GTK_LABEL(label));
PangoRectangle logrect; PangoRectangle logrect;
pango_layout_get_extents(layout, NULL, &logrect); pango_layout_get_extents(layout, NULL, &logrect);
*width = logrect.width / PANGO_SCALE; if (width)
*height = logrect.height / PANGO_SCALE; *width = logrect.width / PANGO_SCALE;
if (height)
*height = logrect.height / PANGO_SCALE;
#else #else
GtkRequisition req; GtkRequisition req;
gtk_widget_size_request(label, &req); gtk_widget_size_request(label, &req);
*width = req.width; if (width)
*height = req.height; *width = req.width;
if (height)
*height = req.height;
#endif #endif
g_object_ref_sink(G_OBJECT(label)); g_object_ref_sink(G_OBJECT(label));

View File

@ -137,6 +137,9 @@ void unix_setup_config_box(struct controlbox *b, int midsession, int protocol);
/* gtkcfg.c */ /* gtkcfg.c */
void gtk_setup_config_box(struct controlbox *b, int midsession, void *window); 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 * 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 * which causes mb_to_wc and wc_to_mb to call _libc_ rather than