Backport all patches to git master for various fixes inc (#1809717)
This commit is contained in:
parent
ba75e27d37
commit
f02b5ddec4
224
0001-Update-Serbian-translation.patch
Normal file
224
0001-Update-Serbian-translation.patch
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
From 1c1adb00369ab84edd4d2b08fce50b63fb5fa75b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=BA=D0=BE=20=D0=9A=D0=BE=D1=81=D1=82?=
|
||||||
|
=?UTF-8?q?=D0=B8=D1=9B?= <marko.m.kostic@gmail.com>
|
||||||
|
Date: Sun, 8 Mar 2020 20:20:38 +0000
|
||||||
|
Subject: [PATCH 01/48] Update Serbian translation
|
||||||
|
|
||||||
|
---
|
||||||
|
po/sr.po | 75 +++++++++++++++++++++++++++++++++-----------------------
|
||||||
|
1 file changed, 44 insertions(+), 31 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/po/sr.po b/po/sr.po
|
||||||
|
index 81510891e..1fb3aec68 100644
|
||||||
|
--- a/po/sr.po
|
||||||
|
+++ b/po/sr.po
|
||||||
|
@@ -10,8 +10,8 @@ msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: mutter\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||||
|
-"POT-Creation-Date: 2019-08-21 20:17+0000\n"
|
||||||
|
-"PO-Revision-Date: 2019-08-22 19:56+0200\n"
|
||||||
|
+"POT-Creation-Date: 2020-02-23 17:41+0000\n"
|
||||||
|
+"PO-Revision-Date: 2020-03-08 21:20+0100\n"
|
||||||
|
"Last-Translator: Марко М. Костић <marko.m.kostic@gmail.com>\n"
|
||||||
|
"Language-Team: српски <gnome-sr@googlegroups.org>\n"
|
||||||
|
"Language: sr\n"
|
||||||
|
@@ -21,7 +21,7 @@ msgstr ""
|
||||||
|
"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
|
||||||
|
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
|
"X-Project-Style: gnome\n"
|
||||||
|
-"X-Generator: Poedit 2.2.3\n"
|
||||||
|
+"X-Generator: Poedit 2.3\n"
|
||||||
|
|
||||||
|
#: data/50-mutter-navigation.xml:6
|
||||||
|
msgid "Navigation"
|
||||||
|
@@ -423,19 +423,32 @@ msgstr "Тастер који се користи за проналажење п
|
||||||
|
msgid "This key will initiate the “locate pointer” action."
|
||||||
|
msgstr "Овај тастер ће покренути „пронађи показивач“ радњу"
|
||||||
|
|
||||||
|
-#: data/org.gnome.mutter.gschema.xml.in:155
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:142
|
||||||
|
+msgid "Timeout for check-alive ping"
|
||||||
|
+msgstr "Време истицања провере живахности"
|
||||||
|
+
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:143
|
||||||
|
+msgid ""
|
||||||
|
+"Number of milliseconds a client has to respond to a ping request in order to "
|
||||||
|
+"not be detected as frozen. Using 0 will disable the alive check completely."
|
||||||
|
+msgstr ""
|
||||||
|
+"Број милисекунди за које клијент мора одговорити на пинг захтев да се не би "
|
||||||
|
+"сматрао замрзнутим. Унос броја 0 ће онемогућити проверу живахности у "
|
||||||
|
+"потпуности."
|
||||||
|
+
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:165
|
||||||
|
msgid "Select window from tab popup"
|
||||||
|
msgstr "Бира прозор из језичка искакања"
|
||||||
|
|
||||||
|
-#: data/org.gnome.mutter.gschema.xml.in:160
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:170
|
||||||
|
msgid "Cancel tab popup"
|
||||||
|
msgstr "Отказивање језичка искакања"
|
||||||
|
|
||||||
|
-#: data/org.gnome.mutter.gschema.xml.in:165
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:175
|
||||||
|
msgid "Switch monitor configurations"
|
||||||
|
msgstr "Мења подешавања монитора"
|
||||||
|
|
||||||
|
-#: data/org.gnome.mutter.gschema.xml.in:170
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:180
|
||||||
|
msgid "Rotates the built-in monitor configuration"
|
||||||
|
msgstr "Заокреће уграђена подешавања монитора"
|
||||||
|
|
||||||
|
@@ -549,7 +562,7 @@ msgstr ""
|
||||||
|
#. TRANSLATORS: This string refers to a button that switches between
|
||||||
|
#. * different modes.
|
||||||
|
#.
|
||||||
|
-#: src/backends/meta-input-settings.c:2531
|
||||||
|
+#: src/backends/meta-input-settings.c:2567
|
||||||
|
#, c-format
|
||||||
|
msgid "Mode Switch (Group %d)"
|
||||||
|
msgstr "Режим прекидача (група %d)"
|
||||||
|
@@ -557,11 +570,11 @@ msgstr "Режим прекидача (група %d)"
|
||||||
|
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||||
|
#. * mapping through the available outputs.
|
||||||
|
#.
|
||||||
|
-#: src/backends/meta-input-settings.c:2554
|
||||||
|
+#: src/backends/meta-input-settings.c:2590
|
||||||
|
msgid "Switch monitor"
|
||||||
|
msgstr "Промени монитор"
|
||||||
|
|
||||||
|
-#: src/backends/meta-input-settings.c:2556
|
||||||
|
+#: src/backends/meta-input-settings.c:2592
|
||||||
|
msgid "Show on-screen help"
|
||||||
|
msgstr "Прикажи помоћ на екрану"
|
||||||
|
|
||||||
|
@@ -593,13 +606,13 @@ msgid "%s %s"
|
||||||
|
msgstr "%s %s"
|
||||||
|
|
||||||
|
#. Translators: this string will appear in Sysprof
|
||||||
|
-#: src/backends/meta-profiler.c:82
|
||||||
|
+#: src/backends/meta-profiler.c:79
|
||||||
|
msgid "Compositor"
|
||||||
|
msgstr "Састављач"
|
||||||
|
|
||||||
|
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||||
|
#. * we have no way to get it to exit
|
||||||
|
-#: src/compositor/compositor.c:505
|
||||||
|
+#: src/compositor/compositor.c:533
|
||||||
|
#, c-format
|
||||||
|
msgid ""
|
||||||
|
"Another compositing manager is already running on screen %i on display “%s”."
|
||||||
|
@@ -610,47 +623,47 @@ msgstr ""
|
||||||
|
msgid "Bell event"
|
||||||
|
msgstr "Звонца"
|
||||||
|
|
||||||
|
-#: src/core/main.c:185
|
||||||
|
+#: src/core/main.c:190
|
||||||
|
msgid "Disable connection to session manager"
|
||||||
|
msgstr "Искључује везу са управником сесије"
|
||||||
|
|
||||||
|
-#: src/core/main.c:191
|
||||||
|
+#: src/core/main.c:196
|
||||||
|
msgid "Replace the running window manager"
|
||||||
|
msgstr "Мења текућег управника прозорима"
|
||||||
|
|
||||||
|
-#: src/core/main.c:197
|
||||||
|
+#: src/core/main.c:202
|
||||||
|
msgid "Specify session management ID"
|
||||||
|
msgstr "Наводи ИБ управника сесије"
|
||||||
|
|
||||||
|
-#: src/core/main.c:202
|
||||||
|
+#: src/core/main.c:207
|
||||||
|
msgid "X Display to use"
|
||||||
|
msgstr "Икс екран који ће бити коришћен"
|
||||||
|
|
||||||
|
-#: src/core/main.c:208
|
||||||
|
+#: src/core/main.c:213
|
||||||
|
msgid "Initialize session from savefile"
|
||||||
|
msgstr "Покреће сесију из датотеке чувања"
|
||||||
|
|
||||||
|
-#: src/core/main.c:214
|
||||||
|
+#: src/core/main.c:219
|
||||||
|
msgid "Make X calls synchronous"
|
||||||
|
msgstr "Чини Икс позиве усклађеним"
|
||||||
|
|
||||||
|
-#: src/core/main.c:221
|
||||||
|
+#: src/core/main.c:226
|
||||||
|
msgid "Run as a wayland compositor"
|
||||||
|
msgstr "Ради као вејлендов композитор"
|
||||||
|
|
||||||
|
-#: src/core/main.c:227
|
||||||
|
+#: src/core/main.c:232
|
||||||
|
msgid "Run as a nested compositor"
|
||||||
|
msgstr "Ради као угнежђени композитор"
|
||||||
|
|
||||||
|
-#: src/core/main.c:233
|
||||||
|
+#: src/core/main.c:238
|
||||||
|
msgid "Run wayland compositor without starting Xwayland"
|
||||||
|
msgstr "Ради као вејлендов композитор без покретања Икс-вејленда"
|
||||||
|
|
||||||
|
-#: src/core/main.c:241
|
||||||
|
+#: src/core/main.c:246
|
||||||
|
msgid "Run as a full display server, rather than nested"
|
||||||
|
msgstr "Ради као пуни сервер приказа, уместо као угнеждени"
|
||||||
|
|
||||||
|
-#: src/core/main.c:247
|
||||||
|
+#: src/core/main.c:252
|
||||||
|
msgid "Run with X11 backend"
|
||||||
|
msgstr "Покрени на Икс11 позадинцу"
|
||||||
|
|
||||||
|
@@ -703,21 +716,21 @@ msgstr "Исписује издање"
|
||||||
|
msgid "Mutter plugin to use"
|
||||||
|
msgstr "Прикључци Матера за коришћење"
|
||||||
|
|
||||||
|
-#: src/core/prefs.c:1849
|
||||||
|
+#: src/core/prefs.c:1911
|
||||||
|
#, c-format
|
||||||
|
msgid "Workspace %d"
|
||||||
|
msgstr "%d. радни простор"
|
||||||
|
|
||||||
|
-#: src/core/util.c:121
|
||||||
|
+#: src/core/util.c:122
|
||||||
|
msgid "Mutter was compiled without support for verbose mode\n"
|
||||||
|
msgstr "Матер је преведен без подршке за опширан режим\n"
|
||||||
|
|
||||||
|
-#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||||
|
+#: src/wayland/meta-wayland-tablet-pad.c:568
|
||||||
|
#, c-format
|
||||||
|
msgid "Mode Switch: Mode %d"
|
||||||
|
msgstr "Режим прекидача: Режим %d"
|
||||||
|
|
||||||
|
-#: src/x11/meta-x11-display.c:678
|
||||||
|
+#: src/x11/meta-x11-display.c:676
|
||||||
|
#, c-format
|
||||||
|
msgid ""
|
||||||
|
"Display “%s” already has a window manager; try using the --replace option to "
|
||||||
|
@@ -726,21 +739,21 @@ msgstr ""
|
||||||
|
"Приказ „%s“ већ има управника прозора; пробајте да користите опцију „--"
|
||||||
|
"replace“ да замените тренутног управника прозора."
|
||||||
|
|
||||||
|
-#: src/x11/meta-x11-display.c:1039
|
||||||
|
+#: src/x11/meta-x11-display.c:1089
|
||||||
|
msgid "Failed to initialize GDK\n"
|
||||||
|
msgstr "Нисам успео да покренем ГДК\n"
|
||||||
|
|
||||||
|
-#: src/x11/meta-x11-display.c:1063
|
||||||
|
+#: src/x11/meta-x11-display.c:1113
|
||||||
|
#, c-format
|
||||||
|
msgid "Failed to open X Window System display “%s”\n"
|
||||||
|
msgstr "Нисам успео да отворим екран „%s“ Икс система прозора\n"
|
||||||
|
|
||||||
|
-#: src/x11/meta-x11-display.c:1146
|
||||||
|
+#: src/x11/meta-x11-display.c:1196
|
||||||
|
#, c-format
|
||||||
|
msgid "Screen %d on display “%s” is invalid\n"
|
||||||
|
msgstr "Приказ „%d“ на екрану „%s“ није исправан\n"
|
||||||
|
|
||||||
|
-#: src/x11/meta-x11-selection-input-stream.c:445
|
||||||
|
+#: src/x11/meta-x11-selection-input-stream.c:460
|
||||||
|
#, c-format
|
||||||
|
msgid "Format %s not supported"
|
||||||
|
msgstr "Формат %s није подржан"
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From 480e7d44bef3921ebdd9a4e14a2c0e9d112531bd Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Mon, 9 Mar 2020 17:43:54 +0100
|
||||||
|
Subject: [PATCH 02/48] screen-cast-stream-src: Don't complain when we can't
|
||||||
|
dequeue buffer
|
||||||
|
|
||||||
|
PipeWire will be unable to dequeue a buffer if all are already busy.
|
||||||
|
This can happen for valid reasons, e.g. the stream consumer not being
|
||||||
|
fast enough, so don't complain in the journal if it happens.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1115
|
||||||
|
---
|
||||||
|
src/backends/meta-screen-cast-stream-src.c | 5 +----
|
||||||
|
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c
|
||||||
|
index 9c3657c75..170f34043 100644
|
||||||
|
--- a/src/backends/meta-screen-cast-stream-src.c
|
||||||
|
+++ b/src/backends/meta-screen-cast-stream-src.c
|
||||||
|
@@ -456,10 +456,7 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
||||||
|
|
||||||
|
buffer = pw_stream_dequeue_buffer (priv->pipewire_stream);
|
||||||
|
if (!buffer)
|
||||||
|
- {
|
||||||
|
- g_warning ("Failed to dequeue at PipeWire buffer");
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
+ return;
|
||||||
|
|
||||||
|
spa_buffer = buffer->buffer;
|
||||||
|
data = spa_buffer->datas[0].data;
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
44
0003-screen-cast-stream-src-Don-t-leak-GSource.patch
Normal file
44
0003-screen-cast-stream-src-Don-t-leak-GSource.patch
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
From 26e1e495a05512a67a14fd23f4732670b582f3bd Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Thu, 5 Mar 2020 23:29:26 +0100
|
||||||
|
Subject: [PATCH 03/48] screen-cast-stream-src: Don't leak GSource
|
||||||
|
|
||||||
|
For every stream src, we created and attached a GSource. Upon stream
|
||||||
|
src destruction, we g_source_destroy():ed the GSource. What
|
||||||
|
g_source_destroy() does, hawever, is not really "destroy" it but only
|
||||||
|
detaches it from the main context removing the reference the context had
|
||||||
|
added for it via g_source_attach(). This caused the GSource to leak,
|
||||||
|
although in a detached state, as the reference taken on creation was
|
||||||
|
still held.
|
||||||
|
|
||||||
|
Fix this by also removing our own reference to it when finalizing.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1106
|
||||||
|
---
|
||||||
|
src/backends/meta-screen-cast-stream-src.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c
|
||||||
|
index 170f34043..4f3d821ef 100644
|
||||||
|
--- a/src/backends/meta-screen-cast-stream-src.c
|
||||||
|
+++ b/src/backends/meta-screen-cast-stream-src.c
|
||||||
|
@@ -885,7 +885,7 @@ create_pipewire_source (void)
|
||||||
|
pipewire_source->pipewire_loop = pw_loop_new (NULL);
|
||||||
|
if (!pipewire_source->pipewire_loop)
|
||||||
|
{
|
||||||
|
- g_source_destroy ((GSource *) pipewire_source);
|
||||||
|
+ g_source_unref ((GSource *) pipewire_source);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -980,6 +980,7 @@ meta_screen_cast_stream_src_finalize (GObject *object)
|
||||||
|
g_clear_pointer (&priv->pipewire_core, pw_core_disconnect);
|
||||||
|
g_clear_pointer (&priv->pipewire_context, pw_context_destroy);
|
||||||
|
g_source_destroy (&priv->pipewire_source->base);
|
||||||
|
+ g_source_unref (&priv->pipewire_source->base);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (meta_screen_cast_stream_src_parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
48
0004-xwayland-Log-actual-error-message-if-available.patch
Normal file
48
0004-xwayland-Log-actual-error-message-if-available.patch
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
From 50ff30bf2bc9789944737ab35936533a81990c95 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||||
|
Date: Mon, 2 Mar 2020 15:49:07 +0100
|
||||||
|
Subject: [PATCH 04/48] xwayland: Log actual error message if available
|
||||||
|
|
||||||
|
If X11 initialization fails, print the actual error message if the error
|
||||||
|
is set, to help with debugging.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1102
|
||||||
|
---
|
||||||
|
src/core/display.c | 14 +++++++++++---
|
||||||
|
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/display.c b/src/core/display.c
|
||||||
|
index a9394ea82..6a7e75d55 100644
|
||||||
|
--- a/src/core/display.c
|
||||||
|
+++ b/src/core/display.c
|
||||||
|
@@ -701,7 +701,13 @@ meta_display_init_x11_finish (MetaDisplay *display,
|
||||||
|
g_assert (g_task_get_source_tag (G_TASK (result)) == meta_display_init_x11);
|
||||||
|
|
||||||
|
if (!g_task_propagate_boolean (G_TASK (result), error))
|
||||||
|
- return FALSE;
|
||||||
|
+ {
|
||||||
|
+ if (*error == NULL)
|
||||||
|
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Unknown error");
|
||||||
|
+
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (display->x11_display)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
@@ -778,8 +784,10 @@ on_x11_initialized (MetaDisplay *display,
|
||||||
|
GAsyncResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
- if (!meta_display_init_x11_finish (display, result, NULL))
|
||||||
|
- g_critical ("Failed to init X11 display");
|
||||||
|
+ g_autoptr (GError) error = NULL;
|
||||||
|
+
|
||||||
|
+ if (!meta_display_init_x11_finish (display, result, &error))
|
||||||
|
+ g_critical ("Failed to init X11 display: %s", error->message);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,24 @@
|
|||||||
|
From 121c5d2a927f168f4df9b95230d261d299b46299 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mart Raudsepp <leio@gentoo.org>
|
||||||
|
Date: Tue, 3 Mar 2020 17:40:11 +0200
|
||||||
|
Subject: [PATCH 05/48] meson: Expand on xwayland_initfd option description
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1104
|
||||||
|
---
|
||||||
|
meson_options.txt | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/meson_options.txt b/meson_options.txt
|
||||||
|
index 097809a93..75a1961e4 100644
|
||||||
|
--- a/meson_options.txt
|
||||||
|
+++ b/meson_options.txt
|
||||||
|
@@ -156,5 +156,5 @@ option('xwayland_grab_default_access_rules',
|
||||||
|
option('xwayland_initfd',
|
||||||
|
type: 'feature',
|
||||||
|
value: 'auto',
|
||||||
|
- description: 'Whether Xwayland -initfd argument is used'
|
||||||
|
+ description: 'Whether -initfd argument is passed to Xwayland to guarantee services (e.g. gsd-xsettings) startup before applications'
|
||||||
|
)
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
82
0006-cursor-renderer-native-Refactor-init-to-per-gpu.patch
Normal file
82
0006-cursor-renderer-native-Refactor-init-to-per-gpu.patch
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
From 4cc29cfb619102a8e7cd32731205c8018d83544e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pekka Paalanen <pekka.paalanen@collabora.com>
|
||||||
|
Date: Mon, 24 Feb 2020 15:13:42 +0200
|
||||||
|
Subject: [PATCH 06/48] cursor-renderer/native: Refactor init to per-gpu
|
||||||
|
|
||||||
|
Extract the code to initialize a single GPU cursor support into its own
|
||||||
|
function. The new function will be used by GPU hotplug in the future.
|
||||||
|
|
||||||
|
This is a pure refactoring without any behavioral changes.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1097
|
||||||
|
---
|
||||||
|
.../native/meta-cursor-renderer-native.c | 45 +++++++++++--------
|
||||||
|
1 file changed, 26 insertions(+), 19 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
|
||||||
|
index 39ebe646f..cf500f07c 100644
|
||||||
|
--- a/src/backends/native/meta-cursor-renderer-native.c
|
||||||
|
+++ b/src/backends/native/meta-cursor-renderer-native.c
|
||||||
|
@@ -1601,6 +1601,31 @@ on_monitors_changed (MetaMonitorManager *monitors,
|
||||||
|
force_update_hw_cursor (native);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+init_hw_cursor_support_for_gpu (MetaGpuKms *gpu_kms)
|
||||||
|
+{
|
||||||
|
+ MetaKmsDevice *kms_device = meta_gpu_kms_get_kms_device (gpu_kms);
|
||||||
|
+ MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||||
|
+ struct gbm_device *gbm_device;
|
||||||
|
+ uint64_t width, height;
|
||||||
|
+
|
||||||
|
+ gbm_device = meta_gbm_device_from_gpu (gpu_kms);
|
||||||
|
+ if (!gbm_device)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ cursor_renderer_gpu_data =
|
||||||
|
+ meta_create_cursor_renderer_native_gpu_data (gpu_kms);
|
||||||
|
+
|
||||||
|
+ if (!meta_kms_device_get_cursor_size (kms_device, &width, &height))
|
||||||
|
+ {
|
||||||
|
+ width = 64;
|
||||||
|
+ height = 64;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ cursor_renderer_gpu_data->cursor_width = width;
|
||||||
|
+ cursor_renderer_gpu_data->cursor_height = height;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
init_hw_cursor_support (MetaCursorRendererNative *cursor_renderer_native)
|
||||||
|
{
|
||||||
|
@@ -1613,26 +1638,8 @@ init_hw_cursor_support (MetaCursorRendererNative *cursor_renderer_native)
|
||||||
|
for (l = gpus; l; l = l->next)
|
||||||
|
{
|
||||||
|
MetaGpuKms *gpu_kms = l->data;
|
||||||
|
- MetaKmsDevice *kms_device = meta_gpu_kms_get_kms_device (gpu_kms);
|
||||||
|
- MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||||
|
- struct gbm_device *gbm_device;
|
||||||
|
- uint64_t width, height;
|
||||||
|
-
|
||||||
|
- gbm_device = meta_gbm_device_from_gpu (gpu_kms);
|
||||||
|
- if (!gbm_device)
|
||||||
|
- continue;
|
||||||
|
-
|
||||||
|
- cursor_renderer_gpu_data =
|
||||||
|
- meta_create_cursor_renderer_native_gpu_data (gpu_kms);
|
||||||
|
-
|
||||||
|
- if (!meta_kms_device_get_cursor_size (kms_device, &width, &height))
|
||||||
|
- {
|
||||||
|
- width = 64;
|
||||||
|
- height = 64;
|
||||||
|
- }
|
||||||
|
|
||||||
|
- cursor_renderer_gpu_data->cursor_width = width;
|
||||||
|
- cursor_renderer_gpu_data->cursor_height = height;
|
||||||
|
+ init_hw_cursor_support_for_gpu (gpu_kms);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
55
0007-cursor-renderer-native-Handle-GPU-hotplug.patch
Normal file
55
0007-cursor-renderer-native-Handle-GPU-hotplug.patch
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
From 8abdf16a3992e3332f2378ea7c65e6e251e418e0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pekka Paalanen <pekka.paalanen@collabora.com>
|
||||||
|
Date: Mon, 24 Feb 2020 15:36:24 +0200
|
||||||
|
Subject: [PATCH 07/48] cursor-renderer/native: Handle GPU hotplug
|
||||||
|
|
||||||
|
Listen for GPU hotplug events to initialize their cursor support.
|
||||||
|
|
||||||
|
This fixes one reason for why DisplayLink devices may not be using a hardware
|
||||||
|
cursor. Particularly, when a DisplayLink device is hotplugged for the first
|
||||||
|
time such that EVDI creates a new DRM device node after gnome-shell has already
|
||||||
|
started, we used to forget to initialize the cursor support.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1097
|
||||||
|
---
|
||||||
|
src/backends/native/meta-cursor-renderer-native.c | 10 ++++++++++
|
||||||
|
1 file changed, 10 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
|
||||||
|
index cf500f07c..b400a8740 100644
|
||||||
|
--- a/src/backends/native/meta-cursor-renderer-native.c
|
||||||
|
+++ b/src/backends/native/meta-cursor-renderer-native.c
|
||||||
|
@@ -2,6 +2,7 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Red Hat
|
||||||
|
+ * Copyright 2020 DisplayLink (UK) Ltd.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
@@ -1626,6 +1627,13 @@ init_hw_cursor_support_for_gpu (MetaGpuKms *gpu_kms)
|
||||||
|
cursor_renderer_gpu_data->cursor_height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+on_gpu_added_for_cursor (MetaBackend *backend,
|
||||||
|
+ MetaGpuKms *gpu_kms)
|
||||||
|
+{
|
||||||
|
+ init_hw_cursor_support_for_gpu (gpu_kms);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
init_hw_cursor_support (MetaCursorRendererNative *cursor_renderer_native)
|
||||||
|
{
|
||||||
|
@@ -1659,6 +1667,8 @@ meta_cursor_renderer_native_new (MetaBackend *backend)
|
||||||
|
g_signal_connect_object (monitor_manager, "monitors-changed-internal",
|
||||||
|
G_CALLBACK (on_monitors_changed),
|
||||||
|
cursor_renderer_native, 0);
|
||||||
|
+ g_signal_connect (backend, "gpu-added",
|
||||||
|
+ G_CALLBACK (on_gpu_added_for_cursor), NULL);
|
||||||
|
|
||||||
|
priv->backend = backend;
|
||||||
|
priv->hw_state_invalidated = TRUE;
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,33 @@
|
|||||||
|
From adc38f902a8d2066b65df571aa21ed7de2a99b46 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Mader <robert.mader@posteo.de>
|
||||||
|
Date: Tue, 25 Feb 2020 00:14:40 +0100
|
||||||
|
Subject: [PATCH 08/48] window-actor/X11: Update shape, input and opaque region
|
||||||
|
in order
|
||||||
|
|
||||||
|
As they depend on each other to be correct, we should set all of them
|
||||||
|
in the correct order. As we do already have a function for that, use it.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1091
|
||||||
|
---
|
||||||
|
src/compositor/meta-window-actor-x11.c | 5 +----
|
||||||
|
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c
|
||||||
|
index ef50b1ada..04b0ab5c5 100644
|
||||||
|
--- a/src/compositor/meta-window-actor-x11.c
|
||||||
|
+++ b/src/compositor/meta-window-actor-x11.c
|
||||||
|
@@ -1138,10 +1138,7 @@ handle_updates (MetaWindowActorX11 *actor_x11)
|
||||||
|
* which causes the shadows to look bad.
|
||||||
|
*/
|
||||||
|
if (surface && meta_window_x11_always_update_shape (window))
|
||||||
|
- {
|
||||||
|
- update_opaque_region (actor_x11);
|
||||||
|
- update_shape_region (actor_x11);
|
||||||
|
- }
|
||||||
|
+ check_needs_reshape (actor_x11);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,55 @@
|
|||||||
|
From be11525b28da70ff60eb40925127d187a3f50672 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||||
|
Date: Wed, 26 Feb 2020 11:03:48 +0100
|
||||||
|
Subject: [PATCH 09/48] window/x11: Add function to convert the surface to
|
||||||
|
client area
|
||||||
|
|
||||||
|
Add a convenient function to get the client area rectangle from a given
|
||||||
|
surface rectangle.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1091
|
||||||
|
---
|
||||||
|
src/x11/window-x11.c | 16 ++++++++++++++++
|
||||||
|
src/x11/window-x11.h | 4 +++-
|
||||||
|
2 files changed, 19 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
|
||||||
|
index 2c745f4aa..49f7f1526 100644
|
||||||
|
--- a/src/x11/window-x11.c
|
||||||
|
+++ b/src/x11/window-x11.c
|
||||||
|
@@ -4092,3 +4092,19 @@ meta_window_x11_buffer_rect_to_frame_rect (MetaWindow *window,
|
||||||
|
frame_rect->width -= borders.invisible.left + borders.invisible.right;
|
||||||
|
frame_rect->height -= borders.invisible.top + borders.invisible.bottom;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+meta_window_x11_surface_rect_to_client_rect (MetaWindow *window,
|
||||||
|
+ MetaRectangle *surface_rect,
|
||||||
|
+ MetaRectangle *client_rect)
|
||||||
|
+{
|
||||||
|
+ MetaFrameBorders borders;
|
||||||
|
+
|
||||||
|
+ meta_frame_calc_borders (window->frame, &borders);
|
||||||
|
+
|
||||||
|
+ *client_rect = *surface_rect;
|
||||||
|
+ client_rect->x += borders.total.left;
|
||||||
|
+ client_rect->y += borders.total.top;
|
||||||
|
+ client_rect->width -= borders.total.left + borders.total.right;
|
||||||
|
+ client_rect->height -= borders.total.top + borders.total.bottom;
|
||||||
|
+}
|
||||||
|
diff --git a/src/x11/window-x11.h b/src/x11/window-x11.h
|
||||||
|
index 03c52c5ab..7f4f96f6c 100644
|
||||||
|
--- a/src/x11/window-x11.h
|
||||||
|
+++ b/src/x11/window-x11.h
|
||||||
|
@@ -92,5 +92,7 @@ gboolean meta_window_x11_always_update_shape (MetaWindow *window);
|
||||||
|
void meta_window_x11_buffer_rect_to_frame_rect (MetaWindow *window,
|
||||||
|
MetaRectangle *buffer_rect,
|
||||||
|
MetaRectangle *frame_rect);
|
||||||
|
-
|
||||||
|
+void meta_window_x11_surface_rect_to_client_rect (MetaWindow *window,
|
||||||
|
+ MetaRectangle *surface_rect,
|
||||||
|
+ MetaRectangle *client_rect);
|
||||||
|
#endif
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
170
0010-window-actor-x11-Compute-client-area-from-surface-si.patch
Normal file
170
0010-window-actor-x11-Compute-client-area-from-surface-si.patch
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
From 2d09e959344009563c9f4c7ffb026f6b98265d05 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||||
|
Date: Wed, 26 Feb 2020 11:09:30 +0100
|
||||||
|
Subject: [PATCH 10/48] window-actor/x11: Compute client area from surface size
|
||||||
|
|
||||||
|
Commit 7dbb4bc3 cached the client area when the client was frozen.
|
||||||
|
|
||||||
|
This is not sufficient though, because the buffer size might still be
|
||||||
|
lagging waiting for the buffer from Xwayland to be committed.
|
||||||
|
|
||||||
|
So instead of caching the client size from the expected size, deduce the
|
||||||
|
client area rectangle from the surface size, like we did for the frame
|
||||||
|
bounds in commit 1ce933e2.
|
||||||
|
|
||||||
|
This partly reverts commit 7dbb4bc3 - "window-actor/x11: Cache the
|
||||||
|
client area"
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/issues/1007
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1091
|
||||||
|
---
|
||||||
|
src/compositor/meta-window-actor-x11.c | 69 ++++++++++++++++++++------
|
||||||
|
1 file changed, 55 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c
|
||||||
|
index 04b0ab5c5..5c0db02ce 100644
|
||||||
|
--- a/src/compositor/meta-window-actor-x11.c
|
||||||
|
+++ b/src/compositor/meta-window-actor-x11.c
|
||||||
|
@@ -99,8 +99,6 @@ struct _MetaWindowActorX11
|
||||||
|
gboolean recompute_focused_shadow;
|
||||||
|
gboolean recompute_unfocused_shadow;
|
||||||
|
gboolean is_frozen;
|
||||||
|
-
|
||||||
|
- cairo_rectangle_int_t client_area;
|
||||||
|
};
|
||||||
|
|
||||||
|
static MetaCullableInterface *cullable_parent_iface;
|
||||||
|
@@ -839,6 +837,41 @@ scan_visible_region (guchar *mask_data,
|
||||||
|
return meta_region_builder_finish (&builder);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+get_client_area_rect_from_texture (MetaWindowActorX11 *actor_x11,
|
||||||
|
+ MetaShapedTexture *shaped_texture,
|
||||||
|
+ cairo_rectangle_int_t *client_area)
|
||||||
|
+{
|
||||||
|
+ MetaWindow *window =
|
||||||
|
+ meta_window_actor_get_meta_window (META_WINDOW_ACTOR (actor_x11));
|
||||||
|
+ cairo_rectangle_int_t surface_rect = { 0 };
|
||||||
|
+
|
||||||
|
+ surface_rect.width = meta_shaped_texture_get_width (shaped_texture);
|
||||||
|
+ surface_rect.height = meta_shaped_texture_get_height (shaped_texture);
|
||||||
|
+ meta_window_x11_surface_rect_to_client_rect (window,
|
||||||
|
+ &surface_rect,
|
||||||
|
+ client_area);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+get_client_area_rect (MetaWindowActorX11 *actor_x11,
|
||||||
|
+ cairo_rectangle_int_t *client_area)
|
||||||
|
+{
|
||||||
|
+ MetaSurfaceActor *surface =
|
||||||
|
+ meta_window_actor_get_surface (META_WINDOW_ACTOR (actor_x11));
|
||||||
|
+ MetaWindow *window =
|
||||||
|
+ meta_window_actor_get_meta_window (META_WINDOW_ACTOR (actor_x11));
|
||||||
|
+ MetaShapedTexture *stex = meta_surface_actor_get_texture (surface);
|
||||||
|
+
|
||||||
|
+ if (!meta_window_x11_always_update_shape (window) || !stex)
|
||||||
|
+ {
|
||||||
|
+ meta_window_get_client_area_rect (window, client_area);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ get_client_area_rect_from_texture (actor_x11, stex, client_area);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
build_and_scan_frame_mask (MetaWindowActorX11 *actor_x11,
|
||||||
|
cairo_region_t *shape_region)
|
||||||
|
@@ -890,6 +923,7 @@ build_and_scan_frame_mask (MetaWindowActorX11 *actor_x11,
|
||||||
|
{
|
||||||
|
cairo_region_t *frame_paint_region, *scanned_region;
|
||||||
|
cairo_rectangle_int_t rect = { 0, 0, tex_width, tex_height };
|
||||||
|
+ cairo_rectangle_int_t client_area;
|
||||||
|
cairo_rectangle_int_t frame_rect;
|
||||||
|
|
||||||
|
/* If we update the shape regardless of the frozen state of the actor,
|
||||||
|
@@ -899,14 +933,19 @@ build_and_scan_frame_mask (MetaWindowActorX11 *actor_x11,
|
||||||
|
* point.
|
||||||
|
*/
|
||||||
|
if (meta_window_x11_always_update_shape (window))
|
||||||
|
- meta_window_x11_buffer_rect_to_frame_rect (window, &rect, &frame_rect);
|
||||||
|
+ {
|
||||||
|
+ meta_window_x11_buffer_rect_to_frame_rect (window, &rect, &frame_rect);
|
||||||
|
+ get_client_area_rect_from_texture (actor_x11, stex, &client_area);
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
- meta_window_get_frame_rect (window, &frame_rect);
|
||||||
|
+ {
|
||||||
|
+ meta_window_get_frame_rect (window, &frame_rect);
|
||||||
|
+ meta_window_get_client_area_rect (window, &client_area);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* Make sure we don't paint the frame over the client window. */
|
||||||
|
frame_paint_region = cairo_region_create_rectangle (&rect);
|
||||||
|
- cairo_region_subtract_rectangle (frame_paint_region,
|
||||||
|
- &actor_x11->client_area);
|
||||||
|
+ cairo_region_subtract_rectangle (frame_paint_region, &client_area);
|
||||||
|
|
||||||
|
gdk_cairo_region (cr, frame_paint_region);
|
||||||
|
cairo_clip (cr);
|
||||||
|
@@ -964,13 +1003,14 @@ update_shape_region (MetaWindowActorX11 *actor_x11)
|
||||||
|
MetaWindow *window =
|
||||||
|
meta_window_actor_get_meta_window (META_WINDOW_ACTOR (actor_x11));
|
||||||
|
cairo_region_t *region = NULL;
|
||||||
|
+ cairo_rectangle_int_t client_area;
|
||||||
|
+
|
||||||
|
+ get_client_area_rect (actor_x11, &client_area);
|
||||||
|
|
||||||
|
if (window->frame && window->shape_region)
|
||||||
|
{
|
||||||
|
region = cairo_region_copy (window->shape_region);
|
||||||
|
- cairo_region_translate (region,
|
||||||
|
- actor_x11->client_area.x,
|
||||||
|
- actor_x11->client_area.y);
|
||||||
|
+ cairo_region_translate (region, client_area.x, client_area.y);
|
||||||
|
}
|
||||||
|
else if (window->shape_region != NULL)
|
||||||
|
{
|
||||||
|
@@ -981,7 +1021,7 @@ update_shape_region (MetaWindowActorX11 *actor_x11)
|
||||||
|
/* If we don't have a shape on the server, that means that
|
||||||
|
* we have an implicit shape of one rectangle covering the
|
||||||
|
* entire window. */
|
||||||
|
- region = cairo_region_create_rectangle (&actor_x11->client_area);
|
||||||
|
+ region = cairo_region_create_rectangle (&client_area);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (window->shape_region || window->frame)
|
||||||
|
@@ -1059,6 +1099,10 @@ update_opaque_region (MetaWindowActorX11 *actor_x11)
|
||||||
|
is_maybe_transparent = is_actor_maybe_transparent (actor_x11);
|
||||||
|
if (is_maybe_transparent && window->opaque_region)
|
||||||
|
{
|
||||||
|
+ cairo_rectangle_int_t client_area;
|
||||||
|
+
|
||||||
|
+ get_client_area_rect (actor_x11, &client_area);
|
||||||
|
+
|
||||||
|
/* The opaque region is defined to be a part of the
|
||||||
|
* window which ARGB32 will always paint with opaque
|
||||||
|
* pixels. For these regions, we want to avoid painting
|
||||||
|
@@ -1070,9 +1114,7 @@ update_opaque_region (MetaWindowActorX11 *actor_x11)
|
||||||
|
* case, graphical glitches will occur.
|
||||||
|
*/
|
||||||
|
opaque_region = cairo_region_copy (window->opaque_region);
|
||||||
|
- cairo_region_translate (opaque_region,
|
||||||
|
- actor_x11->client_area.x,
|
||||||
|
- actor_x11->client_area.y);
|
||||||
|
+ cairo_region_translate (opaque_region, client_area.x, client_area.y);
|
||||||
|
cairo_region_intersect (opaque_region, actor_x11->shape_region);
|
||||||
|
}
|
||||||
|
else if (is_maybe_transparent)
|
||||||
|
@@ -1148,7 +1190,6 @@ handle_updates (MetaWindowActorX11 *actor_x11)
|
||||||
|
if (!meta_surface_actor_is_visible (surface))
|
||||||
|
return;
|
||||||
|
|
||||||
|
- meta_window_get_client_area_rect (window, &actor_x11->client_area);
|
||||||
|
check_needs_reshape (actor_x11);
|
||||||
|
check_needs_shadow (actor_x11);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
136
0011-window-actor-Add-API-to-update-regions.patch
Normal file
136
0011-window-actor-Add-API-to-update-regions.patch
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
From 304a103659def666388414f470fa5f0089cdff52 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||||
|
Date: Tue, 3 Mar 2020 10:26:54 +0100
|
||||||
|
Subject: [PATCH 11/48] window-actor: Add API to update regions
|
||||||
|
|
||||||
|
For X11 clients running on Xwayland, the opaque, input and shape regions
|
||||||
|
are processed from different properties and may occur at a different
|
||||||
|
time, before the actual buffer is eventually committed by Xwayland.
|
||||||
|
|
||||||
|
Add a new API `update_regions` to window actor to trigger the update of
|
||||||
|
those regions when needed.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1091
|
||||||
|
---
|
||||||
|
src/compositor/meta-window-actor-private.h | 3 +++
|
||||||
|
src/compositor/meta-window-actor-wayland.c | 6 ++++++
|
||||||
|
src/compositor/meta-window-actor-x11.c | 21 ++++++++++++++++++++-
|
||||||
|
src/compositor/meta-window-actor.c | 6 ++++++
|
||||||
|
4 files changed, 35 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/compositor/meta-window-actor-private.h b/src/compositor/meta-window-actor-private.h
|
||||||
|
index 59dd641d4..31cc37702 100644
|
||||||
|
--- a/src/compositor/meta-window-actor-private.h
|
||||||
|
+++ b/src/compositor/meta-window-actor-private.h
|
||||||
|
@@ -28,6 +28,7 @@ struct _MetaWindowActorClass
|
||||||
|
void (*queue_destroy) (MetaWindowActor *actor);
|
||||||
|
void (*set_frozen) (MetaWindowActor *actor,
|
||||||
|
gboolean frozen);
|
||||||
|
+ void (*update_regions) (MetaWindowActor *actor);
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
@@ -88,4 +89,6 @@ gboolean meta_window_actor_is_frozen (MetaWindowActor *self);
|
||||||
|
|
||||||
|
gboolean meta_window_actor_is_opaque (MetaWindowActor *self);
|
||||||
|
|
||||||
|
+void meta_window_actor_update_regions (MetaWindowActor *self);
|
||||||
|
+
|
||||||
|
#endif /* META_WINDOW_ACTOR_PRIVATE_H */
|
||||||
|
diff --git a/src/compositor/meta-window-actor-wayland.c b/src/compositor/meta-window-actor-wayland.c
|
||||||
|
index 4cdf8fe0e..bd890256c 100644
|
||||||
|
--- a/src/compositor/meta-window-actor-wayland.c
|
||||||
|
+++ b/src/compositor/meta-window-actor-wayland.c
|
||||||
|
@@ -162,6 +162,11 @@ meta_window_actor_wayland_get_paint_volume (ClutterActor *actor,
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+meta_window_actor_wayland_update_regions (MetaWindowActor *actor)
|
||||||
|
+{
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
meta_window_actor_wayland_class_init (MetaWindowActorWaylandClass *klass)
|
||||||
|
{
|
||||||
|
@@ -177,6 +182,7 @@ meta_window_actor_wayland_class_init (MetaWindowActorWaylandClass *klass)
|
||||||
|
window_actor_class->post_paint = meta_window_actor_wayland_post_paint;
|
||||||
|
window_actor_class->queue_destroy = meta_window_actor_wayland_queue_destroy;
|
||||||
|
window_actor_class->set_frozen = meta_window_actor_wayland_set_frozen;
|
||||||
|
+ window_actor_class->update_regions = meta_window_actor_wayland_update_regions;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c
|
||||||
|
index 5c0db02ce..228d15e04 100644
|
||||||
|
--- a/src/compositor/meta-window-actor-x11.c
|
||||||
|
+++ b/src/compositor/meta-window-actor-x11.c
|
||||||
|
@@ -1132,7 +1132,7 @@ update_opaque_region (MetaWindowActorX11 *actor_x11)
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
-check_needs_reshape (MetaWindowActorX11 *actor_x11)
|
||||||
|
+update_regions (MetaWindowActorX11 *actor_x11)
|
||||||
|
{
|
||||||
|
if (!actor_x11->needs_reshape)
|
||||||
|
return;
|
||||||
|
@@ -1144,6 +1144,18 @@ check_needs_reshape (MetaWindowActorX11 *actor_x11)
|
||||||
|
actor_x11->needs_reshape = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+check_needs_reshape (MetaWindowActorX11 *actor_x11)
|
||||||
|
+{
|
||||||
|
+ MetaWindow *window =
|
||||||
|
+ meta_window_actor_get_meta_window (META_WINDOW_ACTOR (actor_x11));
|
||||||
|
+
|
||||||
|
+ if (meta_window_x11_always_update_shape (window))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ update_regions (actor_x11);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void
|
||||||
|
meta_window_actor_x11_update_shape (MetaWindowActorX11 *actor_x11)
|
||||||
|
{
|
||||||
|
@@ -1394,6 +1406,12 @@ meta_window_actor_x11_set_frozen (MetaWindowActor *actor,
|
||||||
|
meta_window_x11_thaw_commits (window);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+meta_window_actor_x11_update_regions (MetaWindowActor *actor)
|
||||||
|
+{
|
||||||
|
+ update_regions (META_WINDOW_ACTOR_X11 (actor));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
meta_window_actor_x11_set_property (GObject *object,
|
||||||
|
guint prop_id,
|
||||||
|
@@ -1566,6 +1584,7 @@ meta_window_actor_x11_class_init (MetaWindowActorX11Class *klass)
|
||||||
|
window_actor_class->post_paint = meta_window_actor_x11_post_paint;
|
||||||
|
window_actor_class->queue_destroy = meta_window_actor_x11_queue_destroy;
|
||||||
|
window_actor_class->set_frozen = meta_window_actor_x11_set_frozen;
|
||||||
|
+ window_actor_class->update_regions = meta_window_actor_x11_update_regions;
|
||||||
|
|
||||||
|
actor_class->paint = meta_window_actor_x11_paint;
|
||||||
|
actor_class->get_paint_volume = meta_window_actor_x11_get_paint_volume;
|
||||||
|
diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c
|
||||||
|
index c5ad8e1b0..32b85ed1f 100644
|
||||||
|
--- a/src/compositor/meta-window-actor.c
|
||||||
|
+++ b/src/compositor/meta-window-actor.c
|
||||||
|
@@ -251,6 +251,12 @@ meta_window_actor_is_frozen (MetaWindowActor *self)
|
||||||
|
return priv->surface == NULL || priv->freeze_count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+void
|
||||||
|
+meta_window_actor_update_regions (MetaWindowActor *self)
|
||||||
|
+{
|
||||||
|
+ META_WINDOW_ACTOR_GET_CLASS (self)->update_regions (self);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
meta_window_actor_set_frozen (MetaWindowActor *self,
|
||||||
|
gboolean frozen)
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
50
0012-xwayland-Update-regions-on-texture-updates.patch
Normal file
50
0012-xwayland-Update-regions-on-texture-updates.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From 0b102afb5392c1a8f9d1b9ed7f20aceb1fdf84b2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||||
|
Date: Tue, 3 Mar 2020 10:31:51 +0100
|
||||||
|
Subject: [PATCH 12/48] xwayland: Update regions on texture updates
|
||||||
|
|
||||||
|
For X11 clients running on Wayland, the actual texture is set by
|
||||||
|
Xwayland.
|
||||||
|
|
||||||
|
The shape, input and opaque regions, however are driven by X11
|
||||||
|
properties meaning that those may come at a different time than the
|
||||||
|
actual update of the content.
|
||||||
|
|
||||||
|
This results in black areas being visible at times on resize with
|
||||||
|
Xwayland clients.
|
||||||
|
|
||||||
|
To make sure we update all the regions at the same time the buffer is
|
||||||
|
updated, update the shape, input and opaque regions when the texture is
|
||||||
|
committed from when the Xwayland surface state is synchronized.
|
||||||
|
|
||||||
|
That fixes the remaining black areas being sometimes visible when
|
||||||
|
resizing client-side decorations windows on Xwayland.
|
||||||
|
|
||||||
|
Closes: https://gitlab.gnome.org/GNOME/mutter/issues/1007
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1091
|
||||||
|
---
|
||||||
|
src/wayland/meta-xwayland-surface.c | 8 +++++++-
|
||||||
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/wayland/meta-xwayland-surface.c b/src/wayland/meta-xwayland-surface.c
|
||||||
|
index 3233dcc26..4a4615a2c 100644
|
||||||
|
--- a/src/wayland/meta-xwayland-surface.c
|
||||||
|
+++ b/src/wayland/meta-xwayland-surface.c
|
||||||
|
@@ -232,7 +232,13 @@ meta_xwayland_surface_sync_actor_state (MetaWaylandActorSurface *actor_surface)
|
||||||
|
META_WAYLAND_ACTOR_SURFACE_CLASS (meta_xwayland_surface_parent_class);
|
||||||
|
|
||||||
|
if (xwayland_surface->window)
|
||||||
|
- actor_surface_class->sync_actor_state (actor_surface);
|
||||||
|
+ {
|
||||||
|
+ MetaWindowActor *window_actor =
|
||||||
|
+ meta_window_actor_from_window (xwayland_surface->window);
|
||||||
|
+
|
||||||
|
+ actor_surface_class->sync_actor_state (actor_surface);
|
||||||
|
+ meta_window_actor_update_regions (window_actor);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
From 267f7120683f52b67311119c508ad49643f52623 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||||
|
Date: Wed, 4 Mar 2020 11:08:01 +0100
|
||||||
|
Subject: [PATCH 13/48] window-actor/x11: Use the new MetaShapedTexture API
|
||||||
|
|
||||||
|
The code in `build_and_scan_frame_mask` predates the introduction of the
|
||||||
|
`MetaShapedTexture` API to get the texture width hand height.
|
||||||
|
|
||||||
|
Use the new `meta_shaped_texture_get_width/height` API instead of using
|
||||||
|
the CoGL paint texture.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1091
|
||||||
|
---
|
||||||
|
src/compositor/meta-window-actor-x11.c | 9 ++-------
|
||||||
|
1 file changed, 2 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c
|
||||||
|
index 228d15e04..851df7e57 100644
|
||||||
|
--- a/src/compositor/meta-window-actor-x11.c
|
||||||
|
+++ b/src/compositor/meta-window-actor-x11.c
|
||||||
|
@@ -885,7 +885,6 @@ build_and_scan_frame_mask (MetaWindowActorX11 *actor_x11,
|
||||||
|
uint8_t *mask_data;
|
||||||
|
unsigned int tex_width, tex_height;
|
||||||
|
MetaShapedTexture *stex;
|
||||||
|
- CoglTexture *paint_tex;
|
||||||
|
CoglTexture2D *mask_texture;
|
||||||
|
int stride;
|
||||||
|
cairo_t *cr;
|
||||||
|
@@ -897,12 +896,8 @@ build_and_scan_frame_mask (MetaWindowActorX11 *actor_x11,
|
||||||
|
|
||||||
|
meta_shaped_texture_set_mask_texture (stex, NULL);
|
||||||
|
|
||||||
|
- paint_tex = meta_shaped_texture_get_texture (stex);
|
||||||
|
- if (paint_tex == NULL)
|
||||||
|
- return;
|
||||||
|
-
|
||||||
|
- tex_width = cogl_texture_get_width (paint_tex);
|
||||||
|
- tex_height = cogl_texture_get_height (paint_tex);
|
||||||
|
+ tex_width = meta_shaped_texture_get_width (stex);
|
||||||
|
+ tex_height = meta_shaped_texture_get_height (stex);
|
||||||
|
|
||||||
|
stride = cairo_format_stride_for_width (CAIRO_FORMAT_A8, tex_width);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,77 @@
|
|||||||
|
From 0743381573e4e4c50039aef33cf7404baa340c3d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||||
|
Date: Tue, 10 Mar 2020 14:44:15 +0100
|
||||||
|
Subject: [PATCH 14/48] window/x11: Rename
|
||||||
|
`meta_window_x11_buffer_rect_to_frame_rect`
|
||||||
|
|
||||||
|
To keep consistent and avoid confusion, rename the function:
|
||||||
|
`meta_window_x11_buffer_rect_to_frame_rect()`
|
||||||
|
to:
|
||||||
|
`meta_window_x11_surface_rect_to_frame_rect()`
|
||||||
|
|
||||||
|
As this function doesn't deal with the `window->buffer_rect` at all.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1091
|
||||||
|
---
|
||||||
|
src/compositor/meta-window-actor-x11.c | 2 +-
|
||||||
|
src/x11/window-x11.c | 8 ++++----
|
||||||
|
src/x11/window-x11.h | 4 ++--
|
||||||
|
3 files changed, 7 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c
|
||||||
|
index 851df7e57..a8d137316 100644
|
||||||
|
--- a/src/compositor/meta-window-actor-x11.c
|
||||||
|
+++ b/src/compositor/meta-window-actor-x11.c
|
||||||
|
@@ -929,7 +929,7 @@ build_and_scan_frame_mask (MetaWindowActorX11 *actor_x11,
|
||||||
|
*/
|
||||||
|
if (meta_window_x11_always_update_shape (window))
|
||||||
|
{
|
||||||
|
- meta_window_x11_buffer_rect_to_frame_rect (window, &rect, &frame_rect);
|
||||||
|
+ meta_window_x11_surface_rect_to_frame_rect (window, &rect, &frame_rect);
|
||||||
|
get_client_area_rect_from_texture (actor_x11, stex, &client_area);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
|
||||||
|
index 49f7f1526..ed56bca5f 100644
|
||||||
|
--- a/src/x11/window-x11.c
|
||||||
|
+++ b/src/x11/window-x11.c
|
||||||
|
@@ -4075,9 +4075,9 @@ meta_window_x11_always_update_shape (MetaWindow *window)
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-meta_window_x11_buffer_rect_to_frame_rect (MetaWindow *window,
|
||||||
|
- MetaRectangle *buffer_rect,
|
||||||
|
- MetaRectangle *frame_rect)
|
||||||
|
+meta_window_x11_surface_rect_to_frame_rect (MetaWindow *window,
|
||||||
|
+ MetaRectangle *surface_rect,
|
||||||
|
+ MetaRectangle *frame_rect)
|
||||||
|
|
||||||
|
{
|
||||||
|
MetaFrameBorders borders;
|
||||||
|
@@ -4086,7 +4086,7 @@ meta_window_x11_buffer_rect_to_frame_rect (MetaWindow *window,
|
||||||
|
|
||||||
|
meta_frame_calc_borders (window->frame, &borders);
|
||||||
|
|
||||||
|
- *frame_rect = *buffer_rect;
|
||||||
|
+ *frame_rect = *surface_rect;
|
||||||
|
frame_rect->x += borders.invisible.left;
|
||||||
|
frame_rect->y += borders.invisible.top;
|
||||||
|
frame_rect->width -= borders.invisible.left + borders.invisible.right;
|
||||||
|
diff --git a/src/x11/window-x11.h b/src/x11/window-x11.h
|
||||||
|
index 7f4f96f6c..d41d0d156 100644
|
||||||
|
--- a/src/x11/window-x11.h
|
||||||
|
+++ b/src/x11/window-x11.h
|
||||||
|
@@ -89,8 +89,8 @@ void meta_window_x11_set_thaw_after_paint (MetaWindow *window,
|
||||||
|
gboolean meta_window_x11_should_thaw_after_paint (MetaWindow *window);
|
||||||
|
gboolean meta_window_x11_always_update_shape (MetaWindow *window);
|
||||||
|
|
||||||
|
-void meta_window_x11_buffer_rect_to_frame_rect (MetaWindow *window,
|
||||||
|
- MetaRectangle *buffer_rect,
|
||||||
|
+void meta_window_x11_surface_rect_to_frame_rect (MetaWindow *window,
|
||||||
|
+ MetaRectangle *surface_rect,
|
||||||
|
MetaRectangle *frame_rect);
|
||||||
|
void meta_window_x11_surface_rect_to_client_rect (MetaWindow *window,
|
||||||
|
MetaRectangle *surface_rect,
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,29 @@
|
|||||||
|
From 509e9ca5a0009268faaa7373c984e2df710a48e2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sebastian Keller <skeller@gnome.org>
|
||||||
|
Date: Tue, 10 Mar 2020 23:27:35 +0100
|
||||||
|
Subject: [PATCH 15/48] xwayland: Fix mime type atom list leak on DnD with more
|
||||||
|
than 3 types
|
||||||
|
|
||||||
|
Found using the clang static analyzer
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1117
|
||||||
|
---
|
||||||
|
src/wayland/meta-xwayland-dnd.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/wayland/meta-xwayland-dnd.c b/src/wayland/meta-xwayland-dnd.c
|
||||||
|
index 9821f2dc3..6b75362ba 100644
|
||||||
|
--- a/src/wayland/meta-xwayland-dnd.c
|
||||||
|
+++ b/src/wayland/meta-xwayland-dnd.c
|
||||||
|
@@ -171,7 +171,7 @@ xdnd_send_enter (MetaXWaylandDnd *dnd,
|
||||||
|
/* We have more than 3 mimetypes, we must set up
|
||||||
|
* the mimetype list as a XdndTypeList property.
|
||||||
|
*/
|
||||||
|
- Atom *atomlist;
|
||||||
|
+ g_autofree Atom *atomlist = NULL;
|
||||||
|
gint i = 0;
|
||||||
|
|
||||||
|
xev.xclient.data.l[1] |= 1;
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
106
0016-monitor-config-manager-Respect-layout-mode-when-calc.patch
Normal file
106
0016-monitor-config-manager-Respect-layout-mode-when-calc.patch
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
From 531a195cf184b3d81e333dedf83bc51c3f37e97b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Wed, 11 Mar 2020 09:53:17 +0100
|
||||||
|
Subject: [PATCH 16/48] monitor-config-manager: Respect layout mode when
|
||||||
|
calculating CRTC layout
|
||||||
|
|
||||||
|
The scale used when calculating the CRTC layout should only come from
|
||||||
|
the logical monitor scale if the layout mode of the corresponding
|
||||||
|
configuration is 'logical'.
|
||||||
|
|
||||||
|
This fixes an issue where the X11 screen size accidentally got set to a
|
||||||
|
size scaled down by the configured global UI scale.
|
||||||
|
|
||||||
|
Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/1107
|
||||||
|
Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/1109
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1118
|
||||||
|
---
|
||||||
|
src/backends/meta-monitor-config-manager.c | 22 +++++++++++++++++++---
|
||||||
|
1 file changed, 19 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c
|
||||||
|
index 2107b7463..5739ca18b 100644
|
||||||
|
--- a/src/backends/meta-monitor-config-manager.c
|
||||||
|
+++ b/src/backends/meta-monitor-config-manager.c
|
||||||
|
@@ -152,6 +152,7 @@ find_unassigned_crtc (MetaOutput *output,
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
MetaMonitorManager *monitor_manager;
|
||||||
|
+ MetaMonitorsConfig *config;
|
||||||
|
MetaLogicalMonitorConfig *logical_monitor_config;
|
||||||
|
MetaMonitorConfig *monitor_config;
|
||||||
|
GPtrArray *crtc_infos;
|
||||||
|
@@ -173,7 +174,7 @@ assign_monitor_crtc (MetaMonitor *monitor,
|
||||||
|
MetaMonitorTransform crtc_transform;
|
||||||
|
int crtc_x, crtc_y;
|
||||||
|
float x_offset, y_offset;
|
||||||
|
- float scale;
|
||||||
|
+ float scale = 0.0;
|
||||||
|
float width, height;
|
||||||
|
MetaCrtcMode *crtc_mode;
|
||||||
|
graphene_rect_t crtc_layout;
|
||||||
|
@@ -209,7 +210,17 @@ assign_monitor_crtc (MetaMonitor *monitor,
|
||||||
|
|
||||||
|
x_offset = data->logical_monitor_config->layout.x;
|
||||||
|
y_offset = data->logical_monitor_config->layout.y;
|
||||||
|
- scale = data->logical_monitor_config->scale;
|
||||||
|
+
|
||||||
|
+ switch (data->config->layout_mode)
|
||||||
|
+ {
|
||||||
|
+ case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
|
||||||
|
+ scale = data->logical_monitor_config->scale;
|
||||||
|
+ break;
|
||||||
|
+ case META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL:
|
||||||
|
+ scale = 1.0;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
crtc_mode = monitor_crtc_mode->crtc_mode;
|
||||||
|
|
||||||
|
if (meta_monitor_transform_is_rotated (crtc_transform))
|
||||||
|
@@ -272,6 +283,7 @@ assign_monitor_crtc (MetaMonitor *monitor,
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
assign_monitor_crtcs (MetaMonitorManager *manager,
|
||||||
|
+ MetaMonitorsConfig *config,
|
||||||
|
MetaLogicalMonitorConfig *logical_monitor_config,
|
||||||
|
MetaMonitorConfig *monitor_config,
|
||||||
|
GPtrArray *crtc_infos,
|
||||||
|
@@ -307,6 +319,7 @@ assign_monitor_crtcs (MetaMonitorManager *manager,
|
||||||
|
|
||||||
|
data = (MonitorAssignmentData) {
|
||||||
|
.monitor_manager = manager,
|
||||||
|
+ .config = config,
|
||||||
|
.logical_monitor_config = logical_monitor_config,
|
||||||
|
.monitor_config = monitor_config,
|
||||||
|
.crtc_infos = crtc_infos,
|
||||||
|
@@ -324,6 +337,7 @@ assign_monitor_crtcs (MetaMonitorManager *manager,
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
assign_logical_monitor_crtcs (MetaMonitorManager *manager,
|
||||||
|
+ MetaMonitorsConfig *config,
|
||||||
|
MetaLogicalMonitorConfig *logical_monitor_config,
|
||||||
|
GPtrArray *crtc_infos,
|
||||||
|
GPtrArray *output_infos,
|
||||||
|
@@ -337,6 +351,7 @@ assign_logical_monitor_crtcs (MetaMonitorManager *manager,
|
||||||
|
MetaMonitorConfig *monitor_config = l->data;
|
||||||
|
|
||||||
|
if (!assign_monitor_crtcs (manager,
|
||||||
|
+ config,
|
||||||
|
logical_monitor_config,
|
||||||
|
monitor_config,
|
||||||
|
crtc_infos, output_infos,
|
||||||
|
@@ -395,7 +410,8 @@ meta_monitor_config_manager_assign (MetaMonitorManager *manager,
|
||||||
|
{
|
||||||
|
MetaLogicalMonitorConfig *logical_monitor_config = l->data;
|
||||||
|
|
||||||
|
- if (!assign_logical_monitor_crtcs (manager, logical_monitor_config,
|
||||||
|
+ if (!assign_logical_monitor_crtcs (manager,
|
||||||
|
+ config, logical_monitor_config,
|
||||||
|
crtc_infos, output_infos,
|
||||||
|
reserved_crtcs, error))
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
From d2a12ee0fabff9a7f0c71a025aba0a99c377c8b1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Wed, 11 Mar 2020 11:06:00 +0100
|
||||||
|
Subject: [PATCH 17/48] crtc-xrandr: Compare right coordinate when checking
|
||||||
|
assignment
|
||||||
|
|
||||||
|
Compare x with x, and y with y, not y with x.
|
||||||
|
|
||||||
|
Fixes an issue where only changing the scale doesn't actually apply the
|
||||||
|
new scale.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1119
|
||||||
|
---
|
||||||
|
src/backends/x11/meta-crtc-xrandr.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/x11/meta-crtc-xrandr.c b/src/backends/x11/meta-crtc-xrandr.c
|
||||||
|
index 3b9d90aa7..678e68a9b 100644
|
||||||
|
--- a/src/backends/x11/meta-crtc-xrandr.c
|
||||||
|
+++ b/src/backends/x11/meta-crtc-xrandr.c
|
||||||
|
@@ -195,7 +195,7 @@ meta_crtc_xrandr_is_assignment_changed (MetaCrtc *crtc,
|
||||||
|
if (crtc_xrandr->rect.x != (int) roundf (crtc_info->layout.origin.x))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
- if (crtc_xrandr->rect.y != (int) roundf (crtc_info->layout.origin.x))
|
||||||
|
+ if (crtc_xrandr->rect.y != (int) roundf (crtc_info->layout.origin.y))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (crtc_xrandr->transform != crtc_info->transform)
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,45 @@
|
|||||||
|
From 512bb7d1cd0836e6d110609a16fdbf9f9f5b30df Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Wed, 11 Mar 2020 13:27:07 +0100
|
||||||
|
Subject: [PATCH 18/48] wayland: Don't crash when trying to fullscreen on inert
|
||||||
|
wl_output
|
||||||
|
|
||||||
|
There is a race where an output can be used as a fullscreen target, but
|
||||||
|
it has already been removed due to a hotplug. Handle this gracefully by
|
||||||
|
ignoring said output in such situations.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1120
|
||||||
|
---
|
||||||
|
src/wayland/meta-wayland-legacy-xdg-shell.c | 2 +-
|
||||||
|
src/wayland/meta-wayland-xdg-shell.c | 2 +-
|
||||||
|
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/wayland/meta-wayland-legacy-xdg-shell.c b/src/wayland/meta-wayland-legacy-xdg-shell.c
|
||||||
|
index e438f2460..eba802e0c 100644
|
||||||
|
--- a/src/wayland/meta-wayland-legacy-xdg-shell.c
|
||||||
|
+++ b/src/wayland/meta-wayland-legacy-xdg-shell.c
|
||||||
|
@@ -439,7 +439,7 @@ zxdg_toplevel_v6_set_fullscreen (struct wl_client *client,
|
||||||
|
if (output_resource)
|
||||||
|
{
|
||||||
|
MetaWaylandOutput *output = wl_resource_get_user_data (output_resource);
|
||||||
|
- if (output)
|
||||||
|
+ if (output && output->logical_monitor)
|
||||||
|
meta_window_move_to_monitor (window, output->logical_monitor->number);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/wayland/meta-wayland-xdg-shell.c b/src/wayland/meta-wayland-xdg-shell.c
|
||||||
|
index fefed4596..d8f639757 100644
|
||||||
|
--- a/src/wayland/meta-wayland-xdg-shell.c
|
||||||
|
+++ b/src/wayland/meta-wayland-xdg-shell.c
|
||||||
|
@@ -456,7 +456,7 @@ xdg_toplevel_set_fullscreen (struct wl_client *client,
|
||||||
|
{
|
||||||
|
MetaWaylandOutput *output = wl_resource_get_user_data (output_resource);
|
||||||
|
|
||||||
|
- if (output)
|
||||||
|
+ if (output && output->logical_monitor)
|
||||||
|
{
|
||||||
|
meta_window_move_to_monitor (window,
|
||||||
|
output->logical_monitor->number);
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,57 @@
|
|||||||
|
From aba0b9ef643a14d6187c42c1733b6309332c1ed1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alynx Zhou <alynx.zhou@gmail.com>
|
||||||
|
Date: Thu, 9 Jan 2020 10:12:41 +0800
|
||||||
|
Subject: [PATCH 19/48] keybindings: Move common window grab code out of X-only
|
||||||
|
if statement
|
||||||
|
|
||||||
|
`3c8d4171` moved some common codes into X11-only code blocks by mistake,
|
||||||
|
and it prevents keyboard window resize/move mode under Wayland because
|
||||||
|
those variables are unset. This commit fixed it via moving such common
|
||||||
|
codes out of X11-only code blocks.
|
||||||
|
|
||||||
|
Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/949
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/997
|
||||||
|
---
|
||||||
|
src/core/keybindings.c | 17 +++++++++--------
|
||||||
|
1 file changed, 9 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
|
||||||
|
index 64f392f07..ab1ace5ae 100644
|
||||||
|
--- a/src/core/keybindings.c
|
||||||
|
+++ b/src/core/keybindings.c
|
||||||
|
@@ -1820,12 +1820,12 @@ meta_window_grab_all_keys (MetaWindow *window,
|
||||||
|
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||||
|
"Grabbing all keys on window %s\n", window->desc);
|
||||||
|
retval = grab_keyboard (grabwindow, timestamp, XIGrabModeAsync);
|
||||||
|
- if (retval)
|
||||||
|
- {
|
||||||
|
- window->keys_grabbed = FALSE;
|
||||||
|
- window->all_keys_grabbed = TRUE;
|
||||||
|
- window->grab_on_frame = window->frame != NULL;
|
||||||
|
- }
|
||||||
|
+ }
|
||||||
|
+ if (retval)
|
||||||
|
+ {
|
||||||
|
+ window->keys_grabbed = FALSE;
|
||||||
|
+ window->all_keys_grabbed = TRUE;
|
||||||
|
+ window->grab_on_frame = window->frame != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
@@ -1835,9 +1835,10 @@ void
|
||||||
|
meta_window_ungrab_all_keys (MetaWindow *window,
|
||||||
|
guint32 timestamp)
|
||||||
|
{
|
||||||
|
- if (!meta_is_wayland_compositor () && window->all_keys_grabbed)
|
||||||
|
+ if (window->all_keys_grabbed)
|
||||||
|
{
|
||||||
|
- ungrab_keyboard (timestamp);
|
||||||
|
+ if (!meta_is_wayland_compositor())
|
||||||
|
+ ungrab_keyboard (timestamp);
|
||||||
|
|
||||||
|
window->grab_on_frame = FALSE;
|
||||||
|
window->all_keys_grabbed = FALSE;
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,39 @@
|
|||||||
|
From 5319949a45bb22f5c998b485e955c1ddd13810f3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Wed, 11 Mar 2020 11:46:48 +0100
|
||||||
|
Subject: [PATCH 20/48] kms-impl-device: Clean up state if drm resources
|
||||||
|
disappear
|
||||||
|
|
||||||
|
It may happen that drmModeGetResources() starts returning NULL. Handle
|
||||||
|
this gracefully by removing all connectors, CRTCs and planes making the
|
||||||
|
device in practice defunct.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1121
|
||||||
|
---
|
||||||
|
src/backends/native/meta-kms-impl-device.c | 10 ++++++++++
|
||||||
|
1 file changed, 10 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-kms-impl-device.c b/src/backends/native/meta-kms-impl-device.c
|
||||||
|
index e4f10d66e..80d7a8b01 100644
|
||||||
|
--- a/src/backends/native/meta-kms-impl-device.c
|
||||||
|
+++ b/src/backends/native/meta-kms-impl-device.c
|
||||||
|
@@ -365,6 +365,16 @@ meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device)
|
||||||
|
meta_assert_in_kms_impl (meta_kms_impl_get_kms (impl_device->impl));
|
||||||
|
|
||||||
|
drm_resources = drmModeGetResources (impl_device->fd);
|
||||||
|
+ if (!drm_resources)
|
||||||
|
+ {
|
||||||
|
+ g_list_free_full (impl_device->planes, g_object_unref);
|
||||||
|
+ g_list_free_full (impl_device->crtcs, g_object_unref);
|
||||||
|
+ g_list_free_full (impl_device->connectors, g_object_unref);
|
||||||
|
+ impl_device->planes = NULL;
|
||||||
|
+ impl_device->crtcs = NULL;
|
||||||
|
+ impl_device->connectors = NULL;
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
update_connectors (impl_device, drm_resources);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
27
0021-cogl-Add-main-header-for-Cogl.patch
Normal file
27
0021-cogl-Add-main-header-for-Cogl.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
From df332551623629eb5373bdc7a8fa125a128c4351 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Corentin=20No=C3=ABl?= <corentin@elementary.io>
|
||||||
|
Date: Mon, 2 Mar 2020 12:15:57 +0100
|
||||||
|
Subject: [PATCH 21/48] cogl: Add main header for Cogl
|
||||||
|
|
||||||
|
This allows bindings linking to the C header to actually have the right one.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1101
|
||||||
|
---
|
||||||
|
cogl/cogl/meson.build | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/cogl/cogl/meson.build b/cogl/cogl/meson.build
|
||||||
|
index 0297a2485..be93ba2f9 100644
|
||||||
|
--- a/cogl/cogl/meson.build
|
||||||
|
+++ b/cogl/cogl/meson.build
|
||||||
|
@@ -478,6 +478,7 @@ if have_introspection
|
||||||
|
'-D__COGL_GLX_H_INSIDE__',
|
||||||
|
'-DCOGL_GIR_SCANNING',
|
||||||
|
],
|
||||||
|
+ header: 'cogl/cogl.h',
|
||||||
|
install_dir_gir: pkglibdir,
|
||||||
|
install_dir_typelib: pkglibdir,
|
||||||
|
install: true
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From 6989fea76717b54496da829aca7ca5591ff36a52 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andre Moreira Magalhaes <andre@endlessm.com>
|
||||||
|
Date: Thu, 12 Mar 2020 17:49:11 -0300
|
||||||
|
Subject: [PATCH 22/48] cogl: Fix build error when GL_ARB_sync is not defined
|
||||||
|
|
||||||
|
Commit 41992757e0 introduced a change to use CoglContext.glFenceSync
|
||||||
|
but this method is only available when GL_ARB_sync is defined (as
|
||||||
|
defined on gl-prototypes/cogl-all-functions.h).
|
||||||
|
|
||||||
|
This change fixes that.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1123
|
||||||
|
---
|
||||||
|
cogl/cogl/driver/gl/gles/cogl-driver-gles.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/cogl/cogl/driver/gl/gles/cogl-driver-gles.c b/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
|
||||||
|
index e0c8ca1fa..ca98823e8 100644
|
||||||
|
--- a/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
|
||||||
|
+++ b/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
|
||||||
|
@@ -366,8 +366,10 @@ _cogl_driver_update_features (CoglContext *context,
|
||||||
|
_cogl_check_extension ("GL_OES_egl_sync", gl_extensions))
|
||||||
|
COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_OES_EGL_SYNC, TRUE);
|
||||||
|
|
||||||
|
+#ifdef GL_ARB_sync
|
||||||
|
if (context->glFenceSync)
|
||||||
|
COGL_FLAGS_SET (context->features, COGL_FEATURE_ID_FENCE, TRUE);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
if (_cogl_check_extension ("GL_EXT_texture_rg", gl_extensions))
|
||||||
|
COGL_FLAGS_SET (context->features,
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,54 @@
|
|||||||
|
From 67dd0b4fec6eecb6fa6c7ed6784820901a53e2bf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Thu, 12 Mar 2020 19:26:37 +0100
|
||||||
|
Subject: [PATCH 23/48] keybindings: Avoid double calls to process_event() on
|
||||||
|
the same event
|
||||||
|
|
||||||
|
If you first press a key that triggers the "special modifier key" paths
|
||||||
|
(ctrl, super), and then press another key that doesn't match (yet?) any
|
||||||
|
keybindings (eg. ctrl+alt, super+x), the second key press goes twice
|
||||||
|
through process_event(), once in the processing of this so far special
|
||||||
|
combination and another while we let the event through.
|
||||||
|
|
||||||
|
In order to keep things consistent, handle it differently depending on
|
||||||
|
whether we are a wayland compositor or not. For X11, consider the event
|
||||||
|
handled after the call to process_event() in process_special_modifier_key().
|
||||||
|
For Wayland, as XIAllowEvents is not the mechanism that allows clients see
|
||||||
|
the key event, we can just fall through the regular paths, without this
|
||||||
|
special handling.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1014
|
||||||
|
---
|
||||||
|
src/core/keybindings.c | 9 +++++++--
|
||||||
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
|
||||||
|
index ab1ace5ae..2cf705598 100644
|
||||||
|
--- a/src/core/keybindings.c
|
||||||
|
+++ b/src/core/keybindings.c
|
||||||
|
@@ -2037,6 +2037,13 @@ process_special_modifier_key (MetaDisplay *display,
|
||||||
|
{
|
||||||
|
*modifier_press_only = FALSE;
|
||||||
|
|
||||||
|
+ /* If this is a wayland session, we can avoid the shenanigans
|
||||||
|
+ * about passive grabs below, and let the event continue to
|
||||||
|
+ * be processed through the regular paths.
|
||||||
|
+ */
|
||||||
|
+ if (!xdisplay)
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
/* OK, the user hit modifier+key rather than pressing and
|
||||||
|
* releasing the modifier key alone. We want to handle the key
|
||||||
|
* sequence "normally". Unfortunately, using
|
||||||
|
@@ -2069,8 +2076,6 @@ process_special_modifier_key (MetaDisplay *display,
|
||||||
|
XIAllowEvents (xdisplay,
|
||||||
|
clutter_input_device_get_device_id (event->device),
|
||||||
|
XIReplayDevice, event->time);
|
||||||
|
-
|
||||||
|
- return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event->type == CLUTTER_KEY_RELEASE)
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,56 @@
|
|||||||
|
From 23da6c2426932dcb2057849eec9e1d79c34fc405 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Thu, 12 Mar 2020 19:43:15 +0100
|
||||||
|
Subject: [PATCH 24/48] keybindings: Check the special modifiers specifically
|
||||||
|
|
||||||
|
Make sure it is only the special modifier (hardcoded to 1 currently)
|
||||||
|
which is being pressed (not counting locked modifiers) before notifying
|
||||||
|
that the special modifier is pressed, as we are interested in it being
|
||||||
|
pressed alone and not in combination with other modifier keys.
|
||||||
|
|
||||||
|
This helps in two ways:
|
||||||
|
- Pressing alt, then ctrl, then releasing both won't trigger the locate
|
||||||
|
pointer action.
|
||||||
|
- Pressing alt, then ctrl, then down/up to switch workspace won't interpret
|
||||||
|
the last up/down keypress as an additional key on top of the special ctrl
|
||||||
|
modifier, thus won't be forwarded down to the focused client in the last
|
||||||
|
second.
|
||||||
|
|
||||||
|
Closes: https://gitlab.gnome.org/GNOME/mutter/issues/812
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1014
|
||||||
|
---
|
||||||
|
src/core/keybindings.c | 10 ++++++++++
|
||||||
|
1 file changed, 10 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
|
||||||
|
index 2cf705598..7f930874f 100644
|
||||||
|
--- a/src/core/keybindings.c
|
||||||
|
+++ b/src/core/keybindings.c
|
||||||
|
@@ -63,6 +63,15 @@
|
||||||
|
#define META_KEY_BINDING_PRIMARY_LAYOUT 0
|
||||||
|
#define META_KEY_BINDING_SECONDARY_LAYOUT 1
|
||||||
|
|
||||||
|
+/* Only for special modifier keys */
|
||||||
|
+#define IGNORED_MODIFIERS (CLUTTER_LOCK_MASK | \
|
||||||
|
+ CLUTTER_MOD2_MASK | \
|
||||||
|
+ CLUTTER_BUTTON1_MASK | \
|
||||||
|
+ CLUTTER_BUTTON2_MASK | \
|
||||||
|
+ CLUTTER_BUTTON3_MASK | \
|
||||||
|
+ CLUTTER_BUTTON4_MASK | \
|
||||||
|
+ CLUTTER_BUTTON5_MASK)
|
||||||
|
+
|
||||||
|
static gboolean add_builtin_keybinding (MetaDisplay *display,
|
||||||
|
const char *name,
|
||||||
|
GSettings *settings,
|
||||||
|
@@ -2120,6 +2129,7 @@ process_special_modifier_key (MetaDisplay *display,
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else if (event->type == CLUTTER_KEY_PRESS &&
|
||||||
|
+ (event->modifier_state & ~(IGNORED_MODIFIERS)) == 0 &&
|
||||||
|
resolved_key_combo_has_keycode (resolved_key_combo,
|
||||||
|
event->hardware_keycode))
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
291
0025-input-settings-Wire-up-middle-emulation.patch
Normal file
291
0025-input-settings-Wire-up-middle-emulation.patch
Normal file
@ -0,0 +1,291 @@
|
|||||||
|
From 0487e6f11fc9231214c03bd8eb5050a7e04a621d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andrew Gaul <andrew@gaul.org>
|
||||||
|
Date: Fri, 5 Oct 2018 17:06:58 -0700
|
||||||
|
Subject: [PATCH 25/48] input-settings: Wire up middle-emulation
|
||||||
|
|
||||||
|
This allows emulating middle click via simultaneous left and right
|
||||||
|
click. Fixes #238.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/256
|
||||||
|
---
|
||||||
|
src/backends/meta-input-settings-private.h | 11 ++++
|
||||||
|
src/backends/meta-input-settings.c | 43 ++++++++++++
|
||||||
|
.../native/meta-input-settings-native.c | 65 +++++++++++++++++++
|
||||||
|
src/backends/x11/meta-input-settings-x11.c | 53 +++++++++++++++
|
||||||
|
4 files changed, 172 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-input-settings-private.h b/src/backends/meta-input-settings-private.h
|
||||||
|
index a035db78f..135b17f1a 100644
|
||||||
|
--- a/src/backends/meta-input-settings-private.h
|
||||||
|
+++ b/src/backends/meta-input-settings-private.h
|
||||||
|
@@ -114,6 +114,17 @@ struct _MetaInputSettingsClass
|
||||||
|
GDesktopStylusButtonAction primary,
|
||||||
|
GDesktopStylusButtonAction secondary,
|
||||||
|
GDesktopStylusButtonAction tertiary);
|
||||||
|
+
|
||||||
|
+ void (* set_mouse_middle_click_emulation) (MetaInputSettings *settings,
|
||||||
|
+ ClutterInputDevice *device,
|
||||||
|
+ gboolean enabled);
|
||||||
|
+ void (* set_touchpad_middle_click_emulation) (MetaInputSettings *settings,
|
||||||
|
+ ClutterInputDevice *device,
|
||||||
|
+ gboolean enabled);
|
||||||
|
+ void (* set_trackball_middle_click_emulation) (MetaInputSettings *settings,
|
||||||
|
+ ClutterInputDevice *device,
|
||||||
|
+ gboolean enabled);
|
||||||
|
+
|
||||||
|
gboolean (* has_two_finger_scroll) (MetaInputSettings *settings,
|
||||||
|
ClutterInputDevice *device);
|
||||||
|
gboolean (* is_trackball_device) (MetaInputSettings *settings,
|
||||||
|
diff --git a/src/backends/meta-input-settings.c b/src/backends/meta-input-settings.c
|
||||||
|
index 08762ac72..67dfd82b2 100644
|
||||||
|
--- a/src/backends/meta-input-settings.c
|
||||||
|
+++ b/src/backends/meta-input-settings.c
|
||||||
|
@@ -418,6 +418,39 @@ get_settings_for_device_type (MetaInputSettings *input_settings,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+update_middle_click_emulation (MetaInputSettings *input_settings,
|
||||||
|
+ GSettings *settings,
|
||||||
|
+ ClutterInputDevice *device)
|
||||||
|
+{
|
||||||
|
+ ConfigBoolFunc func;
|
||||||
|
+ const gchar *key = "emulate-middle";
|
||||||
|
+ MetaInputSettingsPrivate *priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
|
+
|
||||||
|
+ if (!settings)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ if (settings == priv->mouse_settings)
|
||||||
|
+ func = META_INPUT_SETTINGS_GET_CLASS (input_settings)->set_mouse_middle_click_emulation;
|
||||||
|
+ else if (settings == priv->touchpad_settings)
|
||||||
|
+ func = META_INPUT_SETTINGS_GET_CLASS (input_settings)->set_touchpad_middle_click_emulation;
|
||||||
|
+ else if (settings == priv->trackball_settings)
|
||||||
|
+ func = META_INPUT_SETTINGS_GET_CLASS (input_settings)->set_trackball_middle_click_emulation;
|
||||||
|
+ else
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ if (device)
|
||||||
|
+ {
|
||||||
|
+ settings_device_set_bool_setting (input_settings, device, func,
|
||||||
|
+ g_settings_get_boolean (settings, key));
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_POINTER_DEVICE, func,
|
||||||
|
+ g_settings_get_boolean (settings, key));
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
update_device_speed (MetaInputSettings *input_settings,
|
||||||
|
ClutterInputDevice *device)
|
||||||
|
@@ -1141,6 +1174,8 @@ meta_input_settings_changed_cb (GSettings *settings,
|
||||||
|
update_device_natural_scroll (input_settings, NULL);
|
||||||
|
else if (strcmp (key, "accel-profile") == 0)
|
||||||
|
update_pointer_accel_profile (input_settings, settings, NULL);
|
||||||
|
+ else if (strcmp (key, "middle-click-emulation") == 0)
|
||||||
|
+ update_middle_click_emulation (input_settings, settings, NULL);
|
||||||
|
}
|
||||||
|
else if (settings == priv->touchpad_settings)
|
||||||
|
{
|
||||||
|
@@ -1164,6 +1199,8 @@ meta_input_settings_changed_cb (GSettings *settings,
|
||||||
|
update_touchpad_two_finger_scroll (input_settings, NULL);
|
||||||
|
else if (strcmp (key, "click-method") == 0)
|
||||||
|
update_touchpad_click_method (input_settings, NULL);
|
||||||
|
+ else if (strcmp (key, "middle-click-emulation") == 0)
|
||||||
|
+ update_middle_click_emulation (input_settings, settings, NULL);
|
||||||
|
}
|
||||||
|
else if (settings == priv->trackball_settings)
|
||||||
|
{
|
||||||
|
@@ -1171,6 +1208,8 @@ meta_input_settings_changed_cb (GSettings *settings,
|
||||||
|
update_trackball_scroll_button (input_settings, NULL);
|
||||||
|
else if (strcmp (key, "accel-profile") == 0)
|
||||||
|
update_pointer_accel_profile (input_settings, settings, NULL);
|
||||||
|
+ else if (strcmp (key, "middle-click-emulation") == 0)
|
||||||
|
+ update_middle_click_emulation (input_settings, settings, NULL);
|
||||||
|
}
|
||||||
|
else if (settings == priv->keyboard_settings)
|
||||||
|
{
|
||||||
|
@@ -1687,6 +1726,10 @@ apply_device_settings (MetaInputSettings *input_settings,
|
||||||
|
device);
|
||||||
|
load_keyboard_a11y_settings (input_settings, device);
|
||||||
|
load_pointer_a11y_settings (input_settings, device);
|
||||||
|
+
|
||||||
|
+ update_middle_click_emulation (input_settings, priv->mouse_settings, device);
|
||||||
|
+ update_middle_click_emulation (input_settings, priv->touchpad_settings, device);
|
||||||
|
+ update_middle_click_emulation (input_settings, priv->trackball_settings, device);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
diff --git a/src/backends/native/meta-input-settings-native.c b/src/backends/native/meta-input-settings-native.c
|
||||||
|
index eb06911bf..fe82e8d1f 100644
|
||||||
|
--- a/src/backends/native/meta-input-settings-native.c
|
||||||
|
+++ b/src/backends/native/meta-input-settings-native.c
|
||||||
|
@@ -400,6 +400,13 @@ is_mouse_device (ClutterInputDevice *device)
|
||||||
|
!has_udev_property (device, "ID_INPUT_POINTINGSTICK"));
|
||||||
|
}
|
||||||
|
|
||||||
|
+static gboolean
|
||||||
|
+meta_input_settings_native_is_touchpad_device (MetaInputSettings *settings,
|
||||||
|
+ ClutterInputDevice *device)
|
||||||
|
+{
|
||||||
|
+ return has_udev_property (device, "ID_INPUT_TOUCHPAD");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static gboolean
|
||||||
|
meta_input_settings_native_is_trackball_device (MetaInputSettings *settings,
|
||||||
|
ClutterInputDevice *device)
|
||||||
|
@@ -562,6 +569,60 @@ meta_input_settings_native_set_stylus_button_map (MetaInputSettings *se
|
||||||
|
action_to_evcode (tertiary));
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+meta_input_settings_native_set_mouse_middle_click_emulation (MetaInputSettings *settings,
|
||||||
|
+ ClutterInputDevice *device,
|
||||||
|
+ gboolean enabled)
|
||||||
|
+{
|
||||||
|
+ struct libinput_device *libinput_device;
|
||||||
|
+
|
||||||
|
+ if (!is_mouse_device (device))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ libinput_device = meta_input_device_native_get_libinput_device (device);
|
||||||
|
+ if (!libinput_device)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ if (libinput_device_config_middle_emulation_is_available (libinput_device))
|
||||||
|
+ libinput_device_config_middle_emulation_set_enabled (libinput_device, enabled);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+meta_input_settings_native_set_touchpad_middle_click_emulation (MetaInputSettings *settings,
|
||||||
|
+ ClutterInputDevice *device,
|
||||||
|
+ gboolean enabled)
|
||||||
|
+{
|
||||||
|
+ struct libinput_device *libinput_device;
|
||||||
|
+
|
||||||
|
+ if (!meta_input_settings_native_is_touchpad_device (settings, device))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ libinput_device = meta_input_device_native_get_libinput_device (device);
|
||||||
|
+ if (!libinput_device)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ if (libinput_device_config_middle_emulation_is_available (libinput_device))
|
||||||
|
+ libinput_device_config_middle_emulation_set_enabled (libinput_device, enabled);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+meta_input_settings_native_set_trackball_middle_click_emulation (MetaInputSettings *settings,
|
||||||
|
+ ClutterInputDevice *device,
|
||||||
|
+ gboolean enabled)
|
||||||
|
+{
|
||||||
|
+ struct libinput_device *libinput_device;
|
||||||
|
+
|
||||||
|
+ if (!meta_input_settings_native_is_trackball_device (settings, device))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ libinput_device = meta_input_device_native_get_libinput_device (device);
|
||||||
|
+ if (!libinput_device)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ if (libinput_device_config_middle_emulation_is_available (libinput_device))
|
||||||
|
+ libinput_device_config_middle_emulation_set_enabled (libinput_device, enabled);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
meta_input_settings_native_class_init (MetaInputSettingsNativeClass *klass)
|
||||||
|
{
|
||||||
|
@@ -591,6 +652,10 @@ meta_input_settings_native_class_init (MetaInputSettingsNativeClass *klass)
|
||||||
|
input_settings_class->set_stylus_pressure = meta_input_settings_native_set_stylus_pressure;
|
||||||
|
input_settings_class->set_stylus_button_map = meta_input_settings_native_set_stylus_button_map;
|
||||||
|
|
||||||
|
+ input_settings_class->set_mouse_middle_click_emulation = meta_input_settings_native_set_mouse_middle_click_emulation;
|
||||||
|
+ input_settings_class->set_touchpad_middle_click_emulation = meta_input_settings_native_set_touchpad_middle_click_emulation;
|
||||||
|
+ input_settings_class->set_trackball_middle_click_emulation = meta_input_settings_native_set_trackball_middle_click_emulation;
|
||||||
|
+
|
||||||
|
input_settings_class->has_two_finger_scroll = meta_input_settings_native_has_two_finger_scroll;
|
||||||
|
input_settings_class->is_trackball_device = meta_input_settings_native_is_trackball_device;
|
||||||
|
}
|
||||||
|
diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
|
||||||
|
index 05f932420..a9658e702 100644
|
||||||
|
--- a/src/backends/x11/meta-input-settings-x11.c
|
||||||
|
+++ b/src/backends/x11/meta-input-settings-x11.c
|
||||||
|
@@ -512,6 +512,13 @@ is_mouse (MetaInputSettings *settings,
|
||||||
|
!has_udev_property (settings, device, "ID_INPUT_POINTINGSTICK"));
|
||||||
|
}
|
||||||
|
|
||||||
|
+static gboolean
|
||||||
|
+meta_input_settings_x11_is_touchpad_device (MetaInputSettings *settings,
|
||||||
|
+ ClutterInputDevice *device)
|
||||||
|
+{
|
||||||
|
+ return has_udev_property (settings, device, "ID_INPUT_TOUCHPAD");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static gboolean
|
||||||
|
meta_input_settings_x11_is_trackball_device (MetaInputSettings *settings,
|
||||||
|
ClutterInputDevice *device)
|
||||||
|
@@ -820,6 +827,48 @@ meta_input_settings_x11_set_stylus_button_map (MetaInputSettings *setti
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+meta_input_settings_x11_set_mouse_middle_click_emulation (MetaInputSettings *settings,
|
||||||
|
+ ClutterInputDevice *device,
|
||||||
|
+ gboolean enabled)
|
||||||
|
+{
|
||||||
|
+ guchar value = enabled ? 1 : 0;
|
||||||
|
+
|
||||||
|
+ if (!is_mouse (settings, device))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ change_property (device, "libinput Middle Click Emulation Enabled",
|
||||||
|
+ XA_INTEGER, 8, &value, 1);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+meta_input_settings_x11_set_touchpad_middle_click_emulation (MetaInputSettings *settings,
|
||||||
|
+ ClutterInputDevice *device,
|
||||||
|
+ gboolean enabled)
|
||||||
|
+{
|
||||||
|
+ guchar value = enabled ? 1 : 0;
|
||||||
|
+
|
||||||
|
+ if (!meta_input_settings_x11_is_touchpad_device (settings, device))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ change_property (device, "libinput Middle Click Emulation Enabled",
|
||||||
|
+ XA_INTEGER, 8, &value, 1);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+meta_input_settings_x11_set_trackball_middle_click_emulation (MetaInputSettings *settings,
|
||||||
|
+ ClutterInputDevice *device,
|
||||||
|
+ gboolean enabled)
|
||||||
|
+{
|
||||||
|
+ guchar value = enabled ? 1 : 0;
|
||||||
|
+
|
||||||
|
+ if (!meta_input_settings_x11_is_trackball_device (settings, device))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ change_property (device, "libinput Middle Click Emulation Enabled",
|
||||||
|
+ XA_INTEGER, 8, &value, 1);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
meta_input_settings_x11_set_stylus_pressure (MetaInputSettings *settings,
|
||||||
|
ClutterInputDevice *device,
|
||||||
|
@@ -864,6 +913,10 @@ meta_input_settings_x11_class_init (MetaInputSettingsX11Class *klass)
|
||||||
|
input_settings_class->set_stylus_pressure = meta_input_settings_x11_set_stylus_pressure;
|
||||||
|
input_settings_class->set_stylus_button_map = meta_input_settings_x11_set_stylus_button_map;
|
||||||
|
|
||||||
|
+ input_settings_class->set_mouse_middle_click_emulation = meta_input_settings_x11_set_mouse_middle_click_emulation;
|
||||||
|
+ input_settings_class->set_touchpad_middle_click_emulation = meta_input_settings_x11_set_touchpad_middle_click_emulation;
|
||||||
|
+ input_settings_class->set_trackball_middle_click_emulation = meta_input_settings_x11_set_trackball_middle_click_emulation;
|
||||||
|
+
|
||||||
|
input_settings_class->has_two_finger_scroll = meta_input_settings_x11_has_two_finger_scroll;
|
||||||
|
input_settings_class->is_trackball_device = meta_input_settings_x11_is_trackball_device;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
26
0026-input-settings-x11-Fix-typo-in-has_udev_property.patch
Normal file
26
0026-input-settings-x11-Fix-typo-in-has_udev_property.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
From 0700f3749f7d469bd229866b1cd6b8acb7346f4c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andrew Gaul <andrew@gaul.org>
|
||||||
|
Date: Sun, 16 Jun 2019 16:57:50 -0700
|
||||||
|
Subject: [PATCH 26/48] input-settings/x11: Fix typo in has_udev_property
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/256
|
||||||
|
---
|
||||||
|
src/backends/x11/meta-input-settings-x11.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c
|
||||||
|
index a9658e702..40067770f 100644
|
||||||
|
--- a/src/backends/x11/meta-input-settings-x11.c
|
||||||
|
+++ b/src/backends/x11/meta-input-settings-x11.c
|
||||||
|
@@ -496,7 +496,7 @@ has_udev_property (MetaInputSettings *settings,
|
||||||
|
|
||||||
|
if (!warned_once)
|
||||||
|
{
|
||||||
|
- g_warning ("Failed to set acceleration profile: no udev support");
|
||||||
|
+ g_warning ("Failed to query property: no udev support");
|
||||||
|
warned_once = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
28
0027-input-settings-Specify-middle-click-emulation-key.patch
Normal file
28
0027-input-settings-Specify-middle-click-emulation-key.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From 074f4974ddc6bf8d05914bded058fd131a3fdc8a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daniel van Vugt <daniel.van.vugt@canonical.com>
|
||||||
|
Date: Mon, 16 Mar 2020 15:09:00 +0800
|
||||||
|
Subject: [PATCH 27/48] input-settings: Specify middle-click-emulation key
|
||||||
|
|
||||||
|
Which exists, unlike `emulate-middle`.
|
||||||
|
|
||||||
|
Closes: https://gitlab.gnome.org/GNOME/mutter/issues/1124
|
||||||
|
---
|
||||||
|
src/backends/meta-input-settings.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-input-settings.c b/src/backends/meta-input-settings.c
|
||||||
|
index 67dfd82b2..3bee36d41 100644
|
||||||
|
--- a/src/backends/meta-input-settings.c
|
||||||
|
+++ b/src/backends/meta-input-settings.c
|
||||||
|
@@ -424,7 +424,7 @@ update_middle_click_emulation (MetaInputSettings *input_settings,
|
||||||
|
ClutterInputDevice *device)
|
||||||
|
{
|
||||||
|
ConfigBoolFunc func;
|
||||||
|
- const gchar *key = "emulate-middle";
|
||||||
|
+ const gchar *key = "middle-click-emulation";
|
||||||
|
MetaInputSettingsPrivate *priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
|
|
||||||
|
if (!settings)
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
114
0028-cursor-renderer-native-Skip-hw-cursor-upload-if-we-c.patch
Normal file
114
0028-cursor-renderer-native-Skip-hw-cursor-upload-if-we-c.patch
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
From 4133b736321adf8559f1ac80e7e5b9b55dd4f187 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Mader <robert.mader@posteo.de>
|
||||||
|
Date: Sat, 14 Mar 2020 15:52:38 +0100
|
||||||
|
Subject: [PATCH 28/48] cursor-renderer/native: Skip hw cursor upload if we
|
||||||
|
can't use it
|
||||||
|
|
||||||
|
If the CRTCs the cursor is visible on do not share a common scale
|
||||||
|
and transform, we can't use the cursor hardware plane as we only have one.
|
||||||
|
We therefore fall back to software / gl cursor.
|
||||||
|
|
||||||
|
The check for that currently happens after we tried to upload the cursor image
|
||||||
|
to the hardware plane though.
|
||||||
|
This is made worse by the fact that in the scaling step, where we scale the
|
||||||
|
cursor image to the desired size, until now we expected a valid common scale -
|
||||||
|
otherwise scaling the image by an uninitialized float.
|
||||||
|
|
||||||
|
Make sure we bail out early during the scale/upload step if we don't have common
|
||||||
|
scales and transforms - to avoid that bug and save some unnecessary work.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1125
|
||||||
|
---
|
||||||
|
.../native/meta-cursor-renderer-native.c | 56 ++++++++++++-------
|
||||||
|
1 file changed, 36 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
|
||||||
|
index b400a8740..cda4262d3 100644
|
||||||
|
--- a/src/backends/native/meta-cursor-renderer-native.c
|
||||||
|
+++ b/src/backends/native/meta-cursor-renderer-native.c
|
||||||
|
@@ -1393,6 +1393,26 @@ realize_cursor_sprite_from_wl_buffer_for_gpu (MetaCursorRenderer *renderer,
|
||||||
|
MetaMonitorTransform relative_transform;
|
||||||
|
uint32_t gbm_format;
|
||||||
|
|
||||||
|
+ if (!get_common_crtc_sprite_scale_for_logical_monitors (renderer,
|
||||||
|
+ cursor_sprite,
|
||||||
|
+ &relative_scale))
|
||||||
|
+ {
|
||||||
|
+ unset_can_preprocess (cursor_sprite);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!get_common_crtc_sprite_transform_for_logical_monitors (renderer,
|
||||||
|
+ cursor_sprite,
|
||||||
|
+ &relative_transform))
|
||||||
|
+ {
|
||||||
|
+ unset_can_preprocess (cursor_sprite);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ set_can_preprocess (cursor_sprite,
|
||||||
|
+ relative_scale,
|
||||||
|
+ relative_transform);
|
||||||
|
+
|
||||||
|
wl_shm_buffer_begin_access (shm_buffer);
|
||||||
|
buffer_data = wl_shm_buffer_get_data (shm_buffer);
|
||||||
|
|
||||||
|
@@ -1412,18 +1432,6 @@ realize_cursor_sprite_from_wl_buffer_for_gpu (MetaCursorRenderer *renderer,
|
||||||
|
gbm_format = GBM_FORMAT_ARGB8888;
|
||||||
|
}
|
||||||
|
|
||||||
|
- get_common_crtc_sprite_scale_for_logical_monitors (renderer,
|
||||||
|
- cursor_sprite,
|
||||||
|
- &relative_scale);
|
||||||
|
-
|
||||||
|
- get_common_crtc_sprite_transform_for_logical_monitors (renderer,
|
||||||
|
- cursor_sprite,
|
||||||
|
- &relative_transform);
|
||||||
|
-
|
||||||
|
- set_can_preprocess (cursor_sprite,
|
||||||
|
- relative_scale,
|
||||||
|
- relative_transform);
|
||||||
|
-
|
||||||
|
load_scaled_and_transformed_cursor_sprite (native,
|
||||||
|
gpu_kms,
|
||||||
|
cursor_sprite,
|
||||||
|
@@ -1502,20 +1510,28 @@ realize_cursor_sprite_from_xcursor_for_gpu (MetaCursorRenderer *renderer,
|
||||||
|
is_cursor_scale_and_transform_valid (renderer, cursor_sprite))
|
||||||
|
return;
|
||||||
|
|
||||||
|
- xc_image = meta_cursor_sprite_xcursor_get_current_image (sprite_xcursor);
|
||||||
|
-
|
||||||
|
- get_common_crtc_sprite_scale_for_logical_monitors (renderer,
|
||||||
|
- cursor_sprite,
|
||||||
|
- &relative_scale);
|
||||||
|
+ if (!get_common_crtc_sprite_scale_for_logical_monitors (renderer,
|
||||||
|
+ cursor_sprite,
|
||||||
|
+ &relative_scale))
|
||||||
|
+ {
|
||||||
|
+ unset_can_preprocess (cursor_sprite);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- get_common_crtc_sprite_transform_for_logical_monitors (renderer,
|
||||||
|
- cursor_sprite,
|
||||||
|
- &relative_transform);
|
||||||
|
+ if (!get_common_crtc_sprite_transform_for_logical_monitors (renderer,
|
||||||
|
+ cursor_sprite,
|
||||||
|
+ &relative_transform))
|
||||||
|
+ {
|
||||||
|
+ unset_can_preprocess (cursor_sprite);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
set_can_preprocess (cursor_sprite,
|
||||||
|
relative_scale,
|
||||||
|
relative_transform);
|
||||||
|
|
||||||
|
+ xc_image = meta_cursor_sprite_xcursor_get_current_image (sprite_xcursor);
|
||||||
|
+
|
||||||
|
load_scaled_and_transformed_cursor_sprite (native,
|
||||||
|
gpu_kms,
|
||||||
|
cursor_sprite,
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
62
0029-cogl-texture-Add-some-missing-array-annotations.patch
Normal file
62
0029-cogl-texture-Add-some-missing-array-annotations.patch
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
From 0053ef2e1633cf6f1be249a7b9fa83a35e8664f9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Corentin=20No=C3=ABl?= <corentin@elementary.io>
|
||||||
|
Date: Tue, 17 Mar 2020 13:21:11 +0100
|
||||||
|
Subject: [PATCH 29/48] cogl-texture: Add some missing array annotations
|
||||||
|
|
||||||
|
This allows bindings to correctly understand that it is an array
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1130
|
||||||
|
---
|
||||||
|
cogl/cogl/cogl-texture.h | 8 ++++----
|
||||||
|
cogl/cogl/deprecated/cogl-auto-texture.h | 2 +-
|
||||||
|
2 files changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cogl/cogl/cogl-texture.h b/cogl/cogl/cogl-texture.h
|
||||||
|
index 924912d02..d9727dbbe 100644
|
||||||
|
--- a/cogl/cogl/cogl-texture.h
|
||||||
|
+++ b/cogl/cogl/cogl-texture.h
|
||||||
|
@@ -320,8 +320,8 @@ cogl_texture_get_gl_texture (CoglTexture *texture,
|
||||||
|
* @rowstride: the rowstride of @data in bytes or pass 0 to calculate
|
||||||
|
* from the bytes-per-pixel of @format multiplied by the
|
||||||
|
* @texture width.
|
||||||
|
- * @data: memory location to write the @texture's contents, or %NULL
|
||||||
|
- * to only query the data size through the return value.
|
||||||
|
+ * @data: (array) (nullable): memory location to write the @texture's contents,
|
||||||
|
+ * or %NULL to only query the data size through the return value.
|
||||||
|
*
|
||||||
|
* Copies the pixel data from a cogl texture to system memory.
|
||||||
|
*
|
||||||
|
@@ -354,7 +354,7 @@ cogl_texture_get_data (CoglTexture *texture,
|
||||||
|
* @format: the #CoglPixelFormat used in the source buffer.
|
||||||
|
* @rowstride: rowstride of source buffer (computed from width if none
|
||||||
|
* specified)
|
||||||
|
- * @data: the actual pixel data.
|
||||||
|
+ * @data: (array): the actual pixel data.
|
||||||
|
*
|
||||||
|
* Sets the pixels in a rectangular subregion of @texture from an in-memory
|
||||||
|
* buffer containing pixel data.
|
||||||
|
@@ -384,7 +384,7 @@ cogl_texture_set_region (CoglTexture *texture,
|
||||||
|
* @format: the #CoglPixelFormat used in the source @data buffer.
|
||||||
|
* @rowstride: rowstride of the source @data buffer (computed from
|
||||||
|
* the texture width and @format if it equals 0)
|
||||||
|
- * @data: the source data, pointing to the first top-left pixel to set
|
||||||
|
+ * @data: (array): the source data, pointing to the first top-left pixel to set
|
||||||
|
* @level: The mipmap level to update (Normally 0 for the largest,
|
||||||
|
* base texture)
|
||||||
|
* @error: A #GError to return exceptional errors
|
||||||
|
diff --git a/cogl/cogl/deprecated/cogl-auto-texture.h b/cogl/cogl/deprecated/cogl-auto-texture.h
|
||||||
|
index df2b1da29..afd5cf98c 100644
|
||||||
|
--- a/cogl/cogl/deprecated/cogl-auto-texture.h
|
||||||
|
+++ b/cogl/cogl/deprecated/cogl-auto-texture.h
|
||||||
|
@@ -104,7 +104,7 @@ cogl_texture_new_from_file (const char *filename,
|
||||||
|
* something other than straight blending.
|
||||||
|
* @rowstride: the memory offset in bytes between the starts of
|
||||||
|
* scanlines in @data
|
||||||
|
- * @data: pointer the memory region where the source buffer resides
|
||||||
|
+ * @data: (array): pointer the memory region where the source buffer resides
|
||||||
|
*
|
||||||
|
* Creates a new #CoglTexture based on data residing in memory.
|
||||||
|
*
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
From b310e1d9d7c9e20de957c4ea1ff1d2b819aeb0a2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Corentin=20No=C3=ABl?= <corentin@elementary.io>
|
||||||
|
Date: Tue, 17 Mar 2020 13:37:49 +0100
|
||||||
|
Subject: [PATCH 30/48] clutter-stage: Add annotations to clutter_stage_capture
|
||||||
|
|
||||||
|
Especially document that out_captures is an array that is given as output.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1131
|
||||||
|
---
|
||||||
|
clutter/clutter/clutter-stage.c | 14 ++++++++++++++
|
||||||
|
1 file changed, 14 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
|
||||||
|
index 80061bba7..a5d73e63f 100644
|
||||||
|
--- a/clutter/clutter/clutter-stage.c
|
||||||
|
+++ b/clutter/clutter/clutter-stage.c
|
||||||
|
@@ -4349,6 +4349,20 @@ capture_view (ClutterStage *stage,
|
||||||
|
cairo_surface_mark_dirty (capture->image);
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * clutter_stage_capture:
|
||||||
|
+ * @stage: a #ClutterStage
|
||||||
|
+ * @paint: whether to pain the frame
|
||||||
|
+ * @rect: a #cairo_rectangle_int_t in stage coordinates
|
||||||
|
+ * @out_captures: (out) (array length=out_n_captures): an array of
|
||||||
|
+ * #ClutterCapture
|
||||||
|
+ * @out_n_captures: (out): the number of captures in @out_captures
|
||||||
|
+ *
|
||||||
|
+ * Captures the stage pixels of @rect into @captures. @rect is in stage
|
||||||
|
+ * coordinates.
|
||||||
|
+ *
|
||||||
|
+ * Returns: %TRUE if a #ClutterCapture has been created, %FALSE otherwise
|
||||||
|
+ */
|
||||||
|
gboolean
|
||||||
|
clutter_stage_capture (ClutterStage *stage,
|
||||||
|
gboolean paint,
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
52
0031-wayland-window-Ignore-state-changes-for-popups.patch
Normal file
52
0031-wayland-window-Ignore-state-changes-for-popups.patch
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
From fa74da0039b848e3beaff5d0da44e6d3f2c46dc9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Thu, 12 Mar 2020 19:34:03 +0100
|
||||||
|
Subject: [PATCH 31/48] wayland/window: Ignore state changes for popups
|
||||||
|
|
||||||
|
We send configure events for state changes e.g. for `appears-focused`,
|
||||||
|
etc. What we don't want to do is to do this for popup windows, as in
|
||||||
|
Wayland don't care about this state.
|
||||||
|
|
||||||
|
When the focus mode was configured to "sloppy focus" we'd get
|
||||||
|
`appears-focused` state changes for the popup window only by moving the
|
||||||
|
mouse cursor around, and while a popup may care about focus, it does not
|
||||||
|
care about related appearance, as there is no such state in xdg_popup.
|
||||||
|
|
||||||
|
What these state changes instead resulted in was absolute window
|
||||||
|
configuration events, intended for toplevel (xdg_toplevel) windows. In
|
||||||
|
the end this caused the popup to be positioned aginst at (0, 0) of the
|
||||||
|
parent window, as the assumptions when the configuration of the popup
|
||||||
|
was acknowledged is that it had received a relative position window
|
||||||
|
configuration.
|
||||||
|
|
||||||
|
Fix this by simply ignoring any state changes of the window if it is a
|
||||||
|
popup, meaning we won't send any configuration events intended for
|
||||||
|
toplevels for state changes. Currently we don't have any way to know
|
||||||
|
this other than checking whether it has a placement rule. Cleaning up
|
||||||
|
MetaWindow creation is left to be dealt with another day.
|
||||||
|
|
||||||
|
Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/1103
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1122
|
||||||
|
---
|
||||||
|
src/wayland/meta-window-wayland.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/wayland/meta-window-wayland.c b/src/wayland/meta-window-wayland.c
|
||||||
|
index 86cdbf86e..b6b949e36 100644
|
||||||
|
--- a/src/wayland/meta-window-wayland.c
|
||||||
|
+++ b/src/wayland/meta-window-wayland.c
|
||||||
|
@@ -634,6 +634,10 @@ appears_focused_changed (GObject *object,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
MetaWindow *window = META_WINDOW (object);
|
||||||
|
+
|
||||||
|
+ if (window->placement.rule)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
surface_state_changed (window);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -1,7 +1,8 @@
|
|||||||
From db9b60cc6357539d0deefd9ded236b1dd302d4a2 Mon Sep 17 00:00:00 2001
|
From db9b60cc6357539d0deefd9ded236b1dd302d4a2 Mon Sep 17 00:00:00 2001
|
||||||
From: Carlos Garnacho <carlosg@gnome.org>
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
Date: Tue, 17 Mar 2020 16:11:57 +0100
|
Date: Tue, 17 Mar 2020 16:11:57 +0100
|
||||||
Subject: [PATCH] wayland: Represent preedit string cursor offset in bytes
|
Subject: [PATCH 32/48] wayland: Represent preedit string cursor offset in
|
||||||
|
bytes
|
||||||
|
|
||||||
Both IBus and ClutterInputFocus work in character offsets for the cursor
|
Both IBus and ClutterInputFocus work in character offsets for the cursor
|
||||||
position in the preedit string. However the zwp_text_input protocol does
|
position in the preedit string. However the zwp_text_input protocol does
|
||||||
@ -38,5 +39,5 @@ index ee9b895cb..deff44c1b 100644
|
|||||||
|
|
||||||
meta_wayland_text_input_focus_defer_done (focus);
|
meta_wayland_text_input_focus_defer_done (focus);
|
||||||
--
|
--
|
||||||
2.25.1
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
From c9a5b2b22f4bbe53bae2008ffa12b7376ca68b01 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Fri, 17 Jan 2020 08:28:17 +0100
|
||||||
|
Subject: [PATCH 33/48] kms-impl-simple: Handle lack of cached mode set in flip
|
||||||
|
fallback
|
||||||
|
|
||||||
|
When a page flip fails with a certain error code, we've treated this as
|
||||||
|
a hint that page flipping is broken and we should try to use mode
|
||||||
|
setting instead.
|
||||||
|
|
||||||
|
On some drivers, it seems that this error is also reported when there
|
||||||
|
was no mode set, which means we'll have no cached mode set to use in the
|
||||||
|
fallback. The lack of prior mode set tends to happen when we hit a race
|
||||||
|
when the DRM objects change before we have the time to process a hotplug
|
||||||
|
event.
|
||||||
|
|
||||||
|
Handle the lack a missing mode set in the flip fallback path, with the
|
||||||
|
assumption that we'll get a hotplug event that'll fix things up for us
|
||||||
|
eventually.
|
||||||
|
|
||||||
|
Closes: https://gitlab.gnome.org/GNOME/mutter/issues/917
|
||||||
|
---
|
||||||
|
src/backends/native/meta-kms-impl-simple.c | 7 ++++++-
|
||||||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-kms-impl-simple.c b/src/backends/native/meta-kms-impl-simple.c
|
||||||
|
index 1bb84538c..ddc31b938 100644
|
||||||
|
--- a/src/backends/native/meta-kms-impl-simple.c
|
||||||
|
+++ b/src/backends/native/meta-kms-impl-simple.c
|
||||||
|
@@ -567,7 +567,12 @@ mode_set_fallback (MetaKmsImplSimple *impl_simple,
|
||||||
|
|
||||||
|
cached_mode_set = g_hash_table_lookup (impl_simple->cached_mode_sets,
|
||||||
|
crtc);
|
||||||
|
- g_assert (cached_mode_set);
|
||||||
|
+ if (!cached_mode_set)
|
||||||
|
+ {
|
||||||
|
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||||
|
+ "Missing mode set for page flip fallback");
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
fill_connector_ids_array (cached_mode_set->connectors,
|
||||||
|
&connectors,
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
172
0034-monitor-manager-Remove-mirror-capability.patch
Normal file
172
0034-monitor-manager-Remove-mirror-capability.patch
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
From 0a6034ef3a745c25ab63c2ca8d4ae08bc5e09d88 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Fri, 28 Feb 2020 11:09:46 +0100
|
||||||
|
Subject: [PATCH 34/48] monitor-manager: Remove 'mirror' capability
|
||||||
|
|
||||||
|
With per-CRTC views, there is nothing stopping NVIDA EGLStream based
|
||||||
|
rendering to not support monitor mirroring, so lets remove that
|
||||||
|
restriction.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1098
|
||||||
|
---
|
||||||
|
src/backends/meta-monitor-manager-dummy.c | 2 --
|
||||||
|
src/backends/meta-monitor-manager-private.h | 5 ++--
|
||||||
|
src/backends/meta-monitor-manager.c | 6 ----
|
||||||
|
.../native/meta-monitor-manager-kms.c | 5 ----
|
||||||
|
src/backends/native/meta-renderer-native.c | 28 -------------------
|
||||||
|
src/backends/native/meta-renderer-native.h | 2 --
|
||||||
|
.../x11/meta-monitor-manager-xrandr.c | 3 +-
|
||||||
|
src/tests/meta-monitor-manager-test.c | 2 --
|
||||||
|
8 files changed, 3 insertions(+), 50 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-monitor-manager-dummy.c b/src/backends/meta-monitor-manager-dummy.c
|
||||||
|
index 470c327e5..2ddd826a8 100644
|
||||||
|
--- a/src/backends/meta-monitor-manager-dummy.c
|
||||||
|
+++ b/src/backends/meta-monitor-manager-dummy.c
|
||||||
|
@@ -714,8 +714,6 @@ meta_monitor_manager_dummy_get_capabilities (MetaMonitorManager *manager)
|
||||||
|
MetaMonitorManagerCapability capabilities =
|
||||||
|
META_MONITOR_MANAGER_CAPABILITY_NONE;
|
||||||
|
|
||||||
|
- capabilities |= META_MONITOR_MANAGER_CAPABILITY_MIRRORING;
|
||||||
|
-
|
||||||
|
if (meta_settings_is_experimental_feature_enabled (
|
||||||
|
settings,
|
||||||
|
META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER))
|
||||||
|
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
|
||||||
|
index 4dd0364a8..a0a28b6c2 100644
|
||||||
|
--- a/src/backends/meta-monitor-manager-private.h
|
||||||
|
+++ b/src/backends/meta-monitor-manager-private.h
|
||||||
|
@@ -43,9 +43,8 @@
|
||||||
|
typedef enum _MetaMonitorManagerCapability
|
||||||
|
{
|
||||||
|
META_MONITOR_MANAGER_CAPABILITY_NONE = 0,
|
||||||
|
- META_MONITOR_MANAGER_CAPABILITY_MIRRORING = (1 << 0),
|
||||||
|
- META_MONITOR_MANAGER_CAPABILITY_LAYOUT_MODE = (1 << 1),
|
||||||
|
- META_MONITOR_MANAGER_CAPABILITY_GLOBAL_SCALE_REQUIRED = (1 << 2)
|
||||||
|
+ META_MONITOR_MANAGER_CAPABILITY_LAYOUT_MODE = (1 << 0),
|
||||||
|
+ META_MONITOR_MANAGER_CAPABILITY_GLOBAL_SCALE_REQUIRED = (1 << 1)
|
||||||
|
} MetaMonitorManagerCapability;
|
||||||
|
|
||||||
|
/* Equivalent to the 'method' enum in org.gnome.Mutter.DisplayConfig */
|
||||||
|
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
|
||||||
|
index b94967d79..3505573b8 100644
|
||||||
|
--- a/src/backends/meta-monitor-manager.c
|
||||||
|
+++ b/src/backends/meta-monitor-manager.c
|
||||||
|
@@ -1446,12 +1446,6 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
|
||||||
|
|
||||||
|
g_variant_builder_init (&properties_builder, G_VARIANT_TYPE ("a{sv}"));
|
||||||
|
capabilities = meta_monitor_manager_get_capabilities (manager);
|
||||||
|
- if ((capabilities & META_MONITOR_MANAGER_CAPABILITY_MIRRORING) == 0)
|
||||||
|
- {
|
||||||
|
- g_variant_builder_add (&properties_builder, "{sv}",
|
||||||
|
- "supports-mirroring",
|
||||||
|
- g_variant_new_boolean (FALSE));
|
||||||
|
- }
|
||||||
|
|
||||||
|
g_variant_builder_add (&properties_builder, "{sv}",
|
||||||
|
"layout-mode",
|
||||||
|
diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
|
||||||
|
index b7da048e2..6dcba6442 100644
|
||||||
|
--- a/src/backends/native/meta-monitor-manager-kms.c
|
||||||
|
+++ b/src/backends/native/meta-monitor-manager-kms.c
|
||||||
|
@@ -547,8 +547,6 @@ meta_monitor_manager_kms_get_capabilities (MetaMonitorManager *manager)
|
||||||
|
{
|
||||||
|
MetaBackend *backend = meta_monitor_manager_get_backend (manager);
|
||||||
|
MetaSettings *settings = meta_backend_get_settings (backend);
|
||||||
|
- MetaRenderer *renderer = meta_backend_get_renderer (backend);
|
||||||
|
- MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer);
|
||||||
|
MetaMonitorManagerCapability capabilities =
|
||||||
|
META_MONITOR_MANAGER_CAPABILITY_NONE;
|
||||||
|
|
||||||
|
@@ -557,9 +555,6 @@ meta_monitor_manager_kms_get_capabilities (MetaMonitorManager *manager)
|
||||||
|
META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER))
|
||||||
|
capabilities |= META_MONITOR_MANAGER_CAPABILITY_LAYOUT_MODE;
|
||||||
|
|
||||||
|
- if (meta_renderer_native_supports_mirroring (renderer_native))
|
||||||
|
- capabilities |= META_MONITOR_MANAGER_CAPABILITY_MIRRORING;
|
||||||
|
-
|
||||||
|
return capabilities;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
|
||||||
|
index 6d9243716..1ebc761eb 100644
|
||||||
|
--- a/src/backends/native/meta-renderer-native.c
|
||||||
|
+++ b/src/backends/native/meta-renderer-native.c
|
||||||
|
@@ -2793,34 +2793,6 @@ _cogl_winsys_egl_vtable = {
|
||||||
|
.context_init = meta_renderer_native_init_egl_context
|
||||||
|
};
|
||||||
|
|
||||||
|
-gboolean
|
||||||
|
-meta_renderer_native_supports_mirroring (MetaRendererNative *renderer_native)
|
||||||
|
-{
|
||||||
|
- MetaRenderer *renderer = META_RENDERER (renderer_native);
|
||||||
|
- MetaBackend *backend = meta_renderer_get_backend (renderer);
|
||||||
|
- GList *l;
|
||||||
|
-
|
||||||
|
- for (l = meta_backend_get_gpus (backend); l; l = l->next)
|
||||||
|
- {
|
||||||
|
- MetaGpuKms *gpu_kms = META_GPU_KMS (l->data);
|
||||||
|
- MetaRendererNativeGpuData *renderer_gpu_data;
|
||||||
|
-
|
||||||
|
- renderer_gpu_data = meta_renderer_native_get_gpu_data (renderer_native,
|
||||||
|
- gpu_kms);
|
||||||
|
- switch (renderer_gpu_data->mode)
|
||||||
|
- {
|
||||||
|
- case META_RENDERER_NATIVE_MODE_GBM:
|
||||||
|
- break;
|
||||||
|
-#ifdef HAVE_EGL_DEVICE
|
||||||
|
- case META_RENDERER_NATIVE_MODE_EGL_DEVICE:
|
||||||
|
- return FALSE;
|
||||||
|
-#endif
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- return TRUE;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
static void
|
||||||
|
meta_renderer_native_queue_modes_reset (MetaRendererNative *renderer_native)
|
||||||
|
{
|
||||||
|
diff --git a/src/backends/native/meta-renderer-native.h b/src/backends/native/meta-renderer-native.h
|
||||||
|
index 650968c57..7abe7c152 100644
|
||||||
|
--- a/src/backends/native/meta-renderer-native.h
|
||||||
|
+++ b/src/backends/native/meta-renderer-native.h
|
||||||
|
@@ -51,8 +51,6 @@ MetaRendererNative * meta_renderer_native_new (MetaBackendNative *backend_nativ
|
||||||
|
|
||||||
|
struct gbm_device * meta_gbm_device_from_gpu (MetaGpuKms *gpu_kms);
|
||||||
|
|
||||||
|
-gboolean meta_renderer_native_supports_mirroring (MetaRendererNative *renderer_native);
|
||||||
|
-
|
||||||
|
void meta_renderer_native_finish_frame (MetaRendererNative *renderer_native);
|
||||||
|
|
||||||
|
int64_t meta_renderer_native_get_frame_counter (MetaRendererNative *renderer_native);
|
||||||
|
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
|
||||||
|
index fd105c07a..5c161896f 100644
|
||||||
|
--- a/src/backends/x11/meta-monitor-manager-xrandr.c
|
||||||
|
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c
|
||||||
|
@@ -959,8 +959,7 @@ meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager
|
||||||
|
static MetaMonitorManagerCapability
|
||||||
|
meta_monitor_manager_xrandr_get_capabilities (MetaMonitorManager *manager)
|
||||||
|
{
|
||||||
|
- return (META_MONITOR_MANAGER_CAPABILITY_MIRRORING |
|
||||||
|
- META_MONITOR_MANAGER_CAPABILITY_GLOBAL_SCALE_REQUIRED);
|
||||||
|
+ return META_MONITOR_MANAGER_CAPABILITY_GLOBAL_SCALE_REQUIRED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
diff --git a/src/tests/meta-monitor-manager-test.c b/src/tests/meta-monitor-manager-test.c
|
||||||
|
index 49ef6494d..42a57608e 100644
|
||||||
|
--- a/src/tests/meta-monitor-manager-test.c
|
||||||
|
+++ b/src/tests/meta-monitor-manager-test.c
|
||||||
|
@@ -371,8 +371,6 @@ meta_monitor_manager_test_get_capabilities (MetaMonitorManager *manager)
|
||||||
|
MetaMonitorManagerCapability capabilities =
|
||||||
|
META_MONITOR_MANAGER_CAPABILITY_NONE;
|
||||||
|
|
||||||
|
- capabilities |= META_MONITOR_MANAGER_CAPABILITY_MIRRORING;
|
||||||
|
-
|
||||||
|
if (is_monitor_framebuffer_scaled ())
|
||||||
|
capabilities |= META_MONITOR_MANAGER_CAPABILITY_LAYOUT_MODE;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From ed4b80cee59c5dc96912b9d3d594b066c6275aeb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Mader <robert.mader@posteo.de>
|
||||||
|
Date: Wed, 18 Mar 2020 02:43:47 +0100
|
||||||
|
Subject: [PATCH 35/48] clutter/stage: Rename parameters to match documentation
|
||||||
|
|
||||||
|
To silence warnings during GIR generation.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1133
|
||||||
|
---
|
||||||
|
clutter/clutter/clutter-stage.h | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/clutter/clutter/clutter-stage.h b/clutter/clutter/clutter-stage.h
|
||||||
|
index f60bb3a8c..19de749b9 100644
|
||||||
|
--- a/clutter/clutter/clutter-stage.h
|
||||||
|
+++ b/clutter/clutter/clutter-stage.h
|
||||||
|
@@ -233,8 +233,8 @@ CLUTTER_EXPORT
|
||||||
|
gboolean clutter_stage_capture (ClutterStage *stage,
|
||||||
|
gboolean paint,
|
||||||
|
cairo_rectangle_int_t *rect,
|
||||||
|
- ClutterCapture **captures,
|
||||||
|
- int *n_captures);
|
||||||
|
+ ClutterCapture **out_captures,
|
||||||
|
+ int *out_n_captures);
|
||||||
|
CLUTTER_EXPORT
|
||||||
|
ClutterStageView * clutter_stage_get_view_at (ClutterStage *stage,
|
||||||
|
float x,
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
226
0036-Update-Romanian-translation.patch
Normal file
226
0036-Update-Romanian-translation.patch
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
From a13d60aae5e60abc531bf8b70700db1d8ba88f65 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Daniel=20=C8=98erb=C4=83nescu?= <daniel@serbanescu.dk>
|
||||||
|
Date: Thu, 19 Mar 2020 10:59:57 +0000
|
||||||
|
Subject: [PATCH 36/48] Update Romanian translation
|
||||||
|
|
||||||
|
---
|
||||||
|
po/ro.po | 78 ++++++++++++++++++++++++++++++++------------------------
|
||||||
|
1 file changed, 45 insertions(+), 33 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/po/ro.po b/po/ro.po
|
||||||
|
index fdd5fe654..7803c092a 100644
|
||||||
|
--- a/po/ro.po
|
||||||
|
+++ b/po/ro.po
|
||||||
|
@@ -9,10 +9,9 @@ msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: metacity.HEAD.ro\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||||
|
-"POT-Creation-Date: 2019-08-06 00:49+0000\n"
|
||||||
|
-"PO-Revision-Date: 2019-08-18 14:25+0300\n"
|
||||||
|
-"Last-Translator: Florentina Mușat <florentina.musat.28 [at] gmail [dot] "
|
||||||
|
-"com>\n"
|
||||||
|
+"POT-Creation-Date: 2020-02-23 17:41+0000\n"
|
||||||
|
+"PO-Revision-Date: 2020-03-19 11:58+0100\n"
|
||||||
|
+"Last-Translator: Daniel Șerbănescu <daniel [at] serbanescu [dot] dk>\n"
|
||||||
|
"Language-Team: Gnome Romanian Translation Team <gnomero-list@lists."
|
||||||
|
"sourceforge.net>\n"
|
||||||
|
"Language: ro\n"
|
||||||
|
@@ -21,7 +20,7 @@ msgstr ""
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n==0 || (n!=1 && n%100>=1 && n"
|
||||||
|
"%100<=19) ? 1 : 2);\n"
|
||||||
|
-"X-Generator: Poedit 2.2.3\n"
|
||||||
|
+"X-Generator: Poedit 2.3\n"
|
||||||
|
"X-Project-Style: gnome\n"
|
||||||
|
"X-Poedit-SourceCharset: UTF-8\n"
|
||||||
|
|
||||||
|
@@ -433,19 +432,32 @@ msgstr "Modificator de utilizat pentru a localiza pointerul"
|
||||||
|
msgid "This key will initiate the “locate pointer” action."
|
||||||
|
msgstr "Această cheie va iniția acțiunea „localizează pointer”."
|
||||||
|
|
||||||
|
-#: data/org.gnome.mutter.gschema.xml.in:155
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:142
|
||||||
|
+msgid "Timeout for check-alive ping"
|
||||||
|
+msgstr "A expirat limita de timp pentru check-alive ping"
|
||||||
|
+
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:143
|
||||||
|
+msgid ""
|
||||||
|
+"Number of milliseconds a client has to respond to a ping request in order to "
|
||||||
|
+"not be detected as frozen. Using 0 will disable the alive check completely."
|
||||||
|
+msgstr ""
|
||||||
|
+"Număr de millisecunde în care un client trebuie să răspundă la o cerere de "
|
||||||
|
+"ping pentru a nu fi detectat ca înghețat. Utilizând 0 va dezactiva check-"
|
||||||
|
+"alive complet."
|
||||||
|
+
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:165
|
||||||
|
msgid "Select window from tab popup"
|
||||||
|
msgstr "Selectează fereastra din popup-ul tabului"
|
||||||
|
|
||||||
|
-#: data/org.gnome.mutter.gschema.xml.in:160
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:170
|
||||||
|
msgid "Cancel tab popup"
|
||||||
|
msgstr "Elimină popup-ul pentru tab"
|
||||||
|
|
||||||
|
-#: data/org.gnome.mutter.gschema.xml.in:165
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:175
|
||||||
|
msgid "Switch monitor configurations"
|
||||||
|
msgstr "Comută configurațiile de monitor"
|
||||||
|
|
||||||
|
-#: data/org.gnome.mutter.gschema.xml.in:170
|
||||||
|
+#: data/org.gnome.mutter.gschema.xml.in:180
|
||||||
|
msgid "Rotates the built-in monitor configuration"
|
||||||
|
msgstr "Rotește configurarea de monitor integrat"
|
||||||
|
|
||||||
|
@@ -561,7 +573,7 @@ msgstr ""
|
||||||
|
#. TRANSLATORS: This string refers to a button that switches between
|
||||||
|
#. * different modes.
|
||||||
|
#.
|
||||||
|
-#: src/backends/meta-input-settings.c:2531
|
||||||
|
+#: src/backends/meta-input-settings.c:2567
|
||||||
|
#, c-format
|
||||||
|
msgid "Mode Switch (Group %d)"
|
||||||
|
msgstr "Comutator de mod (grupul %d)"
|
||||||
|
@@ -569,11 +581,11 @@ msgstr "Comutator de mod (grupul %d)"
|
||||||
|
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||||
|
#. * mapping through the available outputs.
|
||||||
|
#.
|
||||||
|
-#: src/backends/meta-input-settings.c:2554
|
||||||
|
+#: src/backends/meta-input-settings.c:2590
|
||||||
|
msgid "Switch monitor"
|
||||||
|
msgstr "Comută monitorul"
|
||||||
|
|
||||||
|
-#: src/backends/meta-input-settings.c:2556
|
||||||
|
+#: src/backends/meta-input-settings.c:2592
|
||||||
|
msgid "Show on-screen help"
|
||||||
|
msgstr "Arată ajutorul virtual"
|
||||||
|
|
||||||
|
@@ -605,13 +617,13 @@ msgid "%s %s"
|
||||||
|
msgstr "%s %s"
|
||||||
|
|
||||||
|
#. Translators: this string will appear in Sysprof
|
||||||
|
-#: src/backends/meta-profiler.c:82
|
||||||
|
+#: src/backends/meta-profiler.c:79
|
||||||
|
msgid "Compositor"
|
||||||
|
msgstr "Compunător"
|
||||||
|
|
||||||
|
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||||
|
#. * we have no way to get it to exit
|
||||||
|
-#: src/compositor/compositor.c:510
|
||||||
|
+#: src/compositor/compositor.c:533
|
||||||
|
#, c-format
|
||||||
|
msgid ""
|
||||||
|
"Another compositing manager is already running on screen %i on display “%s”."
|
||||||
|
@@ -623,47 +635,47 @@ msgstr ""
|
||||||
|
msgid "Bell event"
|
||||||
|
msgstr "Eveniment sonor"
|
||||||
|
|
||||||
|
-#: src/core/main.c:185
|
||||||
|
+#: src/core/main.c:190
|
||||||
|
msgid "Disable connection to session manager"
|
||||||
|
msgstr "Dezactivează conexiunea la administratorul de sesiune"
|
||||||
|
|
||||||
|
-#: src/core/main.c:191
|
||||||
|
+#: src/core/main.c:196
|
||||||
|
msgid "Replace the running window manager"
|
||||||
|
msgstr "Înlocuiește administratorul de ferestre curent"
|
||||||
|
|
||||||
|
-#: src/core/main.c:197
|
||||||
|
+#: src/core/main.c:202
|
||||||
|
msgid "Specify session management ID"
|
||||||
|
msgstr "Specifică ID-ul administrării de sesiune"
|
||||||
|
|
||||||
|
-#: src/core/main.c:202
|
||||||
|
+#: src/core/main.c:207
|
||||||
|
msgid "X Display to use"
|
||||||
|
msgstr "Ecranul X ce va fi folosit"
|
||||||
|
|
||||||
|
-#: src/core/main.c:208
|
||||||
|
+#: src/core/main.c:213
|
||||||
|
msgid "Initialize session from savefile"
|
||||||
|
msgstr "Inițializează sesiunea din fișierul salvat"
|
||||||
|
|
||||||
|
-#: src/core/main.c:214
|
||||||
|
+#: src/core/main.c:219
|
||||||
|
msgid "Make X calls synchronous"
|
||||||
|
msgstr "Realizează apelurile X sincron"
|
||||||
|
|
||||||
|
-#: src/core/main.c:221
|
||||||
|
+#: src/core/main.c:226
|
||||||
|
msgid "Run as a wayland compositor"
|
||||||
|
msgstr "Rulează ca un compunător wayland"
|
||||||
|
|
||||||
|
-#: src/core/main.c:227
|
||||||
|
+#: src/core/main.c:232
|
||||||
|
msgid "Run as a nested compositor"
|
||||||
|
msgstr "Rulează ca un compunător imbricat"
|
||||||
|
|
||||||
|
-#: src/core/main.c:233
|
||||||
|
+#: src/core/main.c:238
|
||||||
|
msgid "Run wayland compositor without starting Xwayland"
|
||||||
|
msgstr "Rulează compunătorul wayland fără a porni Xwayland"
|
||||||
|
|
||||||
|
-#: src/core/main.c:241
|
||||||
|
+#: src/core/main.c:246
|
||||||
|
msgid "Run as a full display server, rather than nested"
|
||||||
|
msgstr "Rulează ca server de afișare și nu ca server imbricat"
|
||||||
|
|
||||||
|
-#: src/core/main.c:247
|
||||||
|
+#: src/core/main.c:252
|
||||||
|
msgid "Run with X11 backend"
|
||||||
|
msgstr "Rulează cu backend X11"
|
||||||
|
|
||||||
|
@@ -717,21 +729,21 @@ msgstr "Afișează versiunea"
|
||||||
|
msgid "Mutter plugin to use"
|
||||||
|
msgstr "Modul Mutter de utilizat"
|
||||||
|
|
||||||
|
-#: src/core/prefs.c:1849
|
||||||
|
+#: src/core/prefs.c:1911
|
||||||
|
#, c-format
|
||||||
|
msgid "Workspace %d"
|
||||||
|
msgstr "Spațiu de lucru %d"
|
||||||
|
|
||||||
|
-#: src/core/util.c:121
|
||||||
|
+#: src/core/util.c:122
|
||||||
|
msgid "Mutter was compiled without support for verbose mode\n"
|
||||||
|
msgstr "Mutter a fost compilat fără suport pentru modul detaliat\n"
|
||||||
|
|
||||||
|
-#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||||
|
+#: src/wayland/meta-wayland-tablet-pad.c:568
|
||||||
|
#, c-format
|
||||||
|
msgid "Mode Switch: Mode %d"
|
||||||
|
msgstr "Comutator de mod: modul %d"
|
||||||
|
|
||||||
|
-#: src/x11/meta-x11-display.c:671
|
||||||
|
+#: src/x11/meta-x11-display.c:676
|
||||||
|
#, c-format
|
||||||
|
msgid ""
|
||||||
|
"Display “%s” already has a window manager; try using the --replace option to "
|
||||||
|
@@ -741,21 +753,21 @@ msgstr ""
|
||||||
|
"opțiunea --replace (înlocuiește) pentru a înlocui administratorul de "
|
||||||
|
"ferestre curent."
|
||||||
|
|
||||||
|
-#: src/x11/meta-x11-display.c:1032
|
||||||
|
+#: src/x11/meta-x11-display.c:1089
|
||||||
|
msgid "Failed to initialize GDK\n"
|
||||||
|
msgstr "Nu s-a putut inițializa GDK\n"
|
||||||
|
|
||||||
|
-#: src/x11/meta-x11-display.c:1056
|
||||||
|
+#: src/x11/meta-x11-display.c:1113
|
||||||
|
#, c-format
|
||||||
|
msgid "Failed to open X Window System display “%s”\n"
|
||||||
|
msgstr "Nu s-a putut deschide afișajul sistemului de ferestre X „%s”\n"
|
||||||
|
|
||||||
|
-#: src/x11/meta-x11-display.c:1140
|
||||||
|
+#: src/x11/meta-x11-display.c:1196
|
||||||
|
#, c-format
|
||||||
|
msgid "Screen %d on display “%s” is invalid\n"
|
||||||
|
msgstr "Ecranul %d de pe afișajul „%s” nu este valid\n"
|
||||||
|
|
||||||
|
-#: src/x11/meta-x11-selection-input-stream.c:445
|
||||||
|
+#: src/x11/meta-x11-selection-input-stream.c:460
|
||||||
|
#, c-format
|
||||||
|
msgid "Format %s not supported"
|
||||||
|
msgstr "Formatul %s nu este suportat"
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
159
0037-x11-Handle-windowing-errors-while-writing-selection-.patch
Normal file
159
0037-x11-Handle-windowing-errors-while-writing-selection-.patch
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
From 2ecbf6d74637508203290c0e324d736de10a9174 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Mon, 24 Feb 2020 15:33:08 +0100
|
||||||
|
Subject: [PATCH 37/48] x11: Handle windowing errors while writing selection
|
||||||
|
INCR data
|
||||||
|
|
||||||
|
This error was just logged but not raised. Do as the code comment said
|
||||||
|
and raise a pipe error at that moment, and for subsequent operations
|
||||||
|
on the output stream (although none besides close() should be expected
|
||||||
|
after propagating the error properly).
|
||||||
|
|
||||||
|
Related: https://gitlab.gnome.org/GNOME/mutter/issues/1065
|
||||||
|
---
|
||||||
|
src/x11/meta-x11-selection-output-stream.c | 62 +++++++++++++++++++---
|
||||||
|
1 file changed, 56 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/x11/meta-x11-selection-output-stream.c b/src/x11/meta-x11-selection-output-stream.c
|
||||||
|
index 1883bc92a..f51dbc4c3 100644
|
||||||
|
--- a/src/x11/meta-x11-selection-output-stream.c
|
||||||
|
+++ b/src/x11/meta-x11-selection-output-stream.c
|
||||||
|
@@ -53,6 +53,7 @@ struct _MetaX11SelectionOutputStreamPrivate
|
||||||
|
|
||||||
|
guint incr : 1;
|
||||||
|
guint delete_pending : 1;
|
||||||
|
+ guint pipe_error : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_PRIVATE (MetaX11SelectionOutputStream,
|
||||||
|
@@ -167,6 +168,25 @@ get_element_size (int format)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+static gboolean
|
||||||
|
+meta_x11_selection_output_stream_check_pipe (MetaX11SelectionOutputStream *stream,
|
||||||
|
+ GError **error)
|
||||||
|
+{
|
||||||
|
+ MetaX11SelectionOutputStreamPrivate *priv =
|
||||||
|
+ meta_x11_selection_output_stream_get_instance_private (stream);
|
||||||
|
+
|
||||||
|
+ if (priv->pipe_error)
|
||||||
|
+ {
|
||||||
|
+ g_set_error (error,
|
||||||
|
+ G_IO_ERROR,
|
||||||
|
+ G_IO_ERROR_BROKEN_PIPE,
|
||||||
|
+ "Connection with client was broken");
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
meta_x11_selection_output_stream_perform_flush (MetaX11SelectionOutputStream *stream)
|
||||||
|
{
|
||||||
|
@@ -174,6 +194,7 @@ meta_x11_selection_output_stream_perform_flush (MetaX11SelectionOutputStream *st
|
||||||
|
meta_x11_selection_output_stream_get_instance_private (stream);
|
||||||
|
Display *xdisplay;
|
||||||
|
size_t element_size, n_elements;
|
||||||
|
+ int error_code;
|
||||||
|
|
||||||
|
g_assert (!priv->delete_pending);
|
||||||
|
|
||||||
|
@@ -230,18 +251,28 @@ meta_x11_selection_output_stream_perform_flush (MetaX11SelectionOutputStream *st
|
||||||
|
g_cond_broadcast (&priv->cond);
|
||||||
|
g_mutex_unlock (&priv->mutex);
|
||||||
|
|
||||||
|
- /* XXX: handle failure here and report EPIPE for future operations on the stream? */
|
||||||
|
- if (meta_x11_error_trap_pop_with_return (priv->x11_display))
|
||||||
|
- g_warning ("Failed to flush selection output stream");
|
||||||
|
+ error_code = meta_x11_error_trap_pop_with_return (priv->x11_display);
|
||||||
|
|
||||||
|
- if (priv->pending_task)
|
||||||
|
+ if (error_code != Success)
|
||||||
|
+ {
|
||||||
|
+ char error_str[100];
|
||||||
|
+
|
||||||
|
+ XGetErrorText (xdisplay, error_code, error_str, sizeof (error_str));
|
||||||
|
+ g_task_return_new_error (priv->pending_task,
|
||||||
|
+ G_IO_ERROR,
|
||||||
|
+ G_IO_ERROR_BROKEN_PIPE,
|
||||||
|
+ "Failed to flush selection output stream: %s",
|
||||||
|
+ error_str);
|
||||||
|
+ g_clear_object (&priv->pending_task);
|
||||||
|
+ priv->pipe_error = TRUE;
|
||||||
|
+ }
|
||||||
|
+ else if (priv->pending_task)
|
||||||
|
{
|
||||||
|
size_t result;
|
||||||
|
|
||||||
|
result = GPOINTER_TO_SIZE (g_task_get_task_data (priv->pending_task));
|
||||||
|
g_task_return_int (priv->pending_task, result);
|
||||||
|
- g_object_unref (priv->pending_task);
|
||||||
|
- priv->pending_task = NULL;
|
||||||
|
+ g_clear_object (&priv->pending_task);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -270,6 +301,9 @@ meta_x11_selection_output_stream_write (GOutputStream *output_stream,
|
||||||
|
MetaX11SelectionOutputStreamPrivate *priv =
|
||||||
|
meta_x11_selection_output_stream_get_instance_private (stream);
|
||||||
|
|
||||||
|
+ if (!meta_x11_selection_output_stream_check_pipe (stream, error))
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
g_mutex_lock (&priv->mutex);
|
||||||
|
g_byte_array_append (priv->data, buffer, count);
|
||||||
|
g_mutex_unlock (&priv->mutex);
|
||||||
|
@@ -297,12 +331,19 @@ meta_x11_selection_output_stream_write_async (GOutputStream *output_stream
|
||||||
|
META_X11_SELECTION_OUTPUT_STREAM (output_stream);
|
||||||
|
MetaX11SelectionOutputStreamPrivate *priv =
|
||||||
|
meta_x11_selection_output_stream_get_instance_private (stream);
|
||||||
|
+ GError *error = NULL;
|
||||||
|
GTask *task;
|
||||||
|
|
||||||
|
task = g_task_new (stream, cancellable, callback, user_data);
|
||||||
|
g_task_set_source_tag (task, meta_x11_selection_output_stream_write_async);
|
||||||
|
g_task_set_priority (task, io_priority);
|
||||||
|
|
||||||
|
+ if (!meta_x11_selection_output_stream_check_pipe (stream, &error))
|
||||||
|
+ {
|
||||||
|
+ g_task_return_error (task, error);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
g_mutex_lock (&priv->mutex);
|
||||||
|
g_byte_array_append (priv->data, buffer, count);
|
||||||
|
g_mutex_unlock (&priv->mutex);
|
||||||
|
@@ -369,6 +410,8 @@ meta_x11_selection_output_stream_flush (GOutputStream *output_stream,
|
||||||
|
MetaX11SelectionOutputStreamPrivate *priv =
|
||||||
|
meta_x11_selection_output_stream_get_instance_private (stream);
|
||||||
|
|
||||||
|
+ if (!meta_x11_selection_output_stream_check_pipe (stream, error))
|
||||||
|
+ return FALSE;
|
||||||
|
if (!meta_x11_selection_output_request_flush (stream))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
@@ -394,12 +437,19 @@ meta_x11_selection_output_stream_flush_async (GOutputStream *output_stream
|
||||||
|
META_X11_SELECTION_OUTPUT_STREAM (output_stream);
|
||||||
|
MetaX11SelectionOutputStreamPrivate *priv =
|
||||||
|
meta_x11_selection_output_stream_get_instance_private (stream);
|
||||||
|
+ GError *error = NULL;
|
||||||
|
GTask *task;
|
||||||
|
|
||||||
|
task = g_task_new (stream, cancellable, callback, user_data);
|
||||||
|
g_task_set_source_tag (task, meta_x11_selection_output_stream_flush_async);
|
||||||
|
g_task_set_priority (task, io_priority);
|
||||||
|
|
||||||
|
+ if (!meta_x11_selection_output_stream_check_pipe (stream, &error))
|
||||||
|
+ {
|
||||||
|
+ g_task_return_error (task, error);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!meta_x11_selection_output_stream_can_flush (stream))
|
||||||
|
{
|
||||||
|
if (meta_x11_selection_output_request_flush (stream))
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
124
0038-backends-x11-Observe-multiple-pad-mode-switch-button.patch
Normal file
124
0038-backends-x11-Observe-multiple-pad-mode-switch-button.patch
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
From c131a9b7fa79e53b5ed008d0fe53cf2062d3663d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Fri, 13 Dec 2019 14:22:12 +0100
|
||||||
|
Subject: [PATCH 38/48] backends/x11: Observe multiple pad mode switch buttons
|
||||||
|
in a group
|
||||||
|
|
||||||
|
Some tablets like the Cintiq 24HDT have several mode switch buttons
|
||||||
|
per group. Those are meant to jump straight to a given mode, however
|
||||||
|
we just handle cycling across modes (as most other tablets have a
|
||||||
|
single mode switch button per group).
|
||||||
|
|
||||||
|
So spice up the mode switch handling so we handle multiple mode
|
||||||
|
switch buttons, assigning each of them a mode. If the device only
|
||||||
|
has one mode switch button, we do the old-fashioned cycling.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/merge_requests/970
|
||||||
|
---
|
||||||
|
src/backends/x11/meta-input-device-x11.c | 75 ++++++++++++++++++++----
|
||||||
|
1 file changed, 63 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/x11/meta-input-device-x11.c b/src/backends/x11/meta-input-device-x11.c
|
||||||
|
index 26a40620f..af07c34f6 100644
|
||||||
|
--- a/src/backends/x11/meta-input-device-x11.c
|
||||||
|
+++ b/src/backends/x11/meta-input-device-x11.c
|
||||||
|
@@ -393,6 +393,57 @@ meta_input_device_x11_get_pad_group_mode (ClutterInputDevice *device,
|
||||||
|
return g_array_index (device_xi2->group_modes, uint32_t, group);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static gboolean
|
||||||
|
+pad_switch_mode (ClutterInputDevice *device,
|
||||||
|
+ uint32_t button,
|
||||||
|
+ uint32_t group,
|
||||||
|
+ uint32_t *mode)
|
||||||
|
+{
|
||||||
|
+ MetaInputDeviceX11 *device_x11 = META_INPUT_DEVICE_X11 (device);
|
||||||
|
+ uint32_t n_buttons, n_modes, button_group, next_mode, i;
|
||||||
|
+ GList *switch_buttons = NULL;
|
||||||
|
+
|
||||||
|
+ n_buttons = libwacom_get_num_buttons (device_x11->wacom_device);
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < n_buttons; i++)
|
||||||
|
+ {
|
||||||
|
+ button_group = meta_input_device_x11_get_button_group (device, i);
|
||||||
|
+ if (button_group == group)
|
||||||
|
+ switch_buttons = g_list_prepend (switch_buttons, GINT_TO_POINTER (button));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ switch_buttons = g_list_reverse (switch_buttons);
|
||||||
|
+ n_modes = clutter_input_device_get_group_n_modes (device, group);
|
||||||
|
+
|
||||||
|
+ if (g_list_length (switch_buttons) > 1)
|
||||||
|
+ {
|
||||||
|
+ /* If there's multiple switch buttons, we don't toggle but assign a mode
|
||||||
|
+ * to each of those buttons.
|
||||||
|
+ */
|
||||||
|
+ next_mode = g_list_index (switch_buttons, GINT_TO_POINTER (button));
|
||||||
|
+ }
|
||||||
|
+ else if (switch_buttons)
|
||||||
|
+ {
|
||||||
|
+ uint32_t cur_mode;
|
||||||
|
+
|
||||||
|
+ /* If there is a single button, have it toggle across modes */
|
||||||
|
+ cur_mode = g_array_index (device_x11->group_modes, uint32_t, group);
|
||||||
|
+ next_mode = (cur_mode + 1) % n_modes;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ g_list_free (switch_buttons);
|
||||||
|
+
|
||||||
|
+ if (next_mode < 0 || next_mode > n_modes)
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ *mode = next_mode;
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void
|
||||||
|
meta_input_device_x11_update_pad_state (ClutterInputDevice *device,
|
||||||
|
uint32_t button,
|
||||||
|
@@ -402,26 +453,26 @@ meta_input_device_x11_update_pad_state (ClutterInputDevice *device,
|
||||||
|
{
|
||||||
|
MetaInputDeviceX11 *device_xi2 = META_INPUT_DEVICE_X11 (device);
|
||||||
|
uint32_t button_group, *group_mode;
|
||||||
|
- gboolean is_mode_switch = FALSE;
|
||||||
|
|
||||||
|
button_group = meta_input_device_x11_get_button_group (device, button);
|
||||||
|
- is_mode_switch = button_group >= 0;
|
||||||
|
|
||||||
|
- /* Assign all non-mode-switch buttons to group 0 so far */
|
||||||
|
- button_group = MAX (0, button_group);
|
||||||
|
-
|
||||||
|
- if (button_group >= device_xi2->group_modes->len)
|
||||||
|
- return;
|
||||||
|
+ if (button_group < 0 || button_group >= device_xi2->group_modes->len)
|
||||||
|
+ {
|
||||||
|
+ if (group)
|
||||||
|
+ *group = 0;
|
||||||
|
+ if (mode)
|
||||||
|
+ *mode = 0;
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
group_mode = &g_array_index (device_xi2->group_modes, uint32_t, button_group);
|
||||||
|
|
||||||
|
- if (is_mode_switch && state)
|
||||||
|
+ if (state)
|
||||||
|
{
|
||||||
|
- uint32_t next, n_modes;
|
||||||
|
+ uint32_t next_mode;
|
||||||
|
|
||||||
|
- n_modes = clutter_input_device_get_group_n_modes (device, button_group);
|
||||||
|
- next = (*group_mode + 1) % n_modes;
|
||||||
|
- *group_mode = next;
|
||||||
|
+ if (pad_switch_mode (device, button, button_group, &next_mode))
|
||||||
|
+ *group_mode = next_mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (group)
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
56
0039-surface-actor-Fix-memory-leak.patch
Normal file
56
0039-surface-actor-Fix-memory-leak.patch
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
From 1d2004524728d337b0e98bedfc360549b9ee7d0e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Mader <robert.mader@posteo.de>
|
||||||
|
Date: Tue, 17 Mar 2020 20:57:18 +0100
|
||||||
|
Subject: [PATCH 39/48] surface-actor: Fix memory leak
|
||||||
|
|
||||||
|
When we create a new region for an opaque texture we need to free it.
|
||||||
|
While on it, simplify the check slightly.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1108
|
||||||
|
---
|
||||||
|
src/compositor/meta-surface-actor.c | 15 ++++++++++-----
|
||||||
|
1 file changed, 10 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/compositor/meta-surface-actor.c b/src/compositor/meta-surface-actor.c
|
||||||
|
index ff66f3c0a..41aa5a26d 100644
|
||||||
|
--- a/src/compositor/meta-surface-actor.c
|
||||||
|
+++ b/src/compositor/meta-surface-actor.c
|
||||||
|
@@ -285,8 +285,11 @@ meta_surface_actor_cull_out (MetaCullable *cullable,
|
||||||
|
int geometry_scale = 1;
|
||||||
|
|
||||||
|
opaque_region = meta_shaped_texture_get_opaque_region (priv->texture);
|
||||||
|
-
|
||||||
|
- if (!opaque_region && meta_shaped_texture_is_opaque (priv->texture))
|
||||||
|
+ if (opaque_region)
|
||||||
|
+ {
|
||||||
|
+ cairo_region_reference (opaque_region);
|
||||||
|
+ }
|
||||||
|
+ else if (meta_shaped_texture_is_opaque (priv->texture))
|
||||||
|
{
|
||||||
|
cairo_rectangle_int_t rect;
|
||||||
|
|
||||||
|
@@ -297,9 +300,10 @@ meta_surface_actor_cull_out (MetaCullable *cullable,
|
||||||
|
|
||||||
|
opaque_region = cairo_region_create_rectangle (&rect);
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- if (!opaque_region)
|
||||||
|
- return;
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
window_actor =
|
||||||
|
meta_window_actor_from_actor (CLUTTER_ACTOR (surface_actor));
|
||||||
|
@@ -313,6 +317,7 @@ meta_surface_actor_cull_out (MetaCullable *cullable,
|
||||||
|
if (clip_region)
|
||||||
|
cairo_region_subtract (clip_region, scaled_opaque_region);
|
||||||
|
|
||||||
|
+ cairo_region_destroy (opaque_region);
|
||||||
|
cairo_region_destroy (scaled_opaque_region);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,59 @@
|
|||||||
|
From 41130b08eb104b8071833e0ee745b57cf6143795 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Mader <robert.mader@posteo.de>
|
||||||
|
Date: Fri, 6 Mar 2020 13:42:04 +0100
|
||||||
|
Subject: [PATCH 40/48] surface-actor: Add culling offset for geometry scale
|
||||||
|
|
||||||
|
This fixes a case that was overlooked in
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1036 - when we
|
||||||
|
have a geometry scale > 1 and Wayland subsurfaces that have an offset
|
||||||
|
to their parent surface (which is often the case when the toplevel surface
|
||||||
|
includes decoration/shadows etc.), we have to add extra offset to their
|
||||||
|
opaque regions so they match their 'visible' location.
|
||||||
|
|
||||||
|
This is necessary as `meta_cullable_cull_out_children` moves the coordinate
|
||||||
|
system during culling, but does not know about geometry scale.
|
||||||
|
|
||||||
|
Also, remove the redundant check for `window_actor` - we only hit this code
|
||||||
|
path if a `window_actor` culls out its children.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1108
|
||||||
|
---
|
||||||
|
src/compositor/meta-surface-actor.c | 13 ++++++++-----
|
||||||
|
1 file changed, 8 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/compositor/meta-surface-actor.c b/src/compositor/meta-surface-actor.c
|
||||||
|
index 41aa5a26d..c328fab73 100644
|
||||||
|
--- a/src/compositor/meta-surface-actor.c
|
||||||
|
+++ b/src/compositor/meta-surface-actor.c
|
||||||
|
@@ -282,7 +282,8 @@ meta_surface_actor_cull_out (MetaCullable *cullable,
|
||||||
|
MetaWindowActor *window_actor;
|
||||||
|
cairo_region_t *scaled_opaque_region;
|
||||||
|
cairo_region_t *opaque_region;
|
||||||
|
- int geometry_scale = 1;
|
||||||
|
+ int geometry_scale;
|
||||||
|
+ float x, y;
|
||||||
|
|
||||||
|
opaque_region = meta_shaped_texture_get_opaque_region (priv->texture);
|
||||||
|
if (opaque_region)
|
||||||
|
@@ -305,12 +306,14 @@ meta_surface_actor_cull_out (MetaCullable *cullable,
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- window_actor =
|
||||||
|
- meta_window_actor_from_actor (CLUTTER_ACTOR (surface_actor));
|
||||||
|
- if (window_actor)
|
||||||
|
- geometry_scale = meta_window_actor_get_geometry_scale (window_actor);
|
||||||
|
+ window_actor = meta_window_actor_from_actor (CLUTTER_ACTOR (surface_actor));
|
||||||
|
+ geometry_scale = meta_window_actor_get_geometry_scale (window_actor);
|
||||||
|
+ clutter_actor_get_position (CLUTTER_ACTOR (surface_actor), &x, &y);
|
||||||
|
|
||||||
|
+ cairo_region_translate (opaque_region, x, y);
|
||||||
|
scaled_opaque_region = meta_region_scale (opaque_region, geometry_scale);
|
||||||
|
+ cairo_region_translate (scaled_opaque_region, -x, -y);
|
||||||
|
+ cairo_region_translate (opaque_region, -x, -y);
|
||||||
|
|
||||||
|
if (unobscured_region)
|
||||||
|
cairo_region_subtract (unobscured_region, scaled_opaque_region);
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
28
0041-backends-use-the-enum-name-instead-of-a-literal-0.patch
Normal file
28
0041-backends-use-the-enum-name-instead-of-a-literal-0.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From 7fa7c2aeb751d2408ebc39c31201f4e8bc736cf5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
Date: Thu, 14 Nov 2019 12:22:27 +1000
|
||||||
|
Subject: [PATCH 41/48] backends: use the enum name instead of a literal 0
|
||||||
|
|
||||||
|
No functional change.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1144
|
||||||
|
---
|
||||||
|
src/backends/native/meta-keymap-native.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/native/meta-keymap-native.c b/src/backends/native/meta-keymap-native.c
|
||||||
|
index e34c4454a..622cfd354 100644
|
||||||
|
--- a/src/backends/native/meta-keymap-native.c
|
||||||
|
+++ b/src/backends/native/meta-keymap-native.c
|
||||||
|
@@ -111,7 +111,7 @@ meta_keymap_native_init (MetaKeymapNative *keymap)
|
||||||
|
names.variant = option_xkb_variant;
|
||||||
|
names.options = option_xkb_options;
|
||||||
|
|
||||||
|
- ctx = xkb_context_new (0);
|
||||||
|
+ ctx = xkb_context_new (XKB_CONTEXT_NO_FLAGS);
|
||||||
|
g_assert (ctx);
|
||||||
|
keymap->keymap = xkb_keymap_new_from_names (ctx, &names, 0);
|
||||||
|
xkb_context_unref (ctx);
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
35
0042-wayland-Handle-NULL-preedit-text.patch
Normal file
35
0042-wayland-Handle-NULL-preedit-text.patch
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
From 8592a8591ba7334e2420ec5726a081a5e45f969b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Tue, 24 Mar 2020 16:52:55 +0100
|
||||||
|
Subject: [PATCH 42/48] wayland: Handle NULL preedit text
|
||||||
|
|
||||||
|
The preedit text may be NULL (eg. when unsetting it). This started
|
||||||
|
causing crashes since commit db9b60cc635, duh.
|
||||||
|
|
||||||
|
Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1132
|
||||||
|
---
|
||||||
|
src/wayland/meta-wayland-text-input.c | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/wayland/meta-wayland-text-input.c b/src/wayland/meta-wayland-text-input.c
|
||||||
|
index deff44c1b..4e7d18b25 100644
|
||||||
|
--- a/src/wayland/meta-wayland-text-input.c
|
||||||
|
+++ b/src/wayland/meta-wayland-text-input.c
|
||||||
|
@@ -207,10 +207,12 @@ meta_wayland_text_input_focus_set_preedit_text (ClutterInputFocus *focus,
|
||||||
|
{
|
||||||
|
MetaWaylandTextInput *text_input;
|
||||||
|
struct wl_resource *resource;
|
||||||
|
- gsize pos;
|
||||||
|
+ gsize pos = 0;
|
||||||
|
|
||||||
|
text_input = META_WAYLAND_TEXT_INPUT_FOCUS (focus)->text_input;
|
||||||
|
- pos = g_utf8_offset_to_pointer (text, cursor) - text;
|
||||||
|
+
|
||||||
|
+ if (text)
|
||||||
|
+ pos = g_utf8_offset_to_pointer (text, cursor) - text;
|
||||||
|
|
||||||
|
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
147
0043-backends-Add-mapping-function-arg-to-settings_set_bo.patch
Normal file
147
0043-backends-Add-mapping-function-arg-to-settings_set_bo.patch
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
From 18b661cc936ae5b7e6f7751d419e063e9a6f255f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Mon, 23 Mar 2020 18:42:11 +0100
|
||||||
|
Subject: [PATCH 43/48] backends: Add mapping function arg to
|
||||||
|
settings_set_bool_setting()
|
||||||
|
|
||||||
|
This will be useful to actually determine on a per-device basis the
|
||||||
|
setting being applied, while still doing changes on a per-device-type
|
||||||
|
basis.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1145
|
||||||
|
---
|
||||||
|
src/backends/meta-input-settings.c | 40 ++++++++++++++++++++----------
|
||||||
|
1 file changed, 27 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-input-settings.c b/src/backends/meta-input-settings.c
|
||||||
|
index 3bee36d41..6d674bbea 100644
|
||||||
|
--- a/src/backends/meta-input-settings.c
|
||||||
|
+++ b/src/backends/meta-input-settings.c
|
||||||
|
@@ -103,6 +103,10 @@ struct _MetaInputSettingsPrivate
|
||||||
|
MetaInputMapper *input_mapper;
|
||||||
|
};
|
||||||
|
|
||||||
|
+typedef gboolean (* ConfigBoolMappingFunc) (MetaInputSettings *input_settings,
|
||||||
|
+ ClutterInputDevice *device,
|
||||||
|
+ gboolean value);
|
||||||
|
+
|
||||||
|
typedef void (*ConfigBoolFunc) (MetaInputSettings *input_settings,
|
||||||
|
ClutterInputDevice *device,
|
||||||
|
gboolean setting);
|
||||||
|
@@ -195,15 +199,22 @@ settings_device_set_bool_setting (MetaInputSettings *input_settings,
|
||||||
|
static void
|
||||||
|
settings_set_bool_setting (MetaInputSettings *input_settings,
|
||||||
|
ClutterInputDeviceType type,
|
||||||
|
+ ConfigBoolMappingFunc mapping_func,
|
||||||
|
ConfigBoolFunc func,
|
||||||
|
gboolean enabled)
|
||||||
|
{
|
||||||
|
- GSList *devices, *d;
|
||||||
|
+ GSList *devices, *l;
|
||||||
|
|
||||||
|
devices = meta_input_settings_get_devices (input_settings, type);
|
||||||
|
|
||||||
|
- for (d = devices; d; d = d->next)
|
||||||
|
- settings_device_set_bool_setting (input_settings, d->data, func, enabled);
|
||||||
|
+ for (l = devices; l; l = l->next)
|
||||||
|
+ {
|
||||||
|
+ gboolean value = enabled;
|
||||||
|
+
|
||||||
|
+ if (mapping_func)
|
||||||
|
+ value = mapping_func (input_settings, l->data, value);
|
||||||
|
+ settings_device_set_bool_setting (input_settings, l->data, func, value);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
g_slist_free (devices);
|
||||||
|
}
|
||||||
|
@@ -298,7 +309,7 @@ update_touchpad_left_handed (MetaInputSettings *input_settings,
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL,
|
||||||
|
input_settings_class->set_left_handed,
|
||||||
|
enabled);
|
||||||
|
}
|
||||||
|
@@ -330,7 +341,7 @@ update_mouse_left_handed (MetaInputSettings *input_settings,
|
||||||
|
{
|
||||||
|
GDesktopTouchpadHandedness touchpad_handedness;
|
||||||
|
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_POINTER_DEVICE,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_POINTER_DEVICE, NULL,
|
||||||
|
input_settings_class->set_left_handed,
|
||||||
|
enabled);
|
||||||
|
|
||||||
|
@@ -446,7 +457,8 @@ update_middle_click_emulation (MetaInputSettings *input_settings,
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_POINTER_DEVICE, func,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_POINTER_DEVICE,
|
||||||
|
+ NULL, func,
|
||||||
|
g_settings_get_boolean (settings, key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -505,10 +517,12 @@ update_device_natural_scroll (MetaInputSettings *input_settings,
|
||||||
|
else
|
||||||
|
{
|
||||||
|
settings = get_settings_for_device_type (input_settings, CLUTTER_POINTER_DEVICE);
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_POINTER_DEVICE, func,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_POINTER_DEVICE,
|
||||||
|
+ NULL, func,
|
||||||
|
g_settings_get_boolean (settings, key));
|
||||||
|
settings = get_settings_for_device_type (input_settings, CLUTTER_TOUCHPAD_DEVICE);
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, func,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
|
||||||
|
+ NULL, func,
|
||||||
|
g_settings_get_boolean (settings, key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -545,7 +559,7 @@ update_touchpad_disable_while_typing (MetaInputSettings *input_settings,
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL,
|
||||||
|
input_settings_class->set_disable_while_typing,
|
||||||
|
enabled);
|
||||||
|
}
|
||||||
|
@@ -603,7 +617,7 @@ update_touchpad_tap_enabled (MetaInputSettings *input_settings,
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL,
|
||||||
|
input_settings_class->set_tap_enabled,
|
||||||
|
enabled);
|
||||||
|
}
|
||||||
|
@@ -634,7 +648,7 @@ update_touchpad_tap_and_drag_enabled (MetaInputSettings *input_settings,
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL,
|
||||||
|
input_settings_class->set_tap_and_drag_enabled,
|
||||||
|
enabled);
|
||||||
|
}
|
||||||
|
@@ -672,7 +686,7 @@ update_touchpad_edge_scroll (MetaInputSettings *input_settings,
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL,
|
||||||
|
(ConfigBoolFunc) input_settings_class->set_edge_scroll,
|
||||||
|
edge_scroll_enabled);
|
||||||
|
}
|
||||||
|
@@ -706,7 +720,7 @@ update_touchpad_two_finger_scroll (MetaInputSettings *input_settings,
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL,
|
||||||
|
(ConfigBoolFunc) input_settings_class->set_two_finger_scroll,
|
||||||
|
two_finger_scroll_enabled);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,87 @@
|
|||||||
|
From ec1195e3ff8db6f3888c42d278b3724ec2ca70c0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Tue, 24 Mar 2020 13:16:11 +0100
|
||||||
|
Subject: [PATCH 44/48] backends: Fix configuration changes to tap[-and-drag]
|
||||||
|
|
||||||
|
Most people just see a harmless warning when applying this setting to
|
||||||
|
all touchpads (which this patch fixes). But tap[-and-drag] is supposed
|
||||||
|
to remain enabled for display-less Wacom tablets, despite configuration
|
||||||
|
changes.
|
||||||
|
|
||||||
|
Fix this by using the mapping function, so the setting is forced on for
|
||||||
|
wacom devices. This happens on a per-device basis, so the warning is
|
||||||
|
gone too.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1145
|
||||||
|
---
|
||||||
|
src/backends/meta-input-settings.c | 22 ++++++++++++++++------
|
||||||
|
1 file changed, 16 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-input-settings.c b/src/backends/meta-input-settings.c
|
||||||
|
index 6d674bbea..7c3afdaff 100644
|
||||||
|
--- a/src/backends/meta-input-settings.c
|
||||||
|
+++ b/src/backends/meta-input-settings.c
|
||||||
|
@@ -592,6 +592,14 @@ device_is_tablet_touchpad (MetaInputSettings *input_settings,
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static gboolean
|
||||||
|
+force_enable_on_tablet (MetaInputSettings *input_settings,
|
||||||
|
+ ClutterInputDevice *device,
|
||||||
|
+ gboolean value)
|
||||||
|
+{
|
||||||
|
+ return device_is_tablet_touchpad (input_settings, device) || value;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
update_touchpad_tap_enabled (MetaInputSettings *input_settings,
|
||||||
|
ClutterInputDevice *device)
|
||||||
|
@@ -606,18 +614,19 @@ update_touchpad_tap_enabled (MetaInputSettings *input_settings,
|
||||||
|
|
||||||
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
|
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||||
|
- enabled = device_is_tablet_touchpad (input_settings, device) ||
|
||||||
|
- g_settings_get_boolean (priv->touchpad_settings, "tap-to-click");
|
||||||
|
+ enabled = g_settings_get_boolean (priv->touchpad_settings, "tap-to-click");
|
||||||
|
|
||||||
|
if (device)
|
||||||
|
{
|
||||||
|
+ enabled = force_enable_on_tablet (input_settings, device, enabled);
|
||||||
|
settings_device_set_bool_setting (input_settings, device,
|
||||||
|
input_settings_class->set_tap_enabled,
|
||||||
|
enabled);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
|
||||||
|
+ force_enable_on_tablet,
|
||||||
|
input_settings_class->set_tap_enabled,
|
||||||
|
enabled);
|
||||||
|
}
|
||||||
|
@@ -637,18 +646,19 @@ update_touchpad_tap_and_drag_enabled (MetaInputSettings *input_settings,
|
||||||
|
|
||||||
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
|
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||||
|
- enabled = device_is_tablet_touchpad (input_settings, device) ||
|
||||||
|
- g_settings_get_boolean (priv->touchpad_settings, "tap-and-drag");
|
||||||
|
+ enabled = g_settings_get_boolean (priv->touchpad_settings, "tap-and-drag");
|
||||||
|
|
||||||
|
if (device)
|
||||||
|
{
|
||||||
|
+ enabled = force_enable_on_tablet (input_settings, device, enabled);
|
||||||
|
settings_device_set_bool_setting (input_settings, device,
|
||||||
|
input_settings_class->set_tap_and_drag_enabled,
|
||||||
|
enabled);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL,
|
||||||
|
+ settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
|
||||||
|
+ force_enable_on_tablet,
|
||||||
|
input_settings_class->set_tap_and_drag_enabled,
|
||||||
|
enabled);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
360
0045-backends-Add-MetaInputDevice-derivable-class.patch
Normal file
360
0045-backends-Add-MetaInputDevice-derivable-class.patch
Normal file
@ -0,0 +1,360 @@
|
|||||||
|
From 1f00aba92c324ec501a775fe288af187f3c36910 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Fri, 6 Mar 2020 14:12:59 +0100
|
||||||
|
Subject: [PATCH 45/48] backends: Add MetaInputDevice derivable class
|
||||||
|
|
||||||
|
This class sits between ClutterInputDevice and the backend implementations,
|
||||||
|
it will be the despositary of features we need across both backends, but
|
||||||
|
don't need to offer through Clutter's API.
|
||||||
|
|
||||||
|
As a first thing to have there, add a getter for a WacomDevice. This is
|
||||||
|
something scattered across and somewhat inconsistent (eg. different places
|
||||||
|
of the code create wacom devices for different device types). Just make it
|
||||||
|
here for all devices, so users can pick.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1109
|
||||||
|
---
|
||||||
|
src/backends/meta-backend-private.h | 4 +
|
||||||
|
src/backends/meta-backend.c | 27 ++++
|
||||||
|
src/backends/meta-input-device-private.h | 48 ++++++
|
||||||
|
src/backends/meta-input-device.c | 137 ++++++++++++++++++
|
||||||
|
.../native/meta-input-device-native.c | 2 +-
|
||||||
|
.../native/meta-input-device-native.h | 1 +
|
||||||
|
src/backends/x11/meta-input-device-x11.c | 2 +-
|
||||||
|
src/backends/x11/meta-input-device-x11.h | 1 +
|
||||||
|
src/meson.build | 1 +
|
||||||
|
9 files changed, 221 insertions(+), 2 deletions(-)
|
||||||
|
create mode 100644 src/backends/meta-input-device-private.h
|
||||||
|
create mode 100644 src/backends/meta-input-device.c
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-backend-private.h b/src/backends/meta-backend-private.h
|
||||||
|
index f5423c12b..4678f7768 100644
|
||||||
|
--- a/src/backends/meta-backend-private.h
|
||||||
|
+++ b/src/backends/meta-backend-private.h
|
||||||
|
@@ -182,4 +182,8 @@ void meta_backend_add_gpu (MetaBackend *backend,
|
||||||
|
META_EXPORT_TEST
|
||||||
|
GList * meta_backend_get_gpus (MetaBackend *backend);
|
||||||
|
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+WacomDeviceDatabase * meta_backend_get_wacom_database (MetaBackend *backend);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#endif /* META_BACKEND_PRIVATE_H */
|
||||||
|
diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c
|
||||||
|
index 6295c8b7e..f75df806b 100644
|
||||||
|
--- a/src/backends/meta-backend.c
|
||||||
|
+++ b/src/backends/meta-backend.c
|
||||||
|
@@ -134,6 +134,10 @@ struct _MetaBackendPrivate
|
||||||
|
MetaProfiler *profiler;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+ WacomDeviceDatabase *wacom_db;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
ClutterBackend *clutter_backend;
|
||||||
|
ClutterActor *stage;
|
||||||
|
|
||||||
|
@@ -199,6 +203,10 @@ meta_backend_finalize (GObject *object)
|
||||||
|
g_clear_object (&priv->remote_access_controller);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+ g_clear_pointer (&priv->wacom_db, libwacom_database_destroy);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
if (priv->sleep_signal_id)
|
||||||
|
g_dbus_connection_signal_unsubscribe (priv->system_bus, priv->sleep_signal_id);
|
||||||
|
if (priv->upower_watch_id)
|
||||||
|
@@ -715,6 +723,15 @@ meta_backend_constructed (GObject *object)
|
||||||
|
MetaBackendClass *backend_class =
|
||||||
|
META_BACKEND_GET_CLASS (backend);
|
||||||
|
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+ priv->wacom_db = libwacom_database_new ();
|
||||||
|
+ if (!priv->wacom_db)
|
||||||
|
+ {
|
||||||
|
+ g_warning ("Could not create database of Wacom devices, "
|
||||||
|
+ "expect tablets to misbehave");
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
if (backend_class->is_lid_closed != meta_backend_real_is_lid_closed)
|
||||||
|
return;
|
||||||
|
|
||||||
|
@@ -1442,3 +1459,13 @@ meta_backend_get_gpus (MetaBackend *backend)
|
||||||
|
|
||||||
|
return priv->gpus;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+WacomDeviceDatabase *
|
||||||
|
+meta_backend_get_wacom_database (MetaBackend *backend)
|
||||||
|
+{
|
||||||
|
+ MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||||
|
+
|
||||||
|
+ return priv->wacom_db;
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
diff --git a/src/backends/meta-input-device-private.h b/src/backends/meta-input-device-private.h
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..a2cbd4864
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/backends/meta-input-device-private.h
|
||||||
|
@@ -0,0 +1,48 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright © 2020 Red Hat Ltd.
|
||||||
|
+ *
|
||||||
|
+ * This library is free software; you can redistribute it and/or
|
||||||
|
+ * modify it under the terms of the GNU Lesser General Public
|
||||||
|
+ * License as published by the Free Software Foundation; either
|
||||||
|
+ * version 2 of the License, or (at your option) any later version.
|
||||||
|
+ *
|
||||||
|
+ * This library 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
|
||||||
|
+ * Lesser General Public License for more details.
|
||||||
|
+ *
|
||||||
|
+ * You should have received a copy of the GNU Lesser General Public
|
||||||
|
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
+ *
|
||||||
|
+ * Author: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
+ */
|
||||||
|
+#ifndef META_INPUT_DEVICE_H
|
||||||
|
+#define META_INPUT_DEVICE_H
|
||||||
|
+
|
||||||
|
+#include <glib-object.h>
|
||||||
|
+
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+#include <libwacom/libwacom.h>
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#include "clutter/clutter-mutter.h"
|
||||||
|
+
|
||||||
|
+typedef struct _MetaInputDeviceClass MetaInputDeviceClass;
|
||||||
|
+typedef struct _MetaInputDevice MetaInputDevice;
|
||||||
|
+
|
||||||
|
+struct _MetaInputDeviceClass
|
||||||
|
+{
|
||||||
|
+ ClutterInputDeviceClass parent_class;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+#define META_TYPE_INPUT_DEVICE (meta_input_device_get_type ())
|
||||||
|
+G_DECLARE_DERIVABLE_TYPE (MetaInputDevice,
|
||||||
|
+ meta_input_device,
|
||||||
|
+ META, INPUT_DEVICE,
|
||||||
|
+ ClutterInputDevice)
|
||||||
|
+
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+WacomDevice * meta_input_device_get_wacom_device (MetaInputDevice *input_device);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#endif /* META_INPUT_DEVICE_H */
|
||||||
|
diff --git a/src/backends/meta-input-device.c b/src/backends/meta-input-device.c
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..e05c024e3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/backends/meta-input-device.c
|
||||||
|
@@ -0,0 +1,137 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright © 2020 Red Hat Ltd.
|
||||||
|
+ *
|
||||||
|
+ * This library is free software; you can redistribute it and/or
|
||||||
|
+ * modify it under the terms of the GNU Lesser General Public
|
||||||
|
+ * License as published by the Free Software Foundation; either
|
||||||
|
+ * version 2 of the License, or (at your option) any later version.
|
||||||
|
+ *
|
||||||
|
+ * This library 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
|
||||||
|
+ * Lesser General Public License for more details.
|
||||||
|
+ *
|
||||||
|
+ * You should have received a copy of the GNU Lesser General Public
|
||||||
|
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
+ *
|
||||||
|
+ * Author: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include "config.h"
|
||||||
|
+
|
||||||
|
+#include "backends/meta-backend-private.h"
|
||||||
|
+#include "meta-input-device-private.h"
|
||||||
|
+
|
||||||
|
+typedef struct _MetaInputDevicePrivate MetaInputDevicePrivate;
|
||||||
|
+
|
||||||
|
+struct _MetaInputDevicePrivate
|
||||||
|
+{
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+ WacomDevice *wacom_device;
|
||||||
|
+#else
|
||||||
|
+ /* Just something to have non-zero sized struct otherwise */
|
||||||
|
+ gpointer wacom_device;
|
||||||
|
+#endif
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+enum
|
||||||
|
+{
|
||||||
|
+ PROP_WACOM_DEVICE = 1,
|
||||||
|
+ N_PROPS
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static GParamSpec *props[N_PROPS] = { 0 };
|
||||||
|
+
|
||||||
|
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (MetaInputDevice,
|
||||||
|
+ meta_input_device,
|
||||||
|
+ CLUTTER_TYPE_INPUT_DEVICE)
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+meta_input_device_init (MetaInputDevice *input_device)
|
||||||
|
+{
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+meta_input_device_constructed (GObject *object)
|
||||||
|
+{
|
||||||
|
+ MetaInputDevice *input_device = META_INPUT_DEVICE (object);
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+ WacomDeviceDatabase *wacom_db;
|
||||||
|
+ MetaInputDevicePrivate *priv;
|
||||||
|
+ const char *node;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ G_OBJECT_CLASS (meta_input_device_parent_class)->constructed (object);
|
||||||
|
+
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+ priv = meta_input_device_get_instance_private (input_device);
|
||||||
|
+ wacom_db = meta_backend_get_wacom_database (meta_get_backend ());
|
||||||
|
+ node = clutter_input_device_get_device_node (CLUTTER_INPUT_DEVICE (input_device));
|
||||||
|
+ priv->wacom_device = libwacom_new_from_path (wacom_db, node,
|
||||||
|
+ WFALLBACK_NONE, NULL);
|
||||||
|
+#endif /* HAVE_LIBWACOM */
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+meta_input_device_finalize (GObject *object)
|
||||||
|
+{
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+ MetaInputDevicePrivate *priv;
|
||||||
|
+
|
||||||
|
+ priv = meta_input_device_get_instance_private (META_INPUT_DEVICE (object));
|
||||||
|
+
|
||||||
|
+ g_clear_pointer (&priv->wacom_device, libwacom_destroy);
|
||||||
|
+#endif /* HAVE_LIBWACOM */
|
||||||
|
+
|
||||||
|
+ G_OBJECT_CLASS (meta_input_device_parent_class)->finalize (object);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+meta_input_device_get_property (GObject *object,
|
||||||
|
+ guint prop_id,
|
||||||
|
+ GValue *value,
|
||||||
|
+ GParamSpec *pspec)
|
||||||
|
+{
|
||||||
|
+ MetaInputDevicePrivate *priv;
|
||||||
|
+
|
||||||
|
+ priv = meta_input_device_get_instance_private (META_INPUT_DEVICE (object));
|
||||||
|
+
|
||||||
|
+ switch (prop_id)
|
||||||
|
+ {
|
||||||
|
+ case PROP_WACOM_DEVICE:
|
||||||
|
+ g_value_set_pointer (value, priv->wacom_device);
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+meta_input_device_class_init (MetaInputDeviceClass *klass)
|
||||||
|
+{
|
||||||
|
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
|
+
|
||||||
|
+ object_class->constructed = meta_input_device_constructed;
|
||||||
|
+ object_class->finalize = meta_input_device_finalize;
|
||||||
|
+ object_class->get_property = meta_input_device_get_property;
|
||||||
|
+
|
||||||
|
+ props[PROP_WACOM_DEVICE] =
|
||||||
|
+ g_param_spec_pointer ("wacom-device",
|
||||||
|
+ "Wacom device",
|
||||||
|
+ "Wacom device",
|
||||||
|
+ G_PARAM_READABLE);
|
||||||
|
+
|
||||||
|
+ g_object_class_install_properties (object_class, N_PROPS, props);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+WacomDevice *
|
||||||
|
+meta_input_device_get_wacom_device (MetaInputDevice *input_device)
|
||||||
|
+{
|
||||||
|
+ MetaInputDevicePrivate *priv;
|
||||||
|
+
|
||||||
|
+ priv = meta_input_device_get_instance_private (input_device);
|
||||||
|
+
|
||||||
|
+ return priv->wacom_device;
|
||||||
|
+}
|
||||||
|
+#endif /* HAVE_LIBWACOM */
|
||||||
|
diff --git a/src/backends/native/meta-input-device-native.c b/src/backends/native/meta-input-device-native.c
|
||||||
|
index 34054c5e9..4b87eb2a0 100644
|
||||||
|
--- a/src/backends/native/meta-input-device-native.c
|
||||||
|
+++ b/src/backends/native/meta-input-device-native.c
|
||||||
|
@@ -31,7 +31,7 @@
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (MetaInputDeviceNative,
|
||||||
|
meta_input_device_native,
|
||||||
|
- CLUTTER_TYPE_INPUT_DEVICE)
|
||||||
|
+ META_TYPE_INPUT_DEVICE)
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
diff --git a/src/backends/native/meta-input-device-native.h b/src/backends/native/meta-input-device-native.h
|
||||||
|
index 9b3a21904..59cff51ef 100644
|
||||||
|
--- a/src/backends/native/meta-input-device-native.h
|
||||||
|
+++ b/src/backends/native/meta-input-device-native.h
|
||||||
|
@@ -28,6 +28,7 @@
|
||||||
|
|
||||||
|
#include <glib-object.h>
|
||||||
|
|
||||||
|
+#include "backends/meta-input-device-private.h"
|
||||||
|
#include "backends/native/meta-seat-native.h"
|
||||||
|
#include "clutter/clutter-mutter.h"
|
||||||
|
|
||||||
|
diff --git a/src/backends/x11/meta-input-device-x11.c b/src/backends/x11/meta-input-device-x11.c
|
||||||
|
index af07c34f6..3d96c344e 100644
|
||||||
|
--- a/src/backends/x11/meta-input-device-x11.c
|
||||||
|
+++ b/src/backends/x11/meta-input-device-x11.c
|
||||||
|
@@ -52,7 +52,7 @@ struct _MetaInputDeviceX11Class
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (MetaInputDeviceX11,
|
||||||
|
meta_input_device_x11,
|
||||||
|
- CLUTTER_TYPE_INPUT_DEVICE)
|
||||||
|
+ META_TYPE_INPUT_DEVICE)
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_input_device_x11_constructed (GObject *object)
|
||||||
|
diff --git a/src/backends/x11/meta-input-device-x11.h b/src/backends/x11/meta-input-device-x11.h
|
||||||
|
index eacef955a..1cbee031a 100644
|
||||||
|
--- a/src/backends/x11/meta-input-device-x11.h
|
||||||
|
+++ b/src/backends/x11/meta-input-device-x11.h
|
||||||
|
@@ -26,6 +26,7 @@
|
||||||
|
#include <libwacom/libwacom.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#include "backends/meta-input-device-private.h"
|
||||||
|
#include "clutter/clutter.h"
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
diff --git a/src/meson.build b/src/meson.build
|
||||||
|
index b882b5350..bb1b48b44 100644
|
||||||
|
--- a/src/meson.build
|
||||||
|
+++ b/src/meson.build
|
||||||
|
@@ -190,6 +190,7 @@ mutter_sources = [
|
||||||
|
'backends/meta-idle-monitor-dbus.c',
|
||||||
|
'backends/meta-idle-monitor-dbus.h',
|
||||||
|
'backends/meta-idle-monitor-private.h',
|
||||||
|
+ 'backends/meta-input-device.c',
|
||||||
|
'backends/meta-input-mapper.c',
|
||||||
|
'backends/meta-input-mapper-private.h',
|
||||||
|
'backends/meta-input-settings.c',
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
164
0046-backends-x11-Drop-internal-WacomDevice-lookups.patch
Normal file
164
0046-backends-x11-Drop-internal-WacomDevice-lookups.patch
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
From 3b88af94e328ca3064b8d4582349cc1904619755 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Fri, 6 Mar 2020 14:37:01 +0100
|
||||||
|
Subject: [PATCH 46/48] backends/x11: Drop internal WacomDevice lookups
|
||||||
|
|
||||||
|
Just use the ones from MetaInputDevice.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1109
|
||||||
|
---
|
||||||
|
src/backends/x11/meta-input-device-x11.c | 50 +++++++++---------------
|
||||||
|
src/backends/x11/meta-seat-x11.c | 17 --------
|
||||||
|
2 files changed, 19 insertions(+), 48 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/x11/meta-input-device-x11.c b/src/backends/x11/meta-input-device-x11.c
|
||||||
|
index 3d96c344e..dc3b94f49 100644
|
||||||
|
--- a/src/backends/x11/meta-input-device-x11.c
|
||||||
|
+++ b/src/backends/x11/meta-input-device-x11.c
|
||||||
|
@@ -101,14 +101,11 @@ meta_input_device_x11_finalize (GObject *object)
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
MetaInputDeviceX11 *device_xi2 = META_INPUT_DEVICE_X11 (object);
|
||||||
|
|
||||||
|
- if (device_xi2->wacom_device)
|
||||||
|
- libwacom_destroy (device_xi2->wacom_device);
|
||||||
|
-
|
||||||
|
if (device_xi2->group_modes)
|
||||||
|
g_array_unref (device_xi2->group_modes);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
g_clear_handle_id (&device_xi2->inhibit_pointer_query_timer, g_source_remove);
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (meta_input_device_x11_parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
@@ -118,23 +115,25 @@ meta_input_device_x11_get_group_n_modes (ClutterInputDevice *device,
|
||||||
|
int group)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
- MetaInputDeviceX11 *device_xi2 = META_INPUT_DEVICE_X11 (device);
|
||||||
|
+ WacomDevice *wacom_device;
|
||||||
|
+
|
||||||
|
+ wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device));
|
||||||
|
|
||||||
|
- if (device_xi2->wacom_device)
|
||||||
|
+ if (wacom_device)
|
||||||
|
{
|
||||||
|
if (group == 0)
|
||||||
|
{
|
||||||
|
- if (libwacom_has_ring (device_xi2->wacom_device))
|
||||||
|
- return libwacom_get_ring_num_modes (device_xi2->wacom_device);
|
||||||
|
- else if (libwacom_get_num_strips (device_xi2->wacom_device) >= 1)
|
||||||
|
- return libwacom_get_strips_num_modes (device_xi2->wacom_device);
|
||||||
|
+ if (libwacom_has_ring (wacom_device))
|
||||||
|
+ return libwacom_get_ring_num_modes (wacom_device);
|
||||||
|
+ else if (libwacom_get_num_strips (wacom_device) >= 1)
|
||||||
|
+ return libwacom_get_strips_num_modes (wacom_device);
|
||||||
|
}
|
||||||
|
else if (group == 1)
|
||||||
|
{
|
||||||
|
- if (libwacom_has_ring2 (device_xi2->wacom_device))
|
||||||
|
- return libwacom_get_ring2_num_modes (device_xi2->wacom_device);
|
||||||
|
- else if (libwacom_get_num_strips (device_xi2->wacom_device) >= 2)
|
||||||
|
- return libwacom_get_strips_num_modes (device_xi2->wacom_device);
|
||||||
|
+ if (libwacom_has_ring2 (wacom_device))
|
||||||
|
+ return libwacom_get_ring2_num_modes (wacom_device);
|
||||||
|
+ else if (libwacom_get_num_strips (wacom_device) >= 2)
|
||||||
|
+ return libwacom_get_strips_num_modes (wacom_device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@@ -147,17 +146,18 @@ static int
|
||||||
|
meta_input_device_x11_get_button_group (ClutterInputDevice *device,
|
||||||
|
uint32_t button)
|
||||||
|
{
|
||||||
|
- MetaInputDeviceX11 *device_xi2 = META_INPUT_DEVICE_X11 (device);
|
||||||
|
+ WacomDevice *wacom_device;
|
||||||
|
|
||||||
|
- if (device_xi2->wacom_device)
|
||||||
|
+ wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device));
|
||||||
|
+
|
||||||
|
+ if (wacom_device)
|
||||||
|
{
|
||||||
|
WacomButtonFlags flags;
|
||||||
|
|
||||||
|
- if (button >= libwacom_get_num_buttons (device_xi2->wacom_device))
|
||||||
|
+ if (button >= libwacom_get_num_buttons (wacom_device))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
- flags = libwacom_get_button_flag (device_xi2->wacom_device,
|
||||||
|
- 'A' + button);
|
||||||
|
+ flags = libwacom_get_button_flag (wacom_device, 'A' + button);
|
||||||
|
|
||||||
|
if (flags &
|
||||||
|
(WACOM_BUTTON_RING_MODESWITCH |
|
||||||
|
@@ -369,18 +369,6 @@ meta_input_device_x11_get_pointer_location (ClutterInputDevice *device,
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
-void
|
||||||
|
-meta_input_device_x11_ensure_wacom_info (ClutterInputDevice *device,
|
||||||
|
- WacomDeviceDatabase *wacom_db)
|
||||||
|
-{
|
||||||
|
- MetaInputDeviceX11 *device_xi2 = META_INPUT_DEVICE_X11 (device);
|
||||||
|
- const gchar *node_path;
|
||||||
|
-
|
||||||
|
- node_path = clutter_input_device_get_device_node (device);
|
||||||
|
- device_xi2->wacom_device = libwacom_new_from_path (wacom_db, node_path,
|
||||||
|
- WFALLBACK_NONE, NULL);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
uint32_t
|
||||||
|
meta_input_device_x11_get_pad_group_mode (ClutterInputDevice *device,
|
||||||
|
uint32_t group)
|
||||||
|
diff --git a/src/backends/x11/meta-seat-x11.c b/src/backends/x11/meta-seat-x11.c
|
||||||
|
index 8849cd3d8..e6e996803 100644
|
||||||
|
--- a/src/backends/x11/meta-seat-x11.c
|
||||||
|
+++ b/src/backends/x11/meta-seat-x11.c
|
||||||
|
@@ -54,10 +54,6 @@ struct _MetaSeatX11
|
||||||
|
int pointer_id;
|
||||||
|
int keyboard_id;
|
||||||
|
int opcode;
|
||||||
|
-
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
- WacomDeviceDatabase *wacom_db;
|
||||||
|
-#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
static GParamSpec *props[N_PROPS] = { 0 };
|
||||||
|
@@ -557,11 +553,6 @@ create_device (MetaSeatX11 *seat_x11,
|
||||||
|
info->classes,
|
||||||
|
info->num_classes);
|
||||||
|
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
- if (source == CLUTTER_PAD_DEVICE)
|
||||||
|
- meta_input_device_x11_ensure_wacom_info (retval, seat_x11->wacom_db);
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
g_free (vendor_id);
|
||||||
|
g_free (product_id);
|
||||||
|
g_free (node_path);
|
||||||
|
@@ -1410,10 +1401,6 @@ meta_seat_x11_finalize (GObject *object)
|
||||||
|
g_hash_table_unref (seat_x11->tools_by_serial);
|
||||||
|
g_list_free (seat_x11->devices);
|
||||||
|
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
- libwacom_database_destroy (seat_x11->wacom_db);
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
G_OBJECT_CLASS (meta_seat_x11_parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1570,10 +1557,6 @@ meta_seat_x11_init (MetaSeatX11 *seat)
|
||||||
|
(GDestroyNotify) g_object_unref);
|
||||||
|
seat->tools_by_serial = g_hash_table_new_full (NULL, NULL, NULL,
|
||||||
|
(GDestroyNotify) g_object_unref);
|
||||||
|
-
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
- seat->wacom_db = libwacom_database_new ();
|
||||||
|
-#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
MetaSeatX11 *
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
300
0047-backends-Drop-internal-WacomDevice-in-MetaInputSetti.patch
Normal file
300
0047-backends-Drop-internal-WacomDevice-in-MetaInputSetti.patch
Normal file
@ -0,0 +1,300 @@
|
|||||||
|
From d052f9c07078f50e59b8d44a1db3b2aa8cf66eb6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Fri, 6 Mar 2020 14:53:45 +0100
|
||||||
|
Subject: [PATCH 47/48] backends: Drop internal WacomDevice in
|
||||||
|
MetaInputSettings
|
||||||
|
|
||||||
|
Use the one from MetaInputDevice instead. Since we no longer try
|
||||||
|
to ask for WacomDevices that weren't first retrieved:
|
||||||
|
|
||||||
|
Closes: https://gitlab.gnome.org/GNOME/mutter/issues/1086
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1109
|
||||||
|
---
|
||||||
|
src/backends/meta-input-settings-private.h | 5 -
|
||||||
|
src/backends/meta-input-settings.c | 109 +++++----------------
|
||||||
|
src/core/display.c | 4 +-
|
||||||
|
3 files changed, 29 insertions(+), 89 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-input-settings-private.h b/src/backends/meta-input-settings-private.h
|
||||||
|
index 135b17f1a..f89020884 100644
|
||||||
|
--- a/src/backends/meta-input-settings-private.h
|
||||||
|
+++ b/src/backends/meta-input-settings-private.h
|
||||||
|
@@ -150,11 +150,6 @@ gchar * meta_input_settings_get_pad_action_label (MetaIn
|
||||||
|
MetaPadActionType action,
|
||||||
|
guint number);
|
||||||
|
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
-WacomDevice * meta_input_settings_get_tablet_wacom_device (MetaInputSettings *settings,
|
||||||
|
- ClutterInputDevice *device);
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
void meta_input_settings_maybe_save_numlock_state (MetaInputSettings *input_settings);
|
||||||
|
void meta_input_settings_maybe_restore_numlock_state (MetaInputSettings *input_settings);
|
||||||
|
|
||||||
|
diff --git a/src/backends/meta-input-settings.c b/src/backends/meta-input-settings.c
|
||||||
|
index 7c3afdaff..73f4131fe 100644
|
||||||
|
--- a/src/backends/meta-input-settings.c
|
||||||
|
+++ b/src/backends/meta-input-settings.c
|
||||||
|
@@ -31,6 +31,7 @@
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "backends/meta-backend-private.h"
|
||||||
|
+#include "backends/meta-input-device-private.h"
|
||||||
|
#include "backends/meta-input-settings-private.h"
|
||||||
|
#include "backends/meta-input-mapper-private.h"
|
||||||
|
#include "backends/meta-logical-monitor.h"
|
||||||
|
@@ -59,9 +60,6 @@ struct _DeviceMappingInfo
|
||||||
|
ClutterInputDevice *device;
|
||||||
|
GSettings *settings;
|
||||||
|
gulong changed_id;
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
- WacomDevice *wacom_device;
|
||||||
|
-#endif
|
||||||
|
guint *group_modes;
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -85,10 +83,6 @@ struct _MetaInputSettingsPrivate
|
||||||
|
|
||||||
|
ClutterVirtualInputDevice *virtual_pad_keyboard;
|
||||||
|
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
- WacomDeviceDatabase *wacom_db;
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
GHashTable *two_finger_devices;
|
||||||
|
|
||||||
|
/* Pad ring/strip emission */
|
||||||
|
@@ -177,11 +171,6 @@ meta_input_settings_dispose (GObject *object)
|
||||||
|
|
||||||
|
g_clear_object (&priv->monitor_manager);
|
||||||
|
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
- if (priv->wacom_db)
|
||||||
|
- libwacom_database_destroy (priv->wacom_db);
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
g_clear_pointer (&priv->two_finger_devices, g_hash_table_destroy);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (meta_input_settings_parent_class)->dispose (object);
|
||||||
|
@@ -576,9 +565,8 @@ device_is_tablet_touchpad (MetaInputSettings *input_settings,
|
||||||
|
if (clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
- wacom_device =
|
||||||
|
- meta_input_settings_get_tablet_wacom_device (input_settings,
|
||||||
|
- device);
|
||||||
|
+ wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device));
|
||||||
|
+
|
||||||
|
if (wacom_device)
|
||||||
|
{
|
||||||
|
flags = libwacom_get_integration_flags (wacom_device);
|
||||||
|
@@ -953,8 +941,7 @@ meta_input_settings_delegate_on_mapper (MetaInputSettings *input_settings,
|
||||||
|
WacomIntegrationFlags flags = 0;
|
||||||
|
|
||||||
|
wacom_device =
|
||||||
|
- meta_input_settings_get_tablet_wacom_device (input_settings,
|
||||||
|
- device);
|
||||||
|
+ meta_input_device_get_wacom_device (META_INPUT_DEVICE (device));
|
||||||
|
|
||||||
|
if (wacom_device)
|
||||||
|
{
|
||||||
|
@@ -991,8 +978,8 @@ update_tablet_keep_aspect (MetaInputSettings *input_settings,
|
||||||
|
{
|
||||||
|
WacomDevice *wacom_device;
|
||||||
|
|
||||||
|
- wacom_device = meta_input_settings_get_tablet_wacom_device (input_settings,
|
||||||
|
- device);
|
||||||
|
+ wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device));
|
||||||
|
+
|
||||||
|
/* Keep aspect only makes sense in external tablets */
|
||||||
|
if (wacom_device &&
|
||||||
|
libwacom_get_integration_flags (wacom_device) != WACOM_DEVICE_INTEGRATED_NONE)
|
||||||
|
@@ -1081,8 +1068,8 @@ update_tablet_mapping (MetaInputSettings *input_settings,
|
||||||
|
{
|
||||||
|
WacomDevice *wacom_device;
|
||||||
|
|
||||||
|
- wacom_device = meta_input_settings_get_tablet_wacom_device (input_settings,
|
||||||
|
- device);
|
||||||
|
+ wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device));
|
||||||
|
+
|
||||||
|
/* Tablet mapping only makes sense on external tablets */
|
||||||
|
if (wacom_device &&
|
||||||
|
(libwacom_get_integration_flags (wacom_device) != WACOM_DEVICE_INTEGRATED_NONE))
|
||||||
|
@@ -1121,8 +1108,8 @@ update_tablet_area (MetaInputSettings *input_settings,
|
||||||
|
{
|
||||||
|
WacomDevice *wacom_device;
|
||||||
|
|
||||||
|
- wacom_device = meta_input_settings_get_tablet_wacom_device (input_settings,
|
||||||
|
- device);
|
||||||
|
+ wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device));
|
||||||
|
+
|
||||||
|
/* Tablet area only makes sense on system/display integrated tablets */
|
||||||
|
if (wacom_device &&
|
||||||
|
(libwacom_get_integration_flags (wacom_device) &
|
||||||
|
@@ -1163,8 +1150,8 @@ update_tablet_left_handed (MetaInputSettings *input_settings,
|
||||||
|
{
|
||||||
|
WacomDevice *wacom_device;
|
||||||
|
|
||||||
|
- wacom_device = meta_input_settings_get_tablet_wacom_device (input_settings,
|
||||||
|
- device);
|
||||||
|
+ wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device));
|
||||||
|
+
|
||||||
|
/* Left handed mode only makes sense on external tablets */
|
||||||
|
if (wacom_device &&
|
||||||
|
(libwacom_get_integration_flags (wacom_device) != WACOM_DEVICE_INTEGRATED_NONE))
|
||||||
|
@@ -1643,10 +1630,6 @@ input_mapper_device_mapped_cb (MetaInputMapper *mapper,
|
||||||
|
static void
|
||||||
|
device_mapping_info_free (DeviceMappingInfo *info)
|
||||||
|
{
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
- if (info->wacom_device)
|
||||||
|
- libwacom_destroy (info->wacom_device);
|
||||||
|
-#endif
|
||||||
|
g_clear_signal_handler (&info->changed_id, info->settings);
|
||||||
|
g_object_unref (info->settings);
|
||||||
|
g_free (info->group_modes);
|
||||||
|
@@ -1683,26 +1666,6 @@ check_add_mappable_device (MetaInputSettings *input_settings,
|
||||||
|
info->device = device;
|
||||||
|
info->settings = settings;
|
||||||
|
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
- if (device_type == CLUTTER_TABLET_DEVICE ||
|
||||||
|
- device_type == CLUTTER_PAD_DEVICE)
|
||||||
|
- {
|
||||||
|
- WacomError *error = libwacom_error_new ();
|
||||||
|
-
|
||||||
|
- info->wacom_device = libwacom_new_from_path (priv->wacom_db,
|
||||||
|
- clutter_input_device_get_device_node (device),
|
||||||
|
- WFALLBACK_NONE, error);
|
||||||
|
- if (!info->wacom_device)
|
||||||
|
- {
|
||||||
|
- g_warning ("Could not get tablet information for '%s': %s",
|
||||||
|
- clutter_input_device_get_device_name (device),
|
||||||
|
- libwacom_error_get_message (error));
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- libwacom_error_free (&error);
|
||||||
|
- }
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
if (device_type == CLUTTER_PAD_DEVICE)
|
||||||
|
{
|
||||||
|
info->group_modes =
|
||||||
|
@@ -2078,15 +2041,6 @@ meta_input_settings_init (MetaInputSettings *settings)
|
||||||
|
g_signal_connect (priv->monitor_manager, "power-save-mode-changed",
|
||||||
|
G_CALLBACK (power_save_mode_changed_cb), settings);
|
||||||
|
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
- priv->wacom_db = libwacom_database_new ();
|
||||||
|
- if (!priv->wacom_db)
|
||||||
|
- {
|
||||||
|
- g_warning ("Could not create database of Wacom devices, "
|
||||||
|
- "expect tablets to misbehave");
|
||||||
|
- }
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
priv->two_finger_devices = g_hash_table_new (NULL, NULL);
|
||||||
|
|
||||||
|
priv->input_mapper = meta_input_mapper_new ();
|
||||||
|
@@ -2171,25 +2125,6 @@ meta_input_settings_get_pad_button_action (MetaInputSettings *input_settings,
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#ifdef HAVE_LIBWACOM
|
||||||
|
-WacomDevice *
|
||||||
|
-meta_input_settings_get_tablet_wacom_device (MetaInputSettings *settings,
|
||||||
|
- ClutterInputDevice *device)
|
||||||
|
-{
|
||||||
|
- MetaInputSettingsPrivate *priv;
|
||||||
|
- DeviceMappingInfo *info;
|
||||||
|
-
|
||||||
|
- g_return_val_if_fail (META_IS_INPUT_SETTINGS (settings), NULL);
|
||||||
|
- g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL);
|
||||||
|
-
|
||||||
|
- priv = meta_input_settings_get_instance_private (settings);
|
||||||
|
- info = g_hash_table_lookup (priv->mappable_devices, device);
|
||||||
|
- g_return_val_if_fail (info != NULL, NULL);
|
||||||
|
-
|
||||||
|
- return info->wacom_device;
|
||||||
|
-}
|
||||||
|
-#endif /* HAVE_LIBWACOM */
|
||||||
|
-
|
||||||
|
static gboolean
|
||||||
|
cycle_logical_monitors (MetaInputSettings *settings,
|
||||||
|
MetaLogicalMonitor *current_logical_monitor,
|
||||||
|
@@ -2234,6 +2169,9 @@ meta_input_settings_cycle_tablet_output (MetaInputSettings *input_settings,
|
||||||
|
DeviceMappingInfo *info;
|
||||||
|
MetaLogicalMonitor *logical_monitor = NULL;
|
||||||
|
const gchar *edid[4] = { 0 }, *pretty_name = NULL;
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+ WacomDevice *wacom_device;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
g_return_if_fail (META_IS_INPUT_SETTINGS (input_settings));
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
|
||||||
|
@@ -2245,13 +2183,15 @@ meta_input_settings_cycle_tablet_output (MetaInputSettings *input_settings,
|
||||||
|
g_return_if_fail (info != NULL);
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
- if (info->wacom_device)
|
||||||
|
+ wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device));
|
||||||
|
+
|
||||||
|
+ if (wacom_device)
|
||||||
|
{
|
||||||
|
/* Output rotation only makes sense on external tablets */
|
||||||
|
- if (libwacom_get_integration_flags (info->wacom_device) != WACOM_DEVICE_INTEGRATED_NONE)
|
||||||
|
+ if (libwacom_get_integration_flags (wacom_device) != WACOM_DEVICE_INTEGRATED_NONE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
- pretty_name = libwacom_get_name (info->wacom_device);
|
||||||
|
+ pretty_name = libwacom_get_name (wacom_device);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@@ -2393,13 +2333,18 @@ meta_input_settings_handle_pad_button (MetaInputSettings *input_settin
|
||||||
|
const gchar *pretty_name = NULL;
|
||||||
|
MetaInputSettingsPrivate *priv;
|
||||||
|
DeviceMappingInfo *info;
|
||||||
|
+#ifdef HAVE_LIBWACOM
|
||||||
|
+ WacomDevice *wacom_device;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
|
info = g_hash_table_lookup (priv->mappable_devices, pad);
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
- if (info && info->wacom_device)
|
||||||
|
- pretty_name = libwacom_get_name (info->wacom_device);
|
||||||
|
+ wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (pad));
|
||||||
|
+
|
||||||
|
+ if (wacom_device)
|
||||||
|
+ pretty_name = libwacom_get_name (wacom_device);
|
||||||
|
#endif
|
||||||
|
meta_display_notify_pad_group_switch (meta_get_display (), pad,
|
||||||
|
pretty_name, group, mode, n_modes);
|
||||||
|
diff --git a/src/core/display.c b/src/core/display.c
|
||||||
|
index 6a7e75d55..6377ed697 100644
|
||||||
|
--- a/src/core/display.c
|
||||||
|
+++ b/src/core/display.c
|
||||||
|
@@ -44,6 +44,7 @@
|
||||||
|
#include "backends/meta-cursor-sprite-xcursor.h"
|
||||||
|
#include "backends/meta-cursor-tracker-private.h"
|
||||||
|
#include "backends/meta-idle-monitor-dbus.h"
|
||||||
|
+#include "backends/meta-input-device-private.h"
|
||||||
|
#include "backends/meta-input-settings-private.h"
|
||||||
|
#include "backends/meta-logical-monitor.h"
|
||||||
|
#include "backends/meta-stage-private.h"
|
||||||
|
@@ -2988,8 +2989,7 @@ meta_display_request_pad_osd (MetaDisplay *display,
|
||||||
|
logical_monitor =
|
||||||
|
meta_input_settings_get_tablet_logical_monitor (input_settings, pad);
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
- wacom_device = meta_input_settings_get_tablet_wacom_device (input_settings,
|
||||||
|
- pad);
|
||||||
|
+ wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (pad));
|
||||||
|
layout_path = libwacom_get_layout_filename (wacom_device);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
@ -0,0 +1,49 @@
|
|||||||
|
From d4c070da88d94a8d6e3e96348b97ce46f93430ab Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||||
|
Date: Sat, 21 Mar 2020 18:24:52 +0100
|
||||||
|
Subject: [PATCH 48/48] window: Really propagate effective on-all-workspaces
|
||||||
|
setting to transients
|
||||||
|
|
||||||
|
Commit cda9579034b fixed a corner case when setting the initial workspace
|
||||||
|
state of transient windows, but it still missed a case:
|
||||||
|
|
||||||
|
should_be_on_all_workspaces() returns whether the window should be on all
|
||||||
|
workspaces according to its properties/placement, but it doesn't take
|
||||||
|
transient relations into account.
|
||||||
|
|
||||||
|
That means in case of nested transients, we can still fail the assert:
|
||||||
|
|
||||||
|
1. on-all-workspaces toplevel
|
||||||
|
2. should_be_on_all_workspaces() is TRUE for the first transient's parent,
|
||||||
|
as the window from (1) has on_all_workspaces_requested == TRUE
|
||||||
|
3. should_be_on_all_workspaces() is FALSE for the second transient's
|
||||||
|
parent, as the window from (2) is only on-all-workspace because
|
||||||
|
of its parent
|
||||||
|
|
||||||
|
We can fix this by either using the state from the root ancestor
|
||||||
|
instead of the direct transient parent, or by using the parent's
|
||||||
|
on_all_workspaces_state.
|
||||||
|
|
||||||
|
The latter is simpler, so go with that.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/mutter/issues/1083
|
||||||
|
---
|
||||||
|
src/core/window.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/window.c b/src/core/window.c
|
||||||
|
index 5a9341578..06988dd1b 100644
|
||||||
|
--- a/src/core/window.c
|
||||||
|
+++ b/src/core/window.c
|
||||||
|
@@ -1319,7 +1319,7 @@ _meta_window_shared_new (MetaDisplay *display,
|
||||||
|
|
||||||
|
g_warn_if_fail (!window->transient_for->override_redirect);
|
||||||
|
set_workspace_state (window,
|
||||||
|
- should_be_on_all_workspaces (window->transient_for),
|
||||||
|
+ window->transient_for->on_all_workspaces,
|
||||||
|
window->transient_for->workspace);
|
||||||
|
}
|
||||||
|
else if (window->on_all_workspaces)
|
||||||
|
--
|
||||||
|
2.26.0.rc2
|
||||||
|
|
62
mutter.spec
62
mutter.spec
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
Name: mutter
|
Name: mutter
|
||||||
Version: 3.36.0
|
Version: 3.36.0
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
Summary: Window and compositing manager based on Clutter
|
Summary: Window and compositing manager based on Clutter
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -18,11 +18,60 @@ Source0: http://download.gnome.org/sources/%{name}/3.36/%{name}-%{version}
|
|||||||
|
|
||||||
# Work-around for OpenJDK's compliance test
|
# Work-around for OpenJDK's compliance test
|
||||||
Patch0: 0001-window-actor-Special-case-shaped-Java-windows.patch
|
Patch0: 0001-window-actor-Special-case-shaped-Java-windows.patch
|
||||||
# Fix preedit string cursor position bug
|
# All patches from 3.36.0 to d4c070da88d94a8d6e3e96348b97ce46f93430ab
|
||||||
# https://gitlab.gnome.org/GNOME/gtk/issues/2517
|
# Including fixes for preedit issue:
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1812449
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1812449
|
||||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1132
|
# and output problems on X11 with 4k displays and/or scaling:
|
||||||
Patch1: 0001-wayland-Represent-preedit-string-cursor-offset-in-by.patch
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1809717
|
||||||
|
Patch0001: 0001-Update-Serbian-translation.patch
|
||||||
|
Patch0002: 0002-screen-cast-stream-src-Don-t-complain-when-we-can-t-.patch
|
||||||
|
Patch0003: 0003-screen-cast-stream-src-Don-t-leak-GSource.patch
|
||||||
|
Patch0004: 0004-xwayland-Log-actual-error-message-if-available.patch
|
||||||
|
Patch0005: 0005-meson-Expand-on-xwayland_initfd-option-description.patch
|
||||||
|
Patch0006: 0006-cursor-renderer-native-Refactor-init-to-per-gpu.patch
|
||||||
|
Patch0007: 0007-cursor-renderer-native-Handle-GPU-hotplug.patch
|
||||||
|
Patch0008: 0008-window-actor-X11-Update-shape-input-and-opaque-regio.patch
|
||||||
|
Patch0009: 0009-window-x11-Add-function-to-convert-the-surface-to-cl.patch
|
||||||
|
Patch0010: 0010-window-actor-x11-Compute-client-area-from-surface-si.patch
|
||||||
|
Patch0011: 0011-window-actor-Add-API-to-update-regions.patch
|
||||||
|
Patch0012: 0012-xwayland-Update-regions-on-texture-updates.patch
|
||||||
|
Patch0013: 0013-window-actor-x11-Use-the-new-MetaShapedTexture-API.patch
|
||||||
|
Patch0014: 0014-window-x11-Rename-meta_window_x11_buffer_rect_to_fra.patch
|
||||||
|
Patch0015: 0015-xwayland-Fix-mime-type-atom-list-leak-on-DnD-with-mo.patch
|
||||||
|
Patch0016: 0016-monitor-config-manager-Respect-layout-mode-when-calc.patch
|
||||||
|
Patch0017: 0017-crtc-xrandr-Compare-right-coordinate-when-checking-a.patch
|
||||||
|
Patch0018: 0018-wayland-Don-t-crash-when-trying-to-fullscreen-on-ine.patch
|
||||||
|
Patch0019: 0019-keybindings-Move-common-window-grab-code-out-of-X-on.patch
|
||||||
|
Patch0020: 0020-kms-impl-device-Clean-up-state-if-drm-resources-disa.patch
|
||||||
|
Patch0021: 0021-cogl-Add-main-header-for-Cogl.patch
|
||||||
|
Patch0022: 0022-cogl-Fix-build-error-when-GL_ARB_sync-is-not-defined.patch
|
||||||
|
Patch0023: 0023-keybindings-Avoid-double-calls-to-process_event-on-t.patch
|
||||||
|
Patch0024: 0024-keybindings-Check-the-special-modifiers-specifically.patch
|
||||||
|
Patch0025: 0025-input-settings-Wire-up-middle-emulation.patch
|
||||||
|
Patch0026: 0026-input-settings-x11-Fix-typo-in-has_udev_property.patch
|
||||||
|
Patch0027: 0027-input-settings-Specify-middle-click-emulation-key.patch
|
||||||
|
Patch0028: 0028-cursor-renderer-native-Skip-hw-cursor-upload-if-we-c.patch
|
||||||
|
Patch0029: 0029-cogl-texture-Add-some-missing-array-annotations.patch
|
||||||
|
Patch0030: 0030-clutter-stage-Add-annotations-to-clutter_stage_captu.patch
|
||||||
|
Patch0031: 0031-wayland-window-Ignore-state-changes-for-popups.patch
|
||||||
|
Patch0032: 0032-wayland-Represent-preedit-string-cursor-offset-in-by.patch
|
||||||
|
Patch0033: 0033-kms-impl-simple-Handle-lack-of-cached-mode-set-in-fl.patch
|
||||||
|
Patch0034: 0034-monitor-manager-Remove-mirror-capability.patch
|
||||||
|
Patch0035: 0035-clutter-stage-Rename-parameters-to-match-documentati.patch
|
||||||
|
Patch0036: 0036-Update-Romanian-translation.patch
|
||||||
|
Patch0037: 0037-x11-Handle-windowing-errors-while-writing-selection-.patch
|
||||||
|
Patch0038: 0038-backends-x11-Observe-multiple-pad-mode-switch-button.patch
|
||||||
|
Patch0039: 0039-surface-actor-Fix-memory-leak.patch
|
||||||
|
Patch0040: 0040-surface-actor-Add-culling-offset-for-geometry-scale.patch
|
||||||
|
Patch0041: 0041-backends-use-the-enum-name-instead-of-a-literal-0.patch
|
||||||
|
Patch0042: 0042-wayland-Handle-NULL-preedit-text.patch
|
||||||
|
Patch0043: 0043-backends-Add-mapping-function-arg-to-settings_set_bo.patch
|
||||||
|
Patch0044: 0044-backends-Fix-configuration-changes-to-tap-and-drag.patch
|
||||||
|
Patch0045: 0045-backends-Add-MetaInputDevice-derivable-class.patch
|
||||||
|
Patch0046: 0046-backends-x11-Drop-internal-WacomDevice-lookups.patch
|
||||||
|
Patch0047: 0047-backends-Drop-internal-WacomDevice-in-MetaInputSetti.patch
|
||||||
|
Patch0048: 0048-window-Really-propagate-effective-on-all-workspaces-.patch
|
||||||
|
|
||||||
|
|
||||||
BuildRequires: chrpath
|
BuildRequires: chrpath
|
||||||
BuildRequires: pango-devel
|
BuildRequires: pango-devel
|
||||||
@ -168,6 +217,9 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
|
|||||||
%{_datadir}/mutter-%{mutter_api_version}/tests
|
%{_datadir}/mutter-%{mutter_api_version}/tests
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Mar 24 2020 Adam Williamson <awilliam@redhat.com> - 3.36.0-3
|
||||||
|
- Backport all patches to git master for various fixes inc (#1809717)
|
||||||
|
|
||||||
* Mon Mar 23 2020 Adam Williamson <awilliam@redhat.com> - 3.36.0-2
|
* Mon Mar 23 2020 Adam Williamson <awilliam@redhat.com> - 3.36.0-2
|
||||||
- Backport fix for preedit cursor position bug (#1812449)
|
- Backport fix for preedit cursor position bug (#1812449)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user