Toshaan Bharvani
11 months ago
24 changed files with 2042 additions and 53 deletions
@ -0,0 +1,144 @@
@@ -0,0 +1,144 @@
|
||||
From 651f5e0c6a33d9ac32c2a16735a026153a2ddf38 Mon Sep 17 00:00:00 2001 |
||||
From: Olivier Fourdan <ofourdan@redhat.com> |
||||
Date: Tue, 14 Jun 2022 16:31:43 +0200 |
||||
Subject: [PATCH] backends: Move MetaKeyboardA11yFlags to a public header |
||||
|
||||
The MetaKeyboardA11yFlags are used by gnome-shell to show a dialog |
||||
whenever a keyboard accessibility feature is switched using the |
||||
keyboard. |
||||
|
||||
Unfortunately, commit c3acaeb25 renamed the Clutter flag to Meta and |
||||
moved them to a private header. As a result, gnome-shell do not show any |
||||
dialog anymore when a keyboard accessibility feature is activated. |
||||
|
||||
Move the MetaKeyboardA11yFlags definition to a public header so that |
||||
gnome-shell can use it. |
||||
|
||||
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2306 |
||||
Fixes: c3acaeb25 - backends: Move keyboard a11y into backends |
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2463> |
||||
--- |
||||
src/backends/meta-input-settings-private.h | 19 +------ |
||||
src/meta/meson.build | 1 + |
||||
src/meta/meta-enums.h | 62 ++++++++++++++++++++++ |
||||
3 files changed, 64 insertions(+), 18 deletions(-) |
||||
create mode 100644 src/meta/meta-enums.h |
||||
|
||||
diff --git a/src/backends/meta-input-settings-private.h b/src/backends/meta-input-settings-private.h |
||||
index 42ee0e0e6..5ef54ee84 100644 |
||||
--- a/src/backends/meta-input-settings-private.h |
||||
+++ b/src/backends/meta-input-settings-private.h |
||||
@@ -31,29 +31,12 @@ |
||||
#include "backends/meta-backend-types.h" |
||||
#include "clutter/clutter.h" |
||||
#include "meta/display.h" |
||||
+#include "meta/meta-enums.h" |
||||
|
||||
#define META_TYPE_INPUT_SETTINGS (meta_input_settings_get_type ()) |
||||
G_DECLARE_DERIVABLE_TYPE (MetaInputSettings, meta_input_settings, |
||||
META, INPUT_SETTINGS, GObject) |
||||
|
||||
-typedef enum |
||||
-{ |
||||
- META_A11Y_KEYBOARD_ENABLED = 1 << 0, |
||||
- META_A11Y_TIMEOUT_ENABLED = 1 << 1, |
||||
- META_A11Y_MOUSE_KEYS_ENABLED = 1 << 2, |
||||
- META_A11Y_SLOW_KEYS_ENABLED = 1 << 3, |
||||
- META_A11Y_SLOW_KEYS_BEEP_PRESS = 1 << 4, |
||||
- META_A11Y_SLOW_KEYS_BEEP_ACCEPT = 1 << 5, |
||||
- META_A11Y_SLOW_KEYS_BEEP_REJECT = 1 << 6, |
||||
- META_A11Y_BOUNCE_KEYS_ENABLED = 1 << 7, |
||||
- META_A11Y_BOUNCE_KEYS_BEEP_REJECT = 1 << 8, |
||||
- META_A11Y_TOGGLE_KEYS_ENABLED = 1 << 9, |
||||
- META_A11Y_STICKY_KEYS_ENABLED = 1 << 10, |
||||
- META_A11Y_STICKY_KEYS_TWO_KEY_OFF = 1 << 11, |
||||
- META_A11Y_STICKY_KEYS_BEEP = 1 << 12, |
||||
- META_A11Y_FEATURE_STATE_CHANGE_BEEP = 1 << 13, |
||||
-} MetaKeyboardA11yFlags; |
||||
- |
||||
/** |
||||
* MetaKbdA11ySettings: |
||||
* |
||||
diff --git a/src/meta/meson.build b/src/meta/meson.build |
||||
index a096ee4dd..4a67abb25 100644 |
||||
--- a/src/meta/meson.build |
||||
+++ b/src/meta/meson.build |
||||
@@ -17,6 +17,7 @@ mutter_public_headers = [ |
||||
'meta-close-dialog.h', |
||||
'meta-cursor-tracker.h', |
||||
'meta-dnd.h', |
||||
+ 'meta-enums.h', |
||||
'meta-idle-monitor.h', |
||||
'meta-inhibit-shortcuts-dialog.h', |
||||
'meta-launch-context.h', |
||||
diff --git a/src/meta/meta-enums.h b/src/meta/meta-enums.h |
||||
new file mode 100644 |
||||
index 000000000..e59ebaf72 |
||||
--- /dev/null |
||||
+++ b/src/meta/meta-enums.h |
||||
@@ -0,0 +1,62 @@ |
||||
+/* |
||||
+ * Copyright (C) 2016-2021 Red Hat Inc. |
||||
+ * |
||||
+ * This program is free software; you can redistribute it and/or |
||||
+ * modify it under the terms of the GNU General Public License as |
||||
+ * published by the Free Software Foundation; either version 2 of the |
||||
+ * License, or (at your option) any later version. |
||||
+ * |
||||
+ * This program is distributed in the hope that it will be useful, but |
||||
+ * WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
+ * General Public License for more details. |
||||
+ * |
||||
+ * You should have received a copy of the GNU General Public License |
||||
+ * along with this program; if not, write to the Free Software |
||||
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
||||
+ * 02111-1307, USA. |
||||
+ * |
||||
+ */ |
||||
+ |
||||
+#ifndef META_ENUMS_H |
||||
+#define META_ENUMS_H |
||||
+ |
||||
+/** |
||||
+ * MetaKeyboardA11yFlags: |
||||
+ * @META_A11Y_KEYBOARD_ENABLED: |
||||
+ * @META_A11Y_TIMEOUT_ENABLED: |
||||
+ * @META_A11Y_MOUSE_KEYS_ENABLED: |
||||
+ * @META_A11Y_SLOW_KEYS_ENABLED: |
||||
+ * @META_A11Y_SLOW_KEYS_BEEP_PRESS: |
||||
+ * @META_A11Y_SLOW_KEYS_BEEP_ACCEPT: |
||||
+ * @META_A11Y_SLOW_KEYS_BEEP_REJECT: |
||||
+ * @META_A11Y_BOUNCE_KEYS_ENABLED: |
||||
+ * @META_A11Y_BOUNCE_KEYS_BEEP_REJECT: |
||||
+ * @META_A11Y_TOGGLE_KEYS_ENABLED: |
||||
+ * @META_A11Y_STICKY_KEYS_ENABLED: |
||||
+ * @META_A11Y_STICKY_KEYS_TWO_KEY_OFF: |
||||
+ * @META_A11Y_STICKY_KEYS_BEEP: |
||||
+ * @META_A11Y_FEATURE_STATE_CHANGE_BEEP: |
||||
+ * |
||||
+ * Keyboard accessibility features. |
||||
+ * |
||||
+ */ |
||||
+typedef enum |
||||
+{ |
||||
+ META_A11Y_KEYBOARD_ENABLED = 1 << 0, |
||||
+ META_A11Y_TIMEOUT_ENABLED = 1 << 1, |
||||
+ META_A11Y_MOUSE_KEYS_ENABLED = 1 << 2, |
||||
+ META_A11Y_SLOW_KEYS_ENABLED = 1 << 3, |
||||
+ META_A11Y_SLOW_KEYS_BEEP_PRESS = 1 << 4, |
||||
+ META_A11Y_SLOW_KEYS_BEEP_ACCEPT = 1 << 5, |
||||
+ META_A11Y_SLOW_KEYS_BEEP_REJECT = 1 << 6, |
||||
+ META_A11Y_BOUNCE_KEYS_ENABLED = 1 << 7, |
||||
+ META_A11Y_BOUNCE_KEYS_BEEP_REJECT = 1 << 8, |
||||
+ META_A11Y_TOGGLE_KEYS_ENABLED = 1 << 9, |
||||
+ META_A11Y_STICKY_KEYS_ENABLED = 1 << 10, |
||||
+ META_A11Y_STICKY_KEYS_TWO_KEY_OFF = 1 << 11, |
||||
+ META_A11Y_STICKY_KEYS_BEEP = 1 << 12, |
||||
+ META_A11Y_FEATURE_STATE_CHANGE_BEEP = 1 << 13, |
||||
+} MetaKeyboardA11yFlags; |
||||
+ |
||||
+#endif /* META_ENUMS_H */ |
||||
-- |
||||
2.36.1 |
||||
|
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
From ba25271408a32a2a73a82acc6e094a611001c9f0 Mon Sep 17 00:00:00 2001 |
||||
From: Carlos Garnacho <carlosg@gnome.org> |
||||
Date: Fri, 16 Dec 2022 23:06:33 +0100 |
||||
Subject: [PATCH] backends: Only apply EDID-based tablet mapping heuristic on |
||||
integrated devices |
||||
|
||||
These are the ones attached to a display, thus they are the ones that may need |
||||
help from this heuristic. Non-integrated tablets (e.g. Intuos) will default to |
||||
the span of all monitors. |
||||
|
||||
Fixes mapping of opaque tablets if a display-integrated tablet of the same |
||||
brand is also plugged in. |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2767> |
||||
--- |
||||
src/backends/meta-input-mapper.c | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/src/backends/meta-input-mapper.c b/src/backends/meta-input-mapper.c |
||||
index cc75f14e8..71d193e5f 100644 |
||||
--- a/src/backends/meta-input-mapper.c |
||||
+++ b/src/backends/meta-input-mapper.c |
||||
@@ -455,7 +455,7 @@ guess_candidates (MetaInputMapper *mapper, |
||||
|
||||
g_assert (META_IS_MONITOR (l->data)); |
||||
|
||||
- if (match_edid (input, l->data, &edid_match)) |
||||
+ if (integrated && match_edid (input, l->data, &edid_match)) |
||||
match.score |= 1 << edid_match; |
||||
|
||||
if (integrated && match_size (input, l->data)) |
||||
-- |
||||
2.38.1 |
||||
|
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
From 28030178d7682ce5be03cb7273365ab628065871 Mon Sep 17 00:00:00 2001 |
||||
From: Carlos Garnacho <carlosg@gnome.org> |
||||
Date: Mon, 27 Sep 2021 20:37:30 +0200 |
||||
Subject: [PATCH] clutter: Make ClutterClickAction independent of click count |
||||
|
||||
This will trigger for every button press/release that is obtained, |
||||
regardless of the click count. |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2024> |
||||
--- |
||||
clutter/clutter/clutter-click-action.c | 4 ---- |
||||
1 file changed, 4 deletions(-) |
||||
|
||||
diff --git a/clutter/clutter/clutter-click-action.c b/clutter/clutter/clutter-click-action.c |
||||
index 45d87e809..266b6da92 100644 |
||||
--- a/clutter/clutter/clutter-click-action.c |
||||
+++ b/clutter/clutter/clutter-click-action.c |
||||
@@ -306,9 +306,6 @@ on_event (ClutterActor *actor, |
||||
case CLUTTER_TOUCH_BEGIN: |
||||
has_button = FALSE; |
||||
case CLUTTER_BUTTON_PRESS: |
||||
- if (has_button && clutter_event_get_click_count (event) != 1) |
||||
- return CLUTTER_EVENT_PROPAGATE; |
||||
- |
||||
if (priv->is_held) |
||||
return CLUTTER_EVENT_STOP; |
||||
|
||||
@@ -386,7 +383,6 @@ on_captured_event (ClutterActor *stage, |
||||
return CLUTTER_EVENT_STOP; |
||||
|
||||
if ((has_button && clutter_event_get_button (event) != priv->press_button) || |
||||
- (has_button && clutter_event_get_click_count (event) != 1) || |
||||
clutter_event_get_device (event) != priv->press_device || |
||||
clutter_event_get_event_sequence (event) != priv->press_sequence) |
||||
return CLUTTER_EVENT_PROPAGATE; |
||||
-- |
||||
2.35.1 |
||||
|
@ -0,0 +1,52 @@
@@ -0,0 +1,52 @@
|
||||
From 5cd66485cdd99068dab0f57d7f64d3ef294b0037 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> |
||||
Date: Wed, 4 Aug 2021 19:30:10 +0200 |
||||
Subject: [PATCH] clutter/text: Don't query preferred size without allocation |
||||
|
||||
The size request functions query the resource scale, which hits |
||||
an assert if headless. The returned sizes are already only used |
||||
when clutter_actor_has_allocation() is true, so this doesn't |
||||
change the condition for calling either redraw or relayout. |
||||
|
||||
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4522 |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1956> |
||||
--- |
||||
clutter/clutter/clutter-text.c | 17 +++++++++++------ |
||||
1 file changed, 11 insertions(+), 6 deletions(-) |
||||
|
||||
diff --git a/clutter/clutter/clutter-text.c b/clutter/clutter/clutter-text.c |
||||
index 45c7eac56b..80e53ea32f 100644 |
||||
--- a/clutter/clutter/clutter-text.c |
||||
+++ b/clutter/clutter/clutter-text.c |
||||
@@ -4797,16 +4797,21 @@ static void |
||||
clutter_text_queue_redraw_or_relayout (ClutterText *self) |
||||
{ |
||||
ClutterActor *actor = CLUTTER_ACTOR (self); |
||||
- gfloat preferred_width; |
||||
- gfloat preferred_height; |
||||
+ float preferred_width = -1.; |
||||
+ float preferred_height = -1.; |
||||
|
||||
clutter_text_dirty_cache (self); |
||||
|
||||
- /* we're using our private implementations here to avoid the caching done by ClutterActor */ |
||||
- clutter_text_get_preferred_width (actor, -1, NULL, &preferred_width); |
||||
- clutter_text_get_preferred_height (actor, preferred_width, NULL, &preferred_height); |
||||
+ if (clutter_actor_has_allocation (actor)) |
||||
+ { |
||||
+ /* we're using our private implementations here to avoid the caching done by ClutterActor */ |
||||
+ clutter_text_get_preferred_width (actor, -1, NULL, &preferred_width); |
||||
+ clutter_text_get_preferred_height (actor, preferred_width, NULL, |
||||
+ &preferred_height); |
||||
+ } |
||||
|
||||
- if (clutter_actor_has_allocation (actor) && |
||||
+ if (preferred_width > 0 && |
||||
+ preferred_height > 0 && |
||||
fabsf (preferred_width - clutter_actor_get_width (actor)) <= 0.001 && |
||||
fabsf (preferred_height - clutter_actor_get_height (actor)) <= 0.001) |
||||
clutter_text_queue_redraw (actor); |
||||
-- |
||||
2.31.1 |
||||
|
@ -0,0 +1,162 @@
@@ -0,0 +1,162 @@
|
||||
From 88b50f5a9e4b1b87e766e929a77aafdc27e335cf 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 | 3 +++ |
||||
6 files changed, 44 insertions(+), 15 deletions(-) |
||||
|
||||
diff --git a/src/core/events.c b/src/core/events.c |
||||
index 6bb4e90..7751042 100644 |
||||
--- a/src/core/events.c |
||||
+++ b/src/core/events.c |
||||
@@ -234,6 +234,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 836939c..460d9e9 100644 |
||||
--- a/src/wayland/meta-wayland-keyboard.c |
||||
+++ b/src/wayland/meta-wayland-keyboard.c |
||||
@@ -564,14 +564,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 25d5074..27d8fe3 100644 |
||||
--- a/src/wayland/meta-wayland-seat.c |
||||
+++ b/src/wayland/meta-wayland-seat.c |
||||
@@ -376,6 +376,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) |
||||
@@ -398,13 +421,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 ae4e107..ab90106 100644 |
||||
--- a/src/wayland/meta-wayland-seat.h |
||||
+++ b/src/wayland/meta-wayland-seat.h |
||||
@@ -84,4 +84,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 a3f0984..b548aa1 100644 |
||||
--- a/src/wayland/meta-wayland.c |
||||
+++ b/src/wayland/meta-wayland.c |
||||
@@ -721,3 +721,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 6c655e4..ad82d52 100644 |
||||
--- a/src/wayland/meta-wayland.h |
||||
+++ b/src/wayland/meta-wayland.h |
||||
@@ -92,6 +92,9 @@ void meta_wayland_compositor_schedule_surface_association (Me |
||||
int id, |
||||
MetaWindow *window); |
||||
|
||||
+gboolean meta_wayland_compositor_handle_text_input_event (MetaWaylandCompositor *compositor, |
||||
+ const ClutterEvent *event); |
||||
+ |
||||
void meta_wayland_compositor_notify_surface_id (MetaWaylandCompositor *compositor, |
||||
int id, |
||||
MetaWaylandSurface *surface); |
||||
-- |
||||
2.40.1 |
||||
|
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
From 65ffd7e4df42cd62633f93107644f87208881578 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> |
||||
Date: Thu, 14 Apr 2022 18:07:41 +0200 |
||||
Subject: [PATCH] events: Pass CurrentTime to XIAllowEvents() when unfreezing |
||||
pointer |
||||
|
||||
--- |
||||
src/core/events.c | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/src/core/events.c b/src/core/events.c |
||||
index 0dc3a73222..dd9b4ec981 100644 |
||||
--- a/src/core/events.c |
||||
+++ b/src/core/events.c |
||||
@@ -205,7 +205,7 @@ maybe_unfreeze_pointer_events (MetaBackend *backend, |
||||
} |
||||
|
||||
xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); |
||||
- XIAllowEvents (xdisplay, device_id, event_mode, event->button.time); |
||||
+ XIAllowEvents (xdisplay, device_id, event_mode, CurrentTime); |
||||
} |
||||
|
||||
static gboolean |
||||
-- |
||||
2.34.1 |
||||
|
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
From 168a47c9ebefaeca6cc25fcbc0d41ac50c16f400 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> |
||||
Date: Wed, 1 Feb 2023 10:07:53 +0100 |
||||
Subject: [PATCH] gpu/kms: Report that we can have outputs if we have |
||||
connectors |
||||
|
||||
As part of https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/525 |
||||
(introduction of transactional KMS API), the logic determining whether a |
||||
GPU can have outputs was changed from whether any connectors existed to |
||||
whether any connected connectors existed. That effectively meant that we |
||||
wouldn't attempt to start at all if there were no monitors connected |
||||
while starting up. |
||||
|
||||
This was unintentional, so lets revert back the expected behavior. |
||||
--- |
||||
src/backends/native/meta-gpu-kms.c | 13 +------------ |
||||
1 file changed, 1 insertion(+), 12 deletions(-) |
||||
|
||||
diff --git a/src/backends/native/meta-gpu-kms.c b/src/backends/native/meta-gpu-kms.c |
||||
index e81c90a022..2756bddb26 100644 |
||||
--- a/src/backends/native/meta-gpu-kms.c |
||||
+++ b/src/backends/native/meta-gpu-kms.c |
||||
@@ -399,18 +399,7 @@ meta_gpu_kms_read_current (MetaGpu *gpu, |
||||
gboolean |
||||
meta_gpu_kms_can_have_outputs (MetaGpuKms *gpu_kms) |
||||
{ |
||||
- GList *l; |
||||
- int n_connected_connectors = 0; |
||||
- |
||||
- for (l = meta_kms_device_get_connectors (gpu_kms->kms_device); l; l = l->next) |
||||
- { |
||||
- MetaKmsConnector *kms_connector = l->data; |
||||
- |
||||
- if (meta_kms_connector_get_current_state (kms_connector)) |
||||
- n_connected_connectors++; |
||||
- } |
||||
- |
||||
- return n_connected_connectors > 0; |
||||
+ return !!meta_kms_device_get_connectors (gpu_kms->kms_device); |
||||
} |
||||
|
||||
MetaGpuKms * |
||||
-- |
||||
2.39.1 |
||||
|
@ -0,0 +1,193 @@
@@ -0,0 +1,193 @@
|
||||
From af0460d0cedd5a66b2110ab2a99e67c647e7b6fb Mon Sep 17 00:00:00 2001 |
||||
From: Piotr Lopatka <piotr.lopatka@gmail.com> |
||||
Date: Fri, 3 Sep 2021 19:39:12 +0100 |
||||
Subject: [PATCH 1/2] kms: Allow passing framebuffer damage metadata |
||||
|
||||
This commit adds support to atomic KMS backend for optional plane property |
||||
prop_fb_damage_clips. Some drivers (e.g. EVDI) take advantage of this |
||||
property and process only updated regions of the screen instead of |
||||
processing the full frame. This can save system resources. |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1879> |
||||
--- |
||||
.../native/meta-kms-impl-device-atomic.c | 28 +++++++++++++++ |
||||
src/backends/native/meta-kms-plane-private.h | 1 + |
||||
src/backends/native/meta-kms-plane.c | 5 +++ |
||||
src/backends/native/meta-kms-update-private.h | 7 ++++ |
||||
src/backends/native/meta-kms-update.c | 35 +++++++++++++++++++ |
||||
src/backends/native/meta-kms-update.h | 4 +++ |
||||
6 files changed, 80 insertions(+) |
||||
|
||||
diff --git a/src/backends/native/meta-kms-impl-device-atomic.c b/src/backends/native/meta-kms-impl-device-atomic.c |
||||
index 8e41207ee14..674a24902bd 100644 |
||||
--- a/src/backends/native/meta-kms-impl-device-atomic.c |
||||
+++ b/src/backends/native/meta-kms-impl-device-atomic.c |
||||
@@ -416,6 +416,8 @@ process_plane_assignment (MetaKmsImplDevice *impl_device, |
||||
MetaKmsPlaneAssignment *plane_assignment = update_entry; |
||||
MetaKmsPlane *plane = plane_assignment->plane; |
||||
MetaDrmBuffer *buffer; |
||||
+ MetaKmsFbDamage *fb_damage; |
||||
+ uint32_t prop_id; |
||||
|
||||
buffer = plane_assignment->buffer; |
||||
|
||||
@@ -539,6 +541,32 @@ process_plane_assignment (MetaKmsImplDevice *impl_device, |
||||
return FALSE; |
||||
} |
||||
|
||||
+ fb_damage = plane_assignment->fb_damage; |
||||
+ if (fb_damage && |
||||
+ meta_kms_plane_get_prop_id (plane, |
||||
+ META_KMS_PLANE_PROP_FB_DAMAGE_CLIPS_ID)) |
||||
+ { |
||||
+ meta_topic (META_DEBUG_KMS, |
||||
+ "[atomic] Setting %d damage clips on %u", |
||||
+ fb_damage->n_rects, |
||||
+ meta_kms_plane_get_id (plane)); |
||||
+ |
||||
+ prop_id = store_new_blob (impl_device, |
||||
+ blob_ids, |
||||
+ fb_damage->rects, |
||||
+ fb_damage->n_rects * |
||||
+ sizeof (struct drm_mode_rect), |
||||
+ error); |
||||
+ if (!prop_id) |
||||
+ return FALSE; |
||||
+ |
||||
+ if (!add_plane_property (impl_device, |
||||
+ plane, req, |
||||
+ META_KMS_PLANE_PROP_FB_DAMAGE_CLIPS_ID, |
||||
+ prop_id, |
||||
+ error)) |
||||
+ return FALSE; |
||||
+ } |
||||
return TRUE; |
||||
} |
||||
|
||||
diff --git a/src/backends/native/meta-kms-plane-private.h b/src/backends/native/meta-kms-plane-private.h |
||||
index 92f9cfcc9aa..f735c8da8f6 100644 |
||||
--- a/src/backends/native/meta-kms-plane-private.h |
||||
+++ b/src/backends/native/meta-kms-plane-private.h |
||||
@@ -41,6 +41,7 @@ typedef enum _MetaKmsPlaneProp |
||||
META_KMS_PLANE_PROP_CRTC_H, |
||||
META_KMS_PLANE_PROP_FB_ID, |
||||
META_KMS_PLANE_PROP_CRTC_ID, |
||||
+ META_KMS_PLANE_PROP_FB_DAMAGE_CLIPS_ID, |
||||
META_KMS_PLANE_N_PROPS |
||||
} MetaKmsPlaneProp; |
||||
|
||||
diff --git a/src/backends/native/meta-kms-plane.c b/src/backends/native/meta-kms-plane.c |
||||
index 73fab7d8f80..3cb58764ff3 100644 |
||||
--- a/src/backends/native/meta-kms-plane.c |
||||
+++ b/src/backends/native/meta-kms-plane.c |
||||
@@ -446,6 +446,11 @@ init_properties (MetaKmsPlane *plane, |
||||
.name = "CRTC_ID", |
||||
.type = DRM_MODE_PROP_OBJECT, |
||||
}, |
||||
+ [META_KMS_PLANE_PROP_FB_DAMAGE_CLIPS_ID] = |
||||
+ { |
||||
+ .name = "FB_DAMAGE_CLIPS", |
||||
+ .type = DRM_MODE_PROP_BLOB, |
||||
+ }, |
||||
} |
||||
}; |
||||
|
||||
diff --git a/src/backends/native/meta-kms-update-private.h b/src/backends/native/meta-kms-update-private.h |
||||
index 22491ece2d5..c89622d09a5 100644 |
||||
--- a/src/backends/native/meta-kms-update-private.h |
||||
+++ b/src/backends/native/meta-kms-update-private.h |
||||
@@ -34,6 +34,12 @@ typedef struct _MetaKmsFeedback |
||||
GError *error; |
||||
} MetaKmsFeedback; |
||||
|
||||
+typedef struct _MetaKmsFbDamage |
||||
+{ |
||||
+ struct drm_mode_rect *rects; |
||||
+ int n_rects; |
||||
+} MetaKmsFbDamage; |
||||
+ |
||||
typedef struct _MetaKmsPlaneAssignment |
||||
{ |
||||
MetaKmsUpdate *update; |
||||
@@ -43,6 +49,7 @@ typedef struct _MetaKmsPlaneAssignment |
||||
MetaFixed16Rectangle src_rect; |
||||
MetaRectangle dst_rect; |
||||
MetaKmsAssignPlaneFlag flags; |
||||
+ MetaKmsFbDamage *fb_damage; |
||||
|
||||
uint64_t rotation; |
||||
|
||||
diff --git a/src/backends/native/meta-kms-update.c b/src/backends/native/meta-kms-update.c |
||||
index be6eaefcc2c..71e5b423fb7 100644 |
||||
--- a/src/backends/native/meta-kms-update.c |
||||
+++ b/src/backends/native/meta-kms-update.c |
||||
@@ -129,9 +129,17 @@ meta_kms_feedback_get_error (const MetaKmsFeedback *feedback) |
||||
return feedback->error; |
||||
} |
||||
|
||||
+static void |
||||
+meta_kms_fb_damage_free (MetaKmsFbDamage *fb_damage) |
||||
+{ |
||||
+ g_free (fb_damage->rects); |
||||
+ g_free (fb_damage); |
||||
+} |
||||
+ |
||||
static void |
||||
meta_kms_plane_assignment_free (MetaKmsPlaneAssignment *plane_assignment) |
||||
{ |
||||
+ g_clear_pointer (&plane_assignment->fb_damage, meta_kms_fb_damage_free); |
||||
g_free (plane_assignment); |
||||
} |
||||
|
||||
@@ -456,6 +464,33 @@ meta_kms_update_set_custom_page_flip (MetaKmsUpdate *update, |
||||
update->custom_page_flip = custom_page_flip; |
||||
} |
||||
|
||||
+void |
||||
+meta_kms_plane_assignment_set_fb_damage (MetaKmsPlaneAssignment *plane_assignment, |
||||
+ const int *rectangles, |
||||
+ int n_rectangles) |
||||
+{ |
||||
+ MetaKmsFbDamage *fb_damage; |
||||
+ struct drm_mode_rect *mode_rects; |
||||
+ int i; |
||||
+ |
||||
+ mode_rects = g_new0 (struct drm_mode_rect, n_rectangles); |
||||
+ for (i = 0; i < n_rectangles; ++i) |
||||
+ { |
||||
+ mode_rects[i].x1 = rectangles[i * 4]; |
||||
+ mode_rects[i].y1 = rectangles[i * 4 + 1]; |
||||
+ mode_rects[i].x2 = mode_rects[i].x1 + rectangles[i * 4 + 2]; |
||||
+ mode_rects[i].y2 = mode_rects[i].y1 + rectangles[i * 4 + 3]; |
||||
+ } |
||||
+ |
||||
+ fb_damage = g_new0 (MetaKmsFbDamage, 1); |
||||
+ *fb_damage = (MetaKmsFbDamage) { |
||||
+ .rects = mode_rects, |
||||
+ .n_rects = n_rectangles, |
||||
+ }; |
||||
+ |
||||
+ plane_assignment->fb_damage = fb_damage; |
||||
+} |
||||
+ |
||||
void |
||||
meta_kms_plane_assignment_set_rotation (MetaKmsPlaneAssignment *plane_assignment, |
||||
uint64_t rotation) |
||||
diff --git a/src/backends/native/meta-kms-update.h b/src/backends/native/meta-kms-update.h |
||||
index 4a6a8bb4373..e63b6d8711d 100644 |
||||
--- a/src/backends/native/meta-kms-update.h |
||||
+++ b/src/backends/native/meta-kms-update.h |
||||
@@ -115,6 +115,10 @@ void meta_kms_update_set_crtc_gamma (MetaKmsUpdate *update, |
||||
const uint16_t *green, |
||||
const uint16_t *blue); |
||||
|
||||
+void meta_kms_plane_assignment_set_fb_damage (MetaKmsPlaneAssignment *plane_assignment, |
||||
+ const int *rectangles, |
||||
+ int n_rectangles); |
||||
+ |
||||
MetaKmsPlaneAssignment * meta_kms_update_assign_plane (MetaKmsUpdate *update, |
||||
MetaKmsCrtc *crtc, |
||||
MetaKmsPlane *plane, |
||||
-- |
||||
2.36.1 |
||||
|
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
From de3188fcc6863b8a6e3d2443a00cf3b00f6f26ff Mon Sep 17 00:00:00 2001 |
||||
From: Daniel van Vugt <daniel.van.vugt@canonical.com> |
||||
Date: Tue, 12 Apr 2022 18:34:58 +0800 |
||||
Subject: [PATCH 1/2] kms/crtc: Add function meta_kms_crtc_has_gamma |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2360> |
||||
--- |
||||
src/backends/native/meta-kms-crtc.c | 7 +++++++ |
||||
src/backends/native/meta-kms-crtc.h | 3 +++ |
||||
2 files changed, 10 insertions(+) |
||||
|
||||
diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c |
||||
index 51d040b44..24f5a2d74 100644 |
||||
--- a/src/backends/native/meta-kms-crtc.c |
||||
+++ b/src/backends/native/meta-kms-crtc.c |
||||
@@ -92,6 +92,13 @@ meta_kms_crtc_is_active (MetaKmsCrtc *crtc) |
||||
return crtc->current_state.is_active; |
||||
} |
||||
|
||||
+ |
||||
+gboolean |
||||
+meta_kms_crtc_has_gamma (MetaKmsCrtc *crtc) |
||||
+{ |
||||
+ return !!meta_kms_crtc_get_prop_id (crtc, META_KMS_CRTC_PROP_GAMMA_LUT); |
||||
+} |
||||
+ |
||||
static void |
||||
read_gamma_state (MetaKmsCrtc *crtc, |
||||
MetaKmsImplDevice *impl_device, |
||||
diff --git a/src/backends/native/meta-kms-crtc.h b/src/backends/native/meta-kms-crtc.h |
||||
index 406ca3ac1..cbaeaa280 100644 |
||||
--- a/src/backends/native/meta-kms-crtc.h |
||||
+++ b/src/backends/native/meta-kms-crtc.h |
||||
@@ -66,6 +66,9 @@ uint32_t meta_kms_crtc_get_id (MetaKmsCrtc *crtc); |
||||
|
||||
int meta_kms_crtc_get_idx (MetaKmsCrtc *crtc); |
||||
|
||||
+ |
||||
+gboolean meta_kms_crtc_has_gamma (MetaKmsCrtc *crtc); |
||||
+ |
||||
gboolean meta_kms_crtc_is_active (MetaKmsCrtc *crtc); |
||||
|
||||
void meta_kms_crtc_gamma_free (MetaKmsCrtcGamma *gamma); |
||||
-- |
||||
2.35.1 |
||||
|
@ -0,0 +1,218 @@
@@ -0,0 +1,218 @@
|
||||
From f21c8614daeb70a021c128b97c000a92652cf6f8 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> |
||||
Date: Thu, 24 Feb 2022 12:32:27 +0100 |
||||
Subject: [PATCH] monitor-manager: Add NightLightSupported property to |
||||
DisplayConfig |
||||
|
||||
This checks whether it's possible to set a CRTC GAMMA_LUT, which is what |
||||
is necessary to implement night light. |
||||
--- |
||||
src/backends/meta-monitor-manager.c | 76 ++++++++++++++++--- |
||||
.../native/meta-monitor-manager-native.c | 25 ++++-- |
||||
.../x11/meta-monitor-manager-xrandr.c | 9 ++- |
||||
src/org.gnome.Mutter.DisplayConfig.xml | 7 ++ |
||||
4 files changed, 99 insertions(+), 18 deletions(-) |
||||
|
||||
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c |
||||
index 75146950c3..0f30b3de25 100644 |
||||
--- a/src/backends/meta-monitor-manager.c |
||||
+++ b/src/backends/meta-monitor-manager.c |
||||
@@ -952,6 +952,59 @@ update_panel_orientation_managed (MetaMonitorManager *manager) |
||||
handle_orientation_change (orientation_manager, manager); |
||||
} |
||||
|
||||
+static void |
||||
+meta_monitor_manager_get_crtc_gamma (MetaMonitorManager *manager, |
||||
+ MetaCrtc *crtc, |
||||
+ size_t *size, |
||||
+ unsigned short **red, |
||||
+ unsigned short **green, |
||||
+ unsigned short **blue) |
||||
+{ |
||||
+ MetaMonitorManagerClass *klass = META_MONITOR_MANAGER_GET_CLASS (manager); |
||||
+ |
||||
+ if (klass->get_crtc_gamma) |
||||
+ { |
||||
+ klass->get_crtc_gamma (manager, crtc, size, red, green, blue); |
||||
+ } |
||||
+ else |
||||
+ { |
||||
+ if (size) |
||||
+ *size = 0; |
||||
+ if (red) |
||||
+ *red = NULL; |
||||
+ if (green) |
||||
+ *green = NULL; |
||||
+ if (blue) |
||||
+ *blue = NULL; |
||||
+ } |
||||
+} |
||||
+ |
||||
+static gboolean |
||||
+is_night_light_supported (MetaMonitorManager *manager) |
||||
+{ |
||||
+ GList *l; |
||||
+ |
||||
+ for (l = meta_backend_get_gpus (manager->backend); l; l = l->next) |
||||
+ { |
||||
+ MetaGpu *gpu = l->data; |
||||
+ GList *l_crtc; |
||||
+ |
||||
+ for (l_crtc = meta_gpu_get_crtcs (gpu); l_crtc; l_crtc = l_crtc->next) |
||||
+ { |
||||
+ MetaCrtc *crtc = l_crtc->data; |
||||
+ size_t gamma_lut_size; |
||||
+ |
||||
+ meta_monitor_manager_get_crtc_gamma (manager, crtc, |
||||
+ &gamma_lut_size, |
||||
+ NULL, NULL, NULL); |
||||
+ if (gamma_lut_size > 0) |
||||
+ return TRUE; |
||||
+ } |
||||
+ } |
||||
+ |
||||
+ return FALSE; |
||||
+} |
||||
+ |
||||
void |
||||
meta_monitor_manager_setup (MetaMonitorManager *manager) |
||||
{ |
||||
@@ -967,7 +1020,6 @@ meta_monitor_manager_setup (MetaMonitorManager *manager) |
||||
meta_dbus_display_config_set_apply_monitors_config_allowed (manager->display_config, |
||||
policy->enable_dbus); |
||||
|
||||
- |
||||
meta_monitor_manager_read_current_state (manager); |
||||
|
||||
meta_monitor_manager_ensure_initial_config (manager); |
||||
@@ -2445,7 +2497,6 @@ meta_monitor_manager_handle_get_crtc_gamma (MetaDBusDisplayConfig *skeleton, |
||||
guint crtc_id, |
||||
MetaMonitorManager *manager) |
||||
{ |
||||
- MetaMonitorManagerClass *klass; |
||||
GList *combined_crtcs; |
||||
MetaCrtc *crtc; |
||||
gsize size; |
||||
@@ -2476,14 +2527,8 @@ meta_monitor_manager_handle_get_crtc_gamma (MetaDBusDisplayConfig *skeleton, |
||||
crtc = g_list_nth_data (combined_crtcs, crtc_id); |
||||
g_list_free (combined_crtcs); |
||||
|
||||
- klass = META_MONITOR_MANAGER_GET_CLASS (manager); |
||||
- if (klass->get_crtc_gamma) |
||||
- klass->get_crtc_gamma (manager, crtc, &size, &red, &green, &blue); |
||||
- else |
||||
- { |
||||
- size = 0; |
||||
- red = green = blue = NULL; |
||||
- } |
||||
+ meta_monitor_manager_get_crtc_gamma (manager, crtc, |
||||
+ &size, &red, &green, &blue); |
||||
|
||||
red_bytes = g_bytes_new_take (red, size * sizeof (unsigned short)); |
||||
green_bytes = g_bytes_new_take (green, size * sizeof (unsigned short)); |
||||
@@ -3078,6 +3123,16 @@ meta_monitor_manager_is_transform_handled (MetaMonitorManager *manager, |
||||
return manager_class->is_transform_handled (manager, crtc, transform); |
||||
} |
||||
|
||||
+static void |
||||
+update_night_light_supported (MetaMonitorManager *manager) |
||||
+{ |
||||
+ gboolean night_light_supported; |
||||
+ |
||||
+ night_light_supported = is_night_light_supported (manager); |
||||
+ meta_dbus_display_config_set_night_light_supported (manager->display_config, |
||||
+ night_light_supported); |
||||
+} |
||||
+ |
||||
static void |
||||
meta_monitor_manager_real_read_current_state (MetaMonitorManager *manager) |
||||
{ |
||||
@@ -3098,6 +3153,7 @@ meta_monitor_manager_real_read_current_state (MetaMonitorManager *manager) |
||||
} |
||||
|
||||
rebuild_monitors (manager); |
||||
+ update_night_light_supported (manager); |
||||
} |
||||
|
||||
void |
||||
diff --git a/src/backends/native/meta-monitor-manager-native.c b/src/backends/native/meta-monitor-manager-native.c |
||||
index fd5e7784ff..37a50f1d6f 100644 |
||||
--- a/src/backends/native/meta-monitor-manager-native.c |
||||
+++ b/src/backends/native/meta-monitor-manager-native.c |
||||
@@ -381,15 +381,30 @@ meta_monitor_manager_native_get_crtc_gamma (MetaMonitorManager *manager, |
||||
MetaKmsCrtc *kms_crtc; |
||||
const MetaKmsCrtcState *crtc_state; |
||||
|
||||
- g_return_if_fail (META_IS_CRTC_KMS (crtc)); |
||||
+ if (!META_IS_CRTC_KMS (crtc)) |
||||
+ { |
||||
+ if (size) |
||||
+ *size = 0; |
||||
+ if (red) |
||||
+ *red = NULL; |
||||
+ if (green) |
||||
+ *green = NULL; |
||||
+ if (blue) |
||||
+ *blue = NULL; |
||||
+ return; |
||||
+ } |
||||
|
||||
kms_crtc = meta_crtc_kms_get_kms_crtc (META_CRTC_KMS (crtc)); |
||||
crtc_state = meta_kms_crtc_get_current_state (kms_crtc); |
||||
|
||||
- *size = crtc_state->gamma.size; |
||||
- *red = g_memdup2 (crtc_state->gamma.red, *size * sizeof **red); |
||||
- *green = g_memdup2 (crtc_state->gamma.green, *size * sizeof **green); |
||||
- *blue = g_memdup2 (crtc_state->gamma.blue, *size * sizeof **blue); |
||||
+ if (size) |
||||
+ *size = crtc_state->gamma.size; |
||||
+ if (red) |
||||
+ *red = g_memdup2 (crtc_state->gamma.red, *size * sizeof **red); |
||||
+ if (green) |
||||
+ *green = g_memdup2 (crtc_state->gamma.green, *size * sizeof **green); |
||||
+ if (blue) |
||||
+ *blue = g_memdup2 (crtc_state->gamma.blue, *size * sizeof **blue); |
||||
} |
||||
|
||||
static char * |
||||
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c |
||||
index 98eb080b6b..865f4e5800 100644 |
||||
--- a/src/backends/x11/meta-monitor-manager-xrandr.c |
||||
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c |
||||
@@ -707,9 +707,12 @@ meta_monitor_manager_xrandr_get_crtc_gamma (MetaMonitorManager *manager, |
||||
(XID) meta_crtc_get_id (crtc)); |
||||
|
||||
*size = gamma->size; |
||||
- *red = g_memdup2 (gamma->red, sizeof (unsigned short) * gamma->size); |
||||
- *green = g_memdup2 (gamma->green, sizeof (unsigned short) * gamma->size); |
||||
- *blue = g_memdup2 (gamma->blue, sizeof (unsigned short) * gamma->size); |
||||
+ if (red) |
||||
+ *red = g_memdup2 (gamma->red, sizeof (unsigned short) * gamma->size); |
||||
+ if (green) |
||||
+ *green = g_memdup2 (gamma->green, sizeof (unsigned short) * gamma->size); |
||||
+ if (blue) |
||||
+ *blue = g_memdup2 (gamma->blue, sizeof (unsigned short) * gamma->size); |
||||
|
||||
XRRFreeGamma (gamma); |
||||
} |
||||
diff --git a/src/org.gnome.Mutter.DisplayConfig.xml b/src/org.gnome.Mutter.DisplayConfig.xml |
||||
index c6859c2c09..5f85c5e271 100644 |
||||
--- a/src/org.gnome.Mutter.DisplayConfig.xml |
||||
+++ b/src/org.gnome.Mutter.DisplayConfig.xml |
||||
@@ -297,6 +297,13 @@ |
||||
--> |
||||
<property name="ApplyMonitorsConfigAllowed" type="b" access="read" /> |
||||
|
||||
+ <!-- |
||||
+ NightLightSupported: |
||||
+ |
||||
+ Whether night light is supported by this system. |
||||
+ --> |
||||
+ <property name="NightLightSupported" type="b" access="read" /> |
||||
+ |
||||
<!-- |
||||
MonitorsChanged: |
||||
|
||||
-- |
||||
2.37.1 |
||||
|
@ -0,0 +1,107 @@
@@ -0,0 +1,107 @@
|
||||
From 86000c32d64cea7be2e6ed911cb9ea5df1306c0e 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 1/2] 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) |
||||
(cherry picked from commit 877cc3eb7d44e2886395151f763ec09bea350444) |
||||
--- |
||||
src/backends/native/meta-output-kms.c | 56 +++++++++++++++++++++------ |
||||
1 file changed, 44 insertions(+), 12 deletions(-) |
||||
|
||||
diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c |
||||
index f35cdf04e1..9adc20bfd9 100644 |
||||
--- a/src/backends/native/meta-output-kms.c |
||||
+++ b/src/backends/native/meta-output-kms.c |
||||
@@ -224,6 +224,45 @@ compare_modes (const void *one, |
||||
meta_crtc_mode_get_name (crtc_mode_two)); |
||||
} |
||||
|
||||
+static gboolean |
||||
+are_all_modes_equally_sized (MetaOutputInfo *output_info) |
||||
+{ |
||||
+ const MetaCrtcModeInfo *base = |
||||
+ meta_crtc_mode_get_info (output_info->modes[0]); |
||||
+ int i; |
||||
+ |
||||
+ for (i = 1; i < output_info->n_modes; i++) |
||||
+ { |
||||
+ const MetaCrtcModeInfo *mode_info = |
||||
+ meta_crtc_mode_get_info (output_info->modes[i]); |
||||
+ |
||||
+ if (base->width != mode_info->width || |
||||
+ base->height != mode_info->height) |
||||
+ return FALSE; |
||||
+ } |
||||
+ |
||||
+ return TRUE; |
||||
+} |
||||
+ |
||||
+static void |
||||
+maybe_add_fallback_modes (const MetaKmsConnectorState *connector_state, |
||||
+ MetaOutputInfo *output_info, |
||||
+ MetaGpuKms *gpu_kms, |
||||
+ MetaKmsConnector *kms_connector) |
||||
+{ |
||||
+ if (!connector_state->has_scaling) |
||||
+ return; |
||||
+ |
||||
+ if (output_info->connector_type == DRM_MODE_CONNECTOR_eDP && |
||||
+ !are_all_modes_equally_sized (output_info)) |
||||
+ return; |
||||
+ |
||||
+ meta_topic (META_DEBUG_KMS, "Adding common modes to connector %u on %s", |
||||
+ meta_kms_connector_get_id (kms_connector), |
||||
+ meta_gpu_kms_get_file_path (gpu_kms)); |
||||
+ add_common_modes (output_info, gpu_kms); |
||||
+} |
||||
+ |
||||
static gboolean |
||||
init_output_modes (MetaOutputInfo *output_info, |
||||
MetaGpuKms *gpu_kms, |
||||
@@ -252,14 +291,7 @@ init_output_modes (MetaOutputInfo *output_info, |
||||
output_info->preferred_mode = output_info->modes[i]; |
||||
} |
||||
|
||||
- if (connector_state->has_scaling) |
||||
- { |
||||
- meta_topic (META_DEBUG_KMS, "Adding common modes to connector %u on %s", |
||||
- meta_kms_connector_get_id (kms_connector), |
||||
- meta_gpu_kms_get_file_path (gpu_kms)); |
||||
- add_common_modes (output_info, gpu_kms); |
||||
- } |
||||
- |
||||
+ maybe_add_fallback_modes (connector_state, output_info, gpu_kms, kms_connector); |
||||
if (!output_info->modes) |
||||
{ |
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, |
||||
@@ -322,6 +354,10 @@ meta_output_kms_new (MetaGpuKms *gpu_kms, |
||||
output_info->height_mm = connector_state->height_mm; |
||||
} |
||||
|
||||
+ drm_connector_type = meta_kms_connector_get_connector_type (kms_connector); |
||||
+ output_info->connector_type = |
||||
+ meta_kms_connector_type_from_drm (drm_connector_type); |
||||
+ |
||||
if (!init_output_modes (output_info, gpu_kms, kms_connector, error)) |
||||
return NULL; |
||||
|
||||
@@ -349,10 +385,6 @@ meta_output_kms_new (MetaGpuKms *gpu_kms, |
||||
|
||||
meta_output_info_parse_edid (output_info, connector_state->edid_data); |
||||
|
||||
- drm_connector_type = meta_kms_connector_get_connector_type (kms_connector); |
||||
- output_info->connector_type = |
||||
- meta_kms_connector_type_from_drm (drm_connector_type); |
||||
- |
||||
output_info->tile_info = connector_state->tile_info; |
||||
|
||||
output = g_object_new (META_TYPE_OUTPUT_KMS, |
||||
-- |
||||
2.37.1 |
||||
|
@ -0,0 +1,63 @@
@@ -0,0 +1,63 @@
|
||||
From fa70ee1cd78e2b161545bc47a1c1083063030f77 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> |
||||
Date: Mon, 11 Oct 2021 10:52:43 +0200 |
||||
Subject: [PATCH 1/5] renderer/native: Log render mode per device |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2051> |
||||
(cherry picked from commit e8249a572d669c4c0a8464d6bce556b2cbaca4ef) |
||||
(cherry picked from commit fe0ea79b83256d80f1dee1e4a49c94a5d6fd18a6) |
||||
--- |
||||
src/backends/native/meta-renderer-native.c | 30 ++++++++++++++++++++++ |
||||
1 file changed, 30 insertions(+) |
||||
|
||||
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c |
||||
index 735c37202..f92f648e5 100644 |
||||
--- a/src/backends/native/meta-renderer-native.c |
||||
+++ b/src/backends/native/meta-renderer-native.c |
||||
@@ -1808,6 +1808,24 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat |
||||
return NULL; |
||||
} |
||||
|
||||
+static const char * |
||||
+renderer_data_mode_to_string (MetaRendererNativeMode mode) |
||||
+{ |
||||
+ switch (mode) |
||||
+ { |
||||
+ case META_RENDERER_NATIVE_MODE_GBM: |
||||
+ return "gbm"; |
||||
+ case META_RENDERER_NATIVE_MODE_SURFACELESS: |
||||
+ return "surfaceless"; |
||||
+#ifdef HAVE_EGL_DEVICE |
||||
+ case META_RENDERER_NATIVE_MODE_EGL_DEVICE: |
||||
+ return "egldevice"; |
||||
+#endif |
||||
+ } |
||||
+ |
||||
+ g_assert_not_reached (); |
||||
+} |
||||
+ |
||||
static gboolean |
||||
create_renderer_gpu_data (MetaRendererNative *renderer_native, |
||||
MetaGpuKms *gpu_kms, |
||||
@@ -1822,6 +1840,18 @@ create_renderer_gpu_data (MetaRendererNative *renderer_native, |
||||
if (!renderer_gpu_data) |
||||
return FALSE; |
||||
|
||||
+ if (gpu_kms) |
||||
+ { |
||||
+ g_message ("Created %s renderer for '%s'", |
||||
+ renderer_data_mode_to_string (renderer_gpu_data->mode), |
||||
+ meta_gpu_kms_get_file_path (gpu_kms)); |
||||
+ } |
||||
+ else |
||||
+ { |
||||
+ g_message ("Created %s renderer without GPU", |
||||
+ renderer_data_mode_to_string (renderer_gpu_data->mode)); |
||||
+ } |
||||
+ |
||||
g_hash_table_insert (renderer_native->gpu_datas, |
||||
gpu_kms, |
||||
renderer_gpu_data); |
||||
-- |
||||
2.35.1 |
||||
|
@ -0,0 +1,43 @@
@@ -0,0 +1,43 @@
|
||||
From 69c40c6d126a5c804db54ce0afe581362e4fd33b Mon Sep 17 00:00:00 2001 |
||||
From: Daniel van Vugt <daniel.van.vugt@canonical.com> |
||||
Date: Tue, 12 Apr 2022 18:37:29 +0800 |
||||
Subject: [PATCH 2/2] crtc/kms: Don't add gamma to the update if unsupported by |
||||
the CRTC |
||||
|
||||
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2197 |
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2360> |
||||
--- |
||||
src/backends/native/meta-crtc-kms.c | 6 +++++- |
||||
1 file changed, 5 insertions(+), 1 deletion(-) |
||||
|
||||
diff --git a/src/backends/native/meta-crtc-kms.c b/src/backends/native/meta-crtc-kms.c |
||||
index f1bc79146..953f023ce 100644 |
||||
--- a/src/backends/native/meta-crtc-kms.c |
||||
+++ b/src/backends/native/meta-crtc-kms.c |
||||
@@ -201,10 +201,14 @@ meta_crtc_kms_maybe_set_gamma (MetaCrtcKms *crtc_kms, |
||||
MetaKms *kms = meta_kms_device_get_kms (kms_device); |
||||
MetaKmsUpdate *kms_update; |
||||
MetaKmsCrtcGamma *gamma; |
||||
+ MetaKmsCrtc *kms_crtc = meta_crtc_kms_get_kms_crtc (crtc_kms); |
||||
|
||||
if (crtc_kms->is_gamma_valid) |
||||
return; |
||||
|
||||
+ if (!meta_kms_crtc_has_gamma (kms_crtc)) |
||||
+ return; |
||||
+ |
||||
gamma = meta_monitor_manager_native_get_cached_crtc_gamma (monitor_manager_native, |
||||
crtc_kms); |
||||
if (!gamma) |
||||
@@ -212,7 +216,7 @@ meta_crtc_kms_maybe_set_gamma (MetaCrtcKms *crtc_kms, |
||||
|
||||
kms_update = meta_kms_ensure_pending_update (kms, kms_device); |
||||
meta_kms_update_set_crtc_gamma (kms_update, |
||||
- meta_crtc_kms_get_kms_crtc (crtc_kms), |
||||
+ kms_crtc, |
||||
gamma->size, |
||||
gamma->red, |
||||
gamma->green, |
||||
-- |
||||
2.35.1 |
||||
|
@ -0,0 +1,120 @@
@@ -0,0 +1,120 @@
|
||||
From b328c8cc8b0b31a4afe2bfc857c6ea5a2b837ef2 Mon Sep 17 00:00:00 2001 |
||||
From: Piotr Lopatka <piotr.lopatka@gmail.com> |
||||
Date: Fri, 3 Sep 2021 20:01:59 +0100 |
||||
Subject: [PATCH 2/2] onscreen/native: Pass damage rectangles when page |
||||
flipping |
||||
|
||||
This commit passes damage rectangles metadata to the (KMS) primary |
||||
plane. |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1879> |
||||
--- |
||||
src/backends/native/meta-crtc-kms.c | 4 +++- |
||||
src/backends/native/meta-crtc-kms.h | 6 +++--- |
||||
src/backends/native/meta-onscreen-native.c | 22 ++++++++++++++++++---- |
||||
3 files changed, 24 insertions(+), 8 deletions(-) |
||||
|
||||
diff --git a/src/backends/native/meta-crtc-kms.c b/src/backends/native/meta-crtc-kms.c |
||||
index f1bc79146af..fde64817532 100644 |
||||
--- a/src/backends/native/meta-crtc-kms.c |
||||
+++ b/src/backends/native/meta-crtc-kms.c |
||||
@@ -115,7 +115,7 @@ meta_crtc_kms_apply_transform (MetaCrtcKms *crtc_kms, |
||||
hw_transform); |
||||
} |
||||
|
||||
-void |
||||
+MetaKmsPlaneAssignment * |
||||
meta_crtc_kms_assign_primary_plane (MetaCrtcKms *crtc_kms, |
||||
MetaDrmBuffer *buffer, |
||||
MetaKmsUpdate *kms_update) |
||||
@@ -161,6 +161,8 @@ meta_crtc_kms_assign_primary_plane (MetaCrtcKms *crtc_kms, |
||||
dst_rect, |
||||
flags); |
||||
meta_crtc_kms_apply_transform (crtc_kms, plane_assignment); |
||||
+ |
||||
+ return plane_assignment; |
||||
} |
||||
|
||||
static GList * |
||||
diff --git a/src/backends/native/meta-crtc-kms.h b/src/backends/native/meta-crtc-kms.h |
||||
index f8d241bbb51..bd80835f986 100644 |
||||
--- a/src/backends/native/meta-crtc-kms.h |
||||
+++ b/src/backends/native/meta-crtc-kms.h |
||||
@@ -48,9 +48,9 @@ void meta_crtc_kms_set_cursor_renderer_private (MetaCrtcKms *crtc_kms, |
||||
void meta_crtc_kms_apply_transform (MetaCrtcKms *crtc_kms, |
||||
MetaKmsPlaneAssignment *kms_plane_assignment); |
||||
|
||||
-void meta_crtc_kms_assign_primary_plane (MetaCrtcKms *crtc_kms, |
||||
- MetaDrmBuffer *buffer, |
||||
- MetaKmsUpdate *kms_update); |
||||
+MetaKmsPlaneAssignment * meta_crtc_kms_assign_primary_plane (MetaCrtcKms *crtc_kms, |
||||
+ MetaDrmBuffer *buffer, |
||||
+ MetaKmsUpdate *kms_update); |
||||
|
||||
void meta_crtc_kms_set_mode (MetaCrtcKms *crtc_kms, |
||||
MetaKmsUpdate *kms_update); |
||||
diff --git a/src/backends/native/meta-onscreen-native.c b/src/backends/native/meta-onscreen-native.c |
||||
index 112bd0d438b..00b2d9f89cc 100644 |
||||
--- a/src/backends/native/meta-onscreen-native.c |
||||
+++ b/src/backends/native/meta-onscreen-native.c |
||||
@@ -416,7 +416,9 @@ static void |
||||
meta_onscreen_native_flip_crtc (CoglOnscreen *onscreen, |
||||
MetaRendererView *view, |
||||
MetaCrtc *crtc, |
||||
- MetaKmsPageFlipListenerFlag flags) |
||||
+ MetaKmsPageFlipListenerFlag flags, |
||||
+ const int *rectangles, |
||||
+ int n_rectangles) |
||||
{ |
||||
MetaOnscreenNative *onscreen_native = META_ONSCREEN_NATIVE (onscreen); |
||||
MetaRendererNative *renderer_native = onscreen_native->renderer_native; |
||||
@@ -430,6 +432,7 @@ meta_onscreen_native_flip_crtc (CoglOnscreen *onscreen, |
||||
MetaKmsUpdate *kms_update; |
||||
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state = NULL; |
||||
MetaDrmBuffer *buffer; |
||||
+ MetaKmsPlaneAssignment *plane_assignment; |
||||
|
||||
COGL_TRACE_BEGIN_SCOPED (MetaOnscreenNativeFlipCrtcs, |
||||
"Onscreen (flip CRTCs)"); |
||||
@@ -456,8 +459,15 @@ meta_onscreen_native_flip_crtc (CoglOnscreen *onscreen, |
||||
buffer = secondary_gpu_state->gbm.next_fb; |
||||
} |
||||
|
||||
- meta_crtc_kms_assign_primary_plane (crtc_kms, buffer, kms_update); |
||||
+ plane_assignment = meta_crtc_kms_assign_primary_plane (crtc_kms, |
||||
+ buffer, |
||||
+ kms_update); |
||||
|
||||
+ if (rectangles != NULL && n_rectangles != 0) |
||||
+ { |
||||
+ meta_kms_plane_assignment_set_fb_damage (plane_assignment, |
||||
+ rectangles, n_rectangles); |
||||
+ } |
||||
break; |
||||
case META_RENDERER_NATIVE_MODE_SURFACELESS: |
||||
g_assert_not_reached (); |
||||
@@ -1081,7 +1091,9 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, |
||||
meta_onscreen_native_flip_crtc (onscreen, |
||||
onscreen_native->view, |
||||
onscreen_native->crtc, |
||||
- META_KMS_PAGE_FLIP_LISTENER_FLAG_NONE); |
||||
+ META_KMS_PAGE_FLIP_LISTENER_FLAG_NONE, |
||||
+ rectangles, |
||||
+ n_rectangles); |
||||
} |
||||
else |
||||
{ |
||||
@@ -1299,7 +1311,9 @@ meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen, |
||||
meta_onscreen_native_flip_crtc (onscreen, |
||||
onscreen_native->view, |
||||
onscreen_native->crtc, |
||||
- META_KMS_PAGE_FLIP_LISTENER_FLAG_DROP_ON_ERROR); |
||||
+ META_KMS_PAGE_FLIP_LISTENER_FLAG_DROP_ON_ERROR, |
||||
+ NULL, |
||||
+ 0); |
||||
|
||||
kms_crtc = meta_crtc_kms_get_kms_crtc (META_CRTC_KMS (onscreen_native->crtc)); |
||||
kms_device = meta_kms_crtc_get_device (kms_crtc); |
||||
-- |
||||
2.36.1 |
||||
|
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
From cd8b90a7a7185c3f177469d1a37654a9e8539cd1 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> |
||||
Date: Thu, 29 Sep 2022 14:23:55 +0200 |
||||
Subject: [PATCH 2/2] output/kms: Don't attemp to add common modes on |
||||
connectors without modes |
||||
|
||||
We have no way to sanely add safe modes if there are no modes we can |
||||
compare with, thus don't try. |
||||
|
||||
Fixes the following crash: |
||||
|
||||
#0 are_all_modes_equally_sized at ../src/backends/native/meta-output-kms.c:284 |
||||
#1 maybe_add_fallback_modes at ../src/backends/native/meta-output-kms.c:310 |
||||
#2 init_output_modes at ../src/backends/native/meta-output-kms.c:347 |
||||
#3 meta_output_kms_new at ../src/backends/native/meta-output-kms.c:414 |
||||
#4 init_outputs at ../src/backends/native/meta-gpu-kms.c:332 |
||||
#5 meta_gpu_kms_read_current at ../src/backends/native/meta-gpu-kms.c:368 |
||||
#6 meta_gpu_kms_new at ../src/backends/native/meta-gpu-kms.c:403 |
||||
#7 create_gpu_from_udev_device at ../src/backends/native/meta-backend-native.c:461 |
||||
#8 init_gpus at ../src/backends/native/meta-backend-native.c:551 |
||||
#9 meta_backend_native_initable_init at ../src/backends/native/meta-backend-native.c:632 |
||||
|
||||
Fixes: 877cc3eb7d44e2886395151f763ec09bea350444 |
||||
Related: https://bugzilla.redhat.com/show_bug.cgi?id=2127801 |
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2646> |
||||
(cherry picked from commit 2c8adb19660cb2cd53381372833e088962437d3b) |
||||
--- |
||||
src/backends/native/meta-output-kms.c | 3 +++ |
||||
1 file changed, 3 insertions(+) |
||||
|
||||
diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c |
||||
index 9adc20bfd9..058ab7c053 100644 |
||||
--- a/src/backends/native/meta-output-kms.c |
||||
+++ b/src/backends/native/meta-output-kms.c |
||||
@@ -250,6 +250,9 @@ maybe_add_fallback_modes (const MetaKmsConnectorState *connector_state, |
||||
MetaGpuKms *gpu_kms, |
||||
MetaKmsConnector *kms_connector) |
||||
{ |
||||
+ if (!connector_state->modes) |
||||
+ return; |
||||
+ |
||||
if (!connector_state->has_scaling) |
||||
return; |
||||
|
||||
-- |
||||
2.37.1 |
||||
|
@ -0,0 +1,94 @@
@@ -0,0 +1,94 @@
|
||||
From 425710866438a62843b96272a6cbc6c22174f10c Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> |
||||
Date: Mon, 11 Oct 2021 10:39:43 +0200 |
||||
Subject: [PATCH 2/5] renderer/native: Try the gbm renderer before the |
||||
EGLDevice renderer |
||||
|
||||
This switches the order of what renderer mode is tried first, so that |
||||
the gbm renderer mode is preferred on an NVIDIA driver where it is |
||||
supported. |
||||
|
||||
We fall back to still try the EGLDevice renderer mode if the created gbm |
||||
renderer is not hardware accelerated. |
||||
|
||||
The last fallback is still to use the gbm renderer, even if it is not |
||||
hardware accelerated, as this is needed when hardware acceleration isn't |
||||
available at all. The original reason for the old order was due to the |
||||
fact that a gbm renderer without hardware acceleration would succeed |
||||
even on NVIDIA driver that didn't support gbm. |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2051> |
||||
(cherry picked from commit 8fc1325e8e713dfa05a12c47e6e981e50d3cda61) |
||||
--- |
||||
src/backends/native/meta-renderer-native.c | 44 +++++++++++----------- |
||||
1 file changed, 23 insertions(+), 21 deletions(-) |
||||
|
||||
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c |
||||
index f92f648e5..c851619a1 100644 |
||||
--- a/src/backends/native/meta-renderer-native.c |
||||
+++ b/src/backends/native/meta-renderer-native.c |
||||
@@ -1754,38 +1754,40 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat |
||||
MetaGpuKms *gpu_kms, |
||||
GError **error) |
||||
{ |
||||
- MetaRendererNativeGpuData *renderer_gpu_data; |
||||
+ MetaRendererNativeGpuData *gbm_renderer_gpu_data; |
||||
GError *gbm_error = NULL; |
||||
#ifdef HAVE_EGL_DEVICE |
||||
+ MetaRendererNativeGpuData *egl_stream_renderer_gpu_data; |
||||
GError *egl_device_error = NULL; |
||||
#endif |
||||
|
||||
if (!gpu_kms) |
||||
return create_renderer_gpu_data_surfaceless (renderer_native, error); |
||||
|
||||
-#ifdef HAVE_EGL_DEVICE |
||||
- /* Try to initialize the EGLDevice backend first. Whenever we use a |
||||
- * non-NVIDIA GPU, the EGLDevice enumeration function won't find a match, and |
||||
- * we'll fall back to GBM (which will always succeed as it has a software |
||||
- * rendering fallback) |
||||
- */ |
||||
- renderer_gpu_data = create_renderer_gpu_data_egl_device (renderer_native, |
||||
- gpu_kms, |
||||
- &egl_device_error); |
||||
- if (renderer_gpu_data) |
||||
- return renderer_gpu_data; |
||||
-#endif |
||||
- |
||||
- renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native, |
||||
- gpu_kms, |
||||
- &gbm_error); |
||||
- if (renderer_gpu_data) |
||||
+ gbm_renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native, |
||||
+ gpu_kms, |
||||
+ &gbm_error); |
||||
+ if (gbm_renderer_gpu_data) |
||||
{ |
||||
+ if (gbm_renderer_gpu_data->secondary.is_hardware_rendering) |
||||
+ return gbm_renderer_gpu_data; |
||||
+ } |
||||
+ |
||||
#ifdef HAVE_EGL_DEVICE |
||||
- g_error_free (egl_device_error); |
||||
-#endif |
||||
- return renderer_gpu_data; |
||||
+ egl_stream_renderer_gpu_data = |
||||
+ create_renderer_gpu_data_egl_device (renderer_native, |
||||
+ gpu_kms, |
||||
+ &egl_device_error); |
||||
+ if (egl_stream_renderer_gpu_data) |
||||
+ { |
||||
+ g_clear_pointer (&gbm_renderer_gpu_data, |
||||
+ meta_renderer_native_gpu_data_free); |
||||
+ return egl_stream_renderer_gpu_data; |
||||
} |
||||
+#endif |
||||
+ |
||||
+ if (gbm_renderer_gpu_data) |
||||
+ return gbm_renderer_gpu_data; |
||||
|
||||
g_set_error (error, G_IO_ERROR, |
||||
G_IO_ERROR_FAILED, |
||||
-- |
||||
2.35.1 |
||||
|
@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
|
||||
From 8d6e41fc9b5194fb24523c939de54a2af46b5d07 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> |
||||
Date: Fri, 27 May 2022 18:19:27 +0200 |
||||
Subject: [PATCH] kms/crtc: Determine gamma support given the gamma length |
||||
|
||||
The property doesn't necessarily exist when using drivers that doesn't |
||||
support atomic mode setting, and the way it worked will break night |
||||
light and other gamma related features. This makes things use the gamma |
||||
length; if it is higher than 0, it definitely supports it one way or the |
||||
other, i.e. GAMMA_LUT with the atomic backend, and drmModeCrtcSetGamma() |
||||
with the legacy/simple backend. |
||||
|
||||
Fixes: 364572b95c8354ac66674064a8058aa98bc0bbef |
||||
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2287 |
||||
(cherry picked from commit a2ebd10f049d888e451938e23a035ed97e0c8eff) |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2452> |
||||
--- |
||||
src/backends/native/meta-kms-crtc.c | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c |
||||
index 24f5a2d7400..0513af947c9 100644 |
||||
--- a/src/backends/native/meta-kms-crtc.c |
||||
+++ b/src/backends/native/meta-kms-crtc.c |
||||
@@ -96,7 +96,7 @@ meta_kms_crtc_is_active (MetaKmsCrtc *crtc) |
||||
gboolean |
||||
meta_kms_crtc_has_gamma (MetaKmsCrtc *crtc) |
||||
{ |
||||
- return !!meta_kms_crtc_get_prop_id (crtc, META_KMS_CRTC_PROP_GAMMA_LUT); |
||||
+ return crtc->current_state.gamma.size > 0; |
||||
} |
||||
|
||||
static void |
||||
-- |
||||
2.36.1 |
||||
|
@ -0,0 +1,100 @@
@@ -0,0 +1,100 @@
|
||||
From 07f63ad466b66cc02b49a326789686bce9325201 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> |
||||
Date: Thu, 14 Oct 2021 18:36:43 +0200 |
||||
Subject: [PATCH 3/5] wayland: Only init EGLStream controller if we didn't end |
||||
up with gbm |
||||
|
||||
When we use gbm together with the NVIDIA driver, we want the EGL/Vulkan |
||||
clients to do the same, instead of using the EGLStream paths. To achieve |
||||
that, make sure to only initialize the EGLStream controller when we |
||||
didn't end up using gbm as the renderer backend. |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2052> |
||||
(cherry picked from commit ac907119ae0f415c099976635c3b1dff4d2d7201) |
||||
(cherry picked from commit e3931f7b8cbd44072137c5dc9de9041486daeade) |
||||
--- |
||||
src/backends/native/meta-renderer-native.c | 11 +++++++++ |
||||
src/backends/native/meta-renderer-native.h | 2 ++ |
||||
src/wayland/meta-wayland.c | 26 ++++++++++++++++++++-- |
||||
3 files changed, 37 insertions(+), 2 deletions(-) |
||||
|
||||
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c |
||||
index c851619a1..e7460fbf1 100644 |
||||
--- a/src/backends/native/meta-renderer-native.c |
||||
+++ b/src/backends/native/meta-renderer-native.c |
||||
@@ -201,6 +201,17 @@ meta_renderer_native_has_pending_mode_set (MetaRendererNative *renderer_native) |
||||
return renderer_native->pending_mode_set; |
||||
} |
||||
|
||||
+MetaRendererNativeMode |
||||
+meta_renderer_native_get_mode (MetaRendererNative *renderer_native) |
||||
+{ |
||||
+ MetaGpuKms *primary_gpu = renderer_native->primary_gpu_kms; |
||||
+ MetaRendererNativeGpuData *primary_gpu_data; |
||||
+ |
||||
+ primary_gpu_data = meta_renderer_native_get_gpu_data (renderer_native, |
||||
+ primary_gpu); |
||||
+ return primary_gpu_data->mode; |
||||
+} |
||||
+ |
||||
static void |
||||
meta_renderer_native_disconnect (CoglRenderer *cogl_renderer) |
||||
{ |
||||
diff --git a/src/backends/native/meta-renderer-native.h b/src/backends/native/meta-renderer-native.h |
||||
index 9475e1857..8c06c2473 100644 |
||||
--- a/src/backends/native/meta-renderer-native.h |
||||
+++ b/src/backends/native/meta-renderer-native.h |
||||
@@ -66,4 +66,6 @@ void meta_renderer_native_reset_modes (MetaRendererNative *renderer_native); |
||||
|
||||
gboolean meta_renderer_native_use_modifiers (MetaRendererNative *renderer_native); |
||||
|
||||
+MetaRendererNativeMode meta_renderer_native_get_mode (MetaRendererNative *renderer_native); |
||||
+ |
||||
#endif /* META_RENDERER_NATIVE_H */ |
||||
diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c |
||||
index 8f16aa429..a3f098410 100644 |
||||
--- a/src/wayland/meta-wayland.c |
||||
+++ b/src/wayland/meta-wayland.c |
||||
@@ -50,6 +50,10 @@ |
||||
#include "wayland/meta-xwayland-private.h" |
||||
#include "wayland/meta-xwayland.h" |
||||
|
||||
+#ifdef HAVE_NATIVE_BACKEND |
||||
+#include "backends/native/meta-renderer-native.h" |
||||
+#endif |
||||
+ |
||||
static char *_display_name_override; |
||||
|
||||
G_DEFINE_TYPE (MetaWaylandCompositor, meta_wayland_compositor, G_TYPE_OBJECT) |
||||
@@ -521,8 +525,26 @@ meta_wayland_compositor_setup (MetaWaylandCompositor *compositor) |
||||
compositor); |
||||
|
||||
#ifdef HAVE_WAYLAND_EGLSTREAM |
||||
- meta_wayland_eglstream_controller_init (compositor); |
||||
-#endif |
||||
+ { |
||||
+ gboolean should_enable_eglstream_controller = TRUE; |
||||
+#if defined(HAVE_EGL_DEVICE) && defined(HAVE_NATIVE_BACKEND) |
||||
+ MetaBackend *backend = meta_get_backend (); |
||||
+ MetaRenderer *renderer = meta_backend_get_renderer (backend); |
||||
+ |
||||
+ if (META_IS_RENDERER_NATIVE (renderer)) |
||||
+ { |
||||
+ MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer); |
||||
+ |
||||
+ if (meta_renderer_native_get_mode (renderer_native) == |
||||
+ META_RENDERER_NATIVE_MODE_GBM) |
||||
+ should_enable_eglstream_controller = FALSE; |
||||
+ } |
||||
+#endif /* defined(HAVE_EGL_DEVICE) && defined(HAVE_NATIVE_BACKEND) */ |
||||
+ |
||||
+ if (should_enable_eglstream_controller) |
||||
+ meta_wayland_eglstream_controller_init (compositor); |
||||
+ } |
||||
+#endif /* HAVE_WAYLAND_EGLSTREAM */ |
||||
|
||||
if (meta_get_x11_display_policy () != META_DISPLAY_POLICY_DISABLED) |
||||
{ |
||||
-- |
||||
2.35.1 |
||||
|
@ -0,0 +1,70 @@
@@ -0,0 +1,70 @@
|
||||
From 4c23158f81c3c4b91353150fd4c28246ce1e692f Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> |
||||
Date: Fri, 3 Dec 2021 11:07:00 +0100 |
||||
Subject: [PATCH 4/5] renderer/native: Allow forcing EGLStream backend |
||||
|
||||
The GBM support in the NVIDIA driver is fairly new, and to make it |
||||
easier to identify whether a problem encountered is related to using GBM |
||||
instead of EGLStreams, add a debug environment variable to force using |
||||
EGLStream instead of GBM. |
||||
|
||||
To force using EGLStream instead of GBM, use |
||||
|
||||
MUTTER_DEBUG_FORCE_EGL_STREAM=1 |
||||
|
||||
Related: https://gitlab.gnome.org/GNOME/mutter/-/issues/2045 |
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2132> |
||||
(cherry picked from commit d43cc776ef733251fc02e8e62669ea4ba7e68e2c) |
||||
--- |
||||
src/backends/native/meta-renderer-native.c | 26 ++++++++++++++++------ |
||||
1 file changed, 19 insertions(+), 7 deletions(-) |
||||
|
||||
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c |
||||
index e7460fbf1..0cd7a27d6 100644 |
||||
--- a/src/backends/native/meta-renderer-native.c |
||||
+++ b/src/backends/native/meta-renderer-native.c |
||||
@@ -1765,7 +1765,7 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat |
||||
MetaGpuKms *gpu_kms, |
||||
GError **error) |
||||
{ |
||||
- MetaRendererNativeGpuData *gbm_renderer_gpu_data; |
||||
+ MetaRendererNativeGpuData *gbm_renderer_gpu_data = NULL; |
||||
GError *gbm_error = NULL; |
||||
#ifdef HAVE_EGL_DEVICE |
||||
MetaRendererNativeGpuData *egl_stream_renderer_gpu_data; |
||||
@@ -1775,14 +1775,26 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat |
||||
if (!gpu_kms) |
||||
return create_renderer_gpu_data_surfaceless (renderer_native, error); |
||||
|
||||
- gbm_renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native, |
||||
- gpu_kms, |
||||
- &gbm_error); |
||||
- if (gbm_renderer_gpu_data) |
||||
+#ifdef HAVE_EGL_DEVICE |
||||
+ if (g_strcmp0 (getenv ("MUTTER_DEBUG_FORCE_EGL_STREAM"), "1") != 0) |
||||
+#endif |
||||
+ { |
||||
+ gbm_renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native, |
||||
+ gpu_kms, |
||||
+ &gbm_error); |
||||
+ if (gbm_renderer_gpu_data) |
||||
+ { |
||||
+ if (gbm_renderer_gpu_data->secondary.is_hardware_rendering) |
||||
+ return gbm_renderer_gpu_data; |
||||
+ } |
||||
+ } |
||||
+#ifdef HAVE_EGL_DEVICE |
||||
+ else |
||||
{ |
||||
- if (gbm_renderer_gpu_data->secondary.is_hardware_rendering) |
||||
- return gbm_renderer_gpu_data; |
||||
+ g_set_error (&gbm_error, G_IO_ERROR, G_IO_ERROR_FAILED, |
||||
+ "GBM backend was disabled using env var"); |
||||
} |
||||
+#endif |
||||
|
||||
#ifdef HAVE_EGL_DEVICE |
||||
egl_stream_renderer_gpu_data = |
||||
-- |
||||
2.35.1 |
||||
|
@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
|
||||
From f5ae26bb44c42369cbcf0a9b7da049222b5ecbf8 Mon Sep 17 00:00:00 2001 |
||||
From: Olivier Fourdan <ofourdan@redhat.com> |
||||
Date: Fri, 10 Dec 2021 10:57:29 +0100 |
||||
Subject: [PATCH 5/5] cursor-renderer/native: Add a means to disable HW cursors |
||||
|
||||
When dealing with a faulty hardware or bugs in the driver, it might be |
||||
interesting to force the use of software cursors for debugging purposes. |
||||
|
||||
Add a debug environment variable MUTTER_DEBUG_DISABLE_HW_CURSORS to |
||||
disable hardware cursors and force using software cursors. |
||||
|
||||
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2046 |
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2150> |
||||
(cherry picked from commit 56939abd2f1691eea9edf85cb715ebf275944e7e) |
||||
--- |
||||
src/backends/native/meta-cursor-renderer-native.c | 5 ++++- |
||||
1 file changed, 4 insertions(+), 1 deletion(-) |
||||
|
||||
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c |
||||
index fcfe8eb98..237f9a3d5 100644 |
||||
--- a/src/backends/native/meta-cursor-renderer-native.c |
||||
+++ b/src/backends/native/meta-cursor-renderer-native.c |
||||
@@ -1828,7 +1828,10 @@ meta_cursor_renderer_native_new (MetaBackend *backend, |
||||
|
||||
priv->backend = backend; |
||||
|
||||
- init_hw_cursor_support (cursor_renderer_native); |
||||
+ if (g_strcmp0 (getenv ("MUTTER_DEBUG_DISABLE_HW_CURSORS"), "1")) |
||||
+ init_hw_cursor_support (cursor_renderer_native); |
||||
+ else |
||||
+ g_message ("Disabling hardware cursors because MUTTER_DEBUG_DISABLE_HW_CURSORS is set"); |
||||
|
||||
return cursor_renderer_native; |
||||
} |
||||
-- |
||||
2.35.1 |
||||
|
@ -0,0 +1,213 @@
@@ -0,0 +1,213 @@
|
||||
From d89c71ed2bdb18e9b01891d6b999c44f955778dc Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> |
||||
Date: Wed, 1 Sep 2021 21:12:03 +0200 |
||||
Subject: [PATCH 1/2] context: Add :unsafe-mode property |
||||
|
||||
We are going to restrict several sensitive D-Bus APIs to a set |
||||
of allowed callers (like Settings or portal implementations). |
||||
|
||||
Add an :unsafe-mode property to the context to allow turning off |
||||
those restrictions temporarily, in order to not get in the way |
||||
of development/debugging. |
||||
|
||||
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3943 |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1983> |
||||
--- |
||||
src/backends/meta-backend-private.h | 4 ++ |
||||
src/backends/meta-backend.c | 83 +++++++++++++++++++++++++++++ |
||||
2 files changed, 87 insertions(+) |
||||
|
||||
diff --git a/src/backends/meta-backend-private.h b/src/backends/meta-backend-private.h |
||||
index b930462b2..583d4e151 100644 |
||||
--- a/src/backends/meta-backend-private.h |
||||
+++ b/src/backends/meta-backend-private.h |
||||
@@ -133,6 +133,10 @@ void meta_backend_foreach_device_monitor (MetaBackend *backend, |
||||
GFunc func, |
||||
gpointer user_data); |
||||
|
||||
+gboolean meta_backend_get_unsafe_mode (MetaBackend *backend); |
||||
+void meta_backend_set_unsafe_mode (MetaBackend *backend, |
||||
+ gboolean enable); |
||||
+ |
||||
META_EXPORT_TEST |
||||
MetaMonitorManager * meta_backend_get_monitor_manager (MetaBackend *backend); |
||||
MetaOrientationManager * meta_backend_get_orientation_manager (MetaBackend *backend); |
||||
diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c |
||||
index ff84bfe6a..18bee2484 100644 |
||||
--- a/src/backends/meta-backend.c |
||||
+++ b/src/backends/meta-backend.c |
||||
@@ -88,6 +88,17 @@ |
||||
#include "wayland/meta-wayland.h" |
||||
#endif |
||||
|
||||
+enum |
||||
+{ |
||||
+ PROP_0, |
||||
+ |
||||
+ PROP_UNSAFE_MODE, |
||||
+ |
||||
+ N_PROPS |
||||
+}; |
||||
+ |
||||
+static GParamSpec *obj_props[N_PROPS]; |
||||
+ |
||||
enum |
||||
{ |
||||
KEYMAP_CHANGED, |
||||
@@ -158,6 +169,8 @@ struct _MetaBackendPrivate |
||||
|
||||
gboolean is_pointer_position_initialized; |
||||
|
||||
+ gboolean unsafe_mode; |
||||
+ |
||||
guint device_update_idle_id; |
||||
|
||||
GHashTable *device_monitors; |
||||
@@ -814,6 +827,64 @@ upower_vanished (GDBusConnection *connection, |
||||
g_clear_object (&priv->upower_proxy); |
||||
} |
||||
|
||||
+gboolean |
||||
+meta_backend_get_unsafe_mode (MetaBackend *backend) |
||||
+{ |
||||
+ MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); |
||||
+ |
||||
+ return priv->unsafe_mode; |
||||
+} |
||||
+ |
||||
+void |
||||
+meta_backend_set_unsafe_mode (MetaBackend *backend, |
||||
+ gboolean enable) |
||||
+{ |
||||
+ MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); |
||||
+ |
||||
+ if (priv->unsafe_mode == enable) |
||||
+ return; |
||||
+ |
||||
+ priv->unsafe_mode = enable; |
||||
+ g_object_notify_by_pspec (G_OBJECT (backend), obj_props[PROP_UNSAFE_MODE]); |
||||
+} |
||||
+ |
||||
+static void |
||||
+meta_backend_get_property (GObject *object, |
||||
+ guint prop_id, |
||||
+ GValue *value, |
||||
+ GParamSpec *pspec) |
||||
+{ |
||||
+ MetaBackend *backend = META_BACKEND (object); |
||||
+ MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); |
||||
+ |
||||
+ switch (prop_id) |
||||
+ { |
||||
+ case PROP_UNSAFE_MODE: |
||||
+ g_value_set_boolean (value, priv->unsafe_mode); |
||||
+ break; |
||||
+ default: |
||||
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |
||||
+ } |
||||
+} |
||||
+ |
||||
+static void |
||||
+meta_backend_set_property (GObject *object, |
||||
+ guint prop_id, |
||||
+ const GValue *value, |
||||
+ GParamSpec *pspec) |
||||
+{ |
||||
+ MetaBackend *backend = META_BACKEND (object); |
||||
+ |
||||
+ switch (prop_id) |
||||
+ { |
||||
+ case PROP_UNSAFE_MODE: |
||||
+ meta_backend_set_unsafe_mode (backend, g_value_get_boolean (value)); |
||||
+ break; |
||||
+ default: |
||||
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |
||||
+ } |
||||
+} |
||||
+ |
||||
static void |
||||
meta_backend_constructed (GObject *object) |
||||
{ |
||||
@@ -851,6 +922,8 @@ meta_backend_class_init (MetaBackendClass *klass) |
||||
|
||||
object_class->dispose = meta_backend_dispose; |
||||
object_class->constructed = meta_backend_constructed; |
||||
+ object_class->get_property = meta_backend_get_property; |
||||
+ object_class->set_property = meta_backend_set_property; |
||||
|
||||
klass->post_init = meta_backend_real_post_init; |
||||
klass->grab_device = meta_backend_real_grab_device; |
||||
@@ -907,6 +980,16 @@ meta_backend_class_init (MetaBackendClass *klass) |
||||
NULL, NULL, NULL, |
||||
G_TYPE_NONE, 0); |
||||
|
||||
+ obj_props[PROP_UNSAFE_MODE] = |
||||
+ g_param_spec_boolean ("unsafe-mode", |
||||
+ "unsafe mode", |
||||
+ "Unsafe mode", |
||||
+ FALSE, |
||||
+ G_PARAM_READWRITE | |
||||
+ G_PARAM_EXPLICIT_NOTIFY | |
||||
+ G_PARAM_STATIC_STRINGS); |
||||
+ g_object_class_install_properties (object_class, N_PROPS, obj_props); |
||||
+ |
||||
mutter_stage_views = g_getenv ("MUTTER_STAGE_VIEWS"); |
||||
stage_views_disabled = g_strcmp0 (mutter_stage_views, "0") == 0; |
||||
} |
||||
-- |
||||
2.35.1 |
||||
|
||||
|
||||
From dc69aa57be79fa7f371788c852f6e23cf0d261cb Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> |
||||
Date: Thu, 2 Sep 2021 18:41:16 +0200 |
||||
Subject: [PATCH 2/2] context: Add (hidden) --unsafe-mode option |
||||
|
||||
When running gnome-shell, it is possible to toggle unsafe-mode in |
||||
looking glass. We'll eventually start using the property in mutter |
||||
as well, so to make stand-alone debugging easier, also expose it |
||||
as a hidden command line option. |
||||
|
||||
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3943 |
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1983> |
||||
--- |
||||
src/core/main.c | 7 +++++++ |
||||
1 file changed, 7 insertions(+) |
||||
|
||||
diff --git a/src/core/main.c b/src/core/main.c |
||||
index 0d241f952..991d583a0 100644 |
||||
--- a/src/core/main.c |
||||
+++ b/src/core/main.c |
||||
@@ -218,6 +218,7 @@ static char *opt_wayland_display; |
||||
static gboolean opt_display_server; |
||||
static gboolean opt_headless; |
||||
#endif |
||||
+static gboolean opt_unsafe_mode; |
||||
static gboolean opt_x11; |
||||
|
||||
#ifdef HAVE_NATIVE_BACKEND |
||||
@@ -306,6 +307,11 @@ static GOptionEntry meta_options[] = { |
||||
N_("Add persistent virtual monitor (WxH or WxH@R)") |
||||
}, |
||||
#endif |
||||
+ { |
||||
+ "unsafe-mode", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, |
||||
+ &opt_unsafe_mode, |
||||
+ "Run in unsafe mode" |
||||
+ }, |
||||
{ |
||||
"x11", 0, 0, G_OPTION_ARG_NONE, |
||||
&opt_x11, |
||||
@@ -865,6 +871,7 @@ meta_init (void) |
||||
add_persistent_virtual_monitors (); |
||||
#endif |
||||
|
||||
+ meta_backend_set_unsafe_mode (meta_get_backend(), opt_unsafe_mode); |
||||
meta_set_syncing (opt_sync || (g_getenv ("MUTTER_SYNC") != NULL)); |
||||
|
||||
if (opt_replace_wm) |
||||
-- |
||||
2.35.1 |
||||
|
Loading…
Reference in new issue