x11-display: 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/mutter/merge_requests/370
This commit is contained in:
parent
1ce933e281
commit
5e07478843
@ -63,6 +63,7 @@ item(_GTK_MENUBAR_OBJECT_PATH)
|
||||
item(_GTK_FRAME_EXTENTS)
|
||||
item(_GTK_SHOW_WINDOW_MENU)
|
||||
item(_GTK_EDGE_CONSTRAINTS)
|
||||
item(_GTK_WORKAREAS)
|
||||
item(_GNOME_WM_KEYBINDINGS)
|
||||
item(_GNOME_PANEL_ACTION)
|
||||
item(_GNOME_PANEL_ACTION_MAIN_MENU)
|
||||
|
@ -604,6 +604,7 @@ set_supported_hint (MetaX11Display *x11_display)
|
||||
x11_display->atom__GTK_FRAME_EXTENTS,
|
||||
x11_display->atom__GTK_SHOW_WINDOW_MENU,
|
||||
x11_display->atom__GTK_EDGE_CONSTRAINTS,
|
||||
x11_display->atom__GTK_WORKAREAS,
|
||||
};
|
||||
|
||||
XChangeProperty (x11_display->xdisplay,
|
||||
@ -913,6 +914,56 @@ 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;
|
||||
g_autofree char *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 ("_GTK_WORKAREAS_D%d",
|
||||
meta_workspace_index (workspace));
|
||||
|
||||
workarea_atom = XInternAtom (x11_display->xdisplay, workarea_name, False);
|
||||
|
||||
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)
|
||||
@ -932,6 +983,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;
|
||||
|
Loading…
Reference in New Issue
Block a user