Browse Source

gnome-shell package update

Signed-off-by: guibuilder_pel7x64builder0 <guibuilder@powerel.org>
master
guibuilder_pel7x64builder0 7 years ago
parent
commit
2e49deab1f
  1. 1632
      SOURCES/0001-Revert-build-Drop-autotools-support.patch
  2. 28
      SOURCES/0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch
  3. 28
      SOURCES/0001-data-install-process-working.svg-to-filesystem.patch
  4. 69
      SOURCES/0001-extensionSystem-Notify-about-extension-issues-on-upd.patch
  5. 42
      SOURCES/0001-extensions-Add-a-SESSION_MODE-extension-type.patch
  6. 240
      SOURCES/0001-gdm-add-AuthList-control.patch
  7. 71
      SOURCES/0001-gdm-honor-timed-login-delay-even-if-animations-disab.patch
  8. 29
      SOURCES/0001-gdm-use-password-authentication-if-all-schemes-are-d.patch
  9. 115
      SOURCES/0001-global-Allow-overriding-the-override-schema.patch
  10. 35
      SOURCES/0001-loginDialog-make-info-messages-themed.patch
  11. 122
      SOURCES/0001-loginDialog-only-emit-session-activated-on-user-acti.patch
  12. 51
      SOURCES/0001-magnifier-don-t-spew-to-console-when-focus-moves-aro.patch
  13. 41
      SOURCES/0001-padOsd-Ensure-to-pick-pad-devices-only.patch
  14. 67
      SOURCES/0001-panel-add-an-icon-to-the-ActivitiesButton.patch
  15. 33
      SOURCES/0001-screenShield-unblank-when-inserting-smartcard.patch
  16. 52
      SOURCES/0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch
  17. 91
      SOURCES/0001-system-don-t-throw-an-exception-if-power-off-disable.patch
  18. 44
      SOURCES/0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch
  19. 299
      SOURCES/0002-Revert-build-Remove-included-Makefiles-as-well.patch
  20. 267
      SOURCES/0002-gdmUtil-enable-support-for-GDM-s-ChoiceList-PAM-exte.patch
  21. 38
      SOURCES/0003-build-Remove-check-for-missing-disthook.patch
  22. 200
      SOURCES/0004-Revert-build-Use-new-mkenums_simple-function.patch
  23. 188
      SOURCES/allow-timed-login-with-no-user-list.patch
  24. 167
      SOURCES/disable-unlock-entry-until-question.patch
  25. 115
      SOURCES/enforce-smartcard-at-unlock.patch
  26. 21
      SOURCES/gnome-shell-favourite-apps-firefox.patch
  27. 25
      SOURCES/gnome-shell-favourite-apps-terminal.patch
  28. 26
      SOURCES/gnome-shell-favourite-apps-yelp.patch
  29. 2
      SOURCES/org.gnome.shell.gschema.override
  30. 1339
      SPECS/gnome-shell.spec

1632
SOURCES/0001-Revert-build-Drop-autotools-support.patch

File diff suppressed because it is too large Load Diff

28
SOURCES/0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch

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

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

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

69
SOURCES/0001-extensionSystem-Notify-about-extension-issues-on-upd.patch

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

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

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

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

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

71
SOURCES/0001-gdm-honor-timed-login-delay-even-if-animations-disab.patch

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

29
SOURCES/0001-gdm-use-password-authentication-if-all-schemes-are-d.patch

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

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

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

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

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

diff --git a/data/gnome-classic.css b/data/gnome-classic.css
index d9291a1..4d0d737 100644
--- a/data/gnome-classic.css
+++ b/data/gnome-classic.css
@@ -1651,9 +1651,11 @@ StScrollBar {
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; }
+ 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; }

122
SOURCES/0001-loginDialog-only-emit-session-activated-on-user-acti.patch

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

51
SOURCES/0001-magnifier-don-t-spew-to-console-when-focus-moves-aro.patch

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

41
SOURCES/0001-padOsd-Ensure-to-pick-pad-devices-only.patch

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

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

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

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

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

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

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

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

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

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

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

299
SOURCES/0002-Revert-build-Remove-included-Makefiles-as-well.patch

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

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

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

38
SOURCES/0003-build-Remove-check-for-missing-disthook.patch

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

200
SOURCES/0004-Revert-build-Use-new-mkenums_simple-function.patch

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

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

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

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

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

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

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

21
SOURCES/gnome-shell-favourite-apps-firefox.patch

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

25
SOURCES/gnome-shell-favourite-apps-terminal.patch

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

26
SOURCES/gnome-shell-favourite-apps-yelp.patch

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

2
SOURCES/org.gnome.shell.gschema.override

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
[org.gnome.shell]
always-show-log-out=true

1339
SPECS/gnome-shell.spec

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save