diff options
author | Balint Reczey <balint@balintreczey.hu> | 2015-06-23 13:51:32 -0700 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2016-06-14 15:40:15 +0000 |
commit | 798f7e946e7ca4afa02ab46eb3f92de0595e76eb (patch) | |
tree | 1a285c725fa80a2ca474ad1e3ac917822b15e0fc /ui | |
parent | f8031fa50cc73ed6f243cd54db20abdf6bc179aa (diff) |
gtk: Allow restoring maximized windows as maximized
without losing window decorations on GNOME on the secondary monitor.
Bug: 11303
Change-Id: Ie8f541dba9d49f9fe5d4892a8dc1cd42091afe1d
Reviewed-on: https://code.wireshark.org/review/9077
Reviewed-by: Balint Reczey <balint@balintreczey.hu>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Petri-Dish: Peter Wu <peter@lekensteyn.nl>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/gtk/gui_utils.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/ui/gtk/gui_utils.c b/ui/gtk/gui_utils.c index c413d1728e..2e4a4b6b2a 100644 --- a/ui/gtk/gui_utils.c +++ b/ui/gtk/gui_utils.c @@ -60,6 +60,7 @@ #endif #define WINDOW_GEOM_KEY "window_geom" +#define WINDOW_DECORATION_SIZE 50 /* Set our window icon. The GDK documentation doesn't provide any actual documentation for gdk_window_set_icon(), so we'll steal @@ -422,6 +423,15 @@ window_adjust_if_obscured(window_geometry_t *geom) } #endif +/* detect broken GNOME shell fullscreen described in #11303 */ +static gboolean +broken_gnome_fullscreen(void) { + return (0 == g_strcmp0(g_getenv("XDG_CURRENT_DESKTOP"), "GNOME") && + (0 == g_strcmp0(g_getenv("GDMSESSION"), "gnome-shell") || + 0 == g_strcmp0(g_getenv("GDMSESSION"), "gnome-classic") || + 0 == g_strcmp0(g_getenv("GDMSESSION"), "gnome"))); +} + /* set the geometry of a window from window_new() */ void window_set_geometry(GtkWidget *widget, @@ -431,6 +441,12 @@ window_set_geometry(GtkWidget *widget, GdkRectangle viewable_area; gint monitor_num; + /* vertical offset to be set for fixing #11303, it makes room for window */ + /* titlebar */ + const gint y_offset = (geom->set_maximized && + geom->maximized && + broken_gnome_fullscreen())?WINDOW_DECORATION_SIZE:0; + /* as we now have the geometry from the recent file, set it */ /* if the window was minimized, x and y are -32000 (at least on Win32) */ if (geom->set_pos && geom->x != -32000 && geom->y != -32000) { @@ -459,14 +475,14 @@ window_set_geometry(GtkWidget *widget, gtk_window_move(GTK_WINDOW(widget), geom->x, - geom->y); + geom->y + y_offset); } if (geom->set_size) { gtk_window_resize(GTK_WINDOW(widget), /*gtk_widget_set_size_request(widget,*/ geom->width, - geom->height); + geom->height - y_offset); } if(geom->set_maximized) { |