aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ui/gtk/gui_utils.c20
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) {