|
|
|
@@ -904,6 +904,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)
|
|
|
|
@@ -923,6 +974,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;
|
|
|
|
|