Compare commits

...

No commits in common. 'i10c-beta' and 'c9' have entirely different histories.

2
.gitignore vendored

@ -1 +1 @@
SOURCES/gnome-shell-47.alpha.tar.xz SOURCES/gnome-shell-40.10.tar.xz

@ -1 +1 @@
e38a2e3b7dc71883a73c6be7fef1ce83f2c8d83c SOURCES/gnome-shell-47.alpha.tar.xz c955a004fb650a83863d1151e3adbbd6758b1c2e SOURCES/gnome-shell-40.10.tar.xz

@ -0,0 +1,25 @@
From a8c8b7ef31f7219157b94148b771f6f663928dea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 19 Apr 2022 19:17:48 +0200
Subject: [PATCH] Revert "dash: Subtract vertical margins from availHeight"
This reverts commit 0de0a1f5940784eb4a7ca9ecf5e92f5277ceb0d8.
---
js/ui/dash.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/js/ui/dash.js b/js/ui/dash.js
index f35cc2e25..0f1ca2c4c 100644
--- a/js/ui/dash.js
+++ b/js/ui/dash.js
@@ -610,7 +610,6 @@ var Dash = GObject.registerClass({
(iconChildren.length - 1) * spacing;
let availHeight = this._maxHeight;
- availHeight -= this.margin_top + this.margin_bottom;
availHeight -= this._background.get_theme_node().get_vertical_padding();
availHeight -= themeNode.get_vertical_padding();
availHeight -= buttonHeight - iconHeight;
--
2.35.1

@ -0,0 +1,364 @@
From 678cdd9e0da851da78527fa827d71a80273510b0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@redhat.com>
Date: Tue, 8 Feb 2022 14:18:04 -0500
---
data/theme/gnome-shell-high-contrast.css | 36 ++++++++++++++++++++++++
data/theme/gnome-shell.css | 36 ++++++++++++++++++++++++
2 files changed, 72 insertions(+)
diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css
index b73f407..90f363c 100644
--- a/data/theme/gnome-shell-high-contrast.css
+++ b/data/theme/gnome-shell-high-contrast.css
@@ -1223,60 +1223,63 @@ StScrollBar {
-panel-corner-border-color: transparent;
-panel-corner-opacity: 1;
transition-duration: 250ms; }
#panel .panel-button {
font-weight: bold;
color: #ddd;
-natural-hpadding: 12px;
-minimum-hpadding: 6px;
transition-duration: 150ms;
border: 3px solid transparent;
border-radius: 99px; }
#panel .panel-button.clock-display .clock {
transition-duration: 150ms;
border: 3px solid transparent;
border-radius: 99px; }
#panel .panel-button:hover, #panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.2); }
#panel .panel-button.clock-display:hover, #panel .panel-button.clock-display:active, #panel .panel-button.clock-display:overview, #panel .panel-button.clock-display:focus, #panel .panel-button.clock-display:checked {
box-shadow: none; }
#panel .panel-button.clock-display:hover .clock, #panel .panel-button.clock-display:active .clock, #panel .panel-button.clock-display:overview .clock, #panel .panel-button.clock-display:focus .clock, #panel .panel-button.clock-display:checked .clock {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.2); }
#panel .panel-button .system-status-icon {
icon-size: 1.09em;
padding: 5px;
margin: 0 4px; }
#panel .panel-button .panel-status-indicators-box .system-status-icon,
#panel .panel-button .panel-status-menu-box .system-status-icon {
margin: 0; }
#panel .panel-button .app-menu-icon {
-st-icon-style: symbolic; }
+ #panel .panel-button .panel-logo-icon {
+ padding-right: .4em;
+ icon-size: 1em; }
#panel #panelActivities.panel-button {
-natural-hpadding: 18px; }
#panel.unlock-screen .panel-button:hover, #panel.unlock-screen .panel-button:active, #panel.unlock-screen .panel-button:overview, #panel.unlock-screen .panel-button:focus, #panel.unlock-screen .panel-button:checked, #panel.login-screen .panel-button:hover, #panel.login-screen .panel-button:active, #panel.login-screen .panel-button:overview, #panel.login-screen .panel-button:focus, #panel.login-screen .panel-button:checked, #panel:overview .panel-button:hover, #panel:overview .panel-button:active, #panel:overview .panel-button:overview, #panel:overview .panel-button:focus, #panel:overview .panel-button:checked {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.15); }
#panel.unlock-screen .panel-button.clock-display:hover, #panel.unlock-screen .panel-button.clock-display:active, #panel.unlock-screen .panel-button.clock-display:overview, #panel.unlock-screen .panel-button.clock-display:focus, #panel.unlock-screen .panel-button.clock-display:checked, #panel.login-screen .panel-button.clock-display:hover, #panel.login-screen .panel-button.clock-display:active, #panel.login-screen .panel-button.clock-display:overview, #panel.login-screen .panel-button.clock-display:focus, #panel.login-screen .panel-button.clock-display:checked, #panel:overview .panel-button.clock-display:hover, #panel:overview .panel-button.clock-display:active, #panel:overview .panel-button.clock-display:overview, #panel:overview .panel-button.clock-display:focus, #panel:overview .panel-button.clock-display:checked {
box-shadow: none; }
#panel.unlock-screen .panel-button.clock-display:hover .clock, #panel.unlock-screen .panel-button.clock-display:active .clock, #panel.unlock-screen .panel-button.clock-display:overview .clock, #panel.unlock-screen .panel-button.clock-display:focus .clock, #panel.unlock-screen .panel-button.clock-display:checked .clock, #panel.login-screen .panel-button.clock-display:hover .clock, #panel.login-screen .panel-button.clock-display:active .clock, #panel.login-screen .panel-button.clock-display:overview .clock, #panel.login-screen .panel-button.clock-display:focus .clock, #panel.login-screen .panel-button.clock-display:checked .clock, #panel:overview .panel-button.clock-display:hover .clock, #panel:overview .panel-button.clock-display:active .clock, #panel:overview .panel-button.clock-display:overview .clock, #panel:overview .panel-button.clock-display:focus .clock, #panel:overview .panel-button.clock-display:checked .clock {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.15); }
#panel .panel-status-indicators-box,
#panel .panel-status-menu-box {
spacing: 2px; }
#panel .power-status.panel-status-indicators-box {
spacing: 0; }
#panel .screencast-indicator,
#panel .remote-access-indicator {
color: #f57900; }
#appMenu {
spacing: 6px; }
#appMenu .label-shadow {
color: transparent; }
#appMenu .panel-status-menu-box {
padding: 0 6px;
spacing: 6px; }
/* Activities Ripple */
.ripple-box {
background-color: rgba(158, 196, 235, 0.3);
box-shadow: 0 0 2px 2px #4a90d9;
@@ -2039,74 +2042,107 @@ StScrollBar {
width: 2.18em;
height: 2.18em;
border-color: #202020;
background-color: #202020; }
.login-dialog .cancel-button StIcon,
.login-dialog .switch-user-button StIcon,
.login-dialog .login-dialog-session-list-button StIcon,
.unlock-dialog .cancel-button StIcon,
.unlock-dialog .switch-user-button StIcon,
.unlock-dialog .login-dialog-session-list-button StIcon {
icon-size: 1.09em; }
.login-dialog .caps-lock-warning-label,
.login-dialog .login-dialog-message-warning,
.unlock-dialog .caps-lock-warning-label,
.unlock-dialog .login-dialog-message-warning {
color: #eeeeec; }
.login-dialog-logo-bin {
padding: 24px 0px; }
.login-dialog-banner {
color: #d6d6d1; }
.login-dialog-button-box {
width: 23em;
spacing: 5px; }
.login-dialog-message {
text-align: center; }
+.login-dialog-message-hint, .login-dialog-message {
+ color: #bebeb6;
+ min-height: 2.75em; }
+
.login-dialog-user-selection-box {
padding: 100px 0px; }
.login-dialog-not-listed-label {
padding-left: 2px; }
.login-dialog-not-listed-button:focus .login-dialog-not-listed-label, .login-dialog-not-listed-button:hover .login-dialog-not-listed-label {
color: #eeeeec; }
.login-dialog-not-listed-label {
font-size: 10pt;
font-weight: bold;
color: #a6a69b;
padding-top: 1em; }
+.login-dialog-auth-list-view {
+ -st-vfade-offset: 1em; }
+
+.login-dialog-auth-list {
+ spacing: 6px;
+ margin-left: 2em; }
+
+.login-dialog-auth-list-title {
+ margin-left: 2em; }
+
+.login-dialog-auth-list-item {
+ border-radius: 12px;
+ padding: 6px;
+ color: #a6a69b; }
+ .login-dialog-auth-list-item:focus, .login-dialog-auth-list-item:selected {
+ background-color: #215d9c;
+ color: #ffffff; }
+
+.login-dialog-auth-list-label {
+ font-size: 13pt;
+ font-weight: bold;
+ padding-left: 15px; }
+ .login-dialog-auth-list-label:ltr {
+ padding-left: 14px;
+ text-align: left; }
+ .login-dialog-auth-list-label:rtl {
+ padding-right: 14px;
+ text-align: right; }
+
.login-dialog-user-list-view {
-st-vfade-offset: 1em; }
.login-dialog-user-list {
spacing: 12px;
width: 23em; }
.login-dialog-user-list:expanded .login-dialog-user-list-item:selected {
background-color: #215d9c;
color: #ffffff; }
.login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in {
border-right: 2px solid #215d9c; }
.login-dialog-user-list-item {
border-radius: 12px;
padding: 6px;
color: #a6a69b; }
.login-dialog-user-list-item:ltr .user-widget {
padding-right: 1em; }
.login-dialog-user-list-item:rtl .user-widget {
padding-left: 1em; }
.login-dialog-user-list-item .login-dialog-timed-login-indicator {
height: 2px;
margin-top: 6px;
background-color: #eeeeec; }
.login-dialog-user-list-item:focus .login-dialog-timed-login-indicator {
background-color: #ffffff; }
.user-widget-label {
color: #eeeeec; }
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index f93819b..d3d7fc8 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -1223,60 +1223,63 @@ StScrollBar {
-panel-corner-border-color: transparent;
-panel-corner-opacity: 1;
transition-duration: 250ms; }
#panel .panel-button {
font-weight: bold;
color: #ddd;
-natural-hpadding: 12px;
-minimum-hpadding: 6px;
transition-duration: 150ms;
border: 3px solid transparent;
border-radius: 99px; }
#panel .panel-button.clock-display .clock {
transition-duration: 150ms;
border: 3px solid transparent;
border-radius: 99px; }
#panel .panel-button:hover, #panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.2); }
#panel .panel-button.clock-display:hover, #panel .panel-button.clock-display:active, #panel .panel-button.clock-display:overview, #panel .panel-button.clock-display:focus, #panel .panel-button.clock-display:checked {
box-shadow: none; }
#panel .panel-button.clock-display:hover .clock, #panel .panel-button.clock-display:active .clock, #panel .panel-button.clock-display:overview .clock, #panel .panel-button.clock-display:focus .clock, #panel .panel-button.clock-display:checked .clock {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.2); }
#panel .panel-button .system-status-icon {
icon-size: 1.09em;
padding: 5px;
margin: 0 4px; }
#panel .panel-button .panel-status-indicators-box .system-status-icon,
#panel .panel-button .panel-status-menu-box .system-status-icon {
margin: 0; }
#panel .panel-button .app-menu-icon {
-st-icon-style: symbolic; }
+ #panel .panel-button .panel-logo-icon {
+ padding-right: .4em;
+ icon-size: 1em; }
#panel #panelActivities.panel-button {
-natural-hpadding: 18px; }
#panel.unlock-screen .panel-button:hover, #panel.unlock-screen .panel-button:active, #panel.unlock-screen .panel-button:overview, #panel.unlock-screen .panel-button:focus, #panel.unlock-screen .panel-button:checked, #panel.login-screen .panel-button:hover, #panel.login-screen .panel-button:active, #panel.login-screen .panel-button:overview, #panel.login-screen .panel-button:focus, #panel.login-screen .panel-button:checked, #panel:overview .panel-button:hover, #panel:overview .panel-button:active, #panel:overview .panel-button:overview, #panel:overview .panel-button:focus, #panel:overview .panel-button:checked {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.15); }
#panel.unlock-screen .panel-button.clock-display:hover, #panel.unlock-screen .panel-button.clock-display:active, #panel.unlock-screen .panel-button.clock-display:overview, #panel.unlock-screen .panel-button.clock-display:focus, #panel.unlock-screen .panel-button.clock-display:checked, #panel.login-screen .panel-button.clock-display:hover, #panel.login-screen .panel-button.clock-display:active, #panel.login-screen .panel-button.clock-display:overview, #panel.login-screen .panel-button.clock-display:focus, #panel.login-screen .panel-button.clock-display:checked, #panel:overview .panel-button.clock-display:hover, #panel:overview .panel-button.clock-display:active, #panel:overview .panel-button.clock-display:overview, #panel:overview .panel-button.clock-display:focus, #panel:overview .panel-button.clock-display:checked {
box-shadow: none; }
#panel.unlock-screen .panel-button.clock-display:hover .clock, #panel.unlock-screen .panel-button.clock-display:active .clock, #panel.unlock-screen .panel-button.clock-display:overview .clock, #panel.unlock-screen .panel-button.clock-display:focus .clock, #panel.unlock-screen .panel-button.clock-display:checked .clock, #panel.login-screen .panel-button.clock-display:hover .clock, #panel.login-screen .panel-button.clock-display:active .clock, #panel.login-screen .panel-button.clock-display:overview .clock, #panel.login-screen .panel-button.clock-display:focus .clock, #panel.login-screen .panel-button.clock-display:checked .clock, #panel:overview .panel-button.clock-display:hover .clock, #panel:overview .panel-button.clock-display:active .clock, #panel:overview .panel-button.clock-display:overview .clock, #panel:overview .panel-button.clock-display:focus .clock, #panel:overview .panel-button.clock-display:checked .clock {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.15); }
#panel .panel-status-indicators-box,
#panel .panel-status-menu-box {
spacing: 2px; }
#panel .power-status.panel-status-indicators-box {
spacing: 0; }
#panel .screencast-indicator,
#panel .remote-access-indicator {
color: #f57900; }
#appMenu {
spacing: 6px; }
#appMenu .label-shadow {
color: transparent; }
#appMenu .panel-status-menu-box {
padding: 0 6px;
spacing: 6px; }
/* Activities Ripple */
.ripple-box {
background-color: rgba(188, 214, 246, 0.3);
box-shadow: 0 0 2px 2px #629fea;
@@ -2039,74 +2042,107 @@ StScrollBar {
width: 2.18em;
height: 2.18em;
border-color: #202020;
background-color: #202020; }
.login-dialog .cancel-button StIcon,
.login-dialog .switch-user-button StIcon,
.login-dialog .login-dialog-session-list-button StIcon,
.unlock-dialog .cancel-button StIcon,
.unlock-dialog .switch-user-button StIcon,
.unlock-dialog .login-dialog-session-list-button StIcon {
icon-size: 1.09em; }
.login-dialog .caps-lock-warning-label,
.login-dialog .login-dialog-message-warning,
.unlock-dialog .caps-lock-warning-label,
.unlock-dialog .login-dialog-message-warning {
color: #eeeeec; }
.login-dialog-logo-bin {
padding: 24px 0px; }
.login-dialog-banner {
color: #d6d6d1; }
.login-dialog-button-box {
width: 23em;
spacing: 5px; }
.login-dialog-message {
text-align: center; }
+.login-dialog-message-hint, .login-dialog-message {
+ color: #bebeb6;
+ min-height: 2.75em; }
+
.login-dialog-user-selection-box {
padding: 100px 0px; }
.login-dialog-not-listed-label {
padding-left: 2px; }
.login-dialog-not-listed-button:focus .login-dialog-not-listed-label, .login-dialog-not-listed-button:hover .login-dialog-not-listed-label {
color: #eeeeec; }
.login-dialog-not-listed-label {
font-size: 10pt;
font-weight: bold;
color: #a6a69b;
padding-top: 1em; }
+.login-dialog-auth-list-view {
+ -st-vfade-offset: 1em; }
+
+.login-dialog-auth-list {
+ spacing: 6px;
+ margin-left: 2em; }
+
+.login-dialog-auth-list-title {
+ margin-left: 2em; }
+
+.login-dialog-auth-list-item {
+ border-radius: 12px;
+ padding: 6px;
+ color: #a6a69b; }
+ .login-dialog-auth-list-item:focus, .login-dialog-auth-list-item:selected {
+ background-color: #1b6acb;
+ color: #fff; }
+
+.login-dialog-auth-list-label {
+ font-size: 13pt;
+ font-weight: bold;
+ padding-left: 15px; }
+ .login-dialog-auth-list-label:ltr {
+ padding-left: 14px;
+ text-align: left; }
+ .login-dialog-auth-list-label:rtl {
+ padding-right: 14px;
+ text-align: right; }
+
.login-dialog-user-list-view {
-st-vfade-offset: 1em; }
.login-dialog-user-list {
spacing: 12px;
width: 23em; }
.login-dialog-user-list:expanded .login-dialog-user-list-item:selected {
background-color: #1b6acb;
color: #fff; }
.login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in {
border-right: 2px solid #1b6acb; }
.login-dialog-user-list-item {
border-radius: 12px;
padding: 6px;
color: #a6a69b; }
.login-dialog-user-list-item:ltr .user-widget {
padding-right: 1em; }
.login-dialog-user-list-item:rtl .user-widget {
padding-left: 1em; }
.login-dialog-user-list-item .login-dialog-timed-login-indicator {
height: 2px;
margin-top: 6px;
background-color: #eeeeec; }
.login-dialog-user-list-item:focus .login-dialog-timed-login-indicator {
background-color: #fff; }
.user-widget-label {
color: #eeeeec; }
--
2.34.1

@ -1,4 +1,4 @@
From 55c1dfed04084e9dbaf034263172bc745f905718 Mon Sep 17 00:00:00 2001 From afa3fc7be62cf70c9f6c6954e9cf5b49581269fb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 20 May 2015 16:44:00 +0200 Date: Wed, 20 May 2015 16:44:00 +0200
Subject: [PATCH] app: Fall back to window title instead of WM_CLASS Subject: [PATCH] app: Fall back to window title instead of WM_CLASS
@ -11,10 +11,10 @@ a .desktop file ...
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/shell-app.c b/src/shell-app.c diff --git a/src/shell-app.c b/src/shell-app.c
index 04d0ab508b..4a55daf809 100644 index 62ba2ec73..dc0e1c732 100644
--- a/src/shell-app.c --- a/src/shell-app.c
+++ b/src/shell-app.c +++ b/src/shell-app.c
@@ -247,7 +247,7 @@ shell_app_get_name (ShellApp *app) @@ -293,7 +293,7 @@ shell_app_get_name (ShellApp *app)
const char *name = NULL; const char *name = NULL;
if (window) if (window)
@ -24,5 +24,5 @@ index 04d0ab508b..4a55daf809 100644
name = C_("program", "Unknown"); name = C_("program", "Unknown");
return name; return name;
-- --
2.45.2 2.31.1

@ -0,0 +1,100 @@
From ec802e39a5dfb252e2d18b8cb95f713724180565 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 15 May 2023 10:48:15 -0400
Subject: [PATCH] authPrompt: Disregard smartcard status changes events if
VERIFICATION_IN_PROGRESS
commit c8bb45b41c3a13ef161103f649aa18938e028a70 introduced a new
verification state, VERIFICATION_IN_PROGRESS, to detect when the user
has already interacted with the authentication service, so the auth
prompt can rate limit the number of times the user can cancel
authentication attempts with the escape key (without also rate limiting
the number of times they hit escape to go back to the clock without
interacting with the authentication service).
That means there are now two states that represent the
user actively undergoing verification: VERIFYING and
VERIFICATION_IN_PROGRESS.
It's inappropriate to reset the smartcard service if the user is
actively conversing with it. We try to check for that by looking at the
original verification state, VERIFYING, but we unfortunately, neglected
to account for the new VERIFICATION_IN_PROGRESS state.
This commit fixes that oversight, and allows users to again pre-type
their smartcard pin at the clock before inserting their smartcard.
---
js/gdm/authPrompt.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 4da91e096..e961f396e 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -327,61 +327,62 @@ var AuthPrompt = GObject.registerClass({
_onShowChoiceList(userVerifier, serviceName, promptMessage, choiceList) {
if (this._queryingService)
this.clear();
this._queryingService = serviceName;
if (this._preemptiveAnswer)
this._preemptiveAnswer = null;
this.setChoiceList(promptMessage, choiceList);
this.updateSensitivity(true);
this.emit('prompted');
}
_onCredentialManagerAuthenticated() {
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED)
this.reset();
}
_onSmartcardStatusChanged() {
this.smartcardDetected = this._userVerifier.smartcardDetected;
// Most of the time we want to reset if the user inserts or removes
// a smartcard. Smartcard insertion "preempts" what the user was
// doing, and smartcard removal aborts the preemption.
// The exceptions are: 1) Don't reset on smartcard insertion if we're already verifying
// with a smartcard
// 2) Don't reset if we've already succeeded at verification and
// the user is getting logged in.
if (this._userVerifier.serviceIsDefault(GdmUtil.SMARTCARD_SERVICE_NAME) &&
- this.verificationStatus == AuthPromptStatus.VERIFYING &&
+ (this.verificationStatus === AuthPromptStatus.VERIFYING ||
+ this.verificationStatus === AuthPromptStatus.VERIFICATION_IN_PROGRESS) &&
this.smartcardDetected)
return;
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED)
this.reset();
}
_onShowMessage(_userVerifier, serviceName, message, type) {
this.setMessage(serviceName, message, type);
this.emit('prompted');
}
_onVerificationFailed(userVerifier, serviceName, canRetry) {
const wasQueryingService = this._queryingService === serviceName;
if (wasQueryingService) {
this._queryingService = null;
this.clear();
}
this.updateSensitivity(canRetry);
this.setActorInDefaultButtonWell(null);
if (!canRetry)
this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED;
if (wasQueryingService)
Util.wiggle(this._entry);
}
--
2.39.1

@ -1,56 +0,0 @@
From 170ccbd3d237bf980f46ae87e3da8238df9f8a3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 16 Apr 2024 20:49:40 +0200
Subject: [PATCH] data: Update generated stylesheets
---
data/theme/gnome-shell-dark.css | 3 +++
data/theme/gnome-shell-high-contrast.css | 3 +++
data/theme/gnome-shell-light.css | 3 +++
3 files changed, 9 insertions(+)
diff --git a/data/theme/gnome-shell-dark.css b/data/theme/gnome-shell-dark.css
index 339adf7e7b..5dd7d29a3a 100644
--- a/data/theme/gnome-shell-dark.css
+++ b/data/theme/gnome-shell-dark.css
@@ -1720,6 +1720,9 @@ StScrollBar {
min-width: 0.5455em;
min-height: 0.5455em;
background-color: #ffffff; }
+ #panel .panel-button#panelActivities .activities-logo {
+ icon-size: 1.36375em;
+ padding: 0 6px; }
#panel .panel-button.screen-recording-indicator StBoxLayout, #panel .panel-button.screen-sharing-indicator StBoxLayout {
spacing: 0.409em; }
#panel .panel-button.screen-recording-indicator StIcon, #panel .panel-button.screen-sharing-indicator StIcon {
diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css
index 4bb622aa26..8f94fa4101 100644
--- a/data/theme/gnome-shell-high-contrast.css
+++ b/data/theme/gnome-shell-high-contrast.css
@@ -1897,6 +1897,9 @@ StScrollBar {
min-width: 0.5455em;
min-height: 0.5455em;
background-color: #ffffff; }
+ #panel .panel-button#panelActivities .activities-logo {
+ icon-size: 1.36375em;
+ padding: 0 6px; }
#panel .panel-button.screen-recording-indicator StBoxLayout, #panel .panel-button.screen-sharing-indicator StBoxLayout {
spacing: 0.409em; }
#panel .panel-button.screen-recording-indicator StIcon, #panel .panel-button.screen-sharing-indicator StIcon {
diff --git a/data/theme/gnome-shell-light.css b/data/theme/gnome-shell-light.css
index 82a5b0bc18..128aa93dea 100644
--- a/data/theme/gnome-shell-light.css
+++ b/data/theme/gnome-shell-light.css
@@ -1720,6 +1720,9 @@ StScrollBar {
min-width: 0.5455em;
min-height: 0.5455em;
background-color: #282828; }
+ #panel .panel-button#panelActivities .activities-logo {
+ icon-size: 1.36375em;
+ padding: 0 6px; }
#panel .panel-button.screen-recording-indicator StBoxLayout, #panel .panel-button.screen-sharing-indicator StBoxLayout {
spacing: 0.409em; }
#panel .panel-button.screen-recording-indicator StIcon, #panel .panel-button.screen-sharing-indicator StIcon {
--
2.45.2

@ -1,4 +1,4 @@
From 7e82f0a73a1d1576e94b17e21d07fd3978ba7c33 Mon Sep 17 00:00:00 2001 From c18b7b7819f17f5d14be1ba2760653f3d93b81b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Mon, 1 Feb 2021 18:26:00 +0100 Date: Mon, 1 Feb 2021 18:26:00 +0100
Subject: [PATCH] extensionDownloader: Refuse to override system extensions Subject: [PATCH] extensionDownloader: Refuse to override system extensions
@ -9,29 +9,28 @@ upstream version into the user's home directory.
Prevent that by refusing to download and install extensions that are Prevent that by refusing to download and install extensions that are
already installed system-wide. already installed system-wide.
--- ---
js/ui/extensionDownloader.js | 9 +++++++++ js/ui/extensionDownloader.js | 8 ++++++++
1 file changed, 9 insertions(+) 1 file changed, 8 insertions(+)
diff --git a/js/ui/extensionDownloader.js b/js/ui/extensionDownloader.js diff --git a/js/ui/extensionDownloader.js b/js/ui/extensionDownloader.js
index 0366c5dfa8..5b27543aa6 100644 index 6a3b2b488..471ddab14 100644
--- a/js/ui/extensionDownloader.js --- a/js/ui/extensionDownloader.js
+++ b/js/ui/extensionDownloader.js +++ b/js/ui/extensionDownloader.js
@@ -39,6 +39,15 @@ export async function installExtension(uuid, invocation) { @@ -17,6 +17,14 @@ var REPOSITORY_URL_UPDATE = 'https://extensions.gnome.org/update-info/';
return; let _httpSession;
}
function installExtension(uuid, invocation) {
+ const oldExt = Main.extensionManager.lookup(uuid); + const oldExt = Main.extensionManager.lookup(uuid);
+ if (oldExt && oldExt.type === ExtensionUtils.ExtensionType.SYSTEM) { + if (oldExt && oldExt.type === ExtensionUtils.ExtensionType.SYSTEM) {
+ log('extensionDownloader: Trying to replace system extension %s'.format(uuid)); + log('extensionDownloader: Trying to replace system extension %s'.format(uuid));
+ invocation.return_error_literal( + invocation.return_dbus_error('org.gnome.Shell.InstallError',
+ ExtensionErrors, ExtensionError.NOT_ALLOWED,
+ 'System extensions cannot be replaced'); + 'System extensions cannot be replaced');
+ return; + return;
+ } + }
+ +
const params = { let params = { uuid,
uuid, shell_version: Config.PACKAGE_VERSION };
shell_version: Config.PACKAGE_VERSION,
-- --
2.45.2 2.31.1

@ -0,0 +1,92 @@
From 91449e6a19af63eebaf5f97f85ba44f69259075a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Sat, 10 Feb 2024 00:58:27 +0100
Subject: [PATCH] extensionSystem: Support locking down extension installation
Currently extensions can only be locked down completely by
restricting the `enabled-extensions` key via dconf.
This is too restrictive for environments that want to allow users
to customize their system with extensions, while still limiting
the set of possible extensions.
To fill that gap, add a new `allow-extension-installation` setting,
which restricts extensions to system extensions when disabled.
As the setting is mainly intended for locking down by system
administrators, there is no attempt to load/unload extensions
on settings changes.
---
data/org.gnome.shell.gschema.xml.in | 11 +++++++++++
js/ui/extensionDownloader.js | 6 ++++++
js/ui/extensionSystem.js | 8 ++++++--
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
index 6f1c424bad..b5921983cd 100644
--- a/data/org.gnome.shell.gschema.xml.in
+++ b/data/org.gnome.shell.gschema.xml.in
@@ -40,6 +40,17 @@
the “enabled-extension” setting.
</description>
</key>
+ <key name="allow-extension-installation" type="b">
+ <default>true</default>
+ <summary>Allow extension installation</summary>
+ <description>
+ Allow users to install extensions in their home folder. If disabled,
+ the InstallRemoteExtension D-Bus method will fail, and extensions
+ are only loaded from system directories on startup.
+ It does not affect extensions that are already loaded, so a change
+ only takes full effect on the next login.
+ </description>
+ </key>
<key name="disable-extension-version-validation" type="b">
<default>false</default>
<summary>Disables the validation of extension version compatibility</summary>
diff --git a/js/ui/extensionDownloader.js b/js/ui/extensionDownloader.js
index 471ddab147..01ed165c01 100644
--- a/js/ui/extensionDownloader.js
+++ b/js/ui/extensionDownloader.js
@@ -17,6 +17,12 @@ var REPOSITORY_URL_UPDATE = 'https://extensions.gnome.org/update-info/';
let _httpSession;
function installExtension(uuid, invocation) {
+ if (!global.settings.get_boolean('allow-extension-installation')) {
+ invocation.return_dbus_error('org.gnome.Shell.InstallError',
+ 'Extension installation is not allowed');
+ return;
+ }
+
const oldExt = Main.extensionManager.lookup(uuid);
if (oldExt && oldExt.type === ExtensionUtils.ExtensionType.SYSTEM) {
log('extensionDownloader: Trying to replace system extension %s'.format(uuid));
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
index 937f861994..528d9ea450 100644
--- a/js/ui/extensionSystem.js
+++ b/js/ui/extensionSystem.js
@@ -64,7 +64,10 @@ var ExtensionManager = class {
get updatesSupported() {
const appSys = Shell.AppSystem.get_default();
- return appSys.lookup_app('org.gnome.Extensions.desktop') !== null;
+ const hasUpdatesApp =
+ appSys.lookup_app('org.gnome.Extensions.desktop') !== null;
+ const allowed = global.settings.get_boolean('allow-extension-installation');
+ return allowed && hasUpdatesApp;
}
lookup(uuid) {
@@ -595,7 +598,8 @@ var ExtensionManager = class {
this._enabledExtensions = this._getEnabledExtensions();
let perUserDir = Gio.File.new_for_path(global.userdatadir);
- FileUtils.collectFromDatadirs('extensions', true, (dir, info) => {
+ const includeUserDir = global.settings.get_boolean('allow-extension-installation');
+ FileUtils.collectFromDatadirs('extensions', includeUserDir, (dir, info) => {
let fileType = info.get_file_type();
if (fileType != Gio.FileType.DIRECTORY)
return;
--
2.43.0

@ -1,67 +0,0 @@
From ff73f820b1398e5d60b8984b0003db46ad70b8ec Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
Date: Wed, 28 Apr 2021 16:50:03 +0200
Subject: [PATCH] gdm: Work around failing fingerprint auth
On Fedora we have the problem that fingerprint auth fails immediately if
the PAM configuration has not been updated and no prints are enrolled.
So, consider a verification failure within one second to be a service
failure instead.
---
js/gdm/util.js | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/js/gdm/util.js b/js/gdm/util.js
index 97df6d687e..371953cb25 100644
--- a/js/gdm/util.js
+++ b/js/gdm/util.js
@@ -109,6 +109,7 @@ export class ShellUserVerifier extends Signals.EventEmitter {
this._defaultService = null;
this._preemptingService = null;
this._fingerprintReaderType = FingerprintReaderType.NONE;
+ this._fprintStartTime = -1;
this._messageQueue = [];
this._messageQueueTimeoutId = 0;
@@ -669,6 +670,10 @@ export class ShellUserVerifier extends Signals.EventEmitter {
this._hold.acquire();
try {
this._activeServices.add(serviceName);
+
+ if (serviceName == FINGERPRINT_SERVICE_NAME)
+ this._fprintStartTime = GLib.get_monotonic_time();
+
if (this._userName) {
await this._userVerifier.call_begin_verification_for_user(
serviceName, this._userName, this._cancellable);
@@ -763,6 +768,7 @@ export class ShellUserVerifier extends Signals.EventEmitter {
const cancellable = this._cancellable;
this._fingerprintFailedId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
FINGERPRINT_ERROR_TIMEOUT_WAIT, () => {
+ log("Generating _verificationFailed!");
this._fingerprintFailedId = 0;
if (!cancellable.is_cancelled())
this._verificationFailed(serviceName, false);
@@ -829,6 +835,18 @@ export class ShellUserVerifier extends Signals.EventEmitter {
if (serviceName === FINGERPRINT_SERVICE_NAME) {
if (this._fingerprintFailedId)
GLib.source_remove(this._fingerprintFailedId);
+
+ // On Fedora we have the problem that fingerprint auth fails
+ // immediately if the PAM configuration has not been updated and no
+ // prints are enrolled.
+ // So, consider a verification failure within one second to be a service
+ // failure instead.
+ if (this._fprintStartTime > GLib.get_monotonic_time() - GLib.USEC_PER_SEC) {
+ log("Fingerprint service failed almost immediately, considering it unavailable.");
+ log("Please fix your configuration by running: authselect select --force sssd with-fingerprint with-silent-lastlog");
+ this._onServiceUnavailable(this._client, serviceName, null);
+ return;
+ }
}
// For Not Listed / enterprise logins, immediately reset
--
2.43.2

@ -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,33 @@
From b73a07c20a522b3be0e096625c21d5606bcb7d82 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Mon, 21 Jun 2021 16:32:50 -0300
Subject: [PATCH] introspect: Allowlist GNOME portal
It too implements app listing and introspection, so list it in the
allowlist.
Part-of:
<https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1894>
---
js/misc/introspect.js | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/js/misc/introspect.js b/js/misc/introspect.js
index f3c938af9..45eee81ce 100644
--- a/js/misc/introspect.js
+++ b/js/misc/introspect.js
@@ -1,7 +1,10 @@
/* exported IntrospectService */
const { Gio, GLib, Meta, Shell, St } = imports.gi;
-const APP_ALLOWLIST = ['org.freedesktop.impl.portal.desktop.gtk'];
+const APP_ALLOWLIST = [
+ 'org.freedesktop.impl.portal.desktop.gtk',
+ 'org.freedesktop.impl.portal.desktop.gnome',
+];
const INTROSPECT_DBUS_API_VERSION = 3;
--
2.38.1

@ -0,0 +1,51 @@
From bd4fef8354ff0730c1e96a47d77adbb4a4d7beaa Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Tue, 14 Jun 2022 16:38:27 +0200
Subject: [PATCH] kbdA11yDialog: Use MetaKeyboardA11yFlags
The change in mutter to move keyboard accessibility into backends needs
to be applied in gnome-shell as well, otherwise the keyboard
accessibility dialog cannot work.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2306
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2334>
---
js/ui/kbdA11yDialog.js | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/js/ui/kbdA11yDialog.js b/js/ui/kbdA11yDialog.js
index a45e02443..60ec161a6 100644
--- a/js/ui/kbdA11yDialog.js
+++ b/js/ui/kbdA11yDialog.js
@@ -1,5 +1,5 @@
/* exported KbdA11yDialog */
-const { Clutter, Gio, GObject } = imports.gi;
+const { Clutter, Gio, GObject, Meta } = imports.gi;
const Dialog = imports.ui.dialog;
const ModalDialog = imports.ui.modalDialog;
@@ -25,17 +25,17 @@ class KbdA11yDialog extends GObject.Object {
let title, description;
let key, enabled;
- if (whatChanged & Clutter.KeyboardA11yFlags.SLOW_KEYS_ENABLED) {
+ if (whatChanged & Meta.KeyboardA11yFlags.SLOW_KEYS_ENABLED) {
key = KEY_SLOW_KEYS_ENABLED;
- enabled = (newFlags & Clutter.KeyboardA11yFlags.SLOW_KEYS_ENABLED) > 0;
+ enabled = (newFlags & Meta.KeyboardA11yFlags.SLOW_KEYS_ENABLED) > 0;
title = enabled
? _("Slow Keys Turned On")
: _("Slow Keys Turned Off");
description = _('You just held down the Shift key for 8 seconds. This is the shortcut ' +
'for the Slow Keys feature, which affects the way your keyboard works.');
- } else if (whatChanged & Clutter.KeyboardA11yFlags.STICKY_KEYS_ENABLED) {
+ } else if (whatChanged & Meta.KeyboardA11yFlags.STICKY_KEYS_ENABLED) {
key = KEY_STICKY_KEYS_ENABLED;
- enabled = (newFlags & Clutter.KeyboardA11yFlags.STICKY_KEYS_ENABLED) > 0;
+ enabled = (newFlags & Meta.KeyboardA11yFlags.STICKY_KEYS_ENABLED) > 0;
title = enabled
? _("Sticky Keys Turned On")
: _("Sticky Keys Turned Off");
--
2.36.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,83 @@
From 4ad30b5c506ab043c2091441021b6cf334e2412f Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 26 Jun 2017 14:35:05 -0400
Subject: [PATCH] loginDialog: make info messages themed
They were lacking a definition before leading them to
show up invisible.
---
data/theme/gnome-shell-sass/widgets/_login-dialog.scss | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/data/theme/gnome-shell-sass/widgets/_login-dialog.scss b/data/theme/gnome-shell-sass/widgets/_login-dialog.scss
index 1789beca9..84539342d 100644
--- a/data/theme/gnome-shell-sass/widgets/_login-dialog.scss
+++ b/data/theme/gnome-shell-sass/widgets/_login-dialog.scss
@@ -66,60 +66,64 @@
border-color: darken($selected_bg_color, 10%);
background-color: darken($selected_bg_color, 10%);
color: transparentize($selected_fg_color, 0.3);
}
}
}
.cancel-button,
.switch-user-button,
.login-dialog-session-list-button {
padding: 0;
border-radius: 99px;
width: $base_icon_size * 2;
height: $base_icon_size * 2;
border-color: darken($system_bg_color, 3%);
background-color: darken($system_bg_color, 3%);
StIcon { icon-size: $base_icon_size; }
}
.caps-lock-warning-label,
.login-dialog-message-warning {
color: $osd_fg_color;
}
}
.login-dialog-logo-bin { padding: 24px 0px; }
.login-dialog-banner { color: darken($osd_fg_color,10%); }
.login-dialog-button-box { width: 23em; spacing: 5px; }
.login-dialog-message { text-align: center; }
+.login-dialog-message-hint, .login-dialog-message {
+ color: darken($osd_fg_color, 20%);
+ min-height: 2.75em;
+}
.login-dialog-user-selection-box { padding: 100px 0px; }
.login-dialog-not-listed-label {
padding-left: 2px;
.login-dialog-not-listed-button:focus &,
.login-dialog-not-listed-button:hover & {
color: $osd_fg_color;
}
}
.login-dialog-not-listed-label {
@include fontsize($base_font_size - 1);
font-weight: bold;
color: darken($osd_fg_color,30%);
padding-top: 1em;
}
.login-dialog-user-list-view { -st-vfade-offset: 1em; }
.login-dialog-user-list {
spacing: 12px;
width: 23em;
&:expanded .login-dialog-user-list-item:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
&:expanded .login-dialog-user-list-item:logged-in { border-right: 2px solid $selected_bg_color; }
}
.login-dialog-user-list-item {
border-radius: $base_border_radius + 4px;
padding: 6px;
color: darken($osd_fg_color,30%);
&:ltr .user-widget { padding-right: 1em; }
&:rtl .user-widget { padding-left: 1em; }
--
2.34.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

@ -1,4 +1,4 @@
From 2060b040f91c3751861a1c1b985c5fe8cc891d58 Mon Sep 17 00:00:00 2001 From f54c3f9f66001c210e10fda6aa17b9218fb67dc1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 29 Oct 2020 18:21:06 +0100 Date: Thu, 29 Oct 2020 18:21:06 +0100
Subject: [PATCH] main: Dump stack on segfaults by default Subject: [PATCH] main: Dump stack on segfaults by default
@ -8,10 +8,10 @@ Subject: [PATCH] main: Dump stack on segfaults by default
1 file changed, 6 insertions(+), 2 deletions(-) 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/main.c b/src/main.c diff --git a/src/main.c b/src/main.c
index 4be47258eb..b324b6b96a 100644 index 5d07a4301..ed0b78dcc 100644
--- a/src/main.c --- a/src/main.c
+++ b/src/main.c +++ b/src/main.c
@@ -47,6 +47,7 @@ static char *script_path = NULL; @@ -38,6 +38,7 @@ static int caught_signal = 0;
#define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1 #define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1
#define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4 #define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4
@ -19,7 +19,7 @@ index 4be47258eb..b324b6b96a 100644
enum { enum {
SHELL_DEBUG_BACKTRACE_WARNINGS = 1, SHELL_DEBUG_BACKTRACE_WARNINGS = 1,
SHELL_DEBUG_BACKTRACE_SEGFAULTS = 2, SHELL_DEBUG_BACKTRACE_SEGFAULTS = 2,
@@ -381,8 +382,11 @@ shell_init_debug (const char *debug_env) @@ -279,8 +280,11 @@ shell_init_debug (const char *debug_env)
{ "backtrace-segfaults", SHELL_DEBUG_BACKTRACE_SEGFAULTS }, { "backtrace-segfaults", SHELL_DEBUG_BACKTRACE_SEGFAULTS },
}; };
@ -32,7 +32,7 @@ index 4be47258eb..b324b6b96a 100644
+ _shell_debug = DEFAULT_SHELL_DEBUG; + _shell_debug = DEFAULT_SHELL_DEBUG;
} }
static GLogWriterOutput static void
-- --
2.45.2 2.31.1

@ -0,0 +1,31 @@
From a9e79b1657dc7c1b702d7acc4d322539d2b8b6aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 6 Oct 2021 10:00:43 +0200
Subject: [PATCH] main: Leak the GJS context and ShellGlobal
There are many crash-on-exit happening as a side effect of destroying
the GJS context. Work around these until we have a better solution by
leaking them.
---
src/main.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/main.c b/src/main.c
index 91e5493fd1..d62dda9627 100644
--- a/src/main.c
+++ b/src/main.c
@@ -508,9 +508,11 @@ main (int argc, char **argv)
ecode = meta_run ();
shell_profiler_shutdown ();
+#if 0
g_debug ("Doing final cleanup");
_shell_global_destroy_gjs_context (shell_global_get ());
g_object_unref (shell_global_get ());
+#endif
return ecode;
}
--
2.31.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

@ -1,51 +0,0 @@
From c0b2f60108e7b8cffa10306ef54c620fe71a6735 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 22 May 2024 18:42:06 +0200
Subject: [PATCH] panel: Use branding in activities button
Replace the upstream workspace dots with a red hat.
---
data/theme/gnome-shell-sass/widgets/_panel.scss | 5 +++++
js/ui/panel.js | 10 +++++++++-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/data/theme/gnome-shell-sass/widgets/_panel.scss b/data/theme/gnome-shell-sass/widgets/_panel.scss
index 2a29eee9da..02f8232de6 100644
--- a/data/theme/gnome-shell-sass/widgets/_panel.scss
+++ b/data/theme/gnome-shell-sass/widgets/_panel.scss
@@ -58,6 +58,11 @@ $panel_transition_duration: 250ms; // same as the overview transition duration
min-height: $scalable_icon_size * 0.5;
background-color: $panel_fg_color;
}
+
+ & .activities-logo {
+ icon-size: $scalable_icon_size * 1.25;
+ padding: 0 $base_padding;
+ }
}
// screen activity indicators
diff --git a/js/ui/panel.js b/js/ui/panel.js
index 62c8ebb31a..1d11cc1b5f 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -425,7 +425,15 @@ class ActivitiesButton extends PanelMenu.Button {
accessible_name: _('Activities'),
});
- this.add_child(new WorkspaceIndicators());
+ if (GLib.get_os_info('ID') === 'rhel') {
+ const logoIcon = new St.Icon({
+ icon_name: 'fedora-logo-icon',
+ style_class: 'activities-logo',
+ });
+ this.add_child(logoIcon);
+ } else {
+ this.add_child(new WorkspaceIndicators());
+ }
Main.overview.connectObject('showing',
() => this.add_style_pseudo_class('checked'),
--
2.45.2

@ -0,0 +1,56 @@
From b5db4d318546654f4e9c1e4999fa00456441f105 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 15 Jan 2014 16:45:34 -0500
Subject: [PATCH] panel: add an icon to the ActivitiesButton
Requested by brand
---
data/theme/gnome-shell-sass/widgets/_panel.scss | 5 +++++
js/ui/panel.js | 11 ++++++++++-
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/data/theme/gnome-shell-sass/widgets/_panel.scss b/data/theme/gnome-shell-sass/widgets/_panel.scss
index 1f4650773..5f323cbc8 100644
--- a/data/theme/gnome-shell-sass/widgets/_panel.scss
+++ b/data/theme/gnome-shell-sass/widgets/_panel.scss
@@ -85,6 +85,11 @@ $panel_transition_duration: 250ms; // same as the overview transition duration
// dimensions of the icon are hardcoded
}
+ .panel-logo-icon {
+ padding-right: .4em;
+ icon-size: 1em;
+ }
+
&#panelActivities {
-natural-hpadding: $base_padding * 3;
}
diff --git a/js/ui/panel.js b/js/ui/panel.js
index 1474886ef..ad11f4ba2 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -390,11 +390,20 @@ class ActivitiesButton extends PanelMenu.Button {
this.name = 'panelActivities';
+ const box = new St.BoxLayout();
+ this.add_child(box);
+ const iconFile = Gio.File.new_for_path('/usr/share/icons/hicolor/scalable/apps/start-here.svg');
+ this._icon = new St.Icon({
+ gicon: new Gio.FileIcon({ file: iconFile }),
+ style_class: 'panel-logo-icon',
+ });
+ box.add_child(this._icon);
+
/* Translators: If there is no suitable word for "Activities"
in your language, you can use the word for "Overview". */
this._label = new St.Label({ text: _("Activities"),
y_align: Clutter.ActorAlign.CENTER });
- this.add_actor(this._label);
+ box.add_child(this._label);
this.label_actor = this._label;
--
2.31.1

File diff suppressed because it is too large Load Diff

@ -1,4 +1,4 @@
From 17e77f1729b8542c46d5020d55edce4daf7ab24a Mon Sep 17 00:00:00 2001 From 1e4e9248ef6bcdd95ec3b91c8c8e94c4587a876b Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com> From: Ray Strode <rstrode@redhat.com>
Date: Fri, 3 Jul 2015 13:54:36 -0400 Date: Fri, 3 Jul 2015 13:54:36 -0400
Subject: [PATCH] screenShield: unblank when inserting smartcard Subject: [PATCH] screenShield: unblank when inserting smartcard
@ -13,21 +13,21 @@ action to get the screen to unblank.
1 file changed, 3 insertions(+), 1 deletion(-) 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index d2236fb900..b62440dff6 100644 index 9a64fc32c..bc1a0fba7 100644
--- a/js/ui/screenShield.js --- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js +++ b/js/ui/screenShield.js
@@ -94,8 +94,10 @@ export class ScreenShield extends Signals.EventEmitter { @@ -85,8 +85,10 @@ var ScreenShield = class {
this._smartcardManager = SmartcardManager.getSmartcardManager(); this._smartcardManager = SmartcardManager.getSmartcardManager();
this._smartcardManager.connect('smartcard-inserted', this._smartcardManager.connect('smartcard-inserted',
(manager, token) => { (manager, token) => {
- if (this._isLocked && token.UsedToLogin) - if (this._isLocked && token.UsedToLogin)
+ if (this._isLocked && token.UsedToLogin) { + if (this._isLocked && token.UsedToLogin) {
+ this._wakeUpScreen(); + this._wakeUpScreen();
this._activateDialog(); this._activateDialog();
+ } + }
}); });
this._credentialManagers = {}; this._oVirtCredentialsManager = OVirt.getOVirtCredentialsManager();
-- --
2.45.2 2.31.1

@ -0,0 +1,56 @@
From b1be295de28f45762a525d3ad3f91729295a7511 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@redhat.com>
Date: Fri, 18 Oct 2024 13:20:23 +0200
Subject: [PATCH] shell/window-tracker: Help mutter finding app info's for
windows
---
src/shell-window-tracker.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/src/shell-window-tracker.c b/src/shell-window-tracker.c
index bc14040d9b..8fbcca4269 100644
--- a/src/shell-window-tracker.c
+++ b/src/shell-window-tracker.c
@@ -651,6 +651,20 @@ shell_window_tracker_on_n_workspaces_changed (MetaWorkspaceManager *workspace_ma
}
}
+static GAppInfo *
+on_find_app_info (MetaDisplay *display,
+ MetaWindow *window,
+ ShellWindowTracker *tracker)
+{
+ g_autoptr (ShellApp) app = NULL;
+
+ app = get_app_for_window (tracker, window);
+ if (!app)
+ return NULL;
+
+ return g_object_ref (G_APP_INFO (shell_app_get_app_info (app)));
+}
+
static void
init_window_tracking (ShellWindowTracker *self)
{
@@ -665,6 +679,17 @@ init_window_tracking (ShellWindowTracker *self)
g_signal_connect(display, "window-created",
G_CALLBACK (on_window_created), self);
+ if (g_signal_lookup ("find-app-info", META_TYPE_DISPLAY))
+ {
+ g_debug ("Mutter app finding with the help of gnome-shell");
+ g_signal_connect (display, "find-app-info",
+ G_CALLBACK (on_find_app_info), self);
+ }
+ else
+ {
+ g_debug ("No mutter app finding with the help of gnome-shell");
+ }
+
shell_window_tracker_on_n_workspaces_changed (workspace_manager, NULL, self);
}
--
2.44.0.501.g19981daefd.dirty

@ -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

@ -1,4 +1,4 @@
From 5ddabd342d8016b5b1c8a56ecca7de21e91feb3c Mon Sep 17 00:00:00 2001 From 483f0340bb64767bd8d6d95788058270dfdb5def Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com> From: Ray Strode <rstrode@redhat.com>
Date: Tue, 15 Jan 2019 12:54:32 -0500 Date: Tue, 15 Jan 2019 12:54:32 -0500
Subject: [PATCH] st-texture-cache: purge on resume Subject: [PATCH] st-texture-cache: purge on resume
@ -12,10 +12,10 @@ so the texture cache needs to evict all textures in that situation.
3 files changed, 16 insertions(+), 1 deletion(-) 3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/js/ui/main.js b/js/ui/main.js diff --git a/js/ui/main.js b/js/ui/main.js
index ad0ea962f1..d9646fea52 100644 index 979fcefa5..dbf3a32d3 100644
--- a/js/ui/main.js --- a/js/ui/main.js
+++ b/js/ui/main.js +++ b/js/ui/main.js
@@ -265,7 +265,11 @@ async function _initializeUI() { @@ -249,7 +249,11 @@ function _initializeUI() {
return true; return true;
}); });
@ -26,13 +26,13 @@ index ad0ea962f1..d9646fea52 100644
+ loadTheme(); + loadTheme();
+ }); + });
global.context.connect('notify::unsafe-mode', () => { // Provide the bus object for gnome-session to
if (!global.context.unsafe_mode) // initiate logouts.
diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c
index a137480ad1..2e5c6c689a 100644 index b7b547a78..583c3f7d2 100644
--- a/src/st/st-texture-cache.c --- a/src/st/st-texture-cache.c
+++ b/src/st/st-texture-cache.c +++ b/src/st/st-texture-cache.c
@@ -129,6 +129,16 @@ st_texture_cache_class_init (StTextureCacheClass *klass) @@ -130,6 +130,16 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
G_TYPE_NONE, 1, G_TYPE_FILE); G_TYPE_NONE, 1, G_TYPE_FILE);
} }
@ -50,10 +50,10 @@ index a137480ad1..2e5c6c689a 100644
static void static void
st_texture_cache_evict_icons (StTextureCache *cache) st_texture_cache_evict_icons (StTextureCache *cache)
diff --git a/src/st/st-texture-cache.h b/src/st/st-texture-cache.h diff --git a/src/st/st-texture-cache.h b/src/st/st-texture-cache.h
index 1c5be957c4..1a4bfde73f 100644 index 55d84952d..948915c30 100644
--- a/src/st/st-texture-cache.h --- a/src/st/st-texture-cache.h
+++ b/src/st/st-texture-cache.h +++ b/src/st/st-texture-cache.h
@@ -52,6 +52,7 @@ typedef enum { @@ -53,6 +53,7 @@ typedef enum {
} StTextureCachePolicy; } StTextureCachePolicy;
StTextureCache* st_texture_cache_get_default (void); StTextureCache* st_texture_cache_get_default (void);
@ -62,5 +62,5 @@ index 1c5be957c4..1a4bfde73f 100644
ClutterActor * ClutterActor *
st_texture_cache_load_sliced_image (StTextureCache *cache, st_texture_cache_load_sliced_image (StTextureCache *cache,
-- --
2.45.2 2.31.1

@ -0,0 +1,58 @@
From 7e94d682985ac4ff422da73b5878f4f005eff67b Mon Sep 17 00:00:00 2001
From: Mohammed Sadiq <sadiq@sadiqpk.org>
Date: Tue, 10 Aug 2021 15:22:30 +0530
Subject: [PATCH] status/network: Use wwan settings panel for GSM/LTE Modems
GSM/UMTS/LTE modems now have better support with wwan panel in GNOME
Settings. So, if the modem supports, open wwan panel, otherwise
fallback to opening network panel when "Mobile Broadband Settings"
item is clicked.
See https://gitlab.gnome.org/GNOME/gnome-control-center/-/merge_requests/583
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1942>
---
js/ui/status/network.js | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index f510f90ae..fe82fcb08 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -543,7 +543,11 @@ var NMDeviceModem = class extends NMConnectionDevice {
constructor(client, device) {
super(client, device);
- this.item.menu.addSettingsAction(_("Mobile Broadband Settings"), 'gnome-network-panel.desktop');
+ const settingsPanel = this._useWwanPanel()
+ ? 'gnome-wwan-panel.desktop'
+ : 'gnome-network-panel.desktop';
+
+ this.item.menu.addSettingsAction(_('Mobile Broadband Settings'), settingsPanel);
this._mobileDevice = null;
@@ -573,8 +577,19 @@ var NMDeviceModem = class extends NMConnectionDevice {
return NMConnectionCategory.WWAN;
}
+ _useWwanPanel() {
+ // Currently, wwan panel doesn't support CDMA_EVDO modems
+ const supportedCaps =
+ NM.DeviceModemCapabilities.GSM_UMTS |
+ NM.DeviceModemCapabilities.LTE;
+ return this._device.current_capabilities & supportedCaps;
+ }
+
_autoConnect() {
- launchSettingsPanel('network', 'connect-3g', this._device.get_path());
+ if (this._useWwanPanel())
+ launchSettingsPanel('wwan', 'show-device', this._device.udi);
+ else
+ launchSettingsPanel('network', 'connect-3g', this._device.get_path());
}
_sessionUpdated() {
--
2.31.1

@ -0,0 +1,30 @@
From b212b973175be1cbefa1da2c5ed4f58fae032c73 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 11 May 2022 02:34:21 +0200
Subject: [PATCH] status/volume: Hide sliders initially
We update the visibility on state or stream changes, but those
changes may never happen if pipewire-pulse/pulseaudio isn't
available (for example when running as root).
Hiding the sliders is preferable in that case to showing non-working
controls.
---
js/ui/status/volume.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/js/ui/status/volume.js b/js/ui/status/volume.js
index 7164e1054..f623ee680 100644
--- a/js/ui/status/volume.js
+++ b/js/ui/status/volume.js
@@ -34,6 +34,7 @@ var StreamSlider = class {
this._control = control;
this.item = new PopupMenu.PopupBaseMenuItem({ activate: false });
+ this.item.hide();
this._inDrag = false;
this._notifyVolumeChangeId = 0;
--
2.35.1

File diff suppressed because one or more lines are too long

@ -0,0 +1,38 @@
From 79049292451b9bb23ad92c572a438585ca37246b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 27 Oct 2021 15:18:20 +0200
Subject: [PATCH] welcomeDialog: Adapt dialog title
Use RHEL branding instead of the upstream GNOME XX one.
---
js/ui/welcomeDialog.js | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/js/ui/welcomeDialog.js b/js/ui/welcomeDialog.js
index 9d99f0035..783fd1108 100644
--- a/js/ui/welcomeDialog.js
+++ b/js/ui/welcomeDialog.js
@@ -1,9 +1,8 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported WelcomeDialog */
-const { Clutter, GObject, Shell, St } = imports.gi;
+const { Clutter, GLib, GObject, Shell, St } = imports.gi;
-const Config = imports.misc.config;
const Dialog = imports.ui.dialog;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
@@ -32,8 +31,7 @@ class WelcomeDialog extends ModalDialog.ModalDialog {
}
_buildLayout() {
- const [majorVersion] = Config.PACKAGE_VERSION.split('.');
- const title = _('Welcome to GNOME %s').format(majorVersion);
+ const title = _('Welcome to %s').format(GLib.get_os_info('NAME'));
const description = _('If you want to learn your way around, check out the tour.');
const content = new Dialog.MessageDialogContent({ title, description });
--
2.33.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

@ -1,4 +1,4 @@
From 15df1086028087e5a81830323137a8730d2c5888 Mon Sep 17 00:00:00 2001 From 34a7bfdade939e39c2a01cc1b0737a7bdccddd5b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 14 Mar 2017 17:04:36 +0100 Date: Tue, 14 Mar 2017 17:04:36 +0100
Subject: [PATCH] windowMenu: Bring back workspaces submenu for static Subject: [PATCH] windowMenu: Bring back workspaces submenu for static
@ -13,10 +13,10 @@ are used.
1 file changed, 17 insertions(+) 1 file changed, 17 insertions(+)
diff --git a/js/ui/windowMenu.js b/js/ui/windowMenu.js diff --git a/js/ui/windowMenu.js b/js/ui/windowMenu.js
index c69c183d7c..2db3962012 100644 index bb6a8df7b..3449f759d 100644
--- a/js/ui/windowMenu.js --- a/js/ui/windowMenu.js
+++ b/js/ui/windowMenu.js +++ b/js/ui/windowMenu.js
@@ -153,6 +153,23 @@ export class WindowMenu extends PopupMenu.PopupMenu { @@ -116,6 +116,23 @@ var WindowMenu = class extends PopupMenu.PopupMenu {
window.change_workspace(workspace.get_neighbor(dir)); window.change_workspace(workspace.get_neighbor(dir));
}); });
} }
@ -41,5 +41,5 @@ index c69c183d7c..2db3962012 100644
} }
-- --
2.45.2 2.31.1

@ -0,0 +1,26 @@
From b3cac57511575e1265ab0ebd9c7465a6ade913e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 28 Sep 2023 14:34:24 +0200
Subject: [PATCH] windowMenu: Ignore release
If the menu was open on button-press, make sure it is kept open
until explicitly dismissed, regardless of the pointer position.
---
js/ui/windowMenu.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/js/ui/windowMenu.js b/js/ui/windowMenu.js
index 3449f759da..ad5c2a74cc 100644
--- a/js/ui/windowMenu.js
+++ b/js/ui/windowMenu.js
@@ -229,6 +229,7 @@ var WindowMenuManager = class {
let menu = new WindowMenu(window, this._sourceActor);
this._manager.addMenu(menu);
+ this._manager.ignoreRelease();
menu.connect('activate', () => {
window.check_alive(global.get_current_time());
--
2.41.0

@ -0,0 +1,46 @@
From 1cad6c8d47fb9f0b17a2c47f93e5f923d1cb32c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 7 Mar 2024 18:22:32 +0100
Subject: [PATCH] windowPreview: Override with window icon if available
---
js/ui/windowPreview.js | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/js/ui/windowPreview.js b/js/ui/windowPreview.js
index e67ec9ec0f..db325258b4 100644
--- a/js/ui/windowPreview.js
+++ b/js/ui/windowPreview.js
@@ -123,6 +123,12 @@ var WindowPreview = GObject.registerClass({
const tracker = Shell.WindowTracker.get_default();
const app = tracker.get_window_app(this.metaWindow);
this._icon = app.create_icon_texture(ICON_SIZE);
+ // Override with window icon if available
+ if (this._hasWindowIcon()) {
+ const textureCache = St.TextureCache.get_default();
+ this._icon.gicon = textureCache.bind_cairo_surface_property(
+ this.metaWindow, 'icon');
+ }
this._icon.add_style_class_name('icon-dropshadow');
this._icon.set({
reactive: true,
@@ -226,6 +232,16 @@ var WindowPreview = GObject.registerClass({
});
}
+ _hasWindowIcon() {
+ // HACK: GI cannot handle CairoSurface, so this
+ // will throw if the icon property is non-null
+ try {
+ return this.metaWindow.icon !== null;
+ } catch (e) {
+ return true;
+ }
+ }
+
_updateIconScale() {
const { ControlsState } = OverviewControls;
const { currentState, initialState, finalState } =
--
2.44.0

@ -0,0 +1,333 @@
From 2103c5fcf994bb6aebd978553b338436e85fa7ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 7 Jul 2021 22:05:25 +0200
Subject: [PATCH 1/2] status/powerProfiles: Add power mode selection
Settings' power panel gained support for switchable power profiles
in GNOME 40. It's useful to have that functionality more readily
available, so expose it in the system status menu as well.
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3944
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1907>
---
.../net.hadess.PowerProfiles.xml | 76 ++++++++++++
.../gnome-shell-dbus-interfaces.gresource.xml | 1 +
js/js-resources.gresource.xml | 1 +
js/ui/panel.js | 4 +
js/ui/status/powerProfiles.js | 111 ++++++++++++++++++
po/POTFILES.in | 1 +
6 files changed, 194 insertions(+)
create mode 100644 data/dbus-interfaces/net.hadess.PowerProfiles.xml
create mode 100644 js/ui/status/powerProfiles.js
diff --git a/data/dbus-interfaces/net.hadess.PowerProfiles.xml b/data/dbus-interfaces/net.hadess.PowerProfiles.xml
new file mode 100644
index 000000000..fce04a86d
--- /dev/null
+++ b/data/dbus-interfaces/net.hadess.PowerProfiles.xml
@@ -0,0 +1,76 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+
+<node>
+
+ <!--
+ net.hadess.PowerProfiles:
+ @short_description: Power Profiles daemon
+
+ The power-profiles-daemon API is meant to be used by parts of the OS or
+ desktop environment to switch system power profiles based on user choice,
+ or user intent.
+
+ OS components would typically use the "Profiles" property to construct
+ their UI (2 or 3 profiles available), and monitor the "ActiveProfile"
+ and the "PerformanceInhibited" properties to update that UI. The UI
+ would try to set the "ActiveProfile" property if the user selected
+ a different one.
+
+ Note that the reason why the project exists and how it is different from
+ existing projects is explained <ulink href=" https://gitlab.freedesktop.org/hadess/power-profiles-daemon/-/blob/master/README.md">
+ in the project's README file</ulink>.
+
+ The object path will be "/net/hadess/PowerProfiles".
+ -->
+ <interface name="net.hadess.PowerProfiles">
+ <!--
+ ActiveProfile:
+
+ The type of the currently active profile. It might change automatically
+ if the "performance" profile was selected but it got inhibited, in which
+ case the "PerformanceInhibited" property will reflect the reason.
+ -->
+ <property name="ActiveProfile" type="s" access="readwrite"/>
+
+ <!--
+ PerformanceInhibited:
+
+ This will be set if the performance power profile is unavailable, with
+ the value being used to identify the reason for unavailability. As new
+ reasons can be added, it is recommended that front-ends show a generic
+ reason if they do not recognise the value. Possible values are:
+ - "lap-detected" (the computer is sitting on the user's lap)
+ - "high-operating-temperature" (the computer is close to overheating)
+ - "" (the empty string, if not inhibited)
+ -->
+ <property name="PerformanceInhibited" type="s" access="read"/>
+
+ <!--
+ Profiles:
+
+ An array of key-pair values representing each profile. The key named
+ "Driver" (s) identifies the power-profiles-daemon backend code used to
+ implement the profile.
+
+ The key named "Profile" (s) will be one of:
+ - "power-saver" (battery saving profile)
+ - "balanced" (the default profile)
+ - "performance" (a profile that does not care about noise or battery consumption)
+
+ Only one of each type of profile will be listed, with the daemon choosing the
+ more appropriate "driver" for each profile type.
+ -->
+ <property name="Profiles" type="aa{sv}" access="read"/>
+
+ <!--
+ Actions:
+
+ An array of strings listing each one of the "actions" implemented in
+ the running daemon. This is used by API users to figure out whether
+ particular functionality is available in a version of the daemon.
+ -->
+ <property name="Actions" type="as" access="read"/>
+
+ </interface>
+</node>
diff --git a/data/gnome-shell-dbus-interfaces.gresource.xml b/data/gnome-shell-dbus-interfaces.gresource.xml
index e7972f6cb..6682c462d 100644
--- a/data/gnome-shell-dbus-interfaces.gresource.xml
+++ b/data/gnome-shell-dbus-interfaces.gresource.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/shell/dbus-interfaces">
+ <file preprocess="xml-stripblanks">net.hadess.PowerProfiles.xml</file>
<file preprocess="xml-stripblanks">net.hadess.SensorProxy.xml</file>
<file preprocess="xml-stripblanks">net.reactivated.Fprint.Device.xml</file>
<file preprocess="xml-stripblanks">net.reactivated.Fprint.Manager.xml</file>
diff --git a/js/js-resources.gresource.xml b/js/js-resources.gresource.xml
index b2c603a55..7a94e2ff1 100644
--- a/js/js-resources.gresource.xml
+++ b/js/js-resources.gresource.xml
@@ -134,6 +134,7 @@
<file>ui/status/nightLight.js</file>
<file>ui/status/network.js</file>
<file>ui/status/power.js</file>
+ <file>ui/status/powerProfiles.js</file>
<file>ui/status/rfkill.js</file>
<file>ui/status/volume.js</file>
<file>ui/status/bluetooth.js</file>
diff --git a/js/ui/panel.js b/js/ui/panel.js
index ad11f4ba2..84668e96e 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -693,6 +693,7 @@ class AggregateMenu extends PanelMenu.Button {
this._remoteAccess = new imports.ui.status.remoteAccess.RemoteAccessApplet();
this._power = new imports.ui.status.power.Indicator();
+ this._powerProfiles = new imports.ui.status.powerProfiles.Indicator();
this._rfkill = new imports.ui.status.rfkill.Indicator();
this._volume = new imports.ui.status.volume.Indicator();
this._brightness = new imports.ui.status.brightness.Indicator();
@@ -712,6 +713,7 @@ class AggregateMenu extends PanelMenu.Button {
this._indicators.add_child(this._rfkill);
this._indicators.add_child(this._volume);
this._indicators.add_child(this._power);
+ this._indicators.add_child(this._powerProfiles);
this.menu.addMenuItem(this._volume.menu);
this.menu.addMenuItem(this._brightness.menu);
@@ -726,6 +728,7 @@ class AggregateMenu extends PanelMenu.Button {
this.menu.addMenuItem(this._location.menu);
this.menu.addMenuItem(this._rfkill.menu);
this.menu.addMenuItem(this._power.menu);
+ this.menu.addMenuItem(this._powerProfiles.menu);
this.menu.addMenuItem(this._nightLight.menu);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addMenuItem(this._system.menu);
@@ -733,6 +736,7 @@ class AggregateMenu extends PanelMenu.Button {
menuLayout.addSizeChild(this._location.menu.actor);
menuLayout.addSizeChild(this._rfkill.menu.actor);
menuLayout.addSizeChild(this._power.menu.actor);
+ menuLayout.addSizeChild(this._powerProfiles.menu.actor);
menuLayout.addSizeChild(this._system.menu.actor);
}
});
diff --git a/js/ui/status/powerProfiles.js b/js/ui/status/powerProfiles.js
new file mode 100644
index 000000000..f6bc5835b
--- /dev/null
+++ b/js/ui/status/powerProfiles.js
@@ -0,0 +1,111 @@
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+/* exported Indicator */
+
+const { Gio, GObject } = imports.gi;
+
+const Main = imports.ui.main;
+const PanelMenu = imports.ui.panelMenu;
+const PopupMenu = imports.ui.popupMenu;
+
+const { loadInterfaceXML } = imports.misc.fileUtils;
+
+const BUS_NAME = 'net.hadess.PowerProfiles';
+const OBJECT_PATH = '/net/hadess/PowerProfiles';
+
+const PowerProfilesIface = loadInterfaceXML('net.hadess.PowerProfiles');
+const PowerProfilesProxy = Gio.DBusProxy.makeProxyWrapper(PowerProfilesIface);
+
+const PROFILE_LABELS = {
+ 'performance': _('Performance Mode'),
+ 'balanced': _('Balanced Power'),
+ 'power-saver': _('Power Saver'),
+};
+const PROFILE_ICONS = {
+ 'performance': 'power-profile-performance-symbolic',
+ 'balanced': 'power-profile-balanced-symbolic',
+ 'power-saver': 'power-profile-power-saver-symbolic',
+};
+
+var Indicator = GObject.registerClass(
+class Indicator extends PanelMenu.SystemIndicator {
+ _init() {
+ super._init();
+
+ this._profileItems = new Map();
+ this._updateProfiles = true;
+
+ this._proxy = new PowerProfilesProxy(Gio.DBus.system, BUS_NAME, OBJECT_PATH,
+ (proxy, error) => {
+ if (error) {
+ log(error.message);
+ } else {
+ this._proxy.connect('g-properties-changed',
+ (p, properties) => {
+ const propertyNames = properties.deep_unpack();
+ this._updateProfiles = 'Profiles' in propertyNames;
+ this._sync();
+ });
+ }
+ this._sync();
+ });
+
+ this._item = new PopupMenu.PopupSubMenuMenuItem('', true);
+
+ this._profileSection = new PopupMenu.PopupMenuSection();
+ this._item.menu.addMenuItem(this._profileSection);
+ this._item.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
+ this._item.menu.addSettingsAction(_('Power Settings'),
+ 'gnome-power-panel.desktop');
+ this.menu.addMenuItem(this._item);
+
+ Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
+ this._sessionUpdated();
+ this._sync();
+ }
+
+ _sessionUpdated() {
+ const sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
+ this.menu.setSensitive(sensitive);
+ }
+
+ _sync() {
+ this._item.visible = this._proxy.g_name_owner !== null;
+
+ if (!this._item.visible)
+ return;
+
+ if (this._updateProfiles) {
+ this._profileSection.removeAll();
+ this._profileItems.clear();
+
+ const profiles = this._proxy.Profiles
+ .map(p => p.Profile.unpack())
+ .reverse();
+ for (const profile of profiles) {
+ const label = PROFILE_LABELS[profile];
+ if (!label)
+ continue;
+
+ const item = new PopupMenu.PopupMenuItem(label);
+ item.connect('activate',
+ () => (this._proxy.ActiveProfile = profile));
+ this._profileItems.set(profile, item);
+ this._profileSection.addMenuItem(item);
+ }
+ this._updateProfiles = false;
+ }
+
+ for (const [profile, item] of this._profileItems) {
+ item.setOrnament(profile === this._proxy.ActiveProfile
+ ? PopupMenu.Ornament.DOT
+ : PopupMenu.Ornament.NONE);
+ }
+
+ const perfItem = this._profileItems.get('performance');
+ if (perfItem)
+ perfItem.sensitive = this._proxy.PerformanceInhibited === '';
+
+ this._item.label.text = PROFILE_LABELS[this._proxy.ActiveProfile];
+ this._item.icon.icon_name = PROFILE_ICONS[this._proxy.ActiveProfile];
+ }
+});
diff --git a/po/POTFILES.in b/po/POTFILES.in
index cb279c1ee..727cb01a8 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -61,6 +61,7 @@ js/ui/status/location.js
js/ui/status/network.js
js/ui/status/nightLight.js
js/ui/status/power.js
+js/ui/status/powerProfiles.js
js/ui/status/remoteAccess.js
js/ui/status/rfkill.js
js/ui/status/system.js
--
2.31.1
From 0f8a2e2c6c3119492670efce5aff1224f2c3c47f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 6 Aug 2021 21:04:24 +0200
Subject: [PATCH 2/2] powerProfiles: Tweak profile names
After some more discussion, we settled on slightly different
profile names.
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4530
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1939>
---
js/ui/status/powerProfiles.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/js/ui/status/powerProfiles.js b/js/ui/status/powerProfiles.js
index f6bc5835b..61205bbc6 100644
--- a/js/ui/status/powerProfiles.js
+++ b/js/ui/status/powerProfiles.js
@@ -16,9 +16,9 @@ const PowerProfilesIface = loadInterfaceXML('net.hadess.PowerProfiles');
const PowerProfilesProxy = Gio.DBusProxy.makeProxyWrapper(PowerProfilesIface);
const PROFILE_LABELS = {
- 'performance': _('Performance Mode'),
- 'balanced': _('Balanced Power'),
- 'power-saver': _('Power Saver'),
+ 'performance': C_('Power profile', 'Performance'),
+ 'balanced': C_('Power profile', 'Balanced'),
+ 'power-saver': C_('Power profile', 'Power Saver'),
};
const PROFILE_ICONS = {
'performance': 'power-profile-performance-symbolic',
--
2.31.1

@ -1,4 +1,4 @@
From 8a4efef39a0f48371c632d449688f29d06b9eed7 Mon Sep 17 00:00:00 2001 From 6739f213965c2b6a41c21b446095f393f9d86e43 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com> From: Ray Strode <rstrode@redhat.com>
Date: Wed, 30 Sep 2015 12:51:24 -0400 Date: Wed, 30 Sep 2015 12:51:24 -0400
Subject: [PATCH 1/3] authPrompt: don't fade out auth messages if user types Subject: [PATCH 1/3] authPrompt: don't fade out auth messages if user types
@ -12,10 +12,10 @@ front, before a password is asked.
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 8a46559d90..9309f60886 100644 index 4844b9ee0..149e5ad4a 100644
--- a/js/gdm/authPrompt.js --- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js
@@ -211,7 +211,7 @@ export const AuthPrompt = GObject.registerClass({ @@ -179,7 +179,7 @@ var AuthPrompt = GObject.registerClass({
[this._textEntry, this._passwordEntry].forEach(entry => { [this._textEntry, this._passwordEntry].forEach(entry => {
entry.clutter_text.connect('text-changed', () => { entry.clutter_text.connect('text-changed', () => {
@ -25,10 +25,10 @@ index 8a46559d90..9309f60886 100644
}); });
-- --
2.45.2 2.31.1
From 007bbb694d4f30175caecbc9ada91515634bfd0b Mon Sep 17 00:00:00 2001 From 2b84c3d611120ae2f60386d5c637b84d1958398d Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com> From: Ray Strode <rstrode@redhat.com>
Date: Wed, 30 Sep 2015 14:36:33 -0400 Date: Wed, 30 Sep 2015 14:36:33 -0400
Subject: [PATCH 2/3] authPrompt: don't spin unless answering question Subject: [PATCH 2/3] authPrompt: don't spin unless answering question
@ -38,10 +38,10 @@ Subject: [PATCH 2/3] authPrompt: don't spin unless answering question
1 file changed, 5 insertions(+), 4 deletions(-) 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 9309f60886..3e72668967 100644 index 149e5ad4a..c5643d046 100644
--- a/js/gdm/authPrompt.js --- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js
@@ -275,13 +275,14 @@ export const AuthPrompt = GObject.registerClass({ @@ -243,13 +243,14 @@ var AuthPrompt = GObject.registerClass({
this.verificationStatus = AuthPromptStatus.VERIFICATION_IN_PROGRESS; this.verificationStatus = AuthPromptStatus.VERIFICATION_IN_PROGRESS;
this.updateSensitivity(false); this.updateSensitivity(false);
@ -61,10 +61,10 @@ index 9309f60886..3e72668967 100644
this.emit('next'); this.emit('next');
} }
-- --
2.45.2 2.31.1
From 92f66a5ff91e47d46a48d7ee51c0808f7ce1eaf9 Mon Sep 17 00:00:00 2001 From 56360c872e01b0554b4d8b53dddba5407d4e889b Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com> From: Ray Strode <rstrode@redhat.com>
Date: Mon, 5 Oct 2015 15:26:18 -0400 Date: Mon, 5 Oct 2015 15:26:18 -0400
Subject: [PATCH 3/3] authPrompt: stop accepting preemptive answer if user Subject: [PATCH 3/3] authPrompt: stop accepting preemptive answer if user
@ -78,23 +78,32 @@ Typing ahead the password is just a convenience for users who don't
want to manually lift the shift before typing their passwords, after want to manually lift the shift before typing their passwords, after
all. all.
--- ---
js/gdm/authPrompt.js | 36 ++++++++++++++++++++++++++++++++++++ js/gdm/authPrompt.js | 37 ++++++++++++++++++++++++++++++++++++-
1 file changed, 36 insertions(+) 1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 3e72668967..254b4dbb88 100644 index c5643d046..84c608b2f 100644
--- a/js/gdm/authPrompt.js --- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js
@@ -70,6 +70,8 @@ export const AuthPrompt = GObject.registerClass({ @@ -1,7 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported AuthPrompt */
-const { Clutter, GLib, GObject, Pango, Shell, St } = imports.gi;
+const { Clutter, GLib, GObject, Meta, Pango, Shell, St } = imports.gi;
const Animation = imports.ui.animation;
const Batch = imports.gdm.batch;
@@ -63,6 +63,8 @@ var AuthPrompt = GObject.registerClass({
this._defaultButtonWellActor = null; this._defaultButtonWellActor = null;
this._cancelledRetries = 0; this._cancelledRetries = 0;
+ this._idleMonitor = global.backend.get_core_idle_monitor(); + this._idleMonitor = Meta.IdleMonitor.get_core();
+ +
let reauthenticationOnly; let reauthenticationOnly;
if (this._mode === AuthPromptMode.UNLOCK_ONLY) if (this._mode == AuthPromptMode.UNLOCK_ONLY)
reauthenticationOnly = true; reauthenticationOnly = true;
@@ -127,8 +129,14 @@ export const AuthPrompt = GObject.registerClass({ @@ -119,6 +121,11 @@ var AuthPrompt = GObject.registerClass({
} }
_onDestroy() { _onDestroy() {
@ -102,14 +111,11 @@ index 3e72668967..254b4dbb88 100644
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); + this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId);
+ this._preemptiveAnswerWatchId = 0; + this._preemptiveAnswerWatchId = 0;
+ } + }
+
this._inactiveEntry.destroy();
this._inactiveEntry = null;
+ +
this._userVerifier.destroy(); this._userVerifier.destroy();
this._userVerifier = null; this._userVerifier = null;
} }
@@ -282,6 +290,11 @@ export const AuthPrompt = GObject.registerClass({ @@ -250,6 +257,11 @@ var AuthPrompt = GObject.registerClass({
this._userVerifier.answerQuery(this._queryingService, this._entry.text); this._userVerifier.answerQuery(this._queryingService, this._entry.text);
} else { } else {
this._preemptiveAnswer = this._entry.text; this._preemptiveAnswer = this._entry.text;
@ -121,7 +127,7 @@ index 3e72668967..254b4dbb88 100644
} }
this.emit('next'); this.emit('next');
@@ -493,6 +506,11 @@ export const AuthPrompt = GObject.registerClass({ @@ -429,6 +441,11 @@ var AuthPrompt = GObject.registerClass({
} }
setQuestion(question) { setQuestion(question) {
@ -132,8 +138,8 @@ index 3e72668967..254b4dbb88 100644
+ +
this._entry.hint_text = question; this._entry.hint_text = question;
this._authList.hide(); this._entry.show();
@@ -614,6 +632,19 @@ export const AuthPrompt = GObject.registerClass({ @@ -530,6 +547,19 @@ var AuthPrompt = GObject.registerClass({
this._updateEntry(false); this._updateEntry(false);
} }
@ -153,7 +159,7 @@ index 3e72668967..254b4dbb88 100644
reset() { reset() {
let oldStatus = this.verificationStatus; let oldStatus = this.verificationStatus;
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
@@ -621,6 +652,11 @@ export const AuthPrompt = GObject.registerClass({ @@ -537,6 +567,11 @@ var AuthPrompt = GObject.registerClass({
this.cancelButton.can_focus = this._hasCancelButton; this.cancelButton.can_focus = this._hasCancelButton;
this._preemptiveAnswer = null; this._preemptiveAnswer = null;
@ -166,5 +172,5 @@ index 3e72668967..254b4dbb88 100644
this._userVerifier.cancel(); this._userVerifier.cancel();
-- --
2.45.2 2.31.1

@ -1,4 +1,4 @@
From eaa7217db15a28e88ce0b5a84827c306148561ca Mon Sep 17 00:00:00 2001 From d2c12a372ea0ccbe6ba682c553d8b83b3253169f Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com> From: Ray Strode <rstrode@redhat.com>
Date: Mon, 28 Sep 2015 10:57:02 -0400 Date: Mon, 28 Sep 2015 10:57:02 -0400
Subject: [PATCH 1/3] smartcardManager: add way to detect if user logged using Subject: [PATCH 1/3] smartcardManager: add way to detect if user logged using
@ -16,10 +16,10 @@ This commit adds the necessary api to detect that case.
1 file changed, 7 insertions(+) 1 file changed, 7 insertions(+)
diff --git a/js/misc/smartcardManager.js b/js/misc/smartcardManager.js diff --git a/js/misc/smartcardManager.js b/js/misc/smartcardManager.js
index 32573cd384..6c48c80a19 100644 index d9b6ff474..26f9f5aaa 100644
--- a/js/misc/smartcardManager.js --- a/js/misc/smartcardManager.js
+++ b/js/misc/smartcardManager.js +++ b/js/misc/smartcardManager.js
@@ -118,4 +118,11 @@ class SmartcardManager extends Signals.EventEmitter { @@ -111,5 +111,12 @@ var SmartcardManager = class {
return true; return true;
} }
@ -30,12 +30,13 @@ index 32573cd384..6c48c80a19 100644
+ +
+ return false; + return false;
+ } + }
} };
Signals.addSignalMethods(SmartcardManager.prototype);
-- --
2.45.2 2.31.1
From d7ef26d7b9d352232c9e0a24a04bcfcf6eee7d9a Mon Sep 17 00:00:00 2001 From 98393eef884edc9e685b712c71356751acdd552f Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com> From: Ray Strode <rstrode@redhat.com>
Date: Mon, 28 Sep 2015 19:56:53 -0400 Date: Mon, 28 Sep 2015 19:56:53 -0400
Subject: [PATCH 2/3] gdm: only unlock with smartcard, if smartcard used for Subject: [PATCH 2/3] gdm: only unlock with smartcard, if smartcard used for
@ -44,38 +45,46 @@ Subject: [PATCH 2/3] gdm: only unlock with smartcard, if smartcard used for
If a smartcard is used for login, we need to make sure the smartcard If a smartcard is used for login, we need to make sure the smartcard
gets used for unlock, too. gets used for unlock, too.
--- ---
js/gdm/util.js | 6 +++++- js/gdm/util.js | 7 +++++--
1 file changed, 5 insertions(+), 1 deletion(-) 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/js/gdm/util.js b/js/gdm/util.js diff --git a/js/gdm/util.js b/js/gdm/util.js
index c9c040beb7..c0d8852880 100644 index 72561daab..6b92e3564 100644
--- a/js/gdm/util.js --- a/js/gdm/util.js
+++ b/js/gdm/util.js +++ b/js/gdm/util.js
@@ -465,6 +465,8 @@ export class ShellUserVerifier extends Signals.EventEmitter { @@ -149,7 +149,6 @@ var ShellUserVerifier = class {
this._settings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed',
this._updateDefaultService.bind(this));
- this._updateDefaultService();
this._fprintManager = new FprintManagerProxy(Gio.DBus.system,
'net.reactivated.Fprint',
@@ -166,6 +165,8 @@ var ShellUserVerifier = class {
this.smartcardDetected = false; this.smartcardDetected = false;
this._checkForSmartcard(); this._checkForSmartcard();
+ this._updateDefaultService(); + this._updateDefaultService();
+ +
this._smartcardManager.connectObject( this._smartcardInsertedId = this._smartcardManager.connect('smartcard-inserted',
'smartcard-inserted', () => this._checkForSmartcard(), this._checkForSmartcard.bind(this));
'smartcard-removed', () => this._checkForSmartcard(), this); this._smartcardRemovedId = this._smartcardManager.connect('smartcard-removed',
@@ -643,7 +645,9 @@ export class ShellUserVerifier extends Signals.EventEmitter { @@ -527,7 +528,9 @@ var ShellUserVerifier = class {
} }
_getDetectedDefaultService() { _updateDefaultService() {
- if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY)) - if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY))
+ if (this._smartcardManager?.loggedInWithToken()) + if (this._smartcardManager.loggedInWithToken())
+ return SMARTCARD_SERVICE_NAME; + this._defaultService = SMARTCARD_SERVICE_NAME;
+ else if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY)) + else if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY))
return PASSWORD_SERVICE_NAME; this._defaultService = PASSWORD_SERVICE_NAME;
else if (this._smartcardManager) else if (this._settings.get_boolean(SMARTCARD_AUTHENTICATION_KEY))
return SMARTCARD_SERVICE_NAME; this._defaultService = SMARTCARD_SERVICE_NAME;
-- --
2.45.2 2.31.1
From 9bff98c2757e4591035e408aa9cee703cec74bdf Mon Sep 17 00:00:00 2001 From 57ca969a0af6f65e71dc1158163b9c826bdb7079 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com> From: Ray Strode <rstrode@redhat.com>
Date: Mon, 28 Sep 2015 19:57:36 -0400 Date: Mon, 28 Sep 2015 19:57:36 -0400
Subject: [PATCH 3/3] gdm: update default service when smartcard inserted Subject: [PATCH 3/3] gdm: update default service when smartcard inserted
@ -88,11 +97,11 @@ after we get a smartcard insertion event.
1 file changed, 2 insertions(+) 1 file changed, 2 insertions(+)
diff --git a/js/gdm/util.js b/js/gdm/util.js diff --git a/js/gdm/util.js b/js/gdm/util.js
index c0d8852880..430af4d8ef 100644 index 6b92e3564..e62114cb1 100644
--- a/js/gdm/util.js --- a/js/gdm/util.js
+++ b/js/gdm/util.js +++ b/js/gdm/util.js
@@ -490,6 +490,8 @@ export class ShellUserVerifier extends Signals.EventEmitter { @@ -420,6 +420,8 @@ var ShellUserVerifier = class {
else if (this._preemptingService === SMARTCARD_SERVICE_NAME) else if (this._preemptingService == SMARTCARD_SERVICE_NAME)
this._preemptingService = null; this._preemptingService = null;
+ this._updateDefaultService(); + this._updateDefaultService();
@ -101,5 +110,5 @@ index c0d8852880..430af4d8ef 100644
} }
} }
-- --
2.45.2 2.31.1

@ -0,0 +1,107 @@
From 3a89e8597f6f3e7fa468bae93768f8253a3141e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 6 Oct 2022 14:30:20 +0200
Subject: [PATCH 1/2] inhibitShortcutsDialog: Don't override resource
PermissionStore's Set() method takes a complete permission
table, so when setting an app's permission, we are implicitly
removing all previously set entries for other apps.
Switch to the SetPermission() method which sets the permission
for a single app.
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5937
Part-of:
<https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2504>
---
...g.freedesktop.impl.portal.PermissionStore.xml | 7 +++++++
js/ui/inhibitShortcutsDialog.js | 16 ++++++----------
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml b/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml
index 75fbc468a8..55d3fc30cb 100644
--- a/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml
+++ b/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml
@@ -13,6 +13,13 @@
<arg name="app_permissions" type="a{sas}" direction="in"/>
<arg name="data" type="v" direction="in"/>
</method>
+ <method name="SetPermission">
+ <arg name='table' type='s' direction='in'/>
+ <arg name='create' type='b' direction='in'/>
+ <arg name='id' type='s' direction='in'/>
+ <arg name='app' type='s' direction='in'/>
+ <arg name='permissions' type='as' direction='in'/>
+ </method>
<signal name="Changed">
<arg name="table" type="s" direction="out"/>
<arg name="id" type="s" direction="out"/>
diff --git a/js/ui/inhibitShortcutsDialog.js b/js/ui/inhibitShortcutsDialog.js
index c59544eaf9..8ef5861261 100644
--- a/js/ui/inhibitShortcutsDialog.js
+++ b/js/ui/inhibitShortcutsDialog.js
@@ -1,5 +1,5 @@
/* exported InhibitShortcutsDialog */
-const { Clutter, Gio, GLib, GObject, Gtk, Meta, Pango, Shell, St } = imports.gi;
+const {Clutter, Gio, GObject, Gtk, Meta, Pango, Shell, St} = imports.gi;
const Dialog = imports.ui.dialog;
const ModalDialog = imports.ui.modalDialog;
@@ -57,15 +57,11 @@ var InhibitShortcutsDialog = GObject.registerClass({
if (!this._shouldUsePermStore() || this._permStore == null)
return;
- let permissions = {};
- permissions[this._app.get_id()] = [grant];
- let data = GLib.Variant.new('av', {});
-
- this._permStore.SetRemote(APP_PERMISSIONS_TABLE,
- true,
- APP_PERMISSIONS_ID,
- permissions,
- data,
+ this._permStore.SetPermissionRemote(APP_PERMISSIONS_TABLE,
+ true,
+ APP_PERMISSIONS_ID,
+ this._app.get_id(),
+ [grant],
(result, error) => {
if (error != null)
log(error.message);
--
2.43.0
From 1391efb2356d1b1eac631df2f5fbd61a7a72bf52 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 18 Nov 2022 22:40:31 +0100
Subject: [PATCH 2/2] inhibitShorcutsDialog: Fix permission check
Each permission entry is an array of strings, so checking that against
the expected string itself will always fail.
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6107
Part-of:
<https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2548>
---
js/ui/inhibitShortcutsDialog.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/js/ui/inhibitShortcutsDialog.js b/js/ui/inhibitShortcutsDialog.js
index 8ef5861261..4cd2793c3d 100644
--- a/js/ui/inhibitShortcutsDialog.js
+++ b/js/ui/inhibitShortcutsDialog.js
@@ -145,7 +145,7 @@ var InhibitShortcutsDialog = GObject.registerClass({
let [permissions] = res;
if (permissions[appId] === undefined) // Not found
this._dialog.open();
- else if (permissions[appId] == GRANTED)
+ else if (permissions[appId][0] === GRANTED)
this._emitResponse(DialogResponse.ALLOW);
else
this._emitResponse(DialogResponse.DENY);
--
2.43.0

@ -0,0 +1,334 @@
From 49a950b9e0dc262fd20c28e21ee4815ea8efe758 Mon Sep 17 00:00:00 2001
From: Sebastian Keller <skeller@gnome.org>
Date: Tue, 16 Nov 2021 18:57:26 +0100
Subject: [PATCH 1/3] search: Split out the description highlighter into its
own class
No functional change yet, only preparation to allow adding a unit test
later on.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2033>
---
js/misc/util.js | 38 +++++++++++++++++++++++++++++++++++++-
js/ui/search.js | 12 +++++-------
2 files changed, 42 insertions(+), 8 deletions(-)
diff --git a/js/misc/util.js b/js/misc/util.js
index 8139d3f47..d1a702960 100644
--- a/js/misc/util.js
+++ b/js/misc/util.js
@@ -1,7 +1,8 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported findUrls, spawn, spawnCommandLine, spawnApp, trySpawnCommandLine,
formatTime, formatTimeSpan, createTimeLabel, insertSorted,
- ensureActorVisibleInScrollView, wiggle, lerp, GNOMEversionCompare */
+ ensureActorVisibleInScrollView, wiggle, lerp, GNOMEversionCompare,
+ Highlighter */
const { Clutter, Gio, GLib, Shell, St, GnomeDesktop } = imports.gi;
const Gettext = imports.gettext;
@@ -477,3 +478,38 @@ function GNOMEversionCompare(version1, version2) {
return 0;
}
+
+/* @class Highlighter Highlight given terms in text using markup. */
+var Highlighter = class {
+ /**
+ * @param {?string[]} terms - list of terms to highlight
+ */
+ constructor(terms) {
+ if (!terms)
+ return;
+
+ const escapedTerms = terms
+ .map(term => Shell.util_regex_escape(term))
+ .filter(term => term.length > 0);
+
+ if (escapedTerms.length === 0)
+ return;
+
+ this._highlightRegex = new RegExp('(%s)'.format(
+ escapedTerms.join('|')), 'gi');
+ }
+
+ /**
+ * Highlight all occurences of the terms defined for this
+ * highlighter in the provided text using markup.
+ *
+ * @param {string} text - text to highlight the defined terms in
+ * @returns {string}
+ */
+ highlight(text) {
+ if (!this._highlightRegex)
+ return text;
+
+ return text.replace(this._highlightRegex, '<b>$1</b>');
+ }
+};
diff --git a/js/ui/search.js b/js/ui/search.js
index 7300b053e..b1e76c46d 100644
--- a/js/ui/search.js
+++ b/js/ui/search.js
@@ -10,6 +10,8 @@ const ParentalControlsManager = imports.misc.parentalControlsManager;
const RemoteSearch = imports.ui.remoteSearch;
const Util = imports.misc.util;
+const { Highlighter } = imports.misc.util;
+
const SEARCH_PROVIDERS_SCHEMA = 'org.gnome.desktop.search-providers';
var MAX_LIST_SEARCH_RESULTS_ROWS = 5;
@@ -596,7 +598,7 @@ var SearchResultsView = GObject.registerClass({
this._providers = [];
- this._highlightRegex = null;
+ this._highlighter = new Highlighter();
this._searchSettings = new Gio.Settings({ schema_id: SEARCH_PROVIDERS_SCHEMA });
this._searchSettings.connect('changed::disabled', this._reloadRemoteProviders.bind(this));
@@ -739,8 +741,7 @@ var SearchResultsView = GObject.registerClass({
if (this._searchTimeoutId == 0)
this._searchTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 150, this._onSearchTimeout.bind(this));
- let escapedTerms = this._terms.map(term => Shell.util_regex_escape(term));
- this._highlightRegex = new RegExp('(%s)'.format(escapedTerms.join('|')), 'gi');
+ this._highlighter = new Highlighter(this._terms);
this.emit('terms-changed');
}
@@ -894,10 +895,7 @@ var SearchResultsView = GObject.registerClass({
if (!description)
return '';
- if (!this._highlightRegex)
- return description;
-
- return description.replace(this._highlightRegex, '<b>$1</b>');
+ return this._highlighter.highlight(description);
}
});
--
2.35.1
From 7c1abe1bd91ecf274d81e122035cbeeef6fd58d4 Mon Sep 17 00:00:00 2001
From: Sebastian Keller <skeller@gnome.org>
Date: Wed, 17 Nov 2021 02:50:39 +0100
Subject: [PATCH 2/3] util: Properly handle markup in highlighter
The code to highlight matches did not properly escape the passed in text
as for markup before adding its highlighting markup. This lead to some
search result descriptions not showing up, because their descriptions
contained characters, such as "<", that would have to be escaped when
used in markup or otherwise lead to invalid markup.
To work around this some search providers wrongly started escaping the
description on their end before sending them to gnome-shell. This lead
to another issue. Now if the highlighter was trying to highlight the
term "a", and the escaped description contained "&apos;", the "a" in
that would be considered a match and surrounded by "<b></b>". This
however would also generate invalid markup, again leading to an error
and the description not being shown.
Fix this by always escaping the passed in string before applying the
highlights in such a way that there are no matches within entities.
This also means that search providers that escaped their description
strings will now show up with the markup syntax. This will have to be
fixed separately in the affected search providers.
Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4791
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2033>
---
js/misc/util.js | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/js/misc/util.js b/js/misc/util.js
index d1a702960..802398d18 100644
--- a/js/misc/util.js
+++ b/js/misc/util.js
@@ -508,8 +508,25 @@ var Highlighter = class {
*/
highlight(text) {
if (!this._highlightRegex)
- return text;
+ return GLib.markup_escape_text(text, -1);
+
+ let escaped = [];
+ let lastMatchEnd = 0;
+ let match;
+ while ((match = this._highlightRegex.exec(text))) {
+ if (match.index > lastMatchEnd) {
+ let unmatched = GLib.markup_escape_text(
+ text.slice(lastMatchEnd, match.index), -1);
+ escaped.push(unmatched);
+ }
+ let matched = GLib.markup_escape_text(match[0], -1);
+ escaped.push('<b>%s</b>'.format(matched));
+ lastMatchEnd = match.index + match[0].length;
+ }
+ let unmatched = GLib.markup_escape_text(
+ text.slice(lastMatchEnd), -1);
+ escaped.push(unmatched);
- return text.replace(this._highlightRegex, '<b>$1</b>');
+ return escaped.join('');
}
};
--
2.35.1
From 82e2a6dcfabc2f82efbf468175d16c303f0c73da Mon Sep 17 00:00:00 2001
From: Sebastian Keller <skeller@gnome.org>
Date: Wed, 17 Nov 2021 03:05:05 +0100
Subject: [PATCH 3/3] tests: Add unit test for highlighter
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2033>
---
tests/meson.build | 12 ++++-
tests/unit/highlighter.js | 106 ++++++++++++++++++++++++++++++++++++++
2 files changed, 117 insertions(+), 1 deletion(-)
create mode 100644 tests/unit/highlighter.js
diff --git a/tests/meson.build b/tests/meson.build
index c0431631f..50fb601e9 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -10,7 +10,17 @@ run_test = configure_file(
testenv = environment()
testenv.set('GSETTINGS_SCHEMA_DIR', join_paths(meson.build_root(), 'data'))
-foreach test : ['insertSorted', 'jsParse', 'markup', 'params', 'url', 'versionCompare']
+tests = [
+ 'highlighter',
+ 'insertSorted',
+ 'jsParse',
+ 'markup',
+ 'params',
+ 'url',
+ 'versionCompare',
+]
+
+foreach test : tests
test(test, run_test,
args: 'unit/@0@.js'.format(test),
env: testenv,
diff --git a/tests/unit/highlighter.js b/tests/unit/highlighter.js
new file mode 100644
index 000000000..d582d38e3
--- /dev/null
+++ b/tests/unit/highlighter.js
@@ -0,0 +1,106 @@
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+
+// Test cases for SearchResult description match highlighter
+
+const JsUnit = imports.jsUnit;
+const Pango = imports.gi.Pango;
+
+const Environment = imports.ui.environment;
+Environment.init();
+
+const Util = imports.misc.util;
+
+const tests = [
+ { input: 'abc cba',
+ terms: null,
+ output: 'abc cba' },
+ { input: 'abc cba',
+ terms: [],
+ output: 'abc cba' },
+ { input: 'abc cba',
+ terms: [''],
+ output: 'abc cba' },
+ { input: 'abc cba',
+ terms: ['a'],
+ output: '<b>a</b>bc cb<b>a</b>' },
+ { input: 'abc cba',
+ terms: ['a', 'a'],
+ output: '<b>a</b>bc cb<b>a</b>' },
+ { input: 'CaSe InSenSiTiVe',
+ terms: ['cas', 'sens'],
+ output: '<b>CaS</b>e In<b>SenS</b>iTiVe' },
+ { input: 'This contains the < character',
+ terms: null,
+ output: 'This contains the &lt; character' },
+ { input: 'Don\'t',
+ terms: ['t'],
+ output: 'Don&apos;<b>t</b>' },
+ { input: 'Don\'t',
+ terms: ['n\'t'],
+ output: 'Do<b>n&apos;t</b>' },
+ { input: 'Don\'t',
+ terms: ['o', 't'],
+ output: 'D<b>o</b>n&apos;<b>t</b>' },
+ { input: 'salt&pepper',
+ terms: ['salt'],
+ output: '<b>salt</b>&amp;pepper' },
+ { input: 'salt&pepper',
+ terms: ['salt', 'alt'],
+ output: '<b>salt</b>&amp;pepper' },
+ { input: 'salt&pepper',
+ terms: ['pepper'],
+ output: 'salt&amp;<b>pepper</b>' },
+ { input: 'salt&pepper',
+ terms: ['salt', 'pepper'],
+ output: '<b>salt</b>&amp;<b>pepper</b>' },
+ { input: 'salt&pepper',
+ terms: ['t', 'p'],
+ output: 'sal<b>t</b>&amp;<b>p</b>e<b>p</b><b>p</b>er' },
+ { input: 'salt&pepper',
+ terms: ['t', '&', 'p'],
+ output: 'sal<b>t</b><b>&amp;</b><b>p</b>e<b>p</b><b>p</b>er' },
+ { input: 'salt&pepper',
+ terms: ['e'],
+ output: 'salt&amp;p<b>e</b>pp<b>e</b>r' },
+ { input: 'salt&pepper',
+ terms: ['&a', '&am', '&amp', '&amp;'],
+ output: 'salt&amp;pepper' },
+ { input: '&&&&&',
+ terms: ['a'],
+ output: '&amp;&amp;&amp;&amp;&amp;' },
+ { input: '&;&;&;&;&;',
+ terms: ['a'],
+ output: '&amp;;&amp;;&amp;;&amp;;&amp;;' },
+ { input: '&;&;&;&;&;',
+ terms: [';'],
+ output: '&amp;<b>;</b>&amp;<b>;</b>&amp;<b>;</b>&amp;<b>;</b>&amp;<b>;</b>' },
+ { input: '&amp;',
+ terms: ['a'],
+ output: '&amp;<b>a</b>mp;' }
+];
+
+try {
+ for (let i = 0; i < tests.length; i++) {
+ let highlighter = new Util.Highlighter(tests[i].terms);
+ let output = highlighter.highlight(tests[i].input);
+
+ JsUnit.assertEquals(`Test ${i + 1} highlight ` +
+ `"${tests[i].terms}" in "${tests[i].input}"`,
+ output, tests[i].output);
+
+ let parsed = false;
+ try {
+ Pango.parse_markup(output, -1, '');
+ parsed = true;
+ } catch (e) {}
+ JsUnit.assertEquals(`Test ${i + 1} is valid markup`, true, parsed);
+ }
+} catch (e) {
+ if (typeof(e.isJsUnitException) != 'undefined'
+ && e.isJsUnitException)
+ {
+ if (e.comment)
+ log(`Error in: ${e.comment}`);
+ }
+ throw e;
+}
--
2.35.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

@ -1,7 +1,7 @@
From 04bf0729ed6ae75736e297a10603bcb0a564cb28 Mon Sep 17 00:00:00 2001 From 05a5f4641c8ad6337ccb46e63abcaf27dd7eb852 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 9 Jun 2020 19:42:21 +0200 Date: Tue, 9 Jun 2020 19:42:21 +0200
Subject: [PATCH 1/2] popupMenu: Guard against non-menu-item children Subject: [PATCH 1/4] popupMenu: Guard against non-menu-item children
This avoid a harmless but annoying warning. This avoid a harmless but annoying warning.
--- ---
@ -9,10 +9,10 @@ This avoid a harmless but annoying warning.
1 file changed, 2 insertions(+), 1 deletion(-) 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js
index b6ad545087..cbbcfea1ff 100644 index 11528560d..144c600d7 100644
--- a/js/ui/popupMenu.js --- a/js/ui/popupMenu.js
+++ b/js/ui/popupMenu.js +++ b/js/ui/popupMenu.js
@@ -951,7 +951,8 @@ export class PopupMenuBase extends Signals.EventEmitter { @@ -773,7 +773,8 @@ var PopupMenuBase = class {
} }
_getMenuItems() { _getMenuItems() {
@ -23,13 +23,13 @@ index b6ad545087..cbbcfea1ff 100644
}); });
} }
-- --
2.45.2 2.31.1
From cffe984d9b85494fcf34500e78875b66c1cec534 Mon Sep 17 00:00:00 2001 From e5b2c2b3cfd0443fa83fd1f6f56f65fefa5186c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 9 Jun 2020 19:48:06 +0200 Date: Tue, 9 Jun 2020 19:48:06 +0200
Subject: [PATCH 2/2] st/shadow: Check pipeline when painting Subject: [PATCH 2/4] st/shadow: Check pipeline when painting
We shouldn't simply assume that st_shadow_helper_update() has been We shouldn't simply assume that st_shadow_helper_update() has been
called before paint() or that the pipeline was created successfully. called before paint() or that the pipeline was created successfully.
@ -38,25 +38,147 @@ called before paint() or that the pipeline was created successfully.
1 file changed, 6 insertions(+), 5 deletions(-) 1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/src/st/st-shadow.c b/src/st/st-shadow.c diff --git a/src/st/st-shadow.c b/src/st/st-shadow.c
index a406b61532..574445aeac 100644 index ab3eaa856..d53808698 100644
--- a/src/st/st-shadow.c --- a/src/st/st-shadow.c
+++ b/src/st/st-shadow.c +++ b/src/st/st-shadow.c
@@ -294,9 +294,10 @@ st_shadow_helper_paint (StShadowHelper *helper, @@ -296,9 +296,10 @@ st_shadow_helper_paint (StShadowHelper *helper,
ClutterActorBox *actor_box, ClutterActorBox *actor_box,
uint8_t paint_opacity) guint8 paint_opacity)
{ {
- _st_paint_shadow_with_opacity (helper->shadow, - _st_paint_shadow_with_opacity (helper->shadow,
- node, - framebuffer,
- helper->pipeline, - helper->pipeline,
- actor_box, - actor_box,
- paint_opacity); - paint_opacity);
+ if (helper->pipeline != NULL) + if (helper->pipeline != NULL)
+ _st_paint_shadow_with_opacity (helper->shadow, + _st_paint_shadow_with_opacity (helper->shadow,
+ node, + framebuffer,
+ helper->pipeline, + helper->pipeline,
+ actor_box, + actor_box,
+ paint_opacity); + paint_opacity);
} }
-- --
2.45.2 2.31.1
From 0f7656d85af51339d14217b9a673442a18df3de8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 8 Jul 2021 19:10:05 +0200
Subject: [PATCH 3/4] messageTray: Always remove destroyed banners
Currently we only mark the banner as removed if it is destroyed
while in SHOWN or SHOWING state, but not if we're already HIDING
(for example in response to `NotificationBanner::done-displaying`).
If this happens, we'll try to destroy the notification again at
the end of the transition, which leads to (harmless but annoying)
log spam since Notifications were turned into GObjects (that are
disposed when destroyed).
Address this by always marking destroyed banners as removed, while
still only triggering a state update while shown (or in the process
of being shown).
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4457
---
js/ui/messageTray.js | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index 1dab00a70..ccf56fc5b 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -1022,17 +1022,20 @@ var MessageTray = GObject.registerClass({
}
_onNotificationDestroy(notification) {
- if (this._notification == notification && (this._notificationState == State.SHOWN || this._notificationState == State.SHOWING)) {
- this._updateNotificationTimeout(0);
- this._notificationRemoved = true;
- this._updateState();
- return;
- }
+ this._notificationRemoved = this._notification === notification;
- let index = this._notificationQueue.indexOf(notification);
- if (index != -1) {
- this._notificationQueue.splice(index, 1);
- this.emit('queue-changed');
+ if (this._notificationRemoved) {
+ if (this._notificationState === State.SHOWN ||
+ this._notificationState === State.SHOWING) {
+ this._updateNotificationTimeout(0);
+ this._updateState();
+ }
+ } else {
+ const index = this._notificationQueue.indexOf(notification);
+ if (index !== -1) {
+ this._notificationQueue.splice(index, 1);
+ this.emit('queue-changed');
+ }
}
}
--
2.31.1
From 8652836521d0729ce230268c7b448cdb393d5b47 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 8 Jul 2021 19:23:38 +0200
Subject: [PATCH 4/4] shellInfo: Don't destroy source on undo
Destroying the source from an action callback will result in the
notification being destroyed twice:
- source.destroy() destroys all its notifications
- a notification destroys itself after an action
was activated
This results in unwanted log spam when attempting to dispose the
notification for a second time.
There is actually no good reason for destroying the source explicitly,
as sources already self-destruct with their last notification.
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4457
---
js/ui/overview.js | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/js/ui/overview.js b/js/ui/overview.js
index 529779ea8..c71b11389 100644
--- a/js/ui/overview.js
+++ b/js/ui/overview.js
@@ -25,16 +25,6 @@ var OVERVIEW_ACTIVATION_TIMEOUT = 0.5;
var ShellInfo = class {
constructor() {
this._source = null;
- this._undoCallback = null;
- }
-
- _onUndoClicked() {
- if (this._undoCallback)
- this._undoCallback();
- this._undoCallback = null;
-
- if (this._source)
- this._source.destroy();
}
setMessage(text, options) {
@@ -64,9 +54,8 @@ var ShellInfo = class {
notification.update(text, null, { clear: true });
}
- this._undoCallback = undoCallback;
if (undoCallback)
- notification.addAction(_("Undo"), this._onUndoClicked.bind(this));
+ notification.addAction(_('Undo'), () => undoCallback());
this._source.showNotification(notification);
}
--
2.31.1

@ -0,0 +1,244 @@
From 1eb9fef5e18d56bbe7a6422303ff8e31fe677759 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Mon, 7 Jun 2021 17:49:57 +0200
Subject: [PATCH 1/5] status/network: Disable modem connection when windows
aren't allowed
The item launches the corresponding Settings panel when activated, which
doesn't work when windows are disabled by the session mode. Rather than
failing silently, turn the item insensitive.
---
js/ui/status/network.js | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 5487fde40..6e7878d20 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -563,6 +563,10 @@ var NMDeviceModem = class extends NMConnectionDevice {
this._iconChanged();
});
}
+
+ this._sessionUpdatedId =
+ Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
+ this._sessionUpdated();
}
get category() {
@@ -573,6 +577,10 @@ var NMDeviceModem = class extends NMConnectionDevice {
launchSettingsPanel('network', 'connect-3g', this._device.get_path());
}
+ _sessionUpdated() {
+ this._autoConnectItem.sensitive = Main.sessionMode.hasWindows;
+ }
+
destroy() {
if (this._operatorNameId) {
this._mobileDevice.disconnect(this._operatorNameId);
@@ -582,6 +590,10 @@ var NMDeviceModem = class extends NMConnectionDevice {
this._mobileDevice.disconnect(this._signalQualityId);
this._signalQualityId = 0;
}
+ if (this._sessionUpdatedId) {
+ Main.sessionMode.disconnect(this._sessionUpdatedId);
+ this._sessionUpdatedId = 0;
+ }
super.destroy();
}
--
2.31.1
From 0288558940c0090dca0873daeaa33e8d20cdbb0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Mon, 7 Jun 2021 18:28:32 +0200
Subject: [PATCH 2/5] status/network: Only list wifi networks that can be
activated
Setting up a connection for an Enterprise WPA(2) encrypted wireless
network requires Settings. That's not available when windows are
disabled via the session mode, so filter out affected entries.
---
js/ui/status/network.js | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 6e7878d20..36915dbc1 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -1,6 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported NMApplet */
-const { Clutter, Gio, GLib, GObject, NM, St } = imports.gi;
+const { Clutter, Gio, GLib, GObject, Meta, NM, St } = imports.gi;
const Signals = imports.signals;
const Animation = imports.ui.animation;
@@ -816,6 +816,11 @@ class NMWirelessDialog extends ModalDialog.ModalDialog {
GLib.source_remove(this._scanTimeoutId);
this._scanTimeoutId = 0;
}
+
+ if (this._syncVisibilityId) {
+ Meta.later_remove(this._syncVisibilityId);
+ this._syncVisibilityId = 0;
+ }
}
_onScanTimeout() {
@@ -1149,9 +1154,32 @@ class NMWirelessDialog extends ModalDialog.ModalDialog {
this._itemBox.insert_child_at_index(network.item, newPos);
}
+ this._queueSyncItemVisibility();
this._syncView();
}
+ _queueSyncItemVisibility() {
+ if (this._syncVisibilityId)
+ return;
+
+ this._syncVisibilityId = Meta.later_add(
+ Meta.LaterType.BEFORE_REDRAW,
+ () => {
+ const { hasWindows } = Main.sessionMode;
+ const { WPA2_ENT, WPA_ENT } = NMAccessPointSecurity;
+
+ for (const network of this._networks) {
+ const [firstAp] = network.accessPoints;
+ network.item.visible =
+ hasWindows ||
+ network.connections.length > 0 ||
+ (firstAp._secType !== WPA2_ENT && firstAp._secType !== WPA_ENT);
+ }
+ this._syncVisibilityId = 0;
+ return GLib.SOURCE_REMOVE;
+ });
+ }
+
_accessPointRemoved(device, accessPoint) {
let res = this._findExistingNetwork(accessPoint);
--
2.31.1
From eb9620bc134ef8e7732f5e64b93ac9ea5bba2092 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 8 Jun 2021 00:17:48 +0200
Subject: [PATCH 3/5] status/network: Consider network-control action
NetworkManager installs a `network-control` polkit action that can
be used to disallow network configuration, except that we happily
ignore it. Add it to the conditions that turn a network section
insensitive.
---
js/ui/status/network.js | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 36915dbc1..e238fdfe7 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -1,6 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported NMApplet */
-const { Clutter, Gio, GLib, GObject, Meta, NM, St } = imports.gi;
+const { Clutter, Gio, GLib, GObject, Meta, NM, Polkit, St } = imports.gi;
const Signals = imports.signals;
const Animation = imports.ui.animation;
@@ -1750,11 +1750,21 @@ class Indicator extends PanelMenu.SystemIndicator {
this._client.connect('connection-removed', this._connectionRemoved.bind(this));
Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
+ try {
+ this._configPermission = await Polkit.Permission.new(
+ 'org.freedesktop.NetworkManager.network-control', null, null);
+ } catch (e) {
+ log('No permission to control network connections: %s'.format(e.toString()));
+ this._configPermission = null;
+ }
this._sessionUpdated();
}
_sessionUpdated() {
- let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
+ const sensitive =
+ !Main.sessionMode.isLocked &&
+ !Main.sessionMode.isGreeter &&
+ this._configPermission && this._configPermission.allowed;
this.menu.setSensitive(sensitive);
}
--
2.31.1
From 2392810bb7e3d48fb33c4d6de39f5be2eca58988 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 10 Jun 2021 23:12:27 +0200
Subject: [PATCH 4/5] sessionMode: Enable networkAgent on login screen
We will soon enable the network sections in the status menu on the
login screen, so enable the network agent to handle authentication
requests (like wifi/VPN passwords).
---
js/ui/sessionMode.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js
index aa69fd115..4d4fb2444 100644
--- a/js/ui/sessionMode.js
+++ b/js/ui/sessionMode.js
@@ -47,7 +47,9 @@ const _modes = {
isGreeter: true,
isPrimary: true,
unlockDialog: imports.gdm.loginDialog.LoginDialog,
- components: ['polkitAgent'],
+ components: Config.HAVE_NETWORKMANAGER
+ ? ['networkAgent', 'polkitAgent']
+ : ['polkitAgent'],
panel: {
left: [],
center: ['dateMenu'],
--
2.31.1
From b5fedfd846f271bf28be02ce5cd8517af7a3bc0a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 8 Jun 2021 00:19:26 +0200
Subject: [PATCH 5/5] status/network: Do not disable on login screen
We currently disable all network items on both the lock- and login
screen. While it makes sense to be very restrictive on the lock screen,
there are some (fringe) use cases for being more permissive on the
login screen (like remote home directories only accessible via VPN).
There's precedence with the power-off/restart actions to be less
restrictive on the login screen, and since we started respecting
the `network-control` polkit action, it's possible to restore the
old behavior if desired.
---
js/ui/status/network.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index e238fdfe7..f510f90ae 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -1763,7 +1763,6 @@ class Indicator extends PanelMenu.SystemIndicator {
_sessionUpdated() {
const sensitive =
!Main.sessionMode.isLocked &&
- !Main.sessionMode.isGreeter &&
this._configPermission && this._configPermission.allowed;
this.menu.setSensitive(sensitive);
}
--
2.31.1

@ -1,4 +1,4 @@
From 8fcaf1708fee86b1c16c9749dc1794be5a2a86fd Mon Sep 17 00:00:00 2001 From 1f8252470ce43dc8a0680871013e2f4492764302 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build> From: rpm-build <rpm-build>
Date: Mon, 28 Feb 2022 10:27:09 -0500 Date: Mon, 28 Feb 2022 10:27:09 -0500
Subject: [PATCH] data: Enable logo extension out of the box Subject: [PATCH] data: Enable logo extension out of the box
@ -12,10 +12,21 @@ This commit makes sure it gets enabled out of the box.
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
index 3dd9d2d86b..fe1e266f8c 100644 index d5ea1e3..e3f440c 100644
--- a/data/org.gnome.shell.gschema.xml.in --- a/data/org.gnome.shell.gschema.xml.in
+++ b/data/org.gnome.shell.gschema.xml.in +++ b/data/org.gnome.shell.gschema.xml.in
@@ -12,7 +12,7 @@ @@ -1,45 +1,45 @@
<schemalist>
<schema id="org.gnome.shell" path="/org/gnome/shell/"
gettext-domain="@GETTEXT_PACKAGE@">
<key name="development-tools" type="b">
<default>true</default>
<summary>
Enable internal tools useful for developers and testers from Alt-F2
</summary>
<description>
Allows access to internal debugging and monitoring tools
using the Alt-F2 dialog.
</description> </description>
</key> </key>
<key name="enabled-extensions" type="as"> <key name="enabled-extensions" type="as">
@ -24,6 +35,33 @@ index 3dd9d2d86b..fe1e266f8c 100644
<summary>UUIDs of extensions to enable</summary> <summary>UUIDs of extensions to enable</summary>
<description> <description>
GNOME Shell extensions have a UUID property; this key lists extensions GNOME Shell extensions have a UUID property; this key lists extensions
which should be loaded. Any extension that wants to be loaded needs
to be in this list. You can also manipulate this list with the
EnableExtension and DisableExtension D-Bus methods on org.gnome.Shell.
</description>
</key>
<key name="disabled-extensions" type="as">
<default>[]</default>
<summary>UUIDs of extensions to force disabling</summary>
<description>
GNOME Shell extensions have a UUID property; this key lists extensions
which should be disabled, even if loaded as part of the current mode.
You can also manipulate this list with the EnableExtension and
DisableExtension D-Bus methods on org.gnome.Shell.
This key takes precedence over the “enabled-extensions” setting.
</description>
</key>
<key name="disable-user-extensions" type="b">
<default>false</default>
<summary>Disable user extensions</summary>
<description>
Disable all extensions the user has enabled without affecting
the “enabled-extension” setting.
</description>
</key>
<key name="disable-extension-version-validation" type="b">
<default>false</default>
<summary>Disables the validation of extension version compatibility</summary>
-- --
2.45.2 2.35.1

@ -1,4 +1,4 @@
From 9bb33b1c8d0dba0d5c9e98d98b1063a1d0408414 Mon Sep 17 00:00:00 2001 From a2e62e671260576d23f18c22c10a48ac4a8504af Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 17 Sep 2014 07:11:12 +0200 Date: Wed, 17 Sep 2014 07:11:12 +0200
Subject: [PATCH] Replace Web with Firefox in default favorites Subject: [PATCH] Replace Web with Firefox in default favorites
@ -9,30 +9,30 @@ Subject: [PATCH] Replace Web with Firefox in default favorites
2 files changed, 2 insertions(+), 1 deletion(-) 2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
index 3cd37692a7..bd2bd5ead8 100644 index cd6a2356d..b8a13a9cc 100644
--- a/data/org.gnome.shell.gschema.xml.in --- a/data/org.gnome.shell.gschema.xml.in
+++ b/data/org.gnome.shell.gschema.xml.in +++ b/data/org.gnome.shell.gschema.xml.in
@@ -61,7 +61,7 @@ @@ -50,7 +50,7 @@
</description> </description>
</key> </key>
<key name="favorite-apps" type="as"> <key name="favorite-apps" type="as">
- <default>[ 'org.gnome.Epiphany.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.TextEditor.desktop']</default> - <default>[ 'org.gnome.Epiphany.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default>
+ <default>[ 'org.mozilla.firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.TextEditor.desktop']</default> + <default>[ 'firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default>
<summary>List of desktop file IDs for favorite applications</summary> <summary>List of desktop file IDs for favorite applications</summary>
<description> <description>
The applications corresponding to these identifiers The applications corresponding to these identifiers
diff --git a/js/ui/appFavorites.js b/js/ui/appFavorites.js diff --git a/js/ui/appFavorites.js b/js/ui/appFavorites.js
index 576df3800d..a1deabde37 100644 index a876727ed..24ce16f81 100644
--- a/js/ui/appFavorites.js --- a/js/ui/appFavorites.js
+++ b/js/ui/appFavorites.js +++ b/js/ui/appFavorites.js
@@ -51,6 +51,7 @@ const RENAMED_DESKTOP_IDS = { @@ -52,6 +52,7 @@ const RENAMED_DESKTOP_IDS = {
'gnotski.desktop': 'org.gnome.Klotski.desktop', 'gnotski.desktop': 'org.gnome.Klotski.desktop',
'gtali.desktop': 'org.gnome.Tali.desktop', 'gtali.desktop': 'org.gnome.Tali.desktop',
'iagno.desktop': 'org.gnome.Reversi.desktop', 'iagno.desktop': 'org.gnome.Reversi.desktop',
+ 'firefox.desktop': 'org.mozilla.firefox.desktop', + 'mozilla-firefox.desktop': 'firefox.desktop',
'nautilus.desktop': 'org.gnome.Nautilus.desktop', 'nautilus.desktop': 'org.gnome.Nautilus.desktop',
'org.gnome.gnome-2048.desktop': 'org.gnome.TwentyFortyEight.desktop', 'org.gnome.gnome-2048.desktop': 'org.gnome.TwentyFortyEight.desktop',
'org.gnome.taquin.desktop': 'org.gnome.Taquin.desktop', 'org.gnome.taquin.desktop': 'org.gnome.Taquin.desktop',
-- --
2.45.2 2.30.1

@ -1,25 +1,25 @@
From d4d39560f1694f06c3594f8d34eaa4b038804920 Mon Sep 17 00:00:00 2001 From 1e699b55f3dc84b2ddbc5acd03424240eddbe06c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 9 Mar 2017 14:44:32 +0100 Date: Thu, 9 Mar 2017 14:44:32 +0100
Subject: [PATCH] appFavorites: Add terminal Subject: [PATCH 3/3] appFavorites: Add terminal
--- ---
data/org.gnome.shell.gschema.xml.in | 2 +- data/org.gnome.shell.gschema.xml.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
index bd2bd5ead8..4827fa5b79 100644 index 35ddaf4a9..d5ea1e35f 100644
--- a/data/org.gnome.shell.gschema.xml.in --- a/data/org.gnome.shell.gschema.xml.in
+++ b/data/org.gnome.shell.gschema.xml.in +++ b/data/org.gnome.shell.gschema.xml.in
@@ -61,7 +61,7 @@ @@ -50,7 +50,7 @@
</description> </description>
</key> </key>
<key name="favorite-apps" type="as"> <key name="favorite-apps" type="as">
- <default>[ 'org.mozilla.firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.TextEditor.desktop']</default> - <default>[ 'firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'yelp.desktop' ]</default>
+ <default>[ 'org.mozilla.firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.Ptyxis.desktop', 'org.gnome.TextEditor.desktop']</default> + <default>[ 'firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'yelp.desktop', 'org.gnome.Terminal.desktop' ]</default>
<summary>List of desktop file IDs for favorite applications</summary> <summary>List of desktop file IDs for favorite applications</summary>
<description> <description>
The applications corresponding to these identifiers The applications corresponding to these identifiers
-- --
2.45.2 2.31.1

@ -0,0 +1,26 @@
From 4e21aed64d48ddd22e40a3605084379b2fa7f1cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 9 Mar 2017 14:44:03 +0100
Subject: [PATCH 2/3] Add 'yelp' to default favorites
Help should be easily available, so add it to the default favorites.
---
data/org.gnome.shell.gschema.xml.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
index b8a13a9cc..35ddaf4a9 100644
--- a/data/org.gnome.shell.gschema.xml.in
+++ b/data/org.gnome.shell.gschema.xml.in
@@ -50,7 +50,7 @@
</description>
</key>
<key name="favorite-apps" type="as">
- <default>[ 'firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default>
+ <default>[ 'firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'yelp.desktop' ]</default>
<summary>List of desktop file IDs for favorite applications</summary>
<description>
The applications corresponding to these identifiers
--
2.31.1

@ -0,0 +1,227 @@
From 4024d59871d0c8990ef5e4243c9fc485971755e7 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Tue, 10 Aug 2021 13:25:57 -0400
Subject: [PATCH 1/3] extensionSystem: Get rid of _enabled boolean optimization
At the moment a session mode either allows extensions or it doesn't.
If it allows extensions, then the entire available list of
configured extensions get enabled as soon as the session mode is
entered.
Since enabling or disabling extensions is an all or nothing situation,
the code tracks whether extensions are already enabled when entering
the session mode, and if so, avoids iterating through the extension list
needlessly. It does this using a boolean named _enabled.
In the future, the extensions themselves will be given some say on
whether or not they should be enabled in a given session mode. This
means, the configured extension list may contain extensions that
shouldn't be enabled for a given session mode, and the _enabled boolean
will no longer be appropriated.
This commit drops the _enabled boolean optimization.
---
js/ui/extensionSystem.js | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
index 9f4eb757b..2aae44b53 100644
--- a/js/ui/extensionSystem.js
+++ b/js/ui/extensionSystem.js
@@ -23,7 +23,6 @@ const UPDATE_CHECK_TIMEOUT = 24 * 60 * 60; // 1 day in seconds
var ExtensionManager = class {
constructor() {
this._initialized = false;
- this._enabled = false;
this._updateNotified = false;
this._extensions = new Map();
@@ -597,9 +596,6 @@ var ExtensionManager = class {
}
_enableAllExtensions() {
- if (this._enabled)
- return;
-
if (!this._initialized) {
this._loadExtensions();
this._initialized = true;
@@ -608,20 +604,14 @@ var ExtensionManager = class {
this._callExtensionEnable(uuid);
});
}
- this._enabled = true;
}
_disableAllExtensions() {
- if (!this._enabled)
- return;
-
if (this._initialized) {
this._extensionOrder.slice().reverse().forEach(uuid => {
this._callExtensionDisable(uuid);
});
}
-
- this._enabled = false;
}
_sessionUpdated() {
--
2.33.1
From f883c3f87f9778a0c2ed34db648aad73668949e3 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Sat, 28 Aug 2021 13:54:39 -0400
Subject: [PATCH 2/3] extensionSystem: Allow extensions to run on the login
screen
At the moment it's not realy possible to extend the login screen to do
things it doesn't have built-in support for. This means in order
to support niche use cases, those cases have to change the main
code base. For instance, oVirt and Vmware deployments want to be able
to automaticaly log in guest VMs when a user pre-authenticates through a
console on a management host. To support those use cases, we added
code to the login screen directly, even though most machines will never
be associated with oVirt or Vmware management hosts.
We also get requests from e.g. government users that need certain features
at the login screen that wouldn't get used much outside of government
deployments. For instance, we've gotten requests that a machine contains
prominently displays that it has "Top Secret" information.
All of these use cases seem like they would better handled via
extensions that could be installed in the specific deployments. The
problem is extensions only run in the user session, and get
disabled at the login screen automatically.
This commit changes that. Now extensions can specify in their metadata
via a new sessionModes property, which modes that want to run in. For
backward compatibility, if an extension doesn't specify which session
modes it works in, its assumed the extension only works in the user
session.
---
js/ui/extensionSystem.js | 33 +++++++++++++++++++++++++++++----
1 file changed, 29 insertions(+), 4 deletions(-)
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
index 2aae44b53..937f86199 100644
--- a/js/ui/extensionSystem.js
+++ b/js/ui/extensionSystem.js
@@ -75,6 +75,28 @@ var ExtensionManager = class {
return [...this._extensions.keys()];
}
+ _extensionSupportsSessionMode(uuid) {
+ const extension = this.lookup(uuid);
+ if (!extension)
+ return false;
+
+ if (extension.sessionModes.includes(Main.sessionMode.currentMode))
+ return true;
+ if (extension.sessionModes.includes(Main.sessionMode.parentMode))
+ return true;
+ return false;
+ }
+
+ _sessionModeCanUseExtension(uuid) {
+ if (!Main.sessionMode.allowExtensions)
+ return false;
+
+ if (!this._extensionSupportsSessionMode(uuid))
+ return false;
+
+ return true;
+ }
+
_callExtensionDisable(uuid) {
let extension = this.lookup(uuid);
if (!extension)
@@ -134,7 +156,7 @@ var ExtensionManager = class {
}
_callExtensionEnable(uuid) {
- if (!Main.sessionMode.allowExtensions)
+ if (!this._sessionModeCanUseExtension(uuid))
return;
let extension = this.lookup(uuid);
@@ -316,6 +338,7 @@ var ExtensionManager = class {
hasPrefs: dir.get_child('prefs.js').query_exists(null),
hasUpdate: false,
canChange: false,
+ sessionModes: meta['session-modes'] ? meta['session-modes'] : [ 'user' ],
};
this._extensions.set(uuid, extension);
@@ -398,7 +421,7 @@ var ExtensionManager = class {
}
_callExtensionInit(uuid) {
- if (!Main.sessionMode.allowExtensions)
+ if (!this._sessionModeCanUseExtension(uuid))
return false;
let extension = this.lookup(uuid);
@@ -487,13 +510,15 @@ var ExtensionManager = class {
// Find and enable all the newly enabled extensions: UUIDs found in the
// new setting, but not in the old one.
newEnabledExtensions
- .filter(uuid => !this._enabledExtensions.includes(uuid))
+ .filter(uuid => !this._enabledExtensions.includes(uuid) &&
+ this._extensionSupportsSessionMode(uuid))
.forEach(uuid => this._callExtensionEnable(uuid));
// Find and disable all the newly disabled extensions: UUIDs found in the
// old setting, but not in the new one.
this._extensionOrder
- .filter(uuid => !newEnabledExtensions.includes(uuid))
+ .filter(uuid => !newEnabledExtensions.includes(uuid) ||
+ !this._extensionSupportsSessionMode(uuid))
.reverse().forEach(uuid => this._callExtensionDisable(uuid));
this._enabledExtensions = newEnabledExtensions;
--
2.33.1
From c637d0a14ea7223ea7d763e1c4dedb4d6b6609a4 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Tue, 10 Aug 2021 15:31:00 -0400
Subject: [PATCH 3/3] sessionMode: Allow extensions at the login and unlock
screens
Now extensions can specify which session modes they work in,
but specifying the login screen or unlock screen session modes in
an extensions metadata still won't work, because those session
modes disallow extensions.
This commit fixes that.
---
js/ui/sessionMode.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js
index 4d4fb2444..0534fd1d4 100644
--- a/js/ui/sessionMode.js
+++ b/js/ui/sessionMode.js
@@ -43,6 +43,7 @@ const _modes = {
},
'gdm': {
+ allowExtensions: true,
hasNotifications: true,
isGreeter: true,
isPrimary: true,
@@ -59,6 +60,7 @@ const _modes = {
},
'unlock-dialog': {
+ allowExtensions: true,
isLocked: true,
unlockDialog: undefined,
components: ['polkitAgent', 'telepathyClient'],
--
2.33.1

@ -0,0 +1,107 @@
From ad431c28788ac1a4ec815cc4985cdb09a1a82226 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Mon, 11 Sep 2023 19:20:14 +0200
Subject: [PATCH 1/2] status/network: Fix fallback SSID label
We currently only return the fallback label if the string returned
from the ssid was invalid or couldn't be transformed to UTF-8.
If the ssid parameter itself is empty, we throw an error.
Handle this case as well, as callers otherwise would need to duplicate
the existing error path themselves.
---
js/ui/status/network.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 1f17ca8f97..99a8d51f82 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -67,7 +67,9 @@ function signalToIcon(value) {
}
function ssidToLabel(ssid) {
- let label = NM.utils_ssid_to_utf8(ssid.get_data());
+ let label;
+ if (ssid)
+ label = NM.utils_ssid_to_utf8(ssid.get_data());
if (!label)
label = _("<unknown>");
return label;
--
2.41.0
From 0409f18446cb55a45187e00feadb12e4389381dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 30 Aug 2023 01:47:00 +0200
Subject: [PATCH 2/2] status/network: Use connection name with hidden AP
When connected to an OWE transition network, NetworkManager
reports the connected API with a hidden SSID.
Handle this by using the active connection's name before
ultimately falling back to the device name.
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6918
Part-of:
<https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2927>
---
js/ui/status/network.js | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 99a8d51f82..b407d8e78d 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -1395,26 +1395,36 @@ var NMDeviceWireless = class {
_getStatus() {
let ap = this._device.active_access_point;
- if (this._isHotSpotMaster())
+ if (this._isHotSpotMaster()) {
/* Translators: %s is a network identifier */
return _("%s Hotspot Active").format(this._description);
- else if (this._device.state >= NM.DeviceState.PREPARE &&
- this._device.state < NM.DeviceState.ACTIVATED)
+ } else if (this._device.state >= NM.DeviceState.PREPARE &&
+ this._device.state < NM.DeviceState.ACTIVATED) {
/* Translators: %s is a network identifier */
return _("%s Connecting").format(this._description);
- else if (ap)
- return ssidToLabel(ap.get_ssid());
- else if (!this._client.wireless_hardware_enabled)
+ } else if (ap) {
+ const ssid = ap.get_ssid();
+ if (ssid)
+ return ssidToLabel(ssid);
+
+ // Use connection name when connected to hidden AP
+ const activeConnection = this._device.get_active_connection();
+ if (activeConnection)
+ return activeConnection.connection.get_id();
+
+ return ssidToLabel(null);
+ } else if (!this._client.wireless_hardware_enabled) {
/* Translators: %s is a network identifier */
return _("%s Hardware Disabled").format(this._description);
- else if (!this._client.wireless_enabled)
+ } else if (!this._client.wireless_enabled) {
/* Translators: %s is a network identifier */
return _("%s Off").format(this._description);
- else if (this._device.state == NM.DeviceState.DISCONNECTED)
+ } else if (this._device.state == NM.DeviceState.DISCONNECTED) {
/* Translators: %s is a network identifier */
return _("%s Not Connected").format(this._description);
- else
+ } else {
return '';
+ }
}
_getMenuIcon() {
--
2.41.0

@ -1,4 +1,4 @@
From d77ed9ad5fdadcdefcc41fecf8200bd2bf47282d Mon Sep 17 00:00:00 2001 From 4a03da36817c8d22a32a63d5c115efcf49ce85f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 12 Jun 2024 13:13:41 +0200 Date: Wed, 12 Jun 2024 13:13:41 +0200
Subject: [PATCH 1/3] network: Split out CaptivePortalHandler class Subject: [PATCH 1/3] network: Split out CaptivePortalHandler class
@ -7,29 +7,28 @@ The handling of captive portals is going to be extended a bit,
so split out a proper class instead of mixing it in with the so split out a proper class instead of mixing it in with the
indicator code. indicator code.
--- ---
js/ui/status/network.js | 151 +++++++++++++++++++++++----------------- js/ui/status/network.js | 152 ++++++++++++++++++++++------------------
1 file changed, 87 insertions(+), 64 deletions(-) 1 file changed, 84 insertions(+), 68 deletions(-)
diff --git a/js/ui/status/network.js b/js/ui/status/network.js diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 404733b74c..d34e947073 100644 index b407d8e78d..6d070f6d88 100644
--- a/js/ui/status/network.js --- a/js/ui/status/network.js
+++ b/js/ui/status/network.js +++ b/js/ui/status/network.js
@@ -14,6 +14,7 @@ import * as Main from '../main.js'; @@ -51,7 +51,7 @@ var PortalHelperResult = {
import * as PopupMenu from '../popupMenu.js'; };
import * as MessageTray from '../messageTray.js';
import * as ModemManager from '../../misc/modemManager.js';
+import * as Signals from '../../misc/signals.js';
import * as Util from '../../misc/util.js';
import {Spinner} from '../animation.js'; const PortalHelperIface = loadInterfaceXML('org.gnome.Shell.PortalHelper');
@@ -1944,12 +1945,84 @@ class NMModemToggle extends NMDeviceToggle { -const PortalHelperProxy = Gio.DBusProxy.makeProxyWrapper(PortalHelperIface);
+const PortalHelperInfo = Gio.DBusInterfaceInfo.new_for_xml(PortalHelperIface);
function signalToIcon(value) {
if (value < 20)
@@ -1707,6 +1707,77 @@ var DeviceCategory = class extends PopupMenu.PopupMenuSection {
} }
}); };
+class CaptivePortalHandler extends Signals.EventEmitter { +class CaptivePortalHandler {
+ constructor(checkUri) { + constructor(checkUri) {
+ super();
+
+ this._checkUri = checkUri; + this._checkUri = checkUri;
+ this._connectivityQueue = new Set(); + this._connectivityQueue = new Set();
+ this._portalHelperProxy = null; + this._portalHelperProxy = null;
@ -44,7 +43,7 @@ index 404733b74c..d34e947073 100644
+ +
+ removeConnection(path) { + removeConnection(path) {
+ if (this._connectivityQueue.delete(path)) + if (this._connectivityQueue.delete(path))
+ this._portalHelperProxy?.CloseAsync(path); + this._portalHelperProxy?.CloseRemote(path);
+ } + }
+ +
+ _portalHelperDone(parameters) { + _portalHelperDone(parameters) {
@ -87,30 +86,24 @@ index 404733b74c..d34e947073 100644
+ } + }
+ } + }
+ +
+ this._portalHelperProxy?.AuthenticateAsync(path, this._checkUri, timestamp).catch(logError); + this._portalHelperProxy?.AuthenticateRemote(path, this._checkUri, timestamp);
+ this._connectivityQueue.add(path); + this._connectivityQueue.add(path);
+ } + }
+ +
+ clear() { + clear() {
+ for (const item of this._connectivityQueue) + for (const item of this._connectivityQueue)
+ this._portalHelperProxy?.CloseAsync(item); + this._portalHelperProxy?.CloseRemote(item);
+ this._connectivityQueue.clear(); + this._connectivityQueue.clear();
+ } + }
+} +}
+Signals.addSignalMethods(CaptivePortalHandler.prototype);
+ +
export const Indicator = GObject.registerClass( var NMApplet = GObject.registerClass(
class Indicator extends SystemIndicator { class Indicator extends PanelMenu.SystemIndicator {
_init() { _init() {
super._init(); @@ -1763,6 +1834,16 @@ class Indicator extends PanelMenu.SystemIndicator {
this._vpnSection.connect('icon-changed', this._updateIcon.bind(this));
- this._connectivityQueue = new Set(); this.menu.addMenuItem(this._vpnSection.item);
+ this._portalHandler = null;
this._mainConnection = null;
@@ -2004,6 +2077,16 @@ class Indicator extends SystemIndicator {
this, 'visible',
GObject.BindingFlags.SYNC_CREATE);
+ const {connectivityCheckUri} = this._client; + const {connectivityCheckUri} = this._client;
+ this._portalHandler = new CaptivePortalHandler(connectivityCheckUri); + this._portalHandler = new CaptivePortalHandler(connectivityCheckUri);
@ -122,87 +115,91 @@ index 404733b74c..d34e947073 100644
+ } catch (e) { } + } catch (e) { }
+ }); + });
+ +
this._client.connectObject( this._readConnections();
'notify::primary-connection', () => this._syncMainConnection(), this._readDevices();
'notify::activating-connection', () => this._syncMainConnection(), this._syncNMState();
@@ -2066,42 +2149,10 @@ class Indicator extends SystemIndicator { @@ -2074,51 +2155,10 @@ class Indicator extends PanelMenu.SystemIndicator {
this._notification?.destroy(); this._syncConnectivity();
} }
- _flushConnectivityQueue() { - _flushConnectivityQueue() {
- for (let item of this._connectivityQueue) - if (this._portalHelperProxy) {
- this._portalHelperProxy?.CloseAsync(item); - for (let item of this._connectivityQueue)
- this._connectivityQueue.clear(); - this._portalHelperProxy.CloseRemote(item);
- }
-
- this._connectivityQueue = [];
- } - }
- -
- _closeConnectivityCheck(path) { - _closeConnectivityCheck(path) {
- if (this._connectivityQueue.delete(path)) - let index = this._connectivityQueue.indexOf(path);
- this._portalHelperProxy?.CloseAsync(path); -
- if (index >= 0) {
- if (this._portalHelperProxy)
- this._portalHelperProxy.CloseRemote(path);
-
- this._connectivityQueue.splice(index, 1);
- }
- } - }
- -
- async _portalHelperDone(parameters) { - async _portalHelperDone(proxy, emitter, parameters) {
- let [path, result] = parameters; - let [path, result] = parameters;
- -
- if (result === PortalHelperResult.CANCELLED) { - if (result == PortalHelperResult.CANCELLED) {
- // Keep the connection in the queue, so the user is not - // Keep the connection in the queue, so the user is not
- // spammed with more logins until we next flush the queue, - // spammed with more logins until we next flush the queue,
- // which will happen once they choose a better connection - // which will happen once he chooses a better connection
- // or we get to full connectivity through other means - // or we get to full connectivity through other means
- } else if (result === PortalHelperResult.COMPLETED) { - } else if (result == PortalHelperResult.COMPLETED) {
- this._closeConnectivityCheck(path); - this._closeConnectivityCheck(path);
- } else if (result === PortalHelperResult.RECHECK) { - } else if (result == PortalHelperResult.RECHECK) {
- try { - try {
- const state = await this._client.check_connectivity_async(null); - const state = await this._client.check_connectivity_async(null);
- if (state >= NM.ConnectivityState.FULL) - if (state >= NM.ConnectivityState.FULL)
- this._closeConnectivityCheck(path); - this._closeConnectivityCheck(path);
- } catch (e) { } - } catch (e) { }
- } else { - } else {
- log(`Invalid result from portal helper: ${result}`); - log('Invalid result from portal helper: %s'.format(result));
- } - }
- } - }
- -
- async _syncConnectivity() { _syncConnectivity() {
+ _syncConnectivity() {
if (this._mainConnection == null || if (this._mainConnection == null ||
this._mainConnection.state !== NM.ActiveConnectionState.ACTIVATED) { this._mainConnection.state != NM.ActiveConnectionState.ACTIVATED) {
- this._flushConnectivityQueue(); - this._flushConnectivityQueue();
+ this._portalHandler.clear(); + this._portalHandler.clear();
return; return;
} }
@@ -2116,35 +2167,7 @@ class Indicator extends SystemIndicator { @@ -2133,31 +2173,7 @@ class Indicator extends PanelMenu.SystemIndicator {
if (!isPortal || Main.sessionMode.isGreeter) if (!isPortal || Main.sessionMode.isGreeter)
return; return;
- let path = this._mainConnection.get_path(); - let path = this._mainConnection.get_path();
- if (this._connectivityQueue.has(path)) - for (let item of this._connectivityQueue) {
- return; - if (item == path)
- return;
- }
- -
- let timestamp = global.get_current_time(); - let timestamp = global.get_current_time();
- if (!this._portalHelperProxy) { - if (this._portalHelperProxy) {
- this._portalHelperProxy = new Gio.DBusProxy({ - this._portalHelperProxy.AuthenticateRemote(path, '', timestamp);
- g_connection: Gio.DBus.session, - } else {
- g_name: 'org.gnome.Shell.PortalHelper', - new PortalHelperProxy(Gio.DBus.session, 'org.gnome.Shell.PortalHelper',
- g_object_path: '/org/gnome/Shell/PortalHelper', - '/org/gnome/Shell/PortalHelper', (proxy, error) => {
- g_interface_name: PortalHelperInfo.name, - if (error) {
- g_interface_info: PortalHelperInfo, - log('Error launching the portal helper: %s'.format(error));
- }); - return;
- this._portalHelperProxy.connectSignal('Done', - }
- (proxy, emitter, params) => {
- this._portalHelperDone(params).catch(logError);
- });
- -
- try { - this._portalHelperProxy = proxy;
- await this._portalHelperProxy.init_async( - proxy.connectSignal('Done', this._portalHelperDone.bind(this));
- GLib.PRIORITY_DEFAULT, null);
- } catch (e) {
- console.error(`Error launching the portal helper: ${e.message}`);
- }
- }
- -
- this._portalHelperProxy?.AuthenticateAsync(path, this._client.connectivity_check_uri, timestamp).catch(logError); - proxy.AuthenticateRemote(path, '', timestamp);
- });
- }
- -
- this._connectivityQueue.add(path); - this._connectivityQueue.push(path);
+ this._portalHandler.addConnection(this._mainConnection.get_path()); + this._portalHandler.addConnection(this._mainConnection.get_path());
} }
@ -211,7 +208,7 @@ index 404733b74c..d34e947073 100644
2.45.2 2.45.2
From cd489e54948e3f2900a1f4e354fd4bb43c62db6d Mon Sep 17 00:00:00 2001 From 7d1a2442c957df3a31ab544da9b4e1365b8c2348 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 12 Jun 2024 13:13:41 +0200 Date: Wed, 12 Jun 2024 13:13:41 +0200
Subject: [PATCH 2/3] status/network: Show notification when detecting captive Subject: [PATCH 2/3] status/network: Show notification when detecting captive
@ -232,11 +229,11 @@ Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7688
1 file changed, 34 insertions(+), 4 deletions(-) 1 file changed, 34 insertions(+), 4 deletions(-)
diff --git a/js/ui/status/network.js b/js/ui/status/network.js diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index d34e947073..5d1e168fb5 100644 index 6d070f6d88..5913467454 100644
--- a/js/ui/status/network.js --- a/js/ui/status/network.js
+++ b/js/ui/status/network.js +++ b/js/ui/status/network.js
@@ -1951,19 +1951,43 @@ class CaptivePortalHandler extends Signals.EventEmitter { @@ -1711,19 +1711,43 @@ class CaptivePortalHandler {
constructor(checkUri) {
this._checkUri = checkUri; this._checkUri = checkUri;
this._connectivityQueue = new Set(); this._connectivityQueue = new Set();
+ this._notifications = new Map(); + this._notifications = new Map();
@ -250,25 +247,25 @@ index d34e947073..5d1e168fb5 100644
return; return;
- this._launchPortalHelper(path).catch(logError); - this._launchPortalHelper(path).catch(logError);
+ const source = MessageTray.getSystemSource(); + const source = new MessageTray.Source(
+ _('System'),
+ 'emblem-system-symbolic');
+ Main.messageTray.add(source);
+ +
+ const notification = new MessageTray.Notification({ + const notification = new MessageTray.Notification(
+ title: _('Sign Into WiFi Network'), + source, _('Sign Into WiFi Network'), name);
+ body: name,
+ source,
+ });
+ notification.connect('activated', + notification.connect('activated',
+ () => this._onNotificationActivated(path).catch(logError)); + () => this._onNotificationActivated(path));
+ notification.connect('destroy', + notification.connect('destroy',
+ () => this._notifications.delete(path)); + () => this._notifications.delete(path));
+ this._notifications.set(path, notification); + this._notifications.set(path, notification);
+ source.addNotification(notification); + source.showNotification(notification);
} }
+ +
removeConnection(path) { removeConnection(path) {
if (this._connectivityQueue.delete(path)) if (this._connectivityQueue.delete(path))
this._portalHelperProxy?.CloseAsync(path); this._portalHelperProxy?.CloseRemote(path);
+ this._notifications.get(path)?.destroy( + this._notifications.get(path)?.destroy(
+ MessageTray.NotificationDestroyedReason.SOURCE_CLOSED); + MessageTray.NotificationDestroyedReason.SOURCE_CLOSED);
+ this._notifications.delete(path); + this._notifications.delete(path);
@ -282,9 +279,9 @@ index d34e947073..5d1e168fb5 100644
} }
_portalHelperDone(parameters) { _portalHelperDone(parameters) {
@@ -2014,6 +2038,10 @@ class CaptivePortalHandler extends Signals.EventEmitter { @@ -1774,6 +1798,10 @@ class CaptivePortalHandler {
for (const item of this._connectivityQueue) for (const item of this._connectivityQueue)
this._portalHelperProxy?.CloseAsync(item); this._portalHelperProxy?.CloseRemote(item);
this._connectivityQueue.clear(); this._connectivityQueue.clear();
+ +
+ for (const n of this._notifications.values()) + for (const n of this._notifications.values())
@ -292,8 +289,8 @@ index d34e947073..5d1e168fb5 100644
+ this._notifications.clear(); + this._notifications.clear();
} }
} }
Signals.addSignalMethods(CaptivePortalHandler.prototype);
@@ -2167,7 +2195,9 @@ class Indicator extends SystemIndicator { @@ -2173,7 +2201,9 @@ class Indicator extends PanelMenu.SystemIndicator {
if (!isPortal || Main.sessionMode.isGreeter) if (!isPortal || Main.sessionMode.isGreeter)
return; return;
@ -308,7 +305,7 @@ index d34e947073..5d1e168fb5 100644
2.45.2 2.45.2
From 52b8a150dd96086a48ba2ac7668b22e6429767fd Mon Sep 17 00:00:00 2001 From cda2810d13bb9b5294759a8268cfbb27d83190f1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 12 Jun 2024 13:13:41 +0200 Date: Wed, 12 Jun 2024 13:13:41 +0200
Subject: [PATCH 3/3] build: Add option to disable portal-helper Subject: [PATCH 3/3] build: Add option to disable portal-helper
@ -325,11 +322,11 @@ is disabled.
js/meson.build | 14 ++++++++------ js/meson.build | 14 ++++++++------
js/misc/config.js.in | 2 ++ js/misc/config.js.in | 2 ++
js/misc/meson.build | 1 + js/misc/meson.build | 1 +
js/ui/status/network.js | 15 +++++++++++---- js/ui/status/network.js | 13 ++++++++++---
meson.build | 5 +++++ meson.build | 5 +++++
meson_options.txt | 6 ++++++ meson_options.txt | 6 ++++++
src/meson.build | 2 +- src/meson.build | 2 +-
9 files changed, 44 insertions(+), 13 deletions(-) 9 files changed, 43 insertions(+), 12 deletions(-)
diff --git a/data/icons/meson.build b/data/icons/meson.build diff --git a/data/icons/meson.build b/data/icons/meson.build
index eff6e4b530..277df017b2 100644 index eff6e4b530..277df017b2 100644
@ -347,10 +344,10 @@ index eff6e4b530..277df017b2 100644
+install_subdir('hicolor', +install_subdir('hicolor',
+ install_dir: icondir, exclude_files: excluded_icons) + install_dir: icondir, exclude_files: excluded_icons)
diff --git a/data/meson.build b/data/meson.build diff --git a/data/meson.build b/data/meson.build
index 8654dfeca7..ed13b6baea 100644 index 4a1e16d467..01cf828310 100644
--- a/data/meson.build --- a/data/meson.build
+++ b/data/meson.build +++ b/data/meson.build
@@ -6,7 +6,7 @@ desktop_files = [ @@ -4,7 +4,7 @@ desktop_files = [
] ]
service_files = [] service_files = []
@ -382,52 +379,43 @@ index 4809f82b83..e594e23627 100644
+ ) + )
+endif +endif
diff --git a/js/misc/config.js.in b/js/misc/config.js.in diff --git a/js/misc/config.js.in b/js/misc/config.js.in
index ad8d46d841..ce319e0f84 100644 index e54e280441..0882af6d01 100644
--- a/js/misc/config.js.in --- a/js/misc/config.js.in
+++ b/js/misc/config.js.in +++ b/js/misc/config.js.in
@@ -7,6 +7,8 @@ export const PACKAGE_NAME = '@PACKAGE_NAME@'; @@ -8,6 +8,8 @@ var PACKAGE_VERSION = '@PACKAGE_VERSION@';
export const PACKAGE_VERSION = '@PACKAGE_VERSION@'; var HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
/* 1 if networkmanager is available, 0 otherwise */ /* 1 if networkmanager is available, 0 otherwise */
export const HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@; var HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@;
+/* 1 if portal helper is enabled, 0 otherwise */ +/* 1 if portal helper is enabled, 0 otherwise */
+export const HAVE_PORTAL_HELPER = @HAVE_PORTAL_HELPER@; +var HAVE_PORTAL_HELPER = @HAVE_PORTAL_HELPER@;
/* gettext package */ /* gettext package */
export const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@'; var GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
/* locale dir */ /* locale dir */
diff --git a/js/misc/meson.build b/js/misc/meson.build diff --git a/js/misc/meson.build b/js/misc/meson.build
index 5aceefac42..5fc8ca433f 100644 index 2702c3dbc9..5f5f6c390f 100644
--- a/js/misc/meson.build --- a/js/misc/meson.build
+++ b/js/misc/meson.build +++ b/js/misc/meson.build
@@ -4,6 +4,7 @@ jsconf.set('PACKAGE_VERSION', meson.project_version()) @@ -5,6 +5,7 @@ jsconf.set('GETTEXT_PACKAGE', meson.project_name())
jsconf.set('GETTEXT_PACKAGE', meson.project_name())
jsconf.set('LIBMUTTER_API_VERSION', mutter_api_version) jsconf.set('LIBMUTTER_API_VERSION', mutter_api_version)
jsconf.set10('HAVE_BLUETOOTH', bt_dep.found())
jsconf.set10('HAVE_NETWORKMANAGER', have_networkmanager) jsconf.set10('HAVE_NETWORKMANAGER', have_networkmanager)
+jsconf.set10('HAVE_PORTAL_HELPER', have_portal_helper) +jsconf.set10('HAVE_PORTAL_HELPER', have_portal_helper)
jsconf.set('datadir', datadir) jsconf.set('datadir', datadir)
jsconf.set('libexecdir', libexecdir) jsconf.set('libexecdir', libexecdir)
diff --git a/js/ui/status/network.js b/js/ui/status/network.js diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 5d1e168fb5..cdc9ba8928 100644 index 5913467454..27a5eeb823 100644
--- a/js/ui/status/network.js --- a/js/ui/status/network.js
+++ b/js/ui/status/network.js +++ b/js/ui/status/network.js
@@ -10,6 +10,7 @@ import Polkit from 'gi://Polkit'; @@ -4,6 +4,7 @@ const { Clutter, Gio, GLib, GObject, Meta, NM, Polkit, St } = imports.gi;
import Shell from 'gi://Shell'; const Signals = imports.signals;
import St from 'gi://St';
+import * as Config from '../../misc/config.js'; const Animation = imports.ui.animation;
import * as Main from '../main.js'; +const Config = imports.misc.config;
import * as PopupMenu from '../popupMenu.js'; const Main = imports.ui.main;
import * as MessageTray from '../messageTray.js'; const PanelMenu = imports.ui.panelMenu;
@@ -1967,7 +1968,7 @@ class CaptivePortalHandler extends Signals.EventEmitter { const PopupMenu = imports.ui.popupMenu;
source, @@ -1744,7 +1745,13 @@ class CaptivePortalHandler {
});
notification.connect('activated',
- () => this._onNotificationActivated(path).catch(logError));
+ () => this._onNotificationActivated(path));
notification.connect('destroy',
() => this._notifications.delete(path));
this._notifications.set(path, notification);
@@ -1984,7 +1985,13 @@ class CaptivePortalHandler extends Signals.EventEmitter {
} }
_onNotificationActivated(path) { _onNotificationActivated(path) {
@ -442,7 +430,7 @@ index 5d1e168fb5..cdc9ba8928 100644
Main.overview.hide(); Main.overview.hide();
Main.panel.closeCalendar(); Main.panel.closeCalendar();
@@ -2007,8 +2014,7 @@ class CaptivePortalHandler extends Signals.EventEmitter { @@ -1767,8 +1774,7 @@ class CaptivePortalHandler {
} }
} }
@ -452,19 +440,19 @@ index 5d1e168fb5..cdc9ba8928 100644
if (!this._portalHelperProxy) { if (!this._portalHelperProxy) {
this._portalHelperProxy = new Gio.DBusProxy({ this._portalHelperProxy = new Gio.DBusProxy({
g_connection: Gio.DBus.session, g_connection: Gio.DBus.session,
@@ -2030,6 +2036,7 @@ class CaptivePortalHandler extends Signals.EventEmitter { @@ -1790,6 +1796,7 @@ class CaptivePortalHandler {
} }
} }
+ const {timestamp} = context; + const {timestamp} = context;
this._portalHelperProxy?.AuthenticateAsync(path, this._checkUri, timestamp).catch(logError); this._portalHelperProxy?.AuthenticateRemote(path, this._checkUri, timestamp);
this._connectivityQueue.add(path); this._connectivityQueue.add(path);
} }
diff --git a/meson.build b/meson.build diff --git a/meson.build b/meson.build
index 035f54732a..4721bd6017 100644 index ff841dccf2..8feac29224 100644
--- a/meson.build --- a/meson.build
+++ b/meson.build +++ b/meson.build
@@ -107,6 +107,11 @@ else @@ -116,6 +116,11 @@ else
have_networkmanager = false have_networkmanager = false
endif endif
@ -473,14 +461,14 @@ index 035f54732a..4721bd6017 100644
+ error('Portal helper requires networkmanager support') + error('Portal helper requires networkmanager support')
+endif +endif
+ +
if get_option('camera_monitor') if get_option('systemd')
libpipewire_dep = dependency('libpipewire-0.3', version: pipewire_req) libsystemd_dep = dependency('libsystemd')
have_pipewire = true systemd_dep = dependency('systemd')
diff --git a/meson_options.txt b/meson_options.txt diff --git a/meson_options.txt b/meson_options.txt
index 6e83d92f2e..01e0d5803b 100644 index ef76b73c34..7666fc5421 100644
--- a/meson_options.txt --- a/meson_options.txt
+++ b/meson_options.txt +++ b/meson_options.txt
@@ -40,6 +40,12 @@ option('networkmanager', @@ -28,6 +28,12 @@ option('networkmanager',
description: 'Enable NetworkManager support' description: 'Enable NetworkManager support'
) )
@ -494,10 +482,10 @@ index 6e83d92f2e..01e0d5803b 100644
type: 'boolean', type: 'boolean',
value: true, value: true,
diff --git a/src/meson.build b/src/meson.build diff --git a/src/meson.build b/src/meson.build
index 752104e120..a3bf542480 100644 index d235c37438..3e1accf2e7 100644
--- a/src/meson.build --- a/src/meson.build
+++ b/src/meson.build +++ b/src/meson.build
@@ -286,7 +286,7 @@ executable('gnome-shell', 'main.c', @@ -250,7 +250,7 @@ executable('gnome-shell', 'main.c',
install: true install: true
) )

File diff suppressed because it is too large Load Diff

@ -0,0 +1,34 @@
From b8ae8f713a15b00ec447a23294948fc463220130 Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@debian.org>
Date: Mon, 6 May 2024 21:58:09 +0100
Subject: [PATCH] screencast: Correct expected bus name for streams
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Previously, this only worked because GDBusConnection was not filtering
signals by their sender correctly (GNOME/glib#3268).
Thanks: Alicia Boya García
Signed-off-by: Simon McVittie <smcv@debian.org>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3303>
---
js/dbusServices/screencast/screencastService.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/js/dbusServices/screencast/screencastService.js b/js/dbusServices/screencast/screencastService.js
index 708a15c84..0321b4d69 100644
--- a/js/dbusServices/screencast/screencastService.js
+++ b/js/dbusServices/screencast/screencastService.js
@@ -161,7 +161,7 @@ var Recorder = class {
});
this._streamProxy = new ScreenCastStreamProxy(Gio.DBus.session,
- 'org.gnome.ScreenCast.Stream',
+ 'org.gnome.Mutter.ScreenCast',
streamPath);
this._streamProxy.connectSignal('PipeWireStreamAdded',
--
2.45.0

File diff suppressed because it is too large Load Diff

@ -1,15 +1,4 @@
## START: Set by rpmautospec
## (rpmautospec version 0.6.5)
## RPMAUTOSPEC: autorelease, autochangelog
%define autorelease(e:s:pb:n) %{?-p:0.}%{lua:
release_number = 4;
base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}"));
print(release_number + base_release_number - 1);
}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}}
## END: Set by rpmautospec
%global tarball_version %%(echo %{version} | tr '~' '.') %global tarball_version %%(echo %{version} | tr '~' '.')
%global major_version %%(cut -d "." -f 1 <<<%{tarball_version})
%if 0%{?rhel} %if 0%{?rhel}
%global portal_helper 0 %global portal_helper 0
@ -18,83 +7,114 @@
%endif %endif
Name: gnome-shell Name: gnome-shell
Version: 47~alpha Version: 40.10
Release: %autorelease Release: 22%{?dist}
Summary: Window management and application launching for GNOME Summary: Window management and application launching for GNOME
License: GPL-2.0-or-later License: GPLv2+
URL: https://wiki.gnome.org/Projects/GnomeShell URL: https://wiki.gnome.org/Projects/GnomeShell
Source0: https://download.gnome.org/sources/gnome-shell/%{major_version}/%{name}-%{tarball_version}.tar.xz Source0: http://download.gnome.org/sources/gnome-shell/40/%{name}-%{tarball_version}.tar.xz
Recommends: gnome-shell-extension-background-logo
# Replace Epiphany with Firefox in the default favourite apps list, etc # Replace Epiphany with Firefox in the default favourite apps list, etc
# and enable background extension by default # and enable background extension by default
Patch: gnome-shell-favourite-apps-firefox.patch Patch1: gnome-shell-favourite-apps-firefox.patch
Patch: gnome-shell-favourite-apps-terminal.patch Patch2: gnome-shell-favourite-apps-yelp.patch
Patch: gnome-shell-enabled-extensions-background-logos.patch Patch3: gnome-shell-favourite-apps-terminal.patch
Patch4: gnome-shell-enabled-extensions-background-logos.patch
# Some users might have a broken PAM config, so we really need this
# downstream patch to stop trying on configuration errors.
Patch: 0001-gdm-Work-around-failing-fingerprint-auth.patch
# GDM/Lock stuff # GDM/Lock stuff
Patch: 0001-screenShield-unblank-when-inserting-smartcard.patch Patch10: 0001-screenShield-unblank-when-inserting-smartcard.patch
Patch: enforce-smartcard-at-unlock.patch Patch11: enforce-smartcard-at-unlock.patch
Patch: disable-unlock-entry-until-question.patch Patch12: disable-unlock-entry-until-question.patch
Patch13: 0001-loginDialog-make-info-messages-themed.patch
# Extensions Patch14: support-choicelist-extension.patch
Patch: 0001-extensionDownloader-Refuse-to-override-system-extens.patch Patch15: gdm-networking.patch
Patch16: login-screen-extensions.patch
Patch17: fix-resetting-auth-prompt.patch
Patch18: 0001-authPrompt-Disregard-smartcard-status-changes-events.patch
# Misc. # Misc.
Patch: 0001-panel-Use-branding-in-activities-button.patch Patch30: 0001-panel-add-an-icon-to-the-ActivitiesButton.patch
Patch: 0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch Patch31: 0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch
Patch: 0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch Patch32: 0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch
Patch: 0001-main-Dump-stack-on-segfaults-by-default.patch Patch33: 0001-main-Dump-stack-on-segfaults-by-default.patch
Patch: 0001-st-texture-cache-purge-on-resume.patch Patch34: 0001-extensionDownloader-Refuse-to-override-system-extens.patch
Patch: fix-some-js-warnings.patch Patch35: fix-some-js-warnings.patch
Patch: 0001-data-Update-generated-stylesheets.patch Patch36: 0001-st-texture-cache-purge-on-resume.patch
Patch: portal-notify.patch Patch37: 0001-Update-generated-stylesheets.patch
Patch: 0001-theme-Welcome-Illustration.patch Patch38: add-power-profiles-menu.patch
Patch39: 0001-status-network-Use-wwan-settings-panel-for-GSM-LTE-M.patch
%define eds_version 3.45.1 Patch40: 0001-welcomeDialog-Adapt-dialog-title.patch
%define gnome_desktop_version 44.0-7 Patch41: 0001-main-Leak-the-GJS-context-and-ShellGlobal.patch
%define glib2_version 2.79.2 Patch42: fix-markup-in-highlighter.patch
Patch43: restrict-dbus-callers.patch
Patch44: 0001-Revert-dash-Subtract-vertical-margins-from-availHeig.patch
Patch45: 0001-status-volume-Hide-sliders-initially.patch
Patch46: 0001-kbdA11yDialog-Use-MetaKeyboardA11yFlags.patch
Patch47: 0001-layout-Initialize-regions-unconditionally.patch
Patch48: 0001-introspect-Allowlist-GNOME-portal.patch
Patch49: 0001-introspect-Add-WindowsChanged-signal.patch
Patch50: 0001-window-tracker-Emit-tracked-windows-changed-on-title.patch
Patch51: 0001-magnifier-Request-window-relative-coordinates-for-fo.patch
Patch52: 0001-osk-layouts-Replace-SS-extra-key-with.patch
Patch53: 0001-po-Update-translations.patch
Patch54: 0001-st-icon-Only-get-resource-scale-after-peeking-theme-.patch
Patch55: 0001-window-tracker-Only-emit-tracked-windows-changed-on-.patch
Patch56: owe-support.patch
Patch57: 0001-windowMenu-Ignore-release.patch
Patch58: portal-notify.patch
Patch59: 0001-extensionSystem-Support-locking-down-extension-insta.patch
Patch60: 0001-windowPreview-Override-with-window-icon-if-available.patch
Patch61: screencast-bus-name.patch
Patch62: fix-inhibit-shortcut-permission.patch
Patch63: 0001-shell-window-tracker-Help-mutter-finding-app-info-s-.patch
%define eds_version 3.33.1
%define gnome_desktop_version 3.35.91
%define glib2_version 2.56.0
%define gobject_introspection_version 1.49.1 %define gobject_introspection_version 1.49.1
%define gjs_version 1.73.1 %define gjs_version 1.57.3
%define gtk3_version 3.15.0
%define gtk4_version 4.0.0 %define gtk4_version 4.0.0
%define adwaita_version 1.5.0 %define mutter_version 40.0~alpha.1.1
%define mutter_version 47~alpha
%define polkit_version 0.100 %define polkit_version 0.100
%define gsettings_desktop_schemas_version 47~alpha %define gsettings_desktop_schemas_version 40~alpha
%define ibus_version 1.5.2 %define ibus_version 1.5.2
%define gnome_bluetooth_version 1:42.3 %define gnome_bluetooth_version 1:3.9.0
%define gstreamer_version 1.4.5 %define gstreamer_version 1.4.5
%define pipewire_version 0.3.0 %define pipewire_version 0.3.0
%define gnome_settings_daemon_version 3.37.1 %define gnome_settings_daemon_version 3.37.1
%define libgweather_version 40~alpha
BuildRequires: bash-completion BuildRequires: bash-completion
BuildRequires: gcc BuildRequires: gcc
BuildRequires: meson BuildRequires: meson
BuildRequires: git BuildRequires: git
BuildRequires: pkgconfig(ibus-1.0) >= %{ibus_version} BuildRequires: ibus-devel >= %{ibus_version}
BuildRequires: chrpath
BuildRequires: desktop-file-utils BuildRequires: desktop-file-utils
BuildRequires: pkgconfig(libedataserver-1.2) >= %{eds_version} BuildRequires: evolution-data-server-devel >= %{eds_version}
BuildRequires: pkgconfig(gcr-4) BuildRequires: gcr-devel
BuildRequires: pkgconfig(gjs-1.0) >= %{gjs_version} BuildRequires: gjs-devel >= %{gjs_version}
BuildRequires: pkgconfig(gio-2.0) >= %{glib2_version} BuildRequires: glib2-devel >= %{glib2_version}
BuildRequires: pkgconfig(gnome-autoar-0) BuildRequires: gnome-autoar-devel
BuildRequires: pkgconfig(gnome-desktop-4) >= %{gnome_desktop_version} BuildRequires: pkgconfig(gnome-desktop-3.0)
BuildRequires: pkgconfig(gobject-introspection-1.0) >= %{gobject_introspection_version} BuildRequires: gobject-introspection >= %{gobject_introspection_version}
BuildRequires: mesa-libGL-devel BuildRequires: mesa-libGL-devel
BuildRequires: mesa-libEGL-devel BuildRequires: mesa-libEGL-devel
BuildRequires: pkgconfig(libnm) BuildRequires: NetworkManager-libnm-devel
BuildRequires: pkgconfig(polkit-agent-1) >= %{polkit_version} BuildRequires: polkit-devel >= %{polkit_version}
BuildRequires: pkgconfig(libstartup-notification-1.0) BuildRequires: startup-notification-devel
BuildRequires: pkgconfig(libsystemd) BuildRequires: systemd-devel
# for screencast recorder functionality # for screencast recorder functionality
BuildRequires: pkgconfig(gstreamer-base-1.0) >= %{gstreamer_version} BuildRequires: gstreamer1-devel >= %{gstreamer_version}
BuildRequires: pkgconfig(libpipewire-0.3) >= %{pipewire_version} BuildRequires: pkgconfig(libpipewire-0.3) >= %{pipewire_version}
BuildRequires: pkgconfig(gtk4) >= %{gtk4_version} BuildRequires: gtk3-devel >= %{gtk3_version}
BuildRequires: gtk4-devel >= %{gtk4_version}
BuildRequires: gettext >= 0.19.6 BuildRequires: gettext >= 0.19.6
BuildRequires: libcanberra-devel
BuildRequires: python3 BuildRequires: python3
# for barriers # for barriers
@ -102,32 +122,34 @@ BuildRequires: libXfixes-devel >= 5.0
# used in unused BigThemeImage # used in unused BigThemeImage
BuildRequires: librsvg2-devel BuildRequires: librsvg2-devel
BuildRequires: mutter-devel >= %{mutter_version} BuildRequires: mutter-devel >= %{mutter_version}
BuildRequires: pkgconfig(libpulse) BuildRequires: pulseaudio-libs-devel
%ifnarch s390 s390x ppc ppc64 ppc64p7 %ifnarch s390 s390x ppc ppc64 ppc64p7
BuildRequires: gnome-bluetooth-libs-devel >= %{gnome_bluetooth_version} BuildRequires: gnome-bluetooth-libs-devel >= %{gnome_bluetooth_version}
%endif %endif
# Bootstrap requirements # Bootstrap requirements
BuildRequires: gtk-doc BuildRequires: gtk-doc
%ifnarch s390 s390x %ifnarch s390 s390x
Recommends: gnome-bluetooth%{?_isa} >= %{gnome_bluetooth_version} Requires: gnome-bluetooth%{?_isa} >= %{gnome_bluetooth_version}
%endif %endif
Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version} Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version}
%if 0%{?rhel} != 7 %if 0%{?rhel} != 7
# Disabled on RHEL 7 to allow logging into KDE session by default # Disabled on RHEL 7 to allow logging into KDE session by default
Recommends: gnome-session-xsession Recommends: gnome-session-xsession
%endif %endif
Requires: gcr%{?_isa} # wrapper script uses to restart old GNOME session if run --replace
# from the command line
Requires: gobject-introspection%{?_isa} >= %{gobject_introspection_version} Requires: gobject-introspection%{?_isa} >= %{gobject_introspection_version}
Requires: gjs%{?_isa} >= %{gjs_version} Requires: gjs%{?_isa} >= %{gjs_version}
Requires: gtk3%{?_isa} >= %{gtk3_version}
Requires: gtk4%{?_isa} >= %{gtk4_version} Requires: gtk4%{?_isa} >= %{gtk4_version}
Requires: libadwaita%{_isa} >= %{adwaita_version} Requires: highcontrast-icon-theme
Requires: libnma-gtk4%{?_isa} Requires: libnma%{?_isa}
# needed for loading SVG's via gdk-pixbuf # needed for loading SVG's via gdk-pixbuf
Requires: librsvg2%{?_isa} Requires: librsvg2%{?_isa}
Requires: mutter%{?_isa} >= %{mutter_version} Requires: mutter%{?_isa} >= %{mutter_version}
Requires: upower%{?_isa} Requires: upower%{?_isa}
Requires: polkit%{?_isa} >= %{polkit_version} Requires: polkit%{?_isa} >= %{polkit_version}
Requires: gnome-desktop4%{?_isa} >= %{gnome_desktop_version} Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version}
Requires: glib2%{?_isa} >= %{glib2_version} Requires: glib2%{?_isa} >= %{glib2_version}
Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version} Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version}
Requires: gnome-settings-daemon%{?_isa} >= %{gnome_settings_daemon_version} Requires: gnome-settings-daemon%{?_isa} >= %{gnome_settings_daemon_version}
@ -141,23 +163,21 @@ Requires: at-spi2-atk%{?_isa}
# needed for on-screen keyboard # needed for on-screen keyboard
Requires: ibus%{?_isa} >= %{ibus_version} Requires: ibus%{?_isa} >= %{ibus_version}
# needed for "show keyboard layout" # needed for "show keyboard layout"
Requires: tecla Requires: libgnomekbd
# needed for the user menu # needed for the user menu
Requires: accountsservice-libs%{?_isa} Requires: accountsservice-libs%{?_isa}
Requires: gdm-libs%{?_isa} Requires: gdm-libs%{?_isa}
# needed for settings items in menus # needed for settings items in menus
Requires: gnome-control-center Requires: control-center
# needed by some utilities # needed by some utilities
Requires: python3%{_isa} Requires: python3%{_isa}
# needed for the dual-GPU launch menu # needed for the dual-GPU launch menu
Requires: switcheroo-control Requires: switcheroo-control
# needed for clocks/weather integration # needed for clocks/weather integration
Requires: geoclue2-libs%{?_isa} Requires: geoclue2-libs%{?_isa}
Requires: libgweather4%{?_isa} Requires: libgweather%{?_isa} >= %{libgweather_version}
# for gnome-extensions CLI tool
Requires: gettext
# needed for thunderbolt support # needed for thunderbolt support
Recommends: bolt%{?_isa} Requires: bolt%{?_isa}
# Needed for launching flatpak apps etc # Needed for launching flatpak apps etc
# 1.8.0 is needed for source type support in the screencast portal. # 1.8.0 is needed for source type support in the screencast portal.
Requires: xdg-desktop-portal-gtk >= 1.8.0 Requires: xdg-desktop-portal-gtk >= 1.8.0
@ -165,16 +185,6 @@ Requires: xdg-desktop-portal-gnome
# needed by the welcome dialog # needed by the welcome dialog
Recommends: gnome-tour Recommends: gnome-tour
%if %{portal_helper}
# needed for captive portal helper
Requires: webkitgtk6.0%{?_isa}
%endif
# https://github.com/containers/composefs/pull/229#issuecomment-1838735764
%if 0%{?rhel} >= 10
ExcludeArch: %{ix86}
%endif
Provides: desktop-notification-daemon = %{version}-%{release} Provides: desktop-notification-daemon = %{version}-%{release}
Provides: PolicyKit-authentication-agent = %{version}-%{release} Provides: PolicyKit-authentication-agent = %{version}-%{release}
Provides: bundled(gvc) Provides: bundled(gvc)
@ -209,7 +219,7 @@ easy to use experience.
%meson \ %meson \
-Dextensions_app=false \ -Dextensions_app=false \
%if %{portal_helper} %if %{portal_helper}
-Dportal_helper=true \ -Dportal_helper=true \
%else %else
-Dportal_helper=false \ -Dportal_helper=false \
%endif %endif
@ -227,27 +237,22 @@ mkdir -p %{buildroot}%{_datadir}/gnome-shell/search-providers
%check %check
desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Shell.desktop desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Shell.desktop
desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Shell.Extensions.desktop desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.desktop
%if %{portal_helper}
desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Shell.PortalHelper.desktop
%endif
%files -f %{name}.lang %files -f %{name}.lang
%license COPYING %license COPYING
%doc NEWS README.md %doc README.md
%{_bindir}/gnome-shell %{_bindir}/gnome-shell
%{_bindir}/gnome-extensions %{_bindir}/gnome-extensions
%{_bindir}/gnome-shell-extension-prefs %{_bindir}/gnome-shell-extension-prefs
%{_bindir}/gnome-shell-extension-tool %{_bindir}/gnome-shell-extension-tool
%{_bindir}/gnome-shell-test-tool %{_bindir}/gnome-shell-perf-tool
%{_datadir}/glib-2.0/schemas/*.xml %{_datadir}/glib-2.0/schemas/*.xml
%{_datadir}/glib-2.0/schemas/00_org.gnome.shell.gschema.override %{_datadir}/glib-2.0/schemas/00_org.gnome.shell.gschema.override
%{_datadir}/applications/org.gnome.Shell.Extensions.desktop %{_datadir}/applications/org.gnome.Shell.Extensions.desktop
%{_datadir}/applications/org.gnome.Shell.desktop %{_datadir}/applications/org.gnome.Shell.desktop
%{_datadir}/applications/evolution-calendar.desktop
%{_datadir}/bash-completion/completions/gnome-extensions %{_datadir}/bash-completion/completions/gnome-extensions
%{_datadir}/gnome-control-center/keybindings/50-gnome-shell-launchers.xml
%{_datadir}/gnome-control-center/keybindings/50-gnome-shell-screenshots.xml
%{_datadir}/gnome-control-center/keybindings/50-gnome-shell-system.xml %{_datadir}/gnome-control-center/keybindings/50-gnome-shell-system.xml
%{_datadir}/gnome-shell/ %{_datadir}/gnome-shell/
%{_datadir}/dbus-1/services/org.gnome.ScreenSaver.service %{_datadir}/dbus-1/services/org.gnome.ScreenSaver.service
@ -269,387 +274,232 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Shell.Porta
%{_userunitdir}/org.gnome.Shell.target %{_userunitdir}/org.gnome.Shell.target
%{_userunitdir}/org.gnome.Shell@wayland.service %{_userunitdir}/org.gnome.Shell@wayland.service
%{_userunitdir}/org.gnome.Shell@x11.service %{_userunitdir}/org.gnome.Shell@x11.service
%{_sysconfdir}/xdg/autostart/gnome-shell-overrides-migration.desktop
# Co own directory instead of pulling in xdg-desktop-portal - we
# are providing a backend to the portal, not depending on it
%dir %{_datadir}/xdg-desktop-portal/portals/
%{_datadir}/xdg-desktop-portal/portals/gnome-shell.portal
%{_libdir}/gnome-shell/ %{_libdir}/gnome-shell/
%{_libexecdir}/gnome-shell-calendar-server %{_libexecdir}/gnome-shell-calendar-server
%{_libexecdir}/gnome-shell-perf-helper %{_libexecdir}/gnome-shell-perf-helper
%{_libexecdir}/gnome-shell-hotplug-sniffer %{_libexecdir}/gnome-shell-hotplug-sniffer
%{_libexecdir}/gnome-shell-overrides-migration.sh
# Co own these directories instead of pulling in GConf
# after all, we are trying to get rid of GConf with these files
%dir %{_datadir}/GConf
%dir %{_datadir}/GConf/gsettings
%{_datadir}/GConf/gsettings/gnome-shell-overrides.convert
%{_mandir}/man1/gnome-extensions.1* %{_mandir}/man1/gnome-extensions.1*
%{_mandir}/man1/gnome-shell.1* %{_mandir}/man1/gnome-shell.1*
%if %{portal_helper} %if %{portal_helper}
%{_datadir}/applications/org.gnome.Shell.PortalHelper.desktop %{_datadir}/applications/org.gnome.Shell.PortalHelper.desktop
%{_datadir}/dbus-1/services/org.gnome.Shell.PortalHelper.service %{_datadir}/dbus-1/services/org.gnome.Shell.PortalHelper.service
%{_datadir}/icons/hicolor/scalable/apps/org.gnome.Shell.CaptivePortal.svg
%{_datadir}/icons/hicolor/symbolic/apps/org.gnome.Shell.CaptivePortal-symbolic.svg
%{_libexecdir}/gnome-shell-portal-helper %{_libexecdir}/gnome-shell-portal-helper
%endif %endif
%changelog %changelog
* Tue Nov 26 2024 MSVSphere Packaging Team <packager@msvsphere-os.ru> - 47~alpha-4 * Fri Oct 18 2024 Jonas Ådahl <jadahl@redhat.com> - 40.10-22
- Rebuilt for MSVSphere 10 - Help mutter finding app info for windows
Resolves: RHEL-63000
## START: Generated by rpmautospec
* Tue Aug 20 2024 Tomas Popela <tpopela@redhat.com> - 47~alpha-4 * Wed Jul 10 2024 Florian Müllner <fmuellner@redhat.com> - 40.10-21
- Use branded illustrations - Only open portal login in response to user action
Resolves: RHEL-39098
* Mon Aug 05 2024 Florian Müllner <fmuellner@redhat.com> - 47~alpha-3
- rpminspect: Use correct paths in runpath exception * Wed May 15 2024 Florian Müllner <fmuellner@redhat.com> - 40.10-20
- Fix inhibit-shortcut permissions
* Mon Jul 29 2024 Florian Müllner <fmuellner@redhat.com> - 47~alpha-2 Resolves: #RHEL-2031
- Switch default terminal
* Wed May 15 2024 Michael Catanzaro <mcatanzaro@redhat.com> - 40.10-19
* Tue Jul 23 2024 Florian Müllner <fmuellner@redhat.com> - 47~alpha-1 - Use correct bus name for screencast service
- Update to 47.alpha Related: RHEL-35775
* Tue Jul 09 2024 Florian Müllner <fmuellner@redhat.com> - 46.3.1-3 * Tue Mar 19 2024 Florian Müllner <fmuellner@redhat.com> - 40.10-18
- Only open captive portal login in response to user action - Use window icon in overview if available
Resolves: RHEL-24713
* Tue Jul 02 2024 Florian Müllner <fmuellner@redhat.com> - 46.3.1-2
- Only use RH branding on RHEL and use the system icon instead of a custom * Sat Feb 10 2024 Florian Müllner <fmuellner@redhat.com> - 40.10-17
asset to avoid including trademarked assets on non-RHEL installs. - Allow restricting extension installation
Resolves: RHEL-25017
* Mon Jul 01 2024 Florian Müllner <fmuellner@redhat.com> - 46.3.1-1
- Update to 46.3.1 * Wed Nov 01 2023 Michael Catanzaro <mcatanzaro@redhat.com> - 40.10-16
- Disable captive portal helper if WebKitGTK is not installed
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 46.2-4 Resolves: RHEL-10487
- Bump release for June 2024 mass rebuild
* Wed Oct 18 2023 Florian Müllner <fmuellner@redhat.com> - 40.10-15
* Wed Jun 05 2024 Florian Müllner <fmuellner@redhat.com> - 46.2-3 - Fix window-menu closing immediately on open
- Use dedicated icon for captive portal Resolves: RHEL-2663
* Tue May 28 2024 Florian Müllner <fmuellner@redhat.com> - 46.2-2 * Wed Sep 06 2023 Florian Müllner <fmuellner@redhat.com> - 40.10-14
- Add (back) rpminspect configuration - Support OWE networks
Resolves: #2236665
* Mon May 27 2024 Florian Müllner <fmuellner@redhat.com> - 46.2-1
- Update to 46.2 * Mon May 15 2023 Ray Strode <rstrode@redhat.com> - 40.10-13
- Don't reset smartcard conversation twice when smartcard is inserted.
* Thu May 23 2024 Florian Müllner <fmuellner@redhat.com> - 46.1-9 Resolves: #2140898
- Add downstream branding
* Wed Feb 22 2023 Florian Müllner <fmuellner@redhat.com> - 40.10-12
* Wed May 15 2024 Ray Strode <rstrode@redhat.com> - 46.1-8 - Require xdg-desktop-portal-gnome
- Fix error handling in fingerprint code Resolves: #2172524
* Wed May 15 2024 Florian Müllner <fmuellner@redhat.com> - 46.1-7 * Mon Feb 13 2023 Jonas Ådahl <jadahl@redhat.com> - 40.10-11
- Fix unlock prompt when animations are disabled - Backport 'WindowsChanged' regression fix
Resolves: #2168915
* Mon May 13 2024 Michael Catanzaro <mcatanzaro@redhat.com> - 46.1-6
- Fix screencast proxy bus name * Mon Feb 13 2023 Jonas Ådahl <jadahl@redhat.com> - 40.10-10
- Backport fix for starting headless
* Fri May 10 2024 Florian Müllner <fmuellner@redhat.com> - 46.1-5 Resolves: #2116363
- Fix auth regression in downstream patches
* Tue Feb 07 2023 Florian Müllner <fmuellner@redhat.com> - 40.10-9
* Fri May 03 2024 Florian Müllner <fmuellner@redhat.com> - 46.1-4 - Fix resetting auth prompt
- Adjust downstream patch to mutter changes Resolves: #2166226
* Thu May 02 2024 Florian Müllner <fmuellner@redhat.com> - 46.1-3 * Wed Jan 25 2023 Florian Müllner <fmuellner@redhat.com> - 40.10-8
- Don't use window icons in overview - Update translations
Resolves: #2131801
* Thu May 02 2024 Tomas Pelka <tpelka@redhat.com> - 46.1-2
- Add gating.yaml via API * Wed Jan 25 2023 Florian Müllner <fmuellner@redhat.com> - 40.10-7
- Use "ẞ" instead of "SS" in on-screen keyboard
* Mon Apr 22 2024 Florian Müllner <fmuellner@redhat.com> - 46.1-1 Resolves: #2019420
- Pick up F40 changes
* Wed Jan 18 2023 Florian Müllner <fmuellner@redhat.com> - 40.10-6
* Tue Apr 16 2024 Florian Müllner <fmuellner@redhat.com> - 46.0-2 - Request window-relative coordinates in focus tracker
- Re-apply downstream patches Resolves: #2009350
* Wed Apr 10 2024 Florian Müllner <fmuellner@gnome.org> - 46.0-1 * Fri Dec 02 2022 Jonas Ådahl <jadahl@redhat.com> - 40.10-5
- Backport F40 changes - Backport 'WindowsChanged' introspect signal
Related: #2148362
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 46~alpha-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild * Wed Nov 23 2022 Florian Müllner <fmuellner@redhat.com> - 40.10-4
- Fix struts on login screen
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 46~alpha-7 Resolves: #2145185
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - Allow gnome portal to access introspection API
Resolves: #2079194
* Thu Jan 18 2024 Troy Dawson <tdawson@redhat.com> - 46~alpha-6
- Make i686 exclusion for RHEL only * Mon Jun 20 2022 Florian Müllner <fmuellner@redhat.com> - 40.10-3
- Fix keyboard a11y confirmation dialog
* Thu Jan 18 2024 Troy Dawson <tdawson@redhat.com> - 46~alpha-5 Resolves: #2047644
- Re-enable i686 This is not a leaf package. Removing i686 affects too many
other packages. * Wed May 11 2022 Florian Müllner <fmuellner@redhat.com> - 40.10-2
- Hide volume sliders initially
* Mon Jan 15 2024 Michael Catanzaro <mcatanzaro@redhat.com> - 46~alpha-4 Related: #2052808
- Don't recommend WebKitGTK in RHEL
* Tue Apr 19 2022 Florian Müllner <fmuellner@redhat.com> - 40.10-1
* Tue Jan 09 2024 Troy Dawson <tdawson@redhat.com> - 46~alpha-3 - Update to 40.10
- Exclude i686 Related: #2066169
* Tue Jan 09 2024 František Zatloukal <fzatlouk@redhat.com> - 46~alpha-2 * Tue Apr 05 2022 Florian Müllner <fmuellner@redhat.com>- 40.9-5
- Rebuilt for evolution-data-server soname version bump - Keep new ShimMetaContext type private
Related: #2055366
* Tue Jan 09 2024 Florian Müllner <fmuellner@gnome.org> - 46~alpha-1
- Update to 46.alpha * Fri Apr 01 2022 Florian Müllner <fmuellner@redhat.com>- 40.9-4
- Restrict D-Bus callers
* Mon Jan 08 2024 Milan Crha <mcrha@redhat.com> - 45.2-6 Resolves: #2055366
- Rebuilt for evolution-data-server soname version bump
* Wed Mar 30 2022 Florian Müllner <fmuellner@redhat.com> - 40.9-3
* Mon Jan 08 2024 Yanko Kaneti <yaneti@declera.com> - 45.2-5 - Fix markup handling in highlighter
- Add NEWS Resolves: #2049194
- Fix warning on restacking
* Thu Jan 04 2024 Florian Müllner <fmuellner@gnome.org> - 45.2-4 Resolves: #2053638
- Add missing dependency of gnome-extensions CLI tool
* Mon Feb 28 2022 Ray Strode <rstrode@redhat.com> - 40.9-2
* Thu Dec 21 2023 Martin Stransky <stransky@redhat.com> - 45.2-3 - Depend on and use background extension
- Rename firefox.desktop to org.mozilla.firefox.desktop at Related: #2057150
RENAMED_DESKTOP_IDS
* Tue Feb 22 2022 Florian Müllner <fmuellner@redhat.com> - 40.9-1
* Wed Dec 20 2023 Martin Stransky <stransky@redhat.com> - 45.2-2 - Update to 40.9
- Renamed Firefox desktop file from firefox.desktop to Resolves: #2056411
org.mozilla.firefox.desktop
* Tue Feb 08 2022 Ray Strode <rstrode@redhat.com> - 40.8-3
* Sat Dec 02 2023 Florian Müllner <fmuellner@gnome.org> - 45.2-1 - Backport latest, working, version of ChoiceList extension
- Update to 45.2 - Regenerate stylesheet patch
Related: #1993954
* Mon Nov 27 2023 Milan Crha <mcrha@redhat.com> - 45.1-5
- Update License tag to SPDX * Thu Jan 27 2022 Florian Müllner <fmuellner@redhat.com> - 40.8-2
- Do not hardcode OS name in welcome dialog
* Wed Nov 15 2023 Dominik 'Rathann' Mierzejewski <dominik@greysector.net> - 45.1-4 Resolves: #2044040
- Recommend bolt instead of requiring it (#2192253)
* Mon Jan 17 2022 Florian Müllner <fmuellner@redhat.com> - 40.8-1
* Thu Nov 09 2023 Michael Catanzaro <mcatanzaro@redhat.com> - 45.1-3 - Update to 40.8
- Add patch to make portal helper optional Resolves: #2040061
* Thu Nov 09 2023 Michael Catanzaro <mcatanzaro@redhat.com> - 45.1-2 * Mon Dec 13 2021 Florian Müllner <fmuellner@redhat.com> - 40.7-1
- Add missing Recommends: webkitgtk6.0%%{?_isa} - Update to 40.7
Resolves: #2031655
* Tue Oct 31 2023 Florian Müllner <fmuellner@gnome.org> - 45.1-1
- Update to 45.1 * Thu Nov 04 2021 Florian Müllner <fmuellner@redhat.com> - 40.6-1
- Update to 40.6
* Sat Sep 16 2023 Florian Müllner <fmuellner@gnome.org> - 45.0-1 - Work around crashy tear down
- Update to 45.0 Resolves: #2008065
* Wed Sep 06 2023 Florian Müllner <fmuellner@gnome.org> - 45~rc-2
- Bump mutter requirement
* Wed Sep 06 2023 Florian Müllner <fmuellner@gnome.org> - 45~rc-1
- Update to 45.rc
* Wed Sep 06 2023 Ray Strode <rstrode@redhat.com> - 45~beta.1-7
- Add back -b to autorelease because it oddly seems to be needed
* Wed Sep 06 2023 Ray Strode <rstrode@redhat.com> - 45~beta.1-3
- Fix JS Error in log about background apps
* Tue Aug 29 2023 Ray Strode <rstrode@redhat.com> - 45~beta.1-3
- Rev release
* Tue Aug 29 2023 Ray Strode <rstrode@redhat.com> - 45~beta.1-1
- Eek, drop the Epoch I just had for testing
* Tue Aug 29 2023 Ray Strode <rstrode@redhat.com> - 1:45~beta.1-1
- Use input source defaults if not configured in gsettings
* Fri Aug 11 2023 Florian Müllner <fmuellner@gnome.org> - 45~beta.1-1
- Update to 45.beta.1
* Thu Aug 10 2023 Adam Williamson <awilliam@redhat.com> - 45~beta-2
- Backport MRs #2871 and #2872 to help fix broken alt-tab behavior
* Tue Aug 08 2023 Florian Müllner <fmuellner@gnome.org> - 45~beta-1
- Update to 45.beta
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 45~alpha-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Thu Jul 06 2023 Florian Müllner <fmuellner@gnome.org> - 45~alpha-1
- Update to 45.alpha
* Mon Jun 19 2023 Kalev Lember <klember@redhat.com> - 44.2-2
- Rebuilt for gcr soname bump
* Sat Jun 03 2023 Florian Müllner <fmuellner@gnome.org> - 44.2-1
- Update to 44.2
* Sat Mar 25 2023 Adam Williamson <awilliam@redhat.com> - 44.0-4
- Backport MR #2725 - *another* fix for screenshot notifications
* Fri Mar 24 2023 Adam Williamson <awilliam@redhat.com> - 44.0-3
- Backport a fix for screenshot notifications
* Sun Mar 19 2023 Florian Müllner <fmuellner@redhat.com> - 44.0-2
- Fix timed logout
Resolves: #2177853
* Sun Mar 19 2023 Florian Müllner <fmuellner@redhat.com> - 44.0-1
- Update to 44.0
* Tue Mar 14 2023 Dominik Mierzejewski <dominik@greysector.net> - 44~rc-2
- Recommend gnome-bluetooth instead of requiring it
Resolves rhbz#2172653
* Mon Mar 06 2023 Florian Müllner <fmuellner@redhat.com> - 44~rc-1
- Update to 44.rc
* Sun Mar 05 2023 Ray Strode <rstrode@redhat.com> - 44~beta-3
- Fix slowdown in at shutdown
Resolves: #2174753
* Mon Feb 20 2023 Adam Williamson <awilliam@redhat.com> - 44~beta-2
- Rebuild without changes for Bodhi reasons
* Tue Feb 14 2023 Florian Müllner <fmuellner@redhat.com> - 44~beta-1
- Update to 44.beta
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 43.1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Mon Nov 21 2022 Adam Williamson <awilliam@redhat.com> - 43.1-4
- Backport MR #2548 to fix keyboard shortcut inhibiting
* Thu Nov 17 2022 Jonas Ådahl <jadahl@redhat.com> - 43.1-3
- Backport missing screencast if gstreamer1-vaapi is installed
* Wed Nov 16 2022 Adam Williamson <awilliam@redhat.com> - 43.1-2
- Backport MR #2534 to fix layout switching in password entries
* Fri Nov 04 2022 Florian Müllner <fmuellner@redhat.com> - 43.1-1
- Update to 43.1
* Tue Oct 11 2022 Adam Williamson <awilliam@redhat.com> - 43.0-3
- Backport MR2508 to fix OSK space entry (#2131837)
* Thu Sep 22 2022 Kalev Lember <klember@redhat.com> - 43.0-2
- Backport MR2487 and MR2495 to fix input sources sorting (#2121110)
* Sat Sep 17 2022 Florian Müllner <fmuellner@redhat.com> - 43.0-1
- Update to 43.0
* Thu Sep 15 2022 Kalev Lember <klember@redhat.com> - 43~rc-3
- Backport a fix for initial setup session input sources sorting (#2121110)
* Tue Sep 06 2022 Kalev Lember <klember@redhat.com> - 43~rc-2
- Backport upstream fix to fix boot options (#2124043)
* Sun Sep 04 2022 Florian Müllner <fmuellner@redhat.com> - 43~rc-1
- Update to 43.rc
* Fri Sep 02 2022 Kalev Lember <klember@redhat.com> - 43~beta-3
- Add missing dep on gcr
* Thu Aug 11 2022 Kalev Lember <klember@redhat.com> - 43~beta-2
- Bump minimum required gjs version
* Wed Aug 10 2022 Florian Müllner <fmuellner@redhat.com> - 43~beta-1
- Update to 43.beta
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 43~alpha-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Tue Jul 19 2022 Milan Crha <mcrha@redhat.com> - 43~alpha-2
- Rebuilt for evolution-data-server soname version bump
- Add patch to port to gcr4
* Sun Jul 10 2022 Florian Müllner <fmuellner@redhat.com> - 43~alpha-1
- Update to 43.alpha
* Sat May 28 2022 Florian Müllner <fmuellner@redhat.com> - 42.2-1
- Update to 42.2
* Fri May 06 2022 Florian Müllner <fmuellner@redhat.com> - 42.1-1
- Update to 42.1
* Mon Apr 18 2022 Florian Müllner <fmuellner@redhat.com> - 42.0-3
- Fix monitor config switches with <super>p (#2073406)
- Fix stuck cover pane after startup animation (#2063156)
* Tue Mar 15 2022 Adam Williamson <awilliam@redhat.com> - 42.0-2
- Backport MR #2242 to fix new user default folder creation (#2064473)
* Sun Mar 13 2022 Florian Müllner <fmuellner@redhat.com> - 42.0-1
- Update to 42.0
* Wed Mar 09 2022 Adam Williamson <awilliam@redhat.com> - 42~rc-2
- Backport MR #2238 to fix crashes on first login
* Mon Mar 07 2022 Florian Müllner <fmuellner@redhat.com> - 42~rc-1
- Update to 42.rc
* Tue Mar 01 2022 Adam Williamson <awilliam@redhat.com> - 42~beta-4
- Update the MR #2185 backport
* Tue Mar 01 2022 Adam Williamson <awilliam@redhat.com> - 42~beta-3
- Backport MR #2185 to fix some styling issues at lower resolutions
* Wed Feb 16 2022 David King <amigadave@amigadave.com> - 42~beta-2
- Update some dependency versions
* Tue Feb 15 2022 Florian Müllner <fmuellner@redhat.com> - 42~beta-1
- Update to 42.beta
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 42~alpha-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Fri Jan 14 2022 David King <amigadave@amigadave.com> - 42~alpha-2
- Fix gweather4 dependency
* Fri Jan 14 2022 David King <amigadave@amigadave.com> - 42~alpha-1
- Update to 42.alpha
- Use pkgconfig for BuildRequires
* Fri Oct 29 2021 Adam Williamson <awilliam@redhat.com> - 41.0-8
- Backport MR #2011 to further fix unexpected scrolling (#2017192)
* Wed Oct 27 2021 Ray Strode <rstrode@redhat.com> - 41.0-7 * Wed Oct 27 2021 Florian Müllner <fmuellner@redhat.com> - 40.4-5
- Use correct patch for fixing unlock screen confusion - Adapt welcome dialog title
Resolves: #2013989
* Tue Oct 26 2021 Jonas Ådahl <jadahl@redhat.com> - 41.0-6 * Wed Oct 13 2021 Ray Strode <rstrode@redhat.com> - 40.4-4
- Work around crashy tear down - Ensure extensions are reenabled after unlock
Resolves: #2013801
* Tue Oct 26 2021 Ray Strode <rstrode@redhat.com> - 41.0-5 * Mon Sep 27 2021 Ray Strode <rstrode@redhat.com> - 40.4-3
- Fix unlock screen confusion when hitting escape too much - Allow extensions at the login screen
Related: #2006985
* Tue Oct 12 2021 Ray Strode <rstrode@redhat.com> - 41.0-4 * Thu Aug 19 2021 Florian Müllner <fmuellner@redhat.com> - 40.4-2
- Fix StPasswordEntry crash - Use wwan setting panel for GSM/LTE modems
Resolves: #2009637 Resolves: #1995560
* Thu Oct 07 2021 Adam Williamson <awilliam@redhat.com> - 41.0-3 * Wed Aug 18 2021 Florian Müllner <fmuellner@redhat.com> - 40.4-1
- Backport MR #1983 to fix wrong OSD icons (#2011872) - Update to 40.4
Resolves: #1995094
* Tue Oct 05 2021 Kalev Lember <klember@redhat.com> - 41.0-2 * Wed Aug 18 2021 Florian Müllner <fmuellner@redhat.com> - 40.3-4
- Backport upstream patch to fix scrolling to incorrect positions - Add power profiles menu
Resolves: #1994471
* Sun Sep 19 2021 Florian Müllner <fmuellner@redhat.com> - 41.0-1 * Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 40.3-3
- Update to 41.0 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Tue Sep 14 2021 Ray Strode <rstrode@redhat.com> - 41~rc.1-2 * Mon Aug 09 2021 Florian Müllner <fmuellner@redhat.com> - 40.3-2
- Drop extra capabilities from gnome-shell. They're optional and they break shutdown from the login screen with new glibs. - Avoid a gjs warning
Resolves: #1996998 Resolves: #1990821
* Tue Sep 07 2021 Florian Müllner <fmuellner@redhat.com> - 41~rc.1-1 * Mon Jul 12 2021 Florian Müllner <fmuellner@redhat.com> - 40.3-1
- Update to 41.rc.1 - Update to 40.3
Resolves: #1979143
- Fix some more JS warnings
Resolves: #1980414
* Sun Sep 05 2021 Florian Müllner <fmuellner@redhat.com> - 41~rc-1 * Tue Jun 15 2021 Florian Müllner <fmuellner@redhat.com> - 40.2-1
- Update to 41.rc - Update to 40.2-1
Resolves: #1971432
* Wed Aug 18 2021 Florian Müllner <fmuellner@redhat.com> - 41~beta-1 * Fri Jun 04 2021 Florian Müllner <fmuellner@redhat.com> - 40.1-5
- Update to 41.beta - Don't set CAP_SYS_NICE
Resolves: #1967973
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 40.3-2 * Wed Jun 02 2021 Florian Müllner <fmuellner@redhat.com> - 40.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - Fix regression in AuthList rebase
Resolves: #1966841
* Mon Jul 12 2021 Florian Müllner <fmuellner@redhat.com> - 40.3-1 * Thu May 27 2021 Florian Müllner <fmuellner@redhat.com> - 40.1-3
- Update to 40.3 - Update generated stylesheets
Resolves: #1965327
* Thu Jun 10 2021 Florian Müllner <fmuellner@redhat.com> - 40.2-1 * Wed May 19 2021 Florian Müllner <fmuellner@redhat.com> - 40.1-2
- Update to 40.2 - Re-apply RHEL8 downstream patches that are still valid
Resolves: #1949133
* Thu May 13 2021 Florian Müllner <fmuellner@redhat.com> - 40.1-1 * Fri May 14 2021 Florian Müllner <fmuellner@redhat.com> - 40.1-1
- Update to 40.1 - Update to 40.1
Resolves: #1951132
* Fri Apr 30 2021 Kalev Lember <klember@redhat.com> - 40.0-6 * Fri Apr 30 2021 Kalev Lember <klember@redhat.com> - 40.0-4
- Move gnome-tour dep here from gnome-initial-setup (#1955179) - Move gnome-tour dep here from gnome-initial-setup (#1955179)
* Wed Apr 28 2021 Benjamin Berg <bberg@redhat.com> - 40.0-5 * Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 40.0-3
- Update fix for password auth after background service failure - Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
Related: #1942443
* Fri Apr 23 2021 Benjamin Berg <bberg@redhat.com> - 40.0-4
- Fix password auth after secondary service failure
Related: #1942443
* Tue Apr 13 2021 Adam Williamson <awilliam@redhat.com> - 40.0-3
- Fix scrolling between workspaces/app grid pages with PgUp/PgDn
* Tue Apr 13 2021 Ray Strode <rstrode@redhat.com> - 40.0-2 * Tue Apr 13 2021 Ray Strode <rstrode@redhat.com> - 40.0-2
- Fix timed login when user list is disabled - Fix timed login when user list is disabled
@ -1944,6 +1794,3 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Shell.Porta
* Mon Aug 10 2009 Owen Taylor <otaylor@redhat.com> - 2.27.0-1 * Mon Aug 10 2009 Owen Taylor <otaylor@redhat.com> - 2.27.0-1
- Initial version - Initial version
## END: Generated by rpmautospec

Loading…
Cancel
Save