[mutter/wip/muktupavels/work-areas-v2] x11-display: add support for _NET_WORKAREAS_Dn
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/muktupavels/work-areas-v2] x11-display: add support for _NET_WORKAREAS_Dn
- Date: Mon, 31 Dec 2018 15:16:22 +0000 (UTC)
commit 69e3f13fab6fa68b2130d8b354feba40907bd9e9
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Mon Dec 31 16:29:11 2018 +0200
x11-display: add support for _NET_WORKAREAS_Dn
In addition to existing property set also new _NET_WORKAREAS_Dn property
where n is desktop number (between 0 and _NET_NUMBER_OF_DESKTOPS - 1).
https://mail.gnome.org/archives/wm-spec-list/2018-December/msg00000.html
src/x11/atomnames.h | 1 +
src/x11/meta-x11-display.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+)
---
diff --git a/src/x11/atomnames.h b/src/x11/atomnames.h
index b61f47ff4..5032cbc07 100644
--- a/src/x11/atomnames.h
+++ b/src/x11/atomnames.h
@@ -141,6 +141,7 @@ item(_NET_WM_STATE_FULLSCREEN)
item(_NET_WM_PING)
item(_NET_WM_PID)
item(_NET_WORKAREA)
+item(_NET_WORKAREAS)
item(_NET_SHOWING_DESKTOP)
item(_NET_DESKTOP_LAYOUT)
item(_NET_DESKTOP_NAMES)
diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c
index 77fb091f6..fcca153e6 100644
--- a/src/x11/meta-x11-display.c
+++ b/src/x11/meta-x11-display.c
@@ -907,6 +907,57 @@ set_workspace_names (MetaX11Display *x11_display)
g_string_free (flattened, TRUE);
}
+static void
+set_workspace_work_area_hint (MetaWorkspace *workspace,
+ MetaX11Display *x11_display)
+{
+ MetaMonitorManager *monitor_manager;
+ GList *logical_monitors;
+ GList *l;
+ int num_monitors;
+ unsigned long *data;
+ unsigned long *tmp;
+ gchar *workarea_name;
+ Atom workarea_atom;
+
+ monitor_manager = meta_backend_get_monitor_manager (meta_get_backend ());
+ logical_monitors = meta_monitor_manager_get_logical_monitors (monitor_manager);
+ num_monitors = meta_monitor_manager_get_num_logical_monitors (monitor_manager);
+
+ data = g_new (unsigned long, num_monitors * 4);
+ tmp = data;
+
+ for (l = logical_monitors; l; l = l->next)
+ {
+ MetaRectangle area;
+
+ meta_workspace_get_work_area_for_logical_monitor (workspace, l->data, &area);
+
+ tmp[0] = area.x;
+ tmp[1] = area.y;
+ tmp[2] = area.width;
+ tmp[3] = area.height;
+
+ tmp += 4;
+ }
+
+ workarea_name = g_strdup_printf ("_NET_WORKAREAS_D%d",
+ meta_workspace_index (workspace));
+
+ workarea_atom = XInternAtom (x11_display->xdisplay, workarea_name, False);
+ g_free (workarea_name);
+
+ meta_x11_error_trap_push (x11_display);
+ XChangeProperty (x11_display->xdisplay,
+ x11_display->xroot,
+ workarea_atom,
+ XA_CARDINAL, 32, PropModeReplace,
+ (guchar*) data, num_monitors * 4);
+ meta_x11_error_trap_pop (x11_display);
+
+ g_free (data);
+}
+
static void
set_work_area_hint (MetaDisplay *display,
MetaX11Display *x11_display)
@@ -926,6 +977,8 @@ set_work_area_hint (MetaDisplay *display,
MetaWorkspace *workspace = l->data;
meta_workspace_get_work_area_all_monitors (workspace, &area);
+ set_workspace_work_area_hint (workspace, x11_display);
+
tmp[0] = area.x;
tmp[1] = area.y;
tmp[2] = area.width;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]