From f18655c641dbe2ca2a28627538898be575667e1a Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 25 Nov 2013 02:40:05 +0100 Subject: [PATCH] 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 file changed, 14 insertions(+), 17 deletions(-) diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 27fc7d1da5..056260f337 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -5728,13 +5728,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, @@ -5742,27 +5735,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);