parent
e689fb0a4a
commit
6270fb04b2
@ -0,0 +1,51 @@
|
|||||||
|
From eea9b9a0dac494698a64892bab8d042e7d623c9f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Cenk Uluisik <cenk.uluisik@googlemail.com>
|
||||||
|
Date: Sun, 6 Mar 2022 19:32:48 +0100
|
||||||
|
Subject: [PATCH] introspect: Add WindowsChanged signal
|
||||||
|
|
||||||
|
The screencast portal supports recording a single window,
|
||||||
|
and presents a list of open windows when that option is
|
||||||
|
selected. To allow updating that list when windows are
|
||||||
|
opened or closed, add a new "WindowsChanged" signal that
|
||||||
|
the portal can listen to.
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2229>
|
||||||
|
---
|
||||||
|
data/dbus-interfaces/org.gnome.Shell.Introspect.xml | 6 ++++++
|
||||||
|
js/misc/introspect.js | 3 +++
|
||||||
|
2 files changed, 9 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/data/dbus-interfaces/org.gnome.Shell.Introspect.xml b/data/dbus-interfaces/org.gnome.Shell.Introspect.xml
|
||||||
|
index 47fd7efdc2..cb19cfec56 100644
|
||||||
|
--- a/data/dbus-interfaces/org.gnome.Shell.Introspect.xml
|
||||||
|
+++ b/data/dbus-interfaces/org.gnome.Shell.Introspect.xml
|
||||||
|
@@ -18,6 +18,12 @@
|
||||||
|
-->
|
||||||
|
<signal name="RunningApplicationsChanged" />
|
||||||
|
|
||||||
|
+ <!--
|
||||||
|
+ WindowsChanged:
|
||||||
|
+ @short_description: Notifies when any window opens or closes
|
||||||
|
+ -->
|
||||||
|
+ <signal name="WindowsChanged" />
|
||||||
|
+
|
||||||
|
<!--
|
||||||
|
GetRunningApplications:
|
||||||
|
@short_description: Retrieves the description of all running applications
|
||||||
|
diff --git a/js/misc/introspect.js b/js/misc/introspect.js
|
||||||
|
index 45eee81ce3..8916804e7f 100644
|
||||||
|
--- a/js/misc/introspect.js
|
||||||
|
+++ b/js/misc/introspect.js
|
||||||
|
@@ -42,6 +42,9 @@ var IntrospectService = class {
|
||||||
|
this._syncRunningApplications();
|
||||||
|
});
|
||||||
|
|
||||||
|
+ tracker.connect('tracked-windows-changed',
|
||||||
|
+ () => this._dbusImpl.emit_signal('WindowsChanged', null));
|
||||||
|
+
|
||||||
|
this._syncRunningApplications();
|
||||||
|
|
||||||
|
this._senderChecker = new DBusSenderChecker(APP_ALLOWLIST);
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
@ -0,0 +1,48 @@
|
|||||||
|
From 5aeb97faee1aba8f6d4cc2c613691a7e2c880ccc Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||||
|
Date: Thu, 17 Nov 2022 15:21:42 +0100
|
||||||
|
Subject: [PATCH] layout: Initialize regions unconditionally
|
||||||
|
|
||||||
|
We currently initialize regions in all code paths except for the
|
||||||
|
greeter. But while there are no windows on the login screen, the
|
||||||
|
work area can still be used for positioning, for example for
|
||||||
|
notifications.
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2546>
|
||||||
|
---
|
||||||
|
js/ui/layout.js | 15 +++++++--------
|
||||||
|
1 file changed, 7 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/js/ui/layout.js b/js/ui/layout.js
|
||||||
|
index 70ece6cab..c6712459a 100644
|
||||||
|
--- a/js/ui/layout.js
|
||||||
|
+++ b/js/ui/layout.js
|
||||||
|
@@ -649,18 +649,17 @@ var LayoutManager = GObject.registerClass({
|
||||||
|
reactive: true });
|
||||||
|
this.addChrome(this._coverPane);
|
||||||
|
|
||||||
|
+ // Force an update of the regions before we scale the UI group to
|
||||||
|
+ // get the correct allocation for the struts.
|
||||||
|
+ // Do this even when we don't animate on restart, so that maximized
|
||||||
|
+ // windows restore to the right size.
|
||||||
|
+ this._updateRegions();
|
||||||
|
+
|
||||||
|
if (Meta.is_restart()) {
|
||||||
|
- // On restart, we don't do an animation. Force an update of the
|
||||||
|
- // regions immediately so that maximized windows restore to the
|
||||||
|
- // right size taking struts into account.
|
||||||
|
- this._updateRegions();
|
||||||
|
+ // On restart, we don't do an animation.
|
||||||
|
} else if (Main.sessionMode.isGreeter) {
|
||||||
|
this.panelBox.translation_y = -this.panelBox.height;
|
||||||
|
} else {
|
||||||
|
- // We need to force an update of the regions now before we scale
|
||||||
|
- // the UI group to get the correct allocation for the struts.
|
||||||
|
- this._updateRegions();
|
||||||
|
-
|
||||||
|
this.keyboardBox.hide();
|
||||||
|
|
||||||
|
let monitor = this.primaryMonitor;
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
@ -0,0 +1,148 @@
|
|||||||
|
From ea7e7acd45e428cc17306de2bf65730c90d7e118 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sebastian Keller <skeller@gnome.org>
|
||||||
|
Date: Mon, 23 May 2022 23:01:23 +0200
|
||||||
|
Subject: [PATCH] magnifier: Request window-relative coordinates for
|
||||||
|
focus/caret events
|
||||||
|
|
||||||
|
Absolute screen coordinates are impossible for Wayland clients to
|
||||||
|
provide, because the clients don't know where the window is positioned.
|
||||||
|
Some clients, such as the ones using GTK 3 were providing window
|
||||||
|
relative coordinates even when screen coordinates were requested,
|
||||||
|
while others, such as GTK 4 clients, were just returning an error for
|
||||||
|
caret events or also window-relative coordinates for focus events.
|
||||||
|
|
||||||
|
So for this to work on Wayland we have to request window-relative
|
||||||
|
coordinates and translate them to the current focus window.
|
||||||
|
|
||||||
|
To ensure the correct coordinates, we have to only consider events
|
||||||
|
coming from the current focus window. All other events are filtered out
|
||||||
|
now. As a side effect this also fixes the magnifier always jumping
|
||||||
|
to a terminal cursor whenever there was some output, even if the window
|
||||||
|
was not focused.
|
||||||
|
|
||||||
|
This also needs some special handling for events coming from the shell
|
||||||
|
itself, which should not be translated to the focus window either. As
|
||||||
|
another side effect this fixes another bug that was caused by these
|
||||||
|
events already including scaling and getting scaled again.
|
||||||
|
|
||||||
|
Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5509
|
||||||
|
Part-of:
|
||||||
|
<https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2301>
|
||||||
|
---
|
||||||
|
js/ui/magnifier.js | 77 +++++++++++++++++++++++++++++++++++++++++-----
|
||||||
|
1 file changed, 70 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js
|
||||||
|
index 4c2e88f1a..9813664be 100644
|
||||||
|
--- a/js/ui/magnifier.js
|
||||||
|
+++ b/js/ui/magnifier.js
|
||||||
|
@@ -789,21 +789,81 @@ var ZoomRegion = class ZoomRegion {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ _convertExtentsToScreenSpace(accessible, extents) {
|
||||||
|
+ const toplevelWindowTypes = new Set([
|
||||||
|
+ Atspi.Role.FRAME,
|
||||||
|
+ Atspi.Role.DIALOG,
|
||||||
|
+ Atspi.Role.WINDOW,
|
||||||
|
+ ]);
|
||||||
|
+
|
||||||
|
+ try {
|
||||||
|
+ let app = null;
|
||||||
|
+ let parentWindow = null;
|
||||||
|
+ let iter = accessible;
|
||||||
|
+ while (iter) {
|
||||||
|
+ if (iter.get_role() === Atspi.Role.APPLICATION) {
|
||||||
|
+ app = iter;
|
||||||
|
+ /* This is the last Accessible we are interested in */
|
||||||
|
+ break;
|
||||||
|
+ } else if (toplevelWindowTypes.has(iter.get_role())) {
|
||||||
|
+ parentWindow = iter;
|
||||||
|
+ }
|
||||||
|
+ iter = iter.get_parent();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* We don't want to translate our own events to the focus window.
|
||||||
|
+ * They are also already scaled by clutter before being sent, so
|
||||||
|
+ * we don't need to do that here either. */
|
||||||
|
+ if (app && app.get_name() === 'gnome-shell')
|
||||||
|
+ return extents;
|
||||||
|
+
|
||||||
|
+ /* Only events from the focused widget of the focused window. Some
|
||||||
|
+ * widgets seem to claim to have focus when the window does not so
|
||||||
|
+ * check both. */
|
||||||
|
+ const windowActive = parentWindow &&
|
||||||
|
+ parentWindow.get_state_set().contains(Atspi.StateType.ACTIVE);
|
||||||
|
+ const accessibleFocused =
|
||||||
|
+ accessible.get_state_set().contains(Atspi.StateType.FOCUSED);
|
||||||
|
+ if (!windowActive || !accessibleFocused)
|
||||||
|
+ return null;
|
||||||
|
+ } catch (e) {
|
||||||
|
+ throw new Error(`Failed to validate parent window: ${e}`);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ const focusWindowRect = global.display.focus_window?.get_frame_rect();
|
||||||
|
+ if (!focusWindowRect)
|
||||||
|
+ return null;
|
||||||
|
+
|
||||||
|
+ const scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
|
+ const screenSpaceExtents = new Atspi.Rect({
|
||||||
|
+ x: focusWindowRect.x + (scaleFactor * extents.x),
|
||||||
|
+ y: focusWindowRect.y + (scaleFactor * extents.y),
|
||||||
|
+ width: scaleFactor * extents.width,
|
||||||
|
+ height: scaleFactor * extents.height,
|
||||||
|
+ });
|
||||||
|
+
|
||||||
|
+ return screenSpaceExtents;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
_updateFocus(caller, event) {
|
||||||
|
let component = event.source.get_component_iface();
|
||||||
|
if (!component || event.detail1 != 1)
|
||||||
|
return;
|
||||||
|
let extents;
|
||||||
|
try {
|
||||||
|
- extents = component.get_extents(Atspi.CoordType.SCREEN);
|
||||||
|
+ extents = component.get_extents(Atspi.CoordType.WINDOW);
|
||||||
|
+ extents = this._convertExtentsToScreenSpace(event.source, extents);
|
||||||
|
+ if (!extents)
|
||||||
|
+ return;
|
||||||
|
} catch (e) {
|
||||||
|
log(`Failed to read extents of focused component: ${e.message}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
|
- let [xFocus, yFocus] = [(extents.x + (extents.width / 2)) * scaleFactor,
|
||||||
|
- (extents.y + (extents.height / 2)) * scaleFactor];
|
||||||
|
+ const [xFocus, yFocus] = [
|
||||||
|
+ extents.x + (extents.width / 2),
|
||||||
|
+ extents.y + (extents.height / 2),
|
||||||
|
+ ];
|
||||||
|
|
||||||
|
if (this._xFocus !== xFocus || this._yFocus !== yFocus) {
|
||||||
|
[this._xFocus, this._yFocus] = [xFocus, yFocus];
|
||||||
|
@@ -817,14 +877,17 @@ var ZoomRegion = class ZoomRegion {
|
||||||
|
return;
|
||||||
|
let extents;
|
||||||
|
try {
|
||||||
|
- extents = text.get_character_extents(text.get_caret_offset(), 0);
|
||||||
|
+ extents = text.get_character_extents(text.get_caret_offset(),
|
||||||
|
+ Atspi.CoordType.WINDOW);
|
||||||
|
+ extents = this._convertExtentsToScreenSpace(text, extents);
|
||||||
|
+ if (!extents)
|
||||||
|
+ return;
|
||||||
|
} catch (e) {
|
||||||
|
log(`Failed to read extents of text caret: ${e.message}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
|
- let [xCaret, yCaret] = [extents.x * scaleFactor, extents.y * scaleFactor];
|
||||||
|
+ const [xCaret, yCaret] = [extents.x, extents.y];
|
||||||
|
|
||||||
|
// Ignore event(s) if the caret size is none (0x0). This happens a lot if
|
||||||
|
// the cursor offset can't be translated into a location. This is a work
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
@ -0,0 +1,281 @@
|
|||||||
|
From be3a2303cf9ed4077955aaa9fae1fc4cbe2da277 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||||
|
Date: Tue, 24 Jan 2023 17:49:24 +0100
|
||||||
|
Subject: [PATCH] =?UTF-8?q?osk-layouts:=20Replace=20"SS"=20extra=20key=20w?=
|
||||||
|
=?UTF-8?q?ith=20"=E1=BA=9E"?=
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
The on-screen keyboard only handles a single keyval per key, so the
|
||||||
|
current upper-case version of the German "ß" ends up as "S" instead
|
||||||
|
of the expected "SS".
|
||||||
|
|
||||||
|
It is possible to change the keyboard code to emulate multiple key
|
||||||
|
presses/releases for that particular case, but then luckily a proper
|
||||||
|
upper-case form exists nowadays: "ẞ".
|
||||||
|
|
||||||
|
That seems more appropriate for a single key than a dedicated "SS"
|
||||||
|
key, so replace it in all layouts that include it. Anybody who prefers
|
||||||
|
the traditional "SS" can easily tap "S" twice.
|
||||||
|
|
||||||
|
Part-of:
|
||||||
|
<https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2612>
|
||||||
|
---
|
||||||
|
data/osk-layouts/cz.json | 2 +-
|
||||||
|
data/osk-layouts/de.json | 2 +-
|
||||||
|
data/osk-layouts/dk.json | 2 +-
|
||||||
|
data/osk-layouts/ee.json | 2 +-
|
||||||
|
data/osk-layouts/epo.json | 2 +-
|
||||||
|
data/osk-layouts/fi.json | 2 +-
|
||||||
|
data/osk-layouts/hr.json | 2 +-
|
||||||
|
data/osk-layouts/ke.json | 2 +-
|
||||||
|
data/osk-layouts/lt.json | 2 +-
|
||||||
|
data/osk-layouts/lv.json | 2 +-
|
||||||
|
data/osk-layouts/no.json | 2 +-
|
||||||
|
data/osk-layouts/pl.json | 2 +-
|
||||||
|
data/osk-layouts/ro.json | 2 +-
|
||||||
|
data/osk-layouts/se.json | 2 +-
|
||||||
|
data/osk-layouts/sk.json | 2 +-
|
||||||
|
data/osk-layouts/tr.json | 2 +-
|
||||||
|
data/osk-layouts/uk.json | 2 +-
|
||||||
|
data/osk-layouts/us.json | 2 +-
|
||||||
|
18 files changed, 18 insertions(+), 18 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/data/osk-layouts/cz.json b/data/osk-layouts/cz.json
|
||||||
|
index 9bad07402..526cb9cb6 100644
|
||||||
|
--- a/data/osk-layouts/cz.json
|
||||||
|
+++ b/data/osk-layouts/cz.json
|
||||||
|
@@ -246,7 +246,7 @@
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
"Š",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Ś"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
diff --git a/data/osk-layouts/de.json b/data/osk-layouts/de.json
|
||||||
|
index 751a85603..3b1cb34b2 100644
|
||||||
|
--- a/data/osk-layouts/de.json
|
||||||
|
+++ b/data/osk-layouts/de.json
|
||||||
|
@@ -208,7 +208,7 @@
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Ś",
|
||||||
|
"Š"
|
||||||
|
],
|
||||||
|
diff --git a/data/osk-layouts/dk.json b/data/osk-layouts/dk.json
|
||||||
|
index 80df9ae65..7bc6feaf3 100644
|
||||||
|
--- a/data/osk-layouts/dk.json
|
||||||
|
+++ b/data/osk-layouts/dk.json
|
||||||
|
@@ -218,7 +218,7 @@
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Ś",
|
||||||
|
"Š"
|
||||||
|
],
|
||||||
|
diff --git a/data/osk-layouts/ee.json b/data/osk-layouts/ee.json
|
||||||
|
index 5fd2f11fa..b42b0afc9 100644
|
||||||
|
--- a/data/osk-layouts/ee.json
|
||||||
|
+++ b/data/osk-layouts/ee.json
|
||||||
|
@@ -281,7 +281,7 @@
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
"Š",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Ś",
|
||||||
|
"Ş"
|
||||||
|
],
|
||||||
|
diff --git a/data/osk-layouts/epo.json b/data/osk-layouts/epo.json
|
||||||
|
index 71f9ef8d9..d7257625f 100644
|
||||||
|
--- a/data/osk-layouts/epo.json
|
||||||
|
+++ b/data/osk-layouts/epo.json
|
||||||
|
@@ -316,7 +316,7 @@
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Š",
|
||||||
|
"Ś",
|
||||||
|
"Ș",
|
||||||
|
diff --git a/data/osk-layouts/fi.json b/data/osk-layouts/fi.json
|
||||||
|
index 3ba5b567c..d664b0ec5 100644
|
||||||
|
--- a/data/osk-layouts/fi.json
|
||||||
|
+++ b/data/osk-layouts/fi.json
|
||||||
|
@@ -200,7 +200,7 @@
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
"Š",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Ś"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
diff --git a/data/osk-layouts/hr.json b/data/osk-layouts/hr.json
|
||||||
|
index ff0d1d09a..e4977796a 100644
|
||||||
|
--- a/data/osk-layouts/hr.json
|
||||||
|
+++ b/data/osk-layouts/hr.json
|
||||||
|
@@ -168,7 +168,7 @@
|
||||||
|
"S",
|
||||||
|
"Š",
|
||||||
|
"Ś",
|
||||||
|
- "SS"
|
||||||
|
+ "ẞ"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"D",
|
||||||
|
diff --git a/data/osk-layouts/ke.json b/data/osk-layouts/ke.json
|
||||||
|
index 9c3e93565..2bd5b09d0 100644
|
||||||
|
--- a/data/osk-layouts/ke.json
|
||||||
|
+++ b/data/osk-layouts/ke.json
|
||||||
|
@@ -217,7 +217,7 @@
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
- "SS"
|
||||||
|
+ "ẞ"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"D"
|
||||||
|
diff --git a/data/osk-layouts/lt.json b/data/osk-layouts/lt.json
|
||||||
|
index 7cd5352a8..a43ff9146 100644
|
||||||
|
--- a/data/osk-layouts/lt.json
|
||||||
|
+++ b/data/osk-layouts/lt.json
|
||||||
|
@@ -270,7 +270,7 @@
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
"Š",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Ś",
|
||||||
|
"Ş"
|
||||||
|
],
|
||||||
|
diff --git a/data/osk-layouts/lv.json b/data/osk-layouts/lv.json
|
||||||
|
index bab6ae3d7..d72c93c25 100644
|
||||||
|
--- a/data/osk-layouts/lv.json
|
||||||
|
+++ b/data/osk-layouts/lv.json
|
||||||
|
@@ -268,7 +268,7 @@
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
"Š",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Ś",
|
||||||
|
"Ş"
|
||||||
|
],
|
||||||
|
diff --git a/data/osk-layouts/no.json b/data/osk-layouts/no.json
|
||||||
|
index a70be9ca0..0df786853 100644
|
||||||
|
--- a/data/osk-layouts/no.json
|
||||||
|
+++ b/data/osk-layouts/no.json
|
||||||
|
@@ -218,7 +218,7 @@
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Ś",
|
||||||
|
"Š"
|
||||||
|
],
|
||||||
|
diff --git a/data/osk-layouts/pl.json b/data/osk-layouts/pl.json
|
||||||
|
index 4b08cd5d3..8583bd64c 100644
|
||||||
|
--- a/data/osk-layouts/pl.json
|
||||||
|
+++ b/data/osk-layouts/pl.json
|
||||||
|
@@ -212,7 +212,7 @@
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
"Ś",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Š"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
diff --git a/data/osk-layouts/ro.json b/data/osk-layouts/ro.json
|
||||||
|
index c690f4ecd..8d4676126 100644
|
||||||
|
--- a/data/osk-layouts/ro.json
|
||||||
|
+++ b/data/osk-layouts/ro.json
|
||||||
|
@@ -188,7 +188,7 @@
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
"Ș",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Ś",
|
||||||
|
"Š"
|
||||||
|
],
|
||||||
|
diff --git a/data/osk-layouts/se.json b/data/osk-layouts/se.json
|
||||||
|
index 513a0b897..0ebb756e7 100644
|
||||||
|
--- a/data/osk-layouts/se.json
|
||||||
|
+++ b/data/osk-layouts/se.json
|
||||||
|
@@ -245,7 +245,7 @@
|
||||||
|
"Ś",
|
||||||
|
"Š",
|
||||||
|
"Ş",
|
||||||
|
- "SS"
|
||||||
|
+ "ẞ"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"D",
|
||||||
|
diff --git a/data/osk-layouts/sk.json b/data/osk-layouts/sk.json
|
||||||
|
index 678232b82..a74ad0b61 100644
|
||||||
|
--- a/data/osk-layouts/sk.json
|
||||||
|
+++ b/data/osk-layouts/sk.json
|
||||||
|
@@ -269,7 +269,7 @@
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
"Š",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Ś",
|
||||||
|
"Ş"
|
||||||
|
],
|
||||||
|
diff --git a/data/osk-layouts/tr.json b/data/osk-layouts/tr.json
|
||||||
|
index b3786cc88..8243aafad 100644
|
||||||
|
--- a/data/osk-layouts/tr.json
|
||||||
|
+++ b/data/osk-layouts/tr.json
|
||||||
|
@@ -202,7 +202,7 @@
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
"Ş",
|
||||||
|
- "SS",
|
||||||
|
+ "ẞ",
|
||||||
|
"Ś",
|
||||||
|
"Š"
|
||||||
|
],
|
||||||
|
diff --git a/data/osk-layouts/uk.json b/data/osk-layouts/uk.json
|
||||||
|
index c36a723a0..19f5aa6d9 100644
|
||||||
|
--- a/data/osk-layouts/uk.json
|
||||||
|
+++ b/data/osk-layouts/uk.json
|
||||||
|
@@ -216,7 +216,7 @@
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
- "SS"
|
||||||
|
+ "ẞ"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"D"
|
||||||
|
diff --git a/data/osk-layouts/us.json b/data/osk-layouts/us.json
|
||||||
|
index 94dd6d3ad..dd0cd368f 100644
|
||||||
|
--- a/data/osk-layouts/us.json
|
||||||
|
+++ b/data/osk-layouts/us.json
|
||||||
|
@@ -216,7 +216,7 @@
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"S",
|
||||||
|
- "SS"
|
||||||
|
+ "ẞ"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"D"
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,36 @@
|
|||||||
|
From 187b851530f5e76786784ec9df235304c8ddede8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||||
|
Date: Wed, 4 Aug 2021 19:46:34 +0200
|
||||||
|
Subject: [PATCH] st/icon: Only get resource-scale after peeking theme node
|
||||||
|
|
||||||
|
If an actor is not on any stage view, then it doesn't have a valid
|
||||||
|
resource scale, which will hit an assert later.
|
||||||
|
|
||||||
|
When that is the case (for example when running headless), we expect
|
||||||
|
that there is no valid theme node (yet) either, so simply moving
|
||||||
|
the clutter_actor_get_resource_scale() call after peeking at the
|
||||||
|
theme node is enough to avoid the crash.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4522
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1935>
|
||||||
|
---
|
||||||
|
src/st/st-icon.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/st/st-icon.c b/src/st/st-icon.c
|
||||||
|
index 0405d85259..e4d6e05f94 100644
|
||||||
|
--- a/src/st/st-icon.c
|
||||||
|
+++ b/src/st/st-icon.c
|
||||||
|
@@ -462,6 +462,8 @@ st_icon_update (StIcon *icon)
|
||||||
|
|
||||||
|
resource_scale = clutter_actor_get_resource_scale (CLUTTER_ACTOR (icon));
|
||||||
|
|
||||||
|
+ resource_scale = clutter_actor_get_resource_scale (CLUTTER_ACTOR (icon));
|
||||||
|
+
|
||||||
|
stage = clutter_actor_get_stage (CLUTTER_ACTOR (icon));
|
||||||
|
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
|
||||||
|
g_object_get (context, "scale-factor", &paint_scale, NULL);
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,64 @@
|
|||||||
|
From a1d650ce2722fd154b047ce73fa23db205d823d2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Mon, 12 Dec 2022 13:04:11 +0100
|
||||||
|
Subject: [PATCH] window-tracker: Emit 'tracked-windows-changed' on title
|
||||||
|
changes
|
||||||
|
|
||||||
|
This means the screen share window view gets updated also when the title
|
||||||
|
of a window changes. This is important since it often changes shortly
|
||||||
|
after mapping, which would otherwise go unnoticed by
|
||||||
|
xdg-desktop-portal-gnome.
|
||||||
|
|
||||||
|
An example is launching Files and it showing up as 'Loading..', or
|
||||||
|
launching a terminal, and it not showing the proper title (current
|
||||||
|
directory), but some place holder that is never visible on the
|
||||||
|
application window.
|
||||||
|
|
||||||
|
Adding it to the window tracker instead of in introspect.js itself is
|
||||||
|
for convenience - there is no per window signal tracking there, and it
|
||||||
|
already listens to the signal emissions about changed windows.
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2578>
|
||||||
|
---
|
||||||
|
src/shell-window-tracker.c | 11 +++++++++++
|
||||||
|
1 file changed, 11 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/shell-window-tracker.c b/src/shell-window-tracker.c
|
||||||
|
index 991613ea3f..df357f81b7 100644
|
||||||
|
--- a/src/shell-window-tracker.c
|
||||||
|
+++ b/src/shell-window-tracker.c
|
||||||
|
@@ -524,6 +524,15 @@ on_wm_class_changed (MetaWindow *window,
|
||||||
|
tracked_window_changed (self, window);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+on_title_changed (MetaWindow *window,
|
||||||
|
+ GParamSpec *pspec,
|
||||||
|
+ gpointer user_data)
|
||||||
|
+{
|
||||||
|
+ ShellWindowTracker *self = SHELL_WINDOW_TRACKER (user_data);
|
||||||
|
+ tracked_window_changed (self, window);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
on_gtk_application_id_changed (MetaWindow *window,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
@@ -554,6 +563,7 @@ track_window (ShellWindowTracker *self,
|
||||||
|
g_hash_table_insert (self->window_to_app, window, app);
|
||||||
|
|
||||||
|
g_signal_connect (window, "notify::wm-class", G_CALLBACK (on_wm_class_changed), self);
|
||||||
|
+ g_signal_connect (window, "notify::title", G_CALLBACK (on_title_changed), self);
|
||||||
|
g_signal_connect (window, "notify::gtk-application-id", G_CALLBACK (on_gtk_application_id_changed), self);
|
||||||
|
g_signal_connect (window, "unmanaged", G_CALLBACK (on_window_unmanaged), self);
|
||||||
|
|
||||||
|
@@ -586,6 +596,7 @@ disassociate_window (ShellWindowTracker *self,
|
||||||
|
|
||||||
|
_shell_app_remove_window (app, window);
|
||||||
|
g_signal_handlers_disconnect_by_func (window, G_CALLBACK (on_wm_class_changed), self);
|
||||||
|
+ g_signal_handlers_disconnect_by_func (window, G_CALLBACK (on_title_changed), self);
|
||||||
|
g_signal_handlers_disconnect_by_func (window, G_CALLBACK (on_gtk_application_id_changed), self);
|
||||||
|
g_signal_handlers_disconnect_by_func (window, G_CALLBACK (on_window_unmanaged), self);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
From e3823964957ba4dcc86b21db09b280b9299bc8cc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Fri, 10 Feb 2023 15:07:50 +0100
|
||||||
|
Subject: [PATCH] window-tracker: Only emit ::tracked-windows-changed on title
|
||||||
|
changes
|
||||||
|
|
||||||
|
Since commit a1d650ce27, window title changes are listened for in the
|
||||||
|
ShellWindowTracker in order to emit ::tracked-windows-changed when
|
||||||
|
there are window title changes.
|
||||||
|
|
||||||
|
The rest of the things that happen in between (removing the window
|
||||||
|
from a ShellApp, possibly have it destroyed, and possibly creating a
|
||||||
|
new ShellApp to re-insert the window) are superfluous and even result
|
||||||
|
in the altTab switcher popup ending up confused about the applications
|
||||||
|
available.
|
||||||
|
|
||||||
|
Only emit the signal so changes can be followed on D-Bus, but avoid
|
||||||
|
the ShellApp fiddling otherwise.
|
||||||
|
|
||||||
|
Fixes: a1d650ce27 - window-tracker: Emit 'tracked-windows-changed' on title changes
|
||||||
|
|
||||||
|
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6385
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2634>
|
||||||
|
(cherry picked from commit 41c91c7a3b7f186720a0a518ef2211cb744421f3)
|
||||||
|
---
|
||||||
|
src/shell-window-tracker.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/shell-window-tracker.c b/src/shell-window-tracker.c
|
||||||
|
index bc14040d9b..01143dfd7f 100644
|
||||||
|
--- a/src/shell-window-tracker.c
|
||||||
|
+++ b/src/shell-window-tracker.c
|
||||||
|
@@ -524,7 +524,7 @@ on_title_changed (MetaWindow *window,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
ShellWindowTracker *self = SHELL_WINDOW_TRACKER (user_data);
|
||||||
|
- tracked_window_changed (self, window);
|
||||||
|
+ g_signal_emit (self, signals[TRACKED_WINDOWS_CHANGED], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,92 @@
|
|||||||
|
From ce8ac36613ef4fbb697fc9f6613844168c05a8d3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
|
Date: Fri, 8 Oct 2021 11:08:17 -0400
|
||||||
|
Subject: [PATCH 1/2] unlockDialog: Don't create AuthDialog just to finish it
|
||||||
|
|
||||||
|
If the the unlock dialog gets finished before an auth dialog is
|
||||||
|
created, the code currently creates one just to tell it to finish.
|
||||||
|
|
||||||
|
This commit changes the code to skip creating the auth dialog in
|
||||||
|
that case.
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1999>
|
||||||
|
---
|
||||||
|
js/ui/unlockDialog.js | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js
|
||||||
|
index c81c6184a9..d8c45f7510 100644
|
||||||
|
--- a/js/ui/unlockDialog.js
|
||||||
|
+++ b/js/ui/unlockDialog.js
|
||||||
|
@@ -884,7 +884,11 @@ var UnlockDialog = GObject.registerClass({
|
||||||
|
}
|
||||||
|
|
||||||
|
finish(onComplete) {
|
||||||
|
- this._ensureAuthPrompt();
|
||||||
|
+ if (!this._authPrompt) {
|
||||||
|
+ onComplete();
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
this._authPrompt.finish(onComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.39.1
|
||||||
|
|
||||||
|
|
||||||
|
From 2a513d44e7b887b355d6b71cf88c4114a8b685f8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
|
Date: Tue, 5 Oct 2021 11:01:19 -0400
|
||||||
|
Subject: [PATCH 2/2] unlockDialog: Properly reset auth prompt when showing it
|
||||||
|
|
||||||
|
If a user hits escape twice really fast when coming back to
|
||||||
|
their machine to unlock it, they made end up getting presented
|
||||||
|
with a non-functional unlock screen that doesn't show their
|
||||||
|
user icon and doesn't ask for a password.
|
||||||
|
|
||||||
|
This is because showPrompt assumes that if an auth prompt already
|
||||||
|
exists, it's ready to go. That may not be true, if it's in the
|
||||||
|
process of getting torn down at the time because it's in the middle
|
||||||
|
of a cancel animation.
|
||||||
|
|
||||||
|
This commit solves the problem by ensuring the auth prompt is always
|
||||||
|
in a fresh reset state before showing it.
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1999>
|
||||||
|
---
|
||||||
|
js/ui/unlockDialog.js | 18 ++++++++----------
|
||||||
|
1 file changed, 8 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js
|
||||||
|
index d8c45f7510..00e3eef971 100644
|
||||||
|
--- a/js/ui/unlockDialog.js
|
||||||
|
+++ b/js/ui/unlockDialog.js
|
||||||
|
@@ -689,16 +689,14 @@ var UnlockDialog = GObject.registerClass({
|
||||||
|
}
|
||||||
|
|
||||||
|
_ensureAuthPrompt() {
|
||||||
|
- if (this._authPrompt)
|
||||||
|
- return;
|
||||||
|
-
|
||||||
|
- this._authPrompt = new AuthPrompt.AuthPrompt(this._gdmClient,
|
||||||
|
- AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
|
||||||
|
- this._authPrompt.connect('failed', this._fail.bind(this));
|
||||||
|
- this._authPrompt.connect('cancelled', this._fail.bind(this));
|
||||||
|
- this._authPrompt.connect('reset', this._onReset.bind(this));
|
||||||
|
-
|
||||||
|
- this._promptBox.add_child(this._authPrompt);
|
||||||
|
+ if (!this._authPrompt) {
|
||||||
|
+ this._authPrompt = new AuthPrompt.AuthPrompt(this._gdmClient,
|
||||||
|
+ AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
|
||||||
|
+ this._authPrompt.connect('failed', this._fail.bind(this));
|
||||||
|
+ this._authPrompt.connect('cancelled', this._fail.bind(this));
|
||||||
|
+ this._authPrompt.connect('reset', this._onReset.bind(this));
|
||||||
|
+ this._promptBox.add_child(this._authPrompt);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
this._authPrompt.reset();
|
||||||
|
this._authPrompt.updateSensitivity(true);
|
||||||
|
--
|
||||||
|
2.39.1
|
||||||
|
|
Loading…
Reference in new issue