[gtk+/gtk-3-10] window: Don't assume 640x480 max default size



commit ca41e8b4ff3d3ffc7c6d97edd8791376373111cb
Author: Benjamin Otte <otte redhat com>
Date:   Mon Nov 25 02:40:05 2013 +0100

    window: Don't assume 640x480 max default size
    
    Instead, use the monitor's work area.
    
    This might have unforseen side effects that warrant a later revert, such
    as:
    - Apparently some WMs assume maximizing when a window is maximum screen
      size.
    - WMs might not shrink the window by the decorations' size when it tries
      to be fullscreen.
    - Applications might have buggy size request code that causes weirdly
      sized windows.

 gtk/gtkwindow.c |   31 ++++++++++++++-----------------
 1 files changed, 14 insertions(+), 17 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index e9d13ed..cf80839 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -5679,13 +5679,6 @@ gtk_window_unmap (GtkWidget *widget)
  *    information from the windowing system.)
  */
 
-/* We use these for now to not make windows too big by accident. Note
- * that we still clamp these numbers by screen size. Also note that
- * minimum size still overrides this. So keep your windows small! :)
- */
-#define MAX_DEFAULT_WINDOW_WIDTH 640
-#define MAX_DEFAULT_WINDOW_HEIGHT 480
-
 static void
 gtk_window_guess_default_size (GtkWindow *window,
                                gint      *width,
@@ -5693,27 +5686,31 @@ gtk_window_guess_default_size (GtkWindow *window,
 {
   GtkWidget *widget;
   GdkScreen *screen;
+  GdkWindow *gdkwindow;
+  GdkRectangle workarea;
   int minimum, natural;
 
   widget = GTK_WIDGET (window);
   screen = gtk_widget_get_screen (widget);
+  gdkwindow = gtk_widget_get_window (GTK_WIDGET (window));
 
-  *width = gdk_screen_get_width (screen);
-  *height = gdk_screen_get_height (screen);
-
-  if (*width >= *height)
+  if (gdkwindow)
     {
-      /* landscape */
-      *width = MIN (*width, MAX_DEFAULT_WINDOW_WIDTH);
-      *height = MIN (*height, MAX_DEFAULT_WINDOW_HEIGHT);
+      gdk_screen_get_monitor_workarea (screen,
+                                       gdk_screen_get_monitor_at_window (screen, gdkwindow),
+                                       &workarea);
     }
   else
     {
-      /* portrait */
-      *width = MIN (*width, MAX_DEFAULT_WINDOW_HEIGHT);
-      *height = MIN (*height, MAX_DEFAULT_WINDOW_WIDTH);
+      /* XXX: Figure out what screen we appear on */
+      gdk_screen_get_monitor_workarea (screen,
+                                       0,
+                                       &workarea);
     }
 
+  *width = workarea.width;
+  *height = workarea.height;
+
   if (gtk_widget_get_request_mode (widget) == GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT)
     {
       gtk_widget_get_preferred_height (widget, &minimum, &natural);


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