GtkWindow: Allow setting size from geometry

If you set a geometry widget via gtk_window_set_geometry_hints() it
becomes very hard to compute appropriate toplevel sizes in pixels
to make the window a particular size. Synthesizing strings and passing
them to gtk_window_parse_geometry() is possible, but to avoid
avoid such ugliness, add functions:

 gtk_window_set_default_geometry()
 gtk_window_resize_to_geometry()

That act like gtk_window_set_default_size() and
gtk_window_resize() but are in terms of the resize increments of the
geometry widget.

https://bugzilla.gnome.org/show_bug.cgi?id=631796
This commit is contained in:
Owen W. Taylor
2010-10-09 22:38:54 -04:00
parent 519d758711
commit a4a7a611f2
3 changed files with 161 additions and 47 deletions

View File

@ -73,6 +73,19 @@ on_drawing_area_draw (GtkWidget *drawing_area,
return FALSE;
}
static void
on_resize_clicked (GtkWidget *button,
gpointer data)
{
GtkWidget *window = gtk_widget_get_toplevel (button);
GdkWindowHints mask = GPOINTER_TO_UINT(data);
if ((mask & GDK_HINT_RESIZE_INC) != 0)
gtk_window_resize_to_geometry (GTK_WINDOW (window), 8, 8);
else
gtk_window_resize_to_geometry (GTK_WINDOW (window), 8 * GRID_SIZE, 8 * GRID_SIZE);
}
static void
create_window (GdkWindowHints mask)
{
@ -80,6 +93,7 @@ create_window (GdkWindowHints mask)
GtkWidget *drawing_area;
GtkWidget *table;
GtkWidget *label;
GtkWidget *button;
GdkGeometry geometry;
GString *label_text = g_string_new (NULL);
int border = 0;
@ -130,6 +144,15 @@ create_window (GdkWindowHints mask)
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
0, 0);
button = gtk_button_new_with_label ("Resize");
g_signal_connect (button, "clicked",
G_CALLBACK (on_resize_clicked),
GUINT_TO_POINTER (mask));
gtk_table_attach (GTK_TABLE (table), button,
0, 2, 2, 3,
GTK_EXPAND, 0,
0, 8);
gtk_container_add (GTK_CONTAINER (window), table);
if ((mask & GDK_HINT_BASE_SIZE) != 0)
@ -169,6 +192,12 @@ create_window (GdkWindowHints mask)
{
if (geometry_string)
gtk_window_parse_geometry (GTK_WINDOW (window), geometry_string);
else
gtk_window_set_default_geometry (GTK_WINDOW (window), 10, 10);
}
else
{
gtk_window_set_default_geometry (GTK_WINDOW (window), 10 * GRID_SIZE, 10 * GRID_SIZE);
}
gtk_widget_show (window);