From a3f3cd053c85f62aba6e8bef844cfd29b75c9255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 27 Jun 2025 11:21:41 +0200 Subject: [PATCH] Backport implementation for _GTK_WORKAREAS_D# X11 property Related: RHEL-87743 --- ...ay-add-support-for-_GTK_WORKAREAS_Dn.patch | 111 ++++++++++++++++++ mutter.spec | 9 +- 2 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 0001-x11-display-add-support-for-_GTK_WORKAREAS_Dn.patch diff --git a/0001-x11-display-add-support-for-_GTK_WORKAREAS_Dn.patch b/0001-x11-display-add-support-for-_GTK_WORKAREAS_Dn.patch new file mode 100644 index 0000000..c71eb6b --- /dev/null +++ b/0001-x11-display-add-support-for-_GTK_WORKAREAS_Dn.patch @@ -0,0 +1,111 @@ +From 5e07478843893af969601fa0c4ed49d2bb95b04e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Alberts=20Muktup=C4=81vels?= +Date: Mon, 31 Dec 2018 16:29:11 +0200 +Subject: [PATCH] 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 +--- + 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 4c1b49ede0..4b25b099af 100644 +--- a/src/x11/atomnames.h ++++ b/src/x11/atomnames.h +@@ -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) +diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c +index 3e59c96c67..87d8a2bfaf 100644 +--- a/src/x11/meta-x11-display.c ++++ b/src/x11/meta-x11-display.c +@@ -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; +-- +2.49.0 + diff --git a/mutter.spec b/mutter.spec index ec9ec4d..be41059 100644 --- a/mutter.spec +++ b/mutter.spec @@ -8,7 +8,7 @@ Name: mutter Version: 3.32.2 -Release: 73%{?dist} +Release: 74%{?dist} Summary: Window and compositing manager based on Clutter License: GPLv2+ @@ -220,6 +220,9 @@ Patch532: 0001-core-Change-MetaWaylandTextInput-event-forwarding-to.patch # RHEL-35286 Patch533: 0001-x11-iconcache-Turn-icons-from-WM_HINTS-pixmaps-to-ca.patch +# RHEL-87743 +Patch534: 0001-x11-display-add-support-for-_GTK_WORKAREAS_Dn.patch + BuildRequires: chrpath BuildRequires: pango-devel BuildRequires: startup-notification-devel @@ -361,6 +364,10 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop %{_datadir}/mutter-%{mutter_api_version}/tests %changelog +* Fri Jun 27 2025 Jonas Ådahl - 3.32.2-74 +- Backport implementation for _GTK_WORKAREAS_D# X11 property + Related: RHEL-87743 + * Wed Dec 04 2024 Jonas Ådahl - 3.32.2-73 - Fix handling of more WM_HINTS window icon types Resolves: RHEL-35286