import mutter-40.9-9.el9
This commit is contained in:
parent
cace2ce2d0
commit
ad168bd0b3
@ -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,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,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
|
||||
|
193
SOURCES/0001-kms-Allow-passing-framebuffer-damage-metadata.patch
Normal file
193
SOURCES/0001-kms-Allow-passing-framebuffer-damage-metadata.patch
Normal file
@ -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 @@
|
||||
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 @@
|
||||
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,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 @@
|
||||
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 @@
|
||||
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,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 @@
|
||||
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 @@
|
||||
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 @@
|
||||
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 @@
|
||||
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
|
||||
|
213
SOURCES/add-unsafe-mode-property.patch
Normal file
213
SOURCES/add-unsafe-mode-property.patch
Normal file
@ -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
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
Name: mutter
|
||||
Version: 40.9
|
||||
Release: 1%{?dist}
|
||||
Release: 9%{?dist}
|
||||
Summary: Window and compositing manager based on Clutter
|
||||
|
||||
License: GPLv2+
|
||||
@ -68,6 +68,39 @@ Patch14: hw-cursor-dumb-buffer.patch
|
||||
# Backport EGLStream overview fixes (#2052584)
|
||||
Patch15: eglstream-overview-fixes.patch
|
||||
|
||||
Patch16: 0001-clutter-Make-ClutterClickAction-independent-of-click.patch
|
||||
Patch17: add-unsafe-mode-property.patch
|
||||
|
||||
# Backport KMS: Survive missing GAMMA_LUT property (#2083091)
|
||||
Patch18: 0001-kms-crtc-Add-function-meta_kms_crtc_has_gamma.patch
|
||||
Patch19: 0002-crtc-kms-Don-t-add-gamma-to-the-update-if-unsupporte.patch
|
||||
Patch20: 0003-kms-crtc-Determine-gamma-support-given-the-gamma-len.patch
|
||||
|
||||
# Backport Pass dirty rects to gpu (#2080980)
|
||||
Patch21: 0001-kms-Allow-passing-framebuffer-damage-metadata.patch
|
||||
Patch22: 0002-onscreen-native-Pass-damage-rectangles-when-page-fli.patch
|
||||
|
||||
Patch23: 0001-backends-Move-MetaKeyboardA11yFlags-to-a-public-head.patch
|
||||
|
||||
# GBM support with NVIDIA driver
|
||||
# https://bugzilla.redhat.com/2015891
|
||||
# Backports:
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2051
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2052
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2132
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2150
|
||||
Patch24: 0001-renderer-native-Log-render-mode-per-device.patch
|
||||
Patch25: 0002-renderer-native-Try-the-gbm-renderer-before-the-EGLD.patch
|
||||
Patch26: 0003-wayland-Only-init-EGLStream-controller-if-we-didn-t-.patch
|
||||
Patch27: 0004-renderer-native-Allow-forcing-EGLStream-backend.patch
|
||||
Patch28: 0005-cursor-renderer-native-Add-a-means-to-disable-HW-cur.patch
|
||||
|
||||
# Fix race condition causing stuck pointer grabs (#2090170)
|
||||
Patch40: 0001-events-Pass-CurrentTime-to-XIAllowEvents-when-unfree.patch
|
||||
|
||||
# Backport night light availability property (#2057154)
|
||||
Patch41: 0001-monitor-manager-Add-NightLightSupported-property-to-.patch
|
||||
|
||||
BuildRequires: chrpath
|
||||
BuildRequires: pango-devel
|
||||
BuildRequires: startup-notification-devel
|
||||
@ -214,6 +247,38 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
|
||||
%{_datadir}/mutter-%{mutter_api_version}/tests
|
||||
|
||||
%changelog
|
||||
* Tue Aug 16 2022 Jonas Ådahl <jadahl@redhat.com>) - 40.9-9
|
||||
- Backport night light availability property
|
||||
Resolves: #2057154
|
||||
|
||||
* Mon Jun 27 2022 Jonas Ådahl <jadahl@redhat.com>) - 40.9-8
|
||||
- Fix race condition causing stuck pointer grabs
|
||||
Resolves: #2090170
|
||||
|
||||
* Mon Jun 20 2022 Olivier Fourdan <ofourdan@redhat.com> - 40.9-7
|
||||
- GBM support with NVIDIA driver
|
||||
Resolves: #2015891
|
||||
|
||||
* Mon Jun 20 2022 Florian Müllner <fmuellner@redhat.com> - 40.9-6
|
||||
- Make moved KeyboardA11yFlags enum public
|
||||
Related: #2047644
|
||||
|
||||
* Mon Jun 13 2022 Jocelyn Falempe <jfalempe@redhat.com - 40.9-5
|
||||
- Backport Pass dirty rects to gpu
|
||||
Resolves: #2080980
|
||||
|
||||
* Mon Jun 13 2022 Jocelyn Falempe <jfalempe@redhat.com - 40.9-4
|
||||
- Backport KMS: Survive missing GAMMA_LUT property
|
||||
Resolves: #2083091
|
||||
|
||||
* Fri Apr 01 2022 Florian Müllner <fmuellner@redhat.com> - 40.9-3
|
||||
- Add MetaBackend:unsafe-mode property
|
||||
Related: #2055366
|
||||
|
||||
* Wed Mar 30 2022 Florian Müllner <fmuellner@redhat.com> - 40.9-2
|
||||
- Ignore click count for click actions
|
||||
Resolves: #2052806
|
||||
|
||||
* Tue Feb 22 2022 Florian Müllner <fmuellner@redhat.com> - 40.9-1
|
||||
- Update to 40.9
|
||||
Resolves: #2056414
|
||||
|
Loading…
Reference in New Issue
Block a user