diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2018-12-23 17:58:16 +0200 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2020-01-28 15:16:29 +0200 |
commit | 3d8b03dc68774e35d80bdb6eebba2cce75551933 (patch) | |
tree | beb27953997c790e1d99672429bbdc3d28cbb5c7 | |
parent | 36ef44dd4d79501dc5962bf7923e5fcf9308e4a3 (diff) | |
download | metacity-3d8b03dc68774e35d80bdb6eebba2cce75551933.tar.gz |
screen: add support for _GTK_WORKAREAS_Dn
In addition to existing _NET_WORKAREA property set also new
_GTK_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
https://gitlab.freedesktop.org/xdg/xdg-specs/merge_requests/22
https://gitlab.gnome.org/GNOME/metacity/merge_requests/3
-rw-r--r-- | src/core/atomnames.h | 1 | ||||
-rw-r--r-- | src/core/screen.c | 47 |
2 files changed, 47 insertions, 1 deletions
diff --git a/src/core/atomnames.h b/src/core/atomnames.h index e44dc2f3..8e2b4593 100644 --- a/src/core/atomnames.h +++ b/src/core/atomnames.h @@ -60,6 +60,7 @@ item(_METACITY_TOGGLE_VERBOSE) item(_GTK_THEME_VARIANT) item(_GTK_FRAME_EXTENTS) item(_GTK_SHOW_WINDOW_MENU) +item(_GTK_WORKAREAS) item(_GNOME_PANEL_ACTION) item(_GNOME_PANEL_ACTION_MAIN_MENU) item(_GNOME_PANEL_ACTION_RUN_DIALOG) diff --git a/src/core/screen.c b/src/core/screen.c index 87474f74..5560bdd2 100644 --- a/src/core/screen.c +++ b/src/core/screen.c @@ -100,7 +100,8 @@ set_supported_hint (MetaScreen *screen) #undef EWMH_ATOMS_ONLY screen->display->atom__GTK_FRAME_EXTENTS, - screen->display->atom__GTK_SHOW_WINDOW_MENU + screen->display->atom__GTK_SHOW_WINDOW_MENU, + screen->display->atom__GTK_WORKAREAS }; XChangeProperty (screen->display->xdisplay, screen->xroot, @@ -1838,6 +1839,48 @@ meta_create_offscreen_window (Display *xdisplay, } static void +set_workspace_work_area_hint (MetaWorkspace *workspace, + MetaScreen *screen) +{ + unsigned long *data; + unsigned long *tmp; + int i; + gchar *workarea_name; + Atom workarea_atom; + + data = g_new (unsigned long, screen->n_monitor_infos * 4); + tmp = data; + + for (i = 0; i < screen->n_monitor_infos; i++) + { + MetaRectangle area; + + meta_workspace_get_work_area_for_monitor (workspace, i, &area); + + tmp[0] = area.x; + tmp[1] = area.y; + tmp[2] = area.width; + tmp[3] = area.height; + + tmp += 4; + } + + workarea_name = g_strdup_printf ("_GTK_WORKAREAS_D%d", + meta_workspace_index (workspace)); + + workarea_atom = XInternAtom (screen->display->xdisplay, workarea_name, False); + g_free (workarea_name); + + meta_error_trap_push (screen->display); + XChangeProperty (screen->display->xdisplay, screen->xroot, workarea_atom, + XA_CARDINAL, 32, PropModeReplace, + (guchar*) data, screen->n_monitor_infos * 4); + meta_error_trap_pop (screen->display); + + g_free (data); +} + +static void set_work_area_hint (MetaScreen *screen) { int num_workspaces; @@ -1857,6 +1900,8 @@ set_work_area_hint (MetaScreen *screen) if (workspace->screen == screen) { meta_workspace_get_work_area_all_monitors (workspace, &area); + set_workspace_work_area_hint (workspace, screen); + tmp[0] = area.x; tmp[1] = area.y; tmp[2] = area.width; |