From d9448730f9098673a62a23d1cdfd27fedada3de8 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Sat, 28 Mar 2009 13:19:53 +0000 Subject: [PATCH] =?UTF-8?q?Bug=20555025=20=E2=80=93=20Action=20GEGL=20box?= =?UTF-8?q?=20widgets=20weirdness?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2009-03-28 Michael Natterer Bug 555025 – Action GEGL box widgets weirdness Must not set GDK_HINT_MIN_SIZE if we don't actually set a minimum size, or the window will be shrinkable to zero and it won't expand automatically when its contents' requisition grows. * app/widgets/gimpdialogfactory.[ch]: add hackish API gimp_dialog_factory_set,get_has_min_size() because GTK+ itself has no API for querying a window's GdkWindowHints. (gimp_dialog_factory_set_user_pos): set GDK_HINT_MIN_SIZE only if the window was being marked as having a minimum size using above new API. * app/widgets/gimptoolbox.c (gimp_toolbox_set_geometry) * app/display/gimpdisplayshell.c (gimp_display_shell_style_set): call gimp_dialog_factory_set_has_min_size (window, TRUE). svn path=/trunk/; revision=28224 --- ChangeLog | 20 ++++++++++++++++++++ app/display/gimpdisplayshell.c | 2 ++ app/widgets/gimpdialogfactory.c | 30 ++++++++++++++++++++++++++++-- app/widgets/gimpdialogfactory.h | 4 ++++ app/widgets/gimptoolbox.c | 2 ++ 5 files changed, 56 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 13553ef4fc..302844d63e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2009-03-28 Michael Natterer + + Bug 555025 – Action GEGL box widgets weirdness + + Must not set GDK_HINT_MIN_SIZE if we don't actually set a minimum + size, or the window will be shrinkable to zero and it won't + expand automatically when its contents' requisition grows. + + * app/widgets/gimpdialogfactory.[ch]: add hackish API + gimp_dialog_factory_set,get_has_min_size() because GTK+ itself + has no API for querying a window's GdkWindowHints. + + (gimp_dialog_factory_set_user_pos): set GDK_HINT_MIN_SIZE only if + the window was being marked as having a minimum size using above + new API. + + * app/widgets/gimptoolbox.c (gimp_toolbox_set_geometry) + * app/display/gimpdisplayshell.c (gimp_display_shell_style_set): + call gimp_dialog_factory_set_has_min_size (window, TRUE). + 2009-03-27 Sven Neumann Bug 576909 – "_Paste" and "_Paste as" have the same mnemonic diff --git a/app/display/gimpdisplayshell.c b/app/display/gimpdisplayshell.c index d8a5e45e04..88ff73fe0d 100644 --- a/app/display/gimpdisplayshell.c +++ b/app/display/gimpdisplayshell.c @@ -740,6 +740,8 @@ gimp_display_shell_style_set (GtkWidget *widget, gtk_window_set_geometry_hints (GTK_WINDOW (widget), NULL, &geometry, geometry_mask); + + gimp_dialog_factory_set_has_min_size (GTK_WINDOW (widget), TRUE); } static void diff --git a/app/widgets/gimpdialogfactory.c b/app/widgets/gimpdialogfactory.c index 3c5fda5e40..df9cd8dc04 100644 --- a/app/widgets/gimpdialogfactory.c +++ b/app/widgets/gimpdialogfactory.c @@ -1234,6 +1234,27 @@ gimp_dialog_factory_from_widget (GtkWidget *dialog, return g_object_get_qdata (G_OBJECT (dialog), gimp_dialog_factory_key); } +#define GIMP_DIALOG_FACTORY_MIN_SIZE_KEY "gimp-dialog-factory-min-size" + +void +gimp_dialog_factory_set_has_min_size (GtkWindow *window, + gboolean has_min_size) +{ + g_return_if_fail (GTK_IS_WINDOW (window)); + + g_object_set_data (G_OBJECT (window), GIMP_DIALOG_FACTORY_MIN_SIZE_KEY, + GINT_TO_POINTER (has_min_size ? TRUE : FALSE)); +} + +gboolean +gimp_dialog_factory_get_has_min_size (GtkWindow *window) +{ + g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE); + + return GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), + GIMP_DIALOG_FACTORY_MIN_SIZE_KEY)); +} + /* private functions */ @@ -1287,6 +1308,7 @@ gimp_dialog_factory_set_user_pos (GtkWidget *dialog, GdkEventConfigure *cevent, gpointer data) { + GdkWindowHints geometry_mask; #ifdef DEBUG_FACTORY GimpDialogFactoryEntry *entry; @@ -1301,9 +1323,13 @@ gimp_dialog_factory_set_user_pos (GtkWidget *dialog, gimp_dialog_factory_set_user_pos, data); + geometry_mask = GDK_HINT_USER_POS; + + if (gimp_dialog_factory_get_has_min_size (GTK_WINDOW (dialog))) + geometry_mask |= GDK_HINT_MIN_SIZE; + gtk_window_set_geometry_hints (GTK_WINDOW (dialog), NULL, NULL, - GDK_HINT_MIN_SIZE | - GDK_HINT_USER_POS); + geometry_mask); return FALSE; } diff --git a/app/widgets/gimpdialogfactory.h b/app/widgets/gimpdialogfactory.h index 9562152ffc..1b157999e6 100644 --- a/app/widgets/gimpdialogfactory.h +++ b/app/widgets/gimpdialogfactory.h @@ -178,5 +178,9 @@ GimpDialogFactory * gimp_dialog_factory_from_widget (GtkWidget *dialog, GimpDialogFactoryEntry **entry); +void gimp_dialog_factory_set_has_min_size (GtkWindow *window, + gboolean has_min_size); +gboolean gimp_dialog_factory_get_has_min_size (GtkWindow *window); + #endif /* __GIMP_DIALOG_FACTORY_H__ */ diff --git a/app/widgets/gimptoolbox.c b/app/widgets/gimptoolbox.c index a89a8de334..0ef36fc354 100644 --- a/app/widgets/gimptoolbox.c +++ b/app/widgets/gimptoolbox.c @@ -613,6 +613,8 @@ gimp_toolbox_set_geometry (GimpToolbox *toolbox) GDK_HINT_MIN_SIZE | GDK_HINT_RESIZE_INC | GDK_HINT_USER_POS); + + gimp_dialog_factory_set_has_min_size (GTK_WINDOW (toolbox), TRUE); } }