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)
{
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)

View File

@ -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,12 +2975,16 @@ 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);
if (width)
*width = logrect.width / PANGO_SCALE;
if (height)
*height = logrect.height / PANGO_SCALE;
#else
GtkRequisition req;
gtk_widget_size_request(label, &req);
if (width)
*width = req.width;
if (height)
*height = req.height;
#endif

View File

@ -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