Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
3dff544396 | |||
7e7eab2bea | |||
c568b44997 | |||
ce818c0ae5 | |||
ef2e301c08 | |||
ba274f42b2 | |||
2ceaa05a5a | |||
047e454a7c | |||
86618ce1f9 | |||
59724c5dd5 | |||
3bb500fed4 | |||
dcd3945bb7 | |||
f414f616c4 | |||
e21e90c5e6 |
23
NEWS
23
NEWS
@ -1,3 +1,26 @@
|
|||||||
|
3.14.3
|
||||||
|
======
|
||||||
|
* Properly remove network connections from list [Ryan; #740227]
|
||||||
|
* Fix handling of cancel button on login screen [Ray; #740141]
|
||||||
|
* Fix build when using dash as default shell [Alexander; #739241]
|
||||||
|
* Make event list in calendar scrollable [Stalin; #705115]
|
||||||
|
* Fix calendar-server crash on DBus timeout [Giovanni; #735308]
|
||||||
|
* Fix gestures triggering erroneously [Florian; #740237]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Giovanni Campagna, Ryan Lortie, Florian Müllner, Stalin Pereira, Ray Strode,
|
||||||
|
Alexander Tsoy
|
||||||
|
|
||||||
|
3.14.2
|
||||||
|
======
|
||||||
|
* Do not hard-depend on latest NetworkManager [Florian; #738485]
|
||||||
|
* Fix check for isToday in calendar [Darcy; #738725]
|
||||||
|
* Fix workspace changes from app picker [Yuki; #737534]
|
||||||
|
* Misc. bug fixes [Yuki; #739497]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Darcy, Florian Müllner, Yuki
|
||||||
|
|
||||||
3.14.1.5
|
3.14.1.5
|
||||||
========
|
========
|
||||||
* Fix handing of SystemBackground [Owen; #738652]
|
* Fix handing of SystemBackground [Owen; #738652]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
AC_PREREQ(2.63)
|
AC_PREREQ(2.63)
|
||||||
AC_INIT([gnome-shell],[3.14.1.5],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
AC_INIT([gnome-shell],[3.14.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||||
|
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||||
@ -76,7 +76,7 @@ AC_MSG_RESULT($enable_systemd)
|
|||||||
CLUTTER_MIN_VERSION=1.15.90
|
CLUTTER_MIN_VERSION=1.15.90
|
||||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||||
GJS_MIN_VERSION=1.39.0
|
GJS_MIN_VERSION=1.39.0
|
||||||
MUTTER_MIN_VERSION=3.14.1
|
MUTTER_MIN_VERSION=3.14.3
|
||||||
GTK_MIN_VERSION=3.13.2
|
GTK_MIN_VERSION=3.13.2
|
||||||
GIO_MIN_VERSION=2.37.0
|
GIO_MIN_VERSION=2.37.0
|
||||||
LIBECAL_MIN_VERSION=3.5.3
|
LIBECAL_MIN_VERSION=3.5.3
|
||||||
@ -232,7 +232,9 @@ esac
|
|||||||
AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS"
|
AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS"
|
||||||
AC_SUBST(AM_CFLAGS)
|
AC_SUBST(AM_CFLAGS)
|
||||||
|
|
||||||
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
|
if test -z "${BROWSER_PLUGIN_DIR}"; then
|
||||||
|
BROWSER_PLUGIN_DIR="\${libdir}/mozilla/plugins"
|
||||||
|
fi
|
||||||
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
|
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
|
@ -260,6 +260,7 @@ const AuthPrompt = new Lang.Class({
|
|||||||
|
|
||||||
_onVerificationComplete: function() {
|
_onVerificationComplete: function() {
|
||||||
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
|
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
|
||||||
|
this.cancelButton.reactive = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onReset: function() {
|
_onReset: function() {
|
||||||
@ -431,6 +432,7 @@ const AuthPrompt = new Lang.Class({
|
|||||||
reset: function() {
|
reset: function() {
|
||||||
let oldStatus = this.verificationStatus;
|
let oldStatus = this.verificationStatus;
|
||||||
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
|
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
|
||||||
|
this.cancelButton.reactive = true;
|
||||||
|
|
||||||
if (oldStatus == AuthPromptStatus.VERIFYING)
|
if (oldStatus == AuthPromptStatus.VERIFYING)
|
||||||
this._userVerifier.cancel();
|
this._userVerifier.cancel();
|
||||||
@ -499,6 +501,9 @@ const AuthPrompt = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
cancel: function() {
|
cancel: function() {
|
||||||
|
if (this.verificationStatus == AuthPromptStatus.NOT_VERIFYING || this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.reset();
|
this.reset();
|
||||||
this.emit('cancelled');
|
this.emit('cancelled');
|
||||||
}
|
}
|
||||||
|
@ -643,6 +643,8 @@ const LoginDialog = new Lang.Class({
|
|||||||
realmManager.release();
|
realmManager.release();
|
||||||
}));
|
}));
|
||||||
this._updateCancelButton();
|
this._updateCancelButton();
|
||||||
|
|
||||||
|
this._authPrompt.updateSensitivity(true);
|
||||||
this._showPrompt();
|
this._showPrompt();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1564,10 +1564,11 @@ const AppIcon = new Lang.Class({
|
|||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
|
||||||
this._menuTimeoutId = 0;
|
this._menuTimeoutId = 0;
|
||||||
this._stateChangedId = this.app.connect('notify::state',
|
this._stateChangedId = this.app.connect('notify::state', Lang.bind(this,
|
||||||
Lang.bind(this,
|
function () {
|
||||||
this._onStateChanged));
|
this._updateRunningStyle();
|
||||||
this._onStateChanged();
|
}));
|
||||||
|
this._updateRunningStyle();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy: function() {
|
_onDestroy: function() {
|
||||||
@ -1588,7 +1589,7 @@ const AppIcon = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_onStateChanged: function() {
|
_updateRunningStyle: function() {
|
||||||
if (this.app.state != Shell.AppState.STOPPED)
|
if (this.app.state != Shell.AppState.STOPPED)
|
||||||
this.actor.add_style_class_name('running');
|
this.actor.add_style_class_name('running');
|
||||||
else
|
else
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
@ -251,11 +252,24 @@ const DBusEventSource = new Lang.Class({
|
|||||||
this._initialized = false;
|
this._initialized = false;
|
||||||
this._dbusProxy = new CalendarServer();
|
this._dbusProxy = new CalendarServer();
|
||||||
this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) {
|
this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) {
|
||||||
|
let loaded = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this._dbusProxy.init_finish(result);
|
this._dbusProxy.init_finish(result);
|
||||||
|
loaded = true;
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
log('Error loading calendars: ' + e.message);
|
if (e.matches(Gio.DBusError, Gio.DBusError.TIMED_OUT)) {
|
||||||
return;
|
// Ignore timeouts and install signals as normal, because with high
|
||||||
|
// probability the service will appear later on, and we will get a
|
||||||
|
// NameOwnerChanged which will finish loading
|
||||||
|
//
|
||||||
|
// (But still _initialized to false, because the proxy does not know
|
||||||
|
// about the HasCalendars property and would cause an exception trying
|
||||||
|
// to read it)
|
||||||
|
} else {
|
||||||
|
log('Error loading calendars: ' + e.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged));
|
this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged));
|
||||||
@ -271,9 +285,11 @@ const DBusEventSource = new Lang.Class({
|
|||||||
this.emit('notify::has-calendars');
|
this.emit('notify::has-calendars');
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._initialized = true;
|
this._initialized = loaded;
|
||||||
this.emit('notify::has-calendars');
|
if (loaded) {
|
||||||
this._onNameAppeared();
|
this.emit('notify::has-calendars');
|
||||||
|
this._onNameAppeared();
|
||||||
|
}
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -295,6 +311,7 @@ const DBusEventSource = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onNameAppeared: function(owner) {
|
_onNameAppeared: function(owner) {
|
||||||
|
this._initialized = true;
|
||||||
this._resetCache();
|
this._resetCache();
|
||||||
this._loadEvents(true);
|
this._loadEvents(true);
|
||||||
},
|
},
|
||||||
@ -731,6 +748,8 @@ const EventsList = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_addEvent: function(event, index, includeDayName, periodBegin, periodEnd) {
|
_addEvent: function(event, index, includeDayName, periodBegin, periodEnd) {
|
||||||
|
let eventBox = new St.BoxLayout();
|
||||||
|
eventBox.set_vertical(false);
|
||||||
let dayString;
|
let dayString;
|
||||||
if (includeDayName) {
|
if (includeDayName) {
|
||||||
if (event.date >= periodBegin)
|
if (event.date >= periodBegin)
|
||||||
@ -751,7 +770,7 @@ const EventsList = new Lang.Class({
|
|||||||
let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL;
|
let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL;
|
||||||
|
|
||||||
let layout = this.actor.layout_manager;
|
let layout = this.actor.layout_manager;
|
||||||
layout.attach(dayLabel, rtl ? 2 : 0, index, 1, 1);
|
eventBox.add_actor(dayLabel);
|
||||||
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
|
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
|
||||||
let timeString = _formatEventTime(event, clockFormat, periodBegin, periodEnd);
|
let timeString = _formatEventTime(event, clockFormat, periodBegin, periodEnd);
|
||||||
let timeLabel = new St.Label({ style_class: 'events-day-time',
|
let timeLabel = new St.Label({ style_class: 'events-day-time',
|
||||||
@ -771,11 +790,12 @@ const EventsList = new Lang.Class({
|
|||||||
if (event.allDay || event.end <= periodEnd)
|
if (event.allDay || event.end <= periodEnd)
|
||||||
postEllipsisLabel.opacity = 0;
|
postEllipsisLabel.opacity = 0;
|
||||||
|
|
||||||
let timeLabelBoxLayout = new St.BoxLayout();
|
let timeLabelBoxLayout = new St.BoxLayout({ x_align: Clutter.ActorAlign.START });
|
||||||
timeLabelBoxLayout.add(preEllipsisLabel);
|
timeLabelBoxLayout.add(preEllipsisLabel);
|
||||||
timeLabelBoxLayout.add(timeLabel);
|
timeLabelBoxLayout.add(timeLabel);
|
||||||
timeLabelBoxLayout.add(postEllipsisLabel);
|
timeLabelBoxLayout.add(postEllipsisLabel);
|
||||||
layout.attach(timeLabelBoxLayout, 1, index, 1, 1);
|
timeLabelBoxLayout.set_size(50, 1);
|
||||||
|
eventBox.add_actor(timeLabelBoxLayout);
|
||||||
|
|
||||||
let titleLabel = new St.Label({ style_class: 'events-day-task',
|
let titleLabel = new St.Label({ style_class: 'events-day-task',
|
||||||
text: event.summary,
|
text: event.summary,
|
||||||
@ -783,7 +803,8 @@ const EventsList = new Lang.Class({
|
|||||||
titleLabel.clutter_text.line_wrap = true;
|
titleLabel.clutter_text.line_wrap = true;
|
||||||
titleLabel.clutter_text.ellipsize = false;
|
titleLabel.clutter_text.ellipsize = false;
|
||||||
|
|
||||||
layout.attach(titleLabel, rtl ? 0 : 2, index, 1, 1);
|
eventBox.add_actor(titleLabel);
|
||||||
|
this._eventListBox.add_actor(eventBox);
|
||||||
},
|
},
|
||||||
|
|
||||||
_addPeriod: function(header, index, periodBegin, periodEnd, includeDayName, showNothingScheduled) {
|
_addPeriod: function(header, index, periodBegin, periodEnd, includeDayName, showNothingScheduled) {
|
||||||
@ -793,8 +814,7 @@ const EventsList = new Lang.Class({
|
|||||||
return index;
|
return index;
|
||||||
|
|
||||||
let label = new St.Label({ style_class: 'events-day-header', text: header });
|
let label = new St.Label({ style_class: 'events-day-header', text: header });
|
||||||
let layout = this.actor.layout_manager;
|
this._eventListBox.add_actor(label);
|
||||||
layout.attach(label, 0, index, 3, 1);
|
|
||||||
index++;
|
index++;
|
||||||
|
|
||||||
for (let n = 0; n < events.length; n++) {
|
for (let n = 0; n < events.length; n++) {
|
||||||
@ -813,8 +833,6 @@ const EventsList = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_showOtherDay: function(day) {
|
_showOtherDay: function(day) {
|
||||||
this.actor.destroy_all_children();
|
|
||||||
|
|
||||||
let dayBegin = _getBeginningOfDay(day);
|
let dayBegin = _getBeginningOfDay(day);
|
||||||
let dayEnd = _getEndOfDay(day);
|
let dayEnd = _getEndOfDay(day);
|
||||||
|
|
||||||
@ -830,7 +848,6 @@ const EventsList = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_showToday: function() {
|
_showToday: function() {
|
||||||
this.actor.destroy_all_children();
|
|
||||||
let index = 0;
|
let index = 0;
|
||||||
|
|
||||||
let now = new Date();
|
let now = new Date();
|
||||||
@ -875,6 +892,24 @@ const EventsList = new Lang.Class({
|
|||||||
if (this._eventSource.isLoading)
|
if (this._eventSource.isLoading)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this.actor.destroy_all_children();
|
||||||
|
|
||||||
|
let layout = this.actor.layout_manager;
|
||||||
|
|
||||||
|
this._eventListContainer = new St.BoxLayout({ x_expand: true, y_expand: true });
|
||||||
|
this._eventListContainer.set_vertical(true);
|
||||||
|
|
||||||
|
this._eventListBox = new St.BoxLayout();
|
||||||
|
this._eventListBox.set_vertical(true);
|
||||||
|
|
||||||
|
let eventScrollView = new St.ScrollView({style_class: 'vfade',
|
||||||
|
hscrollbar_policy: Gtk.PolicyType.NEVER,
|
||||||
|
vscrollbar_policy: Gtk.PolicyType.AUTOMATIC});
|
||||||
|
eventScrollView.add_actor(this._eventListBox);
|
||||||
|
this._eventListContainer.add_actor(eventScrollView);
|
||||||
|
|
||||||
|
layout.attach(this._eventListContainer, 0, 0, 1, 1);
|
||||||
|
|
||||||
let today = new Date();
|
let today = new Date();
|
||||||
if (_sameDay (this._date, today)) {
|
if (_sameDay (this._date, today)) {
|
||||||
this._showToday();
|
this._showToday();
|
||||||
|
@ -604,9 +604,15 @@ const NetworkAgent = new Lang.Class({
|
|||||||
Name: 'NetworkAgent',
|
Name: 'NetworkAgent',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent',
|
try {
|
||||||
capabilities: NMClient.SecretAgentCapabilities.VPN_HINTS
|
this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent',
|
||||||
});
|
capabilities: NMClient.SecretAgentCapabilities.VPN_HINTS
|
||||||
|
});
|
||||||
|
} catch(e) {
|
||||||
|
// Support older versions without NetworkAgent:capabilities
|
||||||
|
this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
this._dialogs = { };
|
this._dialogs = { };
|
||||||
this._vpnRequests = { };
|
this._vpnRequests = { };
|
||||||
|
@ -59,7 +59,7 @@ const DateMenuButton = new Lang.Class({
|
|||||||
|
|
||||||
// Fill up the first column
|
// Fill up the first column
|
||||||
|
|
||||||
vbox = new St.BoxLayout({vertical: true});
|
vbox = new St.BoxLayout({vertical: true, x_expand: true, y_expand: true });
|
||||||
hbox.add(vbox);
|
hbox.add(vbox);
|
||||||
|
|
||||||
// Date
|
// Date
|
||||||
@ -96,11 +96,11 @@ const DateMenuButton = new Lang.Class({
|
|||||||
|
|
||||||
this._openCalendarItem = new PopupMenu.PopupMenuItem(_("Open Calendar"));
|
this._openCalendarItem = new PopupMenu.PopupMenuItem(_("Open Calendar"));
|
||||||
this._openCalendarItem.connect('activate', Lang.bind(this, this._onOpenCalendarActivate));
|
this._openCalendarItem.connect('activate', Lang.bind(this, this._onOpenCalendarActivate));
|
||||||
vbox.add(this._openCalendarItem.actor, {y_align: St.Align.END, expand: true, y_fill: false});
|
vbox.add(this._openCalendarItem.actor, {y_align: St.Align.END, expand: false, y_fill: false});
|
||||||
|
|
||||||
this._openClocksItem = new PopupMenu.PopupMenuItem(_("Open Clocks"));
|
this._openClocksItem = new PopupMenu.PopupMenuItem(_("Open Clocks"));
|
||||||
this._openClocksItem.connect('activate', Lang.bind(this, this._onOpenClocksActivate));
|
this._openClocksItem.connect('activate', Lang.bind(this, this._onOpenClocksActivate));
|
||||||
vbox.add(this._openClocksItem.actor, {y_align: St.Align.END, expand: true, y_fill: false});
|
vbox.add(this._openClocksItem.actor, {y_align: St.Align.END, expand: false, y_fill: false});
|
||||||
|
|
||||||
Shell.AppSystem.get_default().connect('installed-changed',
|
Shell.AppSystem.get_default().connect('installed-changed',
|
||||||
Lang.bind(this, this._appInstalledChanged));
|
Lang.bind(this, this._appInstalledChanged));
|
||||||
@ -147,7 +147,7 @@ const DateMenuButton = new Lang.Class({
|
|||||||
let now = new Date();
|
let now = new Date();
|
||||||
return now.getYear() == date.getYear() &&
|
return now.getYear() == date.getYear() &&
|
||||||
now.getMonth() == date.getMonth() &&
|
now.getMonth() == date.getMonth() &&
|
||||||
now.getDay() == date.getDay();
|
now.getDate() == date.getDate();
|
||||||
},
|
},
|
||||||
|
|
||||||
_appInstalledChanged: function() {
|
_appInstalledChanged: function() {
|
||||||
|
@ -6,6 +6,8 @@ const Meta = imports.gi.Meta;
|
|||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
const EDGE_THRESHOLD = 20;
|
const EDGE_THRESHOLD = 20;
|
||||||
const DRAG_DISTANCE = 80;
|
const DRAG_DISTANCE = 80;
|
||||||
|
|
||||||
@ -13,9 +15,10 @@ const EdgeDragAction = new Lang.Class({
|
|||||||
Name: 'EdgeDragAction',
|
Name: 'EdgeDragAction',
|
||||||
Extends: Clutter.GestureAction,
|
Extends: Clutter.GestureAction,
|
||||||
|
|
||||||
_init : function(side) {
|
_init : function(side, allowedModes) {
|
||||||
this.parent();
|
this.parent();
|
||||||
this._side = side;
|
this._side = side;
|
||||||
|
this._allowedModes = allowedModes;
|
||||||
this.set_n_touch_points(1);
|
this.set_n_touch_points(1);
|
||||||
|
|
||||||
global.display.connect('grab-op-begin', Lang.bind(this, function() {
|
global.display.connect('grab-op-begin', Lang.bind(this, function() {
|
||||||
@ -34,6 +37,9 @@ const EdgeDragAction = new Lang.Class({
|
|||||||
if (this.get_n_current_points() == 0)
|
if (this.get_n_current_points() == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (!(this._allowedModes & Main.keybindingMode))
|
||||||
|
return false;
|
||||||
|
|
||||||
let [x, y] = this.get_press_coords(0);
|
let [x, y] = this.get_press_coords(0);
|
||||||
let monitorRect = this._getMonitorRect(x, y);
|
let monitorRect = this._getMonitorRect(x, y);
|
||||||
|
|
||||||
|
@ -1951,7 +1951,9 @@ const MessageTray = new Lang.Class({
|
|||||||
this._messageTrayMenuButton.actor.connect('key-press-event',
|
this._messageTrayMenuButton.actor.connect('key-press-event',
|
||||||
Lang.bind(this, this._onTrayButtonKeyPress));
|
Lang.bind(this, this._onTrayButtonKeyPress));
|
||||||
|
|
||||||
let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM);
|
let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM,
|
||||||
|
Shell.KeyBindingMode.NORMAL |
|
||||||
|
Shell.KeyBindingMode.OVERVIEW);
|
||||||
gesture.connect('activated', Lang.bind(this, this.toggle));
|
gesture.connect('activated', Lang.bind(this, this.toggle));
|
||||||
global.stage.add_action(gesture);
|
global.stage.add_action(gesture);
|
||||||
},
|
},
|
||||||
|
@ -1866,7 +1866,7 @@ const NMApplet = new Lang.Class({
|
|||||||
_connectionRemoved: function(connection) {
|
_connectionRemoved: function(connection) {
|
||||||
let pos = this._connections.indexOf(connection);
|
let pos = this._connections.indexOf(connection);
|
||||||
if (pos != -1)
|
if (pos != -1)
|
||||||
this._connections.splice(connection, 1);
|
this._connections.splice(pos, 1);
|
||||||
|
|
||||||
let section = connection._section;
|
let section = connection._section;
|
||||||
|
|
||||||
|
@ -65,7 +65,8 @@ const ShowOverviewAction = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
vfunc_gesture_prepare : function(action, actor) {
|
vfunc_gesture_prepare : function(action, actor) {
|
||||||
return this.get_n_current_points() == this.get_n_touch_points();
|
return Main.keybindingMode == Shell.KeyBindingMode.NORMAL &&
|
||||||
|
this.get_n_current_points() == this.get_n_touch_points();
|
||||||
},
|
},
|
||||||
|
|
||||||
_getBoundingRect : function(motion) {
|
_getBoundingRect : function(motion) {
|
||||||
@ -193,8 +194,10 @@ const ViewSelector = new Lang.Class({
|
|||||||
// the windows to animate, but now we no longer want to
|
// the windows to animate, but now we no longer want to
|
||||||
// show it given that we are now on the apps page or
|
// show it given that we are now on the apps page or
|
||||||
// search page.
|
// search page.
|
||||||
if (this._activePage != this._workspacesPage)
|
if (this._activePage != this._workspacesPage) {
|
||||||
this._workspacesPage.opacity = 0;
|
this._workspacesPage.opacity = 0;
|
||||||
|
this._workspacesPage.hide();
|
||||||
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
Main.wm.addKeybinding('toggle-application-view',
|
Main.wm.addKeybinding('toggle-application-view',
|
||||||
@ -213,7 +216,8 @@ const ViewSelector = new Lang.Class({
|
|||||||
|
|
||||||
let gesture;
|
let gesture;
|
||||||
|
|
||||||
gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT);
|
gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT,
|
||||||
|
Shell.KeyBindingMode.NORMAL);
|
||||||
gesture.connect('activated', Lang.bind(this, function() {
|
gesture.connect('activated', Lang.bind(this, function() {
|
||||||
if (Main.overview.visible)
|
if (Main.overview.visible)
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
|
@ -478,7 +478,9 @@ const WorkspaceSwitchAction = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
vfunc_gesture_prepare : function(action, actor) {
|
vfunc_gesture_prepare : function(action, actor) {
|
||||||
return this.get_n_current_points() == this.get_n_touch_points();
|
let allowedModes = Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.OVERVIEW;
|
||||||
|
return this.get_n_current_points() == this.get_n_touch_points() &&
|
||||||
|
(allowedModes & Main.keybindingMode);
|
||||||
},
|
},
|
||||||
|
|
||||||
vfunc_gesture_end : function(action, actor) {
|
vfunc_gesture_end : function(action, actor) {
|
||||||
@ -526,7 +528,7 @@ const AppSwitchAction = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
vfunc_gesture_prepare : function(action, actor) {
|
vfunc_gesture_prepare : function(action, actor) {
|
||||||
if (Main.overview.visible) {
|
if (Main.keybindingMode != Shell.KeyBindingMode.NORMAL) {
|
||||||
this.cancel();
|
this.cancel();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -176,18 +176,54 @@ static void
|
|||||||
calendar_sources_init (CalendarSources *sources)
|
calendar_sources_init (CalendarSources *sources)
|
||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
GDBusConnection *session_bus;
|
||||||
|
GVariant *result;
|
||||||
|
|
||||||
sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
|
sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
|
||||||
|
|
||||||
/* XXX Not sure what to do if this fails.
|
/* WORKAROUND: the hardcoded timeout for e_source_registry_new_sync()
|
||||||
* Should this class implement GInitable or pass the
|
(and other library calls that eventually call g_dbus_proxy_new[_sync]())
|
||||||
* registry in as a G_PARAM_CONSTRUCT_ONLY property? */
|
is 25 seconds. This has been shown to be too small for
|
||||||
sources->priv->registry = e_source_registry_new_sync (NULL, &error);
|
evolution-source-registry in certain cases (slow disk, concurrent IO,
|
||||||
|
many configured sources), so we first ensure that the service
|
||||||
|
starts with a manual call and a higher timeout.
|
||||||
|
|
||||||
|
HACK: every time the DBus API is bumped in e-d-s we need
|
||||||
|
to update this!
|
||||||
|
*/
|
||||||
|
session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
||||||
|
if (session_bus == NULL)
|
||||||
|
{
|
||||||
|
g_error ("Failed to connect to the session bus: %s", error->message);
|
||||||
|
}
|
||||||
|
|
||||||
|
result = g_dbus_connection_call_sync (session_bus, "org.freedesktop.DBus",
|
||||||
|
"/", "org.freedesktop.DBus",
|
||||||
|
"StartServiceByName",
|
||||||
|
g_variant_new ("(su)",
|
||||||
|
"org.gnome.evolution.dataserver.Sources3",
|
||||||
|
0),
|
||||||
|
NULL,
|
||||||
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
|
60 * 1000,
|
||||||
|
NULL, &error);
|
||||||
|
if (result != NULL)
|
||||||
|
{
|
||||||
|
g_variant_unref (result);
|
||||||
|
sources->priv->registry = e_source_registry_new_sync (NULL, &error);
|
||||||
|
}
|
||||||
|
|
||||||
if (error != NULL)
|
if (error != NULL)
|
||||||
{
|
{
|
||||||
g_error ("%s: %s", G_STRFUNC, error->message);
|
/* Any error is fatal, but we don't want to crash gnome-shell-calendar-server
|
||||||
|
because of e-d-s problems. So just exit here.
|
||||||
|
*/
|
||||||
|
g_warning ("Failed to start evolution-source-registry: %s", error->message);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_object_unref (session_bus);
|
||||||
|
|
||||||
sources->priv->source_added_id = g_signal_connect (sources->priv->registry,
|
sources->priv->source_added_id = g_signal_connect (sources->priv->registry,
|
||||||
"source-added",
|
"source-added",
|
||||||
G_CALLBACK (calendar_sources_registry_source_changed_cb),
|
G_CALLBACK (calendar_sources_registry_source_changed_cb),
|
||||||
|
Reference in New Issue
Block a user