Browse Source

gnome-shell package update

Signed-off-by: guibuilder_pel7x64builder0 <guibuilder@powerel.org>
master
guibuilder_pel7x64builder0 6 years ago
parent
commit
b91185d2ae
  1. 111
      SOURCES/0001-appDisplay-Show-full-app-name-on-hover.patch
  2. 122
      SOURCES/0001-data-install-process-working.svg-to-filesystem.patch
  3. 107
      SOURCES/0001-extensions-Add-a-SESSION_MODE-extension-type.patch
  4. 57
      SOURCES/0001-gdm-add-AuthList-control.patch
  5. 421
      SOURCES/0001-global-Allow-overriding-the-override-schema.patch
  6. 55
      SOURCES/0001-keyboard-Handle-no-window-case-in-FocusTracker.patch
  7. 67
      SOURCES/0001-keyboard-Listen-to-IbusPanelService-focus-in-out-to-.patch
  8. 61
      SOURCES/0001-loginDialog-make-info-messages-themed.patch
  9. 160
      SOURCES/0001-panel-add-an-icon-to-the-ActivitiesButton.patch
  10. 12
      SOURCES/0001-screenShield-unblank-when-inserting-smartcard.patch
  11. 4
      SOURCES/0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch
  12. 22
      SOURCES/0001-system-don-t-throw-an-exception-if-power-off-disable.patch
  13. 16
      SOURCES/0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch
  14. 97
      SOURCES/0002-gdmUtil-enable-support-for-GDM-s-ChoiceList-PAM-exte.patch
  15. 111
      SOURCES/allow-timed-login-with-no-user-list.patch
  16. 49
      SOURCES/disable-unlock-entry-until-question.patch
  17. 30
      SOURCES/enforce-smartcard-at-unlock.patch
  18. 265
      SOURCES/gnome-shell-python3.patch
  19. 182
      SPECS/gnome-shell.spec

111
SOURCES/0001-appDisplay-Show-full-app-name-on-hover.patch

@ -0,0 +1,111 @@ @@ -0,0 +1,111 @@
From 2b643e95ed25fff907d46591dd7acd8ae86cf5e4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 21 Jun 2018 18:03:31 +0200
Subject: [PATCH] appDisplay: Show full app name on hover

---
data/theme/gnome-shell-sass/_common.scss | 8 ++++
js/ui/appDisplay.js | 48 ++++++++++++++++++++++++
2 files changed, 56 insertions(+)

diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss
index f1aaea689..5bf01a540 100644
--- a/data/theme/gnome-shell-sass/_common.scss
+++ b/data/theme/gnome-shell-sass/_common.scss
@@ -1402,6 +1402,14 @@ StScrollBar {
}
+ .app-well-hover-text {
+ text-align: center;
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border-radius: 5px;
+ padding: 3px;
+ }
+
.app-well-app-running-dot { //running apps indicator
width: 10px; height: 3px;
background-color: $selected_bg_color;
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 74c772d50..070057c69 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -1628,6 +1628,20 @@ var AppIcon = new Lang.Class({
this.actor.connect('clicked', this._onClicked.bind(this));
this.actor.connect('popup-menu', this._onKeyboardPopupMenu.bind(this));
+ this._hoverText = null;
+ this._hoverTimeoutId = 0;
+
+ if (this.icon.label) {
+ this._hoverText = new St.Label({ style_class: 'app-well-hover-text',
+ text: this.icon.label.text,
+ visible: false });
+ this._hoverText.clutter_text.line_wrap = true;
+ Main.layoutManager.addChrome(this._hoverText);
+
+ this.actor.connect('notify::hover', this._syncHoverText.bind(this));
+ this.connect('sync-tooltip', this._syncHoverText.bind(this));
+ }
+
this._menu = null;
this._menuManager = new PopupMenu.PopupMenuManager(this);
@@ -1659,12 +1673,39 @@ var AppIcon = new Lang.Class({
this.app.disconnect(this._stateChangedId);
this._stateChangedId = 0;
this._removeMenuTimeout();
+ this._removeHoverTimeout();
+ if (this._hoverText)
+ this._hoverText.destroy();
+ this._hoverText = null;
},
_createIcon(iconSize) {
return this.app.create_icon_texture(iconSize);
},
+ _syncHoverText() {
+ if (this.shouldShowTooltip()) {
+ if (this._hoverTimeoutId)
+ return;
+
+ this._hoverTimeoutId = Mainloop.timeout_add(300, () => {
+ this._hoverText.style = `max-width: ${2 * this.icon.iconSize}px;`;
+ this._hoverText.ensure_style();
+
+ let [x, y] = this.icon.label.get_transformed_position();
+ let offset = (this._hoverText.width - this.icon.label.width) / 2;
+ this._hoverText.set_position(Math.floor(x - offset), Math.floor(y));
+ this._hoverText.show();
+
+ this._hoverTimeoutId = 0;
+ return GLib.SOURCE_REMOVE;
+ });
+ } else {
+ this._removeHoverTimeout();
+ this._hoverText.hide();
+ }
+ },
+
_removeMenuTimeout() {
if (this._menuTimeoutId > 0) {
Mainloop.source_remove(this._menuTimeoutId);
@@ -1672,6 +1713,13 @@ var AppIcon = new Lang.Class({
}
},
+ _removeHoverTimeout() {
+ if (this._hoverTimeoutId > 0) {
+ Mainloop.source_remove(this._hoverTimeoutId);
+ this._hoverTimeoutId = 0;
+ }
+ },
+
_updateRunningStyle() {
if (this.app.state != Shell.AppState.STOPPED)
this._dot.show();
--
2.17.1

122
SOURCES/0001-data-install-process-working.svg-to-filesystem.patch

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
From fa1ec00431d9c0b1592e1b7c56784ef8d8c26a98 Mon Sep 17 00:00:00 2001
From 77663ec7d0391254ff6e5afb73257d075fcb109e Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Thu, 8 Jun 2017 12:04:31 -0400
Subject: [PATCH] data: install process-working.svg to filesystem
@ -6,23 +6,109 @@ Subject: [PATCH] data: install process-working.svg to filesystem @@ -6,23 +6,109 @@ Subject: [PATCH] data: install process-working.svg to filesystem
This helps prevent unlock failure on inplace upgrades between
7.3 and 7.4
---
data/Makefile.am | 3 +++
1 file changed, 3 insertions(+)

diff --git a/data/Makefile.am b/data/Makefile.am
index 8c01e49d1..f9c198c1c 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -73,6 +73,9 @@ dist_theme_files = \
$(SASSC) -a $< $@; \
fi
+themedir = $(pkgdatadir)/theme
+dist_theme_DATA = theme/process-working.svg
data/theme/meson.build | 2 ++
meson.build | 2 ++
2 files changed, 4 insertions(+)

diff --git a/data/theme/meson.build b/data/theme/meson.build
index 22bae3dd2..d5acb8d10 100644
--- a/data/theme/meson.build
+++ b/data/theme/meson.build
@@ -1,25 +1,27 @@
theme_sources = files([
'gnome-shell-high-contrast.scss',
'gnome-shell.scss',
'gnome-shell-sass/_colors.scss',
'gnome-shell-sass/_common.scss',
'gnome-shell-sass/_drawing.scss',
'gnome-shell-sass/_high-contrast-colors.scss'
])
styles = [
'gnome-shell-high-contrast',
'gnome-shell'
]
theme_deps = []
foreach style: styles
theme_deps += custom_target('style-' + style,
input: '@0@.scss'.format(style),
output: '@0@.css'.format(style),
command: [
sassc, '-a', '@INPUT@', '@OUTPUT@'
],
depend_files: theme_sources)
endforeach
+
+install_data('process-working.svg', install_dir: themedir)
diff --git a/meson.build b/meson.build
index 663a4d06f..7d60d25e2 100644
--- a/meson.build
+++ b/meson.build
@@ -30,60 +30,62 @@ startup_req = '>= 0.11'
ibus_req = '>= 1.5.2'
bt_req = '>= 3.9.0'
gst_req = '>= 0.11.92'
nm_req = '>= 0.9.8'
secret_req = '>= 0.18'
gnome = import('gnome')
i18n = import('i18n')
prefix = get_option('prefix')
bindir = join_paths(prefix, get_option('bindir'))
datadir = join_paths(prefix, get_option('datadir'))
libdir = join_paths(prefix, get_option('libdir'))
libexecdir = join_paths(prefix, get_option('libexecdir'))
mandir = join_paths(prefix, get_option('mandir'))
pkgdatadir = join_paths(datadir, meson.project_name())
pkglibdir = join_paths(libdir, meson.project_name())
convertdir = join_paths(datadir, 'GConf', 'gsettings')
desktopdir = join_paths(datadir, 'applications')
ifacedir = join_paths(datadir, 'dbus-1', 'interfaces')
localedir = join_paths(datadir, 'locale')
mozplugindir = join_paths(libdir, 'mozilla', 'plugins')
portaldir = join_paths(datadir, 'xdg-desktop-portal', 'portals')
schemadir = join_paths(datadir, 'glib-2.0', 'schemas')
servicedir = join_paths(datadir, 'dbus-1', 'services')
+themedir = join_paths(pkgdatadir, 'theme')
+
resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)/theme --generate-dependencies $(srcdir)/gnome-shell-theme.gresource.xml)
gnome-shell-theme.gresource: gnome-shell-theme.gresource.xml $(resource_files)
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir)/theme $<
plugindir = get_variable('BROWSER_PLUGIN_DIR', mozplugindir)
keybindings_dep = dependency('gnome-keybindings', required: false)
if keybindings_dep.found()
keysdir = keybindings_dep.get_pkgconfig_variable('keysdir')
else
keysdir = join_paths(datadir, 'gnome-control-center', 'keybindings')
endif
atk_bridge_dep = dependency('atk-bridge-2.0')
canberra_dep = dependency('libcanberra')
canberra_gtk_dep = dependency('libcanberra-gtk3')
ecal_dep = dependency('libecal-1.2', version: ecal_req)
eds_dep = dependency('libedataserver-1.2', version: eds_req)
gcr_dep = dependency('gcr-base-3', version: gcr_req)
gdk_x11_dep = dependency('gdk-x11-3.0')
gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0')
gi_dep = dependency('gobject-introspection-1.0', version: gi_req)
gio_dep = dependency('gio-2.0', version: gio_req)
gio_unix_dep = dependency('gio-unix-2.0', version: gio_req)
gjs_dep = dependency('gjs-1.0', version: gjs_req)
gtk_dep = dependency('gtk+-3.0', version: gtk_req)
libxml_dep = dependency('libxml-2.0')
croco_dep = dependency('libcroco-0.6', version: croco_req)
clutter_dep = dependency(clutter_pc, version: mutter_req)
cogl_dep = dependency(cogl_pc, version: mutter_req)
cogl_pango_dep = dependency(cogl_pango_pc, version: mutter_req)
mutter_dep = dependency(libmutter_pc, version: mutter_req)
polkit_dep = dependency('polkit-agent-1', version: polkit_req)
soup_dep = dependency('libsoup-2.4')
--
2.14.2
2.17.1


107
SOURCES/0001-extensions-Add-a-SESSION_MODE-extension-type.patch

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
From 446b7a65536ea60b75f1ec705cd8fa287fda968e Mon Sep 17 00:00:00 2001
From 7002431540fb01c8ce6bd8781e35ba1072741d94 Mon Sep 17 00:00:00 2001
From: Rui Matos <tiagomatos@gmail.com>
Date: Fri, 8 Nov 2013 13:58:09 +0100
Subject: [PATCH] extensions: Add a SESSION_MODE extension type
@ -11,10 +11,22 @@ different way since they can't be disabled. @@ -11,10 +11,22 @@ different way since they can't be disabled.
2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js
index ca02582c9..3eea38565 100644
index 9f77b4c40..1e25da335 100644
--- a/js/misc/extensionUtils.js
+++ b/js/misc/extensionUtils.js
@@ -13,7 +13,8 @@ const FileUtils = imports.misc.fileUtils;
@@ -1,46 +1,47 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
// Common utils for the extension system and the extension
// preferences tool
const Lang = imports.lang;
const Signals = imports.signals;
const Gio = imports.gi.Gio;
const Config = imports.misc.config;
const FileUtils = imports.misc.fileUtils;
var ExtensionType = {
SYSTEM: 1,
@ -24,19 +36,100 @@ index ca02582c9..3eea38565 100644 @@ -24,19 +36,100 @@ index ca02582c9..3eea38565 100644
};
// Maps uuid -> metadata object
var extensions = {};
/**
* getCurrentExtension:
*
* Returns the current extension, or null if not called from an extension.
*/
function getCurrentExtension() {
let stack = (new Error()).stack.split('\n');
let extensionStackLine;
// Search for an occurrence of an extension stack frame
// Start at 1 because 0 is the stack frame of this function
for (let i = 1; i < stack.length; i++) {
if (stack[i].indexOf('/gnome-shell/extensions/') > -1) {
extensionStackLine = stack[i];
break;
}
}
if (!extensionStackLine)
return null;
// The stack line is like:
// init([object Object])@/home/user/data/gnome-shell/extensions/u@u.id/prefs.js:8
//
// In the case that we're importing from
// module scope, the first field is blank:
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
index 51ce234c2..c2a11b8a5 100644
index e35c01ab8..a013a3ee7 100644
--- a/js/ui/extensionSystem.js
+++ b/js/ui/extensionSystem.js
@@ -316,6 +316,8 @@ function _loadExtensions() {
@@ -289,60 +289,62 @@ function onEnabledExtensionsChanged() {
enabledExtensions = newEnabledExtensions;
}
function _onVersionValidationChanged() {
// we want to reload all extensions, but only enable
// extensions when allowed by the sessionMode, so
// temporarily disable them all
enabledExtensions = [];
for (let uuid in ExtensionUtils.extensions)
reloadExtension(ExtensionUtils.extensions[uuid]);
enabledExtensions = getEnabledExtensions();
if (Main.sessionMode.allowExtensions) {
enabledExtensions.forEach(uuid => {
enableExtension(uuid);
});
}
}
function _loadExtensions() {
global.settings.connect('changed::' + ENABLED_EXTENSIONS_KEY, onEnabledExtensionsChanged);
global.settings.connect('changed::' + DISABLE_USER_EXTENSIONS_KEY, onEnabledExtensionsChanged);
global.settings.connect('changed::' + EXTENSION_DISABLE_VERSION_CHECK_KEY, _onVersionValidationChanged);
enabledExtensions = getEnabledExtensions();
let finder = new ExtensionUtils.ExtensionFinder();
finder.connect('extension-found', function(finder, extension) {
finder.connect('extension-found', (finder, extension) => {
loadExtension(extension);
+ if (Main.sessionMode.enabledExtensions.indexOf(extension.uuid) != -1)
+ extension.type = ExtensionUtils.ExtensionType.SESSION_MODE;
});
finder.scanExtensions();
}
function enableAllExtensions() {
if (enabled)
return;
if (!initted) {
_loadExtensions();
initted = true;
} else {
enabledExtensions.forEach(uuid => {
enableExtension(uuid);
});
}
enabled = true;
}
function disableAllExtensions() {
if (!enabled)
return;
if (initted) {
extensionOrder.slice().reverse().forEach(uuid => {
disableExtension(uuid);
});
}
enabled = false;
--
2.14.2
2.17.1


57
SOURCES/0001-gdm-add-AuthList-control.patch

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
From 356171d85579d27da3180fd78ffb353f23c9073f Mon Sep 17 00:00:00 2001
From fd39875612bb6895e820924608c7a9719a9d326e Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Tue, 18 Jul 2017 12:58:14 -0400
Subject: [PATCH 1/2] gdm: add AuthList control
Subject: [PATCH] gdm: add AuthList control

Ultimately, we want to add support for GDM's new ChoiceList
PAM extension. That extension allows PAM modules to present
@ -14,17 +14,17 @@ but with less features. It lacks API specific to the users, @@ -14,17 +14,17 @@ but with less features. It lacks API specific to the users,
lacks the built in timed login indicator, etc. It does feature
a label heading.
---
js/gdm/authList.js | 198 ++++++++++++++++++++++++++++++++++++++++++
js/gdm/authList.js | 195 ++++++++++++++++++++++++++++++++++
js/js-resources.gresource.xml | 1 +
2 files changed, 199 insertions(+)
2 files changed, 196 insertions(+)
create mode 100644 js/gdm/authList.js

diff --git a/js/gdm/authList.js b/js/gdm/authList.js
new file mode 100644
index 000000000..893e35075
index 000000000..fc1c3d6e4
--- /dev/null
+++ b/js/gdm/authList.js
@@ -0,0 +1,198 @@
@@ -0,0 +1,195 @@
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+/*
+ * Copyright 2017 Red Hat, Inc
@ -58,7 +58,7 @@ index 000000000..893e35075 @@ -58,7 +58,7 @@ index 000000000..893e35075
+const AuthListItem = new Lang.Class({
+ Name: 'AuthListItem',
+
+ _init: function(key, text) {
+ _init(key, text) {
+ this.key = key;
+ let label = new St.Label({ style_class: 'auth-list-item-label',
+ y_align: Clutter.ActorAlign.CENTER });
@ -82,14 +82,14 @@ index 000000000..893e35075 @@ -82,14 +82,14 @@ index 000000000..893e35075
+ this._setSelected(this.actor.hover);
+ });
+
+ this.actor.connect('clicked', Lang.bind(this, this._onClicked));
+ this.actor.connect('clicked', this._onClicked.bind(this));
+ },
+
+ _onClicked: function() {
+ _onClicked() {
+ this.emit('activate');
+ },
+
+ _setSelected: function(selected) {
+ _setSelected(selected) {
+ if (selected) {
+ this.actor.add_style_pseudo_class('selected');
+ this.actor.grab_key_focus();
@ -103,7 +103,7 @@ index 000000000..893e35075 @@ -103,7 +103,7 @@ index 000000000..893e35075
+const AuthList = new Lang.Class({
+ Name: 'AuthList',
+
+ _init: function() {
+ _init() {
+ this.actor = new St.BoxLayout({ vertical: true,
+ style_class: 'login-dialog-auth-list-layout' });
+
@ -122,10 +122,10 @@ index 000000000..893e35075 @@ -122,10 +122,10 @@ index 000000000..893e35075
+ this._scrollView.add_actor(this._box);
+ this._items = {};
+
+ this.actor.connect('key-focus-in', Lang.bind(this, this._moveFocusToItems));
+ this.actor.connect('key-focus-in', this._moveFocusToItems.bind(this));
+ },
+
+ _moveFocusToItems: function() {
+ _moveFocusToItems() {
+ let hasItems = Object.keys(this._items).length > 0;
+
+ if (!hasItems)
@ -136,18 +136,18 @@ index 000000000..893e35075 @@ -136,18 +136,18 @@ index 000000000..893e35075
+
+ let focusSet = this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
+ if (!focusSet) {
+ Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
+ Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
+ this._moveFocusToItems();
+ return false;
+ }));
+ });
+ }
+ },
+
+ _onItemActivated: function(activatedItem) {
+ _onItemActivated(activatedItem) {
+ this.emit('activate', activatedItem.key);
+ },
+
+ scrollToItem: function(item) {
+ scrollToItem(item) {
+ let box = item.actor.get_allocation_box();
+
+ let adjustment = this._scrollView.get_vscroll_bar().get_adjustment();
@ -160,7 +160,7 @@ index 000000000..893e35075 @@ -160,7 +160,7 @@ index 000000000..893e35075
+ transition: 'easeOutQuad' });
+ },
+
+ jumpToItem: function(item) {
+ jumpToItem(item) {
+ let box = item.actor.get_allocation_box();
+
+ let adjustment = this._scrollView.get_vscroll_bar().get_adjustment();
@ -170,7 +170,7 @@ index 000000000..893e35075 @@ -170,7 +170,7 @@ index 000000000..893e35075
+ adjustment.set_value(value);
+ },
+
+ getItem: function(key) {
+ getItem(key) {
+ let item = this._items[key];
+
+ if (!item)
@ -179,7 +179,7 @@ index 000000000..893e35075 @@ -179,7 +179,7 @@ index 000000000..893e35075
+ return item;
+ },
+
+ addItem: function(key, text) {
+ addItem(key, text) {
+ this.removeItem(key);
+
+ let item = new AuthListItem(key, text);
@ -188,21 +188,18 @@ index 000000000..893e35075 @@ -188,21 +188,18 @@ index 000000000..893e35075
+ this._items[key] = item;
+
+ item.connect('activate',
+ Lang.bind(this, this._onItemActivated));
+ this._onItemActivated.bind(this));
+
+ // Try to keep the focused item front-and-center
+ item.actor.connect('key-focus-in',
+ Lang.bind(this,
+ function() {
+ this.scrollToItem(item);
+ }));
+ () => { this.scrollToItem(item); });
+
+ this._moveFocusToItems();
+
+ this.emit('item-added', item);
+ },
+
+ removeItem: function(key) {
+ removeItem(key) {
+ let item = this._items[key];
+
+ if (!item)
@ -212,11 +209,11 @@ index 000000000..893e35075 @@ -212,11 +209,11 @@ index 000000000..893e35075
+ delete this._items[key];
+ },
+
+ numItems: function() {
+ numItems() {
+ return Object.keys(this._items).length;
+ },
+
+ clear: function() {
+ clear() {
+ this.label.text = "";
+ this._box.destroy_all_children();
+ this._items = {};
@ -224,7 +221,7 @@ index 000000000..893e35075 @@ -224,7 +221,7 @@ index 000000000..893e35075
+});
+Signals.addSignalMethods(AuthList.prototype);
diff --git a/js/js-resources.gresource.xml b/js/js-resources.gresource.xml
index 7a5c8ca6f..c0a80f564 100644
index 883b62d66..58035d303 100644
--- a/js/js-resources.gresource.xml
+++ b/js/js-resources.gresource.xml
@@ -1,6 +1,7 @@
@ -236,5 +233,5 @@ index 7a5c8ca6f..c0a80f564 100644 @@ -236,5 +233,5 @@ index 7a5c8ca6f..c0a80f564 100644
<file>gdm/batch.js</file>
<file>gdm/fingerprint.js</file>
--
2.14.2
2.17.1


421
SOURCES/0001-global-Allow-overriding-the-override-schema.patch

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
From c2a8239044f350a6548e0e8314b4f40b49a726b2 Mon Sep 17 00:00:00 2001
From 96c97daca0db1ef56125873a8eebef86bdc8087a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 11 Oct 2017 00:36:18 +0200
Date: Mon, 4 Jun 2018 13:45:06 -0400
Subject: [PATCH] global: Allow overriding the override schema

---
@ -9,10 +9,37 @@ Subject: [PATCH] global: Allow overriding the override schema @@ -9,10 +9,37 @@ Subject: [PATCH] global: Allow overriding the override schema
2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/src/main.c b/src/main.c
index 9a89aa4d6..085399b68 100644
index 857877b0b..9d51ee5d1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -39,6 +39,7 @@ extern GType gnome_shell_plugin_get_type (void);
@@ -12,60 +12,61 @@
#include <clutter/clutter.h>
#include <clutter/x11/clutter-x11.h>
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
#include <glib/gi18n-lib.h>
#include <girepository.h>
#include <meta/main.h>
#include <meta/meta-plugin.h>
#include <meta/prefs.h>
#include <atk-bridge.h>
#include "shell-global.h"
#include "shell-global-private.h"
#include "shell-perf-log.h"
#include "st.h"
extern GType gnome_shell_plugin_get_type (void);
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
#define MAGNIFIER_DBUS_SERVICE "org.gnome.Magnifier"
#define OVERRIDES_SCHEMA "org.gnome.shell.overrides"
#define WM_NAME "GNOME Shell"
#define GNOME_WM_KEYBINDINGS "Mutter,GNOME Shell"
static gboolean is_gdm_mode = FALSE;
static char *session_mode = NULL;
static int caught_signal = 0;
@ -20,7 +47,61 @@ index 9a89aa4d6..085399b68 100644 @@ -20,7 +47,61 @@ index 9a89aa4d6..085399b68 100644
#define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1
#define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4
@@ -455,6 +456,12 @@ GOptionEntry gnome_shell_options[] = {
enum {
SHELL_DEBUG_BACKTRACE_WARNINGS = 1,
SHELL_DEBUG_BACKTRACE_SEGFAULTS = 2,
};
static int _shell_debug;
static gboolean _tracked_signals[NSIG] = { 0 };
static void
shell_dbus_acquire_name (GDBusProxy *bus,
guint32 request_name_flags,
guint32 *request_name_result,
const gchar *name,
gboolean fatal)
{
GError *error = NULL;
GVariant *request_name_variant;
if (!(request_name_variant = g_dbus_proxy_call_sync (bus,
"RequestName",
g_variant_new ("(su)", name, request_name_flags),
0, /* call flags */
-1, /* timeout */
NULL, /* cancellable */
&error)))
{
g_printerr ("failed to acquire %s: %s\n", name, error->message);
@@ -423,110 +424,118 @@ print_version (const gchar *option_name,
{
g_print ("GNOME Shell %s\n", VERSION);
exit (0);
}
GOptionEntry gnome_shell_options[] = {
{
"version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
print_version,
N_("Print version"),
NULL
},
{
"gdm-mode", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE,
&is_gdm_mode,
N_("Mode used by GDM for login screen"),
NULL
},
{
"mode", 0, 0, G_OPTION_ARG_STRING,
&session_mode,
N_("Use a specific mode, e.g. “gdm” for login screen"),
"MODE"
},
{
"list-modes", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
list_modes,
N_("List possible modes"),
NULL
},
@ -33,7 +114,57 @@ index 9a89aa4d6..085399b68 100644 @@ -33,7 +114,57 @@ index 9a89aa4d6..085399b68 100644
{ NULL }
};
@@ -512,7 +519,9 @@ main (int argc, char **argv)
int
main (int argc, char **argv)
{
GOptionContext *ctx;
GError *error = NULL;
int ecode;
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
session_mode = (char *) g_getenv ("GNOME_SHELL_SESSION_MODE");
ctx = meta_get_option_context ();
g_option_context_add_main_entries (ctx, gnome_shell_options, GETTEXT_PACKAGE);
g_option_context_add_group (ctx, g_irepository_get_option_group ());
if (!g_option_context_parse (ctx, &argc, &argv, &error))
{
g_printerr ("%s: %s\n", argv[0], error->message);
exit (1);
}
g_option_context_free (ctx);
meta_plugin_manager_set_plugin_type (gnome_shell_plugin_get_type ());
meta_set_wm_name (WM_NAME);
meta_set_gnome_wm_keybindings (GNOME_WM_KEYBINDINGS);
/* Prevent meta_init() from causing gtk to load the atk-bridge*/
g_setenv ("NO_AT_BRIDGE", "1", TRUE);
meta_init ();
g_unsetenv ("NO_AT_BRIDGE");
/* FIXME: Add gjs API to set this stuff and don't depend on the
* environment. These propagate to child processes.
*/
g_setenv ("GJS_DEBUG_OUTPUT", "stderr", TRUE);
g_setenv ("GJS_DEBUG_TOPICS", "JS ERROR;JS LOG", TRUE);
shell_init_debug (g_getenv ("SHELL_DEBUG"));
shell_dbus_init (meta_get_replace_current_wm ());
shell_a11y_init ();
shell_perf_log_init ();
shell_introspection_init ();
shell_fonts_init ();
g_log_set_default_handler (default_log_handler, NULL);
/* Initialize the global object */
if (session_mode == NULL)
session_mode = is_gdm_mode ? (char *)"gdm" : (char *)"user";
@ -44,27 +175,132 @@ index 9a89aa4d6..085399b68 100644 @@ -44,27 +175,132 @@ index 9a89aa4d6..085399b68 100644
shell_prefs_init ();
dump_gjs_stack_on_signal (SIGABRT);
dump_gjs_stack_on_signal (SIGFPE);
dump_gjs_stack_on_signal (SIGIOT);
dump_gjs_stack_on_signal (SIGTRAP);
if ((_shell_debug & SHELL_DEBUG_BACKTRACE_SEGFAULTS))
{
dump_gjs_stack_on_signal (SIGBUS);
dump_gjs_stack_on_signal (SIGSEGV);
}
ecode = meta_run ();
g_debug ("Doing final cleanup");
_shell_global_destroy_gjs_context (shell_global_get ());
g_object_unref (shell_global_get ());
return ecode;
}
diff --git a/src/shell-global.c b/src/shell-global.c
index 855f6257c..181dbb825 100644
index c67ac4e4a..961fd3a70 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -67,6 +67,7 @@ struct _ShellGlobal {
GdkScreen *gdk_screen;
@@ -38,158 +38,167 @@
/* Memory report bits */
#ifdef HAVE_MALLINFO
#include <malloc.h>
#endif
#if defined __OpenBSD__ || defined __FreeBSD__
#include <sys/sysctl.h>
#endif
#include "shell-enum-types.h"
#include "shell-global-private.h"
#include "shell-perf-log.h"
#include "shell-window-tracker.h"
#include "shell-wm.h"
#include "st.h"
static ShellGlobal *the_object = NULL;
struct _ShellGlobal {
GObject parent;
ClutterStage *stage;
Window stage_xwindow;
MetaDisplay *meta_display;
GdkDisplay *gdk_display;
Display *xdisplay;
MetaScreen *meta_screen;
char *session_mode;
+ char *override_schema;
XserverRegion input_region;
@@ -98,6 +99,7 @@ enum {
GjsContext *js_context;
MetaPlugin *plugin;
ShellWM *wm;
GSettings *settings;
const char *datadir;
char *imagedir;
char *userdatadir;
GFile *userdatadir_path;
GFile *runtime_state_path;
StFocusManager *focus_manager;
guint work_count;
GSList *leisure_closures;
guint leisure_function_id;
/* For sound notifications */
ca_context *sound_context;
gboolean has_modal;
gboolean frame_timestamps;
gboolean frame_finish_timestamp;
};
enum {
PROP_0,
PROP_SESSION_MODE,
+ PROP_OVERRIDE_SCHEMA,
PROP_SCREEN,
PROP_GDK_SCREEN,
PROP_DISPLAY,
@@ -141,6 +143,10 @@ shell_global_set_property(GObject *object,
PROP_SCREEN_WIDTH,
PROP_SCREEN_HEIGHT,
PROP_STAGE,
PROP_WINDOW_GROUP,
PROP_TOP_WINDOW_GROUP,
PROP_WINDOW_MANAGER,
PROP_SETTINGS,
PROP_DATADIR,
PROP_IMAGEDIR,
PROP_USERDATADIR,
PROP_FOCUS_MANAGER,
PROP_FRAME_TIMESTAMPS,
PROP_FRAME_FINISH_TIMESTAMP,
};
/* Signals */
enum
{
NOTIFY_ERROR,
LAST_SIGNAL
};
G_DEFINE_TYPE(ShellGlobal, shell_global, G_TYPE_OBJECT);
static guint shell_global_signals [LAST_SIGNAL] = { 0 };
static void
shell_global_set_property(GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
ShellGlobal *global = SHELL_GLOBAL (object);
switch (prop_id)
{
case PROP_SESSION_MODE:
g_clear_pointer (&global->session_mode, g_free);
global->session_mode = g_ascii_strdown (g_value_get_string (value), -1);
break;
@ -75,7 +311,25 @@ index 855f6257c..181dbb825 100644 @@ -75,7 +311,25 @@ index 855f6257c..181dbb825 100644
case PROP_FRAME_TIMESTAMPS:
global->frame_timestamps = g_value_get_boolean (value);
break;
@@ -166,6 +172,9 @@ shell_global_get_property(GObject *object,
case PROP_FRAME_FINISH_TIMESTAMP:
global->frame_finish_timestamp = g_value_get_boolean (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
shell_global_get_property(GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
ShellGlobal *global = SHELL_GLOBAL (object);
switch (prop_id)
{
case PROP_SESSION_MODE:
g_value_set_string (value, shell_global_get_session_mode (global));
break;
@ -85,7 +339,61 @@ index 855f6257c..181dbb825 100644 @@ -85,7 +339,61 @@ index 855f6257c..181dbb825 100644
case PROP_SCREEN:
g_value_set_object (value, global->meta_screen);
break;
@@ -370,6 +379,13 @@ shell_global_class_init (ShellGlobalClass *klass)
case PROP_DISPLAY:
g_value_set_object (value, global->meta_display);
break;
case PROP_SCREEN_WIDTH:
{
int width, height;
meta_screen_get_size (global->meta_screen, &width, &height);
g_value_set_int (value, width);
}
break;
case PROP_SCREEN_HEIGHT:
{
int width, height;
meta_screen_get_size (global->meta_screen, &width, &height);
g_value_set_int (value, height);
}
break;
case PROP_STAGE:
g_value_set_object (value, global->stage);
break;
case PROP_WINDOW_GROUP:
g_value_set_object (value, meta_get_window_group_for_screen (global->meta_screen));
break;
case PROP_TOP_WINDOW_GROUP:
g_value_set_object (value, meta_get_top_window_group_for_screen (global->meta_screen));
@@ -341,60 +350,67 @@ shell_global_finalize (GObject *object)
g_free (global->imagedir);
g_free (global->userdatadir);
G_OBJECT_CLASS(shell_global_parent_class)->finalize (object);
}
static void
shell_global_class_init (ShellGlobalClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->get_property = shell_global_get_property;
gobject_class->set_property = shell_global_set_property;
gobject_class->finalize = shell_global_finalize;
shell_global_signals[NOTIFY_ERROR] =
g_signal_new ("notify-error",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 2,
G_TYPE_STRING,
G_TYPE_STRING);
g_object_class_install_property (gobject_class,
PROP_SESSION_MODE,
g_param_spec_string ("session-mode",
"Session Mode",
"The session mode to use",
@ -99,7 +407,61 @@ index 855f6257c..181dbb825 100644 @@ -99,7 +407,61 @@ index 855f6257c..181dbb825 100644
"user",
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (gobject_class,
@@ -1495,7 +1511,9 @@ shell_global_get_overrides_settings (ShellGlobal *global)
PROP_SCREEN,
g_param_spec_object ("screen",
"Screen",
"Metacity screen object for the shell",
META_TYPE_SCREEN,
G_PARAM_READABLE));
g_object_class_install_property (gobject_class,
PROP_SCREEN_WIDTH,
g_param_spec_int ("screen-width",
"Screen Width",
"Screen width, in pixels",
0, G_MAXINT, 1,
G_PARAM_READABLE));
g_object_class_install_property (gobject_class,
PROP_SCREEN_HEIGHT,
g_param_spec_int ("screen-height",
"Screen Height",
"Screen height, in pixels",
0, G_MAXINT, 1,
G_PARAM_READABLE));
g_object_class_install_property (gobject_class,
PROP_DISPLAY,
g_param_spec_object ("display",
"Display",
"Metacity display object for the shell",
@@ -1333,61 +1349,63 @@ shell_global_sync_pointer (ShellGlobal *global)
* @global: A #ShellGlobal
*
* Get the global GSettings instance.
*
* Return value: (transfer none): The GSettings object
*/
GSettings *
shell_global_get_settings (ShellGlobal *global)
{
return global->settings;
}
/**
* shell_global_get_overrides_settings:
* @global: A #ShellGlobal
*
* Get the session overrides GSettings instance.
*
* Return value: (transfer none): The GSettings object
*/
GSettings *
shell_global_get_overrides_settings (ShellGlobal *global)
{
static GSettings *settings = NULL;
const char *schema;
g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL);
if (!settings)
{
@ -110,6 +472,33 @@ index 855f6257c..181dbb825 100644 @@ -110,6 +472,33 @@ index 855f6257c..181dbb825 100644
schema = "org.gnome.shell.extensions.classic-overrides";
else if (strcmp (global->session_mode, "user") == 0)
schema = "org.gnome.shell.overrides";
else
return NULL;
settings = g_settings_new (schema);
}
return settings;
}
/**
* shell_global_get_current_time:
* @global: A #ShellGlobal
*
* Returns: the current X server time from the current Clutter, Gdk, or X
* event. If called from outside an event handler, this may return
* %Clutter.CURRENT_TIME (aka 0), or it may return a slightly
* out-of-date timestamp.
*/
guint32
shell_global_get_current_time (ShellGlobal *global)
{
guint32 time;
/* meta_display_get_current_time() will return the correct time
when handling an X or Gdk event, but will return CurrentTime
from some Clutter event callbacks.
--
2.14.2
2.17.1


55
SOURCES/0001-keyboard-Handle-no-window-case-in-FocusTracker.patch

@ -0,0 +1,55 @@ @@ -0,0 +1,55 @@
From 6a796675bd7815087881b799ff5fc79e9ce2b0bf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Mon, 16 Jul 2018 23:36:38 +0000
Subject: [PATCH] keyboard: Handle no-window case in FocusTracker

For windows, the cursor location needs to be adjusted by the frame
offsets. However we cannot assume that there is a window, as the
shell itself can have the key focus.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/414


(cherry picked from commit 0dee82fb9fa974ebdb4dd77fd85535a6edf207fd)
---
js/ui/keyboard.js | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index 5fcdf988a7..66653d6027 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -533,17 +533,25 @@ var FocusTracker = new Lang.Class({
},
_setCurrentRect(rect) {
- let frameRect = this._currentWindow.get_frame_rect();
- rect.x -= frameRect.x;
- rect.y -= frameRect.y;
+ if (this._currentWindow) {
+ let frameRect = this._currentWindow.get_frame_rect();
+ rect.x -= frameRect.x;
+ rect.y -= frameRect.y;
+ }
this._rect = rect;
this.emit('position-changed');
},
getCurrentRect() {
- let frameRect = this._currentWindow.get_frame_rect();
- let rect = { x: this._rect.x + frameRect.x, y: this._rect.y + frameRect.y, width: this._rect.width, height: this._rect.height };
+ let rect = { x: this._rect.x, y: this._rect.y,
+ width: this._rect.width, height: this._rect.height };
+
+ if (this._currentWindow) {
+ let frameRect = this._currentWindow.get_frame_rect();
+ rect.x += frameRect.x;
+ rect.y += frameRect.y;
+ }
return rect;
}
--
2.17.1

67
SOURCES/0001-keyboard-Listen-to-IbusPanelService-focus-in-out-to-.patch

@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
From 04a4a100e34e3ce8c34212ebb79e77b92ef8238d Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Tue, 18 Sep 2018 12:54:29 +0200
Subject: [PATCH] keyboard: Listen to IbusPanelService::focus-in/out to track
focus changes

In X11 there's no input panel state requests, so restore the previous behavior
that focused entries would always toggle the OSK on there.
---
js/misc/ibusManager.js | 6 ++++++
js/ui/keyboard.js | 16 ++++++++++++++++
2 files changed, 22 insertions(+)

diff --git a/js/misc/ibusManager.js b/js/misc/ibusManager.js
index 6452e492f..e6d4b5aec 100644
--- a/js/misc/ibusManager.js
+++ b/js/misc/ibusManager.js
@@ -119,6 +119,12 @@ var IBusManager = new Lang.Class({
let cursorLocation = { x, y, width: w, height: h };
this.emit('set-cursor-location', cursorLocation);
});
+ this._panelService.connect('focus-in', (panel, path) => {
+ // This is ibus' "no focus" input context, so should be ignored
+ if (!GLib.str_has_suffix(path, '/InputContext_1'))
+ this.emit ('focus-in');
+ });
+ this._panelService.connect('focus-out', () => { this.emit('focus-out'); });
try {
// IBus versions older than 1.5.10 have a bug which
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index be0146344..491495c57 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -519,6 +519,12 @@ var FocusTracker = new Lang.Class({
this._setCurrentRect(rect);
});
+ this._ibusManager.connect('focus-in', () => {
+ this.emit('focus-changed', true);
+ });
+ this._ibusManager.connect('focus-out', () => {
+ this.emit('focus-changed', false);
+ });
},
get currentWindow() {
@@ -590,6 +596,16 @@ var Keyboard = new Lang.Class({
this._animFocusedWindow = null;
this._oskFocusWindow = null;
});
+ this._focusTracker.connect('focus-changed', (tracker, focused) => {
+ // Valid only for X11
+ if (Meta.is_wayland_compositor())
+ return;
+
+ if (focused)
+ this.show(Main.layoutManager.focusIndex);
+ else
+ this.hide();
+ });
Meta.get_backend().connect('last-device-changed',
(backend, deviceId) => {
--
2.19.0

61
SOURCES/0001-loginDialog-make-info-messages-themed.patch

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
From b82109bd0c04a8b050a7ad18cd4b2c1d4186fa61 Mon Sep 17 00:00:00 2001
From e407e1f6843258fff417ff9d5e558d256fe10a03 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
@ -6,46 +6,27 @@ Subject: [PATCH] loginDialog: make info messages themed @@ -6,46 +6,27 @@ Subject: [PATCH] loginDialog: make info messages themed
They were lacking a definition before leading them to
show up invisible.
---
data/theme/gnome-shell-high-contrast.css | 6 ++++--
data/theme/gnome-shell.css | 6 ++++--
2 files changed, 8 insertions(+), 4 deletions(-)
data/theme/gnome-shell-sass/_common.scss | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css
index 52dc81863..b807db8ae 100644
--- a/data/theme/gnome-shell-high-contrast.css
+++ b/data/theme/gnome-shell-high-contrast.css
@@ -1647,9 +1647,11 @@ StScrollBar {
.login-dialog-message-warning {
color: #f57900; }
-.login-dialog-message-hint {
+.login-dialog-message-hint, .login-dialog-message {
+ color: #bebeb6;
padding-top: 0;
- padding-bottom: 20px; }
diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss
index 4e82ef58b..ee643c440 100644
--- a/data/theme/gnome-shell-sass/_common.scss
+++ b/data/theme/gnome-shell-sass/_common.scss
@@ -1769,7 +1769,12 @@ StScrollBar {
.login-dialog-banner { color: darken($osd_fg_color,10%); }
.login-dialog-button-box { spacing: 5px; }
.login-dialog-message-warning { color: $warning_color; }
- .login-dialog-message-hint { padding-top: 0; padding-bottom: 20px; }
+ .login-dialog-message-hint, .login-dialog-message {
+ color: darken($osd_fg_color, 20%);
+ padding-top: 0;
+ padding-bottom: 20px;
+ min-height: 2.75em; }
.login-dialog-user-selection-box {
padding: 100px 0px; }
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index a320f41a0..dd37cdf7b 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -1647,9 +1647,11 @@ StScrollBar {
.login-dialog-message-warning {
color: #f57900; }
-.login-dialog-message-hint {
+.login-dialog-message-hint, .login-dialog-message {
+ color: #bebeb6;
padding-top: 0;
- padding-bottom: 20px; }
+ padding-bottom: 20px;
+ min-height: 2.75em; }
.login-dialog-user-selection-box {
padding: 100px 0px; }
+ min-height: 2.75em;
+ }
.login-dialog-user-selection-box { padding: 100px 0px; }
.login-dialog-not-listed-label {
padding-left: 2px;
--
2.14.2
2.17.1


160
SOURCES/0001-panel-add-an-icon-to-the-ActivitiesButton.patch

@ -1,48 +1,115 @@ @@ -1,48 +1,115 @@
From 7196f5d0a60243e218d6a906b9db4f3b6608b47c Mon Sep 17 00:00:00 2001
From 519df156f73419d83fbd043e73abc8d3f93233b0 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-high-contrast.css | 3 +++
data/theme/gnome-shell.css | 3 +++
data/theme/gnome-shell-sass/_common.scss | 5 +++++
js/ui/panel.js | 9 ++++++++-
3 files changed, 14 insertions(+), 1 deletion(-)
2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css
index 51477e713..e7b94624a 100644
--- a/data/theme/gnome-shell-high-contrast.css
+++ b/data/theme/gnome-shell-high-contrast.css
@@ -688,6 +688,9 @@ StScrollBar {
-st-icon-style: symbolic;
margin-left: 4px;
margin-right: 4px; }
+ #panel .panel-button .panel-logo-icon {
+ padding-right: .4em;
+ icon-size: 1em; }
#panel .panel-button .system-status-icon,
#panel .panel-button .app-menu-icon > StIcon,
#panel .panel-button .popup-menu-arrow {
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index 6aab70867..c1207dcd5 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -688,6 +688,9 @@ StScrollBar {
diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss
index 1b0c20650..639f062f1 100644
--- a/data/theme/gnome-shell-sass/_common.scss
+++ b/data/theme/gnome-shell-sass/_common.scss
@@ -749,60 +749,65 @@ StScrollBar {
-panel-corner-background-color: rgba(0, 0, 0, 0.35);
-panel-corner-border-width: 2px;
-panel-corner-border-color: transparent;
&:active, &:overview, &:focus {
-panel-corner-border-color: lighten($selected_bg_color,5%);
}
&.lock-screen, &.login-screen, &.unlock-screen {
-panel-corner-radius: 0;
-panel-corner-background-color: transparent;
-panel-corner-border-color: transparent;
}
}
.panel-button {
-natural-hpadding: 12px;
-minimum-hpadding: 6px;
font-weight: bold;
color: #eee;
text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9);
transition-duration: 100ms;
.app-menu-icon {
-st-icon-style: symbolic;
margin-left: 4px;
margin-right: 4px; }
+ #panel .panel-button .panel-logo-icon {
margin-right: 4px;
//dimensions of the icon are hardcoded
}
+ .panel-logo-icon {
+ padding-right: .4em;
+ icon-size: 1em; }
#panel .panel-button .system-status-icon,
#panel .panel-button .app-menu-icon > StIcon,
#panel .panel-button .popup-menu-arrow {
+ icon-size: 1em;
+ }
+
.system-status-icon,
.app-menu-icon > StIcon,
.popup-menu-arrow {
icon-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9);
}
&:hover {
color: lighten($fg_color, 10%);
text-shadow: 0px 1px 6px rgba(0, 0, 0, 1);
.system-status-icon,
.app-menu-icon > StIcon,
.popup-menu-arrow {
icon-shadow: 0px 1px 6px rgba(0, 0, 0, 1);
}
}
&:active, &:overview, &:focus, &:checked {
// Trick due to St limitations. It needs a background to draw
// a box-shadow
background-color: rgba(0, 0, 0, 0.01);
box-shadow: inset 0 -2px 0px lighten($selected_bg_color,5%);
color: lighten($fg_color,10%);
& > .system-status-icon { icon-shadow: black 0 2px 2px; }
}
.system-status-icon { icon-size: 1.09em; padding: 0 5px; }
.unlock-screen &,
.login-screen &,
diff --git a/js/ui/panel.js b/js/ui/panel.js
index d7c8397b5..3ec43210e 100644
index 2f593247d..d1a572503 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -409,11 +409,18 @@ var ActivitiesButton = new Lang.Class({
@@ -379,65 +379,72 @@ var AppMenuButton = new Lang.Class({
}
if (this._overviewShowingId > 0) {
Main.overview.disconnect(this._overviewShowingId);
this._overviewShowingId = 0;
}
if (this._showsAppMenuId > 0) {
this._gtkSettings.disconnect(this._showsAppMenuId);
this._showsAppMenuId = 0;
}
if (this._switchWorkspaceNotifyId > 0) {
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
this._switchWorkspaceNotifyId = 0;
}
this.parent();
}
});
Signals.addSignalMethods(AppMenuButton.prototype);
var ActivitiesButton = new Lang.Class({
Name: 'ActivitiesButton',
Extends: PanelMenu.Button,
_init() {
this.parent(0.0, null, true);
this.actor.accessible_role = Atk.Role.TOGGLE_BUTTON;
this.actor.name = 'panelActivities';
@ -62,6 +129,33 @@ index d7c8397b5..3ec43210e 100644 @@ -62,6 +129,33 @@ index d7c8397b5..3ec43210e 100644
this.actor.label_actor = this._label;
this.actor.connect('captured-event', this._onCapturedEvent.bind(this));
this.actor.connect_after('key-release-event', this._onKeyRelease.bind(this));
Main.overview.connect('showing', () => {
this.actor.add_style_pseudo_class('overview');
this.actor.add_accessible_state (Atk.StateType.CHECKED);
});
Main.overview.connect('hiding', () => {
this.actor.remove_style_pseudo_class('overview');
this.actor.remove_accessible_state (Atk.StateType.CHECKED);
});
this._xdndTimeOut = 0;
},
handleDragOver(source, actor, x, y, time) {
if (source != Main.xdndHandler)
return DND.DragMotionResult.CONTINUE;
if (this._xdndTimeOut != 0)
Mainloop.source_remove(this._xdndTimeOut);
this._xdndTimeOut = Mainloop.timeout_add(BUTTON_DND_ACTIVATION_TIMEOUT, () => {
this._xdndToggleOverview(actor);
});
GLib.Source.set_name_by_id(this._xdndTimeOut, '[gnome-shell] this._xdndToggleOverview');
return DND.DragMotionResult.CONTINUE;
--
2.14.2
2.17.1


12
SOURCES/0001-screenShield-unblank-when-inserting-smartcard.patch

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
From 7d9fa52a96cd5698ccb4773ffb71ab23b2a22a3d Mon Sep 17 00:00:00 2001
From c4fc8a8db952a1ab349014db2e1429479ec8a7a5 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 3 Jul 2015 13:54:36 -0400
Subject: [PATCH] screenShield: unblank when inserting smartcard
@ -13,21 +13,21 @@ action to get the screen to unblank. @@ -13,21 +13,21 @@ action to get the screen to unblank.
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index 9f3ff84ad..8d3eb43d4 100644
index 2d8d9b3f6..ebba6c82a 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -516,8 +516,10 @@ var ScreenShield = new Lang.Class({
@@ -515,8 +515,10 @@ var ScreenShield = new Lang.Class({
this._smartcardManager = SmartcardManager.getSmartcardManager();
this._smartcardManager.connect('smartcard-inserted',
Lang.bind(this, function(manager, token) {
(manager, token) => {
- if (this._isLocked && token.UsedToLogin)
+ if (this._isLocked && token.UsedToLogin) {
+ this._wakeUpScreen();
this._liftShield(true, 0);
+ }
}));
});
this._oVirtCredentialsManager = OVirt.getOVirtCredentialsManager();
--
2.14.2
1.8.3.1


4
SOURCES/0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch

@ -28,7 +28,7 @@ index 3fd24d275..d9f36b281 100644 @@ -28,7 +28,7 @@ index 3fd24d275..d9f36b281 100644
ExtensionDownloader.checkForUpdates();
},
+ LoadUserExtension: function(uuid) {
+ LoadUserExtension(uuid) {
+ let extension = ExtensionUtils.extensions[uuid];
+ if (extension)
+ return true;
@ -46,7 +46,7 @@ index 3fd24d275..d9f36b281 100644 @@ -46,7 +46,7 @@ index 3fd24d275..d9f36b281 100644
+
ShellVersion: Config.PACKAGE_VERSION,
_extensionStateChanged: function(_, newState) {
_extensionStateChanged(_, newState) {
--
2.14.2


22
SOURCES/0001-system-don-t-throw-an-exception-if-power-off-disable.patch

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
From 3ff1be9fe127a51092b1f5b97d65af7fff75041d Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Mon, 13 Nov 2017 14:17:18 -0500
From 5bd84b34622a3e5919e979b99d1d4872d355d18d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Mon, 4 Jun 2018 13:48:02 -0400
Subject: [PATCH] system: don't throw an exception if power off disabled

---
@ -8,18 +8,18 @@ Subject: [PATCH] system: don't throw an exception if power off disabled @@ -8,18 +8,18 @@ Subject: [PATCH] system: don't throw an exception if power off disabled
1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/js/ui/status/system.js b/js/ui/status/system.js
index 2a8ca47..37d140a 100644
index 68a0b4b5b..2ab38419f 100644
--- a/js/ui/status/system.js
+++ b/js/ui/status/system.js
@@ -40,66 +40,69 @@ var AltSwitcher = new Lang.Class({
this._clickAction.connect('long-press', Lang.bind(this, this._onLongPress));
this._clickAction.connect('long-press', this._onLongPress.bind(this));
this.actor = new St.Bin();
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this.actor.connect('destroy', this._onDestroy.bind(this));
this.actor.connect('notify::mapped', () => { this._flipped = false; });
},
_sync: function() {
_sync() {
let childToShow = null;
if (this._standard.visible && this._alternate.visible) {
@ -65,14 +65,14 @@ index 2a8ca47..37d140a 100644 @@ -65,14 +65,14 @@ index 2a8ca47..37d140a 100644
this.actor.visible = (childToShow != null);
},
_onDestroy: function() {
_onDestroy() {
if (this._capturedEventId > 0) {
global.stage.disconnect(this._capturedEventId);
this._capturedEventId = 0;
}
},
_onCapturedEvent: function(actor, event) {
_onCapturedEvent(actor, event) {
let type = event.type();
if (type == Clutter.EventType.KEY_PRESS || type == Clutter.EventType.KEY_RELEASE) {
let key = event.get_key_symbol();
@ -83,9 +83,9 @@ index 2a8ca47..37d140a 100644 @@ -83,9 +83,9 @@ index 2a8ca47..37d140a 100644
return Clutter.EVENT_PROPAGATE;
},
_onLongPress: function(action, actor, state) {
_onLongPress(action, actor, state) {
if (state == Clutter.LongPressState.QUERY ||
state == Clutter.LongPressState.CANCEL)
--
2.14.3
2.17.1


16
SOURCES/0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
From 8d085a574b5b5d1055451a1b430fcf5cb9af4859 Mon Sep 17 00:00:00 2001
From aa5dbcf4cd7caa9ff1ba2c2c8b65f007314f521a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 14 Mar 2017 17:04:36 +0100
Subject: [PATCH] windowMenu: Bring back workspaces submenu for static
@ -13,12 +13,12 @@ are used. @@ -13,12 +13,12 @@ are used.
1 file changed, 16 insertions(+)

diff --git a/js/ui/windowMenu.js b/js/ui/windowMenu.js
index 7aa57beb3..8751c4c4d 100644
index f0e564b7e..8c97a1eec 100644
--- a/js/ui/windowMenu.js
+++ b/js/ui/windowMenu.js
@@ -119,6 +119,22 @@ var WindowMenu = new Lang.Class({
window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.DOWN));
}));
@@ -123,6 +123,22 @@ var WindowMenu = new Lang.Class({
window.change_workspace(workspace.get_neighbor(dir));
});
}
+
+ let nWorkspaces = global.screen.n_workspaces;
@ -30,9 +30,9 @@ index 7aa57beb3..8751c4c4d 100644 @@ -30,9 +30,9 @@ index 7aa57beb3..8751c4c4d 100644
+ for (let i = 0; i < nWorkspaces; i++) {
+ let index = i;
+ let name = Meta.prefs_get_workspace_name(i);
+ let subitem = item.menu.addAction(name, Lang.bind(this, function() {
+ let subitem = item.menu.addAction(name, () => {
+ window.change_workspace_by_index(index, false);
+ }));
+ });
+ subitem.setSensitive(currentIndex != i);
+ }
+ }
@ -40,5 +40,5 @@ index 7aa57beb3..8751c4c4d 100644 @@ -40,5 +40,5 @@ index 7aa57beb3..8751c4c4d 100644
}
--
2.14.2
2.17.1


97
SOURCES/0002-gdmUtil-enable-support-for-GDM-s-ChoiceList-PAM-exte.patch

@ -1,19 +1,18 @@ @@ -1,19 +1,18 @@
From 1383483a7c9707c2528c5a47fd71217cf253c6ff Mon Sep 17 00:00:00 2001
From e5214fb2992c1ef5d8bde63295d9f54dbb3daa24 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 17 Jul 2017 16:48:03 -0400
Subject: [PATCH 2/2] gdmUtil: enable support for GDM's ChoiceList PAM
extension
Subject: [PATCH] gdmUtil: enable support for GDM's ChoiceList PAM extension

This commit hooks up support for GDM's ChoiceList PAM extension.
---
js/gdm/authPrompt.js | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++-
js/gdm/loginDialog.js | 5 ++++
js/gdm/util.js | 28 +++++++++++++++++++
js/ui/unlockDialog.js | 9 ++++++-
js/gdm/authPrompt.js | 74 ++++++++++++++++++++++++++++++++++++++++++-
js/gdm/loginDialog.js | 5 +++
js/gdm/util.js | 28 ++++++++++++++++
js/ui/unlockDialog.js | 9 +++++-
4 files changed, 114 insertions(+), 2 deletions(-)

diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 366f34687..7f23f0087 100644
index e44281117..27a55246a 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -9,6 +9,7 @@ const Signals = imports.signals;
@ -26,13 +25,13 @@ index 366f34687..7f23f0087 100644 @@ -26,13 +25,13 @@ index 366f34687..7f23f0087 100644
const Meta = imports.gi.Meta;
@@ -61,6 +62,7 @@ var AuthPrompt = new Lang.Class({
this._userVerifier.connect('ask-question', Lang.bind(this, this._onAskQuestion));
this._userVerifier.connect('show-message', Lang.bind(this, this._onShowMessage));
+ this._userVerifier.connect('show-choice-list', Lang.bind(this, this._onShowChoiceList));
this._userVerifier.connect('verification-failed', Lang.bind(this, this._onVerificationFailed));
this._userVerifier.connect('verification-complete', Lang.bind(this, this._onVerificationComplete));
this._userVerifier.connect('reset', Lang.bind(this, this._onReset));
@@ -125,6 +127,28 @@ var AuthPrompt = new Lang.Class({
this._userVerifier.connect('ask-question', this._onAskQuestion.bind(this));
this._userVerifier.connect('show-message', this._onShowMessage.bind(this));
+ this._userVerifier.connect('show-choice-list', this._onShowChoiceList.bind(this));
this._userVerifier.connect('verification-failed', this._onVerificationFailed.bind(this));
this._userVerifier.connect('verification-complete', this._onVerificationComplete.bind(this));
this._userVerifier.connect('reset', this._onReset.bind(this));
@@ -123,6 +125,28 @@ var AuthPrompt = new Lang.Class({
this.actor.add(this._timedLoginIndicator);
@ -61,11 +60,11 @@ index 366f34687..7f23f0087 100644 @@ -61,11 +60,11 @@ index 366f34687..7f23f0087 100644
this._message = new St.Label({ opacity: 0,
styleClass: 'login-dialog-message' });
this._message.clutter_text.line_wrap = true;
@@ -276,6 +300,21 @@ var AuthPrompt = new Lang.Class({
@@ -266,6 +290,21 @@ var AuthPrompt = new Lang.Class({
this.emit('prompted');
},
+ _onShowChoiceList: function(userVerifier, serviceName, promptMessage, choiceList) {
+ _onShowChoiceList(userVerifier, serviceName, promptMessage, choiceList) {
+ if (this._queryingService)
+ this.clear();
+
@ -80,19 +79,19 @@ index 366f34687..7f23f0087 100644 @@ -80,19 +79,19 @@ index 366f34687..7f23f0087 100644
+ this.emit('prompted');
+ },
+
_onOVirtUserAuthenticated: function() {
_onOVirtUserAuthenticated() {
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED)
this.reset();
@@ -404,6 +443,8 @@ var AuthPrompt = new Lang.Class({
clear: function() {
@@ -394,6 +433,8 @@ var AuthPrompt = new Lang.Class({
clear() {
this._entry.text = '';
this.stopSpinning();
+ this._authList.clear();
+ this._authList.actor.hide();
},
setPasswordChar: function(passwordChar) {
@@ -419,12 +460,42 @@ var AuthPrompt = new Lang.Class({
setPasswordChar(passwordChar) {
@@ -409,12 +450,42 @@ var AuthPrompt = new Lang.Class({
this._label.set_text(question);
@ -103,7 +102,7 @@ index 366f34687..7f23f0087 100644 @@ -103,7 +102,7 @@ index 366f34687..7f23f0087 100644
this._entry.grab_key_focus();
},
+ _fadeInChoiceList: function() {
+ _fadeInChoiceList() {
+ this._authList.actor.opacity = 0;
+ this._authList.actor.show();
+ this._authList.actor.reactive = false;
@ -117,7 +116,7 @@ index 366f34687..7f23f0087 100644 @@ -117,7 +116,7 @@ index 366f34687..7f23f0087 100644
+ });
+ },
+
+ setChoiceList: function(promptMessage, choiceList) {
+ setChoiceList(promptMessage, choiceList) {
+ this._authList.clear();
+ this._authList.label.text = promptMessage;
+ for (let key in choiceList) {
@ -132,10 +131,10 @@ index 366f34687..7f23f0087 100644 @@ -132,10 +131,10 @@ index 366f34687..7f23f0087 100644
+ this._fadeInChoiceList();
+ },
+
getAnswer: function() {
getAnswer() {
let text;
@@ -460,6 +531,7 @@ var AuthPrompt = new Lang.Class({
@@ -450,6 +521,7 @@ var AuthPrompt = new Lang.Class({
else
this._message.remove_style_class_name('login-dialog-message-hint');
@ -143,20 +142,20 @@ index 366f34687..7f23f0087 100644 @@ -143,20 +142,20 @@ index 366f34687..7f23f0087 100644
if (message) {
Tweener.removeTweens(this._message);
this._message.text = message;
@@ -475,7 +547,7 @@ var AuthPrompt = new Lang.Class({
@@ -465,7 +537,7 @@ var AuthPrompt = new Lang.Class({
},
updateSensitivity: function(sensitive) {
updateSensitivity(sensitive) {
- this._updateNextButtonSensitivity(sensitive && (this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING));
+ this._updateNextButtonSensitivity(sensitive && !this._authList.actor.visible && (this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING));
this._entry.reactive = sensitive;
this._entry.clutter_text.editable = sensitive;
},
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index 6f6de00da..764a96e06 100644
index 65d9edf1a..912c0e0ca 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -435,6 +435,11 @@ var LoginDialog = new Lang.Class({
@@ -418,6 +418,11 @@ var LoginDialog = new Lang.Class({
this._userManager = AccountsService.UserManager.get_default()
this._gdmClient = new Gdm.Client();
@ -169,7 +168,7 @@ index 6f6de00da..764a96e06 100644 @@ -169,7 +168,7 @@ index 6f6de00da..764a96e06 100644
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY,
diff --git a/js/gdm/util.js b/js/gdm/util.js
index 83a12fb6c..9fc61f55a 100644
index f5f9d5e5d..04a0cb9bf 100644
--- a/js/gdm/util.js
+++ b/js/gdm/util.js
@@ -200,6 +200,10 @@ var ShellUserVerifier = new Lang.Class({
@ -187,14 +186,14 @@ index 83a12fb6c..9fc61f55a 100644 @@ -187,14 +186,14 @@ index 83a12fb6c..9fc61f55a 100644
this._oVirtCredentialsManager = null;
},
+ selectChoice: function(serviceName, key) {
+ selectChoice(serviceName, key) {
+ this._userVerifierChoiceList.call_select_choice(serviceName, key, this._cancellable, null);
+ },
+
answerQuery: function(serviceName, answer) {
answerQuery(serviceName, answer) {
if (!this.hasPendingMessages) {
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
@@ -368,6 +376,11 @@ var ShellUserVerifier = new Lang.Class({
@@ -367,6 +375,11 @@ var ShellUserVerifier = new Lang.Class({
return;
}
@ -206,7 +205,7 @@ index 83a12fb6c..9fc61f55a 100644 @@ -206,7 +205,7 @@ index 83a12fb6c..9fc61f55a 100644
this.reauthenticating = true;
this._connectSignals();
this._beginVerification();
@@ -385,6 +398,11 @@ var ShellUserVerifier = new Lang.Class({
@@ -384,6 +397,11 @@ var ShellUserVerifier = new Lang.Class({
return;
}
@ -218,32 +217,32 @@ index 83a12fb6c..9fc61f55a 100644 @@ -218,32 +217,32 @@ index 83a12fb6c..9fc61f55a 100644
this._connectSignals();
this._beginVerification();
this._hold.release();
@@ -398,6 +416,9 @@ var ShellUserVerifier = new Lang.Class({
this._userVerifier.connect('conversation-stopped', Lang.bind(this, this._onConversationStopped));
this._userVerifier.connect('reset', Lang.bind(this, this._onReset));
this._userVerifier.connect('verification-complete', Lang.bind(this, this._onVerificationComplete));
@@ -397,6 +415,9 @@ var ShellUserVerifier = new Lang.Class({
this._userVerifier.connect('conversation-stopped', this._onConversationStopped.bind(this));
this._userVerifier.connect('reset', this._onReset.bind(this));
this._userVerifier.connect('verification-complete', this._onVerificationComplete.bind(this));
+
+ if (this._userVerifierChoiceList)
+ this._userVerifierChoiceList.connect('choice-query', Lang.bind(this, this._onChoiceListQuery));
+ this._userVerifierChoiceList.connect('choice-query', this._onChoiceListQuery.bind(this));
},
_getForegroundService: function() {
@@ -474,6 +495,13 @@ var ShellUserVerifier = new Lang.Class({
_getForegroundService() {
@@ -473,6 +494,13 @@ var ShellUserVerifier = new Lang.Class({
this._startService(FINGERPRINT_SERVICE_NAME);
},
+ _onChoiceListQuery: function(client, serviceName, promptMessage, list) {
+ _onChoiceListQuery(client, serviceName, promptMessage, list) {
+ if (!this.serviceIsForeground(serviceName))
+ return;
+
+ this.emit('show-choice-list', serviceName, promptMessage, list.deep_unpack());
+ },
+
_onInfo: function(client, serviceName, info) {
_onInfo(client, serviceName, info) {
if (this.serviceIsForeground(serviceName)) {
this._queueMessage(info, MessageType.INFO);
diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js
index baead5a6f..d525959c5 100644
index 1adaf417e..b5272be20 100644
--- a/js/ui/unlockDialog.js
+++ b/js/ui/unlockDialog.js
@@ -51,7 +51,14 @@ var UnlockDialog = new Lang.Class({
@ -259,9 +258,9 @@ index baead5a6f..d525959c5 100644 @@ -259,9 +258,9 @@ index baead5a6f..d525959c5 100644
+ }
+
+ this._authPrompt = new AuthPrompt.AuthPrompt(this._gdmClient, AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
this._authPrompt.connect('failed', Lang.bind(this, this._fail));
this._authPrompt.connect('cancelled', Lang.bind(this, this._fail));
this._authPrompt.connect('reset', Lang.bind(this, this._onReset));
this._authPrompt.connect('failed', this._fail.bind(this));
this._authPrompt.connect('cancelled', this._fail.bind(this));
this._authPrompt.connect('reset', this._onReset.bind(this));
--
2.14.2
2.17.1


111
SOURCES/allow-timed-login-with-no-user-list.patch

@ -1,45 +1,38 @@ @@ -1,45 +1,38 @@
From fb872747e5697098c87e97bab13c4095b653053b Mon Sep 17 00:00:00 2001
From 10a47a23aab29d805a4e87ef181d4141d5500707 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Tue, 19 Apr 2016 13:12:46 -0400
Subject: [PATCH] loginDialog: allow timed login with disabled user list

---
data/theme/gnome-shell-high-contrast.css | 3 +++
data/theme/gnome-shell.css | 3 +++
js/gdm/authPrompt.js | 41 ++++++++++++++++++++++++++++++++
js/gdm/loginDialog.js | 29 +++++++++++++++++++---
4 files changed, 73 insertions(+), 3 deletions(-)

diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css
index e7b94624a..364725de3 100644
--- a/data/theme/gnome-shell-high-contrast.css
+++ b/data/theme/gnome-shell-high-contrast.css
@@ -1716,6 +1716,9 @@ StScrollBar {
padding-bottom: 12px;
spacing: 8px;
width: 23em; }
+ .login-dialog-prompt-layout .login-dialog-timed-login-indicator {
+ height: 2px;
+ background-color: #8b8b8b; }
At the moment the timed login feature is implemented in the user list.
If there's no user list, we don't show the indicator anywhere and
don't proceed with timed login.

.login-dialog-prompt-label {
color: #bebeb6;
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index c1207dcd5..5d754a2bb 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -1716,6 +1716,9 @@ StScrollBar {
This commit allows timed login to work when the user list is disabled.
It accomplishes this by putting the timed login indicator on the
auth prompt, in that scenario.
---
data/theme/gnome-shell-sass/_common.scss | 4 +++
js/gdm/authPrompt.js | 40 ++++++++++++++++++++++++
js/gdm/loginDialog.js | 28 +++++++++++++++--
3 files changed, 70 insertions(+), 2 deletions(-)

diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss
index 2f05098df..4e82ef58b 100644
--- a/data/theme/gnome-shell-sass/_common.scss
+++ b/data/theme/gnome-shell-sass/_common.scss
@@ -1825,6 +1825,10 @@ StScrollBar {
padding-bottom: 12px;
spacing: 8px;
width: 23em; }
+ .login-dialog-prompt-layout .login-dialog-timed-login-indicator {
width: 23em;
+ .login-dialog-timed-login-indicator {
+ height: 2px;
+ background-color: #8b8b8b; }
+ background-color: darken($fg_color,40%);
+ }
}
.login-dialog-prompt-label {
color: #bebeb6;
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 9affbdd5f..366f34687 100644
index 89cef4d5d..e44281117 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -2,6 +2,7 @@
@ -50,7 +43,7 @@ index 9affbdd5f..366f34687 100644 @@ -50,7 +43,7 @@ index 9affbdd5f..366f34687 100644
const Lang = imports.lang;
const Pango = imports.gi.Pango;
const Signals = imports.signals;
@@ -119,6 +120,11 @@ var AuthPrompt = new Lang.Class({
@@ -117,6 +118,11 @@ var AuthPrompt = new Lang.Class({
this._entry.grab_key_focus();
@ -62,20 +55,19 @@ index 9affbdd5f..366f34687 100644 @@ -62,20 +55,19 @@ index 9affbdd5f..366f34687 100644
this._message = new St.Label({ opacity: 0,
styleClass: 'login-dialog-message' });
this._message.clutter_text.line_wrap = true;
@@ -144,6 +150,41 @@ var AuthPrompt = new Lang.Class({
@@ -142,6 +148,40 @@ var AuthPrompt = new Lang.Class({
this._defaultButtonWell.add_child(this._spinner.actor);
},
+ showTimedLoginIndicator: function(time) {
+ showTimedLoginIndicator(time) {
+ let hold = new Batch.Hold();
+
+ this.hideTimedLoginIndicator();
+
+ let startTime = GLib.get_monotonic_time();
+
+ this._timedLoginTimeoutId = GLib.timeout_add (GLib.PRIORITY_DEFAULT,
+ 33,
+ Lang.bind(this, function() {
+ this._timedLoginTimeoutId = GLib.timeout_add (GLib.PRIORITY_DEFAULT, 33,
+ () => {
+ let currentTime = GLib.get_monotonic_time();
+ let elapsedTime = (currentTime - startTime) / GLib.USEC_PER_SEC;
+ this._timedLoginIndicator.scale_x = elapsedTime / time;
@ -86,14 +78,14 @@ index 9affbdd5f..366f34687 100644 @@ -86,14 +78,14 @@ index 9affbdd5f..366f34687 100644
+ }
+
+ return GLib.SOURCE_CONTINUE;
+ }));
+ });
+
+ GLib.Source.set_name_by_id(this._timedLoginTimeoutId, '[gnome-shell] this._timedLoginTimeoutId');
+
+ return hold;
+ },
+
+ hideTimedLoginIndicator: function() {
+ hideTimedLoginIndicator() {
+ if (this._timedLoginTimeoutId) {
+ GLib.source_remove(this._timedLoginTimeoutId);
+ this._timedLoginTimeoutId = 0;
@ -101,14 +93,14 @@ index 9affbdd5f..366f34687 100644 @@ -101,14 +93,14 @@ index 9affbdd5f..366f34687 100644
+ this._timedLoginIndicator.scale_x = 0.;
+ },
+
_onDestroy: function() {
_onDestroy() {
if (this._preemptiveAnswerWatchId) {
this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId);
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index c1262b1e8..6f6de00da 100644
index 4a93545af..65d9edf1a 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -756,6 +756,9 @@ var LoginDialog = new Lang.Class({
@@ -738,6 +738,9 @@ var LoginDialog = new Lang.Class({
if (this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
this._authPrompt.reset();
@ -118,61 +110,52 @@ index c1262b1e8..6f6de00da 100644 @@ -118,61 +110,52 @@ index c1262b1e8..6f6de00da 100644
}
},
@@ -1014,6 +1017,9 @@ var LoginDialog = new Lang.Class({
@@ -1019,17 +1022,33 @@ var LoginDialog = new Lang.Class({
},
_showTimedLoginAnimation: function() {
+ if (this._disableUserList) {
+ return this._authPrompt.showTimedLoginIndicator(this._timedLoginAnimationTime);
+ }
this._timedLoginItem.actor.grab_key_focus();
return this._timedLoginItem.showTimedLoginIndicator(this._timedLoginAnimationTime);
},
@@ -1041,19 +1047,31 @@ var LoginDialog = new Lang.Class({
},
_startTimedLogin: function(userName, delay) {
_startTimedLogin(userName, delay) {
+ this._timedLoginUserName = userName;
this._timedLoginItem = null;
this._timedLoginDelay = delay;
this._timedLoginAnimationTime = delay;
-
let tasks = [function() {
- return this._waitForItemForUser(userName);
- let tasks = [() => this._waitForItemForUser(userName),
+ let tasks = [() => {
+ if (this._disableUserList)
+ return;
+
+ this._timedLoginUserListHold = this._waitForItemForUser(userName);
+
+ return this._timedLoginUserListHold;
},
+ },
function() {
() => {
+ this._timedLoginUserListHold = null;
+
+ if (this._disableUserList)
+ return;
+
this._timedLoginItem = this._userList.getItemFromUserName(userName);
},
function() {
() => {
+ if (this._disableUserList)
+ return;
+
// If we're just starting out, start on the right
// item.
if (!this._userManager.is_loaded) {
@@ -1064,6 +1082,9 @@ var LoginDialog = new Lang.Class({
@@ -1040,6 +1059,9 @@ var LoginDialog = new Lang.Class({
this._blockTimedLoginUntilIdle,
function() {
() => {
+ if (this._disableUserList)
+ return;
+
this._userList.scrollToItem(this._timedLoginItem);
},
@@ -1088,7 +1109,9 @@ var LoginDialog = new Lang.Class({
@@ -1064,7 +1086,9 @@ var LoginDialog = new Lang.Class({
if (this._timedLoginItem)
this._timedLoginItem.hideTimedLoginIndicator();
@ -184,5 +167,5 @@ index c1262b1e8..6f6de00da 100644 @@ -184,5 +167,5 @@ index c1262b1e8..6f6de00da 100644
if (userName)
this._startTimedLogin(userName, this._timedLoginDelay);
--
2.14.2
2.17.1


49
SOURCES/disable-unlock-entry-until-question.patch

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
From f941682d22a0e6f40e1109df8043291398783ff4 Mon Sep 17 00:00:00 2001
From 6a698c70044709e53f1a517165360037c070770d Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 30 Sep 2015 12:51:24 -0400
Subject: [PATCH 1/3] authPrompt: don't fade out auth messages if user types
@ -12,23 +12,23 @@ front, before a password is asked. @@ -12,23 +12,23 @@ front, before a password is asked.
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index a436431be..dedf39f99 100644
index 481cd3a77..0ad3d2338 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -185,7 +185,7 @@ var AuthPrompt = new Lang.Class({
@@ -176,7 +176,7 @@ var AuthPrompt = new Lang.Class({
this._updateNextButtonSensitivity(this._entry.text.length > 0);
this._entry.clutter_text.connect('text-changed',
Lang.bind(this, function() {
this._entry.clutter_text.connect('text-changed', () => {
- if (!this._userVerifier.hasPendingMessages)
+ if (!this._userVerifier.hasPendingMessages && this._queryingService && !this._preemptiveAnswer)
this._fadeOutMessage();
this._updateNextButtonSensitivity(this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING);
--
2.14.2
1.8.3.1


From 7b83ebcdc1d667438de5a0f41cb7b194b2792d1f Mon Sep 17 00:00:00 2001
From 867988ad707dfc7a7e2bae2ead774bc7369add8c Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 30 Sep 2015 14:36:33 -0400
Subject: [PATCH 2/3] authPrompt: don't spin unless answering question
@ -38,12 +38,12 @@ Subject: [PATCH 2/3] authPrompt: don't spin unless answering question @@ -38,12 +38,12 @@ Subject: [PATCH 2/3] authPrompt: don't spin unless answering question
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index dedf39f99..b3ff91789 100644
index 0ad3d2338..f18ef41f2 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -66,8 +66,8 @@ var AuthPrompt = new Lang.Class({
this.connect('next', Lang.bind(this, function() {
this.connect('next', () => {
this.updateSensitivity(false);
- this.startSpinning();
if (this._queryingService) {
@ -52,10 +52,10 @@ index dedf39f99..b3ff91789 100644 @@ -52,10 +52,10 @@ index dedf39f99..b3ff91789 100644
} else {
this._preemptiveAnswer = this._entry.text;
--
2.14.2
1.8.3.1


From 76e455916f6411c695f4528bffbb49c5832ec568 Mon Sep 17 00:00:00 2001
From bcbb4c2044344a6ab4fda5975478b8bee07e01f5 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 5 Oct 2015 15:26:18 -0400
Subject: [PATCH 3/3] authPrompt: stop accepting preemptive answer if user
@ -69,11 +69,11 @@ Typing ahead the password is just a convenience for users who don't @@ -69,11 +69,11 @@ Typing ahead the password is just a convenience for users who don't
want to manually lift the shift before typing their passwords, after
all.
---
js/gdm/authPrompt.js | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
js/gdm/authPrompt.js | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)

diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index b3ff91789..9affbdd5f 100644
index f18ef41f2..89cef4d5d 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -10,6 +10,7 @@ const St = imports.gi.St;
@ -103,12 +103,12 @@ index b3ff91789..9affbdd5f 100644 @@ -103,12 +103,12 @@ index b3ff91789..9affbdd5f 100644
+ this._preemptiveAnswerWatchId = 0;
+ }
}
}));
});
@@ -137,6 +145,11 @@ var AuthPrompt = new Lang.Class({
@@ -135,6 +143,11 @@ var AuthPrompt = new Lang.Class({
},
_onDestroy: function() {
_onDestroy() {
+ if (this._preemptiveAnswerWatchId) {
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId);
+ this._preemptiveAnswerWatchId = 0;
@ -117,10 +117,10 @@ index b3ff91789..9affbdd5f 100644 @@ -117,10 +117,10 @@ index b3ff91789..9affbdd5f 100644
this._userVerifier.destroy();
this._userVerifier = null;
},
@@ -358,6 +371,11 @@ var AuthPrompt = new Lang.Class({
@@ -349,6 +362,11 @@ var AuthPrompt = new Lang.Class({
},
setQuestion: function(question) {
setQuestion(question) {
+ if (this._preemptiveAnswerWatchId) {
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId);
+ this._preemptiveAnswerWatchId = 0;
@ -129,11 +129,11 @@ index b3ff91789..9affbdd5f 100644 @@ -129,11 +129,11 @@ index b3ff91789..9affbdd5f 100644
this._label.set_text(question);
this._label.show();
@@ -443,12 +461,32 @@ var AuthPrompt = new Lang.Class({
@@ -434,12 +452,31 @@ var AuthPrompt = new Lang.Class({
}
},
+ _onUserStoppedTypePreemptiveAnswer: function() {
+ _onUserStoppedTypePreemptiveAnswer() {
+ if (!this._preemptiveAnswerWatchId ||
+ this._preemptiveAnswer ||
+ this._queryingService)
@ -146,7 +146,7 @@ index b3ff91789..9affbdd5f 100644 @@ -146,7 +146,7 @@ index b3ff91789..9affbdd5f 100644
+ this.updateSensitivity(false);
+ },
+
reset: function() {
reset() {
let oldStatus = this.verificationStatus;
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
this.cancelButton.reactive = true;
@ -156,12 +156,11 @@ index b3ff91789..9affbdd5f 100644 @@ -156,12 +156,11 @@ index b3ff91789..9affbdd5f 100644
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId);
+ }
+ this._preemptiveAnswerWatchId = this._idleMonitor.add_idle_watch (500,
+ Lang.bind(this,
+ this._onUserStoppedTypePreemptiveAnswer));
+ this._onUserStoppedTypePreemptiveAnswer.bind(this));
+
if (this._userVerifier)
this._userVerifier.cancel();
--
2.14.2
1.8.3.1


30
SOURCES/enforce-smartcard-at-unlock.patch

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
From 59b6d50061f3c8e5858230a881267014e8395594 Mon Sep 17 00:00:00 2001
From b675ef2be8b5938b036714cbe42e9653b348227b Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 28 Sep 2015 10:57:02 -0400
Subject: [PATCH 1/3] smartcardManager: add way to detect if user logged using
@ -16,10 +16,10 @@ This commit adds the necessary api to detect that case. @@ -16,10 +16,10 @@ This commit adds the necessary api to detect that case.
1 file changed, 7 insertions(+)

diff --git a/js/misc/smartcardManager.js b/js/misc/smartcardManager.js
index 4388f286d..75e9836e9 100644
index 60808b371..503f78836 100644
--- a/js/misc/smartcardManager.js
+++ b/js/misc/smartcardManager.js
@@ -113,6 +113,13 @@ var SmartcardManager = new Lang.Class({
@@ -112,6 +112,13 @@ var SmartcardManager = new Lang.Class({
return false;
return true;
@ -34,10 +34,10 @@ index 4388f286d..75e9836e9 100644 @@ -34,10 +34,10 @@ index 4388f286d..75e9836e9 100644
});
--
2.14.2
1.8.3.1


From b25d32c8fef60dec567f05e6681214a6995656fc Mon Sep 17 00:00:00 2001
From 8af02156a99145ebfb5cea9488b78495e25002b8 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 28 Sep 2015 19:56:53 -0400
Subject: [PATCH 2/3] gdm: only unlock with smartcard, if smartcard used for
@ -50,13 +50,13 @@ gets used for unlock, too. @@ -50,13 +50,13 @@ gets used for unlock, too.
1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/js/gdm/util.js b/js/gdm/util.js
index bae46bfe0..a44184c17 100644
index 261e1e433..3d6d69c10 100644
--- a/js/gdm/util.js
+++ b/js/gdm/util.js
@@ -134,7 +134,6 @@ var ShellUserVerifier = new Lang.Class({
this._settings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed',
Lang.bind(this, this._updateDefaultService));
this._updateDefaultService.bind(this));
- this._updateDefaultService();
this._fprintManager = Fprint.FprintManager();
@ -68,12 +68,12 @@ index bae46bfe0..a44184c17 100644 @@ -68,12 +68,12 @@ index bae46bfe0..a44184c17 100644
+ this._updateDefaultService();
+
this._smartcardInsertedId = this._smartcardManager.connect('smartcard-inserted',
Lang.bind(this, this._checkForSmartcard));
this._checkForSmartcard.bind(this));
this._smartcardRemovedId = this._smartcardManager.connect('smartcard-removed',
@@ -413,7 +414,9 @@ var ShellUserVerifier = new Lang.Class({
@@ -412,7 +413,9 @@ var ShellUserVerifier = new Lang.Class({
},
_updateDefaultService: function() {
_updateDefaultService() {
- if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY))
+ if (this._smartcardManager.loggedInWithToken())
+ this._defaultService = SMARTCARD_SERVICE_NAME;
@ -82,10 +82,10 @@ index bae46bfe0..a44184c17 100644 @@ -82,10 +82,10 @@ index bae46bfe0..a44184c17 100644
else if (this._settings.get_boolean(SMARTCARD_AUTHENTICATION_KEY))
this._defaultService = SMARTCARD_SERVICE_NAME;
--
2.14.2
1.8.3.1


From 3309c476c6815e03f17359155f565118a2ad57b2 Mon Sep 17 00:00:00 2001
From 49557edf36b817e33fb9f008f88e28a805b7665b Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 28 Sep 2015 19:57:36 -0400
Subject: [PATCH 3/3] gdm: update default service when smartcard inserted
@ -98,10 +98,10 @@ after we get a smartcard insertion event. @@ -98,10 +98,10 @@ after we get a smartcard insertion event.
1 file changed, 2 insertions(+)

diff --git a/js/gdm/util.js b/js/gdm/util.js
index a44184c17..83a12fb6c 100644
index 3d6d69c10..f5f9d5e5d 100644
--- a/js/gdm/util.js
+++ b/js/gdm/util.js
@@ -336,6 +336,8 @@ var ShellUserVerifier = new Lang.Class({
@@ -335,6 +335,8 @@ var ShellUserVerifier = new Lang.Class({
else if (this._preemptingService == SMARTCARD_SERVICE_NAME)
this._preemptingService = null;
@ -111,5 +111,5 @@ index a44184c17..83a12fb6c 100644 @@ -111,5 +111,5 @@ index a44184c17..83a12fb6c 100644
}
},
--
2.14.2
1.8.3.1


265
SOURCES/gnome-shell-python3.patch

@ -0,0 +1,265 @@ @@ -0,0 +1,265 @@
From 5e252bd9d9c64cae3ef153338dfdd7638c4cd9e5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 14 Jun 2018 17:11:30 +0200
Subject: [PATCH] build: Revert Python3 port

This is mostly a revert of commit be3c3c64c1, with slight adjustments
due to the build system switch.
---
meson.build | 2 +-
src/gnome-shell-extension-tool.in | 40 +++++++++++++++---------------
src/gnome-shell-perf-tool.in | 41 ++++++++++++++++---------------
3 files changed, 42 insertions(+), 41 deletions(-)

diff --git a/meson.build b/meson.build
index 978ed6506..663a4d06f 100644
--- a/meson.build
+++ b/meson.build
@@ -137,7 +137,7 @@ if get_option('man')
endif
mutter_typelibdir = mutter_dep.get_pkgconfig_variable('typelibdir')
-python = find_program('python3')
+python = find_program('python2')
sassc = find_program('sassc')
cc = meson.get_compiler('c')
diff --git a/src/gnome-shell-extension-tool.in b/src/gnome-shell-extension-tool.in
index f6c37629c..ab9c951ba 100755
--- a/src/gnome-shell-extension-tool.in
+++ b/src/gnome-shell-extension-tool.in
@@ -14,7 +14,7 @@ except ImportError:
try:
import simplejson as json
except ImportError:
- print('The Python simplejson module is required')
+ print 'The Python simplejson module is required'
sys.exit(1)
from gi.repository import Gio, GLib
@@ -88,36 +88,36 @@ function disable() {
}
def create_extension():
- print()
- print('''Name should be a very short (ideally descriptive) string.
+ print
+ print '''Name should be a very short (ideally descriptive) string.
Examples are: "Click To Focus", "Adblock", "Shell Window Shrinker".
-''')
- name = input('Name: ').strip()
- print()
- print('''Description is a single-sentence explanation of what your extension does.
+'''
+ name = raw_input('Name: ').strip()
+ print
+ print '''Description is a single-sentence explanation of what your extension does.
Examples are: "Make windows visible on click", "Block advertisement popups"
"Animate windows shrinking on minimize"
-''')
- description = input('Description: ').strip()
+'''
+ description = raw_input('Description: ').strip()
underifier = re.compile('[^A-Za-z]')
sample_uuid = underifier.sub('_', name)
# TODO use evolution data server
hostname = socket.gethostname()
sample_uuid = sample_uuid + '@' + hostname
- print()
- print('''Uuid is a globally-unique identifier for your extension.
+ print
+ print '''Uuid is a globally-unique identifier for your extension.
This should be in the format of an email address (foo.bar@extensions.example.com), but
need not be an actual email address, though it's a good idea to base the uuid on your
email address. For example, if your email address is janedoe@example.com, you might
-use an extension title clicktofocus@janedoe.example.com.''')
- uuid = input('Uuid [%s]: ' % (sample_uuid, )).strip()
+use an extension title clicktofocus@janedoe.example.com.'''
+ uuid = raw_input('Uuid [%s]: ' % (sample_uuid, )).strip()
if uuid == '':
uuid = sample_uuid
extension_path = os.path.join(os.path.expanduser('~/.local'), 'share', 'gnome-shell', 'extensions', uuid)
if os.path.exists(extension_path):
- print("Extension path %r already exists" % (extension_path, ))
+ print "Extension path %r already exists" % (extension_path, )
sys.exit(0)
os.makedirs(extension_path)
meta = { 'name': name,
@@ -132,13 +132,13 @@ use an extension title clicktofocus@janedoe.example.com.''')
f.write(json.write(meta) + '\n')
f.close()
- for filename, contents in SAMPLE_EXTENSION_FILES.items():
+ for filename, contents in SAMPLE_EXTENSION_FILES.iteritems():
path = os.path.join(extension_path, filename)
f = open(path, 'w')
f.write(contents)
f.close()
- print("Created extension in %r" % (extension_path, ))
+ print "Created extension in %r" % (extension_path, )
extensionjs_path = os.path.join(extension_path, 'extension.js')
subprocess.Popen(['xdg-open', extensionjs_path])
@@ -149,19 +149,19 @@ def enable_extension(uuid):
extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY)
if uuid in extensions:
- print("%r is already enabled." % (uuid,), file=sys.stderr)
+ print >> sys.stderr, "%r is already enabled." % (uuid,)
sys.exit(1)
extensions.append(uuid)
settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions)
- print("%r is now enabled." % (uuid,), file=sys.stderr)
+ print >> sys.stderr, "%r is now enabled." % (uuid,)
def disable_extension(uuid):
settings = Gio.Settings(schema='org.gnome.shell')
extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY)
if uuid not in extensions:
- print("%r is not enabled or installed." % (uuid,), file=sys.stderr)
+ print >> sys.stderr, "%r is not enabled or installed." % (uuid,)
sys.exit(1)
# Use a while loop here to remove *all* mentions instances
@@ -170,7 +170,7 @@ def disable_extension(uuid):
extensions.remove(uuid)
settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions)
- print("%r is now disabled." % (uuid,), file=sys.stderr)
+ print >> sys.stderr, "%r is now disabled." % (uuid,)
def reload_extension(uuid):
settings = Gio.Settings(schema='org.gnome.shell')
diff --git a/src/gnome-shell-perf-tool.in b/src/gnome-shell-perf-tool.in
index b2a4521a3..55bfdf39f 100755
--- a/src/gnome-shell-perf-tool.in
+++ b/src/gnome-shell-perf-tool.in
@@ -14,14 +14,15 @@ import subprocess
import sys
import tempfile
import base64
-from configparser import RawConfigParser
+from ConfigParser import RawConfigParser
import hashlib
import hmac
-from http import client
-from urllib import parse
+import httplib
+import urlparse
+import urllib
def show_version(option, opt_str, value, parser):
- print("GNOME Shell Performance Test @VERSION@")
+ print "GNOME Shell Performance Test @VERSION@"
sys.exit()
def wait_for_dbus_name(wait_name):
@@ -40,7 +41,7 @@ def wait_for_dbus_name(wait_name):
None)
def on_timeout():
- print("\nFailed to start %s: timed out" % (wait_name,))
+ print "\nFailed to start %s: timed out" % (wait_name,)
sys.exit(1)
GLib.timeout_add_seconds(7, on_timeout)
@@ -130,15 +131,15 @@ def upload_performance_report(report_text):
base_url = config.get('upload', 'url')
system_name = config.get('upload', 'name')
secret_key = config.get('upload', 'key')
- except Exception as e:
- print("Can't read upload configuration from %s: %s" % (config_file, str(e)))
+ except Exception, e:
+ print "Can't read upload configuration from %s: %s" % (config_file, str(e))
sys.exit(1)
# Determine host, port and upload URL from provided data, we're
# a bit extra-careful about normalization since the URL is part
# of the signature.
- split = parse.urlsplit(base_url)
+ split = urlparse.urlsplit(base_url)
scheme = split[0].lower()
netloc = split[1]
base_path = split[2]
@@ -150,7 +151,7 @@ def upload_performance_report(report_text):
host, port = m.group(1), None
if scheme != "http":
- print("'%s' is not a HTTP URL" % base_url)
+ print "'%s' is not a HTTP URL" % base_url
sys.exit(1)
if port is None:
@@ -165,7 +166,7 @@ def upload_performance_report(report_text):
normalized_base = "%s://%s:%d%s" % (scheme, host, port, base_path)
upload_url = normalized_base + '/system/%s/upload' % system_name
- upload_path = parse.urlsplit(upload_url)[2] # path portion
+ upload_path = urlparse.urlsplit(upload_url)[2] # path portion
# Create signature based on upload URL and the report data
@@ -173,7 +174,7 @@ def upload_performance_report(report_text):
h = hmac.new(secret_key, digestmod=hashlib.sha1)
h.update(signature_data)
h.update(report_text)
- signature = parse.quote(base64.b64encode(h.digest()), "~")
+ signature = urllib.quote(base64.b64encode(h.digest()), "~")
headers = {
'User-Agent': 'gnome-shell-performance-tool/@VERSION@',
@@ -181,15 +182,15 @@ def upload_performance_report(report_text):
'X-Shell-Signature': 'HMAC-SHA1 ' + signature
};
- connection = client.HTTPConnection(host, port)
+ connection = httplib.HTTPConnection(host, port)
connection.request('POST', upload_path, report_text, headers)
response = connection.getresponse()
if response.status == 200:
- print("Performance report upload succeeded")
+ print "Performance report upload succeeded"
else:
- print("Performance report upload failed with status %d" % response.status)
- print(response.read())
+ print "Performance report upload failed with status %d" % response.status
+ print response.read()
def gnome_hwtest_log(*args):
command = ['gnome-hwtest-log', '-t', 'gnome-shell-perf-tool']
@@ -206,7 +207,7 @@ def run_performance_test():
start_perf_helper()
- for i in range(0, iters):
+ for i in xrange(0, iters):
# We create an empty temporary file that the shell will overwrite
# with the contents.
handle, output_file = tempfile.mkstemp(".json", "gnome-shell-perf.")
@@ -305,12 +306,12 @@ def run_performance_test():
gnome_hwtest_log('--finished')
else:
# Write a human readable summary
- print('------------------------------------------------------------')
+ print '------------------------------------------------------------';
for metric in sorted(metric_summaries.keys()):
summary = metric_summaries[metric]
- print("#", summary['description'])
- print(metric, ", ".join((str(x) for x in summary['values'])))
- print('------------------------------------------------------------')
+ print "#", summary['description']
+ print metric, ", ".join((str(x) for x in summary['values']))
+ print '------------------------------------------------------------';
return True
--
2.17.1

182
SPECS/gnome-shell.spec

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
Name: gnome-shell
Version: 3.26.2
Release: 5%{?dist}
Version: 3.28.3
Release: 6%{?dist}
Summary: Window management and application launching for GNOME

Group: User Interface/Desktops
@ -8,23 +8,19 @@ License: GPLv2+ @@ -8,23 +8,19 @@ License: GPLv2+
Provides: desktop-notification-daemon
URL: https://wiki.gnome.org/Projects/GnomeShell
#VCS: git:git://git.gnome.org/gnome-shell
Source0: http://download.gnome.org/sources/gnome-shell/3.26/%{name}-%{version}.tar.xz
Source0: http://download.gnome.org/sources/gnome-shell/3.28/%{name}-%{version}.tar.xz
Source1: org.gnome.shell.gschema.override
Source2: https://github.com/sass/sassc/archive/3.4.1.tar.gz
Source3: https://github.com/sass/libsass/archive/3.4.5.tar.gz

# Replace Epiphany with Firefox in the default favourite apps list
Patch1: gnome-shell-favourite-apps-firefox.patch
Patch2: gnome-shell-favourite-apps-yelp.patch
Patch3: gnome-shell-favourite-apps-terminal.patch

# el7 build fixes
Patch5: 0001-Revert-build-Drop-autotools-support.patch
Patch6: 0002-Revert-build-Remove-included-Makefiles-as-well.patch
Patch7: 0003-build-Remove-check-for-missing-disthook.patch
Patch8: 0004-Revert-build-Use-new-mkenums_simple-function.patch
# Fix the build with Python 2
Patch4: gnome-shell-python3.patch

# GDM/Lock stuff
Patch10: 0001-gdm-honor-timed-login-delay-even-if-animations-disab.patch
Patch11: 0001-gdm-use-password-authentication-if-all-schemes-are-d.patch
Patch12: 0001-screenShield-unblank-when-inserting-smartcard.patch
Patch13: enforce-smartcard-at-unlock.patch
Patch14: disable-unlock-entry-until-question.patch
@ -33,60 +29,59 @@ Patch16: 0001-data-install-process-working.svg-to-filesystem.patch @@ -33,60 +29,59 @@ Patch16: 0001-data-install-process-working.svg-to-filesystem.patch
Patch17: 0001-loginDialog-make-info-messages-themed.patch
Patch18: 0001-gdm-add-AuthList-control.patch
Patch19: 0002-gdmUtil-enable-support-for-GDM-s-ChoiceList-PAM-exte.patch
Patch20: 0001-loginDialog-only-emit-session-activated-on-user-acti.patch

# Misc.
Patch30: 0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch
Patch31: 0001-extensions-Add-a-SESSION_MODE-extension-type.patch
Patch32: 0001-magnifier-don-t-spew-to-console-when-focus-moves-aro.patch
Patch33: 0001-extensionSystem-Notify-about-extension-issues-on-upd.patch
Patch34: 0001-panel-add-an-icon-to-the-ActivitiesButton.patch
Patch35: 0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch
Patch36: 0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch
Patch37: 0001-global-Allow-overriding-the-override-schema.patch
Patch38: 0001-system-don-t-throw-an-exception-if-power-off-disable.patch
Patch39: 0001-padOsd-Ensure-to-pick-pad-devices-only.patch
Patch39: 0001-appDisplay-Show-full-app-name-on-hover.patch

%define gnome_bluetooth_version 1:3.9.0
%define gobject_introspection_version 1.45.4
%define gjs_version 1.47.0
%define mutter_version 3.25.90
%define gtk3_version 3.15.0
%define eds_version 3.13.90
# Backported from upstream
Patch50: 0001-keyboard-Handle-no-window-case-in-FocusTracker.patch

Patch51: 0001-keyboard-Listen-to-IbusPanelService-focus-in-out-to-.patch

%define libcroco_version 0.6.8
%define eds_version 3.17.2
%define gnome_desktop_version 3.7.90
%define glib2_version 2.56.0
%define gobject_introspection_version 1.49.1
%define gjs_version 1.51.90
%define gtk3_version 3.15.0
%define json_glib_version 0.13.2
%define mutter_version 3.28.0
%define polkit_version 0.100
%define gsettings_desktop_schemas_version 3.21.3
%define caribou_version 0.4.8
%define libcroco_version 0.6.8
%define telepathy_logger_version 0.2.6
%define ibus_version 1.5.2
%define gnome_bluetooth_version 1:3.9.0
%define gstreamer_version 1.4.5

## Needed when we re-autogen
BuildRequires: autoconf >= 2.53
BuildRequires: automake >= 1.10
BuildRequires: gettext-devel
BuildRequires: meson
BuildRequires: git
BuildRequires: gnome-common >= 2.2.0
BuildRequires: libtool >= 1.4.3
BuildRequires: caribou-devel >= %{caribou_version}
BuildRequires: ibus-devel >= %{ibus_version}
BuildRequires: chrpath
BuildRequires: dbus-glib-devel
BuildRequires: desktop-file-utils
BuildRequires: evolution-data-server-devel >= %{eds_version}
BuildRequires: gcr-devel
BuildRequires: gjs-devel >= %{gjs_version}
BuildRequires: glib2-devel
BuildRequires: glib2-devel >= %{glib2_version}
BuildRequires: gobject-introspection >= %{gobject_introspection_version}
BuildRequires: json-glib-devel >= %{json_glib_version}
BuildRequires: upower-devel
BuildRequires: libgnome-keyring-devel
BuildRequires: libnm-gtk-devel
BuildRequires: mesa-libGL-devel
BuildRequires: NetworkManager-glib-devel
BuildRequires: polkit-devel
BuildRequires: NetworkManager-libnm-devel
BuildRequires: pkgconfig(libsystemd)
BuildRequires: polkit-devel >= %{polkit_version}
BuildRequires: startup-notification-devel
BuildRequires: telepathy-glib-devel
BuildRequires: telepathy-logger-devel >= %{telepathy_logger_version}
# for theme generation
BuildRequires: ruby
# for screencast recorder functionality
BuildRequires: gstreamer1-devel >= %{gstreamer_version}
BuildRequires: gtk3-devel >= %{gtk3_version}
@ -110,34 +105,39 @@ BuildRequires: gnome-bluetooth-libs-devel >= %{gnome_bluetooth_version} @@ -110,34 +105,39 @@ BuildRequires: gnome-bluetooth-libs-devel >= %{gnome_bluetooth_version}
%endif
BuildRequires: control-center
# Bootstrap requirements
BuildRequires: gtk-doc gnome-common
BuildRequires: gtk-doc
%ifnarch s390 s390x
Requires: gnome-bluetooth%{?_isa} >= %{gnome_bluetooth_version}
%endif
Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version}
%if 0%{?fedora}
# Disabled on RHEL to allow logging into KDE session by default
Requires: gnome-session-xsession
%endif
# wrapper script uses to restart old GNOME session if run --replace
# from the command line
Requires: gobject-introspection%{?_isa} >= %{gobject_introspection_version}
Requires: gjs%{?_isa} >= %{gjs_version}
Requires: gtk3%{?_isa} >= %{gtk3_version}
Requires: libnma%{?_isa}
# needed for loading SVG's via gdk-pixbuf
Requires: librsvg2%{?_isa}
# needed as it is now split from Clutter
Requires: json-glib%{?_isa} >= %{json_glib_version}
# For $libdir/mozilla/plugins
Requires: mozilla-filesystem%{?_isa}
Requires: mutter%{?_isa} >= %{mutter_version}
Requires: upower%{?_isa}
Requires: polkit%{?_isa} >= 0.100
Requires: polkit%{?_isa} >= %{polkit_version}
Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version}
Requires: glib2%{?_isa} >= %{glib2_version}
Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version}
Requires: libcroco%{?_isa} >= %{libcroco_version}
Requires: telepathy-logger%{?_isa} >= %{telepathy_logger_version}
Requires: telepathy-logger%{?_isa}
Requires: telepathy-glib%{?_isa}
Requires: gstreamer1%{?_isa} >= %{gstreamer_version}
# needed for schemas
Requires: at-spi2-atk%{?_isa}
# needed for on-screen keyboard
Requires: caribou%{?_isa} >= %{caribou_version}
Requires: ibus%{?_isa} >= %{ibus_version}
# needed for the user menu
Requires: accountsservice-libs%{?_isa}
Requires: gdm-libs%{?_isa}
@ -154,6 +154,23 @@ Requires: python3%{_isa} @@ -154,6 +154,23 @@ Requires: python3%{_isa}
# needed for clocks/weather integration
Requires: geoclue2-libs%{?_isa}
Requires: libgweather%{?_isa}
# Needed for launching flatpak apps etc
Requires: xdg-desktop-portal-gtk

%if 0%{?rhel}
# In Fedora, fedora-obsolete-packages obsoletes caribou
Obsoletes: caribou < 0.4.21-10
Obsoletes: caribou-antler < 0.4.21-10
Obsoletes: caribou-devel < 0.4.21-10
Obsoletes: caribou-gtk2-module < 0.4.21-10
Obsoletes: caribou-gtk3-module < 0.4.21-10
Obsoletes: python-caribou < 0.4.21-10
Obsoletes: python2-caribou < 0.4.21-10
Obsoletes: python3-caribou < 0.4.21-10

# Removed in RHEL 7.6
Obsoletes: gnome-shell-browser-plugin < 3.28.3-4
%endif

%description
GNOME Shell provides core user interface functions for the GNOME 3 desktop,
@ -162,34 +179,26 @@ advantage of the capabilities of modern graphics hardware and introduces @@ -162,34 +179,26 @@ advantage of the capabilities of modern graphics hardware and introduces
innovative user interface concepts to provide a visually attractive and
easy to use experience.

%package browser-plugin
Summary: Browser plugin to install extensions from extensions.gnome.org
Requires: %{name} = %{version}-%{release}
Requires: mozilla-filesystem%{?_isa}

%description browser-plugin
The "GNOME Shell Integration" plugin provides integration with
Gnome Shell for live extension enabling and disabling. It can
be used only by extensions.gnome.org.

%prep
%setup -q -n libsass-3.4.5 -b3 -T
%setup -q -n sassc-3.4.1 -b2 -T
%autosetup -S git

%build
%if 0%{?rhel}
# Use Python 2
sed -i -e 's/AM_PATH_PYTHON(\[3\])/AM_PATH_PYTHON([2.5])/' configure.ac
autoreconf -fi
%endif

(if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; fi;
%configure --disable-static --disable-compile-warnings)
make V=1 %{?_smp_mflags}
(cd ../libsass-3.4.5;
export LIBSASS_VERSION=3.4.5
make %{?_smp_mflags})
(cd ../sassc-3.4.1;
%make_build LDFLAGS="$RPM_OPT_FLAGS $PWD/../libsass-3.4.5/lib/libsass.a" \
CFLAGS="$RPM_OPT_FLAGS -I$PWD/../libsass-3.4.5/include" \
CXXFLAGS="$RPM_OPT_FLAGS" \
SASS_LIBSASS_PATH=$PWD/../libsass-3.4.5)
export PATH=$PWD/../sassc-3.4.1/bin:$PATH
%meson -Dbrowser_plugin=false
%meson_build

%install
%make_install

rm -rf %{buildroot}/%{_libdir}/mozilla/plugins/*.la
%meson_install

# Create empty directories where other packages can drop extensions
mkdir -p %{buildroot}%{_datadir}/gnome-shell/extensions
@ -224,9 +233,7 @@ glib-compile-schemas --allow-any-name %{_datadir}/glib-2.0/schemas &> /dev/null @@ -224,9 +233,7 @@ glib-compile-schemas --allow-any-name %{_datadir}/glib-2.0/schemas &> /dev/null
%{_datadir}/applications/evolution-calendar.desktop
%{_datadir}/applications/org.gnome.Shell.PortalHelper.desktop
%{_datadir}/gnome-control-center/keybindings/50-gnome-shell-system.xml
%{_datadir}/gnome-shell
%{_datadir}/gnome-shell/theme
%{_datadir}/gnome-shell/theme/*.svg
%{_datadir}/gnome-shell/
%{_datadir}/dbus-1/services/org.gnome.Shell.CalendarServer.service
%{_datadir}/dbus-1/services/org.gnome.Shell.HotplugSniffer.service
%{_datadir}/dbus-1/services/org.gnome.Shell.PortalHelper.service
@ -250,13 +257,44 @@ glib-compile-schemas --allow-any-name %{_datadir}/glib-2.0/schemas &> /dev/null @@ -250,13 +257,44 @@ glib-compile-schemas --allow-any-name %{_datadir}/glib-2.0/schemas &> /dev/null
%dir %{_datadir}/GConf/gsettings
%{_datadir}/GConf/gsettings/gnome-shell-overrides.convert
%{_mandir}/man1/%{name}.1.gz
# exclude as these should be in a devel package for st etc
%exclude %{_datadir}/gtk-doc

%files browser-plugin
%{_libdir}/mozilla/plugins/*.so

%changelog
* Wed Sep 19 2018 Carlos Garnacho <cgarnach@redhat.com> - 3.28.3-6
- Track IBus focus for X11 OSK
- Resolves: #1625700

* Thu Sep 13 2018 Kalev Lember <klember@redhat.com> - 3.28.3-5
- Require xdg-desktop-portal-gtk
- Related: #1570030

* Mon Sep 10 2018 Kalev Lember <klember@redhat.com> - 3.28.3-4
- Remove gnome-shell-browser-plugin subpackage
- Resolves: #1626104

* Mon Sep 10 2018 Kalev Lember <klember@redhat.com> - 3.28.3-3
- Obsolete caribou
- Resolves: #1625882

* Tue Sep 04 2018 Kalev Lember <klember@redhat.com> - 3.28.3-2
- keyboard: Handle no-window case in FocusTracker
- Resolves: #1612983

* Wed Aug 01 2018 Kalev Lember <klember@redhat.com> - 3.28.3-1
- Update to 3.28.3
- Resolves: #1568624

* Fri Jun 22 2018 Florian Müllner <fmuellner@redhat.com> - 3.28.2-2
- Update rebased downstream patches
Related: #1568624
- Revert port to python3 of some utility tools
Resolves: #1493526
- Add tooltips to app names in overview
Resolves: #1541180

* Tue May 08 2018 Florian Müllner <fmuellner@redhat.com> - 3.28.2-1
- Update to 3.28.2
- Resolves: #1568624

* Wed Feb 14 2018 Ray Strode <rstrode@redhat.com> - 3.26.2-5
- Make session selection bullet isn't shown on wrong item
Resolves: #1527145

Loading…
Cancel
Save