Compare commits
	
		
			44 Commits
		
	
	
		
			wip/fmuell
			...
			gnome-3-14
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					687a2daed8 | ||
| 
						 | 
					9c5d51cce2 | ||
| 
						 | 
					b8ee69fac7 | ||
| 
						 | 
					3169142c78 | ||
| 
						 | 
					e8df2d3f8b | ||
| 
						 | 
					256b8e0a50 | ||
| 
						 | 
					0241ec7f13 | ||
| 
						 | 
					71daa39349 | ||
| 
						 | 
					92e0cc1008 | ||
| 
						 | 
					d19e78af24 | ||
| 
						 | 
					4b0cbafdcd | ||
| 
						 | 
					c01ec075ab | ||
| 
						 | 
					c4b2968f9f | ||
| 
						 | 
					eab8ea9a1e | ||
| 
						 | 
					6ecaf0e0fc | ||
| 
						 | 
					840482c750 | ||
| 
						 | 
					681e1b2075 | ||
| 
						 | 
					bff6f71488 | ||
| 
						 | 
					0adf3b84a7 | ||
| 
						 | 
					fd635ba933 | ||
| 
						 | 
					fd4f2f405f | ||
| 
						 | 
					1a30f1b2f0 | ||
| 
						 | 
					412d40f844 | ||
| 
						 | 
					3dff544396 | ||
| 
						 | 
					7e7eab2bea | ||
| 
						 | 
					c568b44997 | ||
| 
						 | 
					ce818c0ae5 | ||
| 
						 | 
					ef2e301c08 | ||
| 
						 | 
					ba274f42b2 | ||
| 
						 | 
					2ceaa05a5a | ||
| 
						 | 
					047e454a7c | ||
| 
						 | 
					86618ce1f9 | ||
| 
						 | 
					59724c5dd5 | ||
| 
						 | 
					3bb500fed4 | ||
| 
						 | 
					dcd3945bb7 | ||
| 
						 | 
					f414f616c4 | ||
| 
						 | 
					e21e90c5e6 | ||
| 
						 | 
					1e7b2ef51f | ||
| 
						 | 
					c291de7479 | ||
| 
						 | 
					aee1a18270 | ||
| 
						 | 
					6c67f26e7d | ||
| 
						 | 
					deb651acbf | ||
| 
						 | 
					d2011f6d7f | ||
| 
						 | 
					416adec904 | 
							
								
								
									
										50
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,3 +1,53 @@
 | 
			
		||||
3.14.4
 | 
			
		||||
======
 | 
			
		||||
* Fix erroneous week numbers in calendar [Florian; #736722]
 | 
			
		||||
* Make slider scrolling smoother [Adel; #742648]
 | 
			
		||||
* Fix current day highlight on day change [Sebastian; #742492]
 | 
			
		||||
* Do not wake up the screen for disabled notifications [Florian; #744114]
 | 
			
		||||
* gdm: Fix user list accessibility [Florian; #729603]
 | 
			
		||||
* Work around background corruption with NVIDIA driver [Rui; #739178]
 | 
			
		||||
* Misc. bug fixes [Florian, Rui, Michele; #744575, #743993, #745245, #745570,
 | 
			
		||||
  #737502]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Michele, Adel Gadllah, Sebastian Keller, Rui Matos, Florian Müllner
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Matej Urbančič [sl], Samir Ribic [bs]
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
========
 | 
			
		||||
* Fix handing of SystemBackground [Owen; #738652]
 | 
			
		||||
* Summarize queued up notifications [Devyani; #702460]
 | 
			
		||||
* Plug an animation object leak [Rui; #739252]
 | 
			
		||||
* Improve handling of multi-day events [Andreas; #727302]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Andreas Brauchli, Devyani Kota, Rui Matos, Owen W. Taylor
 | 
			
		||||
 | 
			
		||||
3.14.1
 | 
			
		||||
======
 | 
			
		||||
* Fix pulse animation for scrolled app folders [Florian; #736885]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
AC_PREREQ(2.63)
 | 
			
		||||
AC_INIT([gnome-shell],[3.14.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
 | 
			
		||||
AC_INIT([gnome-shell],[3.14.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
 | 
			
		||||
 | 
			
		||||
AC_CONFIG_HEADERS([config.h])
 | 
			
		||||
AC_CONFIG_SRCDIR([src/shell-global.c])
 | 
			
		||||
@@ -76,7 +76,7 @@ AC_MSG_RESULT($enable_systemd)
 | 
			
		||||
CLUTTER_MIN_VERSION=1.15.90
 | 
			
		||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
 | 
			
		||||
GJS_MIN_VERSION=1.39.0
 | 
			
		||||
MUTTER_MIN_VERSION=3.14.1
 | 
			
		||||
MUTTER_MIN_VERSION=3.14.4
 | 
			
		||||
GTK_MIN_VERSION=3.13.2
 | 
			
		||||
GIO_MIN_VERSION=2.37.0
 | 
			
		||||
LIBECAL_MIN_VERSION=3.5.3
 | 
			
		||||
@@ -232,7 +232,9 @@ esac
 | 
			
		||||
AM_CFLAGS="$AM_CFLAGS $WARN_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_CONFIG_FILES([
 | 
			
		||||
 
 | 
			
		||||
@@ -1494,6 +1494,10 @@ StScrollBar StButton#vhandle:active {
 | 
			
		||||
    text-align: right;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.events-day-time-ellipses {
 | 
			
		||||
    color: rgba(153, 153, 153, 1.0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.events-day-time:rtl {
 | 
			
		||||
    text-align: left;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -193,17 +193,15 @@ const AuthPrompt = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onAskQuestion: function(verifier, serviceName, question, passwordChar) {
 | 
			
		||||
        if (this._preemptiveAnswer) {
 | 
			
		||||
            if (this._queryingService)
 | 
			
		||||
                this._userVerifier.answerQuery(this._queryingService, this._preemptiveAnswer);
 | 
			
		||||
            this._preemptiveAnswer = null;
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (this._queryingService)
 | 
			
		||||
            this.clear();
 | 
			
		||||
 | 
			
		||||
        this._queryingService = serviceName;
 | 
			
		||||
        if (this._preemptiveAnswer) {
 | 
			
		||||
            this._userVerifier.answerQuery(this._queryingService, this._preemptiveAnswer);
 | 
			
		||||
            this._preemptiveAnswer = null;
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        this.setPasswordChar(passwordChar);
 | 
			
		||||
        this.setQuestion(question);
 | 
			
		||||
 | 
			
		||||
@@ -260,6 +258,7 @@ const AuthPrompt = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    _onVerificationComplete: function() {
 | 
			
		||||
        this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
 | 
			
		||||
	this.cancelButton.reactive = false;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onReset: function() {
 | 
			
		||||
@@ -431,6 +430,7 @@ const AuthPrompt = new Lang.Class({
 | 
			
		||||
    reset: function() {
 | 
			
		||||
        let oldStatus = this.verificationStatus;
 | 
			
		||||
        this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
 | 
			
		||||
        this.cancelButton.reactive = true;
 | 
			
		||||
 | 
			
		||||
        if (oldStatus == AuthPromptStatus.VERIFYING)
 | 
			
		||||
            this._userVerifier.cancel();
 | 
			
		||||
@@ -499,6 +499,9 @@ const AuthPrompt = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    cancel: function() {
 | 
			
		||||
        if (this.verificationStatus == AuthPromptStatus.NOT_VERIFYING || this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        this.reset();
 | 
			
		||||
        this.emit('cancelled');
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@ const Clutter = imports.gi.Clutter;
 | 
			
		||||
const Gdm = imports.gi.Gdm;
 | 
			
		||||
const Gio = imports.gi.Gio;
 | 
			
		||||
const GLib = imports.gi.GLib;
 | 
			
		||||
const GObject = imports.gi.GObject;
 | 
			
		||||
const Gtk = imports.gi.Gtk;
 | 
			
		||||
const Lang = imports.lang;
 | 
			
		||||
const Mainloop = imports.mainloop;
 | 
			
		||||
@@ -70,6 +71,9 @@ const UserListItem = new Lang.Class({
 | 
			
		||||
        this._userWidget = new UserWidget.UserWidget(this.user);
 | 
			
		||||
        layout.add(this._userWidget.actor);
 | 
			
		||||
 | 
			
		||||
        this._userWidget.actor.bind_property('label-actor', this.actor, 'label-actor',
 | 
			
		||||
                                             GObject.BindingFlags.SYNC_CREATE);
 | 
			
		||||
 | 
			
		||||
        this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator',
 | 
			
		||||
                                                 scale_x: 0 });
 | 
			
		||||
        layout.add(this._timedLoginIndicator);
 | 
			
		||||
@@ -643,6 +647,8 @@ const LoginDialog = new Lang.Class({
 | 
			
		||||
                                                        realmManager.release();
 | 
			
		||||
                                                    }));
 | 
			
		||||
        this._updateCancelButton();
 | 
			
		||||
 | 
			
		||||
        this._authPrompt.updateSensitivity(true);
 | 
			
		||||
        this._showPrompt();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1564,10 +1564,11 @@ const AppIcon = new Lang.Class({
 | 
			
		||||
        this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
 | 
			
		||||
 | 
			
		||||
        this._menuTimeoutId = 0;
 | 
			
		||||
        this._stateChangedId = this.app.connect('notify::state',
 | 
			
		||||
                                                Lang.bind(this,
 | 
			
		||||
                                                          this._onStateChanged));
 | 
			
		||||
        this._onStateChanged();
 | 
			
		||||
        this._stateChangedId = this.app.connect('notify::state', Lang.bind(this,
 | 
			
		||||
            function () {
 | 
			
		||||
                this._updateRunningStyle();
 | 
			
		||||
            }));
 | 
			
		||||
        this._updateRunningStyle();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onDestroy: function() {
 | 
			
		||||
@@ -1588,7 +1589,7 @@ const AppIcon = new Lang.Class({
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onStateChanged: function() {
 | 
			
		||||
    _updateRunningStyle: function() {
 | 
			
		||||
        if (this.app.state != Shell.AppState.STOPPED)
 | 
			
		||||
            this.actor.add_style_class_name('running');
 | 
			
		||||
        else
 | 
			
		||||
@@ -1657,7 +1658,10 @@ const AppIcon = new Lang.Class({
 | 
			
		||||
                if (!isPoppedUp)
 | 
			
		||||
                    this._onMenuPoppedDown();
 | 
			
		||||
            }));
 | 
			
		||||
            Main.overview.connect('hiding', Lang.bind(this, function () { this._menu.close(); }));
 | 
			
		||||
            let id = Main.overview.connect('hiding', Lang.bind(this, function () { this._menu.close(); }));
 | 
			
		||||
            this.actor.connect('destroy', function() {
 | 
			
		||||
                Main.overview.disconnect(id);
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this._menuManager.addMenu(this._menu);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -106,6 +106,8 @@ const Main = imports.ui.main;
 | 
			
		||||
const Params = imports.misc.params;
 | 
			
		||||
const Tweener = imports.ui.tweener;
 | 
			
		||||
 | 
			
		||||
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
 | 
			
		||||
 | 
			
		||||
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
 | 
			
		||||
const PRIMARY_COLOR_KEY = 'primary-color';
 | 
			
		||||
const SECONDARY_COLOR_KEY = 'secondary-color';
 | 
			
		||||
@@ -160,6 +162,7 @@ const BackgroundCache = new Lang.Class({
 | 
			
		||||
                }));
 | 
			
		||||
                GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
 | 
			
		||||
            }
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let animation = new Animation({ filename: params.filename });
 | 
			
		||||
@@ -452,6 +455,7 @@ const SystemBackground = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        if (_systemBackground == null) {
 | 
			
		||||
            _systemBackground = new Meta.Background({ meta_screen: global.screen });
 | 
			
		||||
            _systemBackground.set_color(DEFAULT_BACKGROUND_COLOR);
 | 
			
		||||
            _systemBackground.set_filename(filename, GDesktopEnums.BackgroundStyle.WALLPAPER);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
 | 
			
		||||
const Clutter = imports.gi.Clutter;
 | 
			
		||||
const Gio = imports.gi.Gio;
 | 
			
		||||
const Gtk = imports.gi.Gtk;
 | 
			
		||||
const GLib = imports.gi.GLib;
 | 
			
		||||
const Lang = imports.lang;
 | 
			
		||||
const St = imports.gi.St;
 | 
			
		||||
@@ -13,6 +14,7 @@ const Shell = imports.gi.Shell;
 | 
			
		||||
 | 
			
		||||
const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
 | 
			
		||||
const SHOW_WEEKDATE_KEY = 'show-weekdate';
 | 
			
		||||
const ELLIPSIS_CHAR = '\u2026';
 | 
			
		||||
 | 
			
		||||
// alias to prevent xgettext from picking up strings translated in GTK+
 | 
			
		||||
const gtk30_ = Gettext_gtk30.gettext;
 | 
			
		||||
@@ -58,19 +60,21 @@ function _getEndOfDay(date) {
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function _formatEventTime(event, clockFormat) {
 | 
			
		||||
function _formatEventTime(event, clockFormat, periodBegin, periodEnd) {
 | 
			
		||||
    let ret;
 | 
			
		||||
    if (event.allDay) {
 | 
			
		||||
    let allDay = (event.allDay || (event.date <= periodBegin && event.end >= periodEnd));
 | 
			
		||||
    if (allDay) {
 | 
			
		||||
        /* Translators: Shown in calendar event list for all day events
 | 
			
		||||
         * Keep it short, best if you can use less then 10 characters
 | 
			
		||||
         */
 | 
			
		||||
        ret = C_("event list time", "All Day");
 | 
			
		||||
    } else {
 | 
			
		||||
        let date = event.date >= periodBegin ? event.date : event.end;
 | 
			
		||||
        switch (clockFormat) {
 | 
			
		||||
        case '24h':
 | 
			
		||||
            /* Translators: Shown in calendar event list, if 24h format,
 | 
			
		||||
               \u2236 is a ratio character, similar to : */
 | 
			
		||||
            ret = event.date.toLocaleFormat(C_("event list time", "%H\u2236%M"));
 | 
			
		||||
            ret = date.toLocaleFormat(C_("event list time", "%H\u2236%M"));
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
@@ -79,30 +83,13 @@ function _formatEventTime(event, clockFormat) {
 | 
			
		||||
            /* Translators: Shown in calendar event list, if 12h format,
 | 
			
		||||
               \u2236 is a ratio character, similar to : and \u2009 is
 | 
			
		||||
               a thin space */
 | 
			
		||||
            ret = event.date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p"));
 | 
			
		||||
            ret = date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p"));
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function _getCalendarWeekForDate(date) {
 | 
			
		||||
    // Based on the algorithms found here:
 | 
			
		||||
    // http://en.wikipedia.org/wiki/Talk:ISO_week_date
 | 
			
		||||
    let midnightDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
 | 
			
		||||
    // Need to get Monday to be 1 ... Sunday to be 7
 | 
			
		||||
    let dayOfWeek = 1 + ((midnightDate.getDay() + 6) % 7);
 | 
			
		||||
    let nearestThursday = new Date(midnightDate.getFullYear(), midnightDate.getMonth(),
 | 
			
		||||
                                   midnightDate.getDate() + (4 - dayOfWeek));
 | 
			
		||||
 | 
			
		||||
    let jan1st = new Date(nearestThursday.getFullYear(), 0, 1);
 | 
			
		||||
    let diffDate = nearestThursday - jan1st;
 | 
			
		||||
    let dayNumber = Math.floor(Math.abs(diffDate) / MSECS_IN_DAY);
 | 
			
		||||
    let weekNumber = Math.floor(dayNumber / 7) + 1;
 | 
			
		||||
 | 
			
		||||
    return weekNumber;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function _getCalendarDayAbbreviation(dayNumber) {
 | 
			
		||||
    let abbreviations = [
 | 
			
		||||
        /* Translators: Calendar grid abbreviation for Sunday.
 | 
			
		||||
@@ -248,11 +235,24 @@ const DBusEventSource = new Lang.Class({
 | 
			
		||||
        this._initialized = false;
 | 
			
		||||
        this._dbusProxy = new CalendarServer();
 | 
			
		||||
        this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) {
 | 
			
		||||
            let loaded = false;
 | 
			
		||||
 | 
			
		||||
            try {
 | 
			
		||||
                this._dbusProxy.init_finish(result);
 | 
			
		||||
                loaded = true;
 | 
			
		||||
            } catch(e) {
 | 
			
		||||
                log('Error loading calendars: ' + e.message);
 | 
			
		||||
                return;
 | 
			
		||||
                if (e.matches(Gio.DBusError, Gio.DBusError.TIMED_OUT)) {
 | 
			
		||||
                    // 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));
 | 
			
		||||
@@ -268,9 +268,11 @@ const DBusEventSource = new Lang.Class({
 | 
			
		||||
                this.emit('notify::has-calendars');
 | 
			
		||||
            }));
 | 
			
		||||
 | 
			
		||||
            this._initialized = true;
 | 
			
		||||
            this.emit('notify::has-calendars');
 | 
			
		||||
            this._onNameAppeared();
 | 
			
		||||
            this._initialized = loaded;
 | 
			
		||||
            if (loaded) {
 | 
			
		||||
                this.emit('notify::has-calendars');
 | 
			
		||||
                this._onNameAppeared();
 | 
			
		||||
            }
 | 
			
		||||
        }));
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -292,6 +294,7 @@ const DBusEventSource = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onNameAppeared: function(owner) {
 | 
			
		||||
        this._initialized = true;
 | 
			
		||||
        this._resetCache();
 | 
			
		||||
        this._loadEvents(true);
 | 
			
		||||
    },
 | 
			
		||||
@@ -361,6 +364,12 @@ const DBusEventSource = new Lang.Class({
 | 
			
		||||
                result.push(event);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        result.sort(function(event1, event2) {
 | 
			
		||||
            // sort events by end time on ending day
 | 
			
		||||
            let d1 = event1.date < begin && event1.end <= end ? event1.end : event1.date;
 | 
			
		||||
            let d2 = event2.date < begin && event2.end <= end ? event2.end : event2.date;
 | 
			
		||||
            return d1.getTime() - d2.getTime();
 | 
			
		||||
        });
 | 
			
		||||
        return result;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -594,6 +603,7 @@ const Calendar = new Lang.Class({
 | 
			
		||||
        beginDate.setHours(12);
 | 
			
		||||
 | 
			
		||||
        this._calendarBegin = new Date(beginDate);
 | 
			
		||||
        this._markedAsToday = now;
 | 
			
		||||
 | 
			
		||||
        let year = beginDate.getYear();
 | 
			
		||||
 | 
			
		||||
@@ -661,7 +671,7 @@ const Calendar = new Lang.Class({
 | 
			
		||||
            this._buttons.push(button);
 | 
			
		||||
 | 
			
		||||
            if (this._useWeekdate && iter.getDay() == 4) {
 | 
			
		||||
                let label = new St.Label({ text: _getCalendarWeekForDate(iter).toString(),
 | 
			
		||||
                let label = new St.Label({ text: iter.toLocaleFormat('%V'),
 | 
			
		||||
                                           style_class: 'calendar-day-base calendar-week-number'});
 | 
			
		||||
                layout.attach(label, rtl ? 7 : 0, row, 1, 1);
 | 
			
		||||
            }
 | 
			
		||||
@@ -685,7 +695,7 @@ const Calendar = new Lang.Class({
 | 
			
		||||
        else
 | 
			
		||||
            this._monthLabel.text = this._selectedDate.toLocaleFormat(this._headerFormat);
 | 
			
		||||
 | 
			
		||||
        if (!this._calendarBegin || !_sameMonth(this._selectedDate, this._calendarBegin))
 | 
			
		||||
        if (!this._calendarBegin || !_sameMonth(this._selectedDate, this._calendarBegin) || !_sameDay(now, this._markedAsToday))
 | 
			
		||||
            this._rebuildCalendar();
 | 
			
		||||
 | 
			
		||||
        this._buttons.forEach(Lang.bind(this, function(button) {
 | 
			
		||||
@@ -721,12 +731,18 @@ const EventsList = new Lang.Class({
 | 
			
		||||
        this._eventSource.connect('changed', Lang.bind(this, this._update));
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _addEvent: function(event, index, includeDayName) {
 | 
			
		||||
    _addEvent: function(event, index, includeDayName, periodBegin, periodEnd) {
 | 
			
		||||
        let eventBox = new St.BoxLayout();
 | 
			
		||||
        eventBox.set_vertical(false);
 | 
			
		||||
        let dayString;
 | 
			
		||||
        if (includeDayName)
 | 
			
		||||
            dayString = _getEventDayAbbreviation(event.date.getDay());
 | 
			
		||||
        else
 | 
			
		||||
        if (includeDayName) {
 | 
			
		||||
            if (event.date >= periodBegin)
 | 
			
		||||
                dayString = _getEventDayAbbreviation(event.date.getDay());
 | 
			
		||||
            else /* show event end day if it began earlier */
 | 
			
		||||
                dayString = _getEventDayAbbreviation(event.end.getDay());
 | 
			
		||||
        } else {
 | 
			
		||||
            dayString = '';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let dayLabel = new St.Label({ style_class: 'events-day-dayname',
 | 
			
		||||
                                      text: dayString,
 | 
			
		||||
@@ -738,17 +754,32 @@ const EventsList = new Lang.Class({
 | 
			
		||||
        let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL;
 | 
			
		||||
 | 
			
		||||
        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 timeString = _formatEventTime(event, clockFormat);
 | 
			
		||||
        let timeString = _formatEventTime(event, clockFormat, periodBegin, periodEnd);
 | 
			
		||||
        let timeLabel = new St.Label({ style_class: 'events-day-time',
 | 
			
		||||
                                       text: timeString,
 | 
			
		||||
                                       y_align: Clutter.ActorAlign.START });
 | 
			
		||||
        timeLabel.clutter_text.line_wrap = false;
 | 
			
		||||
        timeLabel.clutter_text.ellipsize = false;
 | 
			
		||||
 | 
			
		||||
        layout.attach(timeLabel, 1, index, 1, 1);
 | 
			
		||||
        let preEllipsisLabel = new St.Label({ style_class: 'events-day-time-ellipses',
 | 
			
		||||
                                              text: ELLIPSIS_CHAR,
 | 
			
		||||
                                              y_align: Clutter.ActorAlign.START });
 | 
			
		||||
        let postEllipsisLabel = new St.Label({ style_class: 'events-day-time-ellipses',
 | 
			
		||||
                                               text: ELLIPSIS_CHAR,
 | 
			
		||||
                                               y_align: Clutter.ActorAlign.START });
 | 
			
		||||
        if (event.allDay || event.date >= periodBegin)
 | 
			
		||||
            preEllipsisLabel.opacity = 0;
 | 
			
		||||
        if (event.allDay || event.end <= periodEnd)
 | 
			
		||||
            postEllipsisLabel.opacity = 0;
 | 
			
		||||
 | 
			
		||||
        let timeLabelBoxLayout = new St.BoxLayout({ x_align: Clutter.ActorAlign.START });
 | 
			
		||||
        timeLabelBoxLayout.add(preEllipsisLabel);
 | 
			
		||||
        timeLabelBoxLayout.add(timeLabel);
 | 
			
		||||
        timeLabelBoxLayout.add(postEllipsisLabel);
 | 
			
		||||
        timeLabelBoxLayout.set_size(50, 1);
 | 
			
		||||
        eventBox.add_actor(timeLabelBoxLayout);
 | 
			
		||||
 | 
			
		||||
        let titleLabel = new St.Label({ style_class: 'events-day-task',
 | 
			
		||||
                                        text: event.summary,
 | 
			
		||||
@@ -756,30 +787,29 @@ const EventsList = new Lang.Class({
 | 
			
		||||
        titleLabel.clutter_text.line_wrap = true;
 | 
			
		||||
        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, begin, end, includeDayName, showNothingScheduled) {
 | 
			
		||||
        let events = this._eventSource.getEvents(begin, end);
 | 
			
		||||
    _addPeriod: function(header, index, periodBegin, periodEnd, includeDayName, showNothingScheduled) {
 | 
			
		||||
        let events = this._eventSource.getEvents(periodBegin, periodEnd);
 | 
			
		||||
 | 
			
		||||
        if (events.length == 0 && !showNothingScheduled)
 | 
			
		||||
            return index;
 | 
			
		||||
 | 
			
		||||
        let label = new St.Label({ style_class: 'events-day-header', text: header });
 | 
			
		||||
        let layout = this.actor.layout_manager;
 | 
			
		||||
        layout.attach(label, 0, index, 3, 1);
 | 
			
		||||
        this._eventListBox.add_actor(label);
 | 
			
		||||
        index++;
 | 
			
		||||
 | 
			
		||||
        for (let n = 0; n < events.length; n++) {
 | 
			
		||||
            this._addEvent(events[n], index, includeDayName);
 | 
			
		||||
            this._addEvent(events[n], index, includeDayName, periodBegin, periodEnd);
 | 
			
		||||
            index++;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (events.length == 0 && showNothingScheduled) {
 | 
			
		||||
            let now = new Date();
 | 
			
		||||
            /* Translators: Text to show if there are no events */
 | 
			
		||||
            let nothingEvent = new CalendarEvent(now, now, _("Nothing Scheduled"), true);
 | 
			
		||||
            this._addEvent(nothingEvent, index, false);
 | 
			
		||||
            let nothingEvent = new CalendarEvent(periodBegin, periodBegin, _("Nothing Scheduled"), true);
 | 
			
		||||
            this._addEvent(nothingEvent, index, false, periodBegin, periodEnd);
 | 
			
		||||
            index++;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -787,8 +817,6 @@ const EventsList = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _showOtherDay: function(day) {
 | 
			
		||||
        this.actor.destroy_all_children();
 | 
			
		||||
 | 
			
		||||
        let dayBegin = _getBeginningOfDay(day);
 | 
			
		||||
        let dayEnd = _getEndOfDay(day);
 | 
			
		||||
 | 
			
		||||
@@ -804,7 +832,6 @@ const EventsList = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _showToday: function() {
 | 
			
		||||
        this.actor.destroy_all_children();
 | 
			
		||||
        let index = 0;
 | 
			
		||||
 | 
			
		||||
        let now = new Date();
 | 
			
		||||
@@ -849,6 +876,24 @@ const EventsList = new Lang.Class({
 | 
			
		||||
        if (this._eventSource.isLoading)
 | 
			
		||||
            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();
 | 
			
		||||
        if (_sameDay (this._date, today)) {
 | 
			
		||||
            this._showToday();
 | 
			
		||||
 
 | 
			
		||||
@@ -604,9 +604,15 @@ const NetworkAgent = new Lang.Class({
 | 
			
		||||
    Name: 'NetworkAgent',
 | 
			
		||||
 | 
			
		||||
    _init: function() {
 | 
			
		||||
        this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent',
 | 
			
		||||
                                                capabilities: NMClient.SecretAgentCapabilities.VPN_HINTS
 | 
			
		||||
                                              });
 | 
			
		||||
        try {
 | 
			
		||||
            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._vpnRequests = { };
 | 
			
		||||
 
 | 
			
		||||
@@ -513,10 +513,13 @@ const Dash = new Lang.Class({
 | 
			
		||||
            this._syncLabel(item, appIcon);
 | 
			
		||||
        }));
 | 
			
		||||
 | 
			
		||||
        Main.overview.connect('hiding', Lang.bind(this, function() {
 | 
			
		||||
        let id = Main.overview.connect('hiding', Lang.bind(this, function() {
 | 
			
		||||
            this._labelShowing = false;
 | 
			
		||||
            item.hideLabel();
 | 
			
		||||
        }));
 | 
			
		||||
        item.child.connect('destroy', function() {
 | 
			
		||||
            Main.overview.disconnect(id);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        if (appIcon) {
 | 
			
		||||
            appIcon.connect('sync-tooltip', Lang.bind(this, function() {
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@ const DateMenuButton = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        // 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);
 | 
			
		||||
 | 
			
		||||
        // Date
 | 
			
		||||
@@ -96,11 +96,11 @@ const DateMenuButton = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this._openCalendarItem = new PopupMenu.PopupMenuItem(_("Open Calendar"));
 | 
			
		||||
        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.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',
 | 
			
		||||
                                              Lang.bind(this, this._appInstalledChanged));
 | 
			
		||||
@@ -147,7 +147,7 @@ const DateMenuButton = new Lang.Class({
 | 
			
		||||
        let now = new Date();
 | 
			
		||||
        return now.getYear() == date.getYear() &&
 | 
			
		||||
               now.getMonth() == date.getMonth() &&
 | 
			
		||||
               now.getDay() == date.getDay();
 | 
			
		||||
               now.getDate() == date.getDate();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _appInstalledChanged: function() {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,8 @@ const Meta = imports.gi.Meta;
 | 
			
		||||
const Clutter = imports.gi.Clutter;
 | 
			
		||||
const St = imports.gi.St;
 | 
			
		||||
 | 
			
		||||
const Main = imports.ui.main;
 | 
			
		||||
 | 
			
		||||
const EDGE_THRESHOLD = 20;
 | 
			
		||||
const DRAG_DISTANCE = 80;
 | 
			
		||||
 | 
			
		||||
@@ -13,9 +15,10 @@ const EdgeDragAction = new Lang.Class({
 | 
			
		||||
    Name: 'EdgeDragAction',
 | 
			
		||||
    Extends: Clutter.GestureAction,
 | 
			
		||||
 | 
			
		||||
    _init : function(side) {
 | 
			
		||||
    _init : function(side, allowedModes) {
 | 
			
		||||
        this.parent();
 | 
			
		||||
        this._side = side;
 | 
			
		||||
        this._allowedModes = allowedModes;
 | 
			
		||||
        this.set_n_touch_points(1);
 | 
			
		||||
 | 
			
		||||
        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)
 | 
			
		||||
            return false;
 | 
			
		||||
 | 
			
		||||
        if (!(this._allowedModes & Main.keybindingMode))
 | 
			
		||||
            return false;
 | 
			
		||||
 | 
			
		||||
        let [x, y] = this.get_press_coords(0);
 | 
			
		||||
        let monitorRect = this._getMonitorRect(x, y);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@ const St = imports.gi.St;
 | 
			
		||||
 | 
			
		||||
const Background = imports.ui.background;
 | 
			
		||||
const BackgroundMenu = imports.ui.backgroundMenu;
 | 
			
		||||
const LoginManager = imports.misc.loginManager;
 | 
			
		||||
 | 
			
		||||
const DND = imports.ui.dnd;
 | 
			
		||||
const Main = imports.ui.main;
 | 
			
		||||
@@ -20,7 +21,6 @@ const Tweener = imports.ui.tweener;
 | 
			
		||||
const STARTUP_ANIMATION_TIME = 0.5;
 | 
			
		||||
const KEYBOARD_ANIMATION_TIME = 0.15;
 | 
			
		||||
const BACKGROUND_FADE_ANIMATION_TIME = 1.0;
 | 
			
		||||
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
 | 
			
		||||
 | 
			
		||||
// The message tray takes this much pressure
 | 
			
		||||
// in the pressure barrier at once to release it.
 | 
			
		||||
@@ -160,10 +160,10 @@ const LayoutManager = new Lang.Class({
 | 
			
		||||
        this._isPopupWindowVisible = false;
 | 
			
		||||
        this._startingUp = true;
 | 
			
		||||
 | 
			
		||||
        // Normally, the stage is always covered so Clutter doesn't need to clear
 | 
			
		||||
        // it; however it becomes visible during the startup animation
 | 
			
		||||
        // See the comment below for a longer explanation
 | 
			
		||||
        global.stage.background_color = DEFAULT_BACKGROUND_COLOR;
 | 
			
		||||
        // We don't want to paint the stage background color because either
 | 
			
		||||
        // the SystemBackground we create or the MetaBackgroundActor inside
 | 
			
		||||
        // global.window_group covers the entirety of the screen.
 | 
			
		||||
        global.stage.no_clear_hint = true;
 | 
			
		||||
 | 
			
		||||
        // Set up stage hierarchy to group all UI actors under one container.
 | 
			
		||||
        this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' });
 | 
			
		||||
@@ -249,6 +249,18 @@ const LayoutManager = new Lang.Class({
 | 
			
		||||
        global.screen.connect('in-fullscreen-changed',
 | 
			
		||||
                              Lang.bind(this, this._updateFullscreen));
 | 
			
		||||
        this._monitorsChanged();
 | 
			
		||||
 | 
			
		||||
        // NVIDIA drivers don't preserve FBO contents across
 | 
			
		||||
        // suspend/resume, see
 | 
			
		||||
        // https://bugzilla.gnome.org/show_bug.cgi?id=739178
 | 
			
		||||
        if (Shell.util_need_background_refresh()) {
 | 
			
		||||
            LoginManager.getLoginManager().connect('prepare-for-sleep',
 | 
			
		||||
                                                   function(lm, suspending) {
 | 
			
		||||
                                                       if (suspending)
 | 
			
		||||
                                                           return;
 | 
			
		||||
                                                       Meta.Background.refresh_all();
 | 
			
		||||
                                                   });
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // This is called by Main after everything else is constructed
 | 
			
		||||
@@ -591,10 +603,6 @@ const LayoutManager = new Lang.Class({
 | 
			
		||||
    //
 | 
			
		||||
    // When starting a normal user session, we want to grow it out of the middle
 | 
			
		||||
    // of the screen.
 | 
			
		||||
    //
 | 
			
		||||
    // Usually, we don't want to paint the stage background color because the
 | 
			
		||||
    // MetaBackgroundActor inside global.window_group covers the entirety of the
 | 
			
		||||
    // screen. So, we set no_clear_hint at the end of the animation.
 | 
			
		||||
 | 
			
		||||
    _prepareStartupAnimation: function() {
 | 
			
		||||
        // During the initial transition, add a simple actor to block all events,
 | 
			
		||||
@@ -675,10 +683,6 @@ const LayoutManager = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _startupAnimationComplete: function() {
 | 
			
		||||
        // At this point, the UI group is covering everything, so
 | 
			
		||||
        // we no longer need to clear the stage
 | 
			
		||||
        global.stage.no_clear_hint = true;
 | 
			
		||||
 | 
			
		||||
        this._coverPane.destroy();
 | 
			
		||||
        this._coverPane = null;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1198,12 +1198,7 @@ const ZoomRegion = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        // Add a background for when the magnified uiGroup is scrolled
 | 
			
		||||
        // out of view (don't want to see desktop showing through).
 | 
			
		||||
        this._background = new Clutter.Actor({ background_color: Main.DEFAULT_BACKGROUND_COLOR,
 | 
			
		||||
                                               layout_manager: new Clutter.BinLayout(),
 | 
			
		||||
                                               width: global.screen_width,
 | 
			
		||||
                                               height: global.screen_height });
 | 
			
		||||
        let noiseTexture = (new Background.SystemBackground()).actor;
 | 
			
		||||
        this._background.add_actor(noiseTexture);
 | 
			
		||||
        this._background = (new Background.SystemBackground()).actor;
 | 
			
		||||
        mainGroup.add_actor(this._background);
 | 
			
		||||
 | 
			
		||||
        // Clone the group that contains all of UI on the screen.  This is the
 | 
			
		||||
 
 | 
			
		||||
@@ -40,8 +40,6 @@ const Magnifier = imports.ui.magnifier;
 | 
			
		||||
const XdndHandler = imports.ui.xdndHandler;
 | 
			
		||||
const Util = imports.misc.util;
 | 
			
		||||
 | 
			
		||||
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
 | 
			
		||||
 | 
			
		||||
const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard';
 | 
			
		||||
const STICKY_KEYS_ENABLE = 'stickykeys-enable';
 | 
			
		||||
const GNOMESHELL_STARTED_MESSAGE_ID = 'f3ea493c22934e26811cd62abe8e203a';
 | 
			
		||||
 
 | 
			
		||||
@@ -1951,7 +1951,9 @@ const MessageTray = new Lang.Class({
 | 
			
		||||
        this._messageTrayMenuButton.actor.connect('key-press-event',
 | 
			
		||||
                                                  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));
 | 
			
		||||
        global.stage.add_action(gesture);
 | 
			
		||||
    },
 | 
			
		||||
@@ -2432,8 +2434,22 @@ const MessageTray = new Lang.Class({
 | 
			
		||||
            if (shouldShowNotification && nextNotification) {
 | 
			
		||||
                let limited = this._busy || Main.layoutManager.bottomMonitor.inFullscreen;
 | 
			
		||||
                let showNextNotification = (!limited || nextNotification.forFeedback || nextNotification.urgency == Urgency.CRITICAL);
 | 
			
		||||
                if (showNextNotification)
 | 
			
		||||
                    this._showNotification();
 | 
			
		||||
                if (showNextNotification) {
 | 
			
		||||
                    let len = this._notificationQueue.length;
 | 
			
		||||
                    if (len > 1) {
 | 
			
		||||
                        this._notificationQueue.length = 0;
 | 
			
		||||
                        let source = new SystemNotificationSource();
 | 
			
		||||
                        this.add(source);
 | 
			
		||||
                        let notification = new Notification(source, ngettext("%d new message", "%d new messages", len).format(len));
 | 
			
		||||
                        notification.setTransient(true);
 | 
			
		||||
                        notification.connect('clicked', Lang.bind(this, function() {
 | 
			
		||||
                            this.openTray();
 | 
			
		||||
                        }));
 | 
			
		||||
                        source.notify(notification);
 | 
			
		||||
                    } else {
 | 
			
		||||
                        this._showNotification();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } else if (this._notificationState == State.SHOWN) {
 | 
			
		||||
            let expired = (this._userActiveWhileNotificationShown &&
 | 
			
		||||
 
 | 
			
		||||
@@ -301,7 +301,8 @@ const NotificationsBox = new Lang.Class({
 | 
			
		||||
                             });
 | 
			
		||||
 | 
			
		||||
            this._updateVisibility();
 | 
			
		||||
            this.emit('wake-up-screen');
 | 
			
		||||
            if (obj.sourceBox.visible)
 | 
			
		||||
                this.emit('wake-up-screen');
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -411,6 +411,7 @@ const SearchResults = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this._searchSettings = new Gio.Settings({ schema_id: SEARCH_PROVIDERS_SCHEMA });
 | 
			
		||||
        this._searchSettings.connect('changed::disabled', Lang.bind(this, this._reloadRemoteProviders));
 | 
			
		||||
        this._searchSettings.connect('changed::enabled', Lang.bind(this, this._reloadRemoteProviders));
 | 
			
		||||
        this._searchSettings.connect('changed::disable-external', Lang.bind(this, this._reloadRemoteProviders));
 | 
			
		||||
        this._searchSettings.connect('changed::sort-order', Lang.bind(this, this._reloadRemoteProviders));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -197,7 +197,7 @@ const Slider = new Lang.Class({
 | 
			
		||||
            let [dx, dy] = event.get_scroll_delta();
 | 
			
		||||
            // Even though the slider is horizontal, use dy to match
 | 
			
		||||
            // the UP/DOWN above.
 | 
			
		||||
            delta = -dy / 10;
 | 
			
		||||
            delta = -dy * SLIDER_SCROLL_STEP;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._value = Math.min(Math.max(0, this._value + delta), 1);
 | 
			
		||||
 
 | 
			
		||||
@@ -1866,7 +1866,7 @@ const NMApplet = new Lang.Class({
 | 
			
		||||
    _connectionRemoved: function(connection) {
 | 
			
		||||
        let pos = this._connections.indexOf(connection);
 | 
			
		||||
        if (pos != -1)
 | 
			
		||||
            this._connections.splice(connection, 1);
 | 
			
		||||
            this._connections.splice(pos, 1);
 | 
			
		||||
 | 
			
		||||
        let section = connection._section;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -285,7 +285,7 @@ const Indicator = new Lang.Class({
 | 
			
		||||
        let disabled = Main.sessionMode.isLocked ||
 | 
			
		||||
                       (Main.sessionMode.isGreeter &&
 | 
			
		||||
                        this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY));
 | 
			
		||||
        this._suspendAction.visible = this._haveShutdown && !disabled;
 | 
			
		||||
        this._suspendAction.visible = this._haveSuspend && !disabled;
 | 
			
		||||
        this._updateActionsVisibility();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ const Clutter = imports.gi.Clutter;
 | 
			
		||||
const AccountsService = imports.gi.AccountsService;
 | 
			
		||||
const GLib = imports.gi.GLib;
 | 
			
		||||
const Gio = imports.gi.Gio;
 | 
			
		||||
const GObject = imports.gi.GObject;
 | 
			
		||||
const Lang = imports.lang;
 | 
			
		||||
const St = imports.gi.St;
 | 
			
		||||
 | 
			
		||||
@@ -117,6 +118,7 @@ const UserWidgetLabel = new Lang.Class({
 | 
			
		||||
            this._currentLabel = this._realNameLabel;
 | 
			
		||||
        else
 | 
			
		||||
            this._currentLabel = this._userNameLabel;
 | 
			
		||||
        this.label_actor = this._currentLabel;
 | 
			
		||||
 | 
			
		||||
        let childBox = new Clutter.ActorBox();
 | 
			
		||||
        childBox.x1 = 0;
 | 
			
		||||
@@ -158,6 +160,9 @@ const UserWidget = new Lang.Class({
 | 
			
		||||
        this._label = new UserWidgetLabel(user);
 | 
			
		||||
        this.actor.add_child(this._label);
 | 
			
		||||
 | 
			
		||||
        this._label.bind_property('label-actor', this.actor, 'label-actor',
 | 
			
		||||
                                  GObject.BindingFlags.SYNC_CREATE);
 | 
			
		||||
 | 
			
		||||
        this._userLoadedId = this._user.connect('notify::is-loaded', Lang.bind(this, this._updateUser));
 | 
			
		||||
        this._userChangedId = this._user.connect('changed', Lang.bind(this, this._updateUser));
 | 
			
		||||
        this._updateUser();
 | 
			
		||||
 
 | 
			
		||||
@@ -65,7 +65,8 @@ const ShowOverviewAction = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    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) {
 | 
			
		||||
@@ -193,8 +194,10 @@ const ViewSelector = new Lang.Class({
 | 
			
		||||
                // the windows to animate, but now we no longer want to
 | 
			
		||||
                // show it given that we are now on the apps page or
 | 
			
		||||
                // search page.
 | 
			
		||||
                if (this._activePage != this._workspacesPage)
 | 
			
		||||
                if (this._activePage != this._workspacesPage) {
 | 
			
		||||
                    this._workspacesPage.opacity = 0;
 | 
			
		||||
                    this._workspacesPage.hide();
 | 
			
		||||
                }
 | 
			
		||||
            }));
 | 
			
		||||
 | 
			
		||||
        Main.wm.addKeybinding('toggle-application-view',
 | 
			
		||||
@@ -211,9 +214,13 @@ const ViewSelector = new Lang.Class({
 | 
			
		||||
                              Shell.KeyBindingMode.OVERVIEW,
 | 
			
		||||
                              Lang.bind(Main.overview, Main.overview.toggle));
 | 
			
		||||
 | 
			
		||||
        let gesture;
 | 
			
		||||
 | 
			
		||||
        gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT);
 | 
			
		||||
        let side;
 | 
			
		||||
        if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
 | 
			
		||||
            side = St.Side.RIGHT;
 | 
			
		||||
        else
 | 
			
		||||
            side = St.Side.LEFT;
 | 
			
		||||
        let gesture = new EdgeDragAction.EdgeDragAction(side,
 | 
			
		||||
                                                        Shell.KeyBindingMode.NORMAL);
 | 
			
		||||
        gesture.connect('activated', Lang.bind(this, function() {
 | 
			
		||||
            if (Main.overview.visible)
 | 
			
		||||
                Main.overview.hide();
 | 
			
		||||
 
 | 
			
		||||
@@ -478,7 +478,9 @@ const WorkspaceSwitchAction = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    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) {
 | 
			
		||||
@@ -526,7 +528,7 @@ const AppSwitchAction = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    vfunc_gesture_prepare : function(action, actor) {
 | 
			
		||||
        if (Main.overview.visible) {
 | 
			
		||||
        if (Main.keybindingMode != Shell.KeyBindingMode.NORMAL) {
 | 
			
		||||
            this.cancel();
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -156,7 +156,6 @@ const WindowClone = new Lang.Class({
 | 
			
		||||
        this.actor.add_action(clickAction);
 | 
			
		||||
        this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
 | 
			
		||||
        this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
 | 
			
		||||
        this.actor.connect('enter-event', Lang.bind(this, this._onEnter));
 | 
			
		||||
 | 
			
		||||
        this._draggable = DND.makeDraggable(this.actor,
 | 
			
		||||
                                            { restoreOnSuccess: true,
 | 
			
		||||
@@ -353,10 +352,6 @@ const WindowClone = new Lang.Class({
 | 
			
		||||
        return false;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onEnter: function() {
 | 
			
		||||
        this.actor.grab_key_focus();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onClicked: function(action, actor) {
 | 
			
		||||
        this._activate();
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -538,6 +538,7 @@ const WorkspacesDisplay = new Lang.Class({
 | 
			
		||||
        for (let i = 0; i < this._workspacesViews.length; i++)
 | 
			
		||||
            this._workspacesViews[i].destroy();
 | 
			
		||||
 | 
			
		||||
        this._primaryIndex = Main.layoutManager.primaryIndex;
 | 
			
		||||
        this._workspacesViews = [];
 | 
			
		||||
        let monitors = Main.layoutManager.monitors;
 | 
			
		||||
        for (let i = 0; i < monitors.length; i++) {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ be
 | 
			
		||||
bg
 | 
			
		||||
bn
 | 
			
		||||
bn_IN
 | 
			
		||||
bs
 | 
			
		||||
ca
 | 
			
		||||
ca@valencia
 | 
			
		||||
cs
 | 
			
		||||
@@ -30,6 +31,7 @@ hi
 | 
			
		||||
hu
 | 
			
		||||
ia
 | 
			
		||||
id
 | 
			
		||||
is
 | 
			
		||||
it
 | 
			
		||||
ja
 | 
			
		||||
kk
 | 
			
		||||
@@ -48,6 +50,7 @@ nb
 | 
			
		||||
ne
 | 
			
		||||
nl
 | 
			
		||||
nn
 | 
			
		||||
oc
 | 
			
		||||
or
 | 
			
		||||
pa
 | 
			
		||||
pl
 | 
			
		||||
 
 | 
			
		||||
@@ -1,2 +1,4 @@
 | 
			
		||||
data/org.gnome.shell.evolution.calendar.gschema.xml.in
 | 
			
		||||
src/calendar-server/evolution-calendar.desktop.in
 | 
			
		||||
# Meh, autofools :-(
 | 
			
		||||
sub/src/calendar-server/evolution-calendar.desktop.in
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										166
									
								
								po/sl.po
									
									
									
									
									
								
							
							
						
						
									
										166
									
								
								po/sl.po
									
									
									
									
									
								
							@@ -9,8 +9,8 @@ msgstr ""
 | 
			
		||||
"Project-Id-Version: gnome-shell master\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
 | 
			
		||||
"shell&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2014-09-13 16:14+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2014-09-13 21:02+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2014-12-19 16:26+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2014-12-25 19:18+0100\n"
 | 
			
		||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
 | 
			
		||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
 | 
			
		||||
"Language: Slovenian\n"
 | 
			
		||||
@@ -125,11 +125,11 @@ msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
 | 
			
		||||
msgid "App Picker View"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "Pogled izbirnika programov"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
 | 
			
		||||
msgid "Index of the currently selected view in the application picker."
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "Kazalo trenutno izbranega pogleda v izbirniku programa."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
 | 
			
		||||
msgid "History for command (Alt-F2) dialog"
 | 
			
		||||
@@ -224,6 +224,8 @@ msgstr "Tipkovna bližnjica za prikaz dejavnega obvestila."
 | 
			
		||||
msgid ""
 | 
			
		||||
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Tipkovna bližnjica,  ki omogoča ustavljanje in ponovni zagon vseh zagnanih "
 | 
			
		||||
"programov  za razhroščevanje."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
 | 
			
		||||
msgid "Which keyboard to use"
 | 
			
		||||
@@ -242,6 +244,9 @@ msgid ""
 | 
			
		||||
"If true, only applications that have windows on the current workspace are "
 | 
			
		||||
"shown in the switcher. Otherwise, all applications are included."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Izbrana možnost določa, da bodo v trenutnem pogledu prikazana le okna, ki so "
 | 
			
		||||
"v izbrani delovni površini v preklopniku. V nasprotnem primeru so prikazana "
 | 
			
		||||
"vsa okna."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
 | 
			
		||||
msgid "The application icon mode."
 | 
			
		||||
@@ -262,6 +267,8 @@ msgid ""
 | 
			
		||||
"If true, only windows from the current workspace are shown in the switcher. "
 | 
			
		||||
"Otherwise, all windows are included."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Izbrana možnost določa, da bodo v trenutnem pogledu prikazana le okna v "
 | 
			
		||||
"preklopniku. V nasprotnem primeru so prikazana vsa okna."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
 | 
			
		||||
msgid "Attach modal dialog to the parent window"
 | 
			
		||||
@@ -293,7 +300,7 @@ msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
 | 
			
		||||
msgid "Captive Portal"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "Združen pogled"
 | 
			
		||||
 | 
			
		||||
#: ../js/extensionPrefs/main.js:123
 | 
			
		||||
#, javascript-format
 | 
			
		||||
@@ -304,54 +311,54 @@ msgstr "Prišlo je do napake med nalaganjem pogovornega okna z možnosti za %s:"
 | 
			
		||||
msgid "GNOME Shell Extensions"
 | 
			
		||||
msgstr "Razširitve lupine Gnome"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
 | 
			
		||||
#: ../js/gdm/authPrompt.js:146 ../js/ui/components/networkAgent.js:143
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
 | 
			
		||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
 | 
			
		||||
#: ../js/ui/status/network.js:915
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Prekliči"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:217
 | 
			
		||||
#: ../js/gdm/authPrompt.js:168 ../js/gdm/authPrompt.js:216
 | 
			
		||||
msgid "Next"
 | 
			
		||||
msgstr "Naslednji"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:213 ../js/ui/shellMountOperation.js:403
 | 
			
		||||
#: ../js/gdm/authPrompt.js:212 ../js/ui/shellMountOperation.js:403
 | 
			
		||||
#: ../js/ui/unlockDialog.js:59
 | 
			
		||||
msgid "Unlock"
 | 
			
		||||
msgstr "Odkleni"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:215
 | 
			
		||||
#: ../js/gdm/authPrompt.js:214
 | 
			
		||||
msgctxt "button"
 | 
			
		||||
msgid "Sign In"
 | 
			
		||||
msgstr "Prijava"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:269
 | 
			
		||||
#: ../js/gdm/loginDialog.js:275
 | 
			
		||||
msgid "Choose Session"
 | 
			
		||||
msgstr "Izbor seje"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:429
 | 
			
		||||
#: ../js/gdm/loginDialog.js:434
 | 
			
		||||
msgid "Not listed?"
 | 
			
		||||
msgstr "Ali je ni na seznamu?"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:614
 | 
			
		||||
#: ../js/gdm/loginDialog.js:619
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "(e.g., user or %s)"
 | 
			
		||||
msgstr "(na primer, uporabnika ali %s)"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269
 | 
			
		||||
#: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:287
 | 
			
		||||
msgid "Username: "
 | 
			
		||||
msgstr "Uporabniško ime: "
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:922
 | 
			
		||||
#: ../js/gdm/loginDialog.js:955
 | 
			
		||||
msgid "Login Window"
 | 
			
		||||
msgstr "Prijavno okno"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/util.js:323
 | 
			
		||||
#: ../js/gdm/util.js:341
 | 
			
		||||
msgid "Authentication error"
 | 
			
		||||
msgstr "Napaka overitve"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/util.js:453
 | 
			
		||||
#: ../js/gdm/util.js:473
 | 
			
		||||
msgid "(or swipe finger)"
 | 
			
		||||
msgstr "(ali pa povlecite prst)"
 | 
			
		||||
 | 
			
		||||
@@ -384,28 +391,28 @@ msgstr "Pogosto"
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr "Vse"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1789
 | 
			
		||||
#: ../js/ui/appDisplay.js:1791
 | 
			
		||||
msgid "New Window"
 | 
			
		||||
msgstr "Novo okno"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
 | 
			
		||||
#: ../js/ui/appDisplay.js:1817 ../js/ui/dash.js:285
 | 
			
		||||
msgid "Remove from Favorites"
 | 
			
		||||
msgstr "Odstrani iz priljubljenih"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1821
 | 
			
		||||
#: ../js/ui/appDisplay.js:1823
 | 
			
		||||
msgid "Add to Favorites"
 | 
			
		||||
msgstr "Dodaj med priljubljene"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1830
 | 
			
		||||
#: ../js/ui/appDisplay.js:1832
 | 
			
		||||
msgid "Show Details"
 | 
			
		||||
msgstr "Pokaži besedilo"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appFavorites.js:124
 | 
			
		||||
#: ../js/ui/appFavorites.js:132
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s has been added to your favorites."
 | 
			
		||||
msgstr "Program \"%s\" je dodan med priljubljeno."
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appFavorites.js:158
 | 
			
		||||
#: ../js/ui/appFavorites.js:166
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s has been removed from your favorites."
 | 
			
		||||
msgstr "Program \"%s\" je odstranjen iz priljubljenih."
 | 
			
		||||
@@ -422,14 +429,14 @@ msgstr "Spremeni ozadje ..."
 | 
			
		||||
#. Translators: Shown in calendar event list for all day events
 | 
			
		||||
#. * Keep it short, best if you can use less then 10 characters
 | 
			
		||||
#. */
 | 
			
		||||
#: ../js/ui/calendar.js:67
 | 
			
		||||
#: ../js/ui/calendar.js:70
 | 
			
		||||
msgctxt "event list time"
 | 
			
		||||
msgid "All Day"
 | 
			
		||||
msgstr "Celodnevno"
 | 
			
		||||
 | 
			
		||||
#. Translators: Shown in calendar event list, if 24h format,
 | 
			
		||||
#. \u2236 is a ratio character, similar to : */
 | 
			
		||||
#: ../js/ui/calendar.js:73
 | 
			
		||||
#: ../js/ui/calendar.js:77
 | 
			
		||||
msgctxt "event list time"
 | 
			
		||||
msgid "%H∶%M"
 | 
			
		||||
msgstr "%H∶%M"
 | 
			
		||||
@@ -437,7 +444,7 @@ msgstr "%H∶%M"
 | 
			
		||||
#. Translators: Shown in calendar event list, if 12h format,
 | 
			
		||||
#. \u2236 is a ratio character, similar to : and \u2009 is
 | 
			
		||||
#. a thin space */
 | 
			
		||||
#: ../js/ui/calendar.js:82
 | 
			
		||||
#: ../js/ui/calendar.js:86
 | 
			
		||||
msgctxt "event list time"
 | 
			
		||||
msgid "%l∶%M %p"
 | 
			
		||||
msgstr "%l∶%M %p"
 | 
			
		||||
@@ -447,43 +454,43 @@ msgstr "%l∶%M %p"
 | 
			
		||||
#. * NOTE: These grid abbreviations are always shown together
 | 
			
		||||
#. * and in order, e.g. "S M T W T F S".
 | 
			
		||||
#. */
 | 
			
		||||
#: ../js/ui/calendar.js:113
 | 
			
		||||
#: ../js/ui/calendar.js:100
 | 
			
		||||
msgctxt "grid sunday"
 | 
			
		||||
msgid "S"
 | 
			
		||||
msgstr "N"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Monday */
 | 
			
		||||
#: ../js/ui/calendar.js:115
 | 
			
		||||
#: ../js/ui/calendar.js:102
 | 
			
		||||
msgctxt "grid monday"
 | 
			
		||||
msgid "M"
 | 
			
		||||
msgstr "P"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Tuesday */
 | 
			
		||||
#: ../js/ui/calendar.js:117
 | 
			
		||||
#: ../js/ui/calendar.js:104
 | 
			
		||||
msgctxt "grid tuesday"
 | 
			
		||||
msgid "T"
 | 
			
		||||
msgstr "T"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Wednesday */
 | 
			
		||||
#: ../js/ui/calendar.js:119
 | 
			
		||||
#: ../js/ui/calendar.js:106
 | 
			
		||||
msgctxt "grid wednesday"
 | 
			
		||||
msgid "W"
 | 
			
		||||
msgstr "S"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Thursday */
 | 
			
		||||
#: ../js/ui/calendar.js:121
 | 
			
		||||
#: ../js/ui/calendar.js:108
 | 
			
		||||
msgctxt "grid thursday"
 | 
			
		||||
msgid "T"
 | 
			
		||||
msgstr "Č"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Friday */
 | 
			
		||||
#: ../js/ui/calendar.js:123
 | 
			
		||||
#: ../js/ui/calendar.js:110
 | 
			
		||||
msgctxt "grid friday"
 | 
			
		||||
msgid "F"
 | 
			
		||||
msgstr "P"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Saturday */
 | 
			
		||||
#: ../js/ui/calendar.js:125
 | 
			
		||||
#: ../js/ui/calendar.js:112
 | 
			
		||||
msgctxt "grid saturday"
 | 
			
		||||
msgid "S"
 | 
			
		||||
msgstr "S"
 | 
			
		||||
@@ -494,85 +501,85 @@ msgstr "S"
 | 
			
		||||
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
 | 
			
		||||
#. * both be 'T').
 | 
			
		||||
#. */
 | 
			
		||||
#: ../js/ui/calendar.js:138
 | 
			
		||||
#: ../js/ui/calendar.js:125
 | 
			
		||||
msgctxt "list sunday"
 | 
			
		||||
msgid "Su"
 | 
			
		||||
msgstr "Ne"
 | 
			
		||||
 | 
			
		||||
#. Translators: Event list abbreviation for Monday */
 | 
			
		||||
#: ../js/ui/calendar.js:140
 | 
			
		||||
#: ../js/ui/calendar.js:127
 | 
			
		||||
msgctxt "list monday"
 | 
			
		||||
msgid "M"
 | 
			
		||||
msgstr "P"
 | 
			
		||||
 | 
			
		||||
#. Translators: Event list abbreviation for Tuesday */
 | 
			
		||||
#: ../js/ui/calendar.js:142
 | 
			
		||||
#: ../js/ui/calendar.js:129
 | 
			
		||||
msgctxt "list tuesday"
 | 
			
		||||
msgid "T"
 | 
			
		||||
msgstr "T"
 | 
			
		||||
 | 
			
		||||
#. Translators: Event list abbreviation for Wednesday */
 | 
			
		||||
#: ../js/ui/calendar.js:144
 | 
			
		||||
#: ../js/ui/calendar.js:131
 | 
			
		||||
msgctxt "list wednesday"
 | 
			
		||||
msgid "W"
 | 
			
		||||
msgstr "S"
 | 
			
		||||
 | 
			
		||||
#. Translators: Event list abbreviation for Thursday */
 | 
			
		||||
#: ../js/ui/calendar.js:146
 | 
			
		||||
#: ../js/ui/calendar.js:133
 | 
			
		||||
msgctxt "list thursday"
 | 
			
		||||
msgid "Th"
 | 
			
		||||
msgstr "Če"
 | 
			
		||||
 | 
			
		||||
#. Translators: Event list abbreviation for Friday */
 | 
			
		||||
#: ../js/ui/calendar.js:148
 | 
			
		||||
#: ../js/ui/calendar.js:135
 | 
			
		||||
msgctxt "list friday"
 | 
			
		||||
msgid "F"
 | 
			
		||||
msgstr "Pe"
 | 
			
		||||
 | 
			
		||||
#. Translators: Event list abbreviation for Saturday */
 | 
			
		||||
#: ../js/ui/calendar.js:150
 | 
			
		||||
#: ../js/ui/calendar.js:137
 | 
			
		||||
msgctxt "list saturday"
 | 
			
		||||
msgid "S"
 | 
			
		||||
msgstr "S"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:453
 | 
			
		||||
#: ../js/ui/calendar.js:462
 | 
			
		||||
msgid "Previous month"
 | 
			
		||||
msgstr "Predhodni mesec"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:463
 | 
			
		||||
#: ../js/ui/calendar.js:472
 | 
			
		||||
msgid "Next month"
 | 
			
		||||
msgstr "Naslednji mesec"
 | 
			
		||||
 | 
			
		||||
#. Translators: Text to show if there are no events */
 | 
			
		||||
#: ../js/ui/calendar.js:781
 | 
			
		||||
#: ../js/ui/calendar.js:810
 | 
			
		||||
msgid "Nothing Scheduled"
 | 
			
		||||
msgstr "Nič ni razporejeno"
 | 
			
		||||
 | 
			
		||||
#. Translators: Shown on calendar heading when selected day occurs on current year */
 | 
			
		||||
#: ../js/ui/calendar.js:799
 | 
			
		||||
#: ../js/ui/calendar.js:826
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d"
 | 
			
		||||
msgstr "%A, %d. %m."
 | 
			
		||||
 | 
			
		||||
#. Translators: Shown on calendar heading when selected day occurs on different year */
 | 
			
		||||
#: ../js/ui/calendar.js:802
 | 
			
		||||
#: ../js/ui/calendar.js:829
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d, %Y"
 | 
			
		||||
msgstr "%A, %d %B %Y"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:813
 | 
			
		||||
#: ../js/ui/calendar.js:839
 | 
			
		||||
msgid "Today"
 | 
			
		||||
msgstr "Danes"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:817
 | 
			
		||||
#: ../js/ui/calendar.js:843
 | 
			
		||||
msgid "Tomorrow"
 | 
			
		||||
msgstr "Jutri"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:828
 | 
			
		||||
#: ../js/ui/calendar.js:854
 | 
			
		||||
msgid "This week"
 | 
			
		||||
msgstr "Ta teden"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:836
 | 
			
		||||
#: ../js/ui/calendar.js:862
 | 
			
		||||
msgid "Next week"
 | 
			
		||||
msgstr "Naslednji teden"
 | 
			
		||||
 | 
			
		||||
@@ -972,7 +979,7 @@ msgstr "Poglej račun"
 | 
			
		||||
msgid "Unknown reason"
 | 
			
		||||
msgstr "Neznan vzrok"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154
 | 
			
		||||
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:155
 | 
			
		||||
msgid "Windows"
 | 
			
		||||
msgstr "Okna"
 | 
			
		||||
 | 
			
		||||
@@ -984,22 +991,22 @@ msgstr "Pokaži programe"
 | 
			
		||||
msgid "Dash"
 | 
			
		||||
msgstr "Pregledna plošča"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/dateMenu.js:96
 | 
			
		||||
#: ../js/ui/dateMenu.js:97
 | 
			
		||||
msgid "Open Calendar"
 | 
			
		||||
msgstr "Odpri koledar"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/dateMenu.js:100
 | 
			
		||||
#: ../js/ui/dateMenu.js:101
 | 
			
		||||
msgid "Open Clocks"
 | 
			
		||||
msgstr "Odpri ure"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/dateMenu.js:107
 | 
			
		||||
#: ../js/ui/dateMenu.js:108
 | 
			
		||||
msgid "Date & Time Settings"
 | 
			
		||||
msgstr "Nastavitve časa in datuma"
 | 
			
		||||
 | 
			
		||||
#. Translators: This is the date format to use when the calendar popup is
 | 
			
		||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
 | 
			
		||||
#. */
 | 
			
		||||
#: ../js/ui/dateMenu.js:204
 | 
			
		||||
#: ../js/ui/dateMenu.js:132
 | 
			
		||||
msgid "%A %B %e, %Y"
 | 
			
		||||
msgstr "%a, %e. %b., %R"
 | 
			
		||||
 | 
			
		||||
@@ -1155,7 +1162,7 @@ msgstr "Namesti"
 | 
			
		||||
msgid "Download and install “%s” from extensions.gnome.org?"
 | 
			
		||||
msgstr "Prejmi in namesti “%s” preko povezave na extensions.gnome.org?"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523
 | 
			
		||||
#: ../js/ui/keyboard.js:700 ../js/ui/status/keyboard.js:535
 | 
			
		||||
msgid "Keyboard"
 | 
			
		||||
msgstr "Tipkovnica"
 | 
			
		||||
 | 
			
		||||
@@ -1211,48 +1218,40 @@ msgstr "Poglej vir"
 | 
			
		||||
msgid "Web Page"
 | 
			
		||||
msgstr "Spletna stran"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/messageTray.js:1326
 | 
			
		||||
#: ../js/ui/messageTray.js:1332
 | 
			
		||||
msgid "Open"
 | 
			
		||||
msgstr "Odpri"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/messageTray.js:1333
 | 
			
		||||
#: ../js/ui/messageTray.js:1339
 | 
			
		||||
msgid "Remove"
 | 
			
		||||
msgstr "Odstrani"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/messageTray.js:1630
 | 
			
		||||
#: ../js/ui/messageTray.js:1636
 | 
			
		||||
msgid "Notifications"
 | 
			
		||||
msgstr "Obvestila"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/messageTray.js:1637
 | 
			
		||||
#: ../js/ui/messageTray.js:1643
 | 
			
		||||
msgid "Clear Messages"
 | 
			
		||||
msgstr "Počisti sporočila"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/messageTray.js:1656
 | 
			
		||||
#: ../js/ui/messageTray.js:1662
 | 
			
		||||
msgid "Notification Settings"
 | 
			
		||||
msgstr "Nastavitve obvestil"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/messageTray.js:1709
 | 
			
		||||
#: ../js/ui/messageTray.js:1715
 | 
			
		||||
msgid "Tray Menu"
 | 
			
		||||
msgstr "Meni sistemske vrstice"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/messageTray.js:1926
 | 
			
		||||
#: ../js/ui/messageTray.js:1939
 | 
			
		||||
msgid "No Messages"
 | 
			
		||||
msgstr "Ni sporočil"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/messageTray.js:1968
 | 
			
		||||
#: ../js/ui/messageTray.js:1986
 | 
			
		||||
msgid "Message Tray"
 | 
			
		||||
msgstr "Sporočilna vrstica"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/messageTray.js:2971
 | 
			
		||||
msgid "System Information"
 | 
			
		||||
msgstr "Podrobnosti sistema"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/notificationDaemon.js:513 ../src/shell-app.c:425
 | 
			
		||||
msgctxt "program"
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Neznano"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
 | 
			
		||||
#: ../js/ui/messageTray.js:2443 ../js/ui/overviewControls.js:483
 | 
			
		||||
#: ../js/ui/screenShield.js:151
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d new message"
 | 
			
		||||
msgid_plural "%d new messages"
 | 
			
		||||
@@ -1261,6 +1260,15 @@ msgstr[1] "%d novo sporočilo"
 | 
			
		||||
msgstr[2] "%d novi sporočili"
 | 
			
		||||
msgstr[3] "%d nova sporočila"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/messageTray.js:3013
 | 
			
		||||
msgid "System Information"
 | 
			
		||||
msgstr "Podrobnosti sistema"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/notificationDaemon.js:513 ../src/shell-app.c:425
 | 
			
		||||
msgctxt "program"
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Neznano"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/overview.js:84
 | 
			
		||||
msgid "Undo"
 | 
			
		||||
msgstr "Razveljavi"
 | 
			
		||||
@@ -1330,19 +1338,19 @@ msgstr "Zakleni"
 | 
			
		||||
msgid "GNOME needs to lock the screen"
 | 
			
		||||
msgstr "Zakleniti je treba zaslon"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304
 | 
			
		||||
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1309
 | 
			
		||||
msgid "Unable to lock"
 | 
			
		||||
msgstr "Zaklep ni mogoč"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305
 | 
			
		||||
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1310
 | 
			
		||||
msgid "Lock was blocked by an application"
 | 
			
		||||
msgstr "Zaklep je preprečil program"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/search.js:594
 | 
			
		||||
#: ../js/ui/search.js:611
 | 
			
		||||
msgid "Searching…"
 | 
			
		||||
msgstr "Iskanje ..."
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/search.js:596
 | 
			
		||||
#: ../js/ui/search.js:613
 | 
			
		||||
msgid "No results."
 | 
			
		||||
msgstr "Ni najdenih zadetkov."
 | 
			
		||||
 | 
			
		||||
@@ -1446,7 +1454,7 @@ msgstr "Ni vzpostavljene povezave"
 | 
			
		||||
msgid "Brightness"
 | 
			
		||||
msgstr "Svetlost"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/keyboard.js:547
 | 
			
		||||
#: ../js/ui/status/keyboard.js:559
 | 
			
		||||
msgid "Show Keyboard Layout"
 | 
			
		||||
msgstr "Pokaži razporeditev tipkovnice"
 | 
			
		||||
 | 
			
		||||
@@ -1701,11 +1709,11 @@ msgstr "Prijava kot drug uporabnik"
 | 
			
		||||
msgid "Unlock Window"
 | 
			
		||||
msgstr "Odkleni okno"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/viewSelector.js:158
 | 
			
		||||
#: ../js/ui/viewSelector.js:159
 | 
			
		||||
msgid "Applications"
 | 
			
		||||
msgstr "Programi"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/viewSelector.js:162
 | 
			
		||||
#: ../js/ui/viewSelector.js:163
 | 
			
		||||
msgid "Search"
 | 
			
		||||
msgstr "Poišči"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -176,18 +176,54 @@ static void
 | 
			
		||||
calendar_sources_init (CalendarSources *sources)
 | 
			
		||||
{
 | 
			
		||||
  GError *error = NULL;
 | 
			
		||||
  GDBusConnection *session_bus;
 | 
			
		||||
  GVariant *result;
 | 
			
		||||
 | 
			
		||||
  sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
 | 
			
		||||
 | 
			
		||||
  /* XXX Not sure what to do if this fails.
 | 
			
		||||
   *     Should this class implement GInitable or pass the
 | 
			
		||||
   *     registry in as a G_PARAM_CONSTRUCT_ONLY property? */
 | 
			
		||||
  sources->priv->registry = e_source_registry_new_sync (NULL, &error);
 | 
			
		||||
  /* WORKAROUND: the hardcoded timeout for e_source_registry_new_sync()
 | 
			
		||||
     (and other library calls that eventually call g_dbus_proxy_new[_sync]())
 | 
			
		||||
     is 25 seconds. This has been shown to be too small for
 | 
			
		||||
     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)
 | 
			
		||||
    {
 | 
			
		||||
      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,
 | 
			
		||||
                                                       "source-added",
 | 
			
		||||
                                                       G_CALLBACK (calendar_sources_registry_source_changed_cb),
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,9 @@
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
 | 
			
		||||
#include <GL/gl.h>
 | 
			
		||||
#include <cogl/cogl.h>
 | 
			
		||||
 | 
			
		||||
#include "shell-util.h"
 | 
			
		||||
#include <glib/gi18n-lib.h>
 | 
			
		||||
#include <gtk/gtk.h>
 | 
			
		||||
@@ -330,3 +333,33 @@ shell_util_cursor_tracker_to_clutter (MetaCursorTracker *tracker,
 | 
			
		||||
      clutter_actor_hide (CLUTTER_ACTOR (texture));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef const gchar *(*ShellGLGetString) (GLenum);
 | 
			
		||||
 | 
			
		||||
static const gchar *
 | 
			
		||||
get_gl_vendor (void)
 | 
			
		||||
{
 | 
			
		||||
  static const gchar *vendor = NULL;
 | 
			
		||||
 | 
			
		||||
  if (!vendor)
 | 
			
		||||
    {
 | 
			
		||||
      ShellGLGetString gl_get_string;
 | 
			
		||||
      gl_get_string = (ShellGLGetString) cogl_get_proc_address ("glGetString");
 | 
			
		||||
      if (gl_get_string)
 | 
			
		||||
        vendor = gl_get_string (GL_VENDOR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return vendor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
shell_util_need_background_refresh (void)
 | 
			
		||||
{
 | 
			
		||||
  if (!clutter_check_windowing_backend (CLUTTER_WINDOWING_X11))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  if (g_strcmp0 (get_gl_vendor (), "NVIDIA Corporation") == 0)
 | 
			
		||||
    return TRUE;
 | 
			
		||||
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -44,6 +44,8 @@ GdkPixbuf *shell_util_create_pixbuf_from_data (const guchar      *data,
 | 
			
		||||
void    shell_util_cursor_tracker_to_clutter (MetaCursorTracker *tracker,
 | 
			
		||||
                                              ClutterTexture    *texture);
 | 
			
		||||
 | 
			
		||||
gboolean shell_util_need_background_refresh (void);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __SHELL_UTIL_H__ */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user