[gnome-terminal/wip/restore-geometry: 1/3] Fix chunked resize and --geometry option



commit fd99c3d7fa23c443a1bbf9adb0b8cd9beca4563d
Author: Sorokin Alexei <sor alexei meowr ru>
Date:   Mon Mar 7 21:45:46 2016 +0000

    Fix chunked resize and --geometry option
    
    Was caused by https://git.gnome.org/browse/gtk+/commit/?id=08974a1
    
    https://bugzilla.gnome.org/show_bug.cgi?id=760944

 src/terminal-options.c |    4 ----
 src/terminal-window.c  |   27 ++++++++++++++++++++++++---
 2 files changed, 24 insertions(+), 7 deletions(-)
---
diff --git a/src/terminal-options.c b/src/terminal-options.c
index cc51cf6..723ecfe 100644
--- a/src/terminal-options.c
+++ b/src/terminal-options.c
@@ -583,10 +583,6 @@ option_geometry_callback (const gchar *option_name,
 {
   TerminalOptions *options = data;
 
-  /* See https://bugzilla.gnome.org/show_bug.cgi?id=760944 */
-  if (gtk_check_version (3, 19, 5) == NULL)
-    return unsupported_option_callback (option_name, value, data, error);
-
   if (options->initial_windows)
     {
       InitialWindow *iw;
diff --git a/src/terminal-window.c b/src/terminal-window.c
index 80e54b0..4449052 100644
--- a/src/terminal-window.c
+++ b/src/terminal-window.c
@@ -3596,8 +3596,24 @@ terminal_window_update_geometry (TerminalWindow *window)
       padding.top + padding.bottom != priv->old_base_height ||
       widget != (GtkWidget*) priv->old_geometry_widget)
     {
-      hints.base_width = padding.left + padding.right;
-      hints.base_height = padding.top + padding.bottom;
+      int base_width = 0;
+      int base_height = 0;
+
+#if GTK_CHECK_VERSION (3, 19, 5)
+    {
+      GtkRequisition toplevel_request;
+      GtkRequisition widget_request;
+
+      gtk_widget_get_preferred_size (GTK_WIDGET (window), NULL, &toplevel_request);
+      gtk_widget_get_preferred_size (widget, NULL, &widget_request);
+
+      base_width = toplevel_request.width - widget_request.width;
+      base_height = toplevel_request.height - widget_request.height;
+    }
+#endif
+
+      hints.base_width = base_width + padding.left + padding.right;
+      hints.base_height = base_height + padding.top + padding.bottom;
 
 #define MIN_WIDTH_CHARS 4
 #define MIN_HEIGHT_CHARS 1
@@ -3605,12 +3621,17 @@ terminal_window_update_geometry (TerminalWindow *window)
       hints.width_inc = char_width;
       hints.height_inc = char_height;
 
-      /* min size is min size of just the geometry widget, remember. */
+      /* min size is min size of the whole window (gtk+ >= 3.19.5) or
+         just the geometry widget (older gtk+), remember. */
       hints.min_width = hints.base_width + hints.width_inc * MIN_WIDTH_CHARS;
       hints.min_height = hints.base_height + hints.height_inc * MIN_HEIGHT_CHARS;
       
       gtk_window_set_geometry_hints (GTK_WINDOW (window),
+#if GTK_CHECK_VERSION (3, 19, 5)
+                                     NULL,
+#else
                                      widget,
+#endif
                                      &hints,
                                      GDK_HINT_RESIZE_INC |
                                      GDK_HINT_MIN_SIZE |


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]