Compare commits
8 Commits
imports/c8
...
c8
| Author | SHA1 | Date | |
|---|---|---|---|
| f425b21371 | |||
| d5ada973fb | |||
| 37f54985fd | |||
| 116fdf7355 | |||
|
|
253b53fd8c | ||
| 8fc44febdf | |||
|
|
0c3a8ebce2 | ||
|
|
443a0d9f34 |
@ -1,4 +1,4 @@
|
||||
From 471174ba6cf517baf8ff73e903202e1c73b6ec74 Mon Sep 17 00:00:00 2001
|
||||
From 01803de944153694501cb64bb4250ba76ed945f5 Mon Sep 17 00:00:00 2001
|
||||
From: Carlos Garnacho <carlosg@gnome.org>
|
||||
Date: Thu, 19 Jan 2017 15:03:41 +0100
|
||||
Subject: [PATCH] backends/x11: Support synaptics configuration
|
||||
@ -6,11 +6,11 @@ Subject: [PATCH] backends/x11: Support synaptics configuration
|
||||
The code is taken mostly as-is from g-s-d, so we can drag the
|
||||
dead horse a bit longer.
|
||||
---
|
||||
src/backends/x11/meta-input-settings-x11.c | 268 +++++++++++++++++++++
|
||||
1 file changed, 268 insertions(+)
|
||||
src/backends/x11/meta-input-settings-x11.c | 267 +++++++++++++++++++++
|
||||
1 file changed, 267 insertions(+)
|
||||
|
||||
diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
|
||||
index 89f07ee1f..051a1c605 100644
|
||||
index 89f07ee1f..b2f5ca060 100644
|
||||
--- a/src/backends/x11/meta-input-settings-x11.c
|
||||
+++ b/src/backends/x11/meta-input-settings-x11.c
|
||||
@@ -26,6 +26,7 @@
|
||||
@ -21,7 +21,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
#include <string.h>
|
||||
#include <X11/Xatom.h>
|
||||
#include <X11/extensions/XInput2.h>
|
||||
@@ -162,6 +163,180 @@ change_property (ClutterInputDevice *device,
|
||||
@@ -162,6 +163,179 @@ change_property (ClutterInputDevice *device,
|
||||
meta_XFree (data_ret);
|
||||
}
|
||||
|
||||
@ -45,7 +45,6 @@ index 89f07ee1f..051a1c605 100644
|
||||
+ gboolean left_handed)
|
||||
+{
|
||||
+ MetaDisplay *display = meta_get_display ();
|
||||
+ MetaX11Display *x11_display = display ? display->x11_display : NULL;
|
||||
+ MetaBackend *backend = meta_get_backend ();
|
||||
+ Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||
+ XDevice *xdevice;
|
||||
@ -69,8 +68,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
+ XA_INTEGER, 8, tap_action, 7);
|
||||
+ meta_XFree (tap_action);
|
||||
+
|
||||
+ if (x11_display)
|
||||
+ meta_x11_error_trap_push (x11_display);
|
||||
+ clutter_x11_trap_x_errors();
|
||||
+ buttons = g_new (guchar, buttons_capacity);
|
||||
+ n_buttons = XGetDeviceButtonMapping (xdisplay, xdevice,
|
||||
+ buttons, buttons_capacity);
|
||||
@ -90,7 +88,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
+ XSetDeviceButtonMapping (xdisplay, xdevice, buttons, n_buttons);
|
||||
+ g_free (buttons);
|
||||
+
|
||||
+ if (x11_display && meta_x11_error_trap_pop_with_return (x11_display))
|
||||
+ if (clutter_x11_untrap_x_errors())
|
||||
+ {
|
||||
+ g_warning ("Could not set synaptics touchpad left-handed for %s",
|
||||
+ clutter_input_device_get_device_name (device));
|
||||
@ -105,7 +103,6 @@ index 89f07ee1f..051a1c605 100644
|
||||
+ gdouble speed)
|
||||
+{
|
||||
+ MetaDisplay *display = meta_get_display ();
|
||||
+ MetaX11Display *x11_display = display ? display->x11_display : NULL;
|
||||
+ MetaBackend *backend = meta_get_backend ();
|
||||
+ Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||
+ XDevice *xdevice;
|
||||
@ -118,7 +115,10 @@ index 89f07ee1f..051a1c605 100644
|
||||
+ if (!xdevice)
|
||||
+ return;
|
||||
+ /* Get the list of feedbacks for the device */
|
||||
+ clutter_x11_trap_x_errors();
|
||||
+ states = XGetFeedbackControl (xdisplay, xdevice, &num_feedbacks);
|
||||
+ if (clutter_x11_untrap_x_errors())
|
||||
+ return;
|
||||
+ if (!states)
|
||||
+ return;
|
||||
+
|
||||
@ -163,8 +163,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
+ denominator = -1;
|
||||
+ }
|
||||
+
|
||||
+ if (x11_display)
|
||||
+ meta_x11_error_trap_push (x11_display);
|
||||
+ clutter_x11_trap_x_errors();
|
||||
+
|
||||
+ state = (XFeedbackState *) states;
|
||||
+
|
||||
@ -189,7 +188,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
+ state = (XFeedbackState *) ((char *) state + state->length);
|
||||
+ }
|
||||
+
|
||||
+ if (x11_display && meta_x11_error_trap_pop_with_return (x11_display))
|
||||
+ if (clutter_x11_untrap_x_errors())
|
||||
+ {
|
||||
+ g_warning ("Could not set synaptics touchpad acceleration for %s",
|
||||
+ clutter_input_device_get_device_name (device));
|
||||
@ -202,7 +201,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
static void
|
||||
meta_input_settings_x11_set_send_events (MetaInputSettings *settings,
|
||||
ClutterInputDevice *device,
|
||||
@@ -170,6 +345,13 @@ meta_input_settings_x11_set_send_events (MetaInputSettings *settings,
|
||||
@@ -170,6 +344,13 @@ meta_input_settings_x11_set_send_events (MetaInputSettings *settings,
|
||||
guchar values[2] = { 0 }; /* disabled, disabled-on-external-mouse */
|
||||
guchar *available;
|
||||
|
||||
@ -216,7 +215,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
available = get_property (device, "libinput Send Events Modes Available",
|
||||
XA_INTEGER, 8, 2);
|
||||
if (!available)
|
||||
@@ -222,6 +404,12 @@ meta_input_settings_x11_set_speed (MetaInputSettings *settings,
|
||||
@@ -222,6 +403,12 @@ meta_input_settings_x11_set_speed (MetaInputSettings *settings,
|
||||
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||
gfloat value = speed;
|
||||
|
||||
@ -229,7 +228,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
change_property (device, "libinput Accel Speed",
|
||||
XInternAtom (xdisplay, "FLOAT", False),
|
||||
32, &value, 1);
|
||||
@@ -248,6 +436,19 @@ meta_input_settings_x11_set_left_handed (MetaInputSettings *settings,
|
||||
@@ -248,6 +435,19 @@ meta_input_settings_x11_set_left_handed (MetaInputSettings *settings,
|
||||
else
|
||||
{
|
||||
value = enabled ? 1 : 0;
|
||||
@ -249,7 +248,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
change_property (device, "libinput Left Handed Enabled",
|
||||
XA_INTEGER, 8, &value, 1);
|
||||
}
|
||||
@@ -271,6 +472,20 @@ meta_input_settings_x11_set_tap_enabled (MetaInputSettings *settings,
|
||||
@@ -271,6 +471,20 @@ meta_input_settings_x11_set_tap_enabled (MetaInputSettings *settings,
|
||||
{
|
||||
guchar value = (enabled) ? 1 : 0;
|
||||
|
||||
@ -270,7 +269,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
change_property (device, "libinput Tapping Enabled",
|
||||
XA_INTEGER, 8, &value, 1);
|
||||
}
|
||||
@@ -293,6 +508,27 @@ meta_input_settings_x11_set_invert_scroll (MetaInputSettings *settings,
|
||||
@@ -293,6 +507,27 @@ meta_input_settings_x11_set_invert_scroll (MetaInputSettings *settings,
|
||||
{
|
||||
guchar value = (inverted) ? 1 : 0;
|
||||
|
||||
@ -298,7 +297,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
change_property (device, "libinput Natural Scrolling Enabled",
|
||||
XA_INTEGER, 8, &value, 1);
|
||||
}
|
||||
@@ -306,6 +542,22 @@ meta_input_settings_x11_set_edge_scroll (MetaInputSettings *settings,
|
||||
@@ -306,6 +541,22 @@ meta_input_settings_x11_set_edge_scroll (MetaInputSettings *settings,
|
||||
guchar *current = NULL;
|
||||
guchar *available = NULL;
|
||||
|
||||
@ -321,7 +320,7 @@ index 89f07ee1f..051a1c605 100644
|
||||
available = get_property (device, "libinput Scroll Methods Available",
|
||||
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
|
||||
if (!available || !available[SCROLL_METHOD_FIELD_EDGE])
|
||||
@@ -335,6 +587,22 @@ meta_input_settings_x11_set_two_finger_scroll (MetaInputSettings *set
|
||||
@@ -335,6 +586,22 @@ meta_input_settings_x11_set_two_finger_scroll (MetaInputSettings *set
|
||||
guchar *current = NULL;
|
||||
guchar *available = NULL;
|
||||
|
||||
@ -345,5 +344,5 @@ index 89f07ee1f..051a1c605 100644
|
||||
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
|
||||
if (!available || !available[SCROLL_METHOD_FIELD_2FG])
|
||||
--
|
||||
2.21.0
|
||||
2.36.1
|
||||
|
||||
|
||||
@ -0,0 +1,163 @@
|
||||
From bfd49687aa862a7e69d0d7fe76f803ae180d40c2 Mon Sep 17 00:00:00 2001
|
||||
From: Carlos Garnacho <carlosg@gnome.org>
|
||||
Date: Wed, 7 Jun 2023 11:04:15 +0200
|
||||
Subject: [PATCH] core: Change MetaWaylandTextInput event forwarding to IMs
|
||||
|
||||
We need to juggle with some things here to keep key event ordering
|
||||
and accounting consistent.
|
||||
|
||||
The keyboard internal state changes (and maybe modifier event emission)
|
||||
happening through meta_wayland_seat_update() should ideally happen
|
||||
from the same key events that reach the client through wl_keyboard.key,
|
||||
so that wl_keyboard.modifier events are emitted in the right relative
|
||||
order to other key events.
|
||||
|
||||
In order to fix this, we need to decide at an earlier point whether
|
||||
the event will get processed through IM (and maybe be reinjected),
|
||||
thus ignored in wait of IM-postprocessed events.
|
||||
|
||||
This means we pay less attention to whether events are first-hand
|
||||
hardware events for some things and go with the event that does
|
||||
eventually reach to us (hardware or IM).
|
||||
|
||||
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5890
|
||||
---
|
||||
src/core/events.c | 8 ++++++++
|
||||
src/wayland/meta-wayland-keyboard.c | 8 --------
|
||||
src/wayland/meta-wayland-seat.c | 30 ++++++++++++++++++++++-------
|
||||
src/wayland/meta-wayland-seat.h | 3 +++
|
||||
src/wayland/meta-wayland.c | 7 +++++++
|
||||
src/wayland/meta-wayland.h | 4 ++++
|
||||
6 files changed, 45 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/src/core/events.c b/src/core/events.c
|
||||
index 5b8e49fc79..19d701779b 100644
|
||||
--- a/src/core/events.c
|
||||
+++ b/src/core/events.c
|
||||
@@ -207,6 +207,14 @@ meta_display_handle_event (MetaDisplay *display,
|
||||
if (meta_is_wayland_compositor ())
|
||||
{
|
||||
compositor = meta_wayland_compositor_get_default ();
|
||||
+
|
||||
+ if (display->event_route == META_EVENT_ROUTE_NORMAL &&
|
||||
+ meta_wayland_compositor_handle_text_input_event (compositor, event))
|
||||
+ {
|
||||
+ bypass_wayland = bypass_clutter = TRUE;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
meta_wayland_compositor_update (compositor, event);
|
||||
}
|
||||
#endif
|
||||
diff --git a/src/wayland/meta-wayland-keyboard.c b/src/wayland/meta-wayland-keyboard.c
|
||||
index 8b23d76ce7..84f46bcf8e 100644
|
||||
--- a/src/wayland/meta-wayland-keyboard.c
|
||||
+++ b/src/wayland/meta-wayland-keyboard.c
|
||||
@@ -753,14 +753,6 @@ meta_wayland_keyboard_update (MetaWaylandKeyboard *keyboard,
|
||||
{
|
||||
gboolean is_press = event->type == CLUTTER_KEY_PRESS;
|
||||
|
||||
- /* Only handle real, non-synthetic, events here. The IM is free to reemit
|
||||
- * key events (incl. modifiers), handling those additionally will result
|
||||
- * in doubly-pressed keys.
|
||||
- */
|
||||
- if ((event->flags &
|
||||
- (CLUTTER_EVENT_FLAG_SYNTHETIC | CLUTTER_EVENT_FLAG_INPUT_METHOD)) != 0)
|
||||
- return;
|
||||
-
|
||||
/* If we get a key event but still have pending modifier state
|
||||
* changes from a previous event that didn't get cleared, we need to
|
||||
* send that state right away so that the new key event can be
|
||||
diff --git a/src/wayland/meta-wayland-seat.c b/src/wayland/meta-wayland-seat.c
|
||||
index 91fe376ffe..dcf420201f 100644
|
||||
--- a/src/wayland/meta-wayland-seat.c
|
||||
+++ b/src/wayland/meta-wayland-seat.c
|
||||
@@ -362,6 +362,29 @@ meta_wayland_seat_update (MetaWaylandSeat *seat,
|
||||
}
|
||||
}
|
||||
|
||||
+gboolean
|
||||
+meta_wayland_seat_handle_text_input_event (MetaWaylandSeat *seat,
|
||||
+ const ClutterEvent *event)
|
||||
+{
|
||||
+ switch (event->type)
|
||||
+ {
|
||||
+ case CLUTTER_KEY_PRESS:
|
||||
+ case CLUTTER_KEY_RELEASE:
|
||||
+ if (meta_wayland_text_input_handle_event (seat->text_input, event))
|
||||
+ return TRUE;
|
||||
+
|
||||
+ if (meta_wayland_gtk_text_input_handle_event (seat->gtk_text_input,
|
||||
+ event))
|
||||
+ return TRUE;
|
||||
+
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
gboolean
|
||||
meta_wayland_seat_handle_event (MetaWaylandSeat *seat,
|
||||
const ClutterEvent *event)
|
||||
@@ -384,13 +407,6 @@ meta_wayland_seat_handle_event (MetaWaylandSeat *seat,
|
||||
break;
|
||||
case CLUTTER_KEY_PRESS:
|
||||
case CLUTTER_KEY_RELEASE:
|
||||
- if (meta_wayland_text_input_handle_event (seat->text_input, event))
|
||||
- return TRUE;
|
||||
-
|
||||
- if (meta_wayland_gtk_text_input_handle_event (seat->gtk_text_input,
|
||||
- event))
|
||||
- return TRUE;
|
||||
-
|
||||
if (meta_wayland_seat_has_keyboard (seat))
|
||||
return meta_wayland_keyboard_handle_event (seat->keyboard,
|
||||
(const ClutterKeyEvent *) event);
|
||||
diff --git a/src/wayland/meta-wayland-seat.h b/src/wayland/meta-wayland-seat.h
|
||||
index 3a744d0580..da20e69d8d 100644
|
||||
--- a/src/wayland/meta-wayland-seat.h
|
||||
+++ b/src/wayland/meta-wayland-seat.h
|
||||
@@ -82,4 +82,7 @@ gboolean meta_wayland_seat_has_pointer (MetaWaylandSeat *seat);
|
||||
|
||||
gboolean meta_wayland_seat_has_touch (MetaWaylandSeat *seat);
|
||||
|
||||
+gboolean meta_wayland_seat_handle_text_input_event (MetaWaylandSeat *seat,
|
||||
+ const ClutterEvent *event);
|
||||
+
|
||||
#endif /* META_WAYLAND_SEAT_H */
|
||||
diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c
|
||||
index a593f0a7b7..24a68f1e06 100644
|
||||
--- a/src/wayland/meta-wayland.c
|
||||
+++ b/src/wayland/meta-wayland.c
|
||||
@@ -565,3 +565,10 @@ meta_wayland_compositor_notify_surface_id (MetaWaylandCompositor *compositor,
|
||||
meta_wayland_compositor_remove_surface_association (compositor, id);
|
||||
}
|
||||
}
|
||||
+
|
||||
+gboolean
|
||||
+meta_wayland_compositor_handle_text_input_event (MetaWaylandCompositor *compositor,
|
||||
+ const ClutterEvent *event)
|
||||
+{
|
||||
+ return meta_wayland_seat_handle_text_input_event (compositor->seat, event);
|
||||
+}
|
||||
diff --git a/src/wayland/meta-wayland.h b/src/wayland/meta-wayland.h
|
||||
index 2a0aa11400..b5281d2014 100644
|
||||
--- a/src/wayland/meta-wayland.h
|
||||
+++ b/src/wayland/meta-wayland.h
|
||||
@@ -87,6 +87,10 @@ META_EXPORT_TEST
|
||||
void meta_wayland_compositor_schedule_surface_association (MetaWaylandCompositor *compositor,
|
||||
int id,
|
||||
MetaWindow *window);
|
||||
+
|
||||
+gboolean meta_wayland_compositor_handle_text_input_event (MetaWaylandCompositor *compositor,
|
||||
+ const ClutterEvent *event);
|
||||
+
|
||||
META_EXPORT_TEST
|
||||
void meta_wayland_compositor_notify_surface_id (MetaWaylandCompositor *compositor,
|
||||
int id,
|
||||
--
|
||||
2.40.1
|
||||
|
||||
@ -0,0 +1,81 @@
|
||||
From cf16c0d16b42215f35dcede6163235ad5ec1734b Mon Sep 17 00:00:00 2001
|
||||
From: Mario Limonciello <mario.limonciello@amd.com>
|
||||
Date: Thu, 18 Aug 2022 13:36:20 -0500
|
||||
Subject: [PATCH] output/kms: Add more heuristics to decide when to offer
|
||||
fallback modes
|
||||
|
||||
If the panel is connected via eDP and supports more than one mode
|
||||
at different resolutions don't try to add more.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2586>
|
||||
(cherry picked from commit 96aa0fb8536eca579ceb1b17d83e19cf9e3e9e81)
|
||||
---
|
||||
src/backends/native/meta-output-kms.c | 45 ++++++++++++++++++++++-----
|
||||
1 file changed, 38 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c
|
||||
index f3cc543c4d..44c25c5648 100644
|
||||
--- a/src/backends/native/meta-output-kms.c
|
||||
+++ b/src/backends/native/meta-output-kms.c
|
||||
@@ -505,6 +505,43 @@ compare_modes (const void *one,
|
||||
return g_strcmp0 (b->name, a->name);
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+are_all_modes_equally_sized (MetaOutput *output)
|
||||
+{
|
||||
+ MetaCrtcMode *base = output->modes[0];
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 1; i < output->n_modes; i++)
|
||||
+ {
|
||||
+ MetaCrtcMode *crtc_mode = output->modes[i];
|
||||
+
|
||||
+ if (base->width != crtc_mode->width ||
|
||||
+ base->height != crtc_mode->height)
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+maybe_add_fallback_modes (MetaOutput *output,
|
||||
+ MetaGpuKms *gpu_kms)
|
||||
+{
|
||||
+ MetaOutputKms *output_kms = output->driver_private;
|
||||
+
|
||||
+ if (!output_kms->has_scaling)
|
||||
+ return;
|
||||
+
|
||||
+ if (output->n_modes == 0)
|
||||
+ return;
|
||||
+
|
||||
+ if (output_kms->connector->connector_type == DRM_MODE_CONNECTOR_eDP &&
|
||||
+ !are_all_modes_equally_sized (output))
|
||||
+ return;
|
||||
+
|
||||
+ add_common_modes (output, gpu_kms);
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
init_output_modes (MetaOutput *output,
|
||||
MetaGpuKms *gpu_kms,
|
||||
@@ -528,13 +565,7 @@ init_output_modes (MetaOutput *output,
|
||||
output->preferred_mode = output->modes[i];
|
||||
}
|
||||
|
||||
- /* FIXME: MSC feature bit? */
|
||||
- /* Presume that if the output supports scaling, then we have
|
||||
- * a panel fitter capable of adjusting any mode to suit.
|
||||
- */
|
||||
- if (output_kms->has_scaling)
|
||||
- add_common_modes (output, gpu_kms);
|
||||
-
|
||||
+ maybe_add_fallback_modes (output, gpu_kms);
|
||||
if (!output->modes)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
--
|
||||
2.37.1
|
||||
|
||||
@ -0,0 +1,172 @@
|
||||
From 66e2e438b8796351a72bfec2024ee41bbde77780 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Thu, 6 Apr 2023 18:40:41 +0200
|
||||
Subject: [PATCH] renderer-native: Queue fail safe callbacks when mode set
|
||||
failed
|
||||
|
||||
This allows to recover, e.g. Ctrl-Alt-F# and using any other monitor
|
||||
that managed to turn on.
|
||||
---
|
||||
src/backends/native/meta-crtc-kms.c | 19 ++++++++++
|
||||
src/backends/native/meta-crtc-kms.h | 5 +++
|
||||
src/backends/native/meta-gpu-kms.c | 10 +++++
|
||||
src/backends/native/meta-renderer-native.c | 43 ++++++++++++++++++++++
|
||||
4 files changed, 77 insertions(+)
|
||||
|
||||
diff --git a/src/backends/native/meta-crtc-kms.c b/src/backends/native/meta-crtc-kms.c
|
||||
index 8374376d5..44f271eb5 100644
|
||||
--- a/src/backends/native/meta-crtc-kms.c
|
||||
+++ b/src/backends/native/meta-crtc-kms.c
|
||||
@@ -52,6 +52,8 @@ typedef struct _MetaCrtcKms
|
||||
* value: owned GArray* (uint64_t modifier), or NULL
|
||||
*/
|
||||
GHashTable *formats_modifiers;
|
||||
+
|
||||
+ gboolean is_active;
|
||||
} MetaCrtcKms;
|
||||
|
||||
/**
|
||||
@@ -540,3 +542,20 @@ meta_create_kms_crtc (MetaGpuKms *gpu_kms,
|
||||
|
||||
return crtc;
|
||||
}
|
||||
+
|
||||
+void
|
||||
+meta_crtc_kms_set_active (MetaCrtc *crtc,
|
||||
+ gboolean is_active)
|
||||
+{
|
||||
+ MetaCrtcKms *crtc_kms = crtc->driver_private;
|
||||
+
|
||||
+ crtc_kms->is_active = is_active;
|
||||
+}
|
||||
+
|
||||
+gboolean
|
||||
+meta_crtc_kms_is_active (MetaCrtc *crtc)
|
||||
+{
|
||||
+ MetaCrtcKms *crtc_kms = crtc->driver_private;
|
||||
+
|
||||
+ return crtc_kms->is_active;
|
||||
+}
|
||||
diff --git a/src/backends/native/meta-crtc-kms.h b/src/backends/native/meta-crtc-kms.h
|
||||
index 456f4400a..666aebcaf 100644
|
||||
--- a/src/backends/native/meta-crtc-kms.h
|
||||
+++ b/src/backends/native/meta-crtc-kms.h
|
||||
@@ -58,4 +58,9 @@ MetaCrtc * meta_create_kms_crtc (MetaGpuKms *gpu_kms,
|
||||
drmModeCrtc *drm_crtc,
|
||||
unsigned int crtc_index);
|
||||
|
||||
+void meta_crtc_kms_set_active (MetaCrtc *crtc,
|
||||
+ gboolean is_active);
|
||||
+
|
||||
+gboolean meta_crtc_kms_is_active (MetaCrtc *crtc);
|
||||
+
|
||||
#endif /* META_CRTC_KMS_H */
|
||||
diff --git a/src/backends/native/meta-gpu-kms.c b/src/backends/native/meta-gpu-kms.c
|
||||
index dc93abb7b..5f7a48730 100644
|
||||
--- a/src/backends/native/meta-gpu-kms.c
|
||||
+++ b/src/backends/native/meta-gpu-kms.c
|
||||
@@ -169,9 +169,12 @@ meta_gpu_kms_apply_crtc_mode (MetaGpuKms *gpu_kms,
|
||||
else
|
||||
g_warning ("Failed to disable CRTC");
|
||||
g_free (connectors);
|
||||
+ meta_crtc_kms_set_active (crtc, FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+ meta_crtc_kms_set_active (crtc, !!mode);
|
||||
+
|
||||
g_free (connectors);
|
||||
|
||||
return TRUE;
|
||||
@@ -278,6 +281,13 @@ meta_gpu_kms_flip_crtc (MetaGpuKms *gpu_kms,
|
||||
g_assert (meta_monitor_manager_get_power_save_mode (monitor_manager) ==
|
||||
META_POWER_SAVE_ON);
|
||||
|
||||
+ if (!meta_crtc_kms_is_active (crtc))
|
||||
+ {
|
||||
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
|
||||
+ "CRTC is not active");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
get_crtc_drm_connectors (gpu, crtc, &connectors, &n_connectors);
|
||||
g_assert (n_connectors > 0);
|
||||
g_free (connectors);
|
||||
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
|
||||
index 62ca4bcbd..76e311508 100644
|
||||
--- a/src/backends/native/meta-renderer-native.c
|
||||
+++ b/src/backends/native/meta-renderer-native.c
|
||||
@@ -217,6 +217,9 @@ struct _MetaRendererNative
|
||||
|
||||
GList *power_save_page_flip_closures;
|
||||
guint power_save_page_flip_source_id;
|
||||
+
|
||||
+ GList *fail_safe_page_flip_closures;
|
||||
+ guint fail_safe_page_flip_source_id;
|
||||
};
|
||||
|
||||
static void
|
||||
@@ -2048,6 +2051,34 @@ flip_crtc (MetaLogicalMonitor *logical_monitor,
|
||||
}
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+fail_safe_page_flip_cb (gpointer user_data)
|
||||
+{
|
||||
+ MetaRendererNative *renderer_native = user_data;
|
||||
+
|
||||
+ g_list_free_full (renderer_native->fail_safe_page_flip_closures,
|
||||
+ (GDestroyNotify) g_closure_unref);
|
||||
+ renderer_native->fail_safe_page_flip_closures = NULL;
|
||||
+ renderer_native->fail_safe_page_flip_source_id = 0;
|
||||
+
|
||||
+ return G_SOURCE_REMOVE;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+queue_fail_safe_page_flip (MetaRendererNative *renderer_native,
|
||||
+ GClosure *flip_closure)
|
||||
+{
|
||||
+ if (!renderer_native->fail_safe_page_flip_source_id)
|
||||
+ {
|
||||
+ renderer_native->fail_safe_page_flip_source_id =
|
||||
+ g_idle_add (fail_safe_page_flip_cb, renderer_native);
|
||||
+ }
|
||||
+
|
||||
+ renderer_native->fail_safe_page_flip_closures =
|
||||
+ g_list_prepend (renderer_native->fail_safe_page_flip_closures,
|
||||
+ g_closure_ref (flip_closure));
|
||||
+}
|
||||
+
|
||||
static void
|
||||
meta_onscreen_native_flip_crtcs (CoglOnscreen *onscreen)
|
||||
{
|
||||
@@ -2093,6 +2124,11 @@ meta_onscreen_native_flip_crtcs (CoglOnscreen *onscreen)
|
||||
*/
|
||||
if (!data.did_flip && data.did_mode_set)
|
||||
meta_onscreen_native_swap_drm_fb (onscreen);
|
||||
+ else if (!data.did_flip)
|
||||
+ {
|
||||
+ meta_onscreen_native_swap_drm_fb (onscreen);
|
||||
+ queue_fail_safe_page_flip (renderer_native, flip_closure);
|
||||
+ }
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4549,6 +4585,13 @@ meta_renderer_native_finalize (GObject *object)
|
||||
g_source_remove (renderer_native->power_save_page_flip_source_id);
|
||||
}
|
||||
|
||||
+ if (renderer_native->fail_safe_page_flip_closures)
|
||||
+ {
|
||||
+ g_list_free_full (renderer_native->fail_safe_page_flip_closures,
|
||||
+ (GDestroyNotify) g_closure_unref);
|
||||
+ g_source_remove (renderer_native->fail_safe_page_flip_source_id);
|
||||
+ }
|
||||
+
|
||||
g_hash_table_destroy (renderer_native->gpu_datas);
|
||||
g_clear_object (&renderer_native->gles3);
|
||||
|
||||
--
|
||||
2.39.2
|
||||
|
||||
111
SOURCES/0001-x11-display-add-support-for-_GTK_WORKAREAS_Dn.patch
Normal file
111
SOURCES/0001-x11-display-add-support-for-_GTK_WORKAREAS_Dn.patch
Normal file
@ -0,0 +1,111 @@
|
||||
From 5e07478843893af969601fa0c4ed49d2bb95b04e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Alberts=20Muktup=C4=81vels?= <alberts.muktupavels@gmail.com>
|
||||
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
|
||||
|
||||
@ -0,0 +1,101 @@
|
||||
From eb99d91c61d1a7e33ee6c8efa47ba7214cf913e3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@redhat.com>
|
||||
Date: Wed, 4 Dec 2024 14:04:45 +0100
|
||||
Subject: [PATCH] x11/iconcache: Turn icons from WM_HINTS pixmaps to cairo
|
||||
image surface
|
||||
|
||||
There were two problems with how windows icons coming from WM_HINTS were handled:
|
||||
|
||||
Only xlib cairo surfaces directly from Pixmap's were created, while the
|
||||
gnome-shell image cache only supported handling image surfaces. Address this by
|
||||
creating a cairo image surface, and paint the pixmap cairo surface onto it,
|
||||
later discarding the pixmap surface.
|
||||
|
||||
Cairo surfaces were only created given a matching X11 visual. This only worked
|
||||
for pixmaps with a bit depth of 24 or higher, meaning bitmap pixmaps got
|
||||
discarded. Address this by creating bitmap surfaces using
|
||||
cairo_xlib_surface_create_for_bitmap(), then using the bitmap surface as a mask
|
||||
drawing it using black on a white surface.
|
||||
---
|
||||
src/x11/iconcache.c | 57 +++++++++++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 52 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/x11/iconcache.c b/src/x11/iconcache.c
|
||||
index 521c77b8d2..f085a5ec1b 100644
|
||||
--- a/src/x11/iconcache.c
|
||||
+++ b/src/x11/iconcache.c
|
||||
@@ -293,7 +293,6 @@ surface_from_pixmap (Display *xdisplay, Pixmap xpixmap,
|
||||
int width, int height)
|
||||
{
|
||||
Window root_return;
|
||||
- XVisualInfo visual_info;
|
||||
int x_ret, y_ret;
|
||||
unsigned int w_ret, h_ret, bw_ret, depth_ret;
|
||||
|
||||
@@ -301,11 +300,59 @@ surface_from_pixmap (Display *xdisplay, Pixmap xpixmap,
|
||||
&x_ret, &y_ret, &w_ret, &h_ret, &bw_ret, &depth_ret))
|
||||
return NULL;
|
||||
|
||||
- if (!XMatchVisualInfo (xdisplay, DefaultScreen (xdisplay),
|
||||
- depth_ret, TrueColor, &visual_info))
|
||||
- return NULL;
|
||||
+ if (depth_ret == 1)
|
||||
+ {
|
||||
+ cairo_surface_t *bitmap_surface;
|
||||
+ cairo_surface_t *icon_surface;
|
||||
+ cairo_t *cr;
|
||||
|
||||
- return cairo_xlib_surface_create (xdisplay, xpixmap, visual_info.visual, w_ret, h_ret);
|
||||
+ bitmap_surface =
|
||||
+ cairo_xlib_surface_create_for_bitmap (xdisplay,
|
||||
+ xpixmap,
|
||||
+ DefaultScreenOfDisplay (xdisplay),
|
||||
+ w_ret,
|
||||
+ h_ret);
|
||||
+
|
||||
+ icon_surface = cairo_surface_create_similar_image (bitmap_surface,
|
||||
+ CAIRO_FORMAT_ARGB32,
|
||||
+ w_ret, h_ret);
|
||||
+ cr = cairo_create (icon_surface);
|
||||
+ cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 1.0);
|
||||
+ cairo_fill (cr);
|
||||
+ cairo_paint (cr);
|
||||
+ cairo_set_source_surface (cr, bitmap_surface, 0, 0);
|
||||
+ cairo_set_operator (cr, CAIRO_OPERATOR_MULTIPLY);
|
||||
+ cairo_paint_with_alpha (cr, 1.0);
|
||||
+ cairo_destroy (cr);
|
||||
+ cairo_surface_destroy (bitmap_surface);
|
||||
+ return icon_surface;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ XVisualInfo visual_info;
|
||||
+ cairo_surface_t *pixmap_surface;
|
||||
+ cairo_surface_t *icon_surface;
|
||||
+ cairo_t *cr;
|
||||
+
|
||||
+ if (!XMatchVisualInfo (xdisplay, DefaultScreen (xdisplay),
|
||||
+ depth_ret, TrueColor, &visual_info))
|
||||
+ return NULL;
|
||||
+
|
||||
+ pixmap_surface = cairo_xlib_surface_create (xdisplay,
|
||||
+ xpixmap,
|
||||
+ visual_info.visual,
|
||||
+ w_ret,
|
||||
+ h_ret);
|
||||
+ icon_surface = cairo_surface_create_similar_image (pixmap_surface,
|
||||
+ CAIRO_FORMAT_ARGB32,
|
||||
+ w_ret, h_ret);
|
||||
+ cr = cairo_create (icon_surface);
|
||||
+ cairo_set_source_surface (cr, pixmap_surface, 0, 0);
|
||||
+ cairo_paint (cr);
|
||||
+ cairo_destroy (cr);
|
||||
+ cairo_surface_destroy (pixmap_surface);
|
||||
+ return icon_surface;
|
||||
+ }
|
||||
}
|
||||
|
||||
static gboolean
|
||||
--
|
||||
2.44.0.501.g19981daefd.dirty
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
From 3f7ba6739773f43a3ad2a5d26cb8c3365f77cc00 Mon Sep 17 00:00:00 2001
|
||||
From 08734c2df6bee5426cf75cdf1fa3013af1664d94 Mon Sep 17 00:00:00 2001
|
||||
From: Rui Matos <tiagomatos@gmail.com>
|
||||
Date: Mon, 9 Oct 2017 18:39:52 +0200
|
||||
Subject: [PATCH 1/3] backends/x11: Add a synaptics check for two finger scroll
|
||||
@ -13,10 +13,10 @@ isn't.
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
|
||||
index 051a1c605..887bc8b42 100644
|
||||
index 16a3ff33d..7ad304704 100644
|
||||
--- a/src/backends/x11/meta-input-settings-x11.c
|
||||
+++ b/src/backends/x11/meta-input-settings-x11.c
|
||||
@@ -630,6 +630,17 @@ meta_input_settings_x11_has_two_finger_scroll (MetaInputSettings *settings,
|
||||
@@ -626,6 +626,17 @@ meta_input_settings_x11_has_two_finger_scroll (MetaInputSettings *settings,
|
||||
guchar *available = NULL;
|
||||
gboolean has_two_finger = TRUE;
|
||||
|
||||
@ -35,10 +35,9 @@ index 051a1c605..887bc8b42 100644
|
||||
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
|
||||
if (!available || !available[SCROLL_METHOD_FIELD_2FG])
|
||||
--
|
||||
2.21.0
|
||||
2.36.1
|
||||
|
||||
|
||||
From 717561b28f35e05d40fb941baba781436a0abf68 Mon Sep 17 00:00:00 2001
|
||||
From 11a8b8b33582a68e037e7b9e8396af0748bba67a Mon Sep 17 00:00:00 2001
|
||||
From: Rui Matos <tiagomatos@gmail.com>
|
||||
Date: Mon, 9 Oct 2017 18:55:56 +0200
|
||||
Subject: [PATCH 2/3] backends/x11: Add disable while typing support for
|
||||
@ -51,7 +50,7 @@ syndaemon when the synaptics driver is being used.
|
||||
1 file changed, 112 insertions(+)
|
||||
|
||||
diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
|
||||
index 887bc8b42..12a592c75 100644
|
||||
index 7ad304704..743f4a7ce 100644
|
||||
--- a/src/backends/x11/meta-input-settings-x11.c
|
||||
+++ b/src/backends/x11/meta-input-settings-x11.c
|
||||
@@ -35,6 +35,9 @@
|
||||
@ -73,7 +72,7 @@ index 887bc8b42..12a592c75 100644
|
||||
} MetaInputSettingsX11Private;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaInputSettingsX11, meta_input_settings_x11,
|
||||
@@ -337,6 +342,107 @@ change_synaptics_speed (ClutterInputDevice *device,
|
||||
@@ -333,6 +338,107 @@ change_synaptics_speed (ClutterInputDevice *device,
|
||||
XCloseDevice (xdisplay, xdevice);
|
||||
}
|
||||
|
||||
@ -181,7 +180,7 @@ index 887bc8b42..12a592c75 100644
|
||||
static void
|
||||
meta_input_settings_x11_set_send_events (MetaInputSettings *settings,
|
||||
ClutterInputDevice *device,
|
||||
@@ -461,6 +567,12 @@ meta_input_settings_x11_set_disable_while_typing (MetaInputSettings *settings,
|
||||
@@ -457,6 +563,12 @@ meta_input_settings_x11_set_disable_while_typing (MetaInputSettings *settings,
|
||||
{
|
||||
guchar value = (enabled) ? 1 : 0;
|
||||
|
||||
@ -195,10 +194,9 @@ index 887bc8b42..12a592c75 100644
|
||||
XA_INTEGER, 8, &value, 1);
|
||||
}
|
||||
--
|
||||
2.21.0
|
||||
2.36.1
|
||||
|
||||
|
||||
From 0afa6d0940ca4f5ffafd24effd2c414963a44277 Mon Sep 17 00:00:00 2001
|
||||
From fd2923d5c79a60bbd80bf231adf5e1ae7f83d264 Mon Sep 17 00:00:00 2001
|
||||
From: Rui Matos <tiagomatos@gmail.com>
|
||||
Date: Tue, 10 Oct 2017 19:07:27 +0200
|
||||
Subject: [PATCH 3/3] backends/x11: Support plain old X device configuration
|
||||
@ -210,10 +208,10 @@ bits specific for xorg-x11-drv-evdev devices.
|
||||
1 file changed, 74 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
|
||||
index 12a592c75..80e5ed10e 100644
|
||||
index 743f4a7ce..85f24e92b 100644
|
||||
--- a/src/backends/x11/meta-input-settings-x11.c
|
||||
+++ b/src/backends/x11/meta-input-settings-x11.c
|
||||
@@ -182,36 +182,36 @@ is_device_synaptics (ClutterInputDevice *device)
|
||||
@@ -182,35 +182,35 @@ is_device_synaptics (ClutterInputDevice *device)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -239,7 +237,6 @@ index 12a592c75..80e5ed10e 100644
|
||||
+ gboolean left_handed)
|
||||
{
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
MetaX11Display *x11_display = display ? display->x11_display : NULL;
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||
XDevice *xdevice;
|
||||
@ -264,12 +261,12 @@ index 12a592c75..80e5ed10e 100644
|
||||
- XA_INTEGER, 8, tap_action, 7);
|
||||
- meta_XFree (tap_action);
|
||||
-
|
||||
if (x11_display)
|
||||
meta_x11_error_trap_push (x11_display);
|
||||
clutter_x11_trap_x_errors();
|
||||
buttons = g_new (guchar, buttons_capacity);
|
||||
@@ -235,17 +235,39 @@ change_synaptics_tap_left_handed (ClutterInputDevice *device,
|
||||
n_buttons = XGetDeviceButtonMapping (xdisplay, xdevice,
|
||||
@@ -233,17 +233,39 @@ change_synaptics_tap_left_handed (ClutterInputDevice *device,
|
||||
|
||||
if (x11_display && meta_x11_error_trap_pop_with_return (x11_display))
|
||||
if (clutter_x11_untrap_x_errors())
|
||||
{
|
||||
- g_warning ("Could not set synaptics touchpad left-handed for %s",
|
||||
+ g_warning ("Could not set left-handed for %s",
|
||||
@ -310,8 +307,8 @@ index 12a592c75..80e5ed10e 100644
|
||||
+ gdouble speed)
|
||||
{
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
MetaX11Display *x11_display = display ? display->x11_display : NULL;
|
||||
@@ -342,6 +364,23 @@ change_synaptics_speed (ClutterInputDevice *device,
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
@@ -338,6 +360,23 @@ change_synaptics_speed (ClutterInputDevice *device,
|
||||
XCloseDevice (xdisplay, xdevice);
|
||||
}
|
||||
|
||||
@ -335,7 +332,7 @@ index 12a592c75..80e5ed10e 100644
|
||||
/* Ensure that syndaemon dies together with us, to avoid running several of
|
||||
* them */
|
||||
static void
|
||||
@@ -510,9 +549,10 @@ meta_input_settings_x11_set_speed (MetaInputSettings *settings,
|
||||
@@ -506,9 +545,10 @@ meta_input_settings_x11_set_speed (MetaInputSettings *settings,
|
||||
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||
gfloat value = speed;
|
||||
|
||||
@ -348,7 +345,7 @@ index 12a592c75..80e5ed10e 100644
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -554,6 +594,11 @@ meta_input_settings_x11_set_left_handed (MetaInputSettings *settings,
|
||||
@@ -550,6 +590,11 @@ meta_input_settings_x11_set_left_handed (MetaInputSettings *settings,
|
||||
g_object_unref (settings);
|
||||
return;
|
||||
}
|
||||
@ -360,7 +357,7 @@ index 12a592c75..80e5ed10e 100644
|
||||
|
||||
change_property (device, "libinput Left Handed Enabled",
|
||||
XA_INTEGER, 8, &value, 1);
|
||||
@@ -767,6 +812,12 @@ meta_input_settings_x11_set_scroll_button (MetaInputSettings *settings,
|
||||
@@ -763,6 +808,12 @@ meta_input_settings_x11_set_scroll_button (MetaInputSettings *settings,
|
||||
ClutterInputDevice *device,
|
||||
guint button)
|
||||
{
|
||||
@ -374,5 +371,5 @@ index 12a592c75..80e5ed10e 100644
|
||||
XA_INTEGER, 32, &button, 1);
|
||||
}
|
||||
--
|
||||
2.21.0
|
||||
2.36.1
|
||||
|
||||
|
||||
45
SOURCES/mutter-screencast-dmabuf-i915-only.patch
Normal file
45
SOURCES/mutter-screencast-dmabuf-i915-only.patch
Normal file
@ -0,0 +1,45 @@
|
||||
diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c
|
||||
index 2bf7f5e..1221c7b 100644
|
||||
--- a/src/backends/native/meta-backend-native.c
|
||||
+++ b/src/backends/native/meta-backend-native.c
|
||||
@@ -341,25 +341,30 @@ maybe_disable_screen_cast_dma_bufs (MetaBackendNative *native)
|
||||
MetaGpuKms *primary_gpu;
|
||||
const char *driver_name;
|
||||
int i;
|
||||
- static const char *disable_dma_buf_drivers[] = {
|
||||
- "qxl",
|
||||
+ static const char *enable_dma_buf_drivers[] = {
|
||||
+ "i915",
|
||||
};
|
||||
+ MetaScreenCast *screen_cast = meta_backend_get_screen_cast (backend);
|
||||
+ gboolean enable_dma_buf = FALSE;
|
||||
|
||||
primary_gpu = meta_renderer_native_get_primary_gpu (renderer_native);
|
||||
driver_name = meta_gpu_kms_get_driver_name (primary_gpu);
|
||||
|
||||
- for (i = 0; i < G_N_ELEMENTS (disable_dma_buf_drivers); i++)
|
||||
+ for (i = 0; i < G_N_ELEMENTS (enable_dma_buf_drivers); i++)
|
||||
{
|
||||
- if (g_strcmp0 (driver_name, disable_dma_buf_drivers[i]) == 0)
|
||||
+ if (g_strcmp0 (driver_name, enable_dma_buf_drivers[i]) == 0)
|
||||
{
|
||||
- MetaScreenCast *screen_cast = meta_backend_get_screen_cast (backend);
|
||||
+ enable_dma_buf = TRUE;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- g_message ("The '%s' driver doesn't support DMA buffer screen sharing, disabling.",
|
||||
- driver_name);
|
||||
+ if (!enable_dma_buf)
|
||||
+ {
|
||||
+ g_message ("Not enabling DMA buffer screen sharing for driver '%s'.",
|
||||
+ driver_name);
|
||||
|
||||
- meta_screen_cast_disable_dma_bufs (screen_cast);
|
||||
- return;
|
||||
- }
|
||||
+ meta_screen_cast_disable_dma_bufs (screen_cast);
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_REMOTE_DESKTOP */
|
||||
68
SOURCES/mutter-screencast-negotiate-buffer-type.patch
Normal file
68
SOURCES/mutter-screencast-negotiate-buffer-type.patch
Normal file
@ -0,0 +1,68 @@
|
||||
diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c
|
||||
index f39d348..c1abc9b 100644
|
||||
--- a/src/backends/meta-screen-cast-stream-src.c
|
||||
+++ b/src/backends/meta-screen-cast-stream-src.c
|
||||
@@ -684,11 +684,18 @@ on_stream_param_changed (void *data,
|
||||
MetaScreenCastStreamSrc *src = data;
|
||||
MetaScreenCastStreamSrcPrivate *priv =
|
||||
meta_screen_cast_stream_src_get_instance_private (src);
|
||||
+ MetaScreenCastStream *stream = meta_screen_cast_stream_src_get_stream (src);
|
||||
+ MetaScreenCastSession *session = meta_screen_cast_stream_get_session (stream);
|
||||
+ MetaScreenCast *screen_cast =
|
||||
+ meta_screen_cast_session_get_screen_cast (session);
|
||||
+
|
||||
uint8_t params_buffer[1024];
|
||||
int32_t width, height, stride, size;
|
||||
struct spa_pod_builder pod_builder;
|
||||
const struct spa_pod *params[3];
|
||||
const int bpp = 4;
|
||||
+ int buffer_types;
|
||||
+ CoglDmaBufHandle *dmabuf_handle;
|
||||
|
||||
if (!format || id != SPA_PARAM_Format)
|
||||
return;
|
||||
@@ -705,6 +712,16 @@ on_stream_param_changed (void *data,
|
||||
|
||||
pod_builder = SPA_POD_BUILDER_INIT (params_buffer, sizeof (params_buffer));
|
||||
|
||||
+ buffer_types = 1 << SPA_DATA_MemFd;
|
||||
+ dmabuf_handle = meta_screen_cast_create_dma_buf_handle (screen_cast,
|
||||
+ priv->stream_width,
|
||||
+ priv->stream_height);
|
||||
+ if (dmabuf_handle)
|
||||
+ {
|
||||
+ buffer_types |= 1 << SPA_DATA_DmaBuf;
|
||||
+ cogl_dma_buf_handle_free(dmabuf_handle);
|
||||
+ }
|
||||
+
|
||||
params[0] = spa_pod_builder_add_object (
|
||||
&pod_builder,
|
||||
SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers,
|
||||
@@ -712,7 +729,8 @@ on_stream_param_changed (void *data,
|
||||
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int (1),
|
||||
SPA_PARAM_BUFFERS_size, SPA_POD_Int (size),
|
||||
SPA_PARAM_BUFFERS_stride, SPA_POD_Int (stride),
|
||||
- SPA_PARAM_BUFFERS_align, SPA_POD_Int (16));
|
||||
+ SPA_PARAM_BUFFERS_align, SPA_POD_Int (16),
|
||||
+ SPA_PARAM_BUFFERS_dataType, SPA_POD_CHOICE_FLAGS_Int (buffer_types));
|
||||
|
||||
params[1] = spa_pod_builder_add_object (
|
||||
&pod_builder,
|
||||
@@ -751,9 +769,16 @@ on_stream_add_buffer (void *data,
|
||||
spa_data[0].mapoffset = 0;
|
||||
spa_data[0].maxsize = stride * priv->video_format.size.height;
|
||||
|
||||
- dmabuf_handle = meta_screen_cast_create_dma_buf_handle (screen_cast,
|
||||
+ if (spa_data[0].type & (1 << SPA_DATA_DmaBuf))
|
||||
+ {
|
||||
+ dmabuf_handle = meta_screen_cast_create_dma_buf_handle (screen_cast,
|
||||
priv->stream_width,
|
||||
priv->stream_height);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ dmabuf_handle = NULL;
|
||||
+ }
|
||||
|
||||
if (dmabuf_handle)
|
||||
{
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
Name: mutter
|
||||
Version: 3.32.2
|
||||
Release: 66%{?dist}
|
||||
Release: 74%{?dist}
|
||||
Summary: Window and compositing manager based on Clutter
|
||||
|
||||
License: GPLv2+
|
||||
@ -148,6 +148,8 @@ Patch407: 0004-screen-cast-Disable-DMA-buffer-based-screen-casting-.patch
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1365
|
||||
Patch408: cursor-move-only-screen-cast-fixes.patch
|
||||
Patch409: mutter-bump-screencast-api-version.patch
|
||||
Patch410: mutter-screencast-dmabuf-i915-only.patch
|
||||
Patch411: mutter-screencast-negotiate-buffer-type.patch
|
||||
|
||||
# Only treat WM_PROTOCOLS messages as WM_PROTOCOL messages (#1847203)
|
||||
Patch500: 0001-stage-x11-Check-that-message-is-WM_PROTOCOLS-before-.patch
|
||||
@ -207,6 +209,20 @@ Patch528: 0001-events-Pass-CurrentTime-to-XIAllowEvents-when-unfree.patch
|
||||
# Downgrade assert to warning (#2089311)
|
||||
Patch529: 0001-workspace-Downgrade-assert-to-warning-when-adding-wi.patch
|
||||
|
||||
# Don't add common modes if panel already has (#2125031)
|
||||
Patch530: 0001-output-kms-Add-more-heuristics-to-decide-when-to-off.patch
|
||||
|
||||
# Queue fail safe page flip callbacks (#2172057)
|
||||
Patch531: 0001-renderer-native-Queue-fail-safe-callbacks-when-mode-.patch
|
||||
|
||||
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
|
||||
@ -348,6 +364,35 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
|
||||
%{_datadir}/mutter-%{mutter_api_version}/tests
|
||||
|
||||
%changelog
|
||||
* Fri Jun 27 2025 Jonas Ådahl <jadahl@redhat.com> - 3.32.2-74
|
||||
- Backport implementation for _GTK_WORKAREAS_D# X11 property
|
||||
Related: RHEL-87743
|
||||
|
||||
* Wed Dec 04 2024 Jonas Ådahl <jadahl@redhat.com> - 3.32.2-73
|
||||
- Fix handling of more WM_HINTS window icon types
|
||||
Resolves: RHEL-35286
|
||||
|
||||
* Mon Oct 02 2023 Jan Grulich <jgrulich@redhat.com> - 3.32.2-72
|
||||
- Do not use DMA buffers for screencast when the client doesn't support it
|
||||
- Use DMA buffers only for i195 drivers
|
||||
Resolves: RHEL-4405
|
||||
|
||||
* Thu Aug 17 2023 Carlos Garnacho <cgarnach@redhat.com> - 3.32.2-71
|
||||
- Fix ordering of keyboard modifiers relative to other keyboard events
|
||||
Resolves: #2170830
|
||||
|
||||
* Thu Apr 06 2023 Jonas Ådahl <jadahl@redhat.com>) - 3.32.2-69
|
||||
- Queue fail safe page flip callbacks
|
||||
Resolves: #2172057
|
||||
|
||||
* Wed Dec 21 2022 Olivier Fourdan <ofourdan@redhat.com> - 3.32.2-68
|
||||
- Fix downstream synaptics patches breaking xdmcp
|
||||
Resolves: #2092450
|
||||
|
||||
* Thu Oct 20 2022 Jonas Ådahl <jadahl@redhat.com>) - 3.32.2-67
|
||||
- Don't add common modes if panel already has
|
||||
Resolves: #2125031
|
||||
|
||||
* Mon Aug 29 2022 Jonas Ådahl <jadahl@redhat.com>) - 3.32.2-66
|
||||
- Downgrade assert to warning
|
||||
Resolves: #2089311
|
||||
|
||||
Loading…
Reference in New Issue
Block a user