From 9849b292a9d524de374b501424e9499fe6964c83 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 14 Dec 2013 01:15:06 +0100 Subject: [PATCH] window: Sanitize size hint computation We don't want the maximum size to be smaller than the minimum size. Not just because it's wrong but also because when this happens the rest of GTK gets mighty confused and infloops resizing to min-size and max-size in turns causing a flickering window. Well, at least if you run X without a window manager. Or your window manager hasn't finished starting up. Private RHEL bug finding this issue: https://bugzilla.redhat.com/show_bug.cgi?id=1035409 --- gtk/gtkwindow.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 92b8f7e..5c6d018 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -9177,22 +9177,21 @@ gtk_window_compute_hints (GtkWindow *window, if (*new_flags & GDK_HINT_MAX_SIZE) { - if (new_geometry->max_width < 0) - new_geometry->max_width = requisition.width; - else + if (new_geometry->max_width >= 0) new_geometry->max_width += extra_width; + new_geometry->max_width = MAX (new_geometry->max_width, new_geometry->min_width); - if (new_geometry->max_height < 0) - new_geometry->max_height = requisition.height; - else + if (new_geometry->max_height >= 0) new_geometry->max_height += extra_height; + + new_geometry->max_height = MAX (new_geometry->max_height, new_geometry->min_height); } else if (!priv->resizable) { *new_flags |= GDK_HINT_MAX_SIZE; - new_geometry->max_width = requisition.width; - new_geometry->max_height = requisition.height; + new_geometry->max_width = new_geometry->min_width; + new_geometry->max_height = new_geometry->min_height; } *new_flags |= GDK_HINT_WIN_GRAVITY; -- 1.8.4.2