Compare commits
	
		
			2 Commits
		
	
	
		
			3.19.1
			...
			wip/csoria
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					6865dbdd1b | ||
| 
						 | 
					741c84bc41 | 
							
								
								
									
										96
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										96
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,99 +1,3 @@
 | 
			
		||||
3.19.1
 | 
			
		||||
======
 | 
			
		||||
* Respect text-scaling factor under wayland [Owen; #756447]
 | 
			
		||||
* Show the Bluetooth submenu when there were setup devices [Bastien; #723848]
 | 
			
		||||
* Misc. bug fixes [Florian, Cosimo, Rui, Ray, Owen, Jakub, Bastien;
 | 
			
		||||
  #756697, #756714, #756605, #754814, #738942, #756983, #756925,
 | 
			
		||||
  #757011, #673235, #757150]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Cosimo Cecchi, Rui Matos, Florian Müllner, Bastien Nocera, Jakub Steiner,
 | 
			
		||||
  Ray Strode, Owen W. Taylor
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Kjartan Maraas [nb], Khaled Hosny [ar], Balázs Meskó [hu],
 | 
			
		||||
  Daniel Șerbănescu [ro], Marek Černocký [cs]
 | 
			
		||||
 | 
			
		||||
3.18.1
 | 
			
		||||
======
 | 
			
		||||
* Fix screen freezes when a notification is pushed [Carlos; #755425]
 | 
			
		||||
* Fix overzealous ellipsization in system status menu [Adel, Florian; #708472]
 | 
			
		||||
* Hide app menu when disabled by setting [Florian; #745919]
 | 
			
		||||
* Fix lightbox effect when animations are disabled [Rui; #755827]
 | 
			
		||||
* Do not mark hotplug notifications as critical [Florian; #657923]
 | 
			
		||||
* Fix icons getting cut off in dash [Florian; #745649]
 | 
			
		||||
* Animate fullscreen/unfullscreen operations [Cosimo; #707248]
 | 
			
		||||
* Misc. bug fixes [Florian, Owen; #748919, #674799, #754581]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Emmanuele Bassi, Michael Catanzaro, Cosimo Cecchi, Matthias Clasen,
 | 
			
		||||
  Adel Gadllah, Carlos Garnacho, Ekaterina Gerasimova, Rui Matos,
 | 
			
		||||
  Florian Müllner, Owen W. Taylor
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Марко Костић [sr], Милош Поповић [sr@latin], Khaled Hosny [ar],
 | 
			
		||||
  Trần Ngọc Quân [vi], Petr Kovar [cs], Alexandre Franke [fr],
 | 
			
		||||
  Fran Dieguez [gl], Anders Jonsson [sv], Piotr Drąg [pl], Dušan Kazik [sk],
 | 
			
		||||
  Milo Casagrande [it], Changwoo Ryu [ko], Stas Solovey [ru],
 | 
			
		||||
  Rafael Fontenelle [pt_BR], Tom Tryfonidis [el], Aurimas Černius [lt],
 | 
			
		||||
  Seán de Búrca [ga], Christian Kirbach [de], Jiri Grönroos [fi],
 | 
			
		||||
  Pedro Albuquerque [pt], Baurzhan Muftakhidinov [kk], Daniel Mustieles [es],
 | 
			
		||||
  Marek Černocký [cs], Ask Hjorth Larsen [da], Inaki Larranaga Murgoitio [eu]
 | 
			
		||||
 | 
			
		||||
3.18.0
 | 
			
		||||
======
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Sendy Aditya Suryana [id], Kris Thomsen [da], Seán de Búrca [ga],
 | 
			
		||||
  Andika Triwidada [id], Enrico Nicoletto [pt_BR], Anders Jonsson [sv],
 | 
			
		||||
  Rūdolfs Mazurs [lv]
 | 
			
		||||
 | 
			
		||||
3.17.92
 | 
			
		||||
=======
 | 
			
		||||
* Fix race when loading multiple background animations [Josselin; #741453]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Michael Biebl, Josselin Mouette, Florian Müllner
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Baurzhan Muftakhidinov [kk], Changwoo Ryu [ko], Christian Kirbach [de],
 | 
			
		||||
  Kjartan Maraas [nb], Jiri Grönroos [fi], Arash Mousavi [fa],
 | 
			
		||||
  Jiro Matsuzawa [ja], Marek Černocký [cs], Milo Casagrande [it]
 | 
			
		||||
 | 
			
		||||
3.17.91
 | 
			
		||||
=======
 | 
			
		||||
* Fix login screen spinner causing wakeups while VT-switched away
 | 
			
		||||
  [Ray, Rui; #753891]
 | 
			
		||||
* Fix scrolling of user list on login screen [Florian; #754525]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Piotr Drąg, Rui Matos, Florian Müllner, Ray Strode
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Dušan Kazik [sk], Jordi Mas [ca], Aurimas Černius [lt], Stas Solovey [ru],
 | 
			
		||||
  Piotr Drąg [pl], Pedro Albuquerque [pt], Daniel Mustieles [es],
 | 
			
		||||
  Chao-Hsiung Liao [zh_TW], Muhammet Kara [tr], Fran Dieguez [gl],
 | 
			
		||||
  Hannie Dumoleyn [nl], Yosef Or Boczko [he], Tom Tryfonidis [el],
 | 
			
		||||
  A S Alam [pa], Balázs Úr [hu], Alexandre Franke [fr], Frédéric Péters [fr]
 | 
			
		||||
 | 
			
		||||
3.17.90
 | 
			
		||||
=======
 | 
			
		||||
* Avoid caret/focus viewport changes during pointer movement [Rui; #752138]
 | 
			
		||||
* Match GTK+'s modal dialogs for system modal dialogs [Carlos; #746108]
 | 
			
		||||
* Refine message list style [Florian; #749958]
 | 
			
		||||
* Fix type-ahead behavior for backspace and compose key [Rui; #753319, #753320]
 | 
			
		||||
* Refine the system status menu [Florian; #751377]
 | 
			
		||||
* Misc. bug fixes and cleanups [Bastien, Ray, Florian, Jakub; #752779, #752739,
 | 
			
		||||
  #741366, #651503, #753064, #753181, #752881]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Rui Matos, Florian Müllner, Bastien Nocera, Carlos Soriano, Jakub Steiner,
 | 
			
		||||
  Ray Strode, Rico Tzschichholz
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Marek Černocký [cs], Kjartan Maraas [nb], Jordi Mas [ca], Muhammet Kara [tr],
 | 
			
		||||
  Enrico Nicoletto [pt_BR]
 | 
			
		||||
 | 
			
		||||
3.17.4
 | 
			
		||||
======
 | 
			
		||||
* Fix fuzziness of app menu icon [Jakub; #747932]
 | 
			
		||||
 
 | 
			
		||||
@@ -282,14 +282,6 @@ on_shell_signal (GDBusProxy *proxy,
 | 
			
		||||
{
 | 
			
		||||
  PluginObject *obj = user_data;
 | 
			
		||||
 | 
			
		||||
  /* FIXME: We have half a dozen bug reports in which this function crashes in
 | 
			
		||||
   * WebKit due to a null NPObject. This should never happen, but since it is
 | 
			
		||||
   * happening, let's turn the crash into a critical.
 | 
			
		||||
   *
 | 
			
		||||
   * https://bugzilla.gnome.org/show_bug.cgi?id=737932
 | 
			
		||||
   */
 | 
			
		||||
  g_return_if_fail (obj->instance);
 | 
			
		||||
 | 
			
		||||
  if (strcmp (signal_name, "ExtensionStatusChanged") == 0)
 | 
			
		||||
    {
 | 
			
		||||
      gchar *uuid;
 | 
			
		||||
@@ -320,12 +312,6 @@ on_shell_appeared (GDBusConnection *connection,
 | 
			
		||||
{
 | 
			
		||||
  PluginObject *obj = (PluginObject*) user_data;
 | 
			
		||||
 | 
			
		||||
  /* FIXME: Not sure if this is ever hit or not, but let's play it safe.
 | 
			
		||||
   *
 | 
			
		||||
   * https://bugzilla.gnome.org/show_bug.cgi?id=737932
 | 
			
		||||
   */
 | 
			
		||||
  g_return_if_fail (obj->instance);
 | 
			
		||||
 | 
			
		||||
  if (obj->restart_listener)
 | 
			
		||||
    {
 | 
			
		||||
      NPVariant result = { NPVariantType_Void };
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								configure.ac
									
									
									
									
									
								
							@@ -1,6 +1,5 @@
 | 
			
		||||
AC_PREREQ(2.63)
 | 
			
		||||
AC_INIT([gnome-shell],[3.19.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
 | 
			
		||||
AX_IS_RELEASE([git-directory])
 | 
			
		||||
AC_INIT([gnome-shell],[3.17.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])
 | 
			
		||||
@@ -75,13 +74,13 @@ AS_IF([test x$enable_systemd != xno], [
 | 
			
		||||
AC_MSG_RESULT($enable_systemd)
 | 
			
		||||
 | 
			
		||||
CLUTTER_MIN_VERSION=1.21.5
 | 
			
		||||
GOBJECT_INTROSPECTION_MIN_VERSION=1.45.4
 | 
			
		||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
 | 
			
		||||
GJS_MIN_VERSION=1.39.0
 | 
			
		||||
MUTTER_MIN_VERSION=3.19.1
 | 
			
		||||
MUTTER_MIN_VERSION=3.17.4
 | 
			
		||||
GTK_MIN_VERSION=3.15.0
 | 
			
		||||
GIO_MIN_VERSION=2.45.3
 | 
			
		||||
LIBECAL_MIN_VERSION=3.5.3
 | 
			
		||||
LIBEDATASERVER_MIN_VERSION=3.17.2
 | 
			
		||||
LIBEDATASERVER_MIN_VERSION=3.13.90
 | 
			
		||||
TELEPATHY_GLIB_MIN_VERSION=0.17.5
 | 
			
		||||
POLKIT_MIN_VERSION=0.100
 | 
			
		||||
STARTUP_NOTIFICATION_MIN_VERSION=0.11
 | 
			
		||||
@@ -117,7 +116,7 @@ PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION)
 | 
			
		||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
 | 
			
		||||
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
 | 
			
		||||
PKG_CHECK_MODULES(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
 | 
			
		||||
PKG_CHECK_MODULES(TRAY, clutter-1.0 gtk+-3.0)
 | 
			
		||||
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
 | 
			
		||||
PKG_CHECK_MODULES(GVC, libpulse >= $PULSE_MIN_VERS libpulse-mainloop-glib gobject-2.0)
 | 
			
		||||
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.13.1)
 | 
			
		||||
 | 
			
		||||
@@ -221,7 +220,7 @@ if test "$enable_man" != no; then
 | 
			
		||||
fi
 | 
			
		||||
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
 | 
			
		||||
 | 
			
		||||
AX_COMPILER_FLAGS()
 | 
			
		||||
GNOME_COMPILE_WARNINGS([error])
 | 
			
		||||
case "$WARN_CFLAGS" in
 | 
			
		||||
    *-Werror*)
 | 
			
		||||
        WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations"
 | 
			
		||||
@@ -270,7 +269,7 @@ Build configuration:
 | 
			
		||||
       Prefix:                                 ${prefix}
 | 
			
		||||
       Source code location:                   ${srcdir}
 | 
			
		||||
       Compiler:                               ${CC}
 | 
			
		||||
       Compiler Warnings:                      $ax_enable_compile_warnings
 | 
			
		||||
       Compiler Warnings:                      $enable_compile_warnings
 | 
			
		||||
 | 
			
		||||
       Support for NetworkManager:             $have_networkmanager
 | 
			
		||||
       Support for GStreamer recording:        $build_recorder
 | 
			
		||||
 
 | 
			
		||||
@@ -72,16 +72,6 @@
 | 
			
		||||
        This key sets the default state of the checkbox.
 | 
			
		||||
      </_description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key name="had-bluetooth-devices-setup" type="b">
 | 
			
		||||
      <default>false</default>
 | 
			
		||||
      <_summary>Whether the default Bluetooth adapter had set up devices associated to it</_summary>
 | 
			
		||||
      <_description>
 | 
			
		||||
        The shell will only show a Bluetooth menu item if a Bluetooth
 | 
			
		||||
        adapter is powered, or if there were devices set up associated
 | 
			
		||||
        with the default adapter. This will be reset if the default
 | 
			
		||||
        adapter is ever seen not to have devices associated to it.
 | 
			
		||||
      </_description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <child name="calendar" schema="org.gnome.shell.calendar"/>
 | 
			
		||||
    <child name="keybindings" schema="org.gnome.shell.keybindings"/>
 | 
			
		||||
    <child name="keyboard" schema="org.gnome.shell.keyboard"/>
 | 
			
		||||
 
 | 
			
		||||
@@ -408,9 +408,9 @@ StScrollBar {
 | 
			
		||||
  spacing-rows: 15px;
 | 
			
		||||
  spacing-columns: 1em; }
 | 
			
		||||
 | 
			
		||||
/* Popovers/Menus */
 | 
			
		||||
/* Popvers/Menus */
 | 
			
		||||
.popup-menu {
 | 
			
		||||
  min-width: 15em; }
 | 
			
		||||
  min-width: 200px; }
 | 
			
		||||
  .popup-menu .popup-sub-menu {
 | 
			
		||||
    background-color: black;
 | 
			
		||||
    box-shadow: inset 0 -1px 0px #0d0d0d; }
 | 
			
		||||
@@ -752,7 +752,7 @@ StScrollBar {
 | 
			
		||||
 | 
			
		||||
/* Message list */
 | 
			
		||||
.message-list {
 | 
			
		||||
  width: 31.5em; }
 | 
			
		||||
  width: 420px; }
 | 
			
		||||
 | 
			
		||||
.message-list-sections {
 | 
			
		||||
  spacing: 1.5em; }
 | 
			
		||||
@@ -787,12 +787,7 @@ StScrollBar {
 | 
			
		||||
    padding: 8px 8px 8px 0px; }
 | 
			
		||||
 | 
			
		||||
.message-icon-bin > StIcon {
 | 
			
		||||
  icon-size: 32px; }
 | 
			
		||||
 | 
			
		||||
.message-secondary-bin:ltr {
 | 
			
		||||
  padding-left: 8px; }
 | 
			
		||||
.message-secondary-bin:rtl {
 | 
			
		||||
  padding-right: 8px; }
 | 
			
		||||
  icon-size: 48px; }
 | 
			
		||||
 | 
			
		||||
.message-secondary-bin {
 | 
			
		||||
  color: #999999; }
 | 
			
		||||
@@ -801,20 +796,14 @@ StScrollBar {
 | 
			
		||||
  icon-size: 16px; }
 | 
			
		||||
 | 
			
		||||
.message-title {
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
  font-size: 1.1em; }
 | 
			
		||||
  font-weight: bold; }
 | 
			
		||||
 | 
			
		||||
.message-content {
 | 
			
		||||
  padding: 8px;
 | 
			
		||||
  font-size: .9em; }
 | 
			
		||||
  padding: 8px; }
 | 
			
		||||
 | 
			
		||||
.system-switch-user-submenu-icon.user-icon {
 | 
			
		||||
  icon-size: 20px;
 | 
			
		||||
  padding: 0 2px; }
 | 
			
		||||
 | 
			
		||||
.system-switch-user-submenu-icon.default-icon {
 | 
			
		||||
  icon-size: 16px;
 | 
			
		||||
  padding: 0 4px; }
 | 
			
		||||
.system-switch-user-submenu-icon {
 | 
			
		||||
  icon-size: 24px;
 | 
			
		||||
  border: 1px solid rgba(255, 255, 255, 0.4); }
 | 
			
		||||
 | 
			
		||||
#appMenu {
 | 
			
		||||
  spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg");
 | 
			
		||||
@@ -823,7 +812,7 @@ StScrollBar {
 | 
			
		||||
    color: transparent; }
 | 
			
		||||
 | 
			
		||||
.aggregate-menu {
 | 
			
		||||
  min-width: 21em; }
 | 
			
		||||
  width: 360px; }
 | 
			
		||||
  .aggregate-menu .popup-menu-icon {
 | 
			
		||||
    padding: 0 4px; }
 | 
			
		||||
 | 
			
		||||
@@ -960,14 +949,10 @@ StScrollBar {
 | 
			
		||||
.search-entry {
 | 
			
		||||
  width: 320px;
 | 
			
		||||
  padding: 7px 9px;
 | 
			
		||||
  border-radius: 6px;
 | 
			
		||||
  border-color: #747467;
 | 
			
		||||
  color: #eeeeec;
 | 
			
		||||
  background-color: #2e3436; }
 | 
			
		||||
  border-radius: 6px; }
 | 
			
		||||
  .search-entry:focus {
 | 
			
		||||
    padding: 6px 8px;
 | 
			
		||||
    border-width: 2px;
 | 
			
		||||
    border-color: #215d9c; }
 | 
			
		||||
    border-width: 2px; }
 | 
			
		||||
  .search-entry .search-entry-icon {
 | 
			
		||||
    icon-size: 1em;
 | 
			
		||||
    padding: 0 4px;
 | 
			
		||||
 
 | 
			
		||||
 Submodule data/theme/gnome-shell-sass updated: 65482353d2...e0e74382f1
									
								
							@@ -408,9 +408,9 @@ StScrollBar {
 | 
			
		||||
  spacing-rows: 15px;
 | 
			
		||||
  spacing-columns: 1em; }
 | 
			
		||||
 | 
			
		||||
/* Popovers/Menus */
 | 
			
		||||
/* Popvers/Menus */
 | 
			
		||||
.popup-menu {
 | 
			
		||||
  min-width: 15em; }
 | 
			
		||||
  min-width: 200px; }
 | 
			
		||||
  .popup-menu .popup-sub-menu {
 | 
			
		||||
    background-color: #343a3a;
 | 
			
		||||
    box-shadow: inset 0 -1px 0px #282c2c; }
 | 
			
		||||
@@ -752,7 +752,7 @@ StScrollBar {
 | 
			
		||||
 | 
			
		||||
/* Message list */
 | 
			
		||||
.message-list {
 | 
			
		||||
  width: 31.5em; }
 | 
			
		||||
  width: 420px; }
 | 
			
		||||
 | 
			
		||||
.message-list-sections {
 | 
			
		||||
  spacing: 1.5em; }
 | 
			
		||||
@@ -787,12 +787,7 @@ StScrollBar {
 | 
			
		||||
    padding: 8px 8px 8px 0px; }
 | 
			
		||||
 | 
			
		||||
.message-icon-bin > StIcon {
 | 
			
		||||
  icon-size: 32px; }
 | 
			
		||||
 | 
			
		||||
.message-secondary-bin:ltr {
 | 
			
		||||
  padding-left: 8px; }
 | 
			
		||||
.message-secondary-bin:rtl {
 | 
			
		||||
  padding-right: 8px; }
 | 
			
		||||
  icon-size: 48px; }
 | 
			
		||||
 | 
			
		||||
.message-secondary-bin {
 | 
			
		||||
  color: #8e8e80; }
 | 
			
		||||
@@ -801,20 +796,14 @@ StScrollBar {
 | 
			
		||||
  icon-size: 16px; }
 | 
			
		||||
 | 
			
		||||
.message-title {
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
  font-size: 1.1em; }
 | 
			
		||||
  font-weight: bold; }
 | 
			
		||||
 | 
			
		||||
.message-content {
 | 
			
		||||
  padding: 8px;
 | 
			
		||||
  font-size: .9em; }
 | 
			
		||||
  padding: 8px; }
 | 
			
		||||
 | 
			
		||||
.system-switch-user-submenu-icon.user-icon {
 | 
			
		||||
  icon-size: 20px;
 | 
			
		||||
  padding: 0 2px; }
 | 
			
		||||
 | 
			
		||||
.system-switch-user-submenu-icon.default-icon {
 | 
			
		||||
  icon-size: 16px;
 | 
			
		||||
  padding: 0 4px; }
 | 
			
		||||
.system-switch-user-submenu-icon {
 | 
			
		||||
  icon-size: 24px;
 | 
			
		||||
  border: 1px solid rgba(238, 238, 236, 0.4); }
 | 
			
		||||
 | 
			
		||||
#appMenu {
 | 
			
		||||
  spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg");
 | 
			
		||||
@@ -823,7 +812,7 @@ StScrollBar {
 | 
			
		||||
    color: transparent; }
 | 
			
		||||
 | 
			
		||||
.aggregate-menu {
 | 
			
		||||
  min-width: 21em; }
 | 
			
		||||
  width: 360px; }
 | 
			
		||||
  .aggregate-menu .popup-menu-icon {
 | 
			
		||||
    padding: 0 4px; }
 | 
			
		||||
 | 
			
		||||
@@ -960,14 +949,10 @@ StScrollBar {
 | 
			
		||||
.search-entry {
 | 
			
		||||
  width: 320px;
 | 
			
		||||
  padding: 7px 9px;
 | 
			
		||||
  border-radius: 6px;
 | 
			
		||||
  border-color: #747467;
 | 
			
		||||
  color: #eeeeec;
 | 
			
		||||
  background-color: #2e3436; }
 | 
			
		||||
  border-radius: 6px; }
 | 
			
		||||
  .search-entry:focus {
 | 
			
		||||
    padding: 6px 8px;
 | 
			
		||||
    border-width: 2px;
 | 
			
		||||
    border-color: #215d9c; }
 | 
			
		||||
    border-width: 2px; }
 | 
			
		||||
  .search-entry .search-entry-icon {
 | 
			
		||||
    icon-size: 1em;
 | 
			
		||||
    padding: 0 4px;
 | 
			
		||||
 
 | 
			
		||||
@@ -258,7 +258,6 @@ const AuthPrompt = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onVerificationComplete: function() {
 | 
			
		||||
        this.setActorInDefaultButtonWell(null);
 | 
			
		||||
        this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
 | 
			
		||||
	this.cancelButton.reactive = false;
 | 
			
		||||
    },
 | 
			
		||||
@@ -282,12 +281,6 @@ const AuthPrompt = new Lang.Class({
 | 
			
		||||
        if (oldActor)
 | 
			
		||||
            Tweener.removeTweens(oldActor);
 | 
			
		||||
 | 
			
		||||
        let wasSpinner;
 | 
			
		||||
        if (oldActor == this._spinner.actor)
 | 
			
		||||
            wasSpinner = true;
 | 
			
		||||
        else
 | 
			
		||||
            wasSpinner = false;
 | 
			
		||||
 | 
			
		||||
        let isSpinner;
 | 
			
		||||
        if (actor == this._spinner.actor)
 | 
			
		||||
            isSpinner = true;
 | 
			
		||||
@@ -297,11 +290,6 @@ const AuthPrompt = new Lang.Class({
 | 
			
		||||
        if (this._defaultButtonWellActor != actor && oldActor) {
 | 
			
		||||
            if (!animate) {
 | 
			
		||||
                oldActor.opacity = 0;
 | 
			
		||||
 | 
			
		||||
                if (wasSpinner) {
 | 
			
		||||
                    if (this._spinner)
 | 
			
		||||
                        this._spinner.stop();
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                Tweener.addTween(oldActor,
 | 
			
		||||
                                 { opacity: 0,
 | 
			
		||||
@@ -310,7 +298,7 @@ const AuthPrompt = new Lang.Class({
 | 
			
		||||
                                   transition: 'linear',
 | 
			
		||||
                                   onCompleteScope: this,
 | 
			
		||||
                                   onComplete: function() {
 | 
			
		||||
                                      if (wasSpinner) {
 | 
			
		||||
                                      if (isSpinner) {
 | 
			
		||||
                                          if (this._spinner)
 | 
			
		||||
                                              this._spinner.stop();
 | 
			
		||||
                                      }
 | 
			
		||||
@@ -501,7 +489,6 @@ const AuthPrompt = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    finish: function(onComplete) {
 | 
			
		||||
        if (!this._userVerifier.hasPendingMessages) {
 | 
			
		||||
            this._userVerifier.clear();
 | 
			
		||||
            onComplete();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
@@ -509,7 +496,6 @@ const AuthPrompt = new Lang.Class({
 | 
			
		||||
        let signalId = this._userVerifier.connect('no-more-messages',
 | 
			
		||||
                                                  Lang.bind(this, function() {
 | 
			
		||||
                                                      this._userVerifier.disconnect(signalId);
 | 
			
		||||
                                                      this._userVerifier.clear();
 | 
			
		||||
                                                      onComplete();
 | 
			
		||||
                                                  }));
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -16,34 +16,6 @@
 | 
			
		||||
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * In order for transformation animations to look good, they need to be
 | 
			
		||||
 * incremental and have some order to them (e.g., fade out hidden items,
 | 
			
		||||
 * then shrink to close the void left over). Chaining animations in this way can
 | 
			
		||||
 * be error-prone and wordy using just Tweener callbacks.
 | 
			
		||||
 *
 | 
			
		||||
 * The classes in this file help with this:
 | 
			
		||||
 *
 | 
			
		||||
 * - Task.  encapsulates schedulable work to be run in a specific scope.
 | 
			
		||||
 *
 | 
			
		||||
 * - ConsecutiveBatch.  runs a series of tasks in order and completes
 | 
			
		||||
 *                      when the last in the series finishes.
 | 
			
		||||
 *
 | 
			
		||||
 * - ConcurrentBatch.  runs a set of tasks at the same time and completes
 | 
			
		||||
 *                     when the last to finish completes.
 | 
			
		||||
 *
 | 
			
		||||
 * - Hold.  prevents a batch from completing the pending task until
 | 
			
		||||
 *          the hold is released.
 | 
			
		||||
 *
 | 
			
		||||
 * The tasks associated with a batch are specified in a list at batch
 | 
			
		||||
 * construction time as either task objects or plain functions.
 | 
			
		||||
 * Batches are task objects, themselves, so they can be nested.
 | 
			
		||||
 *
 | 
			
		||||
 * These classes aren't specific to GDM, but were found to be unintuitive and so
 | 
			
		||||
 * are not used elsewhere. These APIs may ultimately get dropped entirely and
 | 
			
		||||
 * replaced by something else.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
const Lang = imports.lang;
 | 
			
		||||
const Signals = imports.signals;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -535,9 +535,6 @@ const LoginDialog = new Lang.Class({
 | 
			
		||||
        let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2;
 | 
			
		||||
        let centerY = dialogBox.y1 + (dialogBox.y2 - dialogBox.y1) / 2;
 | 
			
		||||
 | 
			
		||||
        natWidth = Math.min(natWidth, dialogBox.x2 - dialogBox.x1);
 | 
			
		||||
        natHeight = Math.min(natHeight, dialogBox.y2 - dialogBox.y1);
 | 
			
		||||
 | 
			
		||||
        actorBox.x1 = Math.floor(centerX - natWidth / 2);
 | 
			
		||||
        actorBox.y1 = Math.floor(centerY - natHeight / 2);
 | 
			
		||||
        actorBox.x2 = actorBox.x1 + natWidth;
 | 
			
		||||
@@ -877,7 +874,7 @@ const LoginDialog = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _loginScreenSessionActivated: function() {
 | 
			
		||||
        if (this.actor.opacity == 255 && this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
 | 
			
		||||
        if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.VERIFICATION_SUCCEEDED)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        Tweener.addTween(this.actor,
 | 
			
		||||
@@ -894,8 +891,7 @@ const LoginDialog = new Lang.Class({
 | 
			
		||||
                           },
 | 
			
		||||
                           onUpdateScope: this,
 | 
			
		||||
                           onComplete: function() {
 | 
			
		||||
                               if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
 | 
			
		||||
                                   this._authPrompt.reset();
 | 
			
		||||
                               this._authPrompt.reset();
 | 
			
		||||
                           },
 | 
			
		||||
                           onCompleteScope: this });
 | 
			
		||||
    },
 | 
			
		||||
@@ -924,7 +920,11 @@ const LoginDialog = new Lang.Class({
 | 
			
		||||
                           },
 | 
			
		||||
                           onUpdateScope: this,
 | 
			
		||||
                           onComplete: function() {
 | 
			
		||||
                               this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
 | 
			
		||||
                               let id = Mainloop.idle_add(Lang.bind(this, function() {
 | 
			
		||||
                                   this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
 | 
			
		||||
                                   return GLib.SOURCE_REMOVE;
 | 
			
		||||
                               }));
 | 
			
		||||
                               GLib.Source.set_name_by_id(id, '[gnome-shell] this._greeter.call_start_session_when_ready_sync');
 | 
			
		||||
                           },
 | 
			
		||||
                           onCompleteScope: this });
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -448,6 +448,8 @@ const AppSwitcher = new Lang.Class({
 | 
			
		||||
            });
 | 
			
		||||
            if (appIcon.cachedWindows.length > 0)
 | 
			
		||||
                this._addIcon(appIcon);
 | 
			
		||||
            else if (workspace == null)
 | 
			
		||||
                throw new Error('%s appears to be running, but doesn\'t have any windows'.format(appIcon.app.get_name()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._curApp = -1;
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ const St = imports.gi.St;
 | 
			
		||||
const Signals = imports.signals;
 | 
			
		||||
const Atk = imports.gi.Atk;
 | 
			
		||||
 | 
			
		||||
const ANIMATED_ICON_UPDATE_TIMEOUT = 16;
 | 
			
		||||
const ANIMATED_ICON_UPDATE_TIMEOUT = 14;
 | 
			
		||||
 | 
			
		||||
const Animation = new Lang.Class({
 | 
			
		||||
    Name: 'Animation',
 | 
			
		||||
@@ -33,7 +33,7 @@ const Animation = new Lang.Class({
 | 
			
		||||
            if (this._frame == 0)
 | 
			
		||||
                this._showFrame(0);
 | 
			
		||||
 | 
			
		||||
            this._timeoutId = GLib.timeout_add(GLib.PRIORITY_LOW, this._speed, Lang.bind(this, this._update));
 | 
			
		||||
            this._timeoutId = Mainloop.timeout_add(this._speed, Lang.bind(this, this._update));
 | 
			
		||||
            GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._update');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -144,7 +144,6 @@ const BackgroundCache = new Lang.Class({
 | 
			
		||||
        this._pendingFileLoads = [];
 | 
			
		||||
        this._fileMonitors = {};
 | 
			
		||||
        this._backgroundSources = {};
 | 
			
		||||
        this._animations = {};
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    monitorFile: function(file) {
 | 
			
		||||
@@ -163,13 +162,12 @@ const BackgroundCache = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    getAnimation: function(params) {
 | 
			
		||||
        params = Params.parse(params, { file: null,
 | 
			
		||||
                                        settingsSchema: null,
 | 
			
		||||
                                        onLoaded: null });
 | 
			
		||||
 | 
			
		||||
        if (this._animations[params.settingsSchema] && _fileEqual0(this._animationFile, params.file)) {
 | 
			
		||||
        if (_fileEqual0(this._animationFile, params.file)) {
 | 
			
		||||
            if (params.onLoaded) {
 | 
			
		||||
                let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
 | 
			
		||||
                    params.onLoaded(this._animations[params.settingsSchema]);
 | 
			
		||||
                    params.onLoaded(this._animation);
 | 
			
		||||
                    return GLib.SOURCE_REMOVE;
 | 
			
		||||
                }));
 | 
			
		||||
                GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
 | 
			
		||||
@@ -180,11 +178,12 @@ const BackgroundCache = new Lang.Class({
 | 
			
		||||
        let animation = new Animation({ file: params.file });
 | 
			
		||||
 | 
			
		||||
        animation.load(Lang.bind(this, function() {
 | 
			
		||||
                           this._animations[params.settingsSchema] = animation;
 | 
			
		||||
                           this._animationFile = params.file;
 | 
			
		||||
                           this._animation = animation;
 | 
			
		||||
 | 
			
		||||
                           if (params.onLoaded) {
 | 
			
		||||
                               let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
 | 
			
		||||
                                   params.onLoaded(this._animations[params.settingsSchema]);
 | 
			
		||||
                                   params.onLoaded(this._animation);
 | 
			
		||||
                                   return GLib.SOURCE_REMOVE;
 | 
			
		||||
                               }));
 | 
			
		||||
                               GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
 | 
			
		||||
@@ -404,18 +403,17 @@ const Background = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    _loadAnimation: function(file) {
 | 
			
		||||
        this._cache.getAnimation({ file: file,
 | 
			
		||||
                                   settingsSchema: this._settings.schema_id,
 | 
			
		||||
                                   onLoaded: Lang.bind(this, function(animation) {
 | 
			
		||||
                                       this._animation = animation;
 | 
			
		||||
                                         onLoaded: Lang.bind(this, function(animation) {
 | 
			
		||||
                                             this._animation = animation;
 | 
			
		||||
 | 
			
		||||
                                       if (!this._animation || this._cancellable.is_cancelled()) {
 | 
			
		||||
                                           this._setLoaded();
 | 
			
		||||
                                           return;
 | 
			
		||||
                                       }
 | 
			
		||||
                                             if (!this._animation || this._cancellable.is_cancelled()) {
 | 
			
		||||
                                                 this._setLoaded();
 | 
			
		||||
                                                 return;
 | 
			
		||||
                                             }
 | 
			
		||||
 | 
			
		||||
                                       this._updateAnimation();
 | 
			
		||||
                                       this._watchFile(file);
 | 
			
		||||
                                   })
 | 
			
		||||
                                             this._updateAnimation();
 | 
			
		||||
                                             this._watchFile(file);
 | 
			
		||||
                                         })
 | 
			
		||||
                                 });
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,8 +24,6 @@ const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
 | 
			
		||||
const SHOW_WEEKDATE_KEY = 'show-weekdate';
 | 
			
		||||
const ELLIPSIS_CHAR = '\u2026';
 | 
			
		||||
 | 
			
		||||
const MESSAGE_ICON_SIZE = 32;
 | 
			
		||||
 | 
			
		||||
const MESSAGE_ANIMATION_TIME = 0.1;
 | 
			
		||||
 | 
			
		||||
const DEFAULT_EXPAND_LINES = 6;
 | 
			
		||||
@@ -725,7 +723,7 @@ const Calendar = new Lang.Class({
 | 
			
		||||
        // nRows here means 6 weeks + one header + one navbar
 | 
			
		||||
        let nRows = 8;
 | 
			
		||||
        while (row < 8) {
 | 
			
		||||
            let button = new St.Button({ label: iter.toLocaleFormat(C_("date day number format", "%d")),
 | 
			
		||||
            let button = new St.Button({ label: iter.getDate().toString(),
 | 
			
		||||
                                         can_focus: true });
 | 
			
		||||
            let rtl = button.get_text_direction() == Clutter.TextDirection.RTL;
 | 
			
		||||
 | 
			
		||||
@@ -978,6 +976,7 @@ const Message = new Lang.Class({
 | 
			
		||||
        this._iconBin = new St.Bin({ style_class: 'message-icon-bin',
 | 
			
		||||
                                     y_expand: true,
 | 
			
		||||
                                     visible: false });
 | 
			
		||||
        this._iconBin.set_y_align(Clutter.ActorAlign.START);
 | 
			
		||||
        hbox.add_actor(this._iconBin);
 | 
			
		||||
 | 
			
		||||
        let contentBox = new St.BoxLayout({ style_class: 'message-content',
 | 
			
		||||
@@ -1230,7 +1229,7 @@ const NotificationMessage = new Lang.Class({
 | 
			
		||||
                this._closed = true;
 | 
			
		||||
                this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED);
 | 
			
		||||
            }));
 | 
			
		||||
        this._destroyId = notification.connect('destroy', Lang.bind(this,
 | 
			
		||||
        notification.connect('destroy', Lang.bind(this,
 | 
			
		||||
            function() {
 | 
			
		||||
                if (!this._closed)
 | 
			
		||||
                    this.close();
 | 
			
		||||
@@ -1241,10 +1240,9 @@ const NotificationMessage = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    _getIcon: function() {
 | 
			
		||||
        if (this.notification.gicon)
 | 
			
		||||
            return new St.Icon({ gicon: this.notification.gicon,
 | 
			
		||||
                                 icon_size: MESSAGE_ICON_SIZE });
 | 
			
		||||
            return new St.Icon({ gicon: this.notification.gicon, icon_size: 48 });
 | 
			
		||||
        else
 | 
			
		||||
            return this.notification.source.createIcon(MESSAGE_ICON_SIZE);
 | 
			
		||||
            return this.notification.source.createIcon(48);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onUpdated: function(n, clear) {
 | 
			
		||||
@@ -1262,10 +1260,6 @@ const NotificationMessage = new Lang.Class({
 | 
			
		||||
        if (this._updatedId)
 | 
			
		||||
            this.notification.disconnect(this._updatedId);
 | 
			
		||||
        this._updatedId = 0;
 | 
			
		||||
 | 
			
		||||
        if (this._destroyId)
 | 
			
		||||
            this.notification.disconnect(this._destroyId);
 | 
			
		||||
        this._destroyId = 0;
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -325,6 +325,9 @@ const AutorunNotification = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this._manager = manager;
 | 
			
		||||
        this._mount = source.mount;
 | 
			
		||||
 | 
			
		||||
        // set the notification to urgent, so that it expands out
 | 
			
		||||
        this.setUrgency(MessageTray.Urgency.CRITICAL);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    createBanner: function() {
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ const ShellEntry = imports.ui.shellEntry;
 | 
			
		||||
const CheckBox = imports.ui.checkBox;
 | 
			
		||||
const Tweener = imports.ui.tweener;
 | 
			
		||||
 | 
			
		||||
const WORK_SPINNER_ICON_SIZE = 16;
 | 
			
		||||
const WORK_SPINNER_ICON_SIZE = 24;
 | 
			
		||||
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
 | 
			
		||||
const WORK_SPINNER_ANIMATION_TIME = 0.3;
 | 
			
		||||
 | 
			
		||||
@@ -78,6 +78,13 @@ const KeyringDialog = new Lang.Class({
 | 
			
		||||
        this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _createSpinner: function() {
 | 
			
		||||
        let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
 | 
			
		||||
        this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
 | 
			
		||||
        this._workSpinner.actor.opacity = 0;
 | 
			
		||||
        this._workSpinner.actor.show();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _setWorking: function(working) {
 | 
			
		||||
        if (!this._workSpinner)
 | 
			
		||||
            return;
 | 
			
		||||
@@ -127,10 +134,7 @@ const KeyringDialog = new Lang.Class({
 | 
			
		||||
            ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
 | 
			
		||||
            this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onPasswordActivate));
 | 
			
		||||
 | 
			
		||||
            let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
 | 
			
		||||
            this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
 | 
			
		||||
            this._workSpinner.actor.opacity = 0;
 | 
			
		||||
 | 
			
		||||
            this._createSpinner();
 | 
			
		||||
            if (rtl) {
 | 
			
		||||
                layout.attach(this._workSpinner.actor, 0, row, 1, 1);
 | 
			
		||||
                layout.attach(this._passwordEntry, 1, row, 1, 1);
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ const Tweener = imports.ui.tweener;
 | 
			
		||||
 | 
			
		||||
const DIALOG_ICON_SIZE = 48;
 | 
			
		||||
 | 
			
		||||
const WORK_SPINNER_ICON_SIZE = 16;
 | 
			
		||||
const WORK_SPINNER_ICON_SIZE = 24;
 | 
			
		||||
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
 | 
			
		||||
const WORK_SPINNER_ANIMATION_TIME = 0.3;
 | 
			
		||||
 | 
			
		||||
@@ -142,13 +142,7 @@ const AuthenticationDialog = new Lang.Class({
 | 
			
		||||
        this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate));
 | 
			
		||||
        this._passwordBox.add(this._passwordEntry,
 | 
			
		||||
                              { expand: true });
 | 
			
		||||
 | 
			
		||||
        let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
 | 
			
		||||
        this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
 | 
			
		||||
        this._workSpinner.actor.opacity = 0;
 | 
			
		||||
 | 
			
		||||
        this._passwordBox.add(this._workSpinner.actor);
 | 
			
		||||
 | 
			
		||||
        this._addSpinner();
 | 
			
		||||
        this.setInitialKeyFocus(this._passwordEntry);
 | 
			
		||||
        this._passwordBox.hide();
 | 
			
		||||
 | 
			
		||||
@@ -189,6 +183,15 @@ const AuthenticationDialog = new Lang.Class({
 | 
			
		||||
        this._cookie = cookie;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _addSpinner: function() {
 | 
			
		||||
        let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
 | 
			
		||||
        this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
 | 
			
		||||
        this._workSpinner.actor.opacity = 0;
 | 
			
		||||
        this._workSpinner.actor.show();
 | 
			
		||||
 | 
			
		||||
        this._passwordBox.add(this._workSpinner.actor);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _setWorking: function(working) {
 | 
			
		||||
        Tweener.removeTweens(this._workSpinner.actor);
 | 
			
		||||
        if (working) {
 | 
			
		||||
 
 | 
			
		||||
@@ -303,8 +303,6 @@ const ChatSource = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _createPolicy: function() {
 | 
			
		||||
        if (this._account.protocol_name == 'irc')
 | 
			
		||||
            return new MessageTray.NotificationApplicationPolicy('org.gnome.Polari');
 | 
			
		||||
        return new MessageTray.NotificationApplicationPolicy('empathy');
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -644,14 +644,15 @@ const Dash = new Lang.Class({
 | 
			
		||||
        let firstIcon = firstButton._delegate.icon;
 | 
			
		||||
 | 
			
		||||
        let minHeight, natHeight;
 | 
			
		||||
        let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
 | 
			
		||||
 | 
			
		||||
        // Enforce the current icon size during the size request
 | 
			
		||||
        firstIcon.icon.ensure_style();
 | 
			
		||||
        let [currentWidth, currentHeight] = firstIcon.icon.get_size();
 | 
			
		||||
        firstIcon.icon.set_size(this.iconSize * scaleFactor, this.iconSize * scaleFactor);
 | 
			
		||||
        firstIcon.setIconSize(this.iconSize);
 | 
			
		||||
        [minHeight, natHeight] = firstButton.get_preferred_height(-1);
 | 
			
		||||
        firstIcon.icon.set_size(currentWidth, currentHeight);
 | 
			
		||||
 | 
			
		||||
        let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
 | 
			
		||||
        let iconSizes = baseIconSizes.map(function(s) {
 | 
			
		||||
            return s * scaleFactor;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        // Subtract icon padding and box spacing from the available height
 | 
			
		||||
        availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) +
 | 
			
		||||
@@ -659,10 +660,6 @@ const Dash = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        let availSize = availHeight / iconChildren.length;
 | 
			
		||||
 | 
			
		||||
        let iconSizes = baseIconSizes.map(function(s) {
 | 
			
		||||
            return s * scaleFactor;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        let newIconSize = baseIconSizes[0];
 | 
			
		||||
        for (let i = 0; i < iconSizes.length; i++) {
 | 
			
		||||
            if (iconSizes[i] < availSize)
 | 
			
		||||
 
 | 
			
		||||
@@ -78,7 +78,6 @@ let _startDate;
 | 
			
		||||
let _defaultCssStylesheet = null;
 | 
			
		||||
let _cssStylesheet = null;
 | 
			
		||||
let _a11ySettings = null;
 | 
			
		||||
let _themeResource = null;
 | 
			
		||||
 | 
			
		||||
function _sessionUpdated() {
 | 
			
		||||
    if (sessionMode.isPrimary)
 | 
			
		||||
@@ -138,7 +137,9 @@ function _initializeUI() {
 | 
			
		||||
    Shell.WindowTracker.get_default();
 | 
			
		||||
    Shell.AppUsage.get_default();
 | 
			
		||||
 | 
			
		||||
    reloadThemeResource();
 | 
			
		||||
    let resource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
 | 
			
		||||
    resource._register();
 | 
			
		||||
 | 
			
		||||
    _loadDefaultStylesheet();
 | 
			
		||||
 | 
			
		||||
    // Setup the stage hierarchy early
 | 
			
		||||
@@ -289,14 +290,6 @@ function setThemeStylesheet(cssStylesheet) {
 | 
			
		||||
    _cssStylesheet = cssStylesheet ? Gio.File.new_for_path(cssStylesheet) : null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function reloadThemeResource() {
 | 
			
		||||
    if (_themeResource)
 | 
			
		||||
        _themeResource._unregister();
 | 
			
		||||
 | 
			
		||||
    _themeResource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
 | 
			
		||||
    _themeResource._register();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * loadTheme:
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@ const Atk = imports.gi.Atk;
 | 
			
		||||
 | 
			
		||||
const Params = imports.misc.params;
 | 
			
		||||
 | 
			
		||||
const Animation = imports.ui.animation;
 | 
			
		||||
const Layout = imports.ui.layout;
 | 
			
		||||
const Lightbox = imports.ui.lightbox;
 | 
			
		||||
const Main = imports.ui.main;
 | 
			
		||||
@@ -22,6 +23,10 @@ const Tweener = imports.ui.tweener;
 | 
			
		||||
const OPEN_AND_CLOSE_TIME = 0.1;
 | 
			
		||||
const FADE_OUT_DIALOG_TIME = 1.0;
 | 
			
		||||
 | 
			
		||||
const WORK_SPINNER_ICON_SIZE = 16;
 | 
			
		||||
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
 | 
			
		||||
const WORK_SPINNER_ANIMATION_TIME = 0.3;
 | 
			
		||||
 | 
			
		||||
const State = {
 | 
			
		||||
    OPENED: 0,
 | 
			
		||||
    CLOSED: 1,
 | 
			
		||||
@@ -74,9 +79,7 @@ const ModalDialog = new Lang.Class({
 | 
			
		||||
        this._group.add_actor(this._backgroundBin);
 | 
			
		||||
 | 
			
		||||
        this.dialogLayout = new St.BoxLayout({ style_class: 'modal-dialog',
 | 
			
		||||
                                               x_align:      Clutter.ActorAlign.CENTER,
 | 
			
		||||
                                               y_align:      Clutter.ActorAlign.CENTER,
 | 
			
		||||
                                               vertical:     true });
 | 
			
		||||
                                               vertical:    true });
 | 
			
		||||
        // modal dialogs are fixed width and grow vertically; set the request
 | 
			
		||||
        // mode accordingly so wrapped labels are handled correctly during
 | 
			
		||||
        // size requests.
 | 
			
		||||
@@ -97,8 +100,7 @@ const ModalDialog = new Lang.Class({
 | 
			
		||||
        this.backgroundStack.add_actor(this.dialogLayout);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        this.contentLayout = new St.BoxLayout({ vertical: true,
 | 
			
		||||
                                                style_class: "modal-dialog-content-box" });
 | 
			
		||||
        this.contentLayout = new St.BoxLayout({ vertical: true });
 | 
			
		||||
        this.dialogLayout.add(this.contentLayout,
 | 
			
		||||
                              { expand:  true,
 | 
			
		||||
                                x_fill:  true,
 | 
			
		||||
@@ -106,7 +108,8 @@ const ModalDialog = new Lang.Class({
 | 
			
		||||
                                x_align: St.Align.MIDDLE,
 | 
			
		||||
                                y_align: St.Align.START });
 | 
			
		||||
 | 
			
		||||
        this.buttonLayout = new St.Widget ({ layout_manager: new Clutter.BoxLayout ({ homogeneous:true }) });
 | 
			
		||||
        this.buttonLayout = new St.BoxLayout({ style_class: 'modal-dialog-button-box',
 | 
			
		||||
                                               vertical: false });
 | 
			
		||||
        this.dialogLayout.add(this.buttonLayout,
 | 
			
		||||
                              { x_align: St.Align.MIDDLE,
 | 
			
		||||
                                y_align: St.Align.END });
 | 
			
		||||
@@ -115,6 +118,8 @@ const ModalDialog = new Lang.Class({
 | 
			
		||||
        this._initialKeyFocus = this.dialogLayout;
 | 
			
		||||
        this._initialKeyFocusDestroyId = 0;
 | 
			
		||||
        this._savedKeyFocus = null;
 | 
			
		||||
 | 
			
		||||
        this._workSpinner = null;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    destroy: function() {
 | 
			
		||||
@@ -142,12 +147,16 @@ const ModalDialog = new Lang.Class({
 | 
			
		||||
            else
 | 
			
		||||
                x_alignment = St.Align.MIDDLE;
 | 
			
		||||
 | 
			
		||||
            this.addButton(buttonInfo);
 | 
			
		||||
            this.addButton(buttonInfo, { expand: true,
 | 
			
		||||
                                         x_fill: false,
 | 
			
		||||
                                         y_fill: false,
 | 
			
		||||
                                         x_align: x_alignment,
 | 
			
		||||
                                         y_align: St.Align.MIDDLE });
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    addButton: function(buttonInfo) {
 | 
			
		||||
        let label = buttonInfo['label']
 | 
			
		||||
    addButton: function(buttonInfo, layoutInfo) {
 | 
			
		||||
        let label = buttonInfo['label'];
 | 
			
		||||
        let action = buttonInfo['action'];
 | 
			
		||||
        let key = buttonInfo['key'];
 | 
			
		||||
        let isDefault = buttonInfo['default'];
 | 
			
		||||
@@ -161,12 +170,10 @@ const ModalDialog = new Lang.Class({
 | 
			
		||||
        else
 | 
			
		||||
            keys = [];
 | 
			
		||||
 | 
			
		||||
        let button = new St.Button({ style_class: 'modal-dialog-linked-button',
 | 
			
		||||
        let button = new St.Button({ style_class: 'modal-dialog-button button',
 | 
			
		||||
                                     button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
 | 
			
		||||
                                     reactive:    true,
 | 
			
		||||
                                     can_focus:   true,
 | 
			
		||||
                                     x_expand:    true,
 | 
			
		||||
                                     y_expand:    true,
 | 
			
		||||
                                     label:       label });
 | 
			
		||||
        button.connect('clicked', action);
 | 
			
		||||
 | 
			
		||||
@@ -181,11 +188,47 @@ const ModalDialog = new Lang.Class({
 | 
			
		||||
        for (let i in keys)
 | 
			
		||||
            this._buttonKeys[keys[i]] = buttonInfo;
 | 
			
		||||
 | 
			
		||||
        this.buttonLayout.add_actor(button);
 | 
			
		||||
        this.buttonLayout.add(button, layoutInfo);
 | 
			
		||||
 | 
			
		||||
        return button;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    placeSpinner: function(layoutInfo) {
 | 
			
		||||
        let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
 | 
			
		||||
        this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
 | 
			
		||||
        this._workSpinner.actor.opacity = 0;
 | 
			
		||||
        this._workSpinner.actor.show();
 | 
			
		||||
 | 
			
		||||
        this.buttonLayout.add(this._workSpinner.actor, layoutInfo);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    setWorking: function(working) {
 | 
			
		||||
        if (!this._workSpinner)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        Tweener.removeTweens(this._workSpinner.actor);
 | 
			
		||||
        if (working) {
 | 
			
		||||
            this._workSpinner.play();
 | 
			
		||||
            Tweener.addTween(this._workSpinner.actor,
 | 
			
		||||
                             { opacity: 255,
 | 
			
		||||
                               delay: WORK_SPINNER_ANIMATION_DELAY,
 | 
			
		||||
                               time: WORK_SPINNER_ANIMATION_TIME,
 | 
			
		||||
                               transition: 'linear'
 | 
			
		||||
                             });
 | 
			
		||||
        } else {
 | 
			
		||||
            Tweener.addTween(this._workSpinner.actor,
 | 
			
		||||
                             { opacity: 0,
 | 
			
		||||
                               time: WORK_SPINNER_ANIMATION_TIME,
 | 
			
		||||
                               transition: 'linear',
 | 
			
		||||
                               onCompleteScope: this,
 | 
			
		||||
                               onComplete: function() {
 | 
			
		||||
                                   if (this._workSpinner)
 | 
			
		||||
                                       this._workSpinner.stop();
 | 
			
		||||
                               }
 | 
			
		||||
                             });
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onKeyPressEvent: function(object, event) {
 | 
			
		||||
        this._pressedKey = event.get_key_symbol();
 | 
			
		||||
        return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
 
 | 
			
		||||
@@ -95,7 +95,6 @@ const AppMenuButton = new Lang.Class({
 | 
			
		||||
        this._startingApps = [];
 | 
			
		||||
 | 
			
		||||
        this._menuManager = panel.menuManager;
 | 
			
		||||
        this._gtkSettings = Gtk.Settings.get_default();
 | 
			
		||||
        this._targetApp = null;
 | 
			
		||||
        this._appMenuNotifyId = 0;
 | 
			
		||||
        this._actionGroupNotifyId = 0;
 | 
			
		||||
@@ -124,14 +123,11 @@ const AppMenuButton = new Lang.Class({
 | 
			
		||||
        this._arrow = PopupMenu.arrowIcon(St.Side.BOTTOM);
 | 
			
		||||
        this._container.add_actor(this._arrow);
 | 
			
		||||
 | 
			
		||||
        this._visible = this._gtkSettings.gtk_shell_shows_app_menu &&
 | 
			
		||||
                        !Main.overview.visible;
 | 
			
		||||
        this._visible = !Main.overview.visible;
 | 
			
		||||
        if (!this._visible)
 | 
			
		||||
            this.actor.hide();
 | 
			
		||||
        this._overviewHidingId = Main.overview.connect('hiding', Lang.bind(this, this._sync));
 | 
			
		||||
        this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, this._sync));
 | 
			
		||||
        this._showsAppMenuId = this._gtkSettings.connect('notify::gtk-shell-shows-app-menu',
 | 
			
		||||
                                                         Lang.bind(this, this._sync));
 | 
			
		||||
 | 
			
		||||
        this._stop = true;
 | 
			
		||||
 | 
			
		||||
@@ -309,9 +305,7 @@ const AppMenuButton = new Lang.Class({
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let visible = (this._targetApp != null &&
 | 
			
		||||
                       this._gtkSettings.gtk_shell_shows_app_menu &&
 | 
			
		||||
                       !Main.overview.visibleTarget);
 | 
			
		||||
        let visible = (this._targetApp != null && !Main.overview.visibleTarget);
 | 
			
		||||
        if (visible)
 | 
			
		||||
            this.show();
 | 
			
		||||
        else
 | 
			
		||||
@@ -384,10 +378,6 @@ const AppMenuButton = new Lang.Class({
 | 
			
		||||
            Main.overview.disconnect(this._overviewShowingId);
 | 
			
		||||
            this._overviewShowingId = 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (this._showsAppMenuId > 0) {
 | 
			
		||||
            this._gtkSettings.disconnect(this._showsAppMenuId);
 | 
			
		||||
            this._showsAppMenuId = 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (this._switchWorkspaceNotifyId > 0) {
 | 
			
		||||
            global.window_manager.disconnect(this._switchWorkspaceNotifyId);
 | 
			
		||||
            this._switchWorkspaceNotifyId = 0;
 | 
			
		||||
@@ -459,8 +449,7 @@ const ActivitiesButton = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        if (event.type() == Clutter.EventType.TOUCH_END ||
 | 
			
		||||
            event.type() == Clutter.EventType.BUTTON_RELEASE)
 | 
			
		||||
            if (Main.overview.shouldToggleByCornerOrButton())
 | 
			
		||||
                Main.overview.toggle();
 | 
			
		||||
            Main.overview.toggle();
 | 
			
		||||
 | 
			
		||||
        return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
    },
 | 
			
		||||
@@ -468,8 +457,7 @@ const ActivitiesButton = new Lang.Class({
 | 
			
		||||
    _onKeyRelease: function(actor, event) {
 | 
			
		||||
        let symbol = event.get_key_symbol();
 | 
			
		||||
        if (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_space) {
 | 
			
		||||
            if (Main.overview.shouldToggleByCornerOrButton())
 | 
			
		||||
                Main.overview.toggle();
 | 
			
		||||
            Main.overview.toggle();
 | 
			
		||||
        }
 | 
			
		||||
        return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
    },
 | 
			
		||||
@@ -654,50 +642,14 @@ const PanelCorner = new Lang.Class({
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const AggregateLayout = new Lang.Class({
 | 
			
		||||
    Name: 'AggregateLayout',
 | 
			
		||||
    Extends: Clutter.BoxLayout,
 | 
			
		||||
 | 
			
		||||
    _init: function(params) {
 | 
			
		||||
        if (!params)
 | 
			
		||||
            params = {};
 | 
			
		||||
        params['orientation'] = Clutter.Orientation.VERTICAL;
 | 
			
		||||
        this.parent(params);
 | 
			
		||||
 | 
			
		||||
        this._sizeChildren = [];
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    addSizeChild: function(actor) {
 | 
			
		||||
        this._sizeChildren.push(actor);
 | 
			
		||||
        this.layout_changed();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    vfunc_get_preferred_width: function(container, forHeight) {
 | 
			
		||||
        let themeNode = container.get_theme_node();
 | 
			
		||||
        let minWidth = themeNode.get_min_width();
 | 
			
		||||
        let natWidth = minWidth;
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < this._sizeChildren.length; i++) {
 | 
			
		||||
            let child = this._sizeChildren[i];
 | 
			
		||||
            let [childMin, childNat] = child.get_preferred_width(forHeight);
 | 
			
		||||
            minWidth = Math.max(minWidth, childMin);
 | 
			
		||||
            natWidth = Math.max(minWidth, childNat);
 | 
			
		||||
        }
 | 
			
		||||
        return [minWidth, natWidth];
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const AggregateMenu = new Lang.Class({
 | 
			
		||||
    Name: 'AggregateMenu',
 | 
			
		||||
    Extends: PanelMenu.Button,
 | 
			
		||||
 | 
			
		||||
    _init: function() {
 | 
			
		||||
        this.parent(0.0, C_("System menu in the top bar", "System"), false);
 | 
			
		||||
        this.parent(0.0, _("Settings"), false);
 | 
			
		||||
        this.menu.actor.add_style_class_name('aggregate-menu');
 | 
			
		||||
 | 
			
		||||
        let menuLayout = new AggregateLayout();
 | 
			
		||||
        this.menu.box.set_layout_manager(menuLayout);
 | 
			
		||||
 | 
			
		||||
        this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
 | 
			
		||||
        this.actor.add_child(this._indicators);
 | 
			
		||||
 | 
			
		||||
@@ -745,12 +697,8 @@ const AggregateMenu = new Lang.Class({
 | 
			
		||||
        this.menu.addMenuItem(this._location.menu);
 | 
			
		||||
        this.menu.addMenuItem(this._rfkill.menu);
 | 
			
		||||
        this.menu.addMenuItem(this._power.menu);
 | 
			
		||||
        this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
 | 
			
		||||
        this.menu.addMenuItem(this._system.menu);
 | 
			
		||||
 | 
			
		||||
        menuLayout.addSizeChild(this._location.menu.actor);
 | 
			
		||||
        menuLayout.addSizeChild(this._rfkill.menu.actor);
 | 
			
		||||
        menuLayout.addSizeChild(this._power.menu.actor);
 | 
			
		||||
        menuLayout.addSizeChild(this._system.menu.actor);
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -396,7 +396,6 @@ const PopupImageMenuItem = new Lang.Class({
 | 
			
		||||
        this.actor.add_child(this.label);
 | 
			
		||||
        this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
 | 
			
		||||
        this.actor.add_child(this._icon, { align: St.Align.END });
 | 
			
		||||
        this.actor.label_actor = this.label;
 | 
			
		||||
 | 
			
		||||
        this.setIcon(iconName);
 | 
			
		||||
    },
 | 
			
		||||
@@ -1060,6 +1059,11 @@ const PopupSubMenuMenuItem = new Lang.Class({
 | 
			
		||||
        let expander = new St.Bin({ style_class: 'popup-menu-item-expander' });
 | 
			
		||||
        this.actor.add(expander, { expand: true });
 | 
			
		||||
 | 
			
		||||
        this.status = new St.Label({ style_class: 'popup-status-menu-item',
 | 
			
		||||
                                     y_expand: true,
 | 
			
		||||
                                     y_align: Clutter.ActorAlign.CENTER });
 | 
			
		||||
        this.actor.add_child(this.status);
 | 
			
		||||
 | 
			
		||||
        this._triangle = arrowIcon(St.Side.RIGHT);
 | 
			
		||||
        this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 });
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,6 @@ const RunDialog = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
                                   // rt is short for "reload theme"
 | 
			
		||||
                                   'rt': Lang.bind(this, function() {
 | 
			
		||||
                                       Main.reloadThemeResource();
 | 
			
		||||
                                       Main.loadTheme();
 | 
			
		||||
                                   })
 | 
			
		||||
                                 };
 | 
			
		||||
 
 | 
			
		||||
@@ -23,8 +23,6 @@ const RfkillManagerInterface = '<node> \
 | 
			
		||||
 | 
			
		||||
const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface);
 | 
			
		||||
 | 
			
		||||
const HAD_BLUETOOTH_DEVICES_SETUP = 'had-bluetooth-devices-setup';
 | 
			
		||||
 | 
			
		||||
const Indicator = new Lang.Class({
 | 
			
		||||
    Name: 'BTIndicator',
 | 
			
		||||
    Extends: PanelMenu.SystemIndicator,
 | 
			
		||||
@@ -34,7 +32,6 @@ const Indicator = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this._indicator = this._addIndicator();
 | 
			
		||||
        this._indicator.icon_name = 'bluetooth-active-symbolic';
 | 
			
		||||
        this._hadSetupDevices = global.settings.get_boolean(HAD_BLUETOOTH_DEVICES_SETUP);
 | 
			
		||||
 | 
			
		||||
        this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
 | 
			
		||||
                                             Lang.bind(this, function(proxy, error) {
 | 
			
		||||
@@ -47,15 +44,13 @@ const Indicator = new Lang.Class({
 | 
			
		||||
                                             }));
 | 
			
		||||
        this._proxy.connect('g-properties-changed', Lang.bind(this, this._sync));
 | 
			
		||||
 | 
			
		||||
        // The Bluetooth menu only appears when Bluetooth is in use,
 | 
			
		||||
        // so just statically build it with a "Turn Off" menu item.
 | 
			
		||||
        this._item = new PopupMenu.PopupSubMenuMenuItem(_("Bluetooth"), true);
 | 
			
		||||
        this._item.icon.icon_name = 'bluetooth-active-symbolic';
 | 
			
		||||
 | 
			
		||||
        this._toggleItem = new PopupMenu.PopupMenuItem('');
 | 
			
		||||
        this._toggleItem.connect('activate', Lang.bind(this, function() {
 | 
			
		||||
            this._proxy.BluetoothAirplaneMode = !this._proxy.BluetoothAirplaneMode;
 | 
			
		||||
        this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
 | 
			
		||||
            this._proxy.BluetoothAirplaneMode = true;
 | 
			
		||||
        }));
 | 
			
		||||
        this._item.menu.addMenuItem(this._toggleItem);
 | 
			
		||||
 | 
			
		||||
        this._item.menu.addSettingsAction(_("Bluetooth Settings"), 'gnome-bluetooth-panel.desktop');
 | 
			
		||||
        this.menu.addMenuItem(this._item);
 | 
			
		||||
 | 
			
		||||
@@ -73,75 +68,41 @@ const Indicator = new Lang.Class({
 | 
			
		||||
        while (ret) {
 | 
			
		||||
            let isDefault = this._model.get_value(iter,
 | 
			
		||||
                                                  GnomeBluetooth.Column.DEFAULT);
 | 
			
		||||
            let isPowered = this._model.get_value(iter,
 | 
			
		||||
                                                  GnomeBluetooth.Column.POWERED);
 | 
			
		||||
            if (isDefault && isPowered)
 | 
			
		||||
            if (isDefault)
 | 
			
		||||
                return iter;
 | 
			
		||||
            ret = this._model.iter_next(iter);
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // nDevices is the number of devices setup for the current default
 | 
			
		||||
    // adapter if one exists and is powered. If unpowered or unavailable,
 | 
			
		||||
    // nDevice is "1" if it had setup devices associated to it the last
 | 
			
		||||
    // time it was seen, and "-1" if not.
 | 
			
		||||
    //
 | 
			
		||||
    // nConnectedDevices is the number of devices connected to the default
 | 
			
		||||
    // adapter if one exists and is powered, or -1 if it's not available.
 | 
			
		||||
    _getNDevices: function() {
 | 
			
		||||
    _getNConnectedDevices: function() {
 | 
			
		||||
        let adapter = this._getDefaultAdapter();
 | 
			
		||||
        if (!adapter)
 | 
			
		||||
            return [ this._hadSetupDevices ? 1 : -1, -1 ];
 | 
			
		||||
            return 0;
 | 
			
		||||
 | 
			
		||||
        let nConnectedDevices = 0;
 | 
			
		||||
        let nDevices = 0;
 | 
			
		||||
        let [ret, iter] = this._model.iter_children(adapter);
 | 
			
		||||
        while (ret) {
 | 
			
		||||
            let isConnected = this._model.get_value(iter,
 | 
			
		||||
                                                    GnomeBluetooth.Column.CONNECTED);
 | 
			
		||||
            if (isConnected)
 | 
			
		||||
                nConnectedDevices++;
 | 
			
		||||
 | 
			
		||||
            let isPaired = this._model.get_value(iter,
 | 
			
		||||
                                                 GnomeBluetooth.Column.PAIRED);
 | 
			
		||||
            let isTrusted = this._model.get_value(iter,
 | 
			
		||||
                                                  GnomeBluetooth.Column.TRUSTED);
 | 
			
		||||
            if (isPaired || isTrusted)
 | 
			
		||||
                nDevices++;
 | 
			
		||||
            ret = this._model.iter_next(iter);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (this._hadSetupDevices != (nDevices > 0)) {
 | 
			
		||||
            this._hadSetupDevices = !this._hadSetupDevices;
 | 
			
		||||
            global.settings.set_boolean(HAD_BLUETOOTH_DEVICES_SETUP, this._hadSetupDevices);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return [ nDevices, nConnectedDevices];
 | 
			
		||||
        return nDevices;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _sync: function() {
 | 
			
		||||
        let [ nDevices, nConnectedDevices ] = this._getNDevices();
 | 
			
		||||
        let nDevices = this._getNConnectedDevices();
 | 
			
		||||
        let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
 | 
			
		||||
 | 
			
		||||
        this.menu.setSensitive(sensitive);
 | 
			
		||||
        this._indicator.visible = nConnectedDevices > 0;
 | 
			
		||||
        this._indicator.visible = nDevices > 0;
 | 
			
		||||
        this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
 | 
			
		||||
 | 
			
		||||
        // Remember if there were setup devices and show the menu
 | 
			
		||||
        // if we've seen setup devices and we're not hard blocked
 | 
			
		||||
        if (nDevices > 0)
 | 
			
		||||
            this._item.actor.visible = !this._proxy.BluetoothHardwareAirplaneMode;
 | 
			
		||||
            this._item.status.text = ngettext("%d Connected Device", "%d Connected Devices", nDevices).format(nDevices);
 | 
			
		||||
        else
 | 
			
		||||
            this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
 | 
			
		||||
 | 
			
		||||
        if (nConnectedDevices > 0)
 | 
			
		||||
            /* Translators: this is the number of connected bluetooth devices */
 | 
			
		||||
            this._item.label.text = ngettext("%d Connected", "%d Connected", nConnectedDevices).format(nConnectedDevices);
 | 
			
		||||
        else if (nConnectedDevices == -1)
 | 
			
		||||
            this._item.label.text = _("Off");
 | 
			
		||||
        else
 | 
			
		||||
            this._item.label.text = _("Not In Use");
 | 
			
		||||
 | 
			
		||||
        this._toggleItem.label.text = this._proxy.BluetoothAirplaneMode ? _("Turn On") : _("Turn Off");
 | 
			
		||||
            this._item.status.text = _("Not Connected");
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -62,13 +62,13 @@ const Indicator = new Lang.Class({
 | 
			
		||||
        this._indicator = this._addIndicator();
 | 
			
		||||
        this._indicator.icon_name = 'find-location-symbolic';
 | 
			
		||||
 | 
			
		||||
        this._item = new PopupMenu.PopupSubMenuMenuItem('', true);
 | 
			
		||||
        this._item = new PopupMenu.PopupSubMenuMenuItem(_("Location"), true);
 | 
			
		||||
        this._item.icon.icon_name = 'find-location-symbolic';
 | 
			
		||||
 | 
			
		||||
        this._agent = Gio.DBusExportedObject.wrapJSObject(AgentIface, this);
 | 
			
		||||
        this._agent.export(Gio.DBus.system, '/org/freedesktop/GeoClue2/Agent');
 | 
			
		||||
 | 
			
		||||
        this._item.label.text = _("Location Enabled");
 | 
			
		||||
        this._item.status.text = _("Enabled");
 | 
			
		||||
        this._onOffAction = this._item.menu.addAction(_("Disable"), Lang.bind(this, this._onOnOffAction));
 | 
			
		||||
        this._item.menu.addSettingsAction(_("Privacy Settings"), 'gnome-privacy-panel.desktop');
 | 
			
		||||
 | 
			
		||||
@@ -173,11 +173,10 @@ const Indicator = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    _updateMenuLabels: function() {
 | 
			
		||||
        if (this._settings.get_boolean(ENABLED)) {
 | 
			
		||||
            this._item.label.text = this._indicator.visible ? _("Location In Use")
 | 
			
		||||
                                                            : _("Location Enabled");
 | 
			
		||||
            this._item.status.text = this._indicator.visible ? _("In Use") : _("Enabled");
 | 
			
		||||
            this._onOffAction.label.text = _("Disable");
 | 
			
		||||
        } else {
 | 
			
		||||
            this._item.label.text = _("Location Disabled");
 | 
			
		||||
            this._item.status.text = _("Disabled");
 | 
			
		||||
            this._onOffAction.label.text = _("Enable");
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -257,8 +257,16 @@ const NMConnectionSection = new Lang.Class({
 | 
			
		||||
        this._radioSection.actor.visible = (nItems > 1);
 | 
			
		||||
        this._labelSection.actor.visible = (nItems == 1);
 | 
			
		||||
 | 
			
		||||
        this.item.label.text = this._getStatus();
 | 
			
		||||
        this.item.status.text = this._getStatus();
 | 
			
		||||
        this.item.icon.icon_name = this._getMenuIcon();
 | 
			
		||||
 | 
			
		||||
        // desc can be undefined at cold-plug, before we called
 | 
			
		||||
        // NMGtk.disambiguate_device_names() at least once
 | 
			
		||||
        let desc = this._getDescription();
 | 
			
		||||
        if (desc)
 | 
			
		||||
            this.item.label.text = desc;
 | 
			
		||||
        else
 | 
			
		||||
            this.item.label.text = '';
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _getMenuIcon: function() {
 | 
			
		||||
@@ -347,7 +355,6 @@ const NMConnectionDevice = new Lang.Class({
 | 
			
		||||
        this.parent(client);
 | 
			
		||||
        this._device = device;
 | 
			
		||||
        this._settings = settings;
 | 
			
		||||
        this._description = '';
 | 
			
		||||
 | 
			
		||||
        this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect));
 | 
			
		||||
        this._deactivateItem = this._radioSection.addAction(_("Turn Off"), Lang.bind(this, this.deactivateConnection));
 | 
			
		||||
@@ -447,44 +454,38 @@ const NMConnectionDevice = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        switch(this._device.state) {
 | 
			
		||||
        case NetworkManager.DeviceState.DISCONNECTED:
 | 
			
		||||
            /* Translators: %s is a network identifier */
 | 
			
		||||
            return _("%s Off").format(this._getDescription());
 | 
			
		||||
            return _("Off");
 | 
			
		||||
        case NetworkManager.DeviceState.ACTIVATED:
 | 
			
		||||
            /* Translators: %s is a network identifier */
 | 
			
		||||
            return _("%s Connected").format(this._getDescription());
 | 
			
		||||
            return _("Connected");
 | 
			
		||||
        case NetworkManager.DeviceState.UNMANAGED:
 | 
			
		||||
            /* Translators: this is for network devices that are physically present but are not
 | 
			
		||||
               under NetworkManager's control (and thus cannot be used in the menu);
 | 
			
		||||
               %s is a network identifier */
 | 
			
		||||
            return _("%s Unmanaged").format(this._getDescription());
 | 
			
		||||
               under NetworkManager's control (and thus cannot be used in the menu) */
 | 
			
		||||
            return _("Unmanaged");
 | 
			
		||||
        case NetworkManager.DeviceState.DEACTIVATING:
 | 
			
		||||
            /* Translators: %s is a network identifier */
 | 
			
		||||
            return _("%s Disconnecting").format(this._getDescription());
 | 
			
		||||
            return _("Disconnecting");
 | 
			
		||||
        case NetworkManager.DeviceState.PREPARE:
 | 
			
		||||
        case NetworkManager.DeviceState.CONFIG:
 | 
			
		||||
        case NetworkManager.DeviceState.IP_CONFIG:
 | 
			
		||||
        case NetworkManager.DeviceState.IP_CHECK:
 | 
			
		||||
        case NetworkManager.DeviceState.SECONDARIES:
 | 
			
		||||
            /* Translators: %s is a network identifier */
 | 
			
		||||
            return _("%s Connecting").format(this._getDescription());
 | 
			
		||||
            return _("Connecting");
 | 
			
		||||
        case NetworkManager.DeviceState.NEED_AUTH:
 | 
			
		||||
            /* Translators: this is for network connections that require some kind of key or password; %s is a network identifier */
 | 
			
		||||
            return _("%s Requires Authentication").format(this._getDescription());
 | 
			
		||||
            /* Translators: this is for network connections that require some kind of key or password */
 | 
			
		||||
            return _("Authentication required");
 | 
			
		||||
        case NetworkManager.DeviceState.UNAVAILABLE:
 | 
			
		||||
            // This state is actually a compound of various states (generically unavailable,
 | 
			
		||||
            // firmware missing), that are exposed by different properties (whose state may
 | 
			
		||||
            // or may not updated when we receive state-changed).
 | 
			
		||||
            if (this._device.firmware_missing) {
 | 
			
		||||
                /* Translators: this is for devices that require some kind of firmware or kernel
 | 
			
		||||
                   module, which is missing; %s is a network identifier */
 | 
			
		||||
                return _("Firmware Missing For %s").format(this._getDescription());
 | 
			
		||||
                   module, which is missing */
 | 
			
		||||
                return _("Firmware missing");
 | 
			
		||||
            }
 | 
			
		||||
            /* Translators: this is for a network device that cannot be activated (for example it
 | 
			
		||||
               is disabled by rfkill, or it has no coverage; %s is a network identifier */
 | 
			
		||||
            return _("%s Unavailable").format(this._getDescription());
 | 
			
		||||
               is disabled by rfkill, or it has no coverage */
 | 
			
		||||
            return _("Unavailable");
 | 
			
		||||
        case NetworkManager.DeviceState.FAILED:
 | 
			
		||||
            /* Translators: %s is a network identifier */
 | 
			
		||||
            return _("%s Connection Failed").format(this._getDescription());
 | 
			
		||||
            return _("Connection failed");
 | 
			
		||||
        default:
 | 
			
		||||
            log('Device state invalid, is %d'.format(this._device.state));
 | 
			
		||||
            return 'invalid';
 | 
			
		||||
@@ -584,12 +585,11 @@ const NMDeviceModem = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    _getStatus: function() {
 | 
			
		||||
        if (!this._client.wwan_hardware_enabled)
 | 
			
		||||
            /* Translators: %s is a network identifier */
 | 
			
		||||
            return _("%s Hardware Disabled").format(this._getDescription());
 | 
			
		||||
            return _("Hardware Disabled");
 | 
			
		||||
        else if (!this._client.wwan_enabled)
 | 
			
		||||
            /* Translators: this is for a network device that cannot be activated
 | 
			
		||||
               because it's disabled by rfkill (airplane mode); %s is a network identifier */
 | 
			
		||||
            return _("%s Disabled").format(this._getDescription());
 | 
			
		||||
               because it's disabled by rfkill (airplane mode) */
 | 
			
		||||
            return _("Disabled");
 | 
			
		||||
        else if (this._device.state == NetworkManager.DeviceState.ACTIVATED &&
 | 
			
		||||
                 this._mobileDevice && this._mobileDevice.operator_name)
 | 
			
		||||
            return this._mobileDevice.operator_name;
 | 
			
		||||
@@ -1279,8 +1279,9 @@ const NMDeviceWireless = new Lang.Class({
 | 
			
		||||
        this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On");
 | 
			
		||||
        this._toggleItem.actor.visible = this._client.wireless_hardware_enabled;
 | 
			
		||||
 | 
			
		||||
        this.item.status.text = this._getStatus();
 | 
			
		||||
        this.item.icon.icon_name = this._getMenuIcon();
 | 
			
		||||
        this.item.label.text = this._getStatus();
 | 
			
		||||
        this.item.label.text = this._description;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    setDeviceDescription: function(desc) {
 | 
			
		||||
@@ -1292,23 +1293,18 @@ const NMDeviceWireless = new Lang.Class({
 | 
			
		||||
        let ap = this._device.active_access_point;
 | 
			
		||||
 | 
			
		||||
        if (this._isHotSpotMaster())
 | 
			
		||||
            /* Translators: %s is a network identifier */
 | 
			
		||||
            return _("%s Hotspot Active").format(this._description);
 | 
			
		||||
            return _("Hotspot Active");
 | 
			
		||||
        else if (this._device.state >= NetworkManager.DeviceState.PREPARE &&
 | 
			
		||||
                 this._device.state < NetworkManager.DeviceState.ACTIVATED)
 | 
			
		||||
            /* Translators: %s is a network identifier */
 | 
			
		||||
            return _("%s Connecting").format(this._description);
 | 
			
		||||
            return _("Connecting");
 | 
			
		||||
        else if (ap)
 | 
			
		||||
            return ssidToLabel(ap.get_ssid());
 | 
			
		||||
        else if (!this._client.wireless_hardware_enabled)
 | 
			
		||||
            /* Translators: %s is a network identifier */
 | 
			
		||||
            return _("%s Hardware Disabled").format(this._description);
 | 
			
		||||
            return _("Hardware Disabled");
 | 
			
		||||
        else if (!this._client.wireless_enabled)
 | 
			
		||||
            /* Translators: %s is a network identifier */
 | 
			
		||||
            return _("%s Off").format(this._description);
 | 
			
		||||
            return _("Off");
 | 
			
		||||
        else if (this._device.state == NetworkManager.DeviceState.DISCONNECTED)
 | 
			
		||||
            /* Translators: %s is a network identifier */
 | 
			
		||||
            return _("%s Not Connected").format(this._description);
 | 
			
		||||
            return _("Not Connected");
 | 
			
		||||
        else
 | 
			
		||||
            return '';
 | 
			
		||||
    },
 | 
			
		||||
@@ -1510,7 +1506,7 @@ const NMVPNSection = new Lang.Class({
 | 
			
		||||
                return item.getName();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return _("VPN Off");
 | 
			
		||||
        return _("Off");
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _getMenuIcon: function() {
 | 
			
		||||
 
 | 
			
		||||
@@ -112,6 +112,12 @@ const Indicator = new Lang.Class({
 | 
			
		||||
        this._item.icon.icon_name = icon;
 | 
			
		||||
 | 
			
		||||
        // The status label
 | 
			
		||||
        this._item.label.text = this._getStatus();
 | 
			
		||||
        this._item.status.text = this._getStatus();
 | 
			
		||||
 | 
			
		||||
        // The sub-menu heading
 | 
			
		||||
        if (this._proxy.Type == UPower.DeviceKind.UPS)
 | 
			
		||||
            this._item.label.text = _("UPS");
 | 
			
		||||
        else
 | 
			
		||||
            this._item.label.text = _("Battery");
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -85,8 +85,9 @@ const Indicator = new Lang.Class({
 | 
			
		||||
        // The menu only appears when airplane mode is on, so just
 | 
			
		||||
        // statically build it as if it was on, rather than dynamically
 | 
			
		||||
        // changing the menu contents.
 | 
			
		||||
        this._item = new PopupMenu.PopupSubMenuMenuItem(_("Airplane Mode On"), true);
 | 
			
		||||
        this._item = new PopupMenu.PopupSubMenuMenuItem(_("Airplane Mode"), true);
 | 
			
		||||
        this._item.icon.icon_name = 'airplane-mode-symbolic';
 | 
			
		||||
        this._item.status.text = _("On");
 | 
			
		||||
        this._offItem = this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
 | 
			
		||||
            this._manager.airplaneMode = false;
 | 
			
		||||
        }));
 | 
			
		||||
 
 | 
			
		||||
@@ -251,14 +251,8 @@ const Indicator = new Lang.Class({
 | 
			
		||||
            let file = Gio.File.new_for_path(iconFile);
 | 
			
		||||
            let gicon = new Gio.FileIcon({ file: file });
 | 
			
		||||
            this._switchUserSubMenu.icon.gicon = gicon;
 | 
			
		||||
 | 
			
		||||
            this._switchUserSubMenu.icon.add_style_class_name('user-icon');
 | 
			
		||||
            this._switchUserSubMenu.icon.remove_style_class_name('default-icon');
 | 
			
		||||
        } else {
 | 
			
		||||
            this._switchUserSubMenu.icon.icon_name = 'avatar-default-symbolic';
 | 
			
		||||
 | 
			
		||||
            this._switchUserSubMenu.icon.add_style_class_name('default-icon');
 | 
			
		||||
            this._switchUserSubMenu.icon.remove_style_class_name('user-icon');
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -350,9 +344,6 @@ const Indicator = new Lang.Class({
 | 
			
		||||
        this._switchUserSubMenu.menu.addMenuItem(item);
 | 
			
		||||
        this._logoutItem = item;
 | 
			
		||||
 | 
			
		||||
        this._switchUserSubMenu.menu.addSettingsAction(_("Account Settings"),
 | 
			
		||||
                                                       'gnome-user-accounts-panel.desktop');
 | 
			
		||||
 | 
			
		||||
        this._user.connect('notify::is-loaded', Lang.bind(this, this._updateSwitchUserSubMenu));
 | 
			
		||||
        this._user.connect('changed', Lang.bind(this, this._updateSwitchUserSubMenu));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -465,12 +465,6 @@ const ViewSelector = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _shouldTriggerSearch: function(symbol) {
 | 
			
		||||
        if (symbol == Clutter.Multi_key)
 | 
			
		||||
            return true;
 | 
			
		||||
 | 
			
		||||
        if (symbol == Clutter.BackSpace && this._searchActive)
 | 
			
		||||
            return true;
 | 
			
		||||
 | 
			
		||||
        let unicode = Clutter.keysym_to_unicode(symbol);
 | 
			
		||||
        if (unicode == 0)
 | 
			
		||||
            return false;
 | 
			
		||||
@@ -478,7 +472,7 @@ const ViewSelector = new Lang.Class({
 | 
			
		||||
        if (getTermsForSearchString(String.fromCharCode(unicode)).length > 0)
 | 
			
		||||
            return true;
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
        return symbol == Clutter.BackSpace && this._searchActive;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    startSearch: function(event) {
 | 
			
		||||
 
 | 
			
		||||
@@ -677,7 +677,6 @@ const WindowManager = new Lang.Class({
 | 
			
		||||
        this._minimizing = [];
 | 
			
		||||
        this._unminimizing = [];
 | 
			
		||||
        this._mapping = [];
 | 
			
		||||
        this._resizing = [];
 | 
			
		||||
        this._destroying = [];
 | 
			
		||||
        this._movingWindow = null;
 | 
			
		||||
 | 
			
		||||
@@ -693,7 +692,6 @@ const WindowManager = new Lang.Class({
 | 
			
		||||
            this._minimizeWindowDone(shellwm, actor);
 | 
			
		||||
            this._mapWindowDone(shellwm, actor);
 | 
			
		||||
            this._destroyWindowDone(shellwm, actor);
 | 
			
		||||
            this._sizeChangeWindowDone(shellwm, actor);
 | 
			
		||||
        }));
 | 
			
		||||
 | 
			
		||||
        this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace));
 | 
			
		||||
@@ -1220,120 +1218,9 @@ const WindowManager = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _sizeChangeWindow : function(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) {
 | 
			
		||||
        let types = [Meta.WindowType.NORMAL];
 | 
			
		||||
        if (!this._shouldAnimateActor(actor, types)) {
 | 
			
		||||
            shellwm.completed_size_change(actor);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (whichChange == Meta.SizeChange.FULLSCREEN)
 | 
			
		||||
            this._fullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
 | 
			
		||||
        else if (whichChange == Meta.SizeChange.UNFULLSCREEN)
 | 
			
		||||
            this._unfullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
 | 
			
		||||
        else
 | 
			
		||||
            shellwm.completed_size_change(actor);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _fullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
 | 
			
		||||
        let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
 | 
			
		||||
        actor.translation_x = oldFrameRect.x - monitor.x;
 | 
			
		||||
        actor.translation_y = oldFrameRect.y - monitor.y;
 | 
			
		||||
        this._fullscreenAnimation(shellwm, actor, oldFrameRect);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _unfullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
 | 
			
		||||
        let targetRect = actor.meta_window.get_frame_rect();
 | 
			
		||||
        let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
 | 
			
		||||
        actor.translation_x = -(targetRect.x - monitor.x);
 | 
			
		||||
        actor.translation_y = -(targetRect.y - monitor.y);
 | 
			
		||||
        this._fullscreenAnimation(shellwm, actor, oldFrameRect);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _fullscreenAnimation: function(shellwm, actor, oldFrameRect) {
 | 
			
		||||
        this._resizing.push(actor);
 | 
			
		||||
 | 
			
		||||
        // Position a clone of the window on top of the old position,
 | 
			
		||||
        // while actor updates are frozen.
 | 
			
		||||
        // Note that the MetaWindow has up to date sizing information for
 | 
			
		||||
        // the new geometry already.
 | 
			
		||||
        let targetRect = actor.meta_window.get_frame_rect();
 | 
			
		||||
        let actorContent = Shell.util_get_content_for_window_actor(actor, oldFrameRect);
 | 
			
		||||
        let actorClone = new St.Widget({ content: actorContent });
 | 
			
		||||
        actorClone.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
 | 
			
		||||
        actorClone.set_position(oldFrameRect.x, oldFrameRect.y);
 | 
			
		||||
        actorClone.set_size(oldFrameRect.width, oldFrameRect.height);
 | 
			
		||||
        Main.uiGroup.add_actor(actorClone);
 | 
			
		||||
 | 
			
		||||
        actor.__fullscreenClone = actorClone;
 | 
			
		||||
 | 
			
		||||
        let scaleX = targetRect.width / oldFrameRect.width;
 | 
			
		||||
        let scaleY = targetRect.height / oldFrameRect.height;
 | 
			
		||||
 | 
			
		||||
        // Now scale and fade out the clone
 | 
			
		||||
        Tweener.addTween(actorClone,
 | 
			
		||||
                         { x: targetRect.x,
 | 
			
		||||
                           y: targetRect.y,
 | 
			
		||||
                           scale_x: scaleX,
 | 
			
		||||
                           scale_y: scaleY,
 | 
			
		||||
                           opacity: 0,
 | 
			
		||||
                           time: WINDOW_ANIMATION_TIME,
 | 
			
		||||
                           transition: 'easeOutQuad'
 | 
			
		||||
                         });
 | 
			
		||||
 | 
			
		||||
        // Now set scale the actor to size it as the clone.
 | 
			
		||||
        // Note that the caller of this function already set a translation
 | 
			
		||||
        // on the actor.
 | 
			
		||||
        actor.scale_x = 1 / scaleX;
 | 
			
		||||
        actor.scale_y = 1 / scaleY;
 | 
			
		||||
 | 
			
		||||
        // Scale it to its actual new size
 | 
			
		||||
        Tweener.addTween(actor,
 | 
			
		||||
                         { scale_x: 1.0,
 | 
			
		||||
                           scale_y: 1.0,
 | 
			
		||||
                           translation_x: 0,
 | 
			
		||||
                           translation_y: 0,
 | 
			
		||||
                           time: WINDOW_ANIMATION_TIME,
 | 
			
		||||
                           transition: 'easeOutQuad',
 | 
			
		||||
                           onComplete: this._sizeChangeWindowDone,
 | 
			
		||||
                           onCompleteScope: this,
 | 
			
		||||
                           onCompleteParams: [shellwm, actor],
 | 
			
		||||
                           onOverwrite: this._sizeChangeWindowOverwritten,
 | 
			
		||||
                           onOverwriteScope: this,
 | 
			
		||||
                           onOverwriteParams: [shellwm, actor]
 | 
			
		||||
                         });
 | 
			
		||||
 | 
			
		||||
        // Now unfreeze actor updates, to get it to the new size.
 | 
			
		||||
        // It's important that we don't wait until the animation is completed to
 | 
			
		||||
        // do this, otherwise our scale will be applied to the old texture size.
 | 
			
		||||
        shellwm.completed_size_change(actor);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _sizeChangeWindowDone: function(shellwm, actor) {
 | 
			
		||||
        if (this._removeEffect(this._resizing, actor)) {
 | 
			
		||||
            Tweener.removeTweens(actor);
 | 
			
		||||
            actor.scale_x = 1.0;
 | 
			
		||||
            actor.scale_y = 1.0;
 | 
			
		||||
            actor.translation_x = 0;
 | 
			
		||||
            actor.translation_y = 0;
 | 
			
		||||
 | 
			
		||||
            let actorClone = actor.__fullscreenClone;
 | 
			
		||||
            if (actorClone) {
 | 
			
		||||
                actorClone.destroy();
 | 
			
		||||
                delete actor.__fullscreenClone;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _sizeChangeWindowOverwritten: function(shellwm, actor) {
 | 
			
		||||
        if (this._removeEffect(this._resizing, actor)) {
 | 
			
		||||
            let actorClone = actor.__fullscreenClone;
 | 
			
		||||
            if (actorClone) {
 | 
			
		||||
                actorClone.destroy();
 | 
			
		||||
                delete actor.__fullscreenClone;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _hasAttachedDialogs: function(window, ignoreWindow) {
 | 
			
		||||
        var count = 0;
 | 
			
		||||
        window.foreach_transient(function(win) {
 | 
			
		||||
 
 | 
			
		||||
@@ -214,7 +214,7 @@ const WindowMenuManager = new Lang.Class({
 | 
			
		||||
                menu.close();
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
        this._sourceActor.set_size(Math.max(1, rect.width), Math.max(1, rect.height));
 | 
			
		||||
        this._sourceActor.set_size(rect.width, rect.height);
 | 
			
		||||
        this._sourceActor.set_position(rect.x, rect.y);
 | 
			
		||||
        this._sourceActor.show();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										358
									
								
								po/he.po
									
									
									
									
									
								
							
							
						
						
									
										358
									
								
								po/he.po
									
									
									
									
									
								
							@@ -10,8 +10,8 @@ msgid ""
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: gnome-shell master\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2015-08-30 21:15+0300\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2015-07-16 13:28+0300\n"
 | 
			
		||||
"PO-Revision-Date: 2015-07-16 13:28+0300\n"
 | 
			
		||||
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
 | 
			
		||||
"Language-Team: עברית <>\n"
 | 
			
		||||
@@ -307,14 +307,13 @@ msgid "GNOME Shell Extensions"
 | 
			
		||||
msgid "GNOME Shell Extensions"
 | 
			
		||||
msgstr "הרחבות GNOME Shell"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145
 | 
			
		||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145
 | 
			
		||||
#: ../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:916
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "ביטול"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
 | 
			
		||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
 | 
			
		||||
msgid "Next"
 | 
			
		||||
msgstr "הבא"
 | 
			
		||||
@@ -354,7 +353,7 @@ msgstr "(משתמש או %s לדוגמה)"
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:289
 | 
			
		||||
msgid "Username: "
 | 
			
		||||
msgstr "שם משתמש:"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1180
 | 
			
		||||
msgid "Login Window"
 | 
			
		||||
msgstr "חלון כניסה"
 | 
			
		||||
@@ -462,31 +461,31 @@ msgstr "%d ב%B %Y, %l∶%M %p"
 | 
			
		||||
#: ../js/portalHelper/main.js:85
 | 
			
		||||
msgid "Web Authentication Redirect"
 | 
			
		||||
msgstr "אימות ניתוב הרשת"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:789
 | 
			
		||||
msgid "Frequently used applications will appear here"
 | 
			
		||||
msgstr "יישומים בשימוש תדיר יופיעו כאן"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:909
 | 
			
		||||
msgid "Frequent"
 | 
			
		||||
msgstr "תדיר"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:916
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr "הכול"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1845
 | 
			
		||||
msgid "New Window"
 | 
			
		||||
msgstr "חלון חדש"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1873 ../js/ui/dash.js:289
 | 
			
		||||
msgid "Remove from Favorites"
 | 
			
		||||
msgstr "הסרה מהמועדפים"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1879
 | 
			
		||||
msgid "Add to Favorites"
 | 
			
		||||
msgstr "הוספה למועדפים"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1889
 | 
			
		||||
msgid "Show Details"
 | 
			
		||||
msgstr "הצגת פרטים"
 | 
			
		||||
@@ -506,15 +505,15 @@ msgstr "החלפת הרקע…"
 | 
			
		||||
msgstr "החלפת הרקע…"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:21
 | 
			
		||||
msgid "Display Settings"
 | 
			
		||||
msgid "Display Settings"
 | 
			
		||||
msgstr "הצגת הגדרות"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
 | 
			
		||||
#: ../js/ui/status/system.js:357
 | 
			
		||||
msgid "Settings"
 | 
			
		||||
msgstr "הגדרות"
 | 
			
		||||
 | 
			
		||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
 | 
			
		||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
 | 
			
		||||
#: ../js/ui/calendar.js:53
 | 
			
		||||
msgctxt "calendar-no-work"
 | 
			
		||||
msgid "06"
 | 
			
		||||
@@ -524,94 +523,94 @@ msgstr "65"
 | 
			
		||||
#. *
 | 
			
		||||
#. * NOTE: These grid abbreviations are always shown together
 | 
			
		||||
#. * and in order, e.g. "S M T W T F S".
 | 
			
		||||
#.
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/calendar.js:82
 | 
			
		||||
msgctxt "grid sunday"
 | 
			
		||||
msgid "S"
 | 
			
		||||
msgstr "א"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Monday
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Monday
 | 
			
		||||
#: ../js/ui/calendar.js:84
 | 
			
		||||
msgctxt "grid monday"
 | 
			
		||||
msgid "M"
 | 
			
		||||
msgstr "ב"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Tuesday
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Tuesday
 | 
			
		||||
#: ../js/ui/calendar.js:86
 | 
			
		||||
msgctxt "grid tuesday"
 | 
			
		||||
msgid "T"
 | 
			
		||||
msgstr "ג"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Wednesday
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Wednesday
 | 
			
		||||
#: ../js/ui/calendar.js:88
 | 
			
		||||
msgctxt "grid wednesday"
 | 
			
		||||
msgid "W"
 | 
			
		||||
msgstr "ד"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Thursday
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Thursday
 | 
			
		||||
#: ../js/ui/calendar.js:90
 | 
			
		||||
msgctxt "grid thursday"
 | 
			
		||||
msgid "T"
 | 
			
		||||
msgstr "ה"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Friday
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Friday
 | 
			
		||||
#: ../js/ui/calendar.js:92
 | 
			
		||||
msgctxt "grid friday"
 | 
			
		||||
msgid "F"
 | 
			
		||||
msgstr "ו"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Saturday
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Saturday
 | 
			
		||||
#: ../js/ui/calendar.js:94
 | 
			
		||||
msgctxt "grid saturday"
 | 
			
		||||
msgid "S"
 | 
			
		||||
msgstr "ש"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:564
 | 
			
		||||
msgid "Previous month"
 | 
			
		||||
msgstr "חודש קודם"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:574
 | 
			
		||||
msgid "Next month"
 | 
			
		||||
msgstr "חודש הבא"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:781
 | 
			
		||||
msgid "Week %V"
 | 
			
		||||
msgstr "שבוע %V"
 | 
			
		||||
 | 
			
		||||
#. 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:1187
 | 
			
		||||
msgctxt "event list time"
 | 
			
		||||
msgid "All Day"
 | 
			
		||||
msgstr "יום שלם"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1289
 | 
			
		||||
msgid "Clear section"
 | 
			
		||||
msgstr "ניקוי מקטע"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1516
 | 
			
		||||
msgid "Events"
 | 
			
		||||
msgstr "אירועים"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1525
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d"
 | 
			
		||||
msgstr "%A, ה־%e ב%B"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1529
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d, %Y"
 | 
			
		||||
msgstr "%A, ה־%e ב%B, %Y"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1614
 | 
			
		||||
msgid "Notifications"
 | 
			
		||||
msgstr "התרעות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1765
 | 
			
		||||
msgid "No Notifications"
 | 
			
		||||
msgstr "אין התרעות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1768
 | 
			
		||||
msgid "No Events"
 | 
			
		||||
msgstr "אין אירועים"
 | 
			
		||||
@@ -628,16 +627,16 @@ msgstr "נותק כונן חיצוני"
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Open with %s"
 | 
			
		||||
msgstr "פתיחה באמצעות %s"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285
 | 
			
		||||
msgid "Password:"
 | 
			
		||||
msgstr "ססמה:"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/keyring.js:120
 | 
			
		||||
msgid "Type again:"
 | 
			
		||||
msgstr "נא להקליד שוב:"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:269
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:277
 | 
			
		||||
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
 | 
			
		||||
msgid "Connect"
 | 
			
		||||
msgstr "התחברות"
 | 
			
		||||
@@ -721,19 +720,19 @@ msgstr "ססמת רשת הפס הרחב הניידת"
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "A password is required to connect to “%s”."
 | 
			
		||||
msgstr "נדרשת ססמה כדי להתחבר אל „%s”"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:647 ../js/ui/status/network.js:1657
 | 
			
		||||
msgid "Network Manager"
 | 
			
		||||
msgstr "מנהל הרשתות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:54
 | 
			
		||||
msgid "Authentication Required"
 | 
			
		||||
msgstr "נדרש אימות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:96
 | 
			
		||||
msgid "Administrator"
 | 
			
		||||
msgstr "מנהל"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:175
 | 
			
		||||
msgid "Authenticate"
 | 
			
		||||
msgstr "אימות"
 | 
			
		||||
@@ -741,13 +740,13 @@ msgstr "אימות"
 | 
			
		||||
#. Translators: "that didn't work" refers to the fact that the
 | 
			
		||||
#. * requested authentication was not gained; this can happen
 | 
			
		||||
#. * because of an authentication error (like invalid password),
 | 
			
		||||
#. * for instance.
 | 
			
		||||
#. * for instance.
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:271 ../js/ui/shellMountOperation.js:383
 | 
			
		||||
msgid "Sorry, that didn't work. Please try again."
 | 
			
		||||
msgstr "פעולה זו לא הצליחה, נא לנסות שוב. עמך הסליחה."
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the other person changing their old IM name to their new
 | 
			
		||||
#. IM name.
 | 
			
		||||
#. IM name.
 | 
			
		||||
#: ../js/ui/components/telepathyClient.js:757
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s is now known as %s"
 | 
			
		||||
@@ -924,7 +923,7 @@ msgstr "התקנה"
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Download and install “%s” from extensions.gnome.org?"
 | 
			
		||||
msgstr "הורדה והתקנה של „%s” מ־extensions.gnome.org?"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/keyboard.js:747 ../js/ui/status/keyboard.js:713
 | 
			
		||||
msgid "Keyboard"
 | 
			
		||||
msgstr "מקלדת"
 | 
			
		||||
@@ -955,13 +954,17 @@ msgstr "הסתרת השגיאות"
 | 
			
		||||
#: ../js/ui/lookingGlass.js:707 ../js/ui/lookingGlass.js:767
 | 
			
		||||
msgid "Show Errors"
 | 
			
		||||
msgstr "הצגת השגיאות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71
 | 
			
		||||
#: ../js/ui/status/location.js:176
 | 
			
		||||
msgid "Enabled"
 | 
			
		||||
msgstr "פעיל"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for a network device that cannot be activated
 | 
			
		||||
#. because it's disabled by rfkill (airplane mode)
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The device has been disabled
 | 
			
		||||
#. * The device has been disabled
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179
 | 
			
		||||
#: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
 | 
			
		||||
msgid "Disabled"
 | 
			
		||||
msgstr "מנוטרל"
 | 
			
		||||
@@ -993,7 +996,7 @@ msgstr "פרטי המערכת"
 | 
			
		||||
#: ../js/ui/overview.js:84
 | 
			
		||||
msgid "Undo"
 | 
			
		||||
msgstr "ביטול"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/overview.js:124
 | 
			
		||||
msgid "Overview"
 | 
			
		||||
msgstr "סקירה"
 | 
			
		||||
@@ -1001,7 +1004,7 @@ msgstr "סקירה"
 | 
			
		||||
#. Translators: this is the text displayed
 | 
			
		||||
#. in the search entry when no search is
 | 
			
		||||
#. active; it should not exceed ~30
 | 
			
		||||
#. characters.
 | 
			
		||||
#. characters.
 | 
			
		||||
#: ../js/ui/overview.js:246
 | 
			
		||||
msgid "Type to search…"
 | 
			
		||||
msgstr "יש להקליד כדי לחפש…"
 | 
			
		||||
@@ -1015,7 +1018,7 @@ msgstr "יציאה"
 | 
			
		||||
#: ../js/ui/panel.js:404
 | 
			
		||||
msgid "Activities"
 | 
			
		||||
msgstr "פעילויות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:755
 | 
			
		||||
msgid "Top Bar"
 | 
			
		||||
msgstr "הסרגל העליון"
 | 
			
		||||
@@ -1062,7 +1065,7 @@ msgid_plural "%d new notifications"
 | 
			
		||||
msgid_plural "%d new notifications"
 | 
			
		||||
msgstr[0] "התרעה חדשה אחת"
 | 
			
		||||
msgstr[1] "%d התרעות חדשות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:365
 | 
			
		||||
msgid "Lock"
 | 
			
		||||
msgstr "נעילה"
 | 
			
		||||
@@ -1161,10 +1164,16 @@ msgstr "ניגודיות גבוהה"
 | 
			
		||||
#: ../js/ui/status/accessibility.js:202
 | 
			
		||||
msgid "Large Text"
 | 
			
		||||
msgstr "טקסט גדול"
 | 
			
		||||
 | 
			
		||||
#. The Bluetooth menu only appears when Bluetooth is in use,
 | 
			
		||||
#. so just statically build it with a "Turn Off" menu item.
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:49
 | 
			
		||||
msgid "Bluetooth"
 | 
			
		||||
msgstr "Bluetooth"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
 | 
			
		||||
#: ../js/ui/status/network.js:353 ../js/ui/status/network.js:1279
 | 
			
		||||
#: ../js/ui/status/network.js:1394 ../js/ui/status/rfkill.js:90
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
 | 
			
		||||
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
 | 
			
		||||
#: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
 | 
			
		||||
#: ../js/ui/status/rfkill.js:118
 | 
			
		||||
msgid "Turn Off"
 | 
			
		||||
msgstr "כיבוי"
 | 
			
		||||
@@ -1172,17 +1181,17 @@ msgstr "כיבוי"
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:54
 | 
			
		||||
msgid "Bluetooth Settings"
 | 
			
		||||
msgstr "הגדרות Bluetooth"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the number of connected bluetooth devices
 | 
			
		||||
 | 
			
		||||
# javascript-format
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:104
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%d Connected"
 | 
			
		||||
msgid_plural "%d Connected"
 | 
			
		||||
msgstr[0] "אחד מחובר"
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%d Connected Device"
 | 
			
		||||
msgid_plural "%d Connected Devices"
 | 
			
		||||
msgstr[0] "התקן אחד מחובר"
 | 
			
		||||
msgstr[1] "%d התקנים מחוברים"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:107
 | 
			
		||||
msgid "Not In Use"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
 | 
			
		||||
msgid "Not Connected"
 | 
			
		||||
msgstr "לא מחובר"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/brightness.js:44
 | 
			
		||||
@@ -1192,11 +1201,11 @@ msgstr "בהירות"
 | 
			
		||||
#: ../js/ui/status/keyboard.js:736
 | 
			
		||||
msgid "Show Keyboard Layout"
 | 
			
		||||
msgstr "הצגת פריסת המקלדת"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/location.js:71 ../js/ui/status/location.js:177
 | 
			
		||||
msgid "Location Enabled"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/location.js:65
 | 
			
		||||
msgid "Location"
 | 
			
		||||
msgstr "מיקום"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177
 | 
			
		||||
msgid "Disable"
 | 
			
		||||
msgstr "השבתה"
 | 
			
		||||
@@ -1205,14 +1214,10 @@ msgid "Privacy Settings"
 | 
			
		||||
msgid "Privacy Settings"
 | 
			
		||||
msgstr "הגדרות פרטיות"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/location.js:176
 | 
			
		||||
msgid "Location In Use"
 | 
			
		||||
#: ../js/ui/status/location.js:176
 | 
			
		||||
msgid "In Use"
 | 
			
		||||
msgstr "בשימוש"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/location.js:180
 | 
			
		||||
msgid "Location Disabled"
 | 
			
		||||
msgstr "איכון מושבת"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/location.js:180
 | 
			
		||||
msgid "Enable"
 | 
			
		||||
msgstr "אפשור"
 | 
			
		||||
@@ -1220,84 +1225,61 @@ msgstr "אפשור"
 | 
			
		||||
#: ../js/ui/status/network.js:101
 | 
			
		||||
msgid "<unknown>"
 | 
			
		||||
msgstr "<לא ידוע>"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1308
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Off"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
 | 
			
		||||
#: ../js/ui/status/network.js:1512
 | 
			
		||||
msgid "Off"
 | 
			
		||||
msgstr "כבוי"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:454
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connected"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:459
 | 
			
		||||
msgid "Connected"
 | 
			
		||||
msgstr "מחובר"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network devices that are physically present but are not
 | 
			
		||||
#. under NetworkManager's control (and thus cannot be used in the menu);
 | 
			
		||||
#. %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:459
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Unmanaged"
 | 
			
		||||
#. Translators: this is for network devices that are physically present but are not
 | 
			
		||||
#. under NetworkManager's control (and thus cannot be used in the menu)
 | 
			
		||||
#: ../js/ui/status/network.js:463
 | 
			
		||||
msgid "Unmanaged"
 | 
			
		||||
msgstr "לא מנוהל"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:462
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Disconnecting"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:465
 | 
			
		||||
msgid "Disconnecting"
 | 
			
		||||
msgstr "בהליכי ניתוק"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1300
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connecting"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
 | 
			
		||||
msgid "Connecting"
 | 
			
		||||
msgstr "בהתחברות"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:472
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Requires Authentication"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password
 | 
			
		||||
#: ../js/ui/status/network.js:474
 | 
			
		||||
msgid "Authentication required"
 | 
			
		||||
msgstr "נדרש אימות"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for devices that require some kind of firmware or kernel
 | 
			
		||||
#. module, which is missing; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:480
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Firmware Missing For %s"
 | 
			
		||||
#. Translators: this is for devices that require some kind of firmware or kernel
 | 
			
		||||
#. module, which is missing
 | 
			
		||||
#: ../js/ui/status/network.js:482
 | 
			
		||||
msgid "Firmware missing"
 | 
			
		||||
msgstr "הקושחה חסרה"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for a network device that cannot be activated (for example it
 | 
			
		||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:484
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Unavailable"
 | 
			
		||||
#. Translators: this is for a network device that cannot be activated (for example it
 | 
			
		||||
#. is disabled by rfkill, or it has no coverage
 | 
			
		||||
#: ../js/ui/status/network.js:486
 | 
			
		||||
msgid "Unavailable"
 | 
			
		||||
msgstr "לא זמין"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:487
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connection Failed"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
 | 
			
		||||
msgid "Connection failed"
 | 
			
		||||
msgstr "ההתחברות נכשלה"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:504
 | 
			
		||||
msgid "Wired Settings"
 | 
			
		||||
msgstr "הגדרות רשת קווית"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624
 | 
			
		||||
msgid "Mobile Broadband Settings"
 | 
			
		||||
msgstr "הגדרות פס־רחב נייד"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Hardware Disabled"
 | 
			
		||||
msgstr "%s נמנוטרל חומרתית"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for a network device that cannot be activated
 | 
			
		||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:592
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Disabled"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
 | 
			
		||||
msgid "Hardware Disabled"
 | 
			
		||||
msgstr "מנוטרל חומרתית"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:632
 | 
			
		||||
@@ -1339,68 +1321,52 @@ msgstr "בחירת רשת"
 | 
			
		||||
#: ../js/ui/status/network.js:883
 | 
			
		||||
msgid "No Networks"
 | 
			
		||||
msgstr "אין רשתות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
 | 
			
		||||
msgid "Use hardware switch to turn off"
 | 
			
		||||
msgstr "שימוש במתג של החומרה לכיבוי"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1174
 | 
			
		||||
msgid "Select Network"
 | 
			
		||||
msgstr "בחירת רשת"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1180
 | 
			
		||||
msgid "Wi-Fi Settings"
 | 
			
		||||
msgstr "הגדרות רשת אלחוטית"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1282
 | 
			
		||||
msgid "Turn On"
 | 
			
		||||
msgstr "הפעלה"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:1296
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Hotspot Active"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1299
 | 
			
		||||
msgid "Hotspot Active"
 | 
			
		||||
msgstr "נקודה חמה פעילה"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:1311
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Not Connected"
 | 
			
		||||
msgstr "%s לא מחובר"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1410
 | 
			
		||||
msgid "connecting..."
 | 
			
		||||
msgid "connecting..."
 | 
			
		||||
msgstr "בהתחברות..."
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password
 | 
			
		||||
#: ../js/ui/status/network.js:1413
 | 
			
		||||
msgid "authentication required"
 | 
			
		||||
msgstr "נדרש אימות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1415
 | 
			
		||||
msgid "connection failed"
 | 
			
		||||
msgstr "ההתחברות נכשלה"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
 | 
			
		||||
msgid "Network Settings"
 | 
			
		||||
msgstr "הגדרות הרשת"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1483
 | 
			
		||||
msgid "VPN Settings"
 | 
			
		||||
msgstr "הגדרות VPN"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1502
 | 
			
		||||
msgid "VPN"
 | 
			
		||||
msgstr "VPN"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1513
 | 
			
		||||
msgid "VPN Off"
 | 
			
		||||
msgstr "VPN כבוי"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1697
 | 
			
		||||
msgid "Connection failed"
 | 
			
		||||
msgstr "ההתחברות נכשלה"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1697
 | 
			
		||||
msgid "Activation of network connection failed"
 | 
			
		||||
msgstr "הפעלת חיבור הרשת נכשלה"
 | 
			
		||||
@@ -1430,34 +1396,42 @@ msgstr "%d∶%02d נותרו (%d%%)"
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d∶%02d Until Full (%d%%)"
 | 
			
		||||
msgstr "%d:%02d עד לטעינה מלאה (%d%%)"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/power.js:119
 | 
			
		||||
msgid "UPS"
 | 
			
		||||
msgstr "אל־פסק"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/power.js:121
 | 
			
		||||
msgid "Battery"
 | 
			
		||||
msgstr "סוללה"
 | 
			
		||||
 | 
			
		||||
#. The menu only appears when airplane mode is on, so just
 | 
			
		||||
#. statically build it as if it was on, rather than dynamically
 | 
			
		||||
#. changing the menu contents.
 | 
			
		||||
#: ../js/ui/status/rfkill.js:88
 | 
			
		||||
msgid "Airplane Mode On"
 | 
			
		||||
#: ../js/ui/status/rfkill.js:88
 | 
			
		||||
msgid "Airplane Mode"
 | 
			
		||||
msgstr "מצב טיסה"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/rfkill.js:90
 | 
			
		||||
msgid "On"
 | 
			
		||||
msgstr "פועל"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:337
 | 
			
		||||
msgid "Switch User"
 | 
			
		||||
msgstr "החלפת משתמש"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:342
 | 
			
		||||
msgid "Log Out"
 | 
			
		||||
msgstr "יציאה"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:353
 | 
			
		||||
msgid "Account Settings"
 | 
			
		||||
msgstr "הגדרות חשבון"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:361
 | 
			
		||||
msgid "Orientation Lock"
 | 
			
		||||
msgstr "נעילת כיוון"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:369
 | 
			
		||||
msgid "Suspend"
 | 
			
		||||
msgstr "השהיה"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:372
 | 
			
		||||
msgid "Power Off"
 | 
			
		||||
msgstr "כיבוי"
 | 
			
		||||
@@ -1505,12 +1479,12 @@ msgstr "האם ברצונך לשמור הגדרות תצוגה אלה?"
 | 
			
		||||
#: ../js/ui/windowManager.js:82
 | 
			
		||||
msgid "Revert Settings"
 | 
			
		||||
msgstr "שחזור הגדרות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/windowManager.js:86
 | 
			
		||||
msgid "Keep Changes"
 | 
			
		||||
msgstr "שמירת שינויים"
 | 
			
		||||
 | 
			
		||||
# javascript-format
 | 
			
		||||
# javascript-format
 | 
			
		||||
#: ../js/ui/windowManager.js:105
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Settings changes will revert in %d second"
 | 
			
		||||
@@ -1519,7 +1493,7 @@ msgstr[1] "שינויי הגדרות ישוחזרו בעוד %d שניות"
 | 
			
		||||
msgstr[1] "שינויי הגדרות ישוחזרו בעוד %d שניות"
 | 
			
		||||
 | 
			
		||||
#. Translators: This represents the size of a window. The first number is
 | 
			
		||||
#. * the width of the window and the second is the height.
 | 
			
		||||
#. * the width of the window and the second is the height.
 | 
			
		||||
#: ../js/ui/windowManager.js:604
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d x %d"
 | 
			
		||||
@@ -1646,39 +1620,12 @@ msgstr "הססמאות אינן תואמות."
 | 
			
		||||
msgstr "הססמאות אינן תואמות."
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-keyring-prompt.c:750
 | 
			
		||||
msgid "Password cannot be blank"
 | 
			
		||||
msgid "Password cannot be blank"
 | 
			
		||||
msgstr "הססמה לא יכולה להישאר ריקה"
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-polkit-authentication-agent.c:346
 | 
			
		||||
msgid "Authentication dialog was dismissed by the user"
 | 
			
		||||
msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Bluetooth"
 | 
			
		||||
#~ msgstr "Bluetooth"
 | 
			
		||||
 | 
			
		||||
# javascript-format
 | 
			
		||||
#~ msgid "%d Connected Device"
 | 
			
		||||
#~ msgid_plural "%d Connected Devices"
 | 
			
		||||
#~ msgstr[0] "התקן אחד מחובר"
 | 
			
		||||
#~ msgstr[1] "%d התקנים מחוברים"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Off"
 | 
			
		||||
#~ msgstr "כבוי"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Authentication required"
 | 
			
		||||
#~ msgstr "נדרש אימות"
 | 
			
		||||
 | 
			
		||||
#~ msgid "UPS"
 | 
			
		||||
#~ msgstr "אל־פסק"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Battery"
 | 
			
		||||
#~ msgstr "סוללה"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Airplane Mode"
 | 
			
		||||
#~ msgstr "מצב טיסה"
 | 
			
		||||
 | 
			
		||||
#~ msgid "On"
 | 
			
		||||
#~ msgstr "פועל"
 | 
			
		||||
 | 
			
		||||
#~ msgctxt "event list time"
 | 
			
		||||
#~ msgid "%H∶%M"
 | 
			
		||||
@@ -2191,6 +2138,9 @@ msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Mouse Settings"
 | 
			
		||||
#~ msgstr "הגדרות עכבר"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Sound Settings"
 | 
			
		||||
#~ msgstr "הגדרות שמע"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Region & Language Settings"
 | 
			
		||||
#~ msgstr "הגדרות אזור ושפה"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										362
									
								
								po/nb.po
									
									
									
									
									
								
							
							
						
						
									
										362
									
								
								po/nb.po
									
									
									
									
									
								
							@@ -7,11 +7,11 @@
 | 
			
		||||
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: gnome-shell 3.18.x\n"
 | 
			
		||||
"Project-Id-Version: gnome-shell 3.17.x\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2015-10-16 18:09+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2015-10-16 18:09+0200\n"
 | 
			
		||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
 | 
			
		||||
"POT-Creation-Date: 2015-07-30 11:36+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2015-07-30 11:36+0200\n"
 | 
			
		||||
"Last-Translator: Åka Sikrom <a4NOSPAMPLEASETHANKYOU@hush.com>\n"
 | 
			
		||||
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
 | 
			
		||||
"Language: Norwegian bokmål\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
@@ -307,14 +307,14 @@ msgid "GNOME Shell Extensions"
 | 
			
		||||
msgstr "Utvidelser for GNOME Shell"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:179 ../js/ui/endSessionDialog.js:452
 | 
			
		||||
#: ../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:916
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Avbryt"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
 | 
			
		||||
#: ../js/gdm/authPrompt.js:447
 | 
			
		||||
#: ../js/gdm/authPrompt.js:435
 | 
			
		||||
msgid "Next"
 | 
			
		||||
msgstr "Neste"
 | 
			
		||||
 | 
			
		||||
@@ -341,7 +341,7 @@ msgstr "Ikke listet?"
 | 
			
		||||
 | 
			
		||||
#. Translators: this message is shown below the username entry field
 | 
			
		||||
#. to clue the user in on how to login to the local network realm
 | 
			
		||||
#: ../js/gdm/loginDialog.js:850
 | 
			
		||||
#: ../js/gdm/loginDialog.js:847
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "(e.g., user or %s)"
 | 
			
		||||
msgstr "(f.eks. bruker eller %s)"
 | 
			
		||||
@@ -349,12 +349,12 @@ msgstr "(f.eks. bruker eller %s)"
 | 
			
		||||
#. TTLS and PEAP are actually much more complicated, but this complication
 | 
			
		||||
#. is not visible here since we only care about phase2 authentication
 | 
			
		||||
#. (and don't even care of which one)
 | 
			
		||||
#: ../js/gdm/loginDialog.js:855 ../js/ui/components/networkAgent.js:271
 | 
			
		||||
#: ../js/gdm/loginDialog.js:852 ../js/ui/components/networkAgent.js:271
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:289
 | 
			
		||||
msgid "Username: "
 | 
			
		||||
msgstr "Brukernavn: "
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1184
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1180
 | 
			
		||||
msgid "Login Window"
 | 
			
		||||
msgstr "Innloggingsvindu"
 | 
			
		||||
 | 
			
		||||
@@ -462,31 +462,31 @@ msgstr "%d %B %Y, %H.%M"
 | 
			
		||||
msgid "Web Authentication Redirect"
 | 
			
		||||
msgstr "Omdirigering av autentisering på nett"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:794
 | 
			
		||||
#: ../js/ui/appDisplay.js:789
 | 
			
		||||
msgid "Frequently used applications will appear here"
 | 
			
		||||
msgstr "Ofte brukte programmer vises her"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:914
 | 
			
		||||
#: ../js/ui/appDisplay.js:909
 | 
			
		||||
msgid "Frequent"
 | 
			
		||||
msgstr "Ofte"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:921
 | 
			
		||||
#: ../js/ui/appDisplay.js:916
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr "Alle"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1853
 | 
			
		||||
#: ../js/ui/appDisplay.js:1845
 | 
			
		||||
msgid "New Window"
 | 
			
		||||
msgstr "Nytt vindu"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1881 ../js/ui/dash.js:289
 | 
			
		||||
#: ../js/ui/appDisplay.js:1873 ../js/ui/dash.js:289
 | 
			
		||||
msgid "Remove from Favorites"
 | 
			
		||||
msgstr "Fjern fra favoritter"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1887
 | 
			
		||||
#: ../js/ui/appDisplay.js:1879
 | 
			
		||||
msgid "Add to Favorites"
 | 
			
		||||
msgstr "Legg til i favoritter"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appDisplay.js:1897
 | 
			
		||||
#: ../js/ui/appDisplay.js:1889
 | 
			
		||||
msgid "Show Details"
 | 
			
		||||
msgstr "Vis detaljer"
 | 
			
		||||
 | 
			
		||||
@@ -508,12 +508,13 @@ msgstr "Bytt bakgrunn …"
 | 
			
		||||
msgid "Display Settings"
 | 
			
		||||
msgstr "Innstillinger for skjerm"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:366
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
 | 
			
		||||
#: ../js/ui/status/system.js:357
 | 
			
		||||
msgid "Settings"
 | 
			
		||||
msgstr "Innstillinger"
 | 
			
		||||
 | 
			
		||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
 | 
			
		||||
#: ../js/ui/calendar.js:55
 | 
			
		||||
#: ../js/ui/calendar.js:53
 | 
			
		||||
msgctxt "calendar-no-work"
 | 
			
		||||
msgid "06"
 | 
			
		||||
msgstr "06"
 | 
			
		||||
@@ -523,94 +524,94 @@ msgstr "06"
 | 
			
		||||
#. * NOTE: These grid abbreviations are always shown together
 | 
			
		||||
#. * and in order, e.g. "S M T W T F S".
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/calendar.js:84
 | 
			
		||||
#: ../js/ui/calendar.js:82
 | 
			
		||||
msgctxt "grid sunday"
 | 
			
		||||
msgid "S"
 | 
			
		||||
msgstr "S"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Monday
 | 
			
		||||
#: ../js/ui/calendar.js:86
 | 
			
		||||
#: ../js/ui/calendar.js:84
 | 
			
		||||
msgctxt "grid monday"
 | 
			
		||||
msgid "M"
 | 
			
		||||
msgstr "M"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Tuesday
 | 
			
		||||
#: ../js/ui/calendar.js:88
 | 
			
		||||
#: ../js/ui/calendar.js:86
 | 
			
		||||
msgctxt "grid tuesday"
 | 
			
		||||
msgid "T"
 | 
			
		||||
msgstr "T"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Wednesday
 | 
			
		||||
#: ../js/ui/calendar.js:90
 | 
			
		||||
#: ../js/ui/calendar.js:88
 | 
			
		||||
msgctxt "grid wednesday"
 | 
			
		||||
msgid "W"
 | 
			
		||||
msgstr "O"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Thursday
 | 
			
		||||
#: ../js/ui/calendar.js:92
 | 
			
		||||
#: ../js/ui/calendar.js:90
 | 
			
		||||
msgctxt "grid thursday"
 | 
			
		||||
msgid "T"
 | 
			
		||||
msgstr "T"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Friday
 | 
			
		||||
#: ../js/ui/calendar.js:94
 | 
			
		||||
#: ../js/ui/calendar.js:92
 | 
			
		||||
msgctxt "grid friday"
 | 
			
		||||
msgid "F"
 | 
			
		||||
msgstr "F"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Saturday
 | 
			
		||||
#: ../js/ui/calendar.js:96
 | 
			
		||||
#: ../js/ui/calendar.js:94
 | 
			
		||||
msgctxt "grid saturday"
 | 
			
		||||
msgid "S"
 | 
			
		||||
msgstr "L"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:566
 | 
			
		||||
#: ../js/ui/calendar.js:564
 | 
			
		||||
msgid "Previous month"
 | 
			
		||||
msgstr "Forrige måned"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:576
 | 
			
		||||
#: ../js/ui/calendar.js:574
 | 
			
		||||
msgid "Next month"
 | 
			
		||||
msgstr "Neste måned"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:783
 | 
			
		||||
#: ../js/ui/calendar.js:781
 | 
			
		||||
msgid "Week %V"
 | 
			
		||||
msgstr "Uke %V"
 | 
			
		||||
 | 
			
		||||
#. 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:1188
 | 
			
		||||
#: ../js/ui/calendar.js:1187
 | 
			
		||||
msgctxt "event list time"
 | 
			
		||||
msgid "All Day"
 | 
			
		||||
msgstr "Hele dagen"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1295
 | 
			
		||||
#: ../js/ui/calendar.js:1289
 | 
			
		||||
msgid "Clear section"
 | 
			
		||||
msgstr "Tøm seksjon"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1522
 | 
			
		||||
#: ../js/ui/calendar.js:1516
 | 
			
		||||
msgid "Events"
 | 
			
		||||
msgstr "Hendelser"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1531
 | 
			
		||||
#: ../js/ui/calendar.js:1525
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d"
 | 
			
		||||
msgstr "%A %B %d"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1535
 | 
			
		||||
#: ../js/ui/calendar.js:1529
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d, %Y"
 | 
			
		||||
msgstr "%A %B %d, %Y"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1620
 | 
			
		||||
#: ../js/ui/calendar.js:1614
 | 
			
		||||
msgid "Notifications"
 | 
			
		||||
msgstr "Varslinger"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1771
 | 
			
		||||
#: ../js/ui/calendar.js:1765
 | 
			
		||||
msgid "No Notifications"
 | 
			
		||||
msgstr "Ingen varslinger"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1774
 | 
			
		||||
#: ../js/ui/calendar.js:1768
 | 
			
		||||
msgid "No Events"
 | 
			
		||||
msgstr "Ingen hendelser"
 | 
			
		||||
 | 
			
		||||
@@ -622,21 +623,21 @@ msgstr "Ekstern stasjon koblet til"
 | 
			
		||||
msgid "External drive disconnected"
 | 
			
		||||
msgstr "Ekstern stasjon koblet fra"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/autorunManager.js:351
 | 
			
		||||
#: ../js/ui/components/autorunManager.js:354
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Open with %s"
 | 
			
		||||
msgstr "Åpne med %s"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/keyring.js:120 ../js/ui/components/polkitAgent.js:315
 | 
			
		||||
#: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285
 | 
			
		||||
msgid "Password:"
 | 
			
		||||
msgstr "Passord:"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/keyring.js:153
 | 
			
		||||
#: ../js/ui/components/keyring.js:120
 | 
			
		||||
msgid "Type again:"
 | 
			
		||||
msgstr "Skriv på nytt:"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:269
 | 
			
		||||
#: ../js/ui/status/network.js:352 ../js/ui/status/network.js:919
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:277
 | 
			
		||||
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
 | 
			
		||||
msgid "Connect"
 | 
			
		||||
msgstr "Koble til"
 | 
			
		||||
 | 
			
		||||
@@ -722,19 +723,19 @@ msgstr "Nettverkspassord for mobilt bredbånd"
 | 
			
		||||
msgid "A password is required to connect to “%s”."
 | 
			
		||||
msgstr "Du må oppgi et passord for å koble til «%s»."
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:647 ../js/ui/status/network.js:1658
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:647 ../js/ui/status/network.js:1657
 | 
			
		||||
msgid "Network Manager"
 | 
			
		||||
msgstr "Nettverkshåndtering"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:60
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:54
 | 
			
		||||
msgid "Authentication Required"
 | 
			
		||||
msgstr "Autentisering kreves"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:102
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:96
 | 
			
		||||
msgid "Administrator"
 | 
			
		||||
msgstr "Administrator"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:182
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:175
 | 
			
		||||
msgid "Authenticate"
 | 
			
		||||
msgstr "Autentiser"
 | 
			
		||||
 | 
			
		||||
@@ -742,13 +743,13 @@ msgstr "Autentiser"
 | 
			
		||||
#. * requested authentication was not gained; this can happen
 | 
			
		||||
#. * because of an authentication error (like invalid password),
 | 
			
		||||
#. * for instance.
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:301 ../js/ui/shellMountOperation.js:383
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:271 ../js/ui/shellMountOperation.js:383
 | 
			
		||||
msgid "Sorry, that didn't work. Please try again."
 | 
			
		||||
msgstr "Beklager, det virket ikke. Prøv igjen."
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the other person changing their old IM name to their new
 | 
			
		||||
#. IM name.
 | 
			
		||||
#: ../js/ui/components/telepathyClient.js:759
 | 
			
		||||
#: ../js/ui/components/telepathyClient.js:757
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s is now known as %s"
 | 
			
		||||
msgstr "%s er nå kjent som %s"
 | 
			
		||||
@@ -961,13 +962,17 @@ msgstr "Skjul feil"
 | 
			
		||||
msgid "Show Errors"
 | 
			
		||||
msgstr "Vis feil"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/lookingGlass.js:716
 | 
			
		||||
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71
 | 
			
		||||
#: ../js/ui/status/location.js:176
 | 
			
		||||
msgid "Enabled"
 | 
			
		||||
msgstr "Slått på"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for a network device that cannot be activated
 | 
			
		||||
#. because it's disabled by rfkill (airplane mode)
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The device has been disabled
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1830
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179
 | 
			
		||||
#: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
 | 
			
		||||
msgid "Disabled"
 | 
			
		||||
msgstr "Slått av"
 | 
			
		||||
 | 
			
		||||
@@ -1011,22 +1016,17 @@ msgstr "Oversikt"
 | 
			
		||||
msgid "Type to search…"
 | 
			
		||||
msgstr "Skriv for å søke …"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:358
 | 
			
		||||
#: ../js/ui/panel.js:352
 | 
			
		||||
msgid "Quit"
 | 
			
		||||
msgstr "Avslutt"
 | 
			
		||||
 | 
			
		||||
#. Translators: If there is no suitable word for "Activities"
 | 
			
		||||
#. in your language, you can use the word for "Overview".
 | 
			
		||||
#: ../js/ui/panel.js:414
 | 
			
		||||
#: ../js/ui/panel.js:404
 | 
			
		||||
msgid "Activities"
 | 
			
		||||
msgstr "Aktiviteter"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:693
 | 
			
		||||
msgctxt "System menu in the top bar"
 | 
			
		||||
msgid "System"
 | 
			
		||||
msgstr "System"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:805
 | 
			
		||||
#: ../js/ui/panel.js:755
 | 
			
		||||
msgid "Top Bar"
 | 
			
		||||
msgstr "Topp-panel"
 | 
			
		||||
 | 
			
		||||
@@ -1071,7 +1071,7 @@ msgid_plural "%d new notifications"
 | 
			
		||||
msgstr[0] "%d ny varsling"
 | 
			
		||||
msgstr[1] "%d nye varslinger"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:374
 | 
			
		||||
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:365
 | 
			
		||||
msgid "Lock"
 | 
			
		||||
msgstr "Lås"
 | 
			
		||||
 | 
			
		||||
@@ -1170,10 +1170,16 @@ msgstr "Høy kontrast"
 | 
			
		||||
msgid "Large Text"
 | 
			
		||||
msgstr "Stor tekst"
 | 
			
		||||
 | 
			
		||||
#. The Bluetooth menu only appears when Bluetooth is in use,
 | 
			
		||||
#. so just statically build it with a "Turn Off" menu item.
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:49
 | 
			
		||||
msgid "Bluetooth"
 | 
			
		||||
msgstr "Bluetooth"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
 | 
			
		||||
#: ../js/ui/status/network.js:353 ../js/ui/status/network.js:1279
 | 
			
		||||
#: ../js/ui/status/network.js:1394 ../js/ui/status/rfkill.js:90
 | 
			
		||||
#: ../js/ui/status/rfkill.js:117
 | 
			
		||||
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
 | 
			
		||||
#: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
 | 
			
		||||
#: ../js/ui/status/rfkill.js:118
 | 
			
		||||
msgid "Turn Off"
 | 
			
		||||
msgstr "Slå av"
 | 
			
		||||
 | 
			
		||||
@@ -1181,17 +1187,16 @@ msgstr "Slå av"
 | 
			
		||||
msgid "Bluetooth Settings"
 | 
			
		||||
msgstr "Bluetooth-innstillinger"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the number of connected bluetooth devices
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:105
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:104
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d Connected"
 | 
			
		||||
msgid_plural "%d Connected"
 | 
			
		||||
msgstr[0] "%d koblet til"
 | 
			
		||||
msgstr[1] "%d koblet til"
 | 
			
		||||
msgid "%d Connected Device"
 | 
			
		||||
msgid_plural "%d Connected Devices"
 | 
			
		||||
msgstr[0] "%d tilkoblet enhet"
 | 
			
		||||
msgstr[1] "%d tilkoblede enheter"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:107
 | 
			
		||||
msgid "Not In Use"
 | 
			
		||||
msgstr "Ikke i bruk"
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
 | 
			
		||||
msgid "Not Connected"
 | 
			
		||||
msgstr "Ikke koblet til"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/brightness.js:44
 | 
			
		||||
msgid "Brightness"
 | 
			
		||||
@@ -1201,11 +1206,11 @@ msgstr "Lysstyrke"
 | 
			
		||||
msgid "Show Keyboard Layout"
 | 
			
		||||
msgstr "Vis tastaturutforming"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/location.js:71 ../js/ui/status/location.js:177
 | 
			
		||||
msgid "Location Enabled"
 | 
			
		||||
msgstr "Plassering slått på"
 | 
			
		||||
#: ../js/ui/status/location.js:65
 | 
			
		||||
msgid "Location"
 | 
			
		||||
msgstr "Plassering"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:178
 | 
			
		||||
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177
 | 
			
		||||
msgid "Disable"
 | 
			
		||||
msgstr "Slå av"
 | 
			
		||||
 | 
			
		||||
@@ -1214,14 +1219,10 @@ msgid "Privacy Settings"
 | 
			
		||||
msgstr "Innstillinger for personvern"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/location.js:176
 | 
			
		||||
msgid "Location In Use"
 | 
			
		||||
msgstr "Plassering i bruk"
 | 
			
		||||
msgid "In Use"
 | 
			
		||||
msgstr "I bruk"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/location.js:180
 | 
			
		||||
msgid "Location Disabled"
 | 
			
		||||
msgstr "Plassering slått av"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/location.js:181
 | 
			
		||||
msgid "Enable"
 | 
			
		||||
msgstr "Slå på"
 | 
			
		||||
 | 
			
		||||
@@ -1229,84 +1230,61 @@ msgstr "Slå på"
 | 
			
		||||
msgid "<unknown>"
 | 
			
		||||
msgstr "<ukjent>"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1308
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Off"
 | 
			
		||||
msgstr "%s av"
 | 
			
		||||
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
 | 
			
		||||
#: ../js/ui/status/network.js:1512
 | 
			
		||||
msgid "Off"
 | 
			
		||||
msgstr "Av"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:454
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connected"
 | 
			
		||||
msgstr "%s koblet til"
 | 
			
		||||
#: ../js/ui/status/network.js:459
 | 
			
		||||
msgid "Connected"
 | 
			
		||||
msgstr "Koblet til"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network devices that are physically present but are not
 | 
			
		||||
#. under NetworkManager's control (and thus cannot be used in the menu);
 | 
			
		||||
#. %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:459
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Unmanaged"
 | 
			
		||||
msgstr "%s håndteres ikke"
 | 
			
		||||
#. under NetworkManager's control (and thus cannot be used in the menu)
 | 
			
		||||
#: ../js/ui/status/network.js:463
 | 
			
		||||
msgid "Unmanaged"
 | 
			
		||||
msgstr "Håndteres ikke"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:462
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Disconnecting"
 | 
			
		||||
msgstr "%s kobler fra"
 | 
			
		||||
#: ../js/ui/status/network.js:465
 | 
			
		||||
msgid "Disconnecting"
 | 
			
		||||
msgstr "Kobler fra"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1300
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connecting"
 | 
			
		||||
msgstr "%s kobler til"
 | 
			
		||||
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
 | 
			
		||||
msgid "Connecting"
 | 
			
		||||
msgstr "Kobler til"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:472
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Requires Authentication"
 | 
			
		||||
msgstr "%s krever autentisering"
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password
 | 
			
		||||
#: ../js/ui/status/network.js:474
 | 
			
		||||
msgid "Authentication required"
 | 
			
		||||
msgstr "Denne tilkoblingen krever autentisering"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for devices that require some kind of firmware or kernel
 | 
			
		||||
#. module, which is missing; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:480
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Firmware Missing For %s"
 | 
			
		||||
msgstr "Fastvare mangler for %s"
 | 
			
		||||
#. module, which is missing
 | 
			
		||||
#: ../js/ui/status/network.js:482
 | 
			
		||||
msgid "Firmware missing"
 | 
			
		||||
msgstr "Fastvare mangler"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for a network device that cannot be activated (for example it
 | 
			
		||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:484
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Unavailable"
 | 
			
		||||
msgstr "%s er ikke tilgjengelig"
 | 
			
		||||
#. is disabled by rfkill, or it has no coverage
 | 
			
		||||
#: ../js/ui/status/network.js:486
 | 
			
		||||
msgid "Unavailable"
 | 
			
		||||
msgstr "Ikke tilgjengelig"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:487
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connection Failed"
 | 
			
		||||
msgstr "%s tilkobling mislyktes"
 | 
			
		||||
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
 | 
			
		||||
msgid "Connection failed"
 | 
			
		||||
msgstr "Tilkobling mislyktes"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:503
 | 
			
		||||
#: ../js/ui/status/network.js:504
 | 
			
		||||
msgid "Wired Settings"
 | 
			
		||||
msgstr "Innstillinger for trådbundet nettverk"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:545 ../js/ui/status/network.js:624
 | 
			
		||||
#: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624
 | 
			
		||||
msgid "Mobile Broadband Settings"
 | 
			
		||||
msgstr "Innstillinger for mobilt bredbånd"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Hardware Disabled"
 | 
			
		||||
msgstr "%s maskinvare slått av"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for a network device that cannot be activated
 | 
			
		||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:592
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Disabled"
 | 
			
		||||
msgstr "%s slått av"
 | 
			
		||||
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
 | 
			
		||||
msgid "Hardware Disabled"
 | 
			
		||||
msgstr "Maskinvare slått av"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:632
 | 
			
		||||
msgid "Use as Internet connection"
 | 
			
		||||
@@ -1348,68 +1326,52 @@ msgstr "Velg et nettverk"
 | 
			
		||||
msgid "No Networks"
 | 
			
		||||
msgstr "Ingen nettverk"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:115
 | 
			
		||||
#: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
 | 
			
		||||
msgid "Use hardware switch to turn off"
 | 
			
		||||
msgstr "Bruk maskinvarebryter til å slå av"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1171
 | 
			
		||||
#: ../js/ui/status/network.js:1174
 | 
			
		||||
msgid "Select Network"
 | 
			
		||||
msgstr "Velg nettverk"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1177
 | 
			
		||||
#: ../js/ui/status/network.js:1180
 | 
			
		||||
msgid "Wi-Fi Settings"
 | 
			
		||||
msgstr "Innstillinger"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1279
 | 
			
		||||
#: ../js/ui/status/network.js:1282
 | 
			
		||||
msgid "Turn On"
 | 
			
		||||
msgstr "Slå på"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:1296
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Hotspot Active"
 | 
			
		||||
msgstr "%s aksesspunkt aktivt"
 | 
			
		||||
#: ../js/ui/status/network.js:1299
 | 
			
		||||
msgid "Hotspot Active"
 | 
			
		||||
msgstr "Trådløst aksesspunkt aktivt"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:1311
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Not Connected"
 | 
			
		||||
msgstr "%s ikke koblet til"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1411
 | 
			
		||||
#: ../js/ui/status/network.js:1410
 | 
			
		||||
msgid "connecting..."
 | 
			
		||||
msgstr "kobler til …"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password
 | 
			
		||||
#: ../js/ui/status/network.js:1414
 | 
			
		||||
#: ../js/ui/status/network.js:1413
 | 
			
		||||
msgid "authentication required"
 | 
			
		||||
msgstr "autentisering kreves"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1416
 | 
			
		||||
#: ../js/ui/status/network.js:1415
 | 
			
		||||
msgid "connection failed"
 | 
			
		||||
msgstr "tilkobling mislyktes"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1482 ../js/ui/status/rfkill.js:93
 | 
			
		||||
#: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
 | 
			
		||||
msgid "Network Settings"
 | 
			
		||||
msgstr "Innstillinger for nettverk"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1484
 | 
			
		||||
#: ../js/ui/status/network.js:1483
 | 
			
		||||
msgid "VPN Settings"
 | 
			
		||||
msgstr "Innstillinger for VPN"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1503
 | 
			
		||||
#: ../js/ui/status/network.js:1502
 | 
			
		||||
msgid "VPN"
 | 
			
		||||
msgstr "VPN"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1513
 | 
			
		||||
msgid "VPN Off"
 | 
			
		||||
msgstr "VPN av"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1697
 | 
			
		||||
msgid "Connection failed"
 | 
			
		||||
msgstr "Tilkobling mislyktes"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1698
 | 
			
		||||
msgid "Activation of network connection failed"
 | 
			
		||||
msgstr "Aktivering av nettverkstilkobling mislyktes"
 | 
			
		||||
 | 
			
		||||
@@ -1439,34 +1401,42 @@ msgstr "%d:%02d gjenstår (%d%%)"
 | 
			
		||||
msgid "%d∶%02d Until Full (%d%%)"
 | 
			
		||||
msgstr "%d:%02d til batteriet er fullt (%d%%)"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/power.js:119
 | 
			
		||||
msgid "UPS"
 | 
			
		||||
msgstr "UPS"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/power.js:121
 | 
			
		||||
msgid "Battery"
 | 
			
		||||
msgstr "Batteri"
 | 
			
		||||
 | 
			
		||||
#. The menu only appears when airplane mode is on, so just
 | 
			
		||||
#. statically build it as if it was on, rather than dynamically
 | 
			
		||||
#. changing the menu contents.
 | 
			
		||||
#: ../js/ui/status/rfkill.js:88
 | 
			
		||||
msgid "Airplane Mode On"
 | 
			
		||||
msgstr "Flymodus er slått på"
 | 
			
		||||
msgid "Airplane Mode"
 | 
			
		||||
msgstr "Flymodus"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:343
 | 
			
		||||
#: ../js/ui/status/rfkill.js:90
 | 
			
		||||
msgid "On"
 | 
			
		||||
msgstr "På"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:337
 | 
			
		||||
msgid "Switch User"
 | 
			
		||||
msgstr "Bytt bruker"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:348
 | 
			
		||||
#: ../js/ui/status/system.js:342
 | 
			
		||||
msgid "Log Out"
 | 
			
		||||
msgstr "Logg ut"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:353
 | 
			
		||||
msgid "Account Settings"
 | 
			
		||||
msgstr "Innstillinger for konto"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:370
 | 
			
		||||
#: ../js/ui/status/system.js:361
 | 
			
		||||
msgid "Orientation Lock"
 | 
			
		||||
msgstr "Lås for orientering"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:378
 | 
			
		||||
#: ../js/ui/status/system.js:369
 | 
			
		||||
msgid "Suspend"
 | 
			
		||||
msgstr "Hvilemodus"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/system.js:381
 | 
			
		||||
#: ../js/ui/status/system.js:372
 | 
			
		||||
msgid "Power Off"
 | 
			
		||||
msgstr "Slå av"
 | 
			
		||||
 | 
			
		||||
@@ -1514,11 +1484,11 @@ msgstr "Vil du beholde disse skjerminnstillingene?"
 | 
			
		||||
msgid "Revert Settings"
 | 
			
		||||
msgstr "Forkast innstillinger"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/windowManager.js:85
 | 
			
		||||
#: ../js/ui/windowManager.js:86
 | 
			
		||||
msgid "Keep Changes"
 | 
			
		||||
msgstr "Behold endringer"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/windowManager.js:103
 | 
			
		||||
#: ../js/ui/windowManager.js:105
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Settings changes will revert in %d second"
 | 
			
		||||
msgid_plural "Settings changes will revert in %d seconds"
 | 
			
		||||
@@ -1527,7 +1497,7 @@ msgstr[1] "Endringer i innstillingene forkastes om %d sekunder"
 | 
			
		||||
 | 
			
		||||
#. Translators: This represents the size of a window. The first number is
 | 
			
		||||
#. * the width of the window and the second is the height.
 | 
			
		||||
#: ../js/ui/windowManager.js:658
 | 
			
		||||
#: ../js/ui/windowManager.js:660
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d x %d"
 | 
			
		||||
msgstr "%d x %d"
 | 
			
		||||
@@ -1566,19 +1536,19 @@ msgstr "Alltid på synlig arbeidsområde"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/windowMenu.js:105
 | 
			
		||||
msgid "Move to Workspace Left"
 | 
			
		||||
msgstr "Flytt til arbeidsområdet til venstre"
 | 
			
		||||
msgstr "Gå til arbeidsområdet til venstre"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/windowMenu.js:110
 | 
			
		||||
msgid "Move to Workspace Right"
 | 
			
		||||
msgstr "Flytt til arbeidsområdet til høyre"
 | 
			
		||||
msgstr "Gå til arbeidsområdet til høyre"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/windowMenu.js:115
 | 
			
		||||
msgid "Move to Workspace Up"
 | 
			
		||||
msgstr "Flytt til arbeidsområdet over"
 | 
			
		||||
msgstr "Gå til arbeidsområdet over"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/windowMenu.js:120
 | 
			
		||||
msgid "Move to Workspace Down"
 | 
			
		||||
msgstr "Flytt til arbeidsområdet under"
 | 
			
		||||
msgstr "Gå til arbeidsområdet under"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/windowMenu.js:136
 | 
			
		||||
msgid "Move to Monitor Up"
 | 
			
		||||
@@ -1622,40 +1592,40 @@ msgstr[1] "%u innganger"
 | 
			
		||||
msgid "System Sounds"
 | 
			
		||||
msgstr "Systemlyder"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:381
 | 
			
		||||
#: ../src/main.c:373
 | 
			
		||||
msgid "Print version"
 | 
			
		||||
msgstr "Vis versjon"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:387
 | 
			
		||||
#: ../src/main.c:379
 | 
			
		||||
msgid "Mode used by GDM for login screen"
 | 
			
		||||
msgstr "Modus som brukes av GDM for innloggingsskjermen"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:393
 | 
			
		||||
#: ../src/main.c:385
 | 
			
		||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
 | 
			
		||||
msgstr "Bruk spesifikt modus, f.eks «gdm» for innloggingsskjerm"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:399
 | 
			
		||||
#: ../src/main.c:391
 | 
			
		||||
msgid "List possible modes"
 | 
			
		||||
msgstr "Vis mulige modi"
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-app.c:246
 | 
			
		||||
#: ../src/shell-app.c:239
 | 
			
		||||
msgctxt "program"
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Ukjent"
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-app.c:487
 | 
			
		||||
#: ../src/shell-app.c:480
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to launch “%s”"
 | 
			
		||||
msgstr "Klarte ikke å starte «%s»"
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-keyring-prompt.c:730
 | 
			
		||||
#: ../src/shell-keyring-prompt.c:742
 | 
			
		||||
msgid "Passwords do not match."
 | 
			
		||||
msgstr "Passordene er ikke like."
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-keyring-prompt.c:738
 | 
			
		||||
#: ../src/shell-keyring-prompt.c:750
 | 
			
		||||
msgid "Password cannot be blank"
 | 
			
		||||
msgstr "Passordet kan ikke være tomt"
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-polkit-authentication-agent.c:353
 | 
			
		||||
#: ../src/shell-polkit-authentication-agent.c:346
 | 
			
		||||
msgid "Authentication dialog was dismissed by the user"
 | 
			
		||||
msgstr "Autentiseringsdialogen ble lukket av brukeren"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										702
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
							
						
						
									
										702
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										749
									
								
								po/sr@latin.po
									
									
									
									
									
								
							
							
						
						
									
										749
									
								
								po/sr@latin.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										548
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
							
						
						
									
										548
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -41,6 +41,8 @@
 | 
			
		||||
#define N_(x) x
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define CALENDAR_SOURCES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesPrivate))
 | 
			
		||||
 | 
			
		||||
typedef struct _ClientData ClientData;
 | 
			
		||||
typedef struct _CalendarSourceData CalendarSourceData;
 | 
			
		||||
 | 
			
		||||
@@ -64,14 +66,6 @@ struct _CalendarSourceData
 | 
			
		||||
  guint            loaded : 1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate;
 | 
			
		||||
 | 
			
		||||
struct _CalendarSources
 | 
			
		||||
{
 | 
			
		||||
  GObject                 parent;
 | 
			
		||||
  CalendarSourcesPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _CalendarSourcesPrivate
 | 
			
		||||
{
 | 
			
		||||
  ESourceRegistry    *registry;
 | 
			
		||||
@@ -83,8 +77,8 @@ struct _CalendarSourcesPrivate
 | 
			
		||||
  CalendarSourceData  task_sources;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (CalendarSources, calendar_sources, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void calendar_sources_class_init (CalendarSourcesClass *klass);
 | 
			
		||||
static void calendar_sources_init       (CalendarSources      *sources);
 | 
			
		||||
static void calendar_sources_finalize   (GObject             *object);
 | 
			
		||||
 | 
			
		||||
static void backend_died_cb (EClient *client, CalendarSourceData *source_data);
 | 
			
		||||
@@ -114,6 +108,34 @@ client_data_free (ClientData *data)
 | 
			
		||||
  g_slice_free (ClientData, data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GType
 | 
			
		||||
calendar_sources_get_type (void)
 | 
			
		||||
{
 | 
			
		||||
  static GType sources_type = 0;
 | 
			
		||||
  
 | 
			
		||||
  if (!sources_type)
 | 
			
		||||
    {
 | 
			
		||||
      static const GTypeInfo sources_info =
 | 
			
		||||
      {
 | 
			
		||||
	sizeof (CalendarSourcesClass),
 | 
			
		||||
	NULL,		/* base_init */
 | 
			
		||||
	NULL,		/* base_finalize */
 | 
			
		||||
	(GClassInitFunc) calendar_sources_class_init,
 | 
			
		||||
	NULL,           /* class_finalize */
 | 
			
		||||
	NULL,		/* class_data */
 | 
			
		||||
	sizeof (CalendarSources),
 | 
			
		||||
	0,		/* n_preallocs */
 | 
			
		||||
	(GInstanceInitFunc) calendar_sources_init,
 | 
			
		||||
      };
 | 
			
		||||
      
 | 
			
		||||
      sources_type = g_type_register_static (G_TYPE_OBJECT,
 | 
			
		||||
					     "CalendarSources",
 | 
			
		||||
					     &sources_info, 0);
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
  return sources_type;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
calendar_sources_class_init (CalendarSourcesClass *klass)
 | 
			
		||||
{
 | 
			
		||||
@@ -123,11 +145,14 @@ calendar_sources_class_init (CalendarSourcesClass *klass)
 | 
			
		||||
 | 
			
		||||
  gobject_class->finalize = calendar_sources_finalize;
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (CalendarSourcesPrivate));
 | 
			
		||||
 | 
			
		||||
  signals [APPOINTMENT_SOURCES_CHANGED] =
 | 
			
		||||
    g_signal_new ("appointment-sources-changed",
 | 
			
		||||
		  G_TYPE_FROM_CLASS (gobject_class),
 | 
			
		||||
		  G_SIGNAL_RUN_LAST,
 | 
			
		||||
		  0,
 | 
			
		||||
		  G_STRUCT_OFFSET (CalendarSourcesClass,
 | 
			
		||||
				   appointment_sources_changed),
 | 
			
		||||
		  NULL,
 | 
			
		||||
		  NULL,
 | 
			
		||||
                  NULL,
 | 
			
		||||
@@ -138,7 +163,8 @@ calendar_sources_class_init (CalendarSourcesClass *klass)
 | 
			
		||||
    g_signal_new ("task-sources-changed",
 | 
			
		||||
		  G_TYPE_FROM_CLASS (gobject_class),
 | 
			
		||||
		  G_SIGNAL_RUN_LAST,
 | 
			
		||||
		  0,
 | 
			
		||||
		  G_STRUCT_OFFSET (CalendarSourcesClass,
 | 
			
		||||
				   task_sources_changed),
 | 
			
		||||
		  NULL,
 | 
			
		||||
		  NULL,
 | 
			
		||||
                  NULL,
 | 
			
		||||
@@ -153,7 +179,7 @@ calendar_sources_init (CalendarSources *sources)
 | 
			
		||||
  GDBusConnection *session_bus;
 | 
			
		||||
  GVariant *result;
 | 
			
		||||
 | 
			
		||||
  sources->priv = calendar_sources_get_instance_private (sources);
 | 
			
		||||
  sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
 | 
			
		||||
 | 
			
		||||
  /* WORKAROUND: the hardcoded timeout for e_source_registry_new_sync()
 | 
			
		||||
     (and other library calls that eventually call g_dbus_proxy_new[_sync]())
 | 
			
		||||
@@ -175,7 +201,7 @@ calendar_sources_init (CalendarSources *sources)
 | 
			
		||||
                                        "/", "org.freedesktop.DBus",
 | 
			
		||||
                                        "StartServiceByName",
 | 
			
		||||
                                        g_variant_new ("(su)",
 | 
			
		||||
                                                       "org.gnome.evolution.dataserver.Sources5",
 | 
			
		||||
                                                       "org.gnome.evolution.dataserver.Sources4",
 | 
			
		||||
                                                       0),
 | 
			
		||||
                                        NULL,
 | 
			
		||||
                                        G_DBUS_CALL_FLAGS_NONE,
 | 
			
		||||
 
 | 
			
		||||
@@ -28,10 +28,33 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define CALENDAR_TYPE_SOURCES (calendar_sources_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (CalendarSources, calendar_sources,
 | 
			
		||||
                      CALENDAR, SOURCES, GObject)
 | 
			
		||||
#define CALENDAR_TYPE_SOURCES        (calendar_sources_get_type ())
 | 
			
		||||
#define CALENDAR_SOURCES(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_SOURCES, CalendarSources))
 | 
			
		||||
#define CALENDAR_SOURCES_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST ((k), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
 | 
			
		||||
#define CALENDAR_IS_SOURCES(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_SOURCES))
 | 
			
		||||
#define CALENDAR_IS_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_SOURCES))
 | 
			
		||||
#define CALENDAR_SOURCES_GET_CLASS(o)(G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _CalendarSources        CalendarSources;
 | 
			
		||||
typedef struct _CalendarSourcesClass   CalendarSourcesClass;
 | 
			
		||||
typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate;
 | 
			
		||||
 | 
			
		||||
struct _CalendarSources
 | 
			
		||||
{
 | 
			
		||||
  GObject                 parent;
 | 
			
		||||
  CalendarSourcesPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _CalendarSourcesClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass    parent_class;
 | 
			
		||||
 | 
			
		||||
  void         (* appointment_sources_changed) (CalendarSources *sources);
 | 
			
		||||
  void         (* task_sources_changed)        (CalendarSources *sources);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GType            calendar_sources_get_type                (void) G_GNUC_CONST;
 | 
			
		||||
CalendarSources *calendar_sources_get                     (void);
 | 
			
		||||
GList           *calendar_sources_get_appointment_clients (CalendarSources *sources);
 | 
			
		||||
GList           *calendar_sources_get_task_clients        (CalendarSources *sources);
 | 
			
		||||
 
 | 
			
		||||
@@ -45,8 +45,8 @@ static void gnome_shell_plugin_unminimize       (MetaPlugin          *plugin,
 | 
			
		||||
static void gnome_shell_plugin_size_change      (MetaPlugin          *plugin,
 | 
			
		||||
                                                 MetaWindowActor     *actor,
 | 
			
		||||
                                                 MetaSizeChange       which_change,
 | 
			
		||||
                                                 MetaRectangle       *old_frame_rect,
 | 
			
		||||
                                                 MetaRectangle       *old_buffer_rect);
 | 
			
		||||
                                                 MetaRectangle       *old_rect,
 | 
			
		||||
                                                 MetaRectangle       *new_rect);
 | 
			
		||||
static void gnome_shell_plugin_map              (MetaPlugin          *plugin,
 | 
			
		||||
                                                 MetaWindowActor     *actor);
 | 
			
		||||
static void gnome_shell_plugin_destroy          (MetaPlugin          *plugin,
 | 
			
		||||
 
 | 
			
		||||
@@ -176,15 +176,15 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section,
 | 
			
		||||
 | 
			
		||||
      if (subsection)
 | 
			
		||||
        {
 | 
			
		||||
          gboolean section_could_have_separator;
 | 
			
		||||
          gboolean could_have_separator;
 | 
			
		||||
 | 
			
		||||
          section_could_have_separator = (section->with_separators && n_items > 0) || subsection->separator_label;
 | 
			
		||||
          could_have_separator = (section->with_separators && n_items > 0) || subsection->separator_label;
 | 
			
		||||
 | 
			
		||||
          /* Only pass the parent_model and parent_index in case they may be used to create the separator. */
 | 
			
		||||
          n_items += gtk_menu_tracker_section_sync_separators (subsection, tracker, offset + n_items,
 | 
			
		||||
                                                               section_could_have_separator,
 | 
			
		||||
                                                               section_could_have_separator ? section->model : NULL,
 | 
			
		||||
                                                               section_could_have_separator ? i : 0);
 | 
			
		||||
                                                               could_have_separator,
 | 
			
		||||
                                                               could_have_separator ? section->model : NULL,
 | 
			
		||||
                                                               could_have_separator ? i : 0);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        n_items++;
 | 
			
		||||
@@ -197,11 +197,11 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section,
 | 
			
		||||
  if (should_have_separator > section->has_separator)
 | 
			
		||||
    {
 | 
			
		||||
      /* Add a separator */
 | 
			
		||||
      GtkMenuTrackerItem *menuitem;
 | 
			
		||||
      GtkMenuTrackerItem *item;
 | 
			
		||||
 | 
			
		||||
      menuitem = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE);
 | 
			
		||||
      (* tracker->insert_func) (menuitem, offset, tracker->user_data);
 | 
			
		||||
      g_object_unref (menuitem);
 | 
			
		||||
      item = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE);
 | 
			
		||||
      (* tracker->insert_func) (item, offset, tracker->user_data);
 | 
			
		||||
      g_object_unref (item);
 | 
			
		||||
 | 
			
		||||
      section->has_separator = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								src/gvc
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								src/gvc
									
									
									
									
									
								
							 Submodule src/gvc updated: 0a79019088...fac3a900e5
									
								
							@@ -43,6 +43,8 @@
 | 
			
		||||
#define DIRECTORY_LOAD_ITEMS_PER_CALLBACK 100
 | 
			
		||||
#define HIGH_SCORE_RATIO 0.10
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (ShellMimeSniffer, shell_mime_sniffer, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
  PROP_FILE = 1,
 | 
			
		||||
  NUM_PROPERTIES
 | 
			
		||||
@@ -70,26 +72,16 @@ typedef struct {
 | 
			
		||||
  gint total_items;
 | 
			
		||||
} DeepCountState;
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellMimeSnifferPrivate   ShellMimeSnifferPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellMimeSniffer
 | 
			
		||||
{
 | 
			
		||||
  GObject parent_instance;
 | 
			
		||||
 | 
			
		||||
  ShellMimeSnifferPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellMimeSnifferPrivate {
 | 
			
		||||
  GFile *file;
 | 
			
		||||
 | 
			
		||||
  GCancellable *cancellable;
 | 
			
		||||
  guint watchdog_id;
 | 
			
		||||
 | 
			
		||||
  GTask *task;
 | 
			
		||||
  GSimpleAsyncResult *async_result;
 | 
			
		||||
  gchar **sniffed_mime;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellMimeSniffer, shell_mime_sniffer, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
static void deep_count_load (DeepCountState *state,
 | 
			
		||||
                             GFile *file);
 | 
			
		||||
 | 
			
		||||
@@ -187,7 +179,6 @@ prepare_async_result (DeepCountState *state)
 | 
			
		||||
  GArray *results;
 | 
			
		||||
  GPtrArray *sniffed_mime;
 | 
			
		||||
  SniffedResult result;
 | 
			
		||||
  char **mimes;
 | 
			
		||||
 | 
			
		||||
  sniffed_mime = g_ptr_array_new ();
 | 
			
		||||
  results = g_array_new (TRUE, TRUE, sizeof (SniffedResult));
 | 
			
		||||
@@ -229,10 +220,10 @@ prepare_async_result (DeepCountState *state)
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  g_ptr_array_add (sniffed_mime, NULL);
 | 
			
		||||
  mimes = (gchar **) g_ptr_array_free (sniffed_mime, FALSE);
 | 
			
		||||
  self->priv->sniffed_mime = (gchar **) g_ptr_array_free (sniffed_mime, FALSE);
 | 
			
		||||
 | 
			
		||||
  g_array_free (results, TRUE);
 | 
			
		||||
  g_task_return_pointer (self->priv->task, mimes, (GDestroyNotify)g_strfreev);
 | 
			
		||||
  g_simple_async_result_complete_in_idle (self->priv->async_result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* adapted from nautilus/libnautilus-private/nautilus-directory-async.c */
 | 
			
		||||
@@ -425,17 +416,20 @@ query_info_async_ready_cb (GObject *source,
 | 
			
		||||
 | 
			
		||||
  if (error != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      g_task_return_error (self->priv->task, error);
 | 
			
		||||
      g_simple_async_result_take_error (self->priv->async_result,
 | 
			
		||||
                                        error);
 | 
			
		||||
      g_simple_async_result_complete_in_idle (self->priv->async_result);
 | 
			
		||||
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (g_file_info_get_file_type (info) != G_FILE_TYPE_DIRECTORY)
 | 
			
		||||
    {
 | 
			
		||||
      g_task_return_new_error (self->priv->task,
 | 
			
		||||
                               G_IO_ERROR,
 | 
			
		||||
                               G_IO_ERROR_NOT_DIRECTORY,
 | 
			
		||||
                               "Not a directory");
 | 
			
		||||
      g_simple_async_result_set_error (self->priv->async_result,
 | 
			
		||||
                                       G_IO_ERROR,
 | 
			
		||||
                                       G_IO_ERROR_NOT_DIRECTORY,
 | 
			
		||||
                                       "Not a directory");
 | 
			
		||||
      g_simple_async_result_complete_in_idle (self->priv->async_result);
 | 
			
		||||
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
@@ -481,7 +475,7 @@ shell_mime_sniffer_dispose (GObject *object)
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&self->priv->file);
 | 
			
		||||
  g_clear_object (&self->priv->cancellable);
 | 
			
		||||
  g_clear_object (&self->priv->task);
 | 
			
		||||
  g_clear_object (&self->priv->async_result);
 | 
			
		||||
 | 
			
		||||
  if (self->priv->watchdog_id != 0)
 | 
			
		||||
    {
 | 
			
		||||
@@ -492,6 +486,16 @@ shell_mime_sniffer_dispose (GObject *object)
 | 
			
		||||
  G_OBJECT_CLASS (shell_mime_sniffer_parent_class)->dispose (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_mime_sniffer_finalize (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
  ShellMimeSniffer *self = SHELL_MIME_SNIFFER (object);
 | 
			
		||||
 | 
			
		||||
  g_strfreev (self->priv->sniffed_mime);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (shell_mime_sniffer_parent_class)->finalize (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_mime_sniffer_get_property (GObject *object,
 | 
			
		||||
                                guint       prop_id,
 | 
			
		||||
@@ -535,6 +539,7 @@ shell_mime_sniffer_class_init (ShellMimeSnifferClass *klass)
 | 
			
		||||
 | 
			
		||||
  oclass = G_OBJECT_CLASS (klass);
 | 
			
		||||
  oclass->dispose = shell_mime_sniffer_dispose;
 | 
			
		||||
  oclass->finalize = shell_mime_sniffer_finalize;
 | 
			
		||||
  oclass->get_property = shell_mime_sniffer_get_property;
 | 
			
		||||
  oclass->set_property = shell_mime_sniffer_set_property;
 | 
			
		||||
 | 
			
		||||
@@ -545,13 +550,17 @@ shell_mime_sniffer_class_init (ShellMimeSnifferClass *klass)
 | 
			
		||||
                         G_TYPE_FILE,
 | 
			
		||||
                         G_PARAM_READWRITE);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (ShellMimeSnifferPrivate));
 | 
			
		||||
  g_object_class_install_properties (oclass, NUM_PROPERTIES, properties);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_mime_sniffer_init (ShellMimeSniffer *self)
 | 
			
		||||
{
 | 
			
		||||
  self->priv = shell_mime_sniffer_get_instance_private (self);
 | 
			
		||||
  self->priv =
 | 
			
		||||
    G_TYPE_INSTANCE_GET_PRIVATE (self,
 | 
			
		||||
                                 SHELL_TYPE_MIME_SNIFFER,
 | 
			
		||||
                                 ShellMimeSnifferPrivate);
 | 
			
		||||
  init_mimetypes ();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -569,11 +578,14 @@ shell_mime_sniffer_sniff_async (ShellMimeSniffer *self,
 | 
			
		||||
                                gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
  g_assert (self->priv->watchdog_id == 0);
 | 
			
		||||
  g_assert (self->priv->task == NULL);
 | 
			
		||||
  g_assert (self->priv->async_result == NULL);
 | 
			
		||||
 | 
			
		||||
  self->priv->async_result = 
 | 
			
		||||
    g_simple_async_result_new (G_OBJECT (self),
 | 
			
		||||
                               callback, user_data,
 | 
			
		||||
                               shell_mime_sniffer_sniff_finish);
 | 
			
		||||
  
 | 
			
		||||
  self->priv->cancellable = g_cancellable_new ();
 | 
			
		||||
  self->priv->task = g_task_new (self, self->priv->cancellable,
 | 
			
		||||
                                 callback, user_data);
 | 
			
		||||
 | 
			
		||||
  self->priv->watchdog_id =
 | 
			
		||||
    g_timeout_add (WATCHDOG_TIMEOUT,
 | 
			
		||||
@@ -588,5 +600,8 @@ shell_mime_sniffer_sniff_finish (ShellMimeSniffer *self,
 | 
			
		||||
                                 GAsyncResult *res,
 | 
			
		||||
                                 GError **error)
 | 
			
		||||
{
 | 
			
		||||
  return g_task_propagate_pointer (self->priv->task, error);
 | 
			
		||||
  if (g_simple_async_result_propagate_error (self->priv->async_result, error))
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  return g_strdupv (self->priv->sniffed_mime);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -27,9 +27,30 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_MIME_SNIFFER (shell_mime_sniffer_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellMimeSniffer, shell_mime_sniffer,
 | 
			
		||||
                      SHELL, MIME_SNIFFER, GObject)
 | 
			
		||||
#define SHELL_TYPE_MIME_SNIFFER            (shell_mime_sniffer_get_type ())
 | 
			
		||||
#define SHELL_MIME_SNIFFER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_MIME_SNIFFER, ShellMimeSniffer))
 | 
			
		||||
#define SHELL_IS_MIME_SNIFFER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_MIME_SNIFFER))
 | 
			
		||||
#define SHELL_MIME_SNIFFER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  SHELL_TYPE_MIME_SNIFFER, ShellMimeSnifferClass))
 | 
			
		||||
#define SHELL_IS_MIME_SNIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  SHELL_TYPE_MIME_SNIFFER))
 | 
			
		||||
#define SHELL_MIME_SNIFFER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  SHELL_TYPE_MIME_SNIFFER, ShellMimeSnifferClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellMimeSniffer          ShellMimeSniffer;
 | 
			
		||||
typedef struct _ShellMimeSnifferPrivate   ShellMimeSnifferPrivate;
 | 
			
		||||
typedef struct _ShellMimeSnifferClass     ShellMimeSnifferClass;
 | 
			
		||||
 | 
			
		||||
struct _ShellMimeSniffer
 | 
			
		||||
{
 | 
			
		||||
  GObject parent_instance;
 | 
			
		||||
 | 
			
		||||
  ShellMimeSnifferPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellMimeSnifferClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType    shell_mime_sniffer_get_type     (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
ShellMimeSniffer *shell_mime_sniffer_new (GFile *file);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								src/main.c
									
									
									
									
									
								
							@@ -51,11 +51,11 @@ enum {
 | 
			
		||||
static int _shell_debug;
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_dbus_acquire_name (GDBusProxy  *bus,
 | 
			
		||||
                         guint32      request_name_flags,
 | 
			
		||||
                         guint32     *request_name_result,
 | 
			
		||||
                         const gchar *name,
 | 
			
		||||
                         gboolean     fatal)
 | 
			
		||||
shell_dbus_acquire_name (GDBusProxy *bus,
 | 
			
		||||
                         guint32     request_name_flags,
 | 
			
		||||
                         guint32    *request_name_result,
 | 
			
		||||
                         gchar      *name,
 | 
			
		||||
                         gboolean    fatal)
 | 
			
		||||
{
 | 
			
		||||
  GError *error = NULL;
 | 
			
		||||
  GVariant *request_name_variant;
 | 
			
		||||
@@ -69,26 +69,24 @@ shell_dbus_acquire_name (GDBusProxy  *bus,
 | 
			
		||||
                                                       &error)))
 | 
			
		||||
    {
 | 
			
		||||
      g_printerr ("failed to acquire %s: %s\n", name, error->message);
 | 
			
		||||
      g_clear_error (&error);
 | 
			
		||||
      if (!fatal)
 | 
			
		||||
        return;
 | 
			
		||||
      exit (1);
 | 
			
		||||
    }
 | 
			
		||||
  g_variant_get (request_name_variant, "(u)", request_name_result);
 | 
			
		||||
  g_variant_unref (request_name_variant);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_dbus_acquire_names (GDBusProxy  *bus,
 | 
			
		||||
                          guint32      request_name_flags,
 | 
			
		||||
                          const gchar *name,
 | 
			
		||||
                          gboolean     fatal, ...) G_GNUC_NULL_TERMINATED;
 | 
			
		||||
shell_dbus_acquire_names (GDBusProxy *bus,
 | 
			
		||||
                          guint32     request_name_flags,
 | 
			
		||||
                          gchar      *name,
 | 
			
		||||
                          gboolean    fatal, ...) G_GNUC_NULL_TERMINATED;
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_dbus_acquire_names (GDBusProxy  *bus,
 | 
			
		||||
                          guint32      request_name_flags,
 | 
			
		||||
                          const gchar *name,
 | 
			
		||||
                          gboolean     fatal, ...)
 | 
			
		||||
shell_dbus_acquire_names (GDBusProxy *bus,
 | 
			
		||||
                          guint32     request_name_flags,
 | 
			
		||||
                          gchar      *name,
 | 
			
		||||
                          gboolean    fatal, ...)
 | 
			
		||||
{
 | 
			
		||||
  va_list al;
 | 
			
		||||
  guint32 request_name_result;
 | 
			
		||||
@@ -132,12 +130,6 @@ shell_dbus_init (gboolean replace)
 | 
			
		||||
                               NULL, /* cancellable */
 | 
			
		||||
                               &error);
 | 
			
		||||
 | 
			
		||||
  if (!bus)
 | 
			
		||||
    {
 | 
			
		||||
      g_printerr ("Failed to get a session bus proxy: %s", error->message);
 | 
			
		||||
      exit (1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  request_name_flags = G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT;
 | 
			
		||||
  if (replace)
 | 
			
		||||
    request_name_flags |= DBUS_NAME_FLAG_REPLACE_EXISTING;
 | 
			
		||||
@@ -462,7 +454,7 @@ main (int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
  /* Initialize the global object */
 | 
			
		||||
  if (session_mode == NULL)
 | 
			
		||||
    session_mode = is_gdm_mode ? (char *)"gdm" : (char *)"user";
 | 
			
		||||
    session_mode = is_gdm_mode ? "gdm" : "user";
 | 
			
		||||
 | 
			
		||||
  _shell_global_init ("session-mode", session_mode, NULL);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -37,15 +37,6 @@ enum {
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL] = { 0 };
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellAppSystemPrivate ShellAppSystemPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellAppSystem
 | 
			
		||||
{
 | 
			
		||||
  GObject parent;
 | 
			
		||||
 | 
			
		||||
  ShellAppSystemPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellAppSystemPrivate {
 | 
			
		||||
  GHashTable *running_apps;
 | 
			
		||||
  GHashTable *id_to_app;
 | 
			
		||||
@@ -54,7 +45,7 @@ struct _ShellAppSystemPrivate {
 | 
			
		||||
 | 
			
		||||
static void shell_app_system_finalize (GObject *object);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellAppSystem, shell_app_system, G_TYPE_OBJECT);
 | 
			
		||||
G_DEFINE_TYPE(ShellAppSystem, shell_app_system, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
static void shell_app_system_class_init(ShellAppSystemClass *klass)
 | 
			
		||||
{
 | 
			
		||||
@@ -73,9 +64,11 @@ static void shell_app_system_class_init(ShellAppSystemClass *klass)
 | 
			
		||||
    g_signal_new ("installed-changed",
 | 
			
		||||
		  SHELL_TYPE_APP_SYSTEM,
 | 
			
		||||
		  G_SIGNAL_RUN_LAST,
 | 
			
		||||
                  0,
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
		  G_STRUCT_OFFSET (ShellAppSystemClass, installed_changed),
 | 
			
		||||
          NULL, NULL, NULL,
 | 
			
		||||
		  G_TYPE_NONE, 0);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (gobject_class, sizeof (ShellAppSystemPrivate));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -154,7 +147,9 @@ shell_app_system_init (ShellAppSystem *self)
 | 
			
		||||
  ShellAppSystemPrivate *priv;
 | 
			
		||||
  GAppInfoMonitor *monitor;
 | 
			
		||||
 | 
			
		||||
  self->priv = priv = shell_app_system_get_instance_private (self);
 | 
			
		||||
  self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
 | 
			
		||||
                                                   SHELL_TYPE_APP_SYSTEM,
 | 
			
		||||
                                                   ShellAppSystemPrivate);
 | 
			
		||||
 | 
			
		||||
  priv->running_apps = g_hash_table_new_full (NULL, NULL, (GDestroyNotify) g_object_unref, NULL);
 | 
			
		||||
  priv->id_to_app = g_hash_table_new_full (g_str_hash, g_str_equal,
 | 
			
		||||
@@ -187,7 +182,7 @@ shell_app_system_finalize (GObject *object)
 | 
			
		||||
 * Return Value: (transfer none): The global #ShellAppSystem singleton
 | 
			
		||||
 */
 | 
			
		||||
ShellAppSystem *
 | 
			
		||||
shell_app_system_get_default (void)
 | 
			
		||||
shell_app_system_get_default ()
 | 
			
		||||
{
 | 
			
		||||
  static ShellAppSystem *instance = NULL;
 | 
			
		||||
 | 
			
		||||
@@ -353,9 +348,6 @@ _shell_app_system_notify_app_state_changed (ShellAppSystem *self,
 | 
			
		||||
    case SHELL_APP_STATE_STOPPED:
 | 
			
		||||
      g_hash_table_remove (self->priv->running_apps, app);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      g_warn_if_reached();
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  g_signal_emit (self, signals[APP_STATE_CHANGED], 0, app);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,10 +8,33 @@
 | 
			
		||||
 | 
			
		||||
#include "shell-app.h"
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_APP_SYSTEM (shell_app_system_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellAppSystem, shell_app_system,
 | 
			
		||||
                      SHELL, APP_SYSTEM, GObject)
 | 
			
		||||
#define SHELL_TYPE_APP_SYSTEM                 (shell_app_system_get_type ())
 | 
			
		||||
#define SHELL_APP_SYSTEM(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_APP_SYSTEM, ShellAppSystem))
 | 
			
		||||
#define SHELL_APP_SYSTEM_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_APP_SYSTEM, ShellAppSystemClass))
 | 
			
		||||
#define SHELL_IS_APP_SYSTEM(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_APP_SYSTEM))
 | 
			
		||||
#define SHELL_IS_APP_SYSTEM_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_APP_SYSTEM))
 | 
			
		||||
#define SHELL_APP_SYSTEM_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_APP_SYSTEM, ShellAppSystemClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellAppSystem ShellAppSystem;
 | 
			
		||||
typedef struct _ShellAppSystemClass ShellAppSystemClass;
 | 
			
		||||
typedef struct _ShellAppSystemPrivate ShellAppSystemPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellAppSystem
 | 
			
		||||
{
 | 
			
		||||
  GObject parent;
 | 
			
		||||
 | 
			
		||||
  ShellAppSystemPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellAppSystemClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
 | 
			
		||||
  void (*installed_changed)(ShellAppSystem *appsys, gpointer user_data);
 | 
			
		||||
  void (*favorites_changed)(ShellAppSystem *appsys, gpointer user_data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType           shell_app_system_get_type    (void) G_GNUC_CONST;
 | 
			
		||||
ShellAppSystem *shell_app_system_get_default (void);
 | 
			
		||||
 | 
			
		||||
ShellApp       *shell_app_system_lookup_app                   (ShellAppSystem  *system,
 | 
			
		||||
 
 | 
			
		||||
@@ -996,7 +996,7 @@ on_enable_monitoring_key_changed (GSettings     *settings,
 | 
			
		||||
 * Return Value: (transfer none): The global #ShellAppUsage instance
 | 
			
		||||
 */
 | 
			
		||||
ShellAppUsage *
 | 
			
		||||
shell_app_usage_get_default (void)
 | 
			
		||||
shell_app_usage_get_default ()
 | 
			
		||||
{
 | 
			
		||||
  static ShellAppUsage *instance;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,9 +7,23 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellAppUsage ShellAppUsage;
 | 
			
		||||
typedef struct _ShellAppUsageClass ShellAppUsageClass;
 | 
			
		||||
typedef struct _ShellAppUsagePrivate ShellAppUsagePrivate;
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_APP_USAGE              (shell_app_usage_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellAppUsage, shell_app_usage,
 | 
			
		||||
                      SHELL, APP_USAGE, GObject)
 | 
			
		||||
#define SHELL_APP_USAGE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_APP_USAGE, ShellAppUsage))
 | 
			
		||||
#define SHELL_APP_USAGE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_APP_USAGE, ShellAppUsageClass))
 | 
			
		||||
#define SHELL_IS_APP_USAGE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_APP_USAGE))
 | 
			
		||||
#define SHELL_IS_APP_USAGE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_APP_USAGE))
 | 
			
		||||
#define SHELL_APP_USAGE_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_APP_USAGE, ShellAppUsageClass))
 | 
			
		||||
 | 
			
		||||
struct _ShellAppUsageClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType shell_app_usage_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
ShellAppUsage* shell_app_usage_get_default(void);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -156,20 +156,16 @@ static MetaWindow *
 | 
			
		||||
window_backed_app_get_window (ShellApp     *app)
 | 
			
		||||
{
 | 
			
		||||
  g_assert (app->info == NULL);
 | 
			
		||||
  if (app->running_state)
 | 
			
		||||
    {
 | 
			
		||||
      g_assert (app->running_state->windows);
 | 
			
		||||
      return app->running_state->windows->data;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    return NULL;
 | 
			
		||||
  g_assert (app->running_state);
 | 
			
		||||
  g_assert (app->running_state->windows);
 | 
			
		||||
  return app->running_state->windows->data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ClutterActor *
 | 
			
		||||
window_backed_app_get_icon (ShellApp *app,
 | 
			
		||||
                            int       size)
 | 
			
		||||
{
 | 
			
		||||
  MetaWindow *window = NULL;
 | 
			
		||||
  MetaWindow *window;
 | 
			
		||||
  ClutterActor *actor;
 | 
			
		||||
  gint scale;
 | 
			
		||||
  ShellGlobal *global;
 | 
			
		||||
@@ -185,16 +181,14 @@ window_backed_app_get_icon (ShellApp *app,
 | 
			
		||||
   * window-backend apps, it's possible we get a request for the icon.
 | 
			
		||||
   * Avoid asserting here and just return an empty image.
 | 
			
		||||
   */
 | 
			
		||||
  if (app->running_state != NULL)
 | 
			
		||||
    window = window_backed_app_get_window (app);
 | 
			
		||||
 | 
			
		||||
  if (window == NULL)
 | 
			
		||||
  if (app->running_state == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      actor = clutter_texture_new ();
 | 
			
		||||
      g_object_set (actor, "opacity", 0, "width", (float) size, "height", (float) size, NULL);
 | 
			
		||||
      return actor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  window = window_backed_app_get_window (app);
 | 
			
		||||
  actor = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (),
 | 
			
		||||
                                                        G_OBJECT (window),
 | 
			
		||||
                                                        "icon");
 | 
			
		||||
@@ -238,10 +232,9 @@ shell_app_get_name (ShellApp *app)
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      MetaWindow *window = window_backed_app_get_window (app);
 | 
			
		||||
      const char *name = NULL;
 | 
			
		||||
      const char *name;
 | 
			
		||||
 | 
			
		||||
      if (window)
 | 
			
		||||
        name = meta_window_get_wm_class (window);
 | 
			
		||||
      name = meta_window_get_wm_class (window);
 | 
			
		||||
      if (!name)
 | 
			
		||||
        name = C_("program", "Unknown");
 | 
			
		||||
      return name;
 | 
			
		||||
@@ -498,9 +491,6 @@ shell_app_activate_full (ShellApp      *app,
 | 
			
		||||
      case SHELL_APP_STATE_RUNNING:
 | 
			
		||||
        shell_app_activate_window (app, NULL, timestamp);
 | 
			
		||||
        break;
 | 
			
		||||
      default:
 | 
			
		||||
        g_assert_not_reached();
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -709,7 +699,7 @@ static int
 | 
			
		||||
shell_app_get_last_user_time (ShellApp *app)
 | 
			
		||||
{
 | 
			
		||||
  GSList *iter;
 | 
			
		||||
  guint32 last_user_time;
 | 
			
		||||
  int last_user_time;
 | 
			
		||||
 | 
			
		||||
  last_user_time = 0;
 | 
			
		||||
 | 
			
		||||
@@ -719,7 +709,7 @@ shell_app_get_last_user_time (ShellApp *app)
 | 
			
		||||
        last_user_time = MAX (last_user_time, meta_window_get_user_time (iter->data));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return (int)last_user_time;
 | 
			
		||||
  return last_user_time;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -1161,13 +1151,7 @@ shell_app_launch (ShellApp     *app,
 | 
			
		||||
  if (app->info == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      MetaWindow *window = window_backed_app_get_window (app);
 | 
			
		||||
      /* We don't use an error return if there no longer any windows, because the
 | 
			
		||||
       * user attempting to activate a stale window backed app isn't something
 | 
			
		||||
       * we would expect the caller to meaningfully handle or display an error
 | 
			
		||||
       * message to the user.
 | 
			
		||||
       */
 | 
			
		||||
      if (window)
 | 
			
		||||
        meta_window_activate (window, timestamp);
 | 
			
		||||
      meta_window_activate (window, timestamp);
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,8 +9,23 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_APP (shell_app_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellApp, shell_app, SHELL, APP, GObject)
 | 
			
		||||
typedef struct _ShellApp ShellApp;
 | 
			
		||||
typedef struct _ShellAppClass ShellAppClass;
 | 
			
		||||
typedef struct _ShellAppPrivate ShellAppPrivate;
 | 
			
		||||
typedef struct _ShellAppAction ShellAppAction;
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_APP              (shell_app_get_type ())
 | 
			
		||||
#define SHELL_APP(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_APP, ShellApp))
 | 
			
		||||
#define SHELL_APP_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_APP, ShellAppClass))
 | 
			
		||||
#define SHELL_IS_APP(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_APP))
 | 
			
		||||
#define SHELL_IS_APP_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_APP))
 | 
			
		||||
#define SHELL_APP_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_APP, ShellAppClass))
 | 
			
		||||
 | 
			
		||||
struct _ShellAppClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
  SHELL_APP_STATE_STOPPED,
 | 
			
		||||
@@ -18,6 +33,8 @@ typedef enum {
 | 
			
		||||
  SHELL_APP_STATE_RUNNING
 | 
			
		||||
} ShellAppState;
 | 
			
		||||
 | 
			
		||||
GType shell_app_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
const char *shell_app_get_id (ShellApp *app);
 | 
			
		||||
 | 
			
		||||
GDesktopAppInfo *shell_app_get_app_info (ShellApp *app);
 | 
			
		||||
 
 | 
			
		||||
@@ -23,22 +23,18 @@
 | 
			
		||||
 * - Actor is mapped [actor and all parents visible, actor in stage]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (ShellEmbeddedWindow, shell_embedded_window, GTK_TYPE_WINDOW);
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
   PROP_0
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellEmbeddedWindowPrivate ShellEmbeddedWindowPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellEmbeddedWindowPrivate {
 | 
			
		||||
  ShellGtkEmbed *actor;
 | 
			
		||||
 | 
			
		||||
  GdkRectangle position;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellEmbeddedWindow,
 | 
			
		||||
                            shell_embedded_window,
 | 
			
		||||
                            GTK_TYPE_WINDOW);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The normal gtk_window_show() starts all of the complicated asynchronous
 | 
			
		||||
 * window resizing code running; we don't want or need any of that.
 | 
			
		||||
@@ -51,22 +47,19 @@ static void
 | 
			
		||||
shell_embedded_window_show (GtkWidget *widget)
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindow *window = SHELL_EMBEDDED_WINDOW (widget);
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
  GtkWidgetClass *widget_class;
 | 
			
		||||
 | 
			
		||||
  priv = shell_embedded_window_get_instance_private (window);
 | 
			
		||||
 | 
			
		||||
  /* Skip GtkWindow, but run the default GtkWidget handling which
 | 
			
		||||
   * marks the widget visible */
 | 
			
		||||
  widget_class = g_type_class_peek (GTK_TYPE_WIDGET);
 | 
			
		||||
  widget_class->show (widget);
 | 
			
		||||
 | 
			
		||||
  if (priv->actor)
 | 
			
		||||
  if (window->priv->actor)
 | 
			
		||||
    {
 | 
			
		||||
      /* Size is 0x0 if the GtkWindow is not shown */
 | 
			
		||||
      clutter_actor_queue_relayout (CLUTTER_ACTOR (priv->actor));
 | 
			
		||||
      clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor));
 | 
			
		||||
 | 
			
		||||
      if (clutter_actor_is_realized (CLUTTER_ACTOR (priv->actor)))
 | 
			
		||||
      if (clutter_actor_is_realized (CLUTTER_ACTOR (window->priv->actor)))
 | 
			
		||||
        gtk_widget_map (widget);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -75,12 +68,9 @@ static void
 | 
			
		||||
shell_embedded_window_hide (GtkWidget *widget)
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindow *window = SHELL_EMBEDDED_WINDOW (widget);
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  priv = shell_embedded_window_get_instance_private (window);
 | 
			
		||||
 | 
			
		||||
  if (priv->actor)
 | 
			
		||||
    clutter_actor_queue_relayout (CLUTTER_ACTOR (priv->actor));
 | 
			
		||||
  if (window->priv->actor)
 | 
			
		||||
    clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor));
 | 
			
		||||
 | 
			
		||||
  GTK_WIDGET_CLASS (shell_embedded_window_parent_class)->hide (widget);
 | 
			
		||||
}
 | 
			
		||||
@@ -100,9 +90,6 @@ static void
 | 
			
		||||
shell_embedded_window_check_resize (GtkContainer *container)
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindow *window = SHELL_EMBEDDED_WINDOW (container);
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  priv = shell_embedded_window_get_instance_private (window);
 | 
			
		||||
 | 
			
		||||
  /* Check resize is called when a resize is queued on something
 | 
			
		||||
   * inside the GtkWindow; we need to make sure that in response
 | 
			
		||||
@@ -110,8 +97,8 @@ shell_embedded_window_check_resize (GtkContainer *container)
 | 
			
		||||
   * gtk_widget_size_allocate() are called; we defer to the Clutter
 | 
			
		||||
   * logic and assume it will do the right thing.
 | 
			
		||||
   */
 | 
			
		||||
  if (priv->actor)
 | 
			
		||||
    clutter_actor_queue_relayout (CLUTTER_ACTOR (priv->actor));
 | 
			
		||||
  if (window->priv->actor)
 | 
			
		||||
    clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static GObject *
 | 
			
		||||
@@ -147,6 +134,8 @@ shell_embedded_window_class_init (ShellEmbeddedWindowClass *klass)
 | 
			
		||||
  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 | 
			
		||||
  GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (ShellEmbeddedWindowPrivate));
 | 
			
		||||
 | 
			
		||||
  object_class->constructor     = shell_embedded_window_constructor;
 | 
			
		||||
 | 
			
		||||
  widget_class->show            = shell_embedded_window_show;
 | 
			
		||||
@@ -159,6 +148,8 @@ shell_embedded_window_class_init (ShellEmbeddedWindowClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
shell_embedded_window_init (ShellEmbeddedWindow *window)
 | 
			
		||||
{
 | 
			
		||||
  window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, SHELL_TYPE_EMBEDDED_WINDOW,
 | 
			
		||||
                                              ShellEmbeddedWindowPrivate);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -170,12 +161,9 @@ _shell_embedded_window_set_actor (ShellEmbeddedWindow  *window,
 | 
			
		||||
                                  ShellGtkEmbed        *actor)
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (SHELL_IS_EMBEDDED_WINDOW (window));
 | 
			
		||||
 | 
			
		||||
  priv = shell_embedded_window_get_instance_private (window);
 | 
			
		||||
  priv->actor = actor;
 | 
			
		||||
  window->priv->actor = actor;
 | 
			
		||||
 | 
			
		||||
  if (actor &&
 | 
			
		||||
      clutter_actor_is_mapped (CLUTTER_ACTOR (actor)) &&
 | 
			
		||||
@@ -190,23 +178,20 @@ _shell_embedded_window_allocate (ShellEmbeddedWindow *window,
 | 
			
		||||
                                 int                  width,
 | 
			
		||||
                                 int                  height)
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
  GtkAllocation allocation;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (SHELL_IS_EMBEDDED_WINDOW (window));
 | 
			
		||||
 | 
			
		||||
  priv = shell_embedded_window_get_instance_private (window);
 | 
			
		||||
 | 
			
		||||
  if (priv->position.x == x &&
 | 
			
		||||
      priv->position.y == y &&
 | 
			
		||||
      priv->position.width == width &&
 | 
			
		||||
      priv->position.height == height)
 | 
			
		||||
  if (window->priv->position.x == x &&
 | 
			
		||||
      window->priv->position.y == y &&
 | 
			
		||||
      window->priv->position.width == width &&
 | 
			
		||||
      window->priv->position.height == height)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  priv->position.x = x;
 | 
			
		||||
  priv->position.y = y;
 | 
			
		||||
  priv->position.width = width;
 | 
			
		||||
  priv->position.height = height;
 | 
			
		||||
  window->priv->position.x = x;
 | 
			
		||||
  window->priv->position.y = y;
 | 
			
		||||
  window->priv->position.width = width;
 | 
			
		||||
  window->priv->position.height = height;
 | 
			
		||||
 | 
			
		||||
  if (gtk_widget_get_realized (GTK_WIDGET (window)))
 | 
			
		||||
    gdk_window_move_resize (gtk_widget_get_window (GTK_WIDGET (window)),
 | 
			
		||||
 
 | 
			
		||||
@@ -5,15 +5,31 @@
 | 
			
		||||
#include <gtk/gtk.h>
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_EMBEDDED_WINDOW (shell_embedded_window_get_type ())
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (ShellEmbeddedWindow, shell_embedded_window,
 | 
			
		||||
                          SHELL, EMBEDDED_WINDOW, GtkWindow)
 | 
			
		||||
#define SHELL_TYPE_EMBEDDED_WINDOW                 (shell_embedded_window_get_type ())
 | 
			
		||||
#define SHELL_EMBEDDED_WINDOW(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_EMBEDDED_WINDOW, ShellEmbeddedWindow))
 | 
			
		||||
#define SHELL_EMBEDDED_WINDOW_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_EMBEDDED_WINDOW, ShellEmbeddedWindowClass))
 | 
			
		||||
#define SHELL_IS_EMBEDDED_WINDOW(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_EMBEDDED_WINDOW))
 | 
			
		||||
#define SHELL_IS_EMBEDDED_WINDOW_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_EMBEDDED_WINDOW))
 | 
			
		||||
#define SHELL_EMBEDDED_WINDOW_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_EMBEDDED_WINDOW, ShellEmbeddedWindowClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellEmbeddedWindow        ShellEmbeddedWindow;
 | 
			
		||||
typedef struct _ShellEmbeddedWindowClass   ShellEmbeddedWindowClass;
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellEmbeddedWindowPrivate ShellEmbeddedWindowPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellEmbeddedWindow
 | 
			
		||||
{
 | 
			
		||||
  GtkWindow parent;
 | 
			
		||||
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellEmbeddedWindowClass
 | 
			
		||||
{
 | 
			
		||||
  GtkWindowClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType shell_embedded_window_get_type (void) G_GNUC_CONST;
 | 
			
		||||
GtkWidget *shell_embedded_window_new (void);
 | 
			
		||||
 | 
			
		||||
#endif /* __SHELL_EMBEDDED_WINDOW_H__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -23,26 +23,16 @@
 | 
			
		||||
 | 
			
		||||
static void shell_generic_container_iface_init (ClutterContainerIface *iface);
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGenericContainerPrivate ShellGenericContainerPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellGenericContainer
 | 
			
		||||
{
 | 
			
		||||
    StWidget parent;
 | 
			
		||||
 | 
			
		||||
    ShellGenericContainerPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
G_DEFINE_TYPE_WITH_CODE(ShellGenericContainer,
 | 
			
		||||
                        shell_generic_container,
 | 
			
		||||
                        ST_TYPE_WIDGET,
 | 
			
		||||
                        G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
 | 
			
		||||
                                               shell_generic_container_iface_init));
 | 
			
		||||
 | 
			
		||||
struct _ShellGenericContainerPrivate {
 | 
			
		||||
  GHashTable *skip_paint;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_CODE(ShellGenericContainer,
 | 
			
		||||
                        shell_generic_container,
 | 
			
		||||
                        ST_TYPE_WIDGET,
 | 
			
		||||
                        G_ADD_PRIVATE (ShellGenericContainer)
 | 
			
		||||
                        G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
 | 
			
		||||
                                               shell_generic_container_iface_init));
 | 
			
		||||
 | 
			
		||||
/* Signals */
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
@@ -395,6 +385,8 @@ shell_generic_container_class_init (ShellGenericContainerClass *klass)
 | 
			
		||||
                  0,
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  G_TYPE_NONE, 2, CLUTTER_TYPE_ACTOR_BOX, CLUTTER_TYPE_ALLOCATION_FLAGS);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (gobject_class, sizeof (ShellGenericContainerPrivate));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -415,7 +407,8 @@ shell_generic_container_iface_init (ClutterContainerIface *iface)
 | 
			
		||||
static void
 | 
			
		||||
shell_generic_container_init (ShellGenericContainer *area)
 | 
			
		||||
{
 | 
			
		||||
  area->priv = shell_generic_container_get_instance_private (area);
 | 
			
		||||
  area->priv = G_TYPE_INSTANCE_GET_PRIVATE (area, SHELL_TYPE_GENERIC_CONTAINER,
 | 
			
		||||
                                            ShellGenericContainerPrivate);
 | 
			
		||||
  area->priv->skip_paint = g_hash_table_new (NULL, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,12 @@
 | 
			
		||||
 | 
			
		||||
#include "st.h"
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_GENERIC_CONTAINER (shell_generic_container_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellGenericContainer, shell_generic_container,
 | 
			
		||||
                      SHELL, GENERIC_CONTAINER, StWidget)
 | 
			
		||||
#define SHELL_TYPE_GENERIC_CONTAINER                 (shell_generic_container_get_type ())
 | 
			
		||||
#define SHELL_GENERIC_CONTAINER(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_GENERIC_CONTAINER, ShellGenericContainer))
 | 
			
		||||
#define SHELL_GENERIC_CONTAINER_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_GENERIC_CONTAINER, ShellGenericContainerClass))
 | 
			
		||||
#define SHELL_IS_GENERIC_CONTAINER(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_GENERIC_CONTAINER))
 | 
			
		||||
#define SHELL_IS_GENERIC_CONTAINER_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GENERIC_CONTAINER))
 | 
			
		||||
#define SHELL_GENERIC_CONTAINER_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GENERIC_CONTAINER, ShellGenericContainerClass))
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  float min_size;
 | 
			
		||||
@@ -19,6 +22,25 @@ typedef struct {
 | 
			
		||||
#define SHELL_TYPE_GENERIC_CONTAINER_ALLOCATION (shell_generic_container_allocation_get_type ())
 | 
			
		||||
GType shell_generic_container_allocation_get_type (void);
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGenericContainer        ShellGenericContainer;
 | 
			
		||||
typedef struct _ShellGenericContainerClass   ShellGenericContainerClass;
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGenericContainerPrivate ShellGenericContainerPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellGenericContainer
 | 
			
		||||
{
 | 
			
		||||
    StWidget parent;
 | 
			
		||||
 | 
			
		||||
    ShellGenericContainerPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellGenericContainerClass
 | 
			
		||||
{
 | 
			
		||||
    StWidgetClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType    shell_generic_container_get_type         (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
guint    shell_generic_container_get_n_skip_paint (ShellGenericContainer *self);
 | 
			
		||||
 | 
			
		||||
gboolean shell_generic_container_get_skip_paint   (ShellGenericContainer *self,
 | 
			
		||||
 
 | 
			
		||||
@@ -867,12 +867,7 @@ update_scale_factor (GtkSettings *settings,
 | 
			
		||||
    {
 | 
			
		||||
      g_object_set (context, "scale-factor", g_value_get_int (&value), NULL);
 | 
			
		||||
      if (meta_is_wayland_compositor ())
 | 
			
		||||
        {
 | 
			
		||||
          int xft_dpi;
 | 
			
		||||
          g_object_get (settings, "gtk-xft-dpi", &xft_dpi, NULL);
 | 
			
		||||
 | 
			
		||||
          g_object_set (clutter_settings_get_default (), "font-dpi", xft_dpi, NULL);
 | 
			
		||||
        }
 | 
			
		||||
        g_object_set (clutter_settings_get_default (), "font-dpi", 96 * 1024 * g_value_get_int (&value), NULL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Make sure clutter and gdk scaling stays disabled */
 | 
			
		||||
 
 | 
			
		||||
@@ -10,8 +10,22 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_GLOBAL (shell_global_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellGlobal, shell_global, SHELL, GLOBAL, GObject)
 | 
			
		||||
typedef struct _ShellGlobal      ShellGlobal;
 | 
			
		||||
typedef struct _ShellGlobalClass ShellGlobalClass;
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_GLOBAL              (shell_global_get_type ())
 | 
			
		||||
#define SHELL_GLOBAL(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_GLOBAL, ShellGlobal))
 | 
			
		||||
#define SHELL_GLOBAL_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_GLOBAL, ShellGlobalClass))
 | 
			
		||||
#define SHELL_IS_GLOBAL(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_GLOBAL))
 | 
			
		||||
#define SHELL_IS_GLOBAL_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GLOBAL))
 | 
			
		||||
#define SHELL_GLOBAL_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GLOBAL, ShellGlobalClass))
 | 
			
		||||
 | 
			
		||||
struct _ShellGlobalClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType shell_global_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
ShellGlobal   *shell_global_get                       (void);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,14 +16,13 @@
 | 
			
		||||
#include <cogl/cogl.h>
 | 
			
		||||
#include "shell-glsl-quad.h"
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGLSLQuadPrivate ShellGLSLQuadPrivate;
 | 
			
		||||
G_DEFINE_TYPE (ShellGLSLQuad, shell_glsl_quad, CLUTTER_TYPE_ACTOR);
 | 
			
		||||
 | 
			
		||||
struct _ShellGLSLQuadPrivate
 | 
			
		||||
{
 | 
			
		||||
  CoglPipeline  *pipeline;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellGLSLQuad, shell_glsl_quad, CLUTTER_TYPE_ACTOR);
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
shell_glsl_quad_get_paint_volume (ClutterActor       *actor,
 | 
			
		||||
                                  ClutterPaintVolume *volume)
 | 
			
		||||
@@ -39,7 +38,7 @@ shell_glsl_quad_paint (ClutterActor *actor)
 | 
			
		||||
  guint8 paint_opacity;
 | 
			
		||||
  ClutterActorBox box;
 | 
			
		||||
 | 
			
		||||
  priv = shell_glsl_quad_get_instance_private (self);
 | 
			
		||||
  priv = self->priv;
 | 
			
		||||
 | 
			
		||||
  paint_opacity = clutter_actor_get_paint_opacity (actor);
 | 
			
		||||
  clutter_actor_get_allocation_box (actor, &box);
 | 
			
		||||
@@ -107,7 +106,7 @@ shell_glsl_quad_dispose (GObject *gobject)
 | 
			
		||||
  ShellGLSLQuad *self = SHELL_GLSL_QUAD (gobject);
 | 
			
		||||
  ShellGLSLQuadPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  priv = shell_glsl_quad_get_instance_private (self);
 | 
			
		||||
  priv = self->priv;
 | 
			
		||||
 | 
			
		||||
  g_clear_pointer (&priv->pipeline, cogl_object_unref);
 | 
			
		||||
 | 
			
		||||
@@ -117,6 +116,7 @@ shell_glsl_quad_dispose (GObject *gobject)
 | 
			
		||||
static void
 | 
			
		||||
shell_glsl_quad_init (ShellGLSLQuad *quad)
 | 
			
		||||
{
 | 
			
		||||
  quad->priv = G_TYPE_INSTANCE_GET_PRIVATE (quad, SHELL_TYPE_GLSL_QUAD, ShellGLSLQuadPrivate);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -124,7 +124,6 @@ shell_glsl_quad_constructed (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
  ShellGLSLQuad *self;
 | 
			
		||||
  ShellGLSLQuadClass *klass;
 | 
			
		||||
  ShellGLSLQuadPrivate *priv;
 | 
			
		||||
  CoglContext *ctx =
 | 
			
		||||
    clutter_backend_get_cogl_context (clutter_get_default_backend ());
 | 
			
		||||
 | 
			
		||||
@@ -136,20 +135,18 @@ shell_glsl_quad_constructed (GObject *object)
 | 
			
		||||
  */
 | 
			
		||||
  klass = SHELL_GLSL_QUAD_GET_CLASS (object);
 | 
			
		||||
  self = SHELL_GLSL_QUAD (object);
 | 
			
		||||
  priv = shell_glsl_quad_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
  if (G_UNLIKELY (klass->base_pipeline == NULL))
 | 
			
		||||
    {
 | 
			
		||||
      klass->base_pipeline = cogl_pipeline_new (ctx);
 | 
			
		||||
      cogl_pipeline_set_blend (klass->base_pipeline, "RGBA = ADD (SRC_COLOR * (SRC_COLOR[A]), DST_COLOR * (1-SRC_COLOR[A]))", NULL);
 | 
			
		||||
 | 
			
		||||
      if (klass->build_pipeline != NULL)
 | 
			
		||||
        klass->build_pipeline (self);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  priv->pipeline = cogl_pipeline_copy (klass->base_pipeline);
 | 
			
		||||
  self->priv->pipeline = cogl_pipeline_copy (klass->base_pipeline);
 | 
			
		||||
 | 
			
		||||
  cogl_pipeline_set_layer_null_texture (priv->pipeline, 0, COGL_TEXTURE_TYPE_2D);
 | 
			
		||||
  cogl_pipeline_set_layer_null_texture (self->priv->pipeline, 0, COGL_TEXTURE_TYPE_2D);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -163,6 +160,8 @@ shell_glsl_quad_class_init (ShellGLSLQuadClass *klass)
 | 
			
		||||
 | 
			
		||||
  actor_class->get_paint_volume = shell_glsl_quad_get_paint_volume;
 | 
			
		||||
  actor_class->paint = shell_glsl_quad_paint;
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (ShellGLSLQuadPrivate));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -177,8 +176,7 @@ int
 | 
			
		||||
shell_glsl_quad_get_uniform_location (ShellGLSLQuad *quad,
 | 
			
		||||
                                      const char    *name)
 | 
			
		||||
{
 | 
			
		||||
  ShellGLSLQuadPrivate *priv = shell_glsl_quad_get_instance_private (quad);
 | 
			
		||||
  return cogl_pipeline_get_uniform_location (priv->pipeline, name);
 | 
			
		||||
  return cogl_pipeline_get_uniform_location (quad->priv->pipeline, name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -196,8 +194,7 @@ shell_glsl_quad_set_uniform_float (ShellGLSLQuad *quad,
 | 
			
		||||
                                   int            total_count,
 | 
			
		||||
                                   const float   *value)
 | 
			
		||||
{
 | 
			
		||||
  ShellGLSLQuadPrivate *priv = shell_glsl_quad_get_instance_private (quad);
 | 
			
		||||
  cogl_pipeline_set_uniform_float (priv->pipeline, uniform,
 | 
			
		||||
  cogl_pipeline_set_uniform_float (quad->priv->pipeline, uniform,
 | 
			
		||||
                                   n_components, total_count / n_components,
 | 
			
		||||
                                   value);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -26,9 +26,23 @@ typedef enum {
 | 
			
		||||
  SHELL_SNIPPET_HOOK_TEXTURE_LOOKUP
 | 
			
		||||
} ShellSnippetHook;
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_GLSL_QUAD (shell_glsl_quad_get_type ())
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (ShellGLSLQuad, shell_glsl_quad,
 | 
			
		||||
                          SHELL, GLSL_QUAD, ClutterActor)
 | 
			
		||||
#define SHELL_TYPE_GLSL_QUAD                 (shell_glsl_quad_get_type ())
 | 
			
		||||
#define SHELL_GLSL_QUAD(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_GLSL_QUAD, ShellGLSLQuad))
 | 
			
		||||
#define SHELL_GLSL_QUAD_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_GLSL_QUAD, ShellGLSLQuadClass))
 | 
			
		||||
#define SHELL_IS_GLSL_QUAD(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_GLSL_QUAD))
 | 
			
		||||
#define SHELL_IS_GLSL_QUAD_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GLSL_QUAD))
 | 
			
		||||
#define SHELL_GLSL_QUAD_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GLSL_QUAD, ShellGLSLQuadClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGLSLQuad        ShellGLSLQuad;
 | 
			
		||||
typedef struct _ShellGLSLQuadClass   ShellGLSLQuadClass;
 | 
			
		||||
typedef struct _ShellGLSLQuadPrivate ShellGLSLQuadPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellGLSLQuad
 | 
			
		||||
{
 | 
			
		||||
  ClutterActor parent;
 | 
			
		||||
 | 
			
		||||
  ShellGLSLQuadPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellGLSLQuadClass
 | 
			
		||||
{
 | 
			
		||||
@@ -39,6 +53,8 @@ struct _ShellGLSLQuadClass
 | 
			
		||||
  void (*build_pipeline) (ShellGLSLQuad *effect);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType shell_glsl_quad_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
void shell_glsl_quad_add_glsl_snippet (ShellGLSLQuad    *quad,
 | 
			
		||||
                                       ShellSnippetHook  hook,
 | 
			
		||||
                                       const char       *declarations,
 | 
			
		||||
 
 | 
			
		||||
@@ -15,8 +15,6 @@ enum {
 | 
			
		||||
   PROP_WINDOW
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGtkEmbedPrivate ShellGtkEmbedPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellGtkEmbedPrivate
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindow *window;
 | 
			
		||||
@@ -27,7 +25,7 @@ struct _ShellGtkEmbedPrivate
 | 
			
		||||
  guint window_created_handler;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellGtkEmbed, shell_gtk_embed, CLUTTER_TYPE_CLONE);
 | 
			
		||||
G_DEFINE_TYPE (ShellGtkEmbed, shell_gtk_embed, CLUTTER_TYPE_CLONE);
 | 
			
		||||
 | 
			
		||||
static void shell_gtk_embed_set_window (ShellGtkEmbed       *embed,
 | 
			
		||||
                                        ShellEmbeddedWindow *window);
 | 
			
		||||
@@ -42,7 +40,7 @@ shell_gtk_embed_on_window_destroy (GtkWidget     *object,
 | 
			
		||||
static void
 | 
			
		||||
shell_gtk_embed_remove_window_actor (ShellGtkEmbed *embed)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = embed->priv;
 | 
			
		||||
 | 
			
		||||
  if (priv->window_actor)
 | 
			
		||||
    {
 | 
			
		||||
@@ -62,7 +60,7 @@ shell_gtk_embed_window_created_cb (MetaDisplay   *display,
 | 
			
		||||
                                   MetaWindow    *window,
 | 
			
		||||
                                   ShellGtkEmbed *embed)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = embed->priv;
 | 
			
		||||
  Window xwindow = meta_window_get_xwindow (window);
 | 
			
		||||
  GdkWindow *gdk_window = gtk_widget_get_window (GTK_WIDGET (priv->window));
 | 
			
		||||
 | 
			
		||||
@@ -70,6 +68,7 @@ shell_gtk_embed_window_created_cb (MetaDisplay   *display,
 | 
			
		||||
    {
 | 
			
		||||
      ClutterActor *window_actor =
 | 
			
		||||
        CLUTTER_ACTOR (meta_window_get_compositor_private (window));
 | 
			
		||||
      MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
      GCallback remove_cb = G_CALLBACK (shell_gtk_embed_remove_window_actor);
 | 
			
		||||
      cairo_region_t *empty_region;
 | 
			
		||||
 | 
			
		||||
@@ -121,12 +120,11 @@ static void
 | 
			
		||||
shell_gtk_embed_on_window_mapped (GtkWidget     *object,
 | 
			
		||||
                                  ShellGtkEmbed *embed)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
 | 
			
		||||
  /* Listen for new windows so we can detect when Mutter has
 | 
			
		||||
     created a MutterWindow for this window */
 | 
			
		||||
  priv->window_created_handler =
 | 
			
		||||
  embed->priv->window_created_handler =
 | 
			
		||||
    g_signal_connect (display,
 | 
			
		||||
                      "window-created",
 | 
			
		||||
                      G_CALLBACK (shell_gtk_embed_window_created_cb),
 | 
			
		||||
@@ -137,45 +135,44 @@ static void
 | 
			
		||||
shell_gtk_embed_set_window (ShellGtkEmbed       *embed,
 | 
			
		||||
                            ShellEmbeddedWindow *window)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
 | 
			
		||||
  if (priv->window)
 | 
			
		||||
  if (embed->priv->window)
 | 
			
		||||
    {
 | 
			
		||||
      if (priv->window_created_handler)
 | 
			
		||||
      if (embed->priv->window_created_handler)
 | 
			
		||||
        {
 | 
			
		||||
          g_signal_handler_disconnect (display,
 | 
			
		||||
                                       priv->window_created_handler);
 | 
			
		||||
          priv->window_created_handler = 0;
 | 
			
		||||
                                       embed->priv->window_created_handler);
 | 
			
		||||
          embed->priv->window_created_handler = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      shell_gtk_embed_remove_window_actor (embed);
 | 
			
		||||
 | 
			
		||||
      _shell_embedded_window_set_actor (priv->window, NULL);
 | 
			
		||||
      _shell_embedded_window_set_actor (embed->priv->window, NULL);
 | 
			
		||||
 | 
			
		||||
      g_object_unref (priv->window);
 | 
			
		||||
      g_object_unref (embed->priv->window);
 | 
			
		||||
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (priv->window,
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (embed->priv->window,
 | 
			
		||||
                                            (gpointer)shell_gtk_embed_on_window_destroy,
 | 
			
		||||
                                            embed);
 | 
			
		||||
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (priv->window,
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (embed->priv->window,
 | 
			
		||||
                                            (gpointer)shell_gtk_embed_on_window_mapped,
 | 
			
		||||
                                            embed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  priv->window = window;
 | 
			
		||||
  embed->priv->window = window;
 | 
			
		||||
 | 
			
		||||
  if (priv->window)
 | 
			
		||||
  if (embed->priv->window)
 | 
			
		||||
    {
 | 
			
		||||
      g_object_ref (priv->window);
 | 
			
		||||
      g_object_ref (embed->priv->window);
 | 
			
		||||
 | 
			
		||||
      _shell_embedded_window_set_actor (priv->window, embed);
 | 
			
		||||
      _shell_embedded_window_set_actor (embed->priv->window, embed);
 | 
			
		||||
 | 
			
		||||
      g_signal_connect (priv->window, "destroy",
 | 
			
		||||
      g_signal_connect (embed->priv->window, "destroy",
 | 
			
		||||
                        G_CALLBACK (shell_gtk_embed_on_window_destroy), embed);
 | 
			
		||||
 | 
			
		||||
      g_signal_connect (priv->window, "map",
 | 
			
		||||
      g_signal_connect (embed->priv->window, "map",
 | 
			
		||||
                        G_CALLBACK (shell_gtk_embed_on_window_mapped), embed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -209,12 +206,11 @@ shell_gtk_embed_get_property (GObject         *object,
 | 
			
		||||
                              GParamSpec      *pspec)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (object);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
 | 
			
		||||
  switch (prop_id)
 | 
			
		||||
    {
 | 
			
		||||
    case PROP_WINDOW:
 | 
			
		||||
      g_value_set_object (value, priv->window);
 | 
			
		||||
      g_value_set_object (value, embed->priv->window);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
@@ -230,13 +226,12 @@ shell_gtk_embed_get_preferred_width (ClutterActor *actor,
 | 
			
		||||
                                     float        *natural_width_p)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
 | 
			
		||||
  if (priv->window
 | 
			
		||||
      && gtk_widget_get_visible (GTK_WIDGET (priv->window)))
 | 
			
		||||
  if (embed->priv->window
 | 
			
		||||
      && gtk_widget_get_visible (GTK_WIDGET (embed->priv->window)))
 | 
			
		||||
    {
 | 
			
		||||
      GtkRequisition min_req, natural_req;
 | 
			
		||||
      gtk_widget_get_preferred_size (GTK_WIDGET (priv->window), &min_req, &natural_req);
 | 
			
		||||
      gtk_widget_get_preferred_size (GTK_WIDGET (embed->priv->window), &min_req, &natural_req);
 | 
			
		||||
 | 
			
		||||
      *min_width_p = min_req.width;
 | 
			
		||||
      *natural_width_p = natural_req.width;
 | 
			
		||||
@@ -252,13 +247,12 @@ shell_gtk_embed_get_preferred_height (ClutterActor *actor,
 | 
			
		||||
                                      float        *natural_height_p)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
 | 
			
		||||
  if (priv->window
 | 
			
		||||
      && gtk_widget_get_visible (GTK_WIDGET (priv->window)))
 | 
			
		||||
  if (embed->priv->window
 | 
			
		||||
      && gtk_widget_get_visible (GTK_WIDGET (embed->priv->window)))
 | 
			
		||||
    {
 | 
			
		||||
      GtkRequisition min_req, natural_req;
 | 
			
		||||
      gtk_widget_get_preferred_size (GTK_WIDGET (priv->window), &min_req, &natural_req);
 | 
			
		||||
      gtk_widget_get_preferred_size (GTK_WIDGET (embed->priv->window), &min_req, &natural_req);
 | 
			
		||||
 | 
			
		||||
      *min_height_p = min_req.height;
 | 
			
		||||
      *natural_height_p = natural_req.height;
 | 
			
		||||
@@ -273,7 +267,6 @@ shell_gtk_embed_allocate (ClutterActor          *actor,
 | 
			
		||||
                          ClutterAllocationFlags flags)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
  float wx = 0.0, wy = 0.0, x, y, ax, ay;
 | 
			
		||||
 | 
			
		||||
  CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->
 | 
			
		||||
@@ -293,7 +286,7 @@ shell_gtk_embed_allocate (ClutterActor          *actor,
 | 
			
		||||
      actor = clutter_actor_get_parent (actor);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  _shell_embedded_window_allocate (priv->window,
 | 
			
		||||
  _shell_embedded_window_allocate (embed->priv->window,
 | 
			
		||||
                                   (int)(0.5 + wx), (int)(0.5 + wy),
 | 
			
		||||
                                   box->x2 - box->x1,
 | 
			
		||||
                                   box->y2 - box->y1);
 | 
			
		||||
@@ -303,9 +296,8 @@ static void
 | 
			
		||||
shell_gtk_embed_map (ClutterActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
 | 
			
		||||
  _shell_embedded_window_map (priv->window);
 | 
			
		||||
  _shell_embedded_window_map (embed->priv->window);
 | 
			
		||||
 | 
			
		||||
  CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->map (actor);
 | 
			
		||||
}
 | 
			
		||||
@@ -314,9 +306,8 @@ static void
 | 
			
		||||
shell_gtk_embed_unmap (ClutterActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
 | 
			
		||||
  _shell_embedded_window_unmap (priv->window);
 | 
			
		||||
  _shell_embedded_window_unmap (embed->priv->window);
 | 
			
		||||
 | 
			
		||||
  CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->unmap (actor);
 | 
			
		||||
}
 | 
			
		||||
@@ -337,6 +328,8 @@ shell_gtk_embed_class_init (ShellGtkEmbedClass *klass)
 | 
			
		||||
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
  ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (ShellGtkEmbedPrivate));
 | 
			
		||||
 | 
			
		||||
  object_class->get_property = shell_gtk_embed_get_property;
 | 
			
		||||
  object_class->set_property = shell_gtk_embed_set_property;
 | 
			
		||||
  object_class->dispose      = shell_gtk_embed_dispose;
 | 
			
		||||
@@ -359,6 +352,8 @@ shell_gtk_embed_class_init (ShellGtkEmbedClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
shell_gtk_embed_init (ShellGtkEmbed *embed)
 | 
			
		||||
{
 | 
			
		||||
  embed->priv = G_TYPE_INSTANCE_GET_PRIVATE (embed, SHELL_TYPE_GTK_EMBED,
 | 
			
		||||
                                             ShellGtkEmbedPrivate);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
@@ -6,15 +6,30 @@
 | 
			
		||||
 | 
			
		||||
#include "shell-embedded-window.h"
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_GTK_EMBED (shell_gtk_embed_get_type ())
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (ShellGtkEmbed, shell_gtk_embed,
 | 
			
		||||
                          SHELL, GTK_EMBED, ClutterClone)
 | 
			
		||||
#define SHELL_TYPE_GTK_EMBED                 (shell_gtk_embed_get_type ())
 | 
			
		||||
#define SHELL_GTK_EMBED(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_GTK_EMBED, ShellGtkEmbed))
 | 
			
		||||
#define SHELL_GTK_EMBED_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_GTK_EMBED, ShellGtkEmbedClass))
 | 
			
		||||
#define SHELL_IS_GTK_EMBED(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_GTK_EMBED))
 | 
			
		||||
#define SHELL_IS_GTK_EMBED_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GTK_EMBED))
 | 
			
		||||
#define SHELL_GTK_EMBED_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GTK_EMBED, ShellGtkEmbedClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGtkEmbed        ShellGtkEmbed;
 | 
			
		||||
typedef struct _ShellGtkEmbedClass   ShellGtkEmbedClass;
 | 
			
		||||
typedef struct _ShellGtkEmbedPrivate ShellGtkEmbedPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellGtkEmbed
 | 
			
		||||
{
 | 
			
		||||
    ClutterClone parent;
 | 
			
		||||
 | 
			
		||||
    ShellGtkEmbedPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellGtkEmbedClass
 | 
			
		||||
{
 | 
			
		||||
    ClutterCloneClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType shell_gtk_embed_get_type (void) G_GNUC_CONST;
 | 
			
		||||
ClutterActor *shell_gtk_embed_new (ShellEmbeddedWindow *window);
 | 
			
		||||
 | 
			
		||||
#endif /* __SHELL_GTK_EMBED_H__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellPasswordPromptClass    ShellPasswordPromptClass;
 | 
			
		||||
typedef struct _ShellPasswordPromptPrivate  ShellPasswordPromptPrivate;
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
@@ -56,13 +57,19 @@ struct _ShellKeyringPrompt
 | 
			
		||||
  gchar *continue_label;
 | 
			
		||||
  gchar *cancel_label;
 | 
			
		||||
 | 
			
		||||
  GTask *task;
 | 
			
		||||
  GcrPromptReply last_reply;
 | 
			
		||||
  GSimpleAsyncResult *async_result;
 | 
			
		||||
  ClutterText *password_actor;
 | 
			
		||||
  ClutterText *confirm_actor;
 | 
			
		||||
  PromptingMode mode;
 | 
			
		||||
  gboolean shown;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellKeyringPromptClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
} ShellKeyringPromptClass;
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
  PROP_0,
 | 
			
		||||
  PROP_TITLE,
 | 
			
		||||
@@ -281,9 +288,9 @@ shell_keyring_prompt_dispose (GObject *obj)
 | 
			
		||||
  if (self->shown)
 | 
			
		||||
    gcr_prompt_close (GCR_PROMPT (self));
 | 
			
		||||
 | 
			
		||||
  if (self->task)
 | 
			
		||||
  if (self->async_result)
 | 
			
		||||
    shell_keyring_prompt_cancel (self);
 | 
			
		||||
  g_assert (self->task == NULL);
 | 
			
		||||
  g_assert (self->async_result == NULL);
 | 
			
		||||
 | 
			
		||||
  shell_keyring_prompt_set_password_actor (self, NULL);
 | 
			
		||||
  shell_keyring_prompt_set_confirm_actor (self, NULL);
 | 
			
		||||
@@ -413,14 +420,14 @@ shell_keyring_prompt_password_async (GcrPrompt          *prompt,
 | 
			
		||||
  ShellKeyringPrompt *self = SHELL_KEYRING_PROMPT (prompt);
 | 
			
		||||
  GObject *obj;
 | 
			
		||||
 | 
			
		||||
  if (self->task != NULL) {
 | 
			
		||||
  if (self->async_result != NULL) {
 | 
			
		||||
      g_warning ("this prompt can only show one prompt at a time");
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  self->mode = PROMPTING_FOR_PASSWORD;
 | 
			
		||||
  self->task = g_task_new (self, NULL, callback, user_data);
 | 
			
		||||
  g_task_set_source_tag (self->task, shell_keyring_prompt_password_async);
 | 
			
		||||
  self->async_result = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
 | 
			
		||||
                                                  shell_keyring_prompt_password_async);
 | 
			
		||||
 | 
			
		||||
  obj = G_OBJECT (self);
 | 
			
		||||
  g_object_notify (obj, "password-visible");
 | 
			
		||||
@@ -437,11 +444,18 @@ shell_keyring_prompt_password_finish (GcrPrompt    *prompt,
 | 
			
		||||
                                      GAsyncResult *result,
 | 
			
		||||
                                      GError      **error)
 | 
			
		||||
{
 | 
			
		||||
  g_return_val_if_fail (g_task_get_source_object (G_TASK (result)) == prompt, NULL);
 | 
			
		||||
  g_return_val_if_fail (g_async_result_is_tagged (result,
 | 
			
		||||
  ShellKeyringPrompt *self = SHELL_KEYRING_PROMPT (prompt);
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (prompt),
 | 
			
		||||
                        shell_keyring_prompt_password_async), NULL);
 | 
			
		||||
 | 
			
		||||
  return g_task_propagate_pointer (G_TASK (result), error);
 | 
			
		||||
  if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  if (self->last_reply == GCR_PROMPT_REPLY_CONTINUE)
 | 
			
		||||
    return clutter_text_get_text (self->password_actor);
 | 
			
		||||
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -453,14 +467,14 @@ shell_keyring_prompt_confirm_async (GcrPrompt          *prompt,
 | 
			
		||||
  ShellKeyringPrompt *self = SHELL_KEYRING_PROMPT (prompt);
 | 
			
		||||
  GObject *obj;
 | 
			
		||||
 | 
			
		||||
  if (self->task != NULL) {
 | 
			
		||||
  if (self->async_result != NULL) {
 | 
			
		||||
      g_warning ("this prompt is already prompting");
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  self->mode = PROMPTING_FOR_CONFIRM;
 | 
			
		||||
  self->task = g_task_new (self, NULL, callback, user_data);
 | 
			
		||||
  g_task_set_source_tag (self->task, shell_keyring_prompt_confirm_async);
 | 
			
		||||
  self->async_result = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
 | 
			
		||||
                                                  shell_keyring_prompt_confirm_async);
 | 
			
		||||
 | 
			
		||||
  obj = G_OBJECT (self);
 | 
			
		||||
  g_object_notify (obj, "password-visible");
 | 
			
		||||
@@ -477,16 +491,15 @@ shell_keyring_prompt_confirm_finish (GcrPrompt    *prompt,
 | 
			
		||||
                                     GAsyncResult *result,
 | 
			
		||||
                                     GError      **error)
 | 
			
		||||
{
 | 
			
		||||
  GTask *task = G_TASK (result);
 | 
			
		||||
  gssize res;
 | 
			
		||||
  ShellKeyringPrompt *self = SHELL_KEYRING_PROMPT (prompt);
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (g_task_get_source_object (task) == prompt,
 | 
			
		||||
                        GCR_PROMPT_REPLY_CANCEL);
 | 
			
		||||
  g_return_val_if_fail (g_async_result_is_tagged (result,
 | 
			
		||||
  g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (prompt),
 | 
			
		||||
                        shell_keyring_prompt_confirm_async), GCR_PROMPT_REPLY_CANCEL);
 | 
			
		||||
 | 
			
		||||
  res = g_task_propagate_int (task, error);
 | 
			
		||||
  return res == -1 ? GCR_PROMPT_REPLY_CANCEL : (GcrPromptReply)res;
 | 
			
		||||
  if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 | 
			
		||||
    return GCR_PROMPT_REPLY_CANCEL;
 | 
			
		||||
 | 
			
		||||
  return self->last_reply;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -705,20 +718,19 @@ shell_keyring_prompt_set_confirm_actor (ShellKeyringPrompt *self,
 | 
			
		||||
gboolean
 | 
			
		||||
shell_keyring_prompt_complete (ShellKeyringPrompt *self)
 | 
			
		||||
{
 | 
			
		||||
  GTask *res;
 | 
			
		||||
  PromptingMode mode;
 | 
			
		||||
  GSimpleAsyncResult *res;
 | 
			
		||||
  const gchar *password;
 | 
			
		||||
  const gchar *confirm;
 | 
			
		||||
  const gchar *env;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (SHELL_IS_KEYRING_PROMPT (self), FALSE);
 | 
			
		||||
  g_return_val_if_fail (self->mode != PROMPTING_NONE, FALSE);
 | 
			
		||||
  g_return_val_if_fail (self->task != NULL, FALSE);
 | 
			
		||||
 | 
			
		||||
  password = clutter_text_get_text (self->password_actor);
 | 
			
		||||
  g_return_val_if_fail (self->async_result != NULL, FALSE);
 | 
			
		||||
 | 
			
		||||
  if (self->mode == PROMPTING_FOR_PASSWORD)
 | 
			
		||||
    {
 | 
			
		||||
      password = clutter_text_get_text (self->password_actor);
 | 
			
		||||
 | 
			
		||||
      /* Is it a new password? */
 | 
			
		||||
      if (self->password_new)
 | 
			
		||||
        {
 | 
			
		||||
@@ -744,15 +756,13 @@ shell_keyring_prompt_complete (ShellKeyringPrompt *self)
 | 
			
		||||
      g_object_notify (G_OBJECT (self), "password-strength");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  res = self->task;
 | 
			
		||||
  mode = self->mode;
 | 
			
		||||
  self->task = NULL;
 | 
			
		||||
  self->last_reply = GCR_PROMPT_REPLY_CONTINUE;
 | 
			
		||||
 | 
			
		||||
  res = self->async_result;
 | 
			
		||||
  self->async_result = NULL;
 | 
			
		||||
  self->mode = PROMPTING_NONE;
 | 
			
		||||
 | 
			
		||||
  if (mode == PROMPTING_FOR_CONFIRM)
 | 
			
		||||
    g_task_return_int (res, (gssize)GCR_PROMPT_REPLY_CONTINUE);
 | 
			
		||||
  else
 | 
			
		||||
    g_task_return_pointer (res, (gpointer)password, NULL);
 | 
			
		||||
  g_simple_async_result_complete (res);
 | 
			
		||||
  g_object_unref (res);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
@@ -767,8 +777,7 @@ shell_keyring_prompt_complete (ShellKeyringPrompt *self)
 | 
			
		||||
void
 | 
			
		||||
shell_keyring_prompt_cancel (ShellKeyringPrompt *self)
 | 
			
		||||
{
 | 
			
		||||
  GTask *res;
 | 
			
		||||
  PromptingMode mode;
 | 
			
		||||
  GSimpleAsyncResult *res;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (SHELL_IS_KEYRING_PROMPT (self));
 | 
			
		||||
 | 
			
		||||
@@ -783,16 +792,13 @@ shell_keyring_prompt_cancel (ShellKeyringPrompt *self)
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (self->task != NULL);
 | 
			
		||||
  g_return_if_fail (self->async_result != NULL);
 | 
			
		||||
  self->last_reply = GCR_PROMPT_REPLY_CANCEL;
 | 
			
		||||
 | 
			
		||||
  res = self->task;
 | 
			
		||||
  mode = self->mode;
 | 
			
		||||
  self->task = NULL;
 | 
			
		||||
  res = self->async_result;
 | 
			
		||||
  self->async_result = NULL;
 | 
			
		||||
  self->mode = PROMPTING_NONE;
 | 
			
		||||
 | 
			
		||||
  if (mode == PROMPTING_FOR_CONFIRM)
 | 
			
		||||
    g_task_return_int (res, (gssize) GCR_PROMPT_REPLY_CANCEL);
 | 
			
		||||
  else
 | 
			
		||||
    g_task_return_pointer (res, NULL, NULL);
 | 
			
		||||
  g_simple_async_result_complete_in_idle (res);
 | 
			
		||||
  g_object_unref (res);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -32,9 +32,11 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellKeyringPrompt         ShellKeyringPrompt;
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_KEYRING_PROMPT (shell_keyring_prompt_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellKeyringPrompt, shell_keyring_prompt,
 | 
			
		||||
                      SHELL, KEYRING_PROMPT, GObject)
 | 
			
		||||
#define SHELL_TYPE_KEYRING_PROMPT                  (shell_keyring_prompt_get_type ())
 | 
			
		||||
#define SHELL_KEYRING_PROMPT(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_KEYRING_PROMPT, ShellKeyringPrompt))
 | 
			
		||||
#define SHELL_IS_KEYRING_PROMPT(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_KEYRING_PROMPT))
 | 
			
		||||
 | 
			
		||||
GType                shell_keyring_prompt_get_type             (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
ShellKeyringPrompt * shell_keyring_prompt_new                  (void);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,7 @@
 | 
			
		||||
 * the GPid array to JS).
 | 
			
		||||
 * See https://bugzilla.gnome.org/show_bug.cgi?id=645978
 | 
			
		||||
 */
 | 
			
		||||
G_DEFINE_TYPE (ShellMountOperation, shell_mount_operation, G_TYPE_MOUNT_OPERATION);
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
  SHOW_PROCESSES_2,
 | 
			
		||||
@@ -41,27 +42,17 @@ enum {
 | 
			
		||||
 | 
			
		||||
static guint signals[NUM_SIGNALS] = { 0, };
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellMountOperationPrivate  ShellMountOperationPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellMountOperation
 | 
			
		||||
{
 | 
			
		||||
  GMountOperation parent_instance;
 | 
			
		||||
 | 
			
		||||
  ShellMountOperationPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellMountOperationPrivate {
 | 
			
		||||
  GArray *pids;
 | 
			
		||||
  gchar **choices;
 | 
			
		||||
  gchar *message;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellMountOperation, shell_mount_operation, G_TYPE_MOUNT_OPERATION);
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_mount_operation_init (ShellMountOperation *self)
 | 
			
		||||
{
 | 
			
		||||
  self->priv = shell_mount_operation_get_instance_private (self);
 | 
			
		||||
  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, SHELL_TYPE_MOUNT_OPERATION,
 | 
			
		||||
                                            ShellMountOperationPrivate);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -144,6 +135,8 @@ shell_mount_operation_class_init (ShellMountOperationClass *klass)
 | 
			
		||||
                  G_SIGNAL_RUN_LAST,
 | 
			
		||||
                  0, NULL, NULL, NULL,
 | 
			
		||||
                  G_TYPE_NONE, 0);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (ShellMountOperationPrivate));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GMountOperation *
 | 
			
		||||
 
 | 
			
		||||
@@ -26,10 +26,31 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_MOUNT_OPERATION (shell_mount_operation_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellMountOperation, shell_mount_operation,
 | 
			
		||||
                      SHELL, MOUNT_OPERATION, GMountOperation)
 | 
			
		||||
#define SHELL_TYPE_MOUNT_OPERATION         (shell_mount_operation_get_type ())
 | 
			
		||||
#define SHELL_MOUNT_OPERATION(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), SHELL_TYPE_MOUNT_OPERATION, ShellMountOperation))
 | 
			
		||||
#define SHELL_MOUNT_OPERATION_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), SHELL_TYPE_MOUNT_OPERATION, ShellMountOperationClass))
 | 
			
		||||
#define SHELL_IS_MOUNT_OPERATION(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHELL_TYPE_MOUNT_OPERATION))
 | 
			
		||||
#define SHELL_IS_MOUNT_OPERATION_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), SHELL_TYPE_MOUNT_OPERATION))
 | 
			
		||||
#define SHELL_MOUNT_OPERATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SHELL_TYPE_MOUNT_OPERATION, ShellMountOperationClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellMountOperation         ShellMountOperation;
 | 
			
		||||
typedef struct _ShellMountOperationClass    ShellMountOperationClass;
 | 
			
		||||
typedef struct _ShellMountOperationPrivate  ShellMountOperationPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellMountOperation
 | 
			
		||||
{
 | 
			
		||||
  GMountOperation parent_instance;
 | 
			
		||||
 | 
			
		||||
  ShellMountOperationPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellMountOperationClass
 | 
			
		||||
{
 | 
			
		||||
  GMountOperationClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GType            shell_mount_operation_get_type   (void);
 | 
			
		||||
GMountOperation *shell_mount_operation_new        (void);
 | 
			
		||||
 | 
			
		||||
GArray * shell_mount_operation_get_show_processes_pids (ShellMountOperation *self);
 | 
			
		||||
 
 | 
			
		||||
@@ -60,7 +60,7 @@ struct _ShellNetworkAgentPrivate {
 | 
			
		||||
  GHashTable *requests;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellNetworkAgent, shell_network_agent, NM_TYPE_SECRET_AGENT)
 | 
			
		||||
G_DEFINE_TYPE (ShellNetworkAgent, shell_network_agent, NM_TYPE_SECRET_AGENT)
 | 
			
		||||
 | 
			
		||||
static const SecretSchema network_agent_schema = {
 | 
			
		||||
    "org.freedesktop.NetworkManager.Connection",
 | 
			
		||||
@@ -114,7 +114,8 @@ shell_network_agent_init (ShellNetworkAgent *agent)
 | 
			
		||||
{
 | 
			
		||||
  ShellNetworkAgentPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  priv = agent->priv = shell_network_agent_get_instance_private (agent);
 | 
			
		||||
  priv = agent->priv = G_TYPE_INSTANCE_GET_PRIVATE (agent, SHELL_TYPE_NETWORK_AGENT, ShellNetworkAgentPrivate);
 | 
			
		||||
 | 
			
		||||
  priv->requests = g_hash_table_new_full (g_str_hash, g_str_equal,
 | 
			
		||||
					  g_free, shell_agent_request_free);
 | 
			
		||||
}
 | 
			
		||||
@@ -852,4 +853,6 @@ shell_network_agent_class_init (ShellNetworkAgentClass *klass)
 | 
			
		||||
                                                 G_TYPE_NONE,
 | 
			
		||||
                                                 1, /* n_params */
 | 
			
		||||
                                                 G_TYPE_STRING);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (ShellNetworkAgentPrivate));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -125,9 +125,8 @@ on_window_draw (GtkWidget  *window,
 | 
			
		||||
                WindowInfo *info)
 | 
			
		||||
{
 | 
			
		||||
  cairo_rectangle_int_t allocation;
 | 
			
		||||
  double x_offset, y_offset;
 | 
			
		||||
 | 
			
		||||
  gtk_widget_get_allocation (window, &allocation);
 | 
			
		||||
  double x_offset, y_offset;
 | 
			
		||||
 | 
			
		||||
  /* We draw an arbitrary pattern of red lines near the border of the
 | 
			
		||||
   * window to make it more clear than empty windows if something
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user