guibuilder_pel7x64builder0
7 years ago
30 changed files with 5469 additions and 8 deletions
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
From 4104864c0e6e9e39e09353d86a67668109abe272 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> |
||||
Date: Wed, 20 May 2015 16:44:00 +0200 |
||||
Subject: [PATCH] app: Fall back to window title instead of WM_CLASS |
||||
|
||||
It's a bad fallback as it's clearly window-specific (rather than |
||||
app-specific), but it likely looks prettier when we fail to associate |
||||
a .desktop file ... |
||||
--- |
||||
src/shell-app.c | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/src/shell-app.c b/src/shell-app.c |
||||
index dbf537ce9..84fcc97bf 100644 |
||||
--- a/src/shell-app.c |
||||
+++ b/src/shell-app.c |
||||
@@ -265,7 +265,7 @@ shell_app_get_name (ShellApp *app) |
||||
const char *name = NULL; |
||||
|
||||
if (window) |
||||
- name = meta_window_get_wm_class (window); |
||||
+ name = meta_window_get_title (window); |
||||
if (!name) |
||||
name = C_("program", "Unknown"); |
||||
return name; |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
From fa1ec00431d9c0b1592e1b7c56784ef8d8c26a98 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 |
||||
|
||||
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 |
||||
+ |
||||
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 $< |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,69 @@
@@ -0,0 +1,69 @@
|
||||
From b3132648a9a15b9c151bde6733cb0c252dac6a25 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> |
||||
Date: Mon, 21 Sep 2015 20:18:12 +0200 |
||||
Subject: [PATCH] extensionSystem: Notify about extension issues on update |
||||
|
||||
--- |
||||
js/ui/extensionSystem.js | 32 ++++++++++++++++++++++++++++++++ |
||||
1 file changed, 32 insertions(+) |
||||
|
||||
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js |
||||
index c2a11b8a5..5e78618c4 100644 |
||||
--- a/js/ui/extensionSystem.js |
||||
+++ b/js/ui/extensionSystem.js |
||||
@@ -7,6 +7,7 @@ const GLib = imports.gi.GLib; |
||||
const Gio = imports.gi.Gio; |
||||
const St = imports.gi.St; |
||||
|
||||
+const Config = imports.misc.config; |
||||
const ExtensionUtils = imports.misc.extensionUtils; |
||||
const Main = imports.ui.main; |
||||
|
||||
@@ -306,6 +307,36 @@ function _onVersionValidationChanged() { |
||||
} |
||||
} |
||||
|
||||
+function _doUpdateCheck() { |
||||
+ let version = Config.PACKAGE_VERSION.split('.'); |
||||
+ if (parseInt(version[1]) % 2 == 0) |
||||
+ version.pop(); |
||||
+ |
||||
+ let pkgCacheDir = GLib.get_user_cache_dir() + '/gnome-shell/'; |
||||
+ let updateStamp = Gio.file_new_for_path(pkgCacheDir + |
||||
+ 'update-check-' + version.join('.')); |
||||
+ if (updateStamp.query_exists(null)) |
||||
+ return; |
||||
+ |
||||
+ GLib.mkdir_with_parents (pkgCacheDir, 0o755); |
||||
+ updateStamp.create(0, null).close(null); |
||||
+ |
||||
+ let nOutdated = enabledExtensions.reduce(function(n, uuid) { |
||||
+ let extension = ExtensionUtils.extensions[uuid]; |
||||
+ if (extension && extension.state == ExtensionState.OUT_OF_DATE) |
||||
+ n++; |
||||
+ return n; |
||||
+ }, 0); |
||||
+ |
||||
+ if (nOutdated == 0) |
||||
+ return; |
||||
+ |
||||
+ Main.notify(ngettext("%d extension is out of date", |
||||
+ "%d extensions are out of date", |
||||
+ nOutdated).format(nOutdated), |
||||
+ _("You can visit http://extensions.gnome.org for updates")); |
||||
+} |
||||
+ |
||||
function _loadExtensions() { |
||||
global.settings.connect('changed::' + ENABLED_EXTENSIONS_KEY, onEnabledExtensionsChanged); |
||||
global.settings.connect('changed::' + DISABLE_USER_EXTENSIONS_KEY, onEnabledExtensionsChanged); |
||||
@@ -320,6 +351,7 @@ function _loadExtensions() { |
||||
extension.type = ExtensionUtils.ExtensionType.SESSION_MODE; |
||||
}); |
||||
finder.scanExtensions(); |
||||
+ _doUpdateCheck(); |
||||
} |
||||
|
||||
function enableAllExtensions() { |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
From 446b7a65536ea60b75f1ec705cd8fa287fda968e 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 |
||||
|
||||
This allows e.g. gnome-tweak-tool to present these extensions in a |
||||
different way since they can't be disabled. |
||||
--- |
||||
js/misc/extensionUtils.js | 3 ++- |
||||
js/ui/extensionSystem.js | 2 ++ |
||||
2 files changed, 4 insertions(+), 1 deletion(-) |
||||
|
||||
diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js |
||||
index ca02582c9..3eea38565 100644 |
||||
--- a/js/misc/extensionUtils.js |
||||
+++ b/js/misc/extensionUtils.js |
||||
@@ -13,7 +13,8 @@ const FileUtils = imports.misc.fileUtils; |
||||
|
||||
var ExtensionType = { |
||||
SYSTEM: 1, |
||||
- PER_USER: 2 |
||||
+ PER_USER: 2, |
||||
+ SESSION_MODE: 3 |
||||
}; |
||||
|
||||
// Maps uuid -> metadata object |
||||
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js |
||||
index 51ce234c2..c2a11b8a5 100644 |
||||
--- a/js/ui/extensionSystem.js |
||||
+++ b/js/ui/extensionSystem.js |
||||
@@ -316,6 +316,8 @@ function _loadExtensions() { |
||||
let finder = new ExtensionUtils.ExtensionFinder(); |
||||
finder.connect('extension-found', function(finder, extension) { |
||||
loadExtension(extension); |
||||
+ if (Main.sessionMode.enabledExtensions.indexOf(extension.uuid) != -1) |
||||
+ extension.type = ExtensionUtils.ExtensionType.SESSION_MODE; |
||||
}); |
||||
finder.scanExtensions(); |
||||
} |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,240 @@
@@ -0,0 +1,240 @@
|
||||
From 356171d85579d27da3180fd78ffb353f23c9073f 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 |
||||
|
||||
Ultimately, we want to add support for GDM's new ChoiceList |
||||
PAM extension. That extension allows PAM modules to present |
||||
a list of choices to the user. Before we can support that |
||||
extension, however, we need to have a list control in the |
||||
login-screen/unlock screen. This commit adds that control. |
||||
|
||||
For the most part, it's a copy-and-paste of the gdm userlist, |
||||
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/js-resources.gresource.xml | 1 + |
||||
2 files changed, 199 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 |
||||
--- /dev/null |
||||
+++ b/js/gdm/authList.js |
||||
@@ -0,0 +1,198 @@ |
||||
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- |
||||
+/* |
||||
+ * Copyright 2017 Red Hat, Inc |
||||
+ * |
||||
+ * This program is free software; you can redistribute it and/or modify |
||||
+ * it under the terms of the GNU General Public License as published by |
||||
+ * the Free Software Foundation; either version 2, or (at your option) |
||||
+ * any later version. |
||||
+ * |
||||
+ * This program is distributed in the hope that it will be useful, |
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
+ * GNU General Public License for more details. |
||||
+ * |
||||
+ * You should have received a copy of the GNU General Public License |
||||
+ * along with this program; if not, see <http://www.gnu.org/licenses/>. |
||||
+ */ |
||||
+ |
||||
+const Clutter = imports.gi.Clutter; |
||||
+const GObject = imports.gi.GObject; |
||||
+const Gtk = imports.gi.Gtk; |
||||
+const Lang = imports.lang; |
||||
+const Meta = imports.gi.Meta; |
||||
+const Signals = imports.signals; |
||||
+const St = imports.gi.St; |
||||
+ |
||||
+const Tweener = imports.ui.tweener; |
||||
+ |
||||
+const _SCROLL_ANIMATION_TIME = 0.5; |
||||
+ |
||||
+const AuthListItem = new Lang.Class({ |
||||
+ Name: 'AuthListItem', |
||||
+ |
||||
+ _init: function(key, text) { |
||||
+ this.key = key; |
||||
+ let label = new St.Label({ style_class: 'auth-list-item-label', |
||||
+ y_align: Clutter.ActorAlign.CENTER }); |
||||
+ label.text = text; |
||||
+ |
||||
+ this.actor = new St.Button({ style_class: 'login-dialog-user-list-item', |
||||
+ button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE, |
||||
+ can_focus: true, |
||||
+ child: label, |
||||
+ reactive: true, |
||||
+ x_align: St.Align.START, |
||||
+ x_fill: true }); |
||||
+ |
||||
+ this.actor.connect('key-focus-in', () => { |
||||
+ this._setSelected(true); |
||||
+ }); |
||||
+ this.actor.connect('key-focus-out', () => { |
||||
+ this._setSelected(false); |
||||
+ }); |
||||
+ this.actor.connect('notify::hover', () => { |
||||
+ this._setSelected(this.actor.hover); |
||||
+ }); |
||||
+ |
||||
+ this.actor.connect('clicked', Lang.bind(this, this._onClicked)); |
||||
+ }, |
||||
+ |
||||
+ _onClicked: function() { |
||||
+ this.emit('activate'); |
||||
+ }, |
||||
+ |
||||
+ _setSelected: function(selected) { |
||||
+ if (selected) { |
||||
+ this.actor.add_style_pseudo_class('selected'); |
||||
+ this.actor.grab_key_focus(); |
||||
+ } else { |
||||
+ this.actor.remove_style_pseudo_class('selected'); |
||||
+ } |
||||
+ } |
||||
+}); |
||||
+Signals.addSignalMethods(AuthListItem.prototype); |
||||
+ |
||||
+const AuthList = new Lang.Class({ |
||||
+ Name: 'AuthList', |
||||
+ |
||||
+ _init: function() { |
||||
+ this.actor = new St.BoxLayout({ vertical: true, |
||||
+ style_class: 'login-dialog-auth-list-layout' }); |
||||
+ |
||||
+ this.label = new St.Label({ style_class: 'prompt-dialog-headline' }); |
||||
+ this.actor.add_actor(this.label); |
||||
+ |
||||
+ this._scrollView = new St.ScrollView({ style_class: 'login-dialog-user-list-view'}); |
||||
+ this._scrollView.set_policy(Gtk.PolicyType.NEVER, |
||||
+ Gtk.PolicyType.AUTOMATIC); |
||||
+ this.actor.add_actor(this._scrollView); |
||||
+ |
||||
+ this._box = new St.BoxLayout({ vertical: true, |
||||
+ style_class: 'login-dialog-user-list', |
||||
+ pseudo_class: 'expanded' }); |
||||
+ |
||||
+ this._scrollView.add_actor(this._box); |
||||
+ this._items = {}; |
||||
+ |
||||
+ this.actor.connect('key-focus-in', Lang.bind(this, this._moveFocusToItems)); |
||||
+ }, |
||||
+ |
||||
+ _moveFocusToItems: function() { |
||||
+ let hasItems = Object.keys(this._items).length > 0; |
||||
+ |
||||
+ if (!hasItems) |
||||
+ return; |
||||
+ |
||||
+ if (global.stage.get_key_focus() != this.actor) |
||||
+ return; |
||||
+ |
||||
+ 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() { |
||||
+ this._moveFocusToItems(); |
||||
+ return false; |
||||
+ })); |
||||
+ } |
||||
+ }, |
||||
+ |
||||
+ _onItemActivated: function(activatedItem) { |
||||
+ this.emit('activate', activatedItem.key); |
||||
+ }, |
||||
+ |
||||
+ scrollToItem: function(item) { |
||||
+ let box = item.actor.get_allocation_box(); |
||||
+ |
||||
+ let adjustment = this._scrollView.get_vscroll_bar().get_adjustment(); |
||||
+ |
||||
+ let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0); |
||||
+ Tweener.removeTweens(adjustment); |
||||
+ Tweener.addTween (adjustment, |
||||
+ { value: value, |
||||
+ time: _SCROLL_ANIMATION_TIME, |
||||
+ transition: 'easeOutQuad' }); |
||||
+ }, |
||||
+ |
||||
+ jumpToItem: function(item) { |
||||
+ let box = item.actor.get_allocation_box(); |
||||
+ |
||||
+ let adjustment = this._scrollView.get_vscroll_bar().get_adjustment(); |
||||
+ |
||||
+ let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0); |
||||
+ |
||||
+ adjustment.set_value(value); |
||||
+ }, |
||||
+ |
||||
+ getItem: function(key) { |
||||
+ let item = this._items[key]; |
||||
+ |
||||
+ if (!item) |
||||
+ return null; |
||||
+ |
||||
+ return item; |
||||
+ }, |
||||
+ |
||||
+ addItem: function(key, text) { |
||||
+ this.removeItem(key); |
||||
+ |
||||
+ let item = new AuthListItem(key, text); |
||||
+ this._box.add(item.actor, { x_fill: true }); |
||||
+ |
||||
+ this._items[key] = item; |
||||
+ |
||||
+ item.connect('activate', |
||||
+ Lang.bind(this, this._onItemActivated)); |
||||
+ |
||||
+ // Try to keep the focused item front-and-center |
||||
+ item.actor.connect('key-focus-in', |
||||
+ Lang.bind(this, |
||||
+ function() { |
||||
+ this.scrollToItem(item); |
||||
+ })); |
||||
+ |
||||
+ this._moveFocusToItems(); |
||||
+ |
||||
+ this.emit('item-added', item); |
||||
+ }, |
||||
+ |
||||
+ removeItem: function(key) { |
||||
+ let item = this._items[key]; |
||||
+ |
||||
+ if (!item) |
||||
+ return; |
||||
+ |
||||
+ item.actor.destroy(); |
||||
+ delete this._items[key]; |
||||
+ }, |
||||
+ |
||||
+ numItems: function() { |
||||
+ return Object.keys(this._items).length; |
||||
+ }, |
||||
+ |
||||
+ clear: function() { |
||||
+ this.label.text = ""; |
||||
+ this._box.destroy_all_children(); |
||||
+ this._items = {}; |
||||
+ } |
||||
+}); |
||||
+Signals.addSignalMethods(AuthList.prototype); |
||||
diff --git a/js/js-resources.gresource.xml b/js/js-resources.gresource.xml |
||||
index 7a5c8ca6f..c0a80f564 100644 |
||||
--- a/js/js-resources.gresource.xml |
||||
+++ b/js/js-resources.gresource.xml |
||||
@@ -1,6 +1,7 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<gresources> |
||||
<gresource prefix="/org/gnome/shell"> |
||||
+ <file>gdm/authList.js</file> |
||||
<file>gdm/authPrompt.js</file> |
||||
<file>gdm/batch.js</file> |
||||
<file>gdm/fingerprint.js</file> |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,71 @@
@@ -0,0 +1,71 @@
|
||||
From 7f2d3668cf8c7a6b8aaab2c52f7e67ab01e5ba4d Mon Sep 17 00:00:00 2001 |
||||
From: Ray Strode <rstrode@redhat.com> |
||||
Date: Tue, 18 Aug 2015 12:02:17 -0400 |
||||
Subject: [PATCH] gdm: honor timed login delay even if animations disabled |
||||
|
||||
gnome-shell currently initiates an automatic login attempt if |
||||
timed login is enabled and the timed login animation completes. |
||||
|
||||
Unfortunately, if animations are disabled (as is the case for |
||||
virtual machines) then the timed login animation will complete |
||||
instantly, and timed login will proceed immediately after gnome-shell |
||||
has noticed the user is idle for 5 seconds. |
||||
|
||||
This commit addresses that problem by initiating timed login and the |
||||
animation from a main loop timeout, instead of using the tweener api. |
||||
--- |
||||
js/gdm/loginDialog.js | 37 +++++++++++++++++++++++++++---------- |
||||
1 file changed, 27 insertions(+), 10 deletions(-) |
||||
|
||||
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js |
||||
index 1cae3db85..c1262b1e8 100644 |
||||
--- a/js/gdm/loginDialog.js |
||||
+++ b/js/gdm/loginDialog.js |
||||
@@ -126,20 +126,34 @@ var UserListItem = new Lang.Class({ |
||||
let hold = new Batch.Hold(); |
||||
|
||||
this.hideTimedLoginIndicator(); |
||||
- Tweener.addTween(this._timedLoginIndicator, |
||||
- { scale_x: 1., |
||||
- time: time, |
||||
- transition: 'linear', |
||||
- onComplete: function() { |
||||
- hold.release(); |
||||
- }, |
||||
- onCompleteScope: this |
||||
- }); |
||||
+ |
||||
+ let startTime = GLib.get_monotonic_time(); |
||||
+ |
||||
+ this._timedLoginTimeoutId = GLib.timeout_add (GLib.PRIORITY_DEFAULT, |
||||
+ 33, |
||||
+ Lang.bind(this, function() { |
||||
+ let currentTime = GLib.get_monotonic_time(); |
||||
+ let elapsedTime = (currentTime - startTime) / GLib.USEC_PER_SEC; |
||||
+ this._timedLoginIndicator.scale_x = elapsedTime / time; |
||||
+ if (elapsedTime >= time) { |
||||
+ this._timedLoginTimeoutId = 0; |
||||
+ hold.release(); |
||||
+ return GLib.SOURCE_REMOVE; |
||||
+ } |
||||
+ |
||||
+ return GLib.SOURCE_CONTINUE; |
||||
+ })); |
||||
+ |
||||
+ GLib.Source.set_name_by_id(this._timedLoginTimeoutId, '[gnome-shell] this._timedLoginTimeoutId'); |
||||
+ |
||||
return hold; |
||||
}, |
||||
|
||||
hideTimedLoginIndicator: function() { |
||||
- Tweener.removeTweens(this._timedLoginIndicator); |
||||
+ if (this._timedLoginTimeoutId) { |
||||
+ GLib.source_remove(this._timedLoginTimeoutId); |
||||
+ this._timedLoginTimeoutId = 0; |
||||
+ } |
||||
this._timedLoginIndicator.scale_x = 0.; |
||||
} |
||||
}); |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
From 345ddfb8456eb3fe8e32ab55d4d3a746d15ae4e0 Mon Sep 17 00:00:00 2001 |
||||
From: Ray Strode <rstrode@redhat.com> |
||||
Date: Wed, 1 Jul 2015 11:18:44 -0400 |
||||
Subject: [PATCH] gdm: use password authentication if all schemes are disabled |
||||
|
||||
This prevents a traceback, at least. |
||||
--- |
||||
js/gdm/util.js | 5 +++++ |
||||
1 file changed, 5 insertions(+) |
||||
|
||||
diff --git a/js/gdm/util.js b/js/gdm/util.js |
||||
index b594da4fd..bae46bfe0 100644 |
||||
--- a/js/gdm/util.js |
||||
+++ b/js/gdm/util.js |
||||
@@ -419,6 +419,11 @@ var ShellUserVerifier = new Lang.Class({ |
||||
this._defaultService = SMARTCARD_SERVICE_NAME; |
||||
else if (this._haveFingerprintReader) |
||||
this._defaultService = FINGERPRINT_SERVICE_NAME; |
||||
+ |
||||
+ if (!this._defaultService) { |
||||
+ log("no authentication service is enabled, using password authentication"); |
||||
+ this._defaultService = PASSWORD_SERVICE_NAME; |
||||
+ } |
||||
}, |
||||
|
||||
_startService: function(serviceName) { |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,115 @@
@@ -0,0 +1,115 @@
|
||||
From c2a8239044f350a6548e0e8314b4f40b49a726b2 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 |
||||
Subject: [PATCH] global: Allow overriding the override schema |
||||
|
||||
--- |
||||
src/main.c | 11 ++++++++++- |
||||
src/shell-global.c | 20 +++++++++++++++++++- |
||||
2 files changed, 29 insertions(+), 2 deletions(-) |
||||
|
||||
diff --git a/src/main.c b/src/main.c |
||||
index 9a89aa4d6..085399b68 100644 |
||||
--- a/src/main.c |
||||
+++ b/src/main.c |
||||
@@ -39,6 +39,7 @@ extern GType gnome_shell_plugin_get_type (void); |
||||
static gboolean is_gdm_mode = FALSE; |
||||
static char *session_mode = NULL; |
||||
static int caught_signal = 0; |
||||
+static char *override_schema = NULL; |
||||
|
||||
#define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1 |
||||
#define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4 |
||||
@@ -455,6 +456,12 @@ GOptionEntry gnome_shell_options[] = { |
||||
N_("List possible modes"), |
||||
NULL |
||||
}, |
||||
+ { |
||||
+ "override-schema", 0, 0, G_OPTION_ARG_STRING, |
||||
+ &override_schema, |
||||
+ N_("Override the override schema"), |
||||
+ "SCHEMA" |
||||
+ }, |
||||
{ NULL } |
||||
}; |
||||
|
||||
@@ -512,7 +519,9 @@ main (int argc, char **argv) |
||||
if (session_mode == NULL) |
||||
session_mode = is_gdm_mode ? (char *)"gdm" : (char *)"user"; |
||||
|
||||
- _shell_global_init ("session-mode", session_mode, NULL); |
||||
+ _shell_global_init ("session-mode", session_mode, |
||||
+ "override-schema", override_schema, |
||||
+ NULL); |
||||
|
||||
shell_prefs_init (); |
||||
|
||||
diff --git a/src/shell-global.c b/src/shell-global.c |
||||
index 855f6257c..181dbb825 100644 |
||||
--- a/src/shell-global.c |
||||
+++ b/src/shell-global.c |
||||
@@ -67,6 +67,7 @@ struct _ShellGlobal { |
||||
GdkScreen *gdk_screen; |
||||
|
||||
char *session_mode; |
||||
+ char *override_schema; |
||||
|
||||
XserverRegion input_region; |
||||
|
||||
@@ -98,6 +99,7 @@ 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, |
||||
g_clear_pointer (&global->session_mode, g_free); |
||||
global->session_mode = g_ascii_strdown (g_value_get_string (value), -1); |
||||
break; |
||||
+ case PROP_OVERRIDE_SCHEMA: |
||||
+ g_clear_pointer (&global->override_schema, g_free); |
||||
+ global->override_schema = g_value_dup_string (value); |
||||
+ break; |
||||
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_SESSION_MODE: |
||||
g_value_set_string (value, shell_global_get_session_mode (global)); |
||||
break; |
||||
+ case PROP_OVERRIDE_SCHEMA: |
||||
+ g_value_set_string (value, global->override_schema); |
||||
+ break; |
||||
case PROP_SCREEN: |
||||
g_value_set_object (value, global->meta_screen); |
||||
break; |
||||
@@ -370,6 +379,13 @@ shell_global_class_init (ShellGlobalClass *klass) |
||||
g_param_spec_string ("session-mode", |
||||
"Session Mode", |
||||
"The session mode to use", |
||||
+ NULL, |
||||
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); |
||||
+ g_object_class_install_property (gobject_class, |
||||
+ PROP_OVERRIDE_SCHEMA, |
||||
+ g_param_spec_string ("override-schema", |
||||
+ "Override Schema", |
||||
+ "The override schema to use", |
||||
"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) |
||||
|
||||
if (!settings) |
||||
{ |
||||
- if (strcmp (global->session_mode, "classic") == 0) |
||||
+ if (global->override_schema != NULL) |
||||
+ schema = global->override_schema; |
||||
+ else if (strcmp (global->session_mode, "classic") == 0) |
||||
schema = "org.gnome.shell.extensions.classic-overrides"; |
||||
else if (strcmp (global->session_mode, "user") == 0) |
||||
schema = "org.gnome.shell.overrides"; |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,122 @@
@@ -0,0 +1,122 @@
|
||||
From 79975970398650a114ce3735272f18ca88b7208e Mon Sep 17 00:00:00 2001 |
||||
From: Ray Strode <rstrode@redhat.com> |
||||
Date: Thu, 13 Nov 2014 09:26:52 -0500 |
||||
Subject: [PATCH] loginDialog: only emit session-activated on user action |
||||
|
||||
Right now we emit session-activated any time the bullet |
||||
moves in the session menu. That includes at start up when |
||||
picking an item arbitrarily, and any time GDM reports the |
||||
session was read from the user's account settings. |
||||
|
||||
session-activated informs GDM about the newly selected session, |
||||
so emitting it in response to GDM reporting a session is a |
||||
bad idea (it's not only pointless, but it can least to |
||||
oscillations) |
||||
|
||||
This commit changes the code to only emit session-activated when |
||||
the user explicitly activates a session item from the gear menu. |
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=740142 |
||||
--- |
||||
js/gdm/loginDialog.js | 6 +----- |
||||
1 file changed, 1 insertion(+), 5 deletions(-) |
||||
|
||||
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js |
||||
index 485e36506..6ea794998 100644 |
||||
--- a/js/gdm/loginDialog.js |
||||
+++ b/js/gdm/loginDialog.js |
||||
@@ -353,90 +353,86 @@ var SessionMenuButton = new Lang.Class({ |
||||
this._menu.toggle(); |
||||
})); |
||||
|
||||
this._items = {}; |
||||
this._activeSessionId = null; |
||||
this._populate(); |
||||
}, |
||||
|
||||
updateSensitivity: function(sensitive) { |
||||
this._button.reactive = sensitive; |
||||
this._button.can_focus = sensitive; |
||||
this._menu.close(BoxPointer.PopupAnimation.NONE); |
||||
}, |
||||
|
||||
_updateOrnament: function() { |
||||
let itemIds = Object.keys(this._items); |
||||
for (let i = 0; i < itemIds.length; i++) { |
||||
if (itemIds[i] == this._activeSessionId) |
||||
this._items[itemIds[i]].setOrnament(PopupMenu.Ornament.DOT); |
||||
else |
||||
this._items[itemIds[i]].setOrnament(PopupMenu.Ornament.NONE); |
||||
} |
||||
}, |
||||
|
||||
setActiveSession: function(sessionId) { |
||||
if (sessionId == this._activeSessionId) |
||||
return; |
||||
|
||||
this._activeSessionId = sessionId; |
||||
this._updateOrnament(); |
||||
- |
||||
- this.emit('session-activated', this._activeSessionId); |
||||
}, |
||||
|
||||
close: function() { |
||||
this._menu.close(); |
||||
}, |
||||
|
||||
_populate: function() { |
||||
let ids = Gdm.get_session_ids(); |
||||
ids.sort(); |
||||
|
||||
if (ids.length <= 1) { |
||||
this._button.hide(); |
||||
return; |
||||
} |
||||
|
||||
for (let i = 0; i < ids.length; i++) { |
||||
let [sessionName, sessionDescription] = Gdm.get_session_name_and_description(ids[i]); |
||||
|
||||
let id = ids[i]; |
||||
let item = new PopupMenu.PopupMenuItem(sessionName); |
||||
this._menu.addMenuItem(item); |
||||
this._items[id] = item; |
||||
|
||||
- if (!this._activeSessionId) |
||||
- this.setActiveSession(id); |
||||
- |
||||
item.connect('activate', Lang.bind(this, function() { |
||||
this.setActiveSession(id); |
||||
+ this.emit('session-activated', this._activeSessionId); |
||||
})); |
||||
} |
||||
} |
||||
}); |
||||
Signals.addSignalMethods(SessionMenuButton.prototype); |
||||
|
||||
var LoginDialog = new Lang.Class({ |
||||
Name: 'LoginDialog', |
||||
|
||||
_init: function(parentActor) { |
||||
this.actor = new Shell.GenericContainer({ style_class: 'login-dialog', |
||||
visible: false }); |
||||
this.actor.get_accessible().set_role(Atk.Role.WINDOW); |
||||
|
||||
this.actor.add_constraint(new Layout.MonitorConstraint({ primary: true })); |
||||
this.actor.connect('allocate', Lang.bind(this, this._onAllocate)); |
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); |
||||
parentActor.add_child(this.actor); |
||||
|
||||
this._userManager = AccountsService.UserManager.get_default() |
||||
this._gdmClient = new Gdm.Client(); |
||||
|
||||
try { |
||||
this._gdmClient.set_enabled_extensions([Gdm.UserVerifierChoiceList.interface_info().name]); |
||||
} catch(e) { |
||||
} |
||||
|
||||
this._settings = new Gio.Settings({ schema_id: GdmUtil.LOGIN_SCREEN_SCHEMA }); |
||||
|
||||
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY, |
||||
-- |
||||
2.14.3 |
||||
|
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
From 3ec91d51350bce7a139baf009f659008eb046fc8 Mon Sep 17 00:00:00 2001 |
||||
From: Ray Strode <rstrode@redhat.com> |
||||
Date: Tue, 15 Sep 2015 14:04:07 -0400 |
||||
Subject: [PATCH] magnifier: don't spew to console when focus moves around |
||||
|
||||
We currently ship at-spi2 2.8 in 7.2 but gnome-shell 3.14 which |
||||
depends on function names shipped in later versions of at-spi2. |
||||
|
||||
This commit works around the problem by using the names of the functions, |
||||
as they existed in 2.8. |
||||
--- |
||||
js/ui/magnifier.js | 16 ++++++++++++++-- |
||||
1 file changed, 14 insertions(+), 2 deletions(-) |
||||
|
||||
diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js |
||||
index 4e91155a5..68b24e1c2 100644 |
||||
--- a/js/ui/magnifier.js |
||||
+++ b/js/ui/magnifier.js |
||||
@@ -724,7 +724,13 @@ var ZoomRegion = new Lang.Class({ |
||||
}, |
||||
|
||||
_updateFocus: function(caller, event) { |
||||
- let component = event.source.get_component_iface(); |
||||
+ let component; |
||||
+ |
||||
+ if (typeof event.source.get_component_iface === 'function') |
||||
+ component = event.source.get_component_iface(); |
||||
+ else if (typeof event.source.get_component === 'function') |
||||
+ component = event.source.get_component(); |
||||
+ |
||||
if (!component || event.detail1 != 1) |
||||
return; |
||||
let extents; |
||||
@@ -741,7 +747,13 @@ var ZoomRegion = new Lang.Class({ |
||||
}, |
||||
|
||||
_updateCaret: function(caller, event) { |
||||
- let text = event.source.get_text_iface(); |
||||
+ let text; |
||||
+ |
||||
+ if (typeof event.source.get_text_iface === 'function') |
||||
+ text = event.source.get_text_iface(); |
||||
+ else if (typeof event.source.get_text === 'function') |
||||
+ text = event.source.get_text(); |
||||
+ |
||||
if (!text) |
||||
return; |
||||
let extents; |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
From 0d9c742127f4a79416478b46a9fa5273701d92e3 Mon Sep 17 00:00:00 2001 |
||||
From: Carlos Garnacho <carlosg@gnome.org> |
||||
Date: Fri, 19 Jan 2018 10:45:50 +0100 |
||||
Subject: [PATCH] padOsd: Ensure to pick pad devices only |
||||
|
||||
If the underlying X11 input driver creates multiple devices from a single |
||||
device node, we may end up picking up the wrong device. So, instead of |
||||
picking the first device based on node and bailing out if it's not a pad, |
||||
pick the first pad that has that device node, and bail out if there is |
||||
none. |
||||
|
||||
https://gitlab.gnome.org/GNOME/gnome-shell/issues/10 |
||||
|
||||
Closes: #10 |
||||
--- |
||||
js/ui/padOsd.js | 6 +++--- |
||||
1 file changed, 3 insertions(+), 3 deletions(-) |
||||
|
||||
diff --git a/js/ui/padOsd.js b/js/ui/padOsd.js |
||||
index 34ef96bb9..6e11ddfba 100644 |
||||
--- a/js/ui/padOsd.js |
||||
+++ b/js/ui/padOsd.js |
||||
@@ -977,12 +977,12 @@ var PadOsdService = new Lang.Class({ |
||||
let padDevice = null; |
||||
|
||||
devices.forEach(Lang.bind(this, function(device) { |
||||
- if (deviceNode == device.get_device_node()) |
||||
+ if (deviceNode == device.get_device_node() && |
||||
+ device.get_device_type() == Clutter.InputDeviceType.PAD_DEVICE) |
||||
padDevice = device; |
||||
})); |
||||
|
||||
- if (padDevice == null || |
||||
- padDevice.get_device_type() != Clutter.InputDeviceType.PAD_DEVICE) { |
||||
+ if (padDevice == null) { |
||||
invocation.return_error_literal(Gio.IOErrorEnum, |
||||
Gio.IOErrorEnum.CANCELLED, |
||||
"Invalid params"); |
||||
-- |
||||
2.16.1 |
||||
|
@ -0,0 +1,67 @@
@@ -0,0 +1,67 @@
|
||||
From 7196f5d0a60243e218d6a906b9db4f3b6608b47c 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 +++ |
||||
js/ui/panel.js | 9 ++++++++- |
||||
3 files changed, 14 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 { |
||||
-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/js/ui/panel.js b/js/ui/panel.js |
||||
index d7c8397b5..3ec43210e 100644 |
||||
--- a/js/ui/panel.js |
||||
+++ b/js/ui/panel.js |
||||
@@ -409,11 +409,18 @@ var ActivitiesButton = new Lang.Class({ |
||||
|
||||
this.actor.name = 'panelActivities'; |
||||
|
||||
+ let box = new St.BoxLayout(); |
||||
+ this.actor.add_actor(box); |
||||
+ let iconFile = Gio.File.new_for_path('/usr/share/icons/hicolor/scalable/apps/start-here.svg'); |
||||
+ this._icon = new St.Icon({ gicon: new Gio.FileIcon({ file: iconFile }), |
||||
+ style_class: 'panel-logo-icon' }); |
||||
+ box.add_actor(this._icon); |
||||
+ |
||||
/* Translators: If there is no suitable word for "Activities" |
||||
in your language, you can use the word for "Overview". */ |
||||
this._label = new St.Label({ text: _("Activities"), |
||||
y_align: Clutter.ActorAlign.CENTER }); |
||||
- this.actor.add_actor(this._label); |
||||
+ box.add_actor(this._label); |
||||
|
||||
this.actor.label_actor = this._label; |
||||
|
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
From 7d9fa52a96cd5698ccb4773ffb71ab23b2a22a3d 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 |
||||
|
||||
If a user inserts the smartcard when the screen is locked/blanked |
||||
we should ask them their pin right away. |
||||
|
||||
At the moment they have to wiggle the mouse or do some other |
||||
action to get the screen to unblank. |
||||
--- |
||||
js/ui/screenShield.js | 4 +++- |
||||
1 file changed, 3 insertions(+), 1 deletion(-) |
||||
|
||||
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js |
||||
index 9f3ff84ad..8d3eb43d4 100644 |
||||
--- a/js/ui/screenShield.js |
||||
+++ b/js/ui/screenShield.js |
||||
@@ -516,8 +516,10 @@ var ScreenShield = new Lang.Class({ |
||||
this._smartcardManager = SmartcardManager.getSmartcardManager(); |
||||
this._smartcardManager.connect('smartcard-inserted', |
||||
Lang.bind(this, function(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 |
||||
|
@ -0,0 +1,52 @@
@@ -0,0 +1,52 @@
|
||||
From f163645029cb5af8471d01379aa9b251e6ac2ae0 Mon Sep 17 00:00:00 2001 |
||||
From: Rui Matos <tiagomatos@gmail.com> |
||||
Date: Fri, 8 Nov 2013 11:36:04 +0100 |
||||
Subject: [PATCH] shellDBus: Add a DBus method to load a single extension |
||||
|
||||
This allows e.g. gnome-tweak-tool to install an extension from a zip |
||||
file and load it into the running shell. |
||||
--- |
||||
js/ui/shellDBus.js | 20 ++++++++++++++++++++ |
||||
1 file changed, 20 insertions(+) |
||||
|
||||
diff --git a/js/ui/shellDBus.js b/js/ui/shellDBus.js |
||||
index 3fd24d275..d9f36b281 100644 |
||||
--- a/js/ui/shellDBus.js |
||||
+++ b/js/ui/shellDBus.js |
||||
@@ -322,6 +322,10 @@ const GnomeShellExtensionsIface = '<node> \ |
||||
</method> \ |
||||
<method name="CheckForUpdates"> \ |
||||
</method> \ |
||||
+<method name="LoadUserExtension"> \ |
||||
+ <arg type="s" direction="in" name="uuid"/> \ |
||||
+ <arg type="b" direction="out" name="success"/> \ |
||||
+</method> \ |
||||
<property name="ShellVersion" type="s" access="read" /> \ |
||||
</interface> \ |
||||
</node>'; |
||||
@@ -424,6 +428,22 @@ var GnomeShellExtensions = new Lang.Class({ |
||||
ExtensionDownloader.checkForUpdates(); |
||||
}, |
||||
|
||||
+ LoadUserExtension: function(uuid) { |
||||
+ let extension = ExtensionUtils.extensions[uuid]; |
||||
+ if (extension) |
||||
+ return true; |
||||
+ |
||||
+ let dir = Gio.File.new_for_path(GLib.build_filenamev([global.userdatadir, 'extensions', uuid])); |
||||
+ try { |
||||
+ extension = ExtensionUtils.createExtensionObject(uuid, dir, ExtensionUtils.ExtensionType.PER_USER); |
||||
+ ExtensionSystem.loadExtension(extension); |
||||
+ } catch (e) { |
||||
+ log('Could not load user extension from %s'.format(dir.get_path())); |
||||
+ return false; |
||||
+ } |
||||
+ return true; |
||||
+ }, |
||||
+ |
||||
ShellVersion: Config.PACKAGE_VERSION, |
||||
|
||||
_extensionStateChanged: function(_, newState) { |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,91 @@
@@ -0,0 +1,91 @@
|
||||
From 3ff1be9fe127a51092b1f5b97d65af7fff75041d Mon Sep 17 00:00:00 2001 |
||||
From: rpm-build <rpm-build> |
||||
Date: Mon, 13 Nov 2017 14:17:18 -0500 |
||||
Subject: [PATCH] system: don't throw an exception if power off disabled |
||||
|
||||
--- |
||||
js/ui/status/system.js | 13 ++++++++----- |
||||
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 |
||||
--- 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.actor = new St.Bin(); |
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); |
||||
this.actor.connect('notify::mapped', () => { this._flipped = false; }); |
||||
}, |
||||
|
||||
_sync: function() { |
||||
let childToShow = null; |
||||
|
||||
if (this._standard.visible && this._alternate.visible) { |
||||
let [x, y, mods] = global.get_pointer(); |
||||
let altPressed = (mods & Clutter.ModifierType.MOD1_MASK) != 0; |
||||
if (this._flipped) |
||||
childToShow = altPressed ? this._standard : this._alternate; |
||||
else |
||||
childToShow = altPressed ? this._alternate : this._standard; |
||||
} else if (this._standard.visible) { |
||||
childToShow = this._standard; |
||||
} else if (this._alternate.visible) { |
||||
childToShow = this._alternate; |
||||
} |
||||
|
||||
let childShown = this.actor.get_child(); |
||||
if (childShown != childToShow) { |
||||
if (childShown) { |
||||
if (childShown.fake_release) |
||||
childShown.fake_release(); |
||||
childShown.remove_action(this._clickAction); |
||||
} |
||||
- childToShow.add_action(this._clickAction); |
||||
|
||||
- let hasFocus = this.actor.contains(global.stage.get_key_focus()); |
||||
- this.actor.set_child(childToShow); |
||||
- if (hasFocus) |
||||
- childToShow.grab_key_focus(); |
||||
+ if (childToShow) { |
||||
+ childToShow.add_action(this._clickAction); |
||||
+ |
||||
+ let hasFocus = this.actor.contains(global.stage.get_key_focus()); |
||||
+ this.actor.set_child(childToShow); |
||||
+ if (hasFocus) |
||||
+ childToShow.grab_key_focus(); |
||||
+ } |
||||
|
||||
// The actors might respond to hover, so |
||||
// sync the pointer to make sure they update. |
||||
global.sync_pointer(); |
||||
} |
||||
|
||||
this.actor.visible = (childToShow != null); |
||||
}, |
||||
|
||||
_onDestroy: function() { |
||||
if (this._capturedEventId > 0) { |
||||
global.stage.disconnect(this._capturedEventId); |
||||
this._capturedEventId = 0; |
||||
} |
||||
}, |
||||
|
||||
_onCapturedEvent: function(actor, event) { |
||||
let type = event.type(); |
||||
if (type == Clutter.EventType.KEY_PRESS || type == Clutter.EventType.KEY_RELEASE) { |
||||
let key = event.get_key_symbol(); |
||||
if (key == Clutter.KEY_Alt_L || key == Clutter.KEY_Alt_R) |
||||
this._sync(); |
||||
} |
||||
|
||||
return Clutter.EVENT_PROPAGATE; |
||||
}, |
||||
|
||||
_onLongPress: function(action, actor, state) { |
||||
if (state == Clutter.LongPressState.QUERY || |
||||
state == Clutter.LongPressState.CANCEL) |
||||
-- |
||||
2.14.3 |
||||
|
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
From 8d085a574b5b5d1055451a1b430fcf5cb9af4859 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 |
||||
workspaces |
||||
|
||||
When the titlebar context menu was moved to the shell, the submenu for |
||||
moving to a specific workspace was intentionally left out; some people |
||||
are quite attached to it though, so bring it back when static workspaces |
||||
are used. |
||||
--- |
||||
js/ui/windowMenu.js | 16 ++++++++++++++++ |
||||
1 file changed, 16 insertions(+) |
||||
|
||||
diff --git a/js/ui/windowMenu.js b/js/ui/windowMenu.js |
||||
index 7aa57beb3..8751c4c4d 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)); |
||||
})); |
||||
} |
||||
+ |
||||
+ let nWorkspaces = global.screen.n_workspaces; |
||||
+ if (nWorkspaces > 1 && !Meta.prefs_get_dynamic_workspaces()) { |
||||
+ item = new PopupMenu.PopupSubMenuMenuItem(_("Move to another workspace")); |
||||
+ this.addMenuItem(item); |
||||
+ |
||||
+ let currentIndex = global.screen.get_active_workspace_index(); |
||||
+ 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() { |
||||
+ window.change_workspace_by_index(index, false); |
||||
+ })); |
||||
+ subitem.setSensitive(currentIndex != i); |
||||
+ } |
||||
+ } |
||||
} |
||||
} |
||||
|
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,299 @@
@@ -0,0 +1,299 @@
|
||||
From 878e3442d6da7f38a872336de08defeedfcb46c4 Mon Sep 17 00:00:00 2001 |
||||
From: Olivier Fourdan <ofourdan@redhat.com> |
||||
Date: Fri, 15 Sep 2017 10:44:21 +0200 |
||||
Subject: [PATCH 2/2] Revert "build: Remove included Makefiles as well" |
||||
|
||||
This reverts commit 6d704cddea54f6398b12ac626006af9a538e2368. |
||||
--- |
||||
src/Makefile-calendar-server.am | 39 ++++++++++ |
||||
src/Makefile-hotplug-sniffer.am | 23 ++++++ |
||||
src/Makefile-st.am | 169 ++++++++++++++++++++++++++++++++++++++++ |
||||
src/Makefile-tray.am | 24 ++++++ |
||||
4 files changed, 255 insertions(+) |
||||
create mode 100644 src/Makefile-calendar-server.am |
||||
create mode 100644 src/Makefile-hotplug-sniffer.am |
||||
create mode 100644 src/Makefile-st.am |
||||
create mode 100644 src/Makefile-tray.am |
||||
|
||||
diff --git a/src/Makefile-calendar-server.am b/src/Makefile-calendar-server.am |
||||
new file mode 100644 |
||||
index 000000000..9ec04eb07 |
||||
--- /dev/null |
||||
+++ b/src/Makefile-calendar-server.am |
||||
@@ -0,0 +1,39 @@ |
||||
+service_in_files += calendar-server/org.gnome.Shell.CalendarServer.service.in |
||||
+ |
||||
+libexec_PROGRAMS += gnome-shell-calendar-server |
||||
+ |
||||
+gnome_shell_calendar_server_SOURCES = \ |
||||
+ calendar-server/calendar-debug.h \ |
||||
+ calendar-server/calendar-sources.c calendar-server/calendar-sources.h \ |
||||
+ calendar-server/gnome-shell-calendar-server.c \ |
||||
+ $(NULL) |
||||
+ |
||||
+desktopdir=$(datadir)/applications |
||||
+desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) |
||||
+desktop_in_files = calendar-server/evolution-calendar.desktop.in |
||||
+ |
||||
+%.desktop:%.desktop.in |
||||
+ @$(MKDIR_P) $(builddir)/calendar-server |
||||
+ $(AM_V_GEN) $(MSGFMT) --desktop --template $< -d $(top_srcdir)/po -o $@ |
||||
+ |
||||
+gnome_shell_calendar_server_CFLAGS = \ |
||||
+ -I$(top_srcdir)/src \ |
||||
+ -DPREFIX=\""$(prefix)"\" \ |
||||
+ -DLIBDIR=\""$(libdir)"\" \ |
||||
+ -DDATADIR=\""$(datadir)"\" \ |
||||
+ -DG_LOG_DOMAIN=\"ShellCalendarServer\" \ |
||||
+ $(CALENDAR_SERVER_CFLAGS) \ |
||||
+ $(NULL) |
||||
+ |
||||
+gnome_shell_calendar_server_LDADD = \ |
||||
+ $(CALENDAR_SERVER_LIBS) \ |
||||
+ $(NULL) |
||||
+ |
||||
+EXTRA_DIST += \ |
||||
+ calendar-server/README \ |
||||
+ calendar-server/org.gnome.Shell.CalendarServer.service.in \ |
||||
+ $(desktop_in_files) \ |
||||
+ $(NULL) |
||||
+ |
||||
+CLEANFILES += \ |
||||
+ $(desktop_DATA) |
||||
diff --git a/src/Makefile-hotplug-sniffer.am b/src/Makefile-hotplug-sniffer.am |
||||
new file mode 100644 |
||||
index 000000000..4a475c119 |
||||
--- /dev/null |
||||
+++ b/src/Makefile-hotplug-sniffer.am |
||||
@@ -0,0 +1,23 @@ |
||||
+service_in_files += hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service.in |
||||
+ |
||||
+libexec_PROGRAMS += gnome-shell-hotplug-sniffer |
||||
+ |
||||
+gnome_shell_hotplug_sniffer_SOURCES = \ |
||||
+ hotplug-sniffer/hotplug-mimetypes.h \ |
||||
+ hotplug-sniffer/shell-mime-sniffer.h \ |
||||
+ hotplug-sniffer/shell-mime-sniffer.c \ |
||||
+ hotplug-sniffer/hotplug-sniffer.c \ |
||||
+ $(NULL) |
||||
+ |
||||
+gnome_shell_hotplug_sniffer_CFLAGS = \ |
||||
+ -I$(top_srcdir)/src \ |
||||
+ $(SHELL_HOTPLUG_SNIFFER_CFLAGS) \ |
||||
+ $(NULL) |
||||
+ |
||||
+gnome_shell_hotplug_sniffer_LDFLAGS = \ |
||||
+ $(SHELL_HOTPLUG_SNIFFER_LIBS) \ |
||||
+ $(NULL) |
||||
+ |
||||
+EXTRA_DIST += \ |
||||
+ hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service.in \ |
||||
+ $(NULL) |
||||
diff --git a/src/Makefile-st.am b/src/Makefile-st.am |
||||
new file mode 100644 |
||||
index 000000000..f44598e12 |
||||
--- /dev/null |
||||
+++ b/src/Makefile-st.am |
||||
@@ -0,0 +1,169 @@ |
||||
+st_cflags = \ |
||||
+ -I$(top_srcdir)/src \ |
||||
+ -DPREFIX=\""$(prefix)"\" \ |
||||
+ -DLIBDIR=\""$(libdir)"\" \ |
||||
+ -DG_LOG_DOMAIN=\"St\" \ |
||||
+ -DST_COMPILATION \ |
||||
+ -DCLUTTER_ENABLE_EXPERIMENTAL_API \ |
||||
+ -DCOGL_ENABLE_EXPERIMENTAL_API \ |
||||
+ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ |
||||
+ $(ST_CFLAGS) \ |
||||
+ $(NULL) |
||||
+ |
||||
+st_built_sources = \ |
||||
+ st-enum-types.h \ |
||||
+ st-enum-types.c |
||||
+ |
||||
+BUILT_SOURCES += $(st_built_sources) |
||||
+ |
||||
+EXTRA_DIST += \ |
||||
+ st/test-theme.css \ |
||||
+ st/st-enum-types.h.in \ |
||||
+ st/st-enum-types.c.in |
||||
+ |
||||
+CLEANFILES += stamp-st-enum-types.h |
||||
+ |
||||
+st-enum-types.h: stamp-st-enum-types.h Makefile |
||||
+ @true |
||||
+stamp-st-enum-types.h: $(source_h) $(srcdir)/st/st-enum-types.h.in $(st_source_h) |
||||
+ $(AM_V_GEN) ( \ |
||||
+ $(GLIB_MKENUMS) \ |
||||
+ --template $(srcdir)/st/st-enum-types.h.in \ |
||||
+ $(addprefix $(srcdir)/, $(st_source_h)) ) >> $@.tmp && \ |
||||
+ (cmp -s $@.tmp st-enum-types.h || cp $@.tmp st-enum-types.h) && \ |
||||
+ rm -f $@.tmp && \ |
||||
+ echo timestamp > $(@F) |
||||
+ |
||||
+st-enum-types.c: stamp-st-enum-types.h $(srcdir)/st/st-enum-types.c.in |
||||
+ $(AM_V_GEN) ( \ |
||||
+ $(GLIB_MKENUMS) \ |
||||
+ --template $(srcdir)/st/st-enum-types.c.in \ |
||||
+ $(addprefix $(srcdir)/,$(st_source_h)) ) >> $@.tmp && \ |
||||
+ cp $@.tmp $@ && \ |
||||
+ rm -f $@.tmp |
||||
+ |
||||
+# please, keep this sorted alphabetically |
||||
+st_source_h = \ |
||||
+ st/st-adjustment.h \ |
||||
+ st/st-bin.h \ |
||||
+ st/st-border-image.h \ |
||||
+ st/st-box-layout.h \ |
||||
+ st/st-box-layout-child.h \ |
||||
+ st/st-button.h \ |
||||
+ st/st-clipboard.h \ |
||||
+ st/st-drawing-area.h \ |
||||
+ st/st-entry.h \ |
||||
+ st/st-focus-manager.h \ |
||||
+ st/st-generic-accessible.h \ |
||||
+ st/st-icon.h \ |
||||
+ st/st-icon-colors.h \ |
||||
+ st/st-im-text.h \ |
||||
+ st/st-label.h \ |
||||
+ st/st-private.h \ |
||||
+ st/st-scrollable.h \ |
||||
+ st/st-scroll-bar.h \ |
||||
+ st/st-scroll-view.h \ |
||||
+ st/st-shadow.h \ |
||||
+ st/st-texture-cache.h \ |
||||
+ st/st-theme.h \ |
||||
+ st/st-theme-context.h \ |
||||
+ st/st-theme-node.h \ |
||||
+ st/st-types.h \ |
||||
+ st/st-widget.h \ |
||||
+ st/st-widget-accessible.h \ |
||||
+ $(NULL) |
||||
+ |
||||
+st.h: stamp-st.h |
||||
+ @true |
||||
+stamp-st.h: Makefile |
||||
+ $(AM_V_GEN) (echo "#define ST_H_INSIDE 1"; \ |
||||
+ for name in $(st_source_h); do \ |
||||
+ echo "#include <"$$name">"; \ |
||||
+ done; echo "#undef ST_H_INSIDE") > $@.tmp && \ |
||||
+ (cmp -s $@.tmp st.h || cp $@.tmp st.h) && \ |
||||
+ rm -f $@.tmp && \ |
||||
+ echo timestamp > $(@F) |
||||
+ |
||||
+BUILT_SOURCES += st.h |
||||
+CLEANFILES += stamp-st.h |
||||
+ |
||||
+st-scroll-view-fade-generated.c: stamp-st-scroll-view-fade-generated.c |
||||
+ @true |
||||
+stamp-st-scroll-view-fade-generated.c: $(srcdir)/st/st-scroll-view-fade.glsl $(srcdir)/data-to-c.pl |
||||
+ $(AM_V_GEN) $(srcdir)/data-to-c.pl $(srcdir)/st/st-scroll-view-fade.glsl st_scroll_view_fade_glsl > $@.tmp && \ |
||||
+ (cmp -s $@.tmp st-scroll-view-fade-generated.c || cp $@.tmp st-scroll-view-fade-generated.c) && \ |
||||
+ rm -f $@.tmp && \ |
||||
+ echo timestamp > $(@F) |
||||
+ |
||||
+BUILT_SOURCES += st-scroll-view-fade-generated.c |
||||
+CLEANFILES += stamp-st-scroll-view-fade-generated.c |
||||
+EXTRA_DIST += \ |
||||
+ st/st-scroll-view-fade.glsl \ |
||||
+ data-to-c.pl \ |
||||
+ $(NULL) |
||||
+ |
||||
+st_source_private_h = \ |
||||
+ st/st-private.h \ |
||||
+ st/st-theme-private.h \ |
||||
+ st/st-theme-node-private.h \ |
||||
+ st/st-theme-node-transition.h |
||||
+ |
||||
+# please, keep this sorted alphabetically |
||||
+st_source_c = \ |
||||
+ st/st-adjustment.c \ |
||||
+ st/st-bin.c \ |
||||
+ st/st-border-image.c \ |
||||
+ st/st-box-layout.c \ |
||||
+ st/st-box-layout-child.c \ |
||||
+ st/st-button.c \ |
||||
+ st/st-clipboard.c \ |
||||
+ st/st-drawing-area.c \ |
||||
+ st/st-entry.c \ |
||||
+ st/st-focus-manager.c \ |
||||
+ st/st-generic-accessible.c \ |
||||
+ st/st-icon.c \ |
||||
+ st/st-icon-colors.c \ |
||||
+ st/st-im-text.c \ |
||||
+ st/st-label.c \ |
||||
+ st/st-private.c \ |
||||
+ st/st-scrollable.c \ |
||||
+ st/st-scroll-bar.c \ |
||||
+ st/st-scroll-view.c \ |
||||
+ st/st-shadow.c \ |
||||
+ st/st-texture-cache.c \ |
||||
+ st/st-theme.c \ |
||||
+ st/st-theme-context.c \ |
||||
+ st/st-theme-node.c \ |
||||
+ st/st-theme-node-drawing.c \ |
||||
+ st/st-theme-node-transition.c \ |
||||
+ st/st-widget.c \ |
||||
+ $(NULL) |
||||
+ |
||||
+st_non_gir_sources = \ |
||||
+ st/st-scroll-view-fade.c \ |
||||
+ st/st-scroll-view-fade.h \ |
||||
+ $(NULL) |
||||
+ |
||||
+noinst_LTLIBRARIES += libst-1.0.la |
||||
+ |
||||
+libst_1_0_la_LIBADD = -lm $(ST_LIBS) |
||||
+libst_1_0_la_SOURCES = \ |
||||
+ $(st_source_c) \ |
||||
+ $(st_non_gir_sources) \ |
||||
+ $(st_source_private_h) \ |
||||
+ $(st_source_private_c) \ |
||||
+ $(st_source_h) \ |
||||
+ $(NULL) |
||||
+nodist_libst_1_0_la_SOURCES = \ |
||||
+ $(st_built_sources) \ |
||||
+ st.h \ |
||||
+ $(NULL) |
||||
+libst_1_0_la_CPPFLAGS = $(st_cflags) |
||||
+libst_1_0_la_LDFLAGS = $(LDADD) |
||||
+ |
||||
+noinst_PROGRAMS += test-theme |
||||
+ |
||||
+test_theme_CPPFLAGS = $(st_cflags) |
||||
+test_theme_LDADD = libst-1.0.la |
||||
+ |
||||
+test_theme_SOURCES = st/test-theme.c |
||||
diff --git a/src/Makefile-tray.am b/src/Makefile-tray.am |
||||
new file mode 100644 |
||||
index 000000000..b814c1f7b |
||||
--- /dev/null |
||||
+++ b/src/Makefile-tray.am |
||||
@@ -0,0 +1,24 @@ |
||||
+tray_cflags = \ |
||||
+ -I$(top_srcdir)/src \ |
||||
+ -DG_LOG_DOMAIN=\"notification_area\" \ |
||||
+ $(TRAY_CFLAGS) \ |
||||
+ $(NULL) |
||||
+ |
||||
+# please, keep this sorted alphabetically |
||||
+tray_source = \ |
||||
+ tray/na-tray-child.c \ |
||||
+ tray/na-tray-child.h \ |
||||
+ tray/na-tray-manager.c \ |
||||
+ tray/na-tray-manager.h \ |
||||
+ $(NULL) |
||||
+ |
||||
+noinst_LTLIBRARIES += libtray.la |
||||
+ |
||||
+libtray_la_LIBADD = $(TRAY_LIBS) |
||||
+libtray_la_SOURCES = \ |
||||
+ $(tray_source) \ |
||||
+ $(NULL) |
||||
+libtray_la_CPPFLAGS = $(tray_cflags) |
||||
+libtray_la_LDFLAGS = $(LDADD) |
||||
+ |
||||
+CLEANFILES += $(TRAY_STAMP_FILES) $(BUILT_SOURCES) |
||||
-- |
||||
2.13.5 |
||||
|
@ -0,0 +1,267 @@
@@ -0,0 +1,267 @@
|
||||
From 1383483a7c9707c2528c5a47fd71217cf253c6ff 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 |
||||
|
||||
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 ++++++- |
||||
4 files changed, 114 insertions(+), 2 deletions(-) |
||||
|
||||
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js |
||||
index 366f34687..7f23f0087 100644 |
||||
--- a/js/gdm/authPrompt.js |
||||
+++ b/js/gdm/authPrompt.js |
||||
@@ -9,6 +9,7 @@ const Signals = imports.signals; |
||||
const St = imports.gi.St; |
||||
|
||||
const Animation = imports.ui.animation; |
||||
+const AuthList = imports.gdm.authList; |
||||
const Batch = imports.gdm.batch; |
||||
const GdmUtil = imports.gdm.util; |
||||
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.actor.add(this._timedLoginIndicator); |
||||
|
||||
+ this._authList = new AuthList.AuthList(); |
||||
+ this._authList.connect('activate', (list, key) => { |
||||
+ this._authList.actor.reactive = false; |
||||
+ Tweener.addTween(this._authList.actor, |
||||
+ { opacity: 0, |
||||
+ time: MESSAGE_FADE_OUT_ANIMATION_TIME, |
||||
+ transition: 'easeOutQuad', |
||||
+ onComplete: () => { |
||||
+ this._authList.clear(); |
||||
+ this._authList.actor.hide(); |
||||
+ this._userVerifier.selectChoice(this._queryingService, key); |
||||
+ |
||||
+ } |
||||
+ }); |
||||
+ }); |
||||
+ this._authList.actor.hide(); |
||||
+ this.actor.add(this._authList.actor, |
||||
+ { expand: true, |
||||
+ x_fill: true, |
||||
+ y_fill: false, |
||||
+ x_align: St.Align.START }); |
||||
+ |
||||
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({ |
||||
this.emit('prompted'); |
||||
}, |
||||
|
||||
+ _onShowChoiceList: function(userVerifier, serviceName, promptMessage, choiceList) { |
||||
+ if (this._queryingService) |
||||
+ this.clear(); |
||||
+ |
||||
+ this._queryingService = serviceName; |
||||
+ |
||||
+ if (this._preemptiveAnswer) |
||||
+ this._preemptiveAnswer = null; |
||||
+ |
||||
+ this.nextButton.label = _("Next"); |
||||
+ this.setChoiceList(promptMessage, choiceList); |
||||
+ this.updateSensitivity(true); |
||||
+ this.emit('prompted'); |
||||
+ }, |
||||
+ |
||||
_onOVirtUserAuthenticated: function() { |
||||
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED) |
||||
this.reset(); |
||||
@@ -404,6 +443,8 @@ var AuthPrompt = new Lang.Class({ |
||||
clear: function() { |
||||
this._entry.text = ''; |
||||
this.stopSpinning(); |
||||
+ this._authList.clear(); |
||||
+ this._authList.actor.hide(); |
||||
}, |
||||
|
||||
setPasswordChar: function(passwordChar) { |
||||
@@ -419,12 +460,42 @@ var AuthPrompt = new Lang.Class({ |
||||
|
||||
this._label.set_text(question); |
||||
|
||||
+ this._authList.actor.hide(); |
||||
this._label.show(); |
||||
this._entry.show(); |
||||
|
||||
this._entry.grab_key_focus(); |
||||
}, |
||||
|
||||
+ _fadeInChoiceList: function() { |
||||
+ this._authList.actor.opacity = 0; |
||||
+ this._authList.actor.show(); |
||||
+ this._authList.actor.reactive = false; |
||||
+ Tweener.addTween(this._authList.actor, |
||||
+ { opacity: 255, |
||||
+ time: MESSAGE_FADE_OUT_ANIMATION_TIME, |
||||
+ transition: 'easeOutQuad', |
||||
+ onComplete: () => { |
||||
+ this._authList.actor.reactive = true; |
||||
+ } |
||||
+ }); |
||||
+ }, |
||||
+ |
||||
+ setChoiceList: function(promptMessage, choiceList) { |
||||
+ this._authList.clear(); |
||||
+ this._authList.label.text = promptMessage; |
||||
+ for (let key in choiceList) { |
||||
+ let text = choiceList[key]; |
||||
+ this._authList.addItem(key, text); |
||||
+ } |
||||
+ |
||||
+ this._label.hide(); |
||||
+ this._entry.hide(); |
||||
+ if (this._message.text == "") |
||||
+ this._message.hide(); |
||||
+ this._fadeInChoiceList(); |
||||
+ }, |
||||
+ |
||||
getAnswer: function() { |
||||
let text; |
||||
|
||||
@@ -460,6 +531,7 @@ var AuthPrompt = new Lang.Class({ |
||||
else |
||||
this._message.remove_style_class_name('login-dialog-message-hint'); |
||||
|
||||
+ this._message.show(); |
||||
if (message) { |
||||
Tweener.removeTweens(this._message); |
||||
this._message.text = message; |
||||
@@ -475,7 +547,7 @@ var AuthPrompt = new Lang.Class({ |
||||
}, |
||||
|
||||
updateSensitivity: function(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 |
||||
--- a/js/gdm/loginDialog.js |
||||
+++ b/js/gdm/loginDialog.js |
||||
@@ -435,6 +435,11 @@ var LoginDialog = new Lang.Class({ |
||||
this._userManager = AccountsService.UserManager.get_default() |
||||
this._gdmClient = new Gdm.Client(); |
||||
|
||||
+ try { |
||||
+ this._gdmClient.set_enabled_extensions([Gdm.UserVerifierChoiceList.interface_info().name]); |
||||
+ } catch(e) { |
||||
+ } |
||||
+ |
||||
this._settings = new Gio.Settings({ schema_id: GdmUtil.LOGIN_SCREEN_SCHEMA }); |
||||
|
||||
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY, |
||||
diff --git a/js/gdm/util.js b/js/gdm/util.js |
||||
index 83a12fb6c..9fc61f55a 100644 |
||||
--- a/js/gdm/util.js |
||||
+++ b/js/gdm/util.js |
||||
@@ -200,6 +200,10 @@ var ShellUserVerifier = new Lang.Class({ |
||||
if (this._userVerifier) { |
||||
this._userVerifier.run_dispose(); |
||||
this._userVerifier = null; |
||||
+ if (this._userVerifierChoiceList) { |
||||
+ this._userVerifierChoiceList.run_dispose(); |
||||
+ this._userVerifierChoiceList = null; |
||||
+ } |
||||
} |
||||
}, |
||||
|
||||
@@ -227,6 +231,10 @@ var ShellUserVerifier = new Lang.Class({ |
||||
this._oVirtCredentialsManager = null; |
||||
}, |
||||
|
||||
+ selectChoice: function(serviceName, key) { |
||||
+ this._userVerifierChoiceList.call_select_choice(serviceName, key, this._cancellable, null); |
||||
+ }, |
||||
+ |
||||
answerQuery: function(serviceName, answer) { |
||||
if (!this.hasPendingMessages) { |
||||
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null); |
||||
@@ -368,6 +376,11 @@ var ShellUserVerifier = new Lang.Class({ |
||||
return; |
||||
} |
||||
|
||||
+ if (client.get_user_verifier_choice_list) |
||||
+ this._userVerifierChoiceList = client.get_user_verifier_choice_list(); |
||||
+ else |
||||
+ this._userVerifierChoiceList = null; |
||||
+ |
||||
this.reauthenticating = true; |
||||
this._connectSignals(); |
||||
this._beginVerification(); |
||||
@@ -385,6 +398,11 @@ var ShellUserVerifier = new Lang.Class({ |
||||
return; |
||||
} |
||||
|
||||
+ if (client.get_user_verifier_choice_list) |
||||
+ this._userVerifierChoiceList = client.get_user_verifier_choice_list(); |
||||
+ else |
||||
+ this._userVerifierChoiceList = null; |
||||
+ |
||||
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)); |
||||
+ |
||||
+ if (this._userVerifierChoiceList) |
||||
+ this._userVerifierChoiceList.connect('choice-query', Lang.bind(this, this._onChoiceListQuery)); |
||||
}, |
||||
|
||||
_getForegroundService: function() { |
||||
@@ -474,6 +495,13 @@ var ShellUserVerifier = new Lang.Class({ |
||||
this._startService(FINGERPRINT_SERVICE_NAME); |
||||
}, |
||||
|
||||
+ _onChoiceListQuery: function(client, serviceName, promptMessage, list) { |
||||
+ if (!this.serviceIsForeground(serviceName)) |
||||
+ return; |
||||
+ |
||||
+ this.emit('show-choice-list', serviceName, promptMessage, list.deep_unpack()); |
||||
+ }, |
||||
+ |
||||
_onInfo: function(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 |
||||
--- a/js/ui/unlockDialog.js |
||||
+++ b/js/ui/unlockDialog.js |
||||
@@ -51,7 +51,14 @@ var UnlockDialog = new Lang.Class({ |
||||
y_expand: true }); |
||||
this.actor.add_child(this._promptBox); |
||||
|
||||
- this._authPrompt = new AuthPrompt.AuthPrompt(new Gdm.Client(), AuthPrompt.AuthPromptMode.UNLOCK_ONLY); |
||||
+ this._gdmClient = new Gdm.Client(); |
||||
+ |
||||
+ try { |
||||
+ this._gdmClient.set_enabled_extensions([Gdm.UserVerifierChoiceList.interface_info().name]); |
||||
+ } catch(e) { |
||||
+ } |
||||
+ |
||||
+ 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)); |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
From 49102593eb5776e2edc535147e8277cdcad1e5d9 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> |
||||
Date: Fri, 6 Oct 2017 18:58:21 +0200 |
||||
Subject: [PATCH] build: Remove check-for-missing disthook |
||||
|
||||
The script has been removed upstream, but the re-added autotools |
||||
support still references it; we don't have any use for a disthook |
||||
downstream, so just update the Makefile accordingly. |
||||
--- |
||||
Makefile.am | 7 +------ |
||||
1 file changed, 1 insertion(+), 6 deletions(-) |
||||
|
||||
diff --git a/Makefile.am b/Makefile.am |
||||
index eba7d2b28..107a00a05 100644 |
||||
--- a/Makefile.am |
||||
+++ b/Makefile.am |
||||
@@ -14,8 +14,7 @@ endif |
||||
EXTRA_DIST = \ |
||||
.project \ |
||||
.settings \ |
||||
- autogen.sh \ |
||||
- tools/check-for-missing.py |
||||
+ autogen.sh |
||||
|
||||
# These are files checked into Git that we don't want to distribute |
||||
DIST_EXCLUDE = \ |
||||
@@ -26,8 +25,4 @@ DIST_EXCLUDE = \ |
||||
MAINTAINERS \ |
||||
tools/build/* |
||||
|
||||
-distcheck-hook: |
||||
- @echo "Checking disted files against files in git" |
||||
- @$(srcdir)/tools/check-for-missing.py $(srcdir) $(distdir) $(DIST_EXCLUDE) |
||||
- |
||||
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-man |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,200 @@
@@ -0,0 +1,200 @@
|
||||
From 20f85200472835180a6302928f05b86063dfb00d Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> |
||||
Date: Tue, 24 Oct 2017 02:45:00 +0200 |
||||
Subject: [PATCH 4/4] Revert "build: Use new mkenums_simple() function" |
||||
|
||||
This reverts commit ab0e98dfdd49d73373eb4367a299593b96211f80. |
||||
--- |
||||
src/meson.build | 6 ++++-- |
||||
src/shell-enum-types.c.in | 30 ++++++++++++++++++++++++++++++ |
||||
src/shell-enum-types.h.in | 25 +++++++++++++++++++++++++ |
||||
src/st/meson.build | 8 +++----- |
||||
src/st/st-enum-types.c.in | 33 +++++++++++++++++++++++++++++++++ |
||||
src/st/st-enum-types.h.in | 29 +++++++++++++++++++++++++++++ |
||||
6 files changed, 124 insertions(+), 7 deletions(-) |
||||
create mode 100644 src/shell-enum-types.c.in |
||||
create mode 100644 src/shell-enum-types.h.in |
||||
create mode 100644 src/st/st-enum-types.c.in |
||||
create mode 100644 src/st/st-enum-types.h.in |
||||
|
||||
diff --git a/src/meson.build b/src/meson.build |
||||
index 3e5557351..1e88bf5d5 100644 |
||||
--- a/src/meson.build |
||||
+++ b/src/meson.build |
||||
@@ -182,8 +182,10 @@ if enable_recorder |
||||
endif |
||||
|
||||
|
||||
-libshell_enums = gnome.mkenums_simple('shell-enum-types', |
||||
- sources: libshell_public_headers |
||||
+libshell_enums = gnome.mkenums('shell-enum-types', |
||||
+ sources: libshell_public_headers, |
||||
+ c_template: 'shell-enum-types.c.in', |
||||
+ h_template: 'shell-enum-types.h.in' |
||||
) |
||||
|
||||
libshell_gir_sources = [ |
||||
diff --git a/src/shell-enum-types.c.in b/src/shell-enum-types.c.in |
||||
new file mode 100644 |
||||
index 000000000..b350d0016 |
||||
--- /dev/null |
||||
+++ b/src/shell-enum-types.c.in |
||||
@@ -0,0 +1,30 @@ |
||||
+/*** BEGIN file-header ***/ |
||||
+#include "shell-enum-types.h" |
||||
+/*** END file-header ***/ |
||||
+ |
||||
+/*** BEGIN file-production ***/ |
||||
+/* enumerations from "@filename@" */ |
||||
+#include "@filename@" |
||||
+/*** END file-production ***/ |
||||
+ |
||||
+/*** BEGIN value-header ***/ |
||||
+GType |
||||
+@enum_name@_get_type(void) { |
||||
+ static GType enum_type_id = 0; |
||||
+ if (G_UNLIKELY (!enum_type_id)) |
||||
+ { |
||||
+ static const G@Type@Value values[] = { |
||||
+/*** END value-header ***/ |
||||
+ |
||||
+/*** BEGIN value-production ***/ |
||||
+ { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, |
||||
+/*** END value-production ***/ |
||||
+ |
||||
+/*** BEGIN value-tail ***/ |
||||
+ { 0, NULL, NULL } |
||||
+ }; |
||||
+ enum_type_id = g_@type@_register_static("@EnumName@", values); |
||||
+ } |
||||
+ return enum_type_id; |
||||
+} |
||||
+/*** END value-tail ***/ |
||||
diff --git a/src/shell-enum-types.h.in b/src/shell-enum-types.h.in |
||||
new file mode 100644 |
||||
index 000000000..a6aea7d17 |
||||
--- /dev/null |
||||
+++ b/src/shell-enum-types.h.in |
||||
@@ -0,0 +1,25 @@ |
||||
+/*** BEGIN file-header ***/ |
||||
+#ifndef __SHELL_ENUM_TYPES_H__ |
||||
+#define __SHELL_ENUM_TYPES_H__ |
||||
+ |
||||
+#include <glib-object.h> |
||||
+ |
||||
+G_BEGIN_DECLS |
||||
+ |
||||
+/*** END file-header ***/ |
||||
+ |
||||
+/*** BEGIN file-production ***/ |
||||
+/* enumerations from "@filename@" */ |
||||
+/*** END file-production ***/ |
||||
+ |
||||
+/*** BEGIN file-tail ***/ |
||||
+G_END_DECLS |
||||
+ |
||||
+#endif /* !__SHELL_ENUM_TYPES_H__ */ |
||||
+/*** END file-tail ***/ |
||||
+ |
||||
+/*** BEGIN value-header ***/ |
||||
+GType @enum_name@_get_type (void) G_GNUC_CONST; |
||||
+#define SHELL_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) |
||||
+ |
||||
+/*** END value-header ***/ |
||||
diff --git a/src/st/meson.build b/src/st/meson.build |
||||
index fa9d6bbf4..46378a2f1 100644 |
||||
--- a/src/st/meson.build |
||||
+++ b/src/st/meson.build |
||||
@@ -82,12 +82,10 @@ st_sources = [ |
||||
'st-widget.c' |
||||
] |
||||
|
||||
-st_enums = gnome.mkenums_simple('st-enum-types', |
||||
+st_enums = gnome.mkenums('st-enum-types', |
||||
sources: st_headers, |
||||
- header_prefix: ''' |
||||
-#if !defined(ST_H_INSIDE) && !defined(ST_COMPILATION) |
||||
-#error "Only <st/st.h> can be included directly.h" |
||||
-#endif''' |
||||
+ c_template: 'st-enum-types.c.in', |
||||
+ h_template: 'st-enum-types.h.in' |
||||
) |
||||
|
||||
st_gir_sources = st_sources + st_private_headers + st_headers + st_enums |
||||
diff --git a/src/st/st-enum-types.c.in b/src/st/st-enum-types.c.in |
||||
new file mode 100644 |
||||
index 000000000..bf0c54470 |
||||
--- /dev/null |
||||
+++ b/src/st/st-enum-types.c.in |
||||
@@ -0,0 +1,33 @@ |
||||
+/*** BEGIN file-header ***/ |
||||
+#ifndef ST_COMPILATION |
||||
+#define ST_COMPILATION |
||||
+#endif |
||||
+#include "st-enum-types.h" |
||||
+/*** END file-header ***/ |
||||
+ |
||||
+/*** BEGIN file-production ***/ |
||||
+/* enumerations from "@filename@" */ |
||||
+#include "@filename@" |
||||
+/*** END file-production ***/ |
||||
+ |
||||
+/*** BEGIN value-header ***/ |
||||
+GType |
||||
+@enum_name@_get_type(void) { |
||||
+ static GType enum_type_id = 0; |
||||
+ if (G_UNLIKELY (!enum_type_id)) |
||||
+ { |
||||
+ static const G@Type@Value values[] = { |
||||
+/*** END value-header ***/ |
||||
+ |
||||
+/*** BEGIN value-production ***/ |
||||
+ { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, |
||||
+/*** END value-production ***/ |
||||
+ |
||||
+/*** BEGIN value-tail ***/ |
||||
+ { 0, NULL, NULL } |
||||
+ }; |
||||
+ enum_type_id = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); |
||||
+ } |
||||
+ return enum_type_id; |
||||
+} |
||||
+/*** END value-tail ***/ |
||||
diff --git a/src/st/st-enum-types.h.in b/src/st/st-enum-types.h.in |
||||
new file mode 100644 |
||||
index 000000000..b3dd0e74e |
||||
--- /dev/null |
||||
+++ b/src/st/st-enum-types.h.in |
||||
@@ -0,0 +1,29 @@ |
||||
+/*** BEGIN file-header ***/ |
||||
+#if !defined(ST_H_INSIDE) && !defined(ST_COMPILATION) |
||||
+#error "Only <st/st.h> can be included directly.h" |
||||
+#endif |
||||
+ |
||||
+#ifndef __ST_ENUM_TYPES_H__ |
||||
+#define __ST_ENUM_TYPES_H__ |
||||
+ |
||||
+#include <glib-object.h> |
||||
+ |
||||
+G_BEGIN_DECLS |
||||
+ |
||||
+/*** END file-header ***/ |
||||
+ |
||||
+/*** BEGIN file-production ***/ |
||||
+/* enumerations from "@filename@" */ |
||||
+/*** END file-production ***/ |
||||
+ |
||||
+/*** BEGIN file-tail ***/ |
||||
+G_END_DECLS |
||||
+ |
||||
+#endif /* !__ST_ENUM_TYPES_H__ */ |
||||
+/*** END file-tail ***/ |
||||
+ |
||||
+/*** BEGIN value-header ***/ |
||||
+GType @enum_name@_get_type (void) G_GNUC_CONST; |
||||
+#define ST_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) |
||||
+ |
||||
+/*** END value-header ***/ |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,188 @@
@@ -0,0 +1,188 @@
|
||||
From fb872747e5697098c87e97bab13c4095b653053b 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; } |
||||
|
||||
.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 { |
||||
padding-bottom: 12px; |
||||
spacing: 8px; |
||||
width: 23em; } |
||||
+ .login-dialog-prompt-layout .login-dialog-timed-login-indicator { |
||||
+ height: 2px; |
||||
+ background-color: #8b8b8b; } |
||||
|
||||
.login-dialog-prompt-label { |
||||
color: #bebeb6; |
||||
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js |
||||
index 9affbdd5f..366f34687 100644 |
||||
--- a/js/gdm/authPrompt.js |
||||
+++ b/js/gdm/authPrompt.js |
||||
@@ -2,6 +2,7 @@ |
||||
|
||||
const Clutter = imports.gi.Clutter; |
||||
const Gio = imports.gi.Gio; |
||||
+const GLib = imports.gi.GLib; |
||||
const Lang = imports.lang; |
||||
const Pango = imports.gi.Pango; |
||||
const Signals = imports.signals; |
||||
@@ -119,6 +120,11 @@ var AuthPrompt = new Lang.Class({ |
||||
|
||||
this._entry.grab_key_focus(); |
||||
|
||||
+ this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator', |
||||
+ scale_x: 0 }); |
||||
+ |
||||
+ this.actor.add(this._timedLoginIndicator); |
||||
+ |
||||
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({ |
||||
this._defaultButtonWell.add_child(this._spinner.actor); |
||||
}, |
||||
|
||||
+ showTimedLoginIndicator: function(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() { |
||||
+ let currentTime = GLib.get_monotonic_time(); |
||||
+ let elapsedTime = (currentTime - startTime) / GLib.USEC_PER_SEC; |
||||
+ this._timedLoginIndicator.scale_x = elapsedTime / time; |
||||
+ if (elapsedTime >= time) { |
||||
+ this._timedLoginTimeoutId = 0; |
||||
+ hold.release(); |
||||
+ return GLib.SOURCE_REMOVE; |
||||
+ } |
||||
+ |
||||
+ return GLib.SOURCE_CONTINUE; |
||||
+ })); |
||||
+ |
||||
+ GLib.Source.set_name_by_id(this._timedLoginTimeoutId, '[gnome-shell] this._timedLoginTimeoutId'); |
||||
+ |
||||
+ return hold; |
||||
+ }, |
||||
+ |
||||
+ hideTimedLoginIndicator: function() { |
||||
+ if (this._timedLoginTimeoutId) { |
||||
+ GLib.source_remove(this._timedLoginTimeoutId); |
||||
+ this._timedLoginTimeoutId = 0; |
||||
+ } |
||||
+ this._timedLoginIndicator.scale_x = 0.; |
||||
+ }, |
||||
+ |
||||
_onDestroy: function() { |
||||
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 |
||||
--- a/js/gdm/loginDialog.js |
||||
+++ b/js/gdm/loginDialog.js |
||||
@@ -756,6 +756,9 @@ var LoginDialog = new Lang.Class({ |
||||
|
||||
if (this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING) |
||||
this._authPrompt.reset(); |
||||
+ |
||||
+ if (this._disableUserList && this._timedLoginUserListHold) |
||||
+ this._timedLoginUserListHold.release(); |
||||
} |
||||
}, |
||||
|
||||
@@ -1014,6 +1017,9 @@ 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) { |
||||
+ this._timedLoginUserName = userName; |
||||
this._timedLoginItem = null; |
||||
this._timedLoginDelay = delay; |
||||
this._timedLoginAnimationTime = delay; |
||||
- |
||||
let tasks = [function() { |
||||
- return this._waitForItemForUser(userName); |
||||
+ 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({ |
||||
this._blockTimedLoginUntilIdle, |
||||
|
||||
function() { |
||||
+ if (this._disableUserList) |
||||
+ return; |
||||
+ |
||||
this._userList.scrollToItem(this._timedLoginItem); |
||||
}, |
||||
|
||||
@@ -1088,7 +1109,9 @@ var LoginDialog = new Lang.Class({ |
||||
if (this._timedLoginItem) |
||||
this._timedLoginItem.hideTimedLoginIndicator(); |
||||
|
||||
- let userName = this._timedLoginItem.user.get_user_name(); |
||||
+ this._authPrompt.hideTimedLoginIndicator(); |
||||
+ |
||||
+ let userName = this._timedLoginUserName; |
||||
|
||||
if (userName) |
||||
this._startTimedLogin(userName, this._timedLoginDelay); |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,167 @@
@@ -0,0 +1,167 @@
|
||||
From f941682d22a0e6f40e1109df8043291398783ff4 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 |
||||
password up front |
||||
|
||||
Right now we fade out any stale auth messages as soon as the user starts |
||||
typing. This behavior doesn't really make sense if the user is typing up |
||||
front, before a password is asked. |
||||
--- |
||||
js/gdm/authPrompt.js | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js |
||||
index a436431be..dedf39f99 100644 |
||||
--- a/js/gdm/authPrompt.js |
||||
+++ b/js/gdm/authPrompt.js |
||||
@@ -185,7 +185,7 @@ var AuthPrompt = new Lang.Class({ |
||||
|
||||
this._entry.clutter_text.connect('text-changed', |
||||
Lang.bind(this, function() { |
||||
- 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 |
||||
|
||||
|
||||
From 7b83ebcdc1d667438de5a0f41cb7b194b2792d1f 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 |
||||
|
||||
--- |
||||
js/gdm/authPrompt.js | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js |
||||
index dedf39f99..b3ff91789 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.updateSensitivity(false); |
||||
- this.startSpinning(); |
||||
if (this._queryingService) { |
||||
+ this.startSpinning(); |
||||
this._userVerifier.answerQuery(this._queryingService, this._entry.text); |
||||
} else { |
||||
this._preemptiveAnswer = this._entry.text; |
||||
-- |
||||
2.14.2 |
||||
|
||||
|
||||
From 76e455916f6411c695f4528bffbb49c5832ec568 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 |
||||
stops typing |
||||
|
||||
We only want to allow the user to type the preemptive password in |
||||
one smooth motion. If they start to type, and then stop typing, |
||||
we should discard their preemptive password as expired. |
||||
|
||||
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(+) |
||||
|
||||
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js |
||||
index b3ff91789..9affbdd5f 100644 |
||||
--- a/js/gdm/authPrompt.js |
||||
+++ b/js/gdm/authPrompt.js |
||||
@@ -10,6 +10,7 @@ const St = imports.gi.St; |
||||
const Animation = imports.ui.animation; |
||||
const Batch = imports.gdm.batch; |
||||
const GdmUtil = imports.gdm.util; |
||||
+const Meta = imports.gi.Meta; |
||||
const Params = imports.misc.params; |
||||
const ShellEntry = imports.ui.shellEntry; |
||||
const Tweener = imports.ui.tweener; |
||||
@@ -47,6 +48,8 @@ var AuthPrompt = new Lang.Class({ |
||||
this._gdmClient = gdmClient; |
||||
this._mode = mode; |
||||
|
||||
+ this._idleMonitor = Meta.IdleMonitor.get_core(); |
||||
+ |
||||
let reauthenticationOnly; |
||||
if (this._mode == AuthPromptMode.UNLOCK_ONLY) |
||||
reauthenticationOnly = true; |
||||
@@ -71,6 +74,11 @@ var AuthPrompt = new Lang.Class({ |
||||
this._userVerifier.answerQuery(this._queryingService, this._entry.text); |
||||
} else { |
||||
this._preemptiveAnswer = this._entry.text; |
||||
+ |
||||
+ if (this._preemptiveAnswerWatchId) { |
||||
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); |
||||
+ this._preemptiveAnswerWatchId = 0; |
||||
+ } |
||||
} |
||||
})); |
||||
|
||||
@@ -137,6 +145,11 @@ var AuthPrompt = new Lang.Class({ |
||||
}, |
||||
|
||||
_onDestroy: function() { |
||||
+ if (this._preemptiveAnswerWatchId) { |
||||
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); |
||||
+ this._preemptiveAnswerWatchId = 0; |
||||
+ } |
||||
+ |
||||
this._userVerifier.destroy(); |
||||
this._userVerifier = null; |
||||
}, |
||||
@@ -358,6 +371,11 @@ var AuthPrompt = new Lang.Class({ |
||||
}, |
||||
|
||||
setQuestion: function(question) { |
||||
+ if (this._preemptiveAnswerWatchId) { |
||||
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); |
||||
+ this._preemptiveAnswerWatchId = 0; |
||||
+ } |
||||
+ |
||||
this._label.set_text(question); |
||||
|
||||
this._label.show(); |
||||
@@ -443,12 +461,32 @@ var AuthPrompt = new Lang.Class({ |
||||
} |
||||
}, |
||||
|
||||
+ _onUserStoppedTypePreemptiveAnswer: function() { |
||||
+ if (!this._preemptiveAnswerWatchId || |
||||
+ this._preemptiveAnswer || |
||||
+ this._queryingService) |
||||
+ return; |
||||
+ |
||||
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); |
||||
+ this._preemptiveAnswerWatchId = 0; |
||||
+ |
||||
+ this._entry.text = ''; |
||||
+ this.updateSensitivity(false); |
||||
+ }, |
||||
+ |
||||
reset: function() { |
||||
let oldStatus = this.verificationStatus; |
||||
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; |
||||
this.cancelButton.reactive = true; |
||||
this.nextButton.label = _("Next"); |
||||
|
||||
+ if (this._preemptiveAnswerWatchId) { |
||||
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); |
||||
+ } |
||||
+ this._preemptiveAnswerWatchId = this._idleMonitor.add_idle_watch (500, |
||||
+ Lang.bind(this, |
||||
+ this._onUserStoppedTypePreemptiveAnswer)); |
||||
+ |
||||
if (this._userVerifier) |
||||
this._userVerifier.cancel(); |
||||
|
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,115 @@
@@ -0,0 +1,115 @@
|
||||
From 59b6d50061f3c8e5858230a881267014e8395594 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 |
||||
(any) token |
||||
|
||||
If a user uses a token at login time, we need to make sure they continue |
||||
to use the token at unlock time. |
||||
|
||||
As a prerequisite for addressing that problem we need to know up front |
||||
if a user logged in with a token at all. |
||||
|
||||
This commit adds the necessary api to detect that case. |
||||
--- |
||||
js/misc/smartcardManager.js | 7 +++++++ |
||||
1 file changed, 7 insertions(+) |
||||
|
||||
diff --git a/js/misc/smartcardManager.js b/js/misc/smartcardManager.js |
||||
index 4388f286d..75e9836e9 100644 |
||||
--- a/js/misc/smartcardManager.js |
||||
+++ b/js/misc/smartcardManager.js |
||||
@@ -113,6 +113,13 @@ var SmartcardManager = new Lang.Class({ |
||||
return false; |
||||
|
||||
return true; |
||||
+ }, |
||||
+ |
||||
+ loggedInWithToken: function() { |
||||
+ if (this._loginToken) |
||||
+ return true; |
||||
+ |
||||
+ return false; |
||||
} |
||||
|
||||
}); |
||||
-- |
||||
2.14.2 |
||||
|
||||
|
||||
From b25d32c8fef60dec567f05e6681214a6995656fc 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 |
||||
login |
||||
|
||||
If a smartcard is used for login, we need to make sure the smartcard |
||||
gets used for unlock, too. |
||||
--- |
||||
js/gdm/util.js | 7 +++++-- |
||||
1 file changed, 5 insertions(+), 2 deletions(-) |
||||
|
||||
diff --git a/js/gdm/util.js b/js/gdm/util.js |
||||
index bae46bfe0..a44184c17 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(); |
||||
|
||||
this._fprintManager = Fprint.FprintManager(); |
||||
this._smartcardManager = SmartcardManager.getSmartcardManager(); |
||||
@@ -146,6 +145,8 @@ var ShellUserVerifier = new Lang.Class({ |
||||
this.smartcardDetected = false; |
||||
this._checkForSmartcard(); |
||||
|
||||
+ this._updateDefaultService(); |
||||
+ |
||||
this._smartcardInsertedId = this._smartcardManager.connect('smartcard-inserted', |
||||
Lang.bind(this, this._checkForSmartcard)); |
||||
this._smartcardRemovedId = this._smartcardManager.connect('smartcard-removed', |
||||
@@ -413,7 +414,9 @@ var ShellUserVerifier = new Lang.Class({ |
||||
}, |
||||
|
||||
_updateDefaultService: function() { |
||||
- if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY)) |
||||
+ if (this._smartcardManager.loggedInWithToken()) |
||||
+ this._defaultService = SMARTCARD_SERVICE_NAME; |
||||
+ else if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY)) |
||||
this._defaultService = PASSWORD_SERVICE_NAME; |
||||
else if (this._settings.get_boolean(SMARTCARD_AUTHENTICATION_KEY)) |
||||
this._defaultService = SMARTCARD_SERVICE_NAME; |
||||
-- |
||||
2.14.2 |
||||
|
||||
|
||||
From 3309c476c6815e03f17359155f565118a2ad57b2 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 |
||||
|
||||
Early on at start up we may not know if a smartcard is |
||||
available. Make sure we reupdate the default service |
||||
after we get a smartcard insertion event. |
||||
--- |
||||
js/gdm/util.js | 2 ++ |
||||
1 file changed, 2 insertions(+) |
||||
|
||||
diff --git a/js/gdm/util.js b/js/gdm/util.js |
||||
index a44184c17..83a12fb6c 100644 |
||||
--- a/js/gdm/util.js |
||||
+++ b/js/gdm/util.js |
||||
@@ -336,6 +336,8 @@ var ShellUserVerifier = new Lang.Class({ |
||||
else if (this._preemptingService == SMARTCARD_SERVICE_NAME) |
||||
this._preemptingService = null; |
||||
|
||||
+ this._updateDefaultService(); |
||||
+ |
||||
this.emit('smartcard-status-changed'); |
||||
} |
||||
}, |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
--- gnome-shell-3.13.90/data/org.gnome.shell.gschema.xml.in.firefox 2014-08-20 20:28:07.601133033 +0200 |
||||
+++ gnome-shell-3.13.90/data/org.gnome.shell.gschema.xml.in 2014-08-20 20:28:41.741503518 +0200 |
||||
@@ -31,7 +31,7 @@ |
||||
</description> |
||||
</key> |
||||
<key name="favorite-apps" type="as"> |
||||
- <default>[ 'epiphany.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default> |
||||
+ <default>[ 'firefox.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default> |
||||
<summary>List of desktop file IDs for favorite applications</summary> |
||||
<description> |
||||
The applications corresponding to these identifiers |
||||
--- a/js/ui/appFavorites.js |
||||
+++ b/js/ui/appFavorites.js |
||||
@@ -31,6 +31,7 @@ const RENAMED_DESKTOP_IDS = { |
||||
'gnotravex.desktop': 'gnome-tetravex.desktop', |
||||
'gnotski.desktop': 'gnome-klotski.desktop', |
||||
'gtali.desktop': 'tali.desktop', |
||||
+ 'mozilla-firefox.desktop': 'firefox.desktop', |
||||
'nautilus.desktop': 'org.gnome.Nautilus.desktop', |
||||
'polari.desktop': 'org.gnome.Polari.desktop', |
||||
'totem.desktop': 'org.gnome.Totem.desktop', |
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
From 92845e02be66c676261d204e06c2b0ea55722738 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> |
||||
Date: Thu, 9 Mar 2017 14:44:32 +0100 |
||||
Subject: [PATCH] appFavorites: Add terminal |
||||
|
||||
--- |
||||
data/org.gnome.shell.gschema.xml.in | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in |
||||
index 8fb7f7291..6f1459c86 100644 |
||||
--- a/data/org.gnome.shell.gschema.xml.in |
||||
+++ b/data/org.gnome.shell.gschema.xml.in |
||||
@@ -39,7 +39,7 @@ |
||||
</description> |
||||
</key> |
||||
<key name="favorite-apps" type="as"> |
||||
- <default>[ 'firefox.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'yelp.desktop' ]</default> |
||||
+ <default>[ 'firefox.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'yelp.desktop', 'gnome-terminal.desktop' ]</default> |
||||
<summary>List of desktop file IDs for favorite applications</summary> |
||||
<description> |
||||
The applications corresponding to these identifiers |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
From e95369c7fc044867b074775d7e0bab148180f4fb Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> |
||||
Date: Thu, 9 Mar 2017 14:44:03 +0100 |
||||
Subject: [PATCH] Add 'yelp' to default favorites |
||||
|
||||
Help should be easily available, so add it to the default favorites. |
||||
--- |
||||
data/org.gnome.shell.gschema.xml.in | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in |
||||
index 868d8edc9..8fb7f7291 100644 |
||||
--- a/data/org.gnome.shell.gschema.xml.in |
||||
+++ b/data/org.gnome.shell.gschema.xml.in |
||||
@@ -39,7 +39,7 @@ |
||||
</description> |
||||
</key> |
||||
<key name="favorite-apps" type="as"> |
||||
- <default>[ 'firefox.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default> |
||||
+ <default>[ 'firefox.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'yelp.desktop' ]</default> |
||||
<summary>List of desktop file IDs for favorite applications</summary> |
||||
<description> |
||||
The applications corresponding to these identifiers |
||||
-- |
||||
2.14.2 |
||||
|
@ -0,0 +1,2 @@
@@ -0,0 +1,2 @@
|
||||
[org.gnome.shell] |
||||
always-show-log-out=true |
Loading…
Reference in new issue