Compare commits
No commits in common. 'i10cs' and 'c9' have entirely different histories.
@ -1 +1 @@
|
|||||||
SOURCES/gnome-shell-47.1.tar.xz
|
SOURCES/gnome-shell-40.10.tar.xz
|
||||||
|
@ -1 +1 @@
|
|||||||
9dac2ffdf4063cff0dc5ca26efd699370a59f768 SOURCES/gnome-shell-47.1.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
|
||||||
|
|
@ -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,30 +0,0 @@
|
|||||||
From db2ac6188e3fb7ee727e9e71d5416e8f2b75f12b Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
|
||||||
Date: Thu, 7 Nov 2024 16:23:48 +0100
|
|
||||||
Subject: [PATCH] dialog: Wrap titles
|
|
||||||
|
|
||||||
Dialogs should not use titles that are too long to fit, but if
|
|
||||||
they do, wrapping is more appropriate than ellipsizing.
|
|
||||||
|
|
||||||
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3540>
|
|
||||||
---
|
|
||||||
js/ui/dialog.js | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/js/ui/dialog.js b/js/ui/dialog.js
|
|
||||||
index 11a27a0207..361fad3cb9 100644
|
|
||||||
--- a/js/ui/dialog.js
|
|
||||||
+++ b/js/ui/dialog.js
|
|
||||||
@@ -173,6 +173,9 @@ export const MessageDialogContent = GObject.registerClass({
|
|
||||||
this._title = new St.Label({style_class: 'message-dialog-title'});
|
|
||||||
this._description = new St.Label({style_class: 'message-dialog-description'});
|
|
||||||
|
|
||||||
+ this._title.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
|
||||||
+ this._title.clutter_text.line_wrap = true;
|
|
||||||
+
|
|
||||||
this._description.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
|
||||||
this._description.clutter_text.line_wrap = true;
|
|
||||||
|
|
||||||
--
|
|
||||||
2.47.0
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -1,463 +0,0 @@
|
|||||||
From 2c43d26950c709020ba78fdc2742adc4fd2841e5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jakub Steiner <jimmac@gmail.com>
|
|
||||||
Date: Tue, 20 Aug 2024 09:30:36 +0200
|
|
||||||
Subject: [PATCH] theme: Welcome Illustration
|
|
||||||
|
|
||||||
- RHEL10 branded welcome illustration for Tour.
|
|
||||||
---
|
|
||||||
data/theme/gnome-shell-start.svg | 351 ++++++++++---------------------
|
|
||||||
1 file changed, 106 insertions(+), 245 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/data/theme/gnome-shell-start.svg b/data/theme/gnome-shell-start.svg
|
|
||||||
index af139cf0d..609880493 100644
|
|
||||||
--- a/data/theme/gnome-shell-start.svg
|
|
||||||
+++ b/data/theme/gnome-shell-start.svg
|
|
||||||
@@ -1,67 +1,37 @@
|
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
- xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
- xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
- xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
- xmlns="http://www.w3.org/2000/svg"
|
|
||||||
- xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
- inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
|
|
||||||
+ inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
|
||||||
id="svg8"
|
|
||||||
version="1.1"
|
|
||||||
viewBox="0 0 600 400"
|
|
||||||
height="400"
|
|
||||||
width="600"
|
|
||||||
- sodipodi:docname="gnome-shell-start.svg">
|
|
||||||
- <defs
|
|
||||||
- id="defs2">
|
|
||||||
- <linearGradient
|
|
||||||
- id="a">
|
|
||||||
- <stop
|
|
||||||
+ sodipodi:docname="gnome-shell-start.svg"
|
|
||||||
+ xml:space="preserve"
|
|
||||||
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
+ xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
+ xmlns="http://www.w3.org/2000/svg"
|
|
||||||
+ xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
+ xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
+ xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
|
||||||
+ id="defs2"><linearGradient
|
|
||||||
+ id="a"><stop
|
|
||||||
offset="0"
|
|
||||||
stop-color="#eef4fc"
|
|
||||||
id="stop3"
|
|
||||||
- style="stop-color:#b2cdf1;stop-opacity:1" />
|
|
||||||
- <stop
|
|
||||||
+ style="stop-color:#b2cdf1;stop-opacity:1" /><stop
|
|
||||||
offset="1"
|
|
||||||
stop-color="#fff"
|
|
||||||
- id="stop5" />
|
|
||||||
- </linearGradient>
|
|
||||||
- <linearGradient
|
|
||||||
- inkscape:collect="always"
|
|
||||||
- xlink:href="#linearGradient10562"
|
|
||||||
- id="linearGradient10564"
|
|
||||||
- x1="-1179.9999"
|
|
||||||
- y1="1314.5198"
|
|
||||||
- x2="-940.00006"
|
|
||||||
- y2="1314.5198"
|
|
||||||
- gradientUnits="userSpaceOnUse"
|
|
||||||
- gradientTransform="matrix(1.3993149,0,0,1.3993149,1306.25,-919.42736)" />
|
|
||||||
- <linearGradient
|
|
||||||
- inkscape:collect="always"
|
|
||||||
- id="linearGradient10562">
|
|
||||||
- <stop
|
|
||||||
- style="stop-color:#3580e4;stop-opacity:1"
|
|
||||||
- offset="0"
|
|
||||||
- id="stop10558" />
|
|
||||||
- <stop
|
|
||||||
- style="stop-color:#8abfdd;stop-opacity:1"
|
|
||||||
- offset="1"
|
|
||||||
- id="stop10560" />
|
|
||||||
- </linearGradient>
|
|
||||||
- <clipPath
|
|
||||||
+ id="stop5" /></linearGradient><clipPath
|
|
||||||
id="e-3"
|
|
||||||
- clipPathUnits="userSpaceOnUse">
|
|
||||||
- <path
|
|
||||||
+ clipPathUnits="userSpaceOnUse"><path
|
|
||||||
d="m 65,177 c -18.502,0 -33.5,14.998 -33.5,33.5 0.008,7.371 4.131,15.807 11.388,23.526 l 12.617,13.171 H 75.02 l 12.137,-13.245 c 6.636,-7.059 11.33,-16.117 11.344,-23.452 0,-18.502 -14.998,-33.5 -33.5,-33.5 z"
|
|
||||||
style="marker:none"
|
|
||||||
fill="#ffffff"
|
|
||||||
stroke-width="2"
|
|
||||||
- id="path34-6" />
|
|
||||||
- </clipPath>
|
|
||||||
- <radialGradient
|
|
||||||
+ id="path34-6" /></clipPath><radialGradient
|
|
||||||
r="33.5"
|
|
||||||
fy="48.405998"
|
|
||||||
fx="79.091003"
|
|
||||||
@@ -70,27 +40,20 @@
|
|
||||||
gradientTransform="matrix(0.00476,1.62228,-1.43419,0.00422,141.702,-82.047)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="f-7"
|
|
||||||
- xlink:href="#b" />
|
|
||||||
- <linearGradient
|
|
||||||
- id="b">
|
|
||||||
- <stop
|
|
||||||
+ xlink:href="#b" /><linearGradient
|
|
||||||
+ id="b"><stop
|
|
||||||
offset="0"
|
|
||||||
stop-color="#fff"
|
|
||||||
- id="stop11" />
|
|
||||||
- <stop
|
|
||||||
+ id="stop11" /><stop
|
|
||||||
offset=".519"
|
|
||||||
stop-color="#fff"
|
|
||||||
- id="stop13" />
|
|
||||||
- <stop
|
|
||||||
+ id="stop13" /><stop
|
|
||||||
offset=".734"
|
|
||||||
stop-color="#cfcfcf"
|
|
||||||
- id="stop15" />
|
|
||||||
- <stop
|
|
||||||
+ id="stop15" /><stop
|
|
||||||
offset="1"
|
|
||||||
stop-color="#dcdcdc"
|
|
||||||
- id="stop17" />
|
|
||||||
- </linearGradient>
|
|
||||||
- <radialGradient
|
|
||||||
+ id="stop17" /></linearGradient><radialGradient
|
|
||||||
r="12"
|
|
||||||
fy="54.102001"
|
|
||||||
fx="71.473999"
|
|
||||||
@@ -99,23 +62,17 @@
|
|
||||||
gradientTransform="matrix(4.50607,0,0,4.76661,-259.306,-59.706)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="g-2"
|
|
||||||
- xlink:href="#c" />
|
|
||||||
- <linearGradient
|
|
||||||
- id="c">
|
|
||||||
- <stop
|
|
||||||
+ xlink:href="#c" /><linearGradient
|
|
||||||
+ id="c"><stop
|
|
||||||
offset="0"
|
|
||||||
stop-color="#ed686f"
|
|
||||||
- id="stop20" />
|
|
||||||
- <stop
|
|
||||||
+ id="stop20" /><stop
|
|
||||||
offset=".865"
|
|
||||||
stop-color="#a51d2d"
|
|
||||||
- id="stop22" />
|
|
||||||
- <stop
|
|
||||||
+ id="stop22" /><stop
|
|
||||||
offset="1"
|
|
||||||
stop-color="#e01b24"
|
|
||||||
- id="stop24" />
|
|
||||||
- </linearGradient>
|
|
||||||
- <radialGradient
|
|
||||||
+ id="stop24" /></linearGradient><radialGradient
|
|
||||||
r="14.583"
|
|
||||||
fy="49.777"
|
|
||||||
fx="40.152"
|
|
||||||
@@ -124,23 +81,17 @@
|
|
||||||
gradientTransform="matrix(0.87016,4.27869,-2.56693,0.52204,148.394,-163.306)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="h-7"
|
|
||||||
- xlink:href="#d" />
|
|
||||||
- <linearGradient
|
|
||||||
- id="d">
|
|
||||||
- <stop
|
|
||||||
+ xlink:href="#d" /><linearGradient
|
|
||||||
+ id="d"><stop
|
|
||||||
offset="0"
|
|
||||||
stop-color="#ed686f"
|
|
||||||
- id="stop27" />
|
|
||||||
- <stop
|
|
||||||
+ id="stop27" /><stop
|
|
||||||
offset=".911"
|
|
||||||
stop-color="#a51d2d"
|
|
||||||
- id="stop29" />
|
|
||||||
- <stop
|
|
||||||
+ id="stop29" /><stop
|
|
||||||
offset="1"
|
|
||||||
stop-color="#e01b24"
|
|
||||||
- id="stop31" />
|
|
||||||
- </linearGradient>
|
|
||||||
- <radialGradient
|
|
||||||
+ id="stop31" /></linearGradient><radialGradient
|
|
||||||
r="14.583"
|
|
||||||
fy="49.777"
|
|
||||||
fx="40.152"
|
|
||||||
@@ -149,51 +100,33 @@
|
|
||||||
gradientTransform="matrix(0.87016,4.27869,-2.56693,0.52204,148.394,-163.306)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="i-6"
|
|
||||||
- xlink:href="#d" />
|
|
||||||
- <linearGradient
|
|
||||||
- inkscape:collect="always"
|
|
||||||
- xlink:href="#linearGradient860"
|
|
||||||
- id="linearGradient22"
|
|
||||||
- gradientUnits="userSpaceOnUse"
|
|
||||||
- gradientTransform="matrix(-1.575111,0,0,1.575111,1217.8748,47.173672)"
|
|
||||||
- x1="85"
|
|
||||||
- y1="107.162"
|
|
||||||
- x2="85"
|
|
||||||
- y2="86" />
|
|
||||||
- <linearGradient
|
|
||||||
- id="linearGradient860">
|
|
||||||
- <stop
|
|
||||||
+ xlink:href="#d" /><linearGradient
|
|
||||||
+ id="linearGradient860"><stop
|
|
||||||
offset="0"
|
|
||||||
stop-color="#eef4fc"
|
|
||||||
id="stop856"
|
|
||||||
- style="stop-color:#c5dcf7;stop-opacity:1" />
|
|
||||||
- <stop
|
|
||||||
+ style="stop-color:#c5dcf7;stop-opacity:1" /><stop
|
|
||||||
offset="1"
|
|
||||||
stop-color="#fff"
|
|
||||||
- id="stop858" />
|
|
||||||
- </linearGradient>
|
|
||||||
- <linearGradient
|
|
||||||
- inkscape:collect="always"
|
|
||||||
- xlink:href="#linearGradient860"
|
|
||||||
- id="linearGradient24"
|
|
||||||
- gradientUnits="userSpaceOnUse"
|
|
||||||
- gradientTransform="matrix(-2.1158457,0,0,2.1158457,1459.4994,-118.92278)"
|
|
||||||
- x1="85"
|
|
||||||
- y1="110.30392"
|
|
||||||
- x2="85"
|
|
||||||
- y2="86.986084" />
|
|
||||||
- <linearGradient
|
|
||||||
- inkscape:collect="always"
|
|
||||||
- xlink:href="#linearGradient860"
|
|
||||||
- id="linearGradient23"
|
|
||||||
- gradientUnits="userSpaceOnUse"
|
|
||||||
- gradientTransform="matrix(1.5463767,0,0,1.5463767,655.03375,-16.075361)"
|
|
||||||
- x1="85"
|
|
||||||
- y1="107.162"
|
|
||||||
- x2="85"
|
|
||||||
- y2="82.13472" />
|
|
||||||
- </defs>
|
|
||||||
- <sodipodi:namedview
|
|
||||||
+ id="stop858" /></linearGradient><style
|
|
||||||
+ id="style1">
|
|
||||||
+ .uuid-58480b73-28a0-48b2-8189-77c5c6343f96 {
|
|
||||||
+ fill: #e00;
|
|
||||||
+ stroke-width: 0px;
|
|
||||||
+ }
|
|
||||||
+ </style><clipPath
|
|
||||||
+ id="uuid-409128a3-73ae-4fb4-be0e-a3c528ddec23"><polygon
|
|
||||||
+ class="uuid-5c6086cf-0da3-471a-8af1-b870d5b70693"
|
|
||||||
+ points="298.76,281.41 269.91,298.07 241.06,281.41 241.06,248.09 269.91,231.44 298.76,248.09 "
|
|
||||||
+ id="polygon1" /></clipPath><clipPath
|
|
||||||
+ id="uuid-5dc88fc6-fbe1-443d-af17-25796c346a45"><polygon
|
|
||||||
+ class="uuid-5c6086cf-0da3-471a-8af1-b870d5b70693"
|
|
||||||
+ points="907.12,232.55 863.16,257.93 819.2,232.55 819.2,181.8 863.16,156.42 907.12,181.8 "
|
|
||||||
+ id="polygon2-2" /></clipPath><clipPath
|
|
||||||
+ id="uuid-931b4eba-6549-4a63-a7ed-244ec3143098"><polygon
|
|
||||||
+ class="uuid-5c6086cf-0da3-471a-8af1-b870d5b70693"
|
|
||||||
+ points="768.79,455.57 739.93,472.23 711.08,455.57 711.08,422.25 739.93,405.59 768.79,422.25 "
|
|
||||||
+ id="polygon3" /></clipPath></defs><sodipodi:namedview
|
|
||||||
units="px"
|
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
@@ -201,143 +134,71 @@
|
|
||||||
inkscape:document-rotation="0"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
- inkscape:cy="75.603256"
|
|
||||||
- inkscape:cx="199.00314"
|
|
||||||
- inkscape:zoom="0.98994949"
|
|
||||||
+ inkscape:cy="126.57211"
|
|
||||||
+ inkscape:cx="427.09248"
|
|
||||||
+ inkscape:zoom="0.7071068"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
borderopacity="1"
|
|
||||||
bordercolor="#383838"
|
|
||||||
- pagecolor="#1f1f1f"
|
|
||||||
+ pagecolor="#353535"
|
|
||||||
id="base"
|
|
||||||
fit-margin-top="0"
|
|
||||||
fit-margin-left="0"
|
|
||||||
fit-margin-right="0"
|
|
||||||
fit-margin-bottom="0"
|
|
||||||
- inkscape:window-width="1920"
|
|
||||||
- inkscape:window-height="1011"
|
|
||||||
- inkscape:window-x="0"
|
|
||||||
- inkscape:window-y="0"
|
|
||||||
- inkscape:window-maximized="1"
|
|
||||||
+ inkscape:window-width="2154"
|
|
||||||
+ inkscape:window-height="1253"
|
|
||||||
+ inkscape:window-x="26"
|
|
||||||
+ inkscape:window-y="23"
|
|
||||||
+ inkscape:window-maximized="0"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
inkscape:object-paths="true"
|
|
||||||
inkscape:snap-intersection-paths="true"
|
|
||||||
inkscape:snap-smooth-nodes="true"
|
|
||||||
- inkscape:snap-midpoints="true">
|
|
||||||
- <inkscape:grid
|
|
||||||
+ inkscape:snap-midpoints="true"
|
|
||||||
+ inkscape:pagecheckerboard="0"
|
|
||||||
+ inkscape:deskcolor="#d1d1d1"><inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
- id="grid900" />
|
|
||||||
- </sodipodi:namedview>
|
|
||||||
- <metadata
|
|
||||||
- id="metadata5">
|
|
||||||
- <rdf:RDF>
|
|
||||||
- <cc:Work
|
|
||||||
- rdf:about="">
|
|
||||||
- <dc:format>image/svg+xml</dc:format>
|
|
||||||
- <dc:type
|
|
||||||
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
- <dc:title></dc:title>
|
|
||||||
- <cc:license
|
|
||||||
- rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
|
||||||
- </cc:Work>
|
|
||||||
- <cc:License
|
|
||||||
- rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
|
||||||
- <cc:permits
|
|
||||||
- rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
|
||||||
- <cc:permits
|
|
||||||
- rdf:resource="http://creativecommons.org/ns#Distribution" />
|
|
||||||
- <cc:requires
|
|
||||||
- rdf:resource="http://creativecommons.org/ns#Notice" />
|
|
||||||
- <cc:requires
|
|
||||||
- rdf:resource="http://creativecommons.org/ns#Attribution" />
|
|
||||||
- <cc:permits
|
|
||||||
- rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
|
||||||
- <cc:requires
|
|
||||||
- rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
|
||||||
- </cc:License>
|
|
||||||
- </rdf:RDF>
|
|
||||||
- </metadata>
|
|
||||||
- <g
|
|
||||||
+ id="grid900"
|
|
||||||
+ originx="0"
|
|
||||||
+ originy="0"
|
|
||||||
+ spacingy="1"
|
|
||||||
+ spacingx="1"
|
|
||||||
+ units="px"
|
|
||||||
+ visible="false" /></sodipodi:namedview><metadata
|
|
||||||
+ id="metadata5"><rdf:RDF><cc:Work
|
|
||||||
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
|
||||||
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><cc:license
|
|
||||||
+ rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" /></cc:Work><cc:License
|
|
||||||
+ rdf:about="http://creativecommons.org/licenses/by-sa/4.0/"><cc:permits
|
|
||||||
+ rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
|
|
||||||
+ rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:requires
|
|
||||||
+ rdf:resource="http://creativecommons.org/ns#Notice" /><cc:requires
|
|
||||||
+ rdf:resource="http://creativecommons.org/ns#Attribution" /><cc:permits
|
|
||||||
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /><cc:requires
|
|
||||||
+ rdf:resource="http://creativecommons.org/ns#ShareAlike" /></cc:License></rdf:RDF></metadata><g
|
|
||||||
id="layer1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
- transform="translate(-620,9.4371882)">
|
|
||||||
- <g
|
|
||||||
- id="g4043"
|
|
||||||
- transform="translate(-15.793175)">
|
|
||||||
- <circle
|
|
||||||
- style="fill:url(#linearGradient10564);fill-opacity:1;stroke:none;stroke-width:3.66905;stroke-linecap:round;stroke-linejoin:round"
|
|
||||||
- id="path10517"
|
|
||||||
- cx="-177.02397"
|
|
||||||
- cy="920"
|
|
||||||
- r="167.91774"
|
|
||||||
- transform="rotate(-90)" />
|
|
||||||
- <path
|
|
||||||
- d="m 1066.6646,147.98131 c 12.3048,0.0174 23.474,7.19166 28.6008,18.37784 a 23.631877,23.631877 0 0 1 10.7762,-2.62748 c 12.4288,0.0178 22.7209,9.65384 23.5474,22.05492 h 0.08 c 8.6991,0 15.7508,7.05171 15.7508,15.75083 0,8.69911 -7.0522,15.75083 -15.7513,15.75083 h -88.2056 a 18.901933,18.901933 0 0 1 -18.9019,-18.901 18.901933,18.901933 0 0 1 12.6566,-17.81853 33.12417,33.12417 0 0 1 -0.056,-1.08246 c 0,-17.39824 14.1038,-31.50213 31.5025,-31.50213 z"
|
|
||||||
- id="path10"
|
|
||||||
- style="fill:url(#linearGradient22);stroke-width:0.577558" />
|
|
||||||
- <g
|
|
||||||
- id="g245"
|
|
||||||
- transform="matrix(1.5161629,0,0,1.5161629,396.40481,-143.42807)">
|
|
||||||
- <g
|
|
||||||
- id="g126"
|
|
||||||
- transform="matrix(0.75000161,0,0,0.75000161,154.45946,111.99828)">
|
|
||||||
- <g
|
|
||||||
- id="g265">
|
|
||||||
- <g
|
|
||||||
- transform="matrix(3.12129,0,0,2.9344,91.063695,-499.94397)"
|
|
||||||
- clip-path="url(#e-3)"
|
|
||||||
- id="g47-0">
|
|
||||||
- <path
|
|
||||||
- transform="translate(-8,156)"
|
|
||||||
- d="M 73,21 C 54.498,21 39.5,35.998 39.5,54.5 39.508,61.871 43,68.922 46.44,74.879 L 58,98 H 88 L 99.605,74.79 C 103,68.91 106.485,61.835 106.5,54.5 106.5,35.998 91.502,21 73,21 Z"
|
|
||||||
- style="fill:url(#f-7);marker:none"
|
|
||||||
- fill="url(#f)"
|
|
||||||
- id="path39-6" />
|
|
||||||
- <path
|
|
||||||
- d="m 64,177 c 0,0 -18.332,12.132 -18.332,30.989 0,14.571 16.174,46.011 16.174,46.011 H 67 c 0,0 1.333,-31.44 1.333,-46.011 C 68.333,189.132 64,177 64,177 Z"
|
|
||||||
- fill="url(#g)"
|
|
||||||
- id="path41-2"
|
|
||||||
- style="fill:url(#g-2)" />
|
|
||||||
- <path
|
|
||||||
- transform="translate(-8,156)"
|
|
||||||
- d="m 71.983,21.106 c -8.207,0.147 -16.328,3.285 -22.5,8.695 -6.174,5.409 -10.35,13.047 -11.574,21.163 -1.24,8.225 0.567,16.874 4.995,23.915 L 61.902,98 h 6.432 L 55.002,81.27 C 50.702,75.875 46.53,70.2 44.406,63.636 42.283,57.072 42.24,49.836 44.409,43.288 A 32.824,32.824 0 0 1 54.925,28.13 32.824,32.824 0 0 1 71.983,21.105 Z"
|
|
||||||
- fill="url(#h)"
|
|
||||||
- id="path43-6"
|
|
||||||
- style="fill:url(#h-7)" />
|
|
||||||
- <path
|
|
||||||
- transform="matrix(-1,0,0,1,137.16,155.823)"
|
|
||||||
- d="M 73.003,21.303 C 65.294,19.756 57.033,21.149 50.257,25.138 43.481,29.127 38.255,35.675 35.867,43.167 A 32.484,32.484 0 0 0 35.11,59.972 32.484,32.484 0 0 0 42.904,74.879 L 54.11,98 H 67.493 L 54.16,74.356 C 51.292,69.269 48.603,63.95 47.733,58.175 46.863,52.4 47.769,46.404 50.107,41.052 54.28,31.502 62.943,24.03 73.002,21.304 Z"
|
|
||||||
- fill="url(#i)"
|
|
||||||
- id="path45-1"
|
|
||||||
- style="fill:url(#i-6)" />
|
|
||||||
- </g>
|
|
||||||
- <path
|
|
||||||
- style="marker:none"
|
|
||||||
- d="m 271.0607,256.22128 v 19.397 a 9.702,9.702 0 0 0 9.724,9.726 h 26.326 c 5.388,0 8.594,-4.457 9.725,-9.726 v -19.397 z"
|
|
||||||
- fill="#e5a50a"
|
|
||||||
- id="path49-8" />
|
|
||||||
- <path
|
|
||||||
- style="marker:none"
|
|
||||||
- d="m 271.0607,252.06028 v 19.397 a 9.702,9.702 0 0 0 9.724,9.724 h 26.326 c 5.388,0 8.594,-4.455 9.725,-9.724 v -19.397 z"
|
|
||||||
- fill="#e5a50a"
|
|
||||||
- id="path51-7" />
|
|
||||||
- <path
|
|
||||||
- style="marker:none"
|
|
||||||
- d="m 300.1907,252.06028 v 29.121 h 6.92 c 5.388,0 8.594,-4.455 9.725,-9.724 v -19.397 z"
|
|
||||||
- fill="#f3af0b"
|
|
||||||
- id="path53-9" />
|
|
||||||
- </g>
|
|
||||||
- </g>
|
|
||||||
- </g>
|
|
||||||
- <path
|
|
||||||
- style="font-variation-settings:normal;fill:url(#linearGradient24);fill-opacity:1;stroke-width:0.822282"
|
|
||||||
- d="m 1051.0577,24.011554 a 37.111799,37.111799 0 0 0 -36.9465,35.120895 c -13.3251,2.089947 -23.45686,13.564137 -23.45686,27.494149 0,15.421302 12.41476,27.836692 27.83666,27.836692 h 72.3273 c 11.9284,0 21.5316,-9.60251 21.5316,-21.530902 0,-11.928386 -9.6032,-21.532163 -21.5316,-21.532163 h -3.9868 a 37.111799,37.111799 0 0 0 1.4509,-10.27624 37.111799,37.111799 0 0 0 -37.1118,-37.111798 37.111799,37.111799 0 0 0 -0.1123,0 z"
|
|
||||||
- id="path12" />
|
|
||||||
- <path
|
|
||||||
- d="m 803.48555,82.893284 c -12.0805,0.0171 -23.046,7.06046 -28.0791,18.042576 a 23.200767,23.200767 0 0 0 -10.5796,-2.579546 c -12.2021,0.0175 -22.3064,9.477716 -23.1179,21.652566 h -0.079 c -8.5404,0 -15.4634,6.92307 -15.4634,15.46349 0,8.54042 6.9235,15.46349 15.4639,15.46349 h 86.5965 a 18.55711,18.55711 0 0 0 18.5571,-18.55619 18.55711,18.55711 0 0 0 -12.4257,-17.49347 32.519894,32.519894 0 0 0 0.055,-1.06272 c 0,-17.080836 -13.8466,-30.927426 -30.9279,-30.927426 z"
|
|
||||||
- id="path21"
|
|
||||||
- style="fill:url(#linearGradient23);fill-opacity:1;stroke-width:0.999999" />
|
|
||||||
- </g>
|
|
||||||
- </g>
|
|
||||||
-</svg>
|
|
||||||
+ transform="translate(-620,9.4371882)"><g
|
|
||||||
+ id="g69"
|
|
||||||
+ transform="matrix(3.9100987,0,0,3.9112392,-340.29335,-367.51751)"
|
|
||||||
+ style="stroke-width:0.758638"><path
|
|
||||||
+ id="path69"
|
|
||||||
+ style="font-size:18.6667px;line-height:1.25;font-family:'Red Hat Display';-inkscape-font-specification:'Red Hat Display, @wght=700';font-variation-settings:'wght' 700;letter-spacing:0px;word-spacing:0px;white-space:pre;fill:none;stroke:#000000;stroke-width:0.802889;stroke-dasharray:none;stroke-opacity:0.260754"
|
|
||||||
+ sodipodi:type="inkscape:offset"
|
|
||||||
+ inkscape:radius="3.0249546"
|
|
||||||
+ inkscape:original="M 313.48633 103.79883 L 305.27734 108.99023 L 317.28516 113.2793 L 278.90234 137.55273 L 287.01172 144.30859 L 334.9043 114.01953 L 329.75391 109.73047 L 313.48633 103.79883 z M 339.08398 126.42578 C 336.58186 126.44685 334.02099 126.72082 331.4043 127.24805 C 326.21038 128.33537 321.15063 130.43744 316.22461 133.55273 C 311.3442 136.63918 307.7837 139.98905 305.54297 143.60352 C 303.38732 147.22202 302.62161 150.82875 303.24609 154.42383 C 303.95565 158.02294 306.10659 161.31916 309.69727 164.31055 C 313.32741 167.33481 317.52958 169.33062 322.30469 170.30078 C 327.16487 171.27497 332.19279 171.22013 337.38672 170.13281 C 342.66571 169.04952 347.74459 166.9634 352.625 163.87695 C 357.55102 160.76166 361.0924 157.39584 363.24805 153.77734 C 365.44315 150.19171 366.18612 146.59911 365.47656 143 C 364.85208 139.40492 362.72389 136.09458 359.09375 133.07031 C 355.50307 130.07892 351.27814 128.09723 346.41797 127.12305 C 344.03041 126.63796 341.58611 126.40471 339.08398 126.42578 z M 339.03711 134.75977 C 340.59668 134.65532 342.09264 134.71475 343.52344 134.9375 C 346.38503 135.38301 348.86185 136.47651 350.95312 138.21875 C 353.08387 139.99386 354.25653 141.94201 354.47266 144.06055 C 354.6888 146.17909 353.95735 148.37553 352.27734 150.65234 C 350.68241 152.93318 348.17475 155.15496 344.75391 157.31836 C 341.37867 159.45291 338.0017 160.95311 334.625 161.81641 C 331.28776 162.71258 328.18972 162.9377 325.32812 162.49219 C 322.46654 162.04668 319.96863 160.93528 317.83789 159.16016 C 315.74662 157.41792 314.59309 155.48768 314.37695 153.36914 C 314.16081 151.2506 314.87313 149.0382 316.51367 146.72852 C 318.19368 144.4517 320.72242 142.24587 324.09766 140.11133 C 327.5185 137.94792 330.87439 136.43177 334.16602 135.56445 C 335.85437 135.1328 337.47754 134.86421 339.03711 134.75977 z "
|
|
||||||
+ d="m 314.52344,100.95703 a 3.0252571,3.0252571 0 0 0 -2.6543,0.28516 l -8.20898,5.1914 a 3.0252571,3.0252571 0 0 0 0.59961,5.40625 l 6.1621,2.20118 -33.13671,20.95507 a 3.0252571,3.0252571 0 0 0 -0.31836,4.88086 l 8.10937,6.75586 a 3.0252571,3.0252571 0 0 0 3.55274,0.23242 l 47.89257,-30.28906 a 3.0252571,3.0252571 0 0 0 0.31836,-4.88086 l -5.15039,-4.28906 a 3.0252571,3.0252571 0 0 0 -0.89843,-0.51758 z m 24.53515,22.44336 c -2.70552,0.0228 -5.45955,0.32018 -8.25195,0.88281 a 3.0252571,3.0252571 0 0 0 -0.0215,0.004 c -5.57359,1.1668 -10.9804,3.42211 -16.17774,6.70898 -5.15435,3.2597 -9.07893,6.89093 -11.63476,11.01368 a 3.0252571,3.0252571 0 0 0 -0.0293,0.0449 c -2.44678,4.10719 -3.43195,8.54475 -2.67774,12.88672 a 3.0252571,3.0252571 0 0 0 0.0117,0.0684 c 0.86616,4.39343 3.51054,8.31439 7.48438,11.625 4.00932,3.34015 8.71238,5.56847 13.9414,6.63085 a 3.0252571,3.0252571 0 0 0 0.008,0.002 c 5.27203,1.05674 10.73013,0.98909 16.2832,-0.17188 0.001,-2.8e-4 0.003,-0.002 0.004,-0.002 5.65232,-1.16046 11.08416,-3.3969 16.24414,-6.66016 5.19597,-3.28601 9.11209,-6.93484 11.59179,-11.08789 2.49319,-4.07791 3.46133,-8.54055 2.61524,-12.89062 -0.77549,-4.41697 -3.41096,-8.36912 -7.41992,-11.70899 -3.98043,-3.31609 -8.70902,-5.52412 -14.00977,-6.58789 -6.3e-4,-1.3e-4 -0.001,1.3e-4 -0.002,0 -2.59631,-0.52736 -5.25296,-0.7806 -7.95899,-0.75781 z m 0.17969,14.37695 c 1.35455,-0.0907 2.62538,-0.0376 3.82031,0.14844 2.38032,0.37058 4.29192,1.22835 5.95899,2.61719 1.71385,1.4278 2.3223,2.61846 2.44531,3.82422 0.12477,1.22298 -0.24192,2.62183 -1.61914,4.48828 a 3.0252571,3.0252571 0 0 0 -0.0449,0.0625 c -1.27029,1.81658 -3.46759,3.82347 -6.66211,5.84375 -3.14603,1.98959 -6.23089,3.34817 -9.26172,4.12305 a 3.0252571,3.0252571 0 0 0 -0.0352,0.01 c -3.00691,0.80747 -5.66623,0.98001 -8.04687,0.60938 -2.37037,-0.36904 -4.30499,-1.23959 -6.01953,-2.66797 -1.66738,-1.3891 -2.26205,-2.55145 -2.38672,-3.77344 -0.12591,-1.23411 0.24428,-2.66937 1.58203,-4.56055 1.37458,-1.85462 3.60235,-3.84584 6.74609,-5.83398 3.20097,-2.02436 6.27281,-3.3982 9.21094,-4.17383 1.52545,-0.3894 2.96138,-0.62632 4.3125,-0.7168 z"
|
|
||||||
+ transform="translate(0,10.583333)" /><path
|
|
||||||
+ id="path61"
|
|
||||||
+ style="font-size:18.6667px;line-height:1.25;font-family:'Red Hat Display';-inkscape-font-specification:'Red Hat Display, @wght=700';font-variation-settings:'wght' 700;letter-spacing:0px;word-spacing:0px;white-space:pre;fill:#000000;fill-opacity:0.112011;stroke-width:3.13082"
|
|
||||||
+ d="m 313.27441,103.83552 -8.21035,5.19193 v 11.11302 l 0.77876,0.27802 -27.15183,17.17156 v 11.1125 l 8.10855,6.75514 18.45055,-11.66854 c -1.77807,3.03782 -2.57278,6.06754 -2.39106,9.08885 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0565,1.0581 -0.008,2.11531 0.1757,3.17139 0.70955,3.59911 2.85957,6.89431 6.45025,9.8857 3.63013,3.02426 7.83291,5.02172 12.60801,5.99188 4.86018,0.97418 9.88733,0.9173 15.08125,-0.17002 5.27898,-1.08329 10.35846,-3.16795 15.23887,-6.2544 4.92601,-3.11529 8.46696,-6.48218 10.6226,-10.10067 1.82253,-2.97703 2.62822,-5.95887 2.44843,-8.94519 0.031,-0.52899 0.0319,-1.05822 0,-1.5875 0.031,-0.52899 0.0319,-1.05822 0,-1.5875 0.031,-0.52899 0.0319,-1.05822 0,-1.5875 0.031,-0.52899 0.0319,-1.05822 0,-1.5875 0.031,-0.52899 0.0319,-1.05822 0,-1.5875 0.031,-0.52908 0.0319,-1.05813 0,-1.5875 0.0669,-1.13924 0.005,-2.27884 -0.22014,-3.41943 -0.62449,-3.59508 -2.7519,-6.90485 -6.38204,-9.92911 -3.59068,-2.99139 -7.81606,-4.97429 -12.67623,-5.94847 -4.71017,-0.95697 -9.64459,-0.92406 -14.80064,0.0889 l 3.2861,-2.07843 v -11.1125 l -5.14904,-4.28966 z m 26.70896,42.02741 c 1.14554,-0.017 2.25436,0.0577 3.32745,0.22479 2.86159,0.44551 5.33825,1.53973 7.42952,3.28197 0.50393,0.41982 0.94985,0.84978 1.34669,1.28881 -0.008,0.0108 -0.0143,0.0213 -0.0222,0.032 -1.59494,2.28084 -4.10273,4.50286 -7.52358,6.66626 -3.37523,2.13454 -6.75136,3.63358 -10.12806,4.49688 -3.33724,0.89617 -6.43655,1.12144 -9.29814,0.67593 -2.86158,-0.44551 -5.35769,-1.55594 -7.48843,-3.33106 -0.50335,-0.41934 -0.94939,-0.85026 -1.3441,-1.2914 0.007,-0.01 0.0126,-0.0196 0.0196,-0.0294 1.68001,-2.27681 4.20777,-4.48262 7.583,-6.61717 3.42085,-2.1634 6.77701,-3.67866 10.06864,-4.54597 2.11043,-0.53957 4.12038,-0.82332 6.0296,-0.85163 z"
|
|
||||||
+ sodipodi:nodetypes="ccccccccccccccccsccscccccccccsccccccsssccscssccscs" /><path
|
|
||||||
+ id="path66-7"
|
|
||||||
+ style="font-size:18.6667px;line-height:1.25;font-family:'Red Hat Display';-inkscape-font-specification:'Red Hat Display, @wght=700';font-variation-settings:'wght' 700;letter-spacing:0px;word-spacing:0px;white-space:pre;opacity:1;vector-effect:none;fill:#f6f5f4;fill-opacity:0.0386836;stroke:#ffffff;stroke-width:0.802889;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.260754;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
|
||||||
+ sodipodi:type="inkscape:offset"
|
|
||||||
+ inkscape:radius="3.0249546"
|
|
||||||
+ inkscape:original="M 313.48633 103.79883 L 305.27734 108.99023 L 317.28516 113.2793 L 278.90234 137.55273 L 287.01172 144.30859 L 334.9043 114.01953 L 329.75391 109.73047 L 313.48633 103.79883 z M 339.08398 126.42578 C 336.58186 126.44685 334.02099 126.72082 331.4043 127.24805 C 326.21038 128.33537 321.15063 130.43744 316.22461 133.55273 C 311.3442 136.63918 307.7837 139.98905 305.54297 143.60352 C 303.38732 147.22202 302.62161 150.82875 303.24609 154.42383 C 303.95565 158.02294 306.10659 161.31916 309.69727 164.31055 C 313.32741 167.33481 317.52958 169.33062 322.30469 170.30078 C 327.16487 171.27497 332.19279 171.22013 337.38672 170.13281 C 342.66571 169.04952 347.74459 166.9634 352.625 163.87695 C 357.55102 160.76166 361.0924 157.39584 363.24805 153.77734 C 365.44315 150.19171 366.18612 146.59911 365.47656 143 C 364.85208 139.40492 362.72389 136.09458 359.09375 133.07031 C 355.50307 130.07892 351.27814 128.09723 346.41797 127.12305 C 344.03041 126.63796 341.58611 126.40471 339.08398 126.42578 z M 339.03711 134.75977 C 340.59668 134.65532 342.09264 134.71475 343.52344 134.9375 C 346.38503 135.38301 348.86185 136.47651 350.95312 138.21875 C 353.08387 139.99386 354.25653 141.94201 354.47266 144.06055 C 354.6888 146.17909 353.95735 148.37553 352.27734 150.65234 C 350.68241 152.93318 348.17475 155.15496 344.75391 157.31836 C 341.37867 159.45291 338.0017 160.95311 334.625 161.81641 C 331.28776 162.71258 328.18972 162.9377 325.32812 162.49219 C 322.46654 162.04668 319.96863 160.93528 317.83789 159.16016 C 315.74662 157.41792 314.59309 155.48768 314.37695 153.36914 C 314.16081 151.2506 314.87313 149.0382 316.51367 146.72852 C 318.19368 144.4517 320.72242 142.24587 324.09766 140.11133 C 327.5185 137.94792 330.87439 136.43177 334.16602 135.56445 C 335.85437 135.1328 337.47754 134.86421 339.03711 134.75977 z "
|
|
||||||
+ d="m 314.52344,100.95703 a 3.0252571,3.0252571 0 0 0 -2.6543,0.28516 l -8.20898,5.1914 a 3.0252571,3.0252571 0 0 0 0.59961,5.40625 l 6.1621,2.20118 -33.13671,20.95507 a 3.0252571,3.0252571 0 0 0 -0.31836,4.88086 l 8.10937,6.75586 a 3.0252571,3.0252571 0 0 0 3.55274,0.23242 l 47.89257,-30.28906 a 3.0252571,3.0252571 0 0 0 0.31836,-4.88086 l -5.15039,-4.28906 a 3.0252571,3.0252571 0 0 0 -0.89843,-0.51758 z m 24.53515,22.44336 c -2.70552,0.0228 -5.45955,0.32018 -8.25195,0.88281 a 3.0252571,3.0252571 0 0 0 -0.0215,0.004 c -5.57359,1.1668 -10.9804,3.42211 -16.17774,6.70898 -5.15435,3.2597 -9.07893,6.89093 -11.63476,11.01368 a 3.0252571,3.0252571 0 0 0 -0.0293,0.0449 c -2.44678,4.10719 -3.43195,8.54475 -2.67774,12.88672 a 3.0252571,3.0252571 0 0 0 0.0117,0.0684 c 0.86616,4.39343 3.51054,8.31439 7.48438,11.625 4.00932,3.34015 8.71238,5.56847 13.9414,6.63085 a 3.0252571,3.0252571 0 0 0 0.008,0.002 c 5.27203,1.05674 10.73013,0.98909 16.2832,-0.17188 0.001,-2.8e-4 0.003,-0.002 0.004,-0.002 5.65232,-1.16046 11.08416,-3.3969 16.24414,-6.66016 5.19597,-3.28601 9.11209,-6.93484 11.59179,-11.08789 2.49319,-4.07791 3.46133,-8.54055 2.61524,-12.89062 -0.77549,-4.41697 -3.41096,-8.36912 -7.41992,-11.70899 -3.98043,-3.31609 -8.70902,-5.52412 -14.00977,-6.58789 -6.3e-4,-1.3e-4 -0.001,1.3e-4 -0.002,0 -2.59631,-0.52736 -5.25296,-0.7806 -7.95899,-0.75781 z m 0.17969,14.37695 c 1.35455,-0.0907 2.62538,-0.0376 3.82031,0.14844 2.38032,0.37058 4.29192,1.22835 5.95899,2.61719 1.71385,1.4278 2.3223,2.61846 2.44531,3.82422 0.12477,1.22298 -0.24192,2.62183 -1.61914,4.48828 a 3.0252571,3.0252571 0 0 0 -0.0449,0.0625 c -1.27029,1.81658 -3.46759,3.82347 -6.66211,5.84375 -3.14603,1.98959 -6.23089,3.34817 -9.26172,4.12305 a 3.0252571,3.0252571 0 0 0 -0.0352,0.01 c -3.00691,0.80747 -5.66623,0.98001 -8.04687,0.60938 -2.37037,-0.36904 -4.30499,-1.23959 -6.01953,-2.66797 -1.66738,-1.3891 -2.26205,-2.55145 -2.38672,-3.77344 -0.12591,-1.23411 0.24428,-2.66937 1.58203,-4.56055 1.37458,-1.85462 3.60235,-3.84584 6.74609,-5.83398 3.20097,-2.02436 6.27281,-3.3982 9.21094,-4.17383 1.52545,-0.3894 2.96138,-0.62632 4.3125,-0.7168 z" /></g></g></svg>
|
|
||||||
--
|
|
||||||
2.46.2
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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 "'", 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 < character' },
|
||||||
|
+ { input: 'Don\'t',
|
||||||
|
+ terms: ['t'],
|
||||||
|
+ output: 'Don'<b>t</b>' },
|
||||||
|
+ { input: 'Don\'t',
|
||||||
|
+ terms: ['n\'t'],
|
||||||
|
+ output: 'Do<b>n't</b>' },
|
||||||
|
+ { input: 'Don\'t',
|
||||||
|
+ terms: ['o', 't'],
|
||||||
|
+ output: 'D<b>o</b>n'<b>t</b>' },
|
||||||
|
+ { input: 'salt&pepper',
|
||||||
|
+ terms: ['salt'],
|
||||||
|
+ output: '<b>salt</b>&pepper' },
|
||||||
|
+ { input: 'salt&pepper',
|
||||||
|
+ terms: ['salt', 'alt'],
|
||||||
|
+ output: '<b>salt</b>&pepper' },
|
||||||
|
+ { input: 'salt&pepper',
|
||||||
|
+ terms: ['pepper'],
|
||||||
|
+ output: 'salt&<b>pepper</b>' },
|
||||||
|
+ { input: 'salt&pepper',
|
||||||
|
+ terms: ['salt', 'pepper'],
|
||||||
|
+ output: '<b>salt</b>&<b>pepper</b>' },
|
||||||
|
+ { input: 'salt&pepper',
|
||||||
|
+ terms: ['t', 'p'],
|
||||||
|
+ output: 'sal<b>t</b>&<b>p</b>e<b>p</b><b>p</b>er' },
|
||||||
|
+ { input: 'salt&pepper',
|
||||||
|
+ terms: ['t', '&', 'p'],
|
||||||
|
+ output: 'sal<b>t</b><b>&</b><b>p</b>e<b>p</b><b>p</b>er' },
|
||||||
|
+ { input: 'salt&pepper',
|
||||||
|
+ terms: ['e'],
|
||||||
|
+ output: 'salt&p<b>e</b>pp<b>e</b>r' },
|
||||||
|
+ { input: 'salt&pepper',
|
||||||
|
+ terms: ['&a', '&am', '&', '&'],
|
||||||
|
+ output: 'salt&pepper' },
|
||||||
|
+ { input: '&&&&&',
|
||||||
|
+ terms: ['a'],
|
||||||
|
+ output: '&&&&&' },
|
||||||
|
+ { input: '&;&;&;&;&;',
|
||||||
|
+ terms: ['a'],
|
||||||
|
+ output: '&;&;&;&;&;' },
|
||||||
|
+ { input: '&;&;&;&;&;',
|
||||||
|
+ terms: [';'],
|
||||||
|
+ output: '&<b>;</b>&<b>;</b>&<b>;</b>&<b>;</b>&<b>;</b>' },
|
||||||
|
+ { input: '&',
|
||||||
|
+ terms: ['a'],
|
||||||
|
+ output: '&<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
|
||||||
|
|
@ -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,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
|
||||||
|
|
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
Loading…
Reference in new issue