[gtk+] x11: Neuter workarea in fullscreen scenarios
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] x11: Neuter workarea in fullscreen scenarios
- Date: Thu, 25 Sep 2014 00:36:36 +0000 (UTC)
commit 46ff5ef6ce71322b85f05655617280c0b25ec7f6
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Sep 24 20:20:00 2014 -0400
x11: Neuter workarea in fullscreen scenarios
If we have a fullscreen window that covers a monitor, desktop
chrome is not relevant for placing of menus and other popups.
Therefore, return the full monitor geometry instead of the
workarea in this case.
https://bugzilla.gnome.org/show_bug.cgi?id=737251
gdk/x11/gdkscreen-x11.c | 35 ++++++++++++++++++++++++++++++++++-
1 files changed, 34 insertions(+), 1 deletions(-)
---
diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c
index 34c1989..e700213 100644
--- a/gdk/x11/gdkscreen-x11.c
+++ b/gdk/x11/gdkscreen-x11.c
@@ -378,6 +378,38 @@ out:
XFree (ret_workarea);
}
+static gboolean
+gdk_x11_screen_monitor_has_fullscreen_window (GdkScreen *screen,
+ gint monitor)
+{
+ GList *toplevels, *l;
+ GdkWindow *window;
+ gboolean has_fullscreen;
+
+ toplevels = gdk_screen_get_toplevel_windows (screen);
+
+ has_fullscreen = FALSE;
+
+ for (l = toplevels; l; l = l->next)
+ {
+ window = l->data;
+
+ if ((gdk_window_get_state (window) & GDK_WINDOW_STATE_FULLSCREEN) == 0)
+ continue;
+
+ if (gdk_window_get_fullscreen_mode (window) == GDK_FULLSCREEN_ON_ALL_MONITORS ||
+ gdk_screen_get_monitor_at_window (screen, window) == monitor)
+ {
+ has_fullscreen = TRUE;
+ break;
+ }
+ }
+
+ g_list_free (toplevels);
+
+ return has_fullscreen;
+}
+
static void
gdk_x11_screen_get_monitor_workarea (GdkScreen *screen,
gint monitor_num,
@@ -393,7 +425,8 @@ gdk_x11_screen_get_monitor_workarea (GdkScreen *screen,
* but the primary monitor. Since that is where the 'desktop
* chrome' usually lives, this works ok in practice.
*/
- if (monitor_num == GDK_X11_SCREEN (screen)->primary_monitor)
+ if (monitor_num == GDK_X11_SCREEN (screen)->primary_monitor &&
+ !gdk_x11_screen_monitor_has_fullscreen_window (screen, monitor_num))
{
get_work_area (screen, &workarea);
if (gdk_rectangle_intersect (dest, &workarea, &workarea))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]