Compare commits
	
		
			44 Commits
		
	
	
		
			3.15.3
			...
			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