Merge lp:~tkluck/ubuntu/oneiric/gnome-shell/fix-bluetooth-device-switch into lp:ubuntu/oneiric/gnome-shell

Proposed by Timo Kluck
Status: Rejected
Rejected by: Colin Watson
Proposed branch: lp:~tkluck/ubuntu/oneiric/gnome-shell/fix-bluetooth-device-switch
Merge into: lp:ubuntu/oneiric/gnome-shell
Diff against target: 31109 lines (+10705/-4907)
173 files modified
.pc/01_favorite_apps.patch/data/org.gnome.shell.gschema.xml.in (+0/-136)
.pc/03_remove-glx-dependency-on-armel.patch/configure (+11/-11)
.pc/03_remove-glx-dependency-on-armel.patch/configure.ac (+2/-2)
.pc/04_bluetooth-fix-connection-from-gs-menu.patch/js/ui/status/bluetooth.js (+508/-0)
.pc/applied-patches (+1/-1)
NEWS (+66/-0)
configure (+11/-11)
configure.ac (+2/-2)
data/org.gnome.shell.gschema.xml.in (+9/-1)
data/theme/gdm.css (+15/-1)
data/theme/gnome-shell.css (+7/-9)
debian/changelog (+60/-0)
debian/control (+3/-3)
debian/control.in (+3/-3)
debian/gnome-shell.gsettings-override (+3/-0)
debian/patches/01_favorite_apps.patch (+0/-16)
debian/patches/04_bluetooth-fix-connection-from-gs-menu.patch (+31/-0)
debian/patches/series (+1/-1)
js/Makefile.am (+1/-0)
js/Makefile.in (+1/-0)
js/gdm/batch.js (+2/-2)
js/gdm/consoleKit.js (+1/-1)
js/gdm/fingerprint.js (+1/-1)
js/gdm/loginDialog.js (+44/-10)
js/gdm/powerMenu.js (+2/-2)
js/misc/config.js (+4/-3)
js/misc/config.js.in (+2/-1)
js/misc/docInfo.js (+1/-1)
js/misc/fileUtils.js (+2/-0)
js/misc/format.js (+1/-1)
js/misc/gnomeSession.js (+3/-3)
js/misc/history.js (+1/-1)
js/misc/modemManager.js (+1/-1)
js/misc/params.js (+1/-1)
js/misc/screenSaver.js (+1/-1)
js/misc/util.js (+1/-1)
js/perf/core.js (+1/-1)
js/ui/altTab.js (+47/-32)
js/ui/appDisplay.js (+1/-1)
js/ui/appFavorites.js (+1/-1)
js/ui/automountManager.js (+6/-2)
js/ui/autorunManager.js (+2/-2)
js/ui/boxpointer.js (+26/-12)
js/ui/calendar.js (+1/-1)
js/ui/contactDisplay.js (+9/-3)
js/ui/ctrlAltTab.js (+1/-1)
js/ui/dash.js (+64/-48)
js/ui/dateMenu.js (+1/-1)
js/ui/dnd.js (+1/-1)
js/ui/docDisplay.js (+1/-1)
js/ui/endSessionDialog.js (+2/-2)
js/ui/environment.js (+1/-1)
js/ui/extensionSystem.js (+3/-3)
js/ui/iconGrid.js (+1/-1)
js/ui/keyboard.js (+44/-14)
js/ui/layout.js (+24/-8)
js/ui/lightbox.js (+1/-1)
js/ui/link.js (+1/-1)
js/ui/lookingGlass.js (+11/-13)
js/ui/magnifier.js (+1/-1)
js/ui/magnifierDBus.js (+1/-1)
js/ui/main.js (+3/-5)
js/ui/messageTray.js (+5/-3)
js/ui/modalDialog.js (+1/-1)
js/ui/networkAgent.js (+9/-26)
js/ui/notificationDaemon.js (+17/-2)
js/ui/overview.js (+1/-1)
js/ui/panel.js (+1/-1)
js/ui/panelMenu.js (+1/-1)
js/ui/placeDisplay.js (+1/-1)
js/ui/polkitAuthenticationAgent.js (+4/-2)
js/ui/popupMenu.js (+8/-4)
js/ui/runDialog.js (+3/-1)
js/ui/scripting.js (+1/-1)
js/ui/search.js (+1/-1)
js/ui/searchDisplay.js (+1/-1)
js/ui/shellDBus.js (+1/-1)
js/ui/shellEntry.js (+173/-0)
js/ui/shellMountOperation.js (+1/-1)
js/ui/status/accessibility.js (+1/-1)
js/ui/status/bluetooth.js (+3/-2)
js/ui/status/keyboard.js (+1/-1)
js/ui/status/network.js (+1/-1)
js/ui/status/power.js (+5/-5)
js/ui/status/volume.js (+1/-1)
js/ui/statusIconDispatcher.js (+1/-1)
js/ui/telepathyClient.js (+13/-8)
js/ui/tweener.js (+1/-1)
js/ui/userMenu.js (+51/-11)
js/ui/viewSelector.js (+7/-3)
js/ui/windowAttentionHandler.js (+9/-30)
js/ui/windowManager.js (+18/-10)
js/ui/workspace.js (+27/-5)
js/ui/workspaceSwitcherPopup.js (+1/-1)
js/ui/workspaceThumbnail.js (+1/-1)
js/ui/workspacesView.js (+2/-70)
js/ui/xdndHandler.js (+1/-1)
po/LINGUAS (+2/-0)
po/POTFILES.in (+1/-1)
po/ast.po (+1630/-0)
po/bg.po (+97/-88)
po/ca.po (+75/-64)
po/ca@valencia.po (+80/-68)
po/de.po (+158/-131)
po/en_GB.po (+283/-239)
po/eo.po (+115/-105)
po/es.po (+109/-94)
po/fa.po (+174/-174)
po/fr.po (+88/-88)
po/ga.po (+743/-310)
po/gl.po (+157/-133)
po/hu.po (+157/-136)
po/it.po (+94/-84)
po/ja.po (+133/-131)
po/ko.po (+74/-69)
po/ku.po (+1575/-0)
po/lt.po (+222/-184)
po/lv.po (+94/-80)
po/nl.po (+801/-355)
po/pl.po (+143/-131)
po/pt_BR.po (+110/-109)
po/ru.po (+175/-211)
po/sl.po (+78/-68)
po/sr.po (+91/-90)
po/sr@latin.po (+91/-90)
po/sv.po (+81/-74)
po/ta.po (+121/-117)
po/te.po (+73/-108)
po/uk.po (+754/-316)
po/vi.po (+205/-215)
po/zh_CN.po (+102/-100)
src/hotplug-sniffer/hotplug-mimetypes.h (+2/-0)
src/hotplug-sniffer/hotplug-sniffer.c (+1/-0)
src/hotplug-sniffer/shell-mime-sniffer.c (+1/-0)
src/hotplug-sniffer/shell-mime-sniffer.h (+1/-0)
src/shell-a11y.c (+2/-2)
src/shell-a11y.h (+2/-2)
src/shell-app-private.h (+0/-2)
src/shell-app-system.c (+16/-26)
src/shell-app-usage.c (+39/-0)
src/shell-app-usage.h (+4/-0)
src/shell-app.c (+12/-21)
src/shell-contact-system.c (+173/-39)
src/shell-contact-system.h (+3/-0)
src/shell-global.c (+4/-0)
src/shell-mount-operation.c (+1/-0)
src/shell-mount-operation.h (+1/-0)
src/shell-recorder.c (+3/-3)
src/shell-tp-client.c (+2/-0)
src/shell-tp-client.h (+2/-0)
src/shell-util.c (+1/-17)
src/shell-util.h (+0/-2)
src/st/st-entry.c (+79/-3)
src/st/st-texture-cache.c (+13/-5)
src/st/st-theme-node-drawing.c (+8/-18)
tests/interactive/border-radius.js (+1/-1)
tests/interactive/border-width.js (+1/-1)
tests/interactive/borders.js (+1/-1)
tests/interactive/box-layout.js (+1/-1)
tests/interactive/box-shadows.js (+1/-1)
tests/interactive/calendar.js (+1/-1)
tests/interactive/css-fonts.js (+1/-1)
tests/interactive/entry.js (+1/-1)
tests/interactive/icons.js (+1/-1)
tests/interactive/inline-style.js (+1/-1)
tests/interactive/scroll-view-sizing.js (+1/-1)
tests/interactive/scrolling.js (+1/-1)
tests/interactive/table.js (+1/-1)
tests/interactive/transitions.js (+1/-1)
tests/testcommon/ui.js (+1/-1)
tests/unit/format.js (+1/-1)
tests/unit/markup.js (+1/-1)
tests/unit/url.js (+1/-1)
To merge this branch: bzr merge lp:~tkluck/ubuntu/oneiric/gnome-shell/fix-bluetooth-device-switch
Reviewer Review Type Date Requested Status
Jeremy Bícha Needs Fixing
Ubuntu branches Pending
Review via email: mp+89040@code.launchpad.net

Description of the change

This fixes #918208:

"""
The device connection switches in the gnome-shell bluetooth menu can be toggled but don't work: their status is independent from the actual connection status.

This is a known bug with a trivial patch, and it has already been fixed in master:
https://bugzilla.gnome.org/show_bug.cgi?id=662384

It would be nice if the trivial fix could be incorporated into the Ubuntu's 3.2.1 package.
"""

To post a comment you must log in.
Revision history for this message
Jeremy Bícha (jbicha) wrote :

Hi, bugs need to be fixed in the current development release (precise) before being proposed against a stable release. Could you propose a merge with https://code.launchpad.net/~ubuntu-desktop/gnome-shell/ubuntu instead?

review: Needs Fixing
Revision history for this message
Colin Watson (cjwatson) wrote :

Rejected by request of seb128.

Revision history for this message
Sebastien Bacher (seb128) wrote :

Rejecting the merge request since it was adressed to the wrong serie (oneiric rather than oneiric-proposed) and the fix seems to have been uploaded since according to the bug

Unmerged revisions

46. By Timo Kluck

Fix bluetooth device connecting from gnome-shell menu

45. By Evan Broder

No-change rebuild to fix up dependencies (LP: #903382)

44. By Jeremy Bícha

[ Jeremy Bicha ]
* New upstream release (LP: #878672).
  - Restore the IM state on startup - if you were available in when you
    logged out, then you'll be set available again when you log in.
  - Improve searching for contacts in the overview: search more fields,
    show a more meaningful name, require that all search terms match.
  - Improve search for applications in the overview: take frequency into
    account and tweak match algorithm
  - Remove the "Show Password" switch from network password prompts, and
    move the functionality to a right-click menu
  - Add context menus with Cut/Paste options to most entries
  - Display a caps-lock warning in password entries
  - Show the state of installed extensions in Looking Glass
  - Load user extensions after system ones
  - Fix problem with many applications showing extra-large icons in
    notifications
  - Fix a problem where alt-Tab had trouble tracking the current
    application with certain applications such as Emacs.
  - Fix confusion between different users avatar images
  - Remove behavior where you could switch workspaces by bumping
    a dragged window in the overview against a screen edge; it was
    leftover and just confusing.
  - Fix long-standing bug where the Dash in the overview could end up
    mis-sized and run off the screen
  - Fix automatic launching of applications when media is inserted
  - Fix handling of vertically stacked monitors with NVIDIA drivers
  - Translation marking fixes
  - Code cleanups and warning fixes
  - Small memory leak fixes
  - On screen keyboard:
    + Show the keyboard immediately when it's turned enabled
    + Fix problem where keyboard would hide when starting to type
      in the search entry
    + Fix problem with keyboard hiding when selected accented characters
  - Misc bug fixes
* debian/control.in:
  - Bump minimum mutter to 3.2.1
  - Drop dependency against libdconf0 and let dh_installgsettings set
    the right dependencies.
  - Depends on cups-pk-helper instead of recommends to ensure that
    the printer applet works (LP: #877367)
* 01_favorite_apps.patch: dropped, replaced by override file.
* New upstream release.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== removed directory '.pc/01_favorite_apps.patch'
=== removed directory '.pc/01_favorite_apps.patch/data'
=== removed file '.pc/01_favorite_apps.patch/data/org.gnome.shell.gschema.xml.in'
--- .pc/01_favorite_apps.patch/data/org.gnome.shell.gschema.xml.in 2011-09-22 08:50:45 +0000
+++ .pc/01_favorite_apps.patch/data/org.gnome.shell.gschema.xml.in 1970-01-01 00:00:00 +0000
@@ -1,136 +0,0 @@
1<schemalist>
2 <schema id="org.gnome.shell" path="/org/gnome/shell/"
3 gettext-domain="@GETTEXT_PACKAGE@">
4 <key name="development-tools" type="b">
5 <default>true</default>
6 <_summary>
7 Enable internal tools useful for developers and testers from Alt-F2
8 </_summary>
9 <_description>
10 Allows access to internal debugging and monitoring tools
11 using the Alt-F2 dialog.
12 </_description>
13 </key>
14 <key name="enabled-extensions" type="as">
15 <default>[]</default>
16 <_summary>Uuids of extensions to enable</_summary>
17 <_description>
18 GNOME Shell extensions have a uuid property; this key lists extensions
19 which should be loaded. disabled-extensions overrides this setting for
20 extensions that appear in both lists.
21 </_description>
22 </key>
23 <key name="enable-app-monitoring" type="b">
24 <default>true</default>
25 <_summary>Whether to collect stats about applications usage</_summary>
26 <_description>
27 The shell normally monitors active applications in order to present
28 the most used ones (e.g. in launchers). While this data will be
29 kept private, you may want to disable this for privacy reasons.
30 Please note that doing so won't remove already saved data.
31 </_description>
32 </key>
33 <key name="favorite-apps" type="as">
34 <default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop' ]</default>
35 <_summary>List of desktop file IDs for favorite applications</_summary>
36 <_description>
37 The applications corresponding to these identifiers
38 will be displayed in the favorites area.
39 </_description>
40 </key>
41 <key name="disabled-open-search-providers" type="as">
42 <default>[]</default>
43 <_summary>disabled OpenSearch providers</_summary>
44 </key>
45 <key name="command-history" type="as">
46 <default>[]</default>
47 <_summary>History for command (Alt-F2) dialog</_summary>
48 </key>
49 <key name="looking-glass-history" type="as">
50 <default>[]</default>
51 <_summary>History for the looking glass dialog</_summary>
52 </key>
53 <child name="clock" schema="org.gnome.shell.clock"/>
54 <child name="calendar" schema="org.gnome.shell.calendar"/>
55 <child name="recorder" schema="org.gnome.shell.recorder"/>
56 <child name="keyboard" schema="org.gnome.shell.keyboard"/>
57 </schema>
58
59 <schema id="org.gnome.shell.calendar" path="/org/gnome/shell/calendar/"
60 gettext-domain="@GETTEXT_PACKAGE@">
61 <key name="show-weekdate" type="b">
62 <default>false</default>
63 <_summary>Show the week date in the calendar</_summary>
64 <_description>
65 If true, display the ISO week date in the calendar.
66 </_description>
67 </key>
68 </schema>
69
70 <schema id="org.gnome.shell.keyboard" path="/org/gnome/shell/keyboard/"
71 gettext-domain="@GETTEXT_PACKAGE@">
72 <key name="keyboard-type" type="s">
73 <default>'touch'</default>
74 <_summary>Which keyboard to use</_summary>
75 <_description>
76 The type of keyboard to use.
77 </_description>
78 </key>
79 </schema>
80
81 <schema id="org.gnome.shell.clock" path="/org/gnome/shell/clock/"
82 gettext-domain="@GETTEXT_PACKAGE@">
83 <key name="show-seconds" type="b">
84 <default>false</default>
85 <_summary>Show time with seconds</_summary>
86 <_description>
87 If true, display seconds in time.
88 </_description>
89 </key>
90 <key name="show-date" type="b">
91 <default>false</default>
92 <_summary>Show date in clock</_summary>
93 <_description>
94 If true, display date in the clock, in addition to time.
95 </_description>
96 </key>
97 </schema>
98
99 <schema id="org.gnome.shell.recorder" path="/org/gnome/shell/recorder/"
100 gettext-domain="@GETTEXT_PACKAGE@">
101 <key name="framerate" type="i">
102 <default>15</default>
103 <_summary>Framerate used for recording screencasts.</_summary>
104 <_description>
105 The framerate of the resulting screencast recordered
106 by GNOME Shell's screencast recorder in frames-per-second.
107 </_description>
108 </key>
109 <key name="pipeline" type="s">
110 <default>''</default>
111 <_summary>The gstreamer pipeline used to encode the screencast</_summary>
112 <_description>
113 Sets the GStreamer pipeline used to encode recordings.
114 It follows the syntax used for gst-launch. The pipeline should have
115 an unconnected sink pad where the recorded video is recorded. It will
116 normally have a unconnected source pad; output from that pad
117 will be written into the output file. However the pipeline can also
118 take care of its own output - this might be used to send the output
119 to an icecast server via shout2send or similar. When unset or set
120 to an empty value, the default pipeline will be used. This is currently
121 'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux'
122 and records to WEBM using the VP8 codec. %T is used as a placeholder
123 for a guess at the optimal thread count on the system.
124 </_description>
125 </key>
126 <key name="file-extension" type="s">
127 <default>'webm'</default>
128 <_summary>File extension used for storing the screencast</_summary>
129 <_description>
130 The filename for recorded screencasts will be a unique filename
131 based on the current date, and use this extension. It should be
132 changed when recording to a different container format.
133 </_description>
134 </key>
135 </schema>
136</schemalist>
1370
=== modified file '.pc/03_remove-glx-dependency-on-armel.patch/configure'
--- .pc/03_remove-glx-dependency-on-armel.patch/configure 2011-09-28 06:48:58 +0000
+++ .pc/03_remove-glx-dependency-on-armel.patch/configure 2012-01-18 14:13:28 +0000
@@ -1,6 +1,6 @@
1#! /bin/sh1#! /bin/sh
2# Guess values for system-dependent variables and create Makefiles.2# Guess values for system-dependent variables and create Makefiles.
3# Generated by GNU Autoconf 2.68 for gnome-shell 3.2.0.3# Generated by GNU Autoconf 2.68 for gnome-shell 3.2.1.
4#4#
5# Report bugs to <https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell>.5# Report bugs to <https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell>.
6#6#
@@ -571,8 +571,8 @@
571# Identity of this package.571# Identity of this package.
572PACKAGE_NAME='gnome-shell'572PACKAGE_NAME='gnome-shell'
573PACKAGE_TARNAME='gnome-shell'573PACKAGE_TARNAME='gnome-shell'
574PACKAGE_VERSION='3.2.0'574PACKAGE_VERSION='3.2.1'
575PACKAGE_STRING='gnome-shell 3.2.0'575PACKAGE_STRING='gnome-shell 3.2.1'
576PACKAGE_BUGREPORT='https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell'576PACKAGE_BUGREPORT='https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell'
577PACKAGE_URL=''577PACKAGE_URL=''
578578
@@ -1453,7 +1453,7 @@
1453 # Omit some internal or obsolete options to make the list less imposing.1453 # Omit some internal or obsolete options to make the list less imposing.
1454 # This message is too long to be a string in the A/UX 3.1 sh.1454 # This message is too long to be a string in the A/UX 3.1 sh.
1455 cat <<_ACEOF1455 cat <<_ACEOF
1456\`configure' configures gnome-shell 3.2.0 to adapt to many kinds of systems.1456\`configure' configures gnome-shell 3.2.1 to adapt to many kinds of systems.
14571457
1458Usage: $0 [OPTION]... [VAR=VALUE]...1458Usage: $0 [OPTION]... [VAR=VALUE]...
14591459
@@ -1523,7 +1523,7 @@
15231523
1524if test -n "$ac_init_help"; then1524if test -n "$ac_init_help"; then
1525 case $ac_init_help in1525 case $ac_init_help in
1526 short | recursive ) echo "Configuration of gnome-shell 3.2.0:";;1526 short | recursive ) echo "Configuration of gnome-shell 3.2.1:";;
1527 esac1527 esac
1528 cat <<\_ACEOF1528 cat <<\_ACEOF
15291529
@@ -1698,7 +1698,7 @@
1698test -n "$ac_init_help" && exit $ac_status1698test -n "$ac_init_help" && exit $ac_status
1699if $ac_init_version; then1699if $ac_init_version; then
1700 cat <<\_ACEOF1700 cat <<\_ACEOF
1701gnome-shell configure 3.2.01701gnome-shell configure 3.2.1
1702generated by GNU Autoconf 2.681702generated by GNU Autoconf 2.68
17031703
1704Copyright (C) 2010 Free Software Foundation, Inc.1704Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2067,7 +2067,7 @@
2067This file contains any messages produced by compilers while2067This file contains any messages produced by compilers while
2068running configure, to aid debugging if configure makes a mistake.2068running configure, to aid debugging if configure makes a mistake.
20692069
2070It was created by gnome-shell $as_me 3.2.0, which was2070It was created by gnome-shell $as_me 3.2.1, which was
2071generated by GNU Autoconf 2.68. Invocation command line was2071generated by GNU Autoconf 2.68. Invocation command line was
20722072
2073 $ $0 $@2073 $ $0 $@
@@ -2894,7 +2894,7 @@
28942894
2895# Define the identity of the package.2895# Define the identity of the package.
2896 PACKAGE='gnome-shell'2896 PACKAGE='gnome-shell'
2897 VERSION='3.2.0'2897 VERSION='3.2.1'
28982898
28992899
2900cat >>confdefs.h <<_ACEOF2900cat >>confdefs.h <<_ACEOF
@@ -14948,7 +14948,7 @@
14948CLUTTER_MIN_VERSION=1.7.514948CLUTTER_MIN_VERSION=1.7.5
14949GOBJECT_INTROSPECTION_MIN_VERSION=0.10.114949GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
14950GJS_MIN_VERSION=1.29.1814950GJS_MIN_VERSION=1.29.18
14951MUTTER_MIN_VERSION=3.0.014951MUTTER_MIN_VERSION=3.2.1
14952FOLKS_MIN_VERSION=0.5.214952FOLKS_MIN_VERSION=0.5.2
14953GTK_MIN_VERSION=3.0.014953GTK_MIN_VERSION=3.0.0
14954GIO_MIN_VERSION=2.29.1014954GIO_MIN_VERSION=2.29.10
@@ -17259,7 +17259,7 @@
17259# report actual input values of CONFIG_FILES etc. instead of their17259# report actual input values of CONFIG_FILES etc. instead of their
17260# values after options handling.17260# values after options handling.
17261ac_log="17261ac_log="
17262This file was extended by gnome-shell $as_me 3.2.0, which was17262This file was extended by gnome-shell $as_me 3.2.1, which was
17263generated by GNU Autoconf 2.68. Invocation command line was17263generated by GNU Autoconf 2.68. Invocation command line was
1726417264
17265 CONFIG_FILES = $CONFIG_FILES17265 CONFIG_FILES = $CONFIG_FILES
@@ -17325,7 +17325,7 @@
17325cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=117325cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
17326ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"17326ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
17327ac_cs_version="\\17327ac_cs_version="\\
17328gnome-shell config.status 3.2.017328gnome-shell config.status 3.2.1
17329configured by $0, generated by GNU Autoconf 2.68,17329configured by $0, generated by GNU Autoconf 2.68,
17330 with options \\"\$ac_cs_config\\"17330 with options \\"\$ac_cs_config\\"
1733117331
1733217332
=== modified file '.pc/03_remove-glx-dependency-on-armel.patch/configure.ac'
--- .pc/03_remove-glx-dependency-on-armel.patch/configure.ac 2011-09-28 06:48:58 +0000
+++ .pc/03_remove-glx-dependency-on-armel.patch/configure.ac 2012-01-18 14:13:28 +0000
@@ -1,5 +1,5 @@
1AC_PREREQ(2.63)1AC_PREREQ(2.63)
2AC_INIT([gnome-shell],[3.2.0],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])2AC_INIT([gnome-shell],[3.2.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
33
4AC_CONFIG_HEADERS([config.h])4AC_CONFIG_HEADERS([config.h])
5AC_CONFIG_SRCDIR([src/shell-global.c])5AC_CONFIG_SRCDIR([src/shell-global.c])
@@ -67,7 +67,7 @@
67CLUTTER_MIN_VERSION=1.7.567CLUTTER_MIN_VERSION=1.7.5
68GOBJECT_INTROSPECTION_MIN_VERSION=0.10.168GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
69GJS_MIN_VERSION=1.29.1869GJS_MIN_VERSION=1.29.18
70MUTTER_MIN_VERSION=3.0.070MUTTER_MIN_VERSION=3.2.1
71FOLKS_MIN_VERSION=0.5.271FOLKS_MIN_VERSION=0.5.2
72GTK_MIN_VERSION=3.0.072GTK_MIN_VERSION=3.0.0
73GIO_MIN_VERSION=2.29.1073GIO_MIN_VERSION=2.29.10
7474
=== added directory '.pc/04_bluetooth-fix-connection-from-gs-menu.patch'
=== added file '.pc/04_bluetooth-fix-connection-from-gs-menu.patch/.timestamp'
=== added directory '.pc/04_bluetooth-fix-connection-from-gs-menu.patch/js'
=== added directory '.pc/04_bluetooth-fix-connection-from-gs-menu.patch/js/ui'
=== added directory '.pc/04_bluetooth-fix-connection-from-gs-menu.patch/js/ui/status'
=== added file '.pc/04_bluetooth-fix-connection-from-gs-menu.patch/js/ui/status/bluetooth.js'
--- .pc/04_bluetooth-fix-connection-from-gs-menu.patch/js/ui/status/bluetooth.js 1970-01-01 00:00:00 +0000
+++ .pc/04_bluetooth-fix-connection-from-gs-menu.patch/js/ui/status/bluetooth.js 2012-01-18 14:13:28 +0000
@@ -0,0 +1,508 @@
1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2
3const Clutter = imports.gi.Clutter;
4const Gdk = imports.gi.Gdk;
5const GLib = imports.gi.GLib;
6const Gio = imports.gi.Gio;
7const GnomeBluetoothApplet = imports.gi.GnomeBluetoothApplet;
8const Gtk = imports.gi.Gtk;
9const Lang = imports.lang;
10const Mainloop = imports.mainloop;
11const St = imports.gi.St;
12const Shell = imports.gi.Shell;
13
14const Main = imports.ui.main;
15const MessageTray = imports.ui.messageTray;
16const PanelMenu = imports.ui.panelMenu;
17const PopupMenu = imports.ui.popupMenu;
18
19const ConnectionState = {
20 DISCONNECTED: 0,
21 CONNECTED: 1,
22 DISCONNECTING: 2,
23 CONNECTING: 3
24}
25
26function Indicator() {
27 this._init.apply(this, arguments);
28}
29
30Indicator.prototype = {
31 __proto__: PanelMenu.SystemStatusButton.prototype,
32
33 _init: function() {
34 PanelMenu.SystemStatusButton.prototype._init.call(this, 'bluetooth-disabled', null);
35
36 GLib.spawn_command_line_sync ('pkill -f "^bluetooth-applet$"');
37 this._applet = new GnomeBluetoothApplet.Applet();
38
39 this._killswitch = new PopupMenu.PopupSwitchMenuItem(_("Bluetooth"), false);
40 this._applet.connect('notify::killswitch-state', Lang.bind(this, this._updateKillswitch));
41 this._killswitch.connect('toggled', Lang.bind(this, function() {
42 let current_state = this._applet.killswitch_state;
43 if (current_state != GnomeBluetoothApplet.KillswitchState.HARD_BLOCKED &&
44 current_state != GnomeBluetoothApplet.KillswitchState.NO_ADAPTER) {
45 this._applet.killswitch_state = this._killswitch.state ?
46 GnomeBluetoothApplet.KillswitchState.UNBLOCKED:
47 GnomeBluetoothApplet.KillswitchState.SOFT_BLOCKED;
48 } else
49 this._killswitch.setToggleState(false);
50 }));
51
52 this._discoverable = new PopupMenu.PopupSwitchMenuItem(_("Visibility"), this._applet.discoverable);
53 this._applet.connect('notify::discoverable', Lang.bind(this, function() {
54 this._discoverable.setToggleState(this._applet.discoverable);
55 }));
56 this._discoverable.connect('toggled', Lang.bind(this, function() {
57 this._applet.discoverable = this._discoverable.state;
58 }));
59
60 this._updateKillswitch();
61 this.menu.addMenuItem(this._killswitch);
62 this.menu.addMenuItem(this._discoverable);
63 this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
64
65 this._fullMenuItems = [new PopupMenu.PopupSeparatorMenuItem(),
66 new PopupMenu.PopupMenuItem(_("Send Files to Device...")),
67 new PopupMenu.PopupMenuItem(_("Set up a New Device...")),
68 new PopupMenu.PopupSeparatorMenuItem()];
69 this._hasDevices = false;
70
71 this._fullMenuItems[1].connect('activate', function() {
72 GLib.spawn_command_line_async('bluetooth-sendto');
73 });
74 this._fullMenuItems[2].connect('activate', function() {
75 GLib.spawn_command_line_async('bluetooth-wizard');
76 });
77
78 for (let i = 0; i < this._fullMenuItems.length; i++) {
79 let item = this._fullMenuItems[i];
80 this.menu.addMenuItem(item);
81 }
82
83 this._deviceItemPosition = 3;
84 this._deviceItems = [];
85 this._applet.connect('devices-changed', Lang.bind(this, this._updateDevices));
86 this._updateDevices();
87
88 this._applet.connect('notify::show-full-menu', Lang.bind(this, this._updateFullMenu));
89 this._updateFullMenu();
90
91 this.menu.addSettingsAction(_("Bluetooth Settings"), 'bluetooth-properties.desktop');
92
93 this._applet.connect('pincode-request', Lang.bind(this, this._pinRequest));
94 this._applet.connect('confirm-request', Lang.bind(this, this._confirmRequest));
95 this._applet.connect('auth-request', Lang.bind(this, this._authRequest));
96 this._applet.connect('cancel-request', Lang.bind(this, this._cancelRequest));
97 },
98
99 _updateKillswitch: function() {
100 let current_state = this._applet.killswitch_state;
101 let on = current_state == GnomeBluetoothApplet.KillswitchState.UNBLOCKED;
102 let has_adapter = current_state != GnomeBluetoothApplet.KillswitchState.NO_ADAPTER;
103 let can_toggle = current_state != GnomeBluetoothApplet.KillswitchState.NO_ADAPTER &&
104 current_state != GnomeBluetoothApplet.KillswitchState.HARD_BLOCKED;
105
106 this._killswitch.setToggleState(on);
107 if (can_toggle)
108 this._killswitch.setStatus(null);
109 else
110 /* TRANSLATORS: this means that bluetooth was disabled by hardware rfkill */
111 this._killswitch.setStatus(_("hardware disabled"));
112
113 if (has_adapter)
114 this.actor.show();
115 else
116 this.actor.hide();
117
118 if (on) {
119 this._discoverable.actor.show();
120 this.setIcon('bluetooth-active');
121 } else {
122 this._discoverable.actor.hide();
123 this.setIcon('bluetooth-disabled');
124 }
125 },
126
127 _updateDevices: function() {
128 let devices = this._applet.get_devices();
129
130 let newlist = [ ];
131 for (let i = 0; i < this._deviceItems.length; i++) {
132 let item = this._deviceItems[i];
133 let destroy = true;
134 for (let j = 0; j < devices.length; j++) {
135 if (item._device.device_path == devices[j].device_path) {
136 this._updateDeviceItem(item, devices[j]);
137 destroy = false;
138 break;
139 }
140 }
141 if (destroy)
142 item.destroy();
143 else
144 newlist.push(item);
145 }
146
147 this._deviceItems = newlist;
148 this._hasDevices = newlist.length > 0;
149 for (let i = 0; i < devices.length; i++) {
150 let d = devices[i];
151 if (d._item)
152 continue;
153 let item = this._createDeviceItem(d);
154 if (item) {
155 this.menu.addMenuItem(item, this._deviceItemPosition + this._deviceItems.length);
156 this._deviceItems.push(item);
157 this._hasDevices = true;
158 }
159 }
160 },
161
162 _updateDeviceItem: function(item, device) {
163 if (!device.can_connect && device.capabilities == GnomeBluetoothApplet.Capabilities.NONE) {
164 item.destroy();
165 return;
166 }
167
168 let prevDevice = item._device;
169 let prevCapabilities = prevDevice.capabilities;
170 let prevCanConnect = prevDevice.can_connect;
171
172 // adopt the new device object
173 item._device = device;
174 device._item = item;
175
176 // update properties
177 item.label.text = device.alias;
178
179 if (prevCapabilities != device.capabilities ||
180 prevCanConnect != device.can_connect) {
181 // need to rebuild the submenu
182 item.menu.removeAll();
183 this._buildDeviceSubMenu(item, device);
184 }
185
186 // update connected property
187 if (device.can_connect)
188 item._connectedMenuitem.setToggleState(device.connected);
189 },
190
191 _createDeviceItem: function(device) {
192 if (!device.can_connect && device.capabilities == GnomeBluetoothApplet.Capabilities.NONE)
193 return null;
194 let item = new PopupMenu.PopupSubMenuMenuItem(device.alias);
195
196 // adopt the device object, and add a back link
197 item._device = device;
198 device._item = item;
199
200 this._buildDeviceSubMenu(item, device);
201
202 return item;
203 },
204
205 _buildDeviceSubMenu: function(item, device) {
206 if (device.can_connect) {
207 item._connected = device.connected;
208 item._connectedMenuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
209 item._connectedMenuitem.connect('toggled', Lang.bind(this, function() {
210 if (item._connected > ConnectionState.CONNECTED) {
211 // operation already in progress, revert
212 // (should not happen anyway)
213 menuitem.setToggleState(menuitem.state);
214 }
215 if (item._connected) {
216 item._connected = ConnectionState.DISCONNECTING;
217 menuitem.setStatus(_("disconnecting..."));
218 this._applet.disconnect_device(item._device.device_path, function(applet, success) {
219 if (success) { // apply
220 item._connected = ConnectionState.DISCONNECTED;
221 menuitem.setToggleState(false);
222 } else { // revert
223 item._connected = ConnectionState.CONNECTED;
224 menuitem.setToggleState(true);
225 }
226 menuitem.setStatus(null);
227 });
228 } else {
229 item._connected = ConnectionState.CONNECTING;
230 menuitem.setStatus(_("connecting..."));
231 this._applet.connect_device(item._device.device_path, function(applet, success) {
232 if (success) { // apply
233 item._connected = ConnectionState.CONNECTED;
234 menuitem.setToggleState(true);
235 } else { // revert
236 item._connected = ConnectionState.DISCONNECTED;
237 menuitem.setToggleState(false);
238 }
239 menuitem.setStatus(null);
240 });
241 }
242 }));
243
244 item.menu.addMenuItem(item._connectedMenuitem);
245 }
246
247 if (device.capabilities & GnomeBluetoothApplet.Capabilities.OBEX_PUSH) {
248 item.menu.addAction(_("Send Files..."), Lang.bind(this, function() {
249 this._applet.send_to_address(device.bdaddr, device.alias);
250 }));
251 }
252 if (device.capabilities & GnomeBluetoothApplet.Capabilities.OBEX_FILE_TRANSFER) {
253 item.menu.addAction(_("Browse Files..."), Lang.bind(this, function(event) {
254 this._applet.browse_address(device.bdaddr, event.get_time(),
255 Lang.bind(this, function(applet, result) {
256 try {
257 applet.browse_address_finish(result);
258 } catch (e) {
259 this._ensureSource();
260 this._source.notify(new MessageTray.Notification(this._source,
261 _("Bluetooth"),
262 _("Error browsing device"),
263 { body: _("The requested device cannot be browsed, error is '%s'").format(e) }));
264 }
265 }));
266 }));
267 }
268
269 switch (device.type) {
270 case GnomeBluetoothApplet.Type.KEYBOARD:
271 item.menu.addSettingsAction(_("Keyboard Settings"), 'gnome-keyboard-panel.desktop');
272 break;
273 case GnomeBluetoothApplet.Type.MOUSE:
274 item.menu.addSettingsAction(_("Mouse Settings"), 'gnome-mouse-panel.desktop');
275 break;
276 case GnomeBluetoothApplet.Type.HEADSET:
277 case GnomeBluetoothApplet.Type.HEADPHONES:
278 case GnomeBluetoothApplet.Type.OTHER_AUDIO:
279 item.menu.addSettingsAction(_("Sound Settings"), 'gnome-sound-panel.desktop');
280 break;
281 default:
282 break;
283 }
284 },
285
286 _updateFullMenu: function() {
287 if (this._applet.show_full_menu) {
288 this._showAll(this._fullMenuItems);
289 if (this._hasDevices)
290 this._showAll(this._deviceItems);
291 } else {
292 this._hideAll(this._fullMenuItems);
293 this._hideAll(this._deviceItems);
294 }
295 },
296
297 _showAll: function(items) {
298 for (let i = 0; i < items.length; i++)
299 items[i].actor.show();
300 },
301
302 _hideAll: function(items) {
303 for (let i = 0; i < items.length; i++)
304 items[i].actor.hide();
305 },
306
307 _destroyAll: function(items) {
308 for (let i = 0; i < items.length; i++)
309 items[i].destroy();
310 },
311
312 _ensureSource: function() {
313 if (!this._source) {
314 this._source = new Source();
315 Main.messageTray.add(this._source);
316 }
317 },
318
319 _authRequest: function(applet, device_path, name, long_name, uuid) {
320 this._ensureSource();
321 this._source.notify(new AuthNotification(this._source, this._applet, device_path, name, long_name, uuid));
322 },
323
324 _confirmRequest: function(applet, device_path, name, long_name, pin) {
325 this._ensureSource();
326 this._source.notify(new ConfirmNotification(this._source, this._applet, device_path, name, long_name, pin));
327 },
328
329 _pinRequest: function(applet, device_path, name, long_name, numeric) {
330 this._ensureSource();
331 this._source.notify(new PinNotification(this._source, this._applet, device_path, name, long_name, numeric));
332 },
333
334 _cancelRequest: function() {
335 this._source.destroy();
336 }
337}
338
339function Source() {
340 this._init.apply(this, arguments);
341}
342
343Source.prototype = {
344 __proto__: MessageTray.Source.prototype,
345
346 _init: function() {
347 MessageTray.Source.prototype._init.call(this, _("Bluetooth"));
348
349 this._setSummaryIcon(this.createNotificationIcon());
350 },
351
352 notify: function(notification) {
353 this._private_destroyId = notification.connect('destroy', Lang.bind(this, function(notification) {
354 if (this.notification == notification) {
355 // the destroyed notification is the last for this source
356 this.notification.disconnect(this._private_destroyId);
357 this.destroy();
358 }
359 }));
360
361 MessageTray.Source.prototype.notify.call(this, notification);
362 },
363
364 createNotificationIcon: function() {
365 return new St.Icon({ icon_name: 'bluetooth-active',
366 icon_type: St.IconType.SYMBOLIC,
367 icon_size: this.ICON_SIZE });
368 }
369}
370
371function AuthNotification() {
372 this._init.apply(this, arguments);
373}
374
375AuthNotification.prototype = {
376 __proto__: MessageTray.Notification.prototype,
377
378 _init: function(source, applet, device_path, name, long_name, uuid) {
379 MessageTray.Notification.prototype._init.call(this,
380 source,
381 _("Bluetooth"),
382 _("Authorization request from %s").format(name),
383 { customContent: true });
384 this.setResident(true);
385
386 this._applet = applet;
387 this._devicePath = device_path;
388 this.addBody(_("Device %s wants access to the service '%s'").format(long_name, uuid));
389
390 this.addButton('always-grant', _("Always grant access"));
391 this.addButton('grant', _("Grant this time only"));
392 this.addButton('reject', _("Reject"));
393
394 this.connect('action-invoked', Lang.bind(this, function(self, action) {
395 switch (action) {
396 case 'always-grant':
397 this._applet.agent_reply_auth(this._devicePath, true, true);
398 break;
399 case 'grant':
400 this._applet.agent_reply_auth(this._devicePath, true, false);
401 break;
402 case 'reject':
403 default:
404 this._applet.agent_reply_auth(this._devicePath, false, false);
405 }
406 this.destroy();
407 }));
408 }
409}
410
411function ConfirmNotification() {
412 this._init.apply(this, arguments);
413}
414
415ConfirmNotification.prototype = {
416 __proto__: MessageTray.Notification.prototype,
417
418 _init: function(source, applet, device_path, name, long_name, pin) {
419 MessageTray.Notification.prototype._init.call(this,
420 source,
421 _("Bluetooth"),
422 _("Pairing confirmation for %s").format(name),
423 { customContent: true });
424 this.setResident(true);
425
426 this._applet = applet;
427 this._devicePath = device_path;
428 this.addBody(_("Device %s wants to pair with this computer").format(long_name));
429 this.addBody(_("Please confirm whether the PIN '%s' matches the one on the device.").format(pin));
430
431 this.addButton('matches', _("Matches"));
432 this.addButton('does-not-match', _("Does not match"));
433
434 this.connect('action-invoked', Lang.bind(this, function(self, action) {
435 if (action == 'matches')
436 this._applet.agent_reply_confirm(this._devicePath, true);
437 else
438 this._applet.agent_reply_confirm(this._devicePath, false);
439 this.destroy();
440 }));
441 }
442}
443
444function PinNotification() {
445 this._init.apply(this, arguments);
446}
447
448PinNotification.prototype = {
449 __proto__: MessageTray.Notification.prototype,
450
451 _init: function(source, applet, device_path, name, long_name, numeric) {
452 MessageTray.Notification.prototype._init.call(this,
453 source,
454 _("Bluetooth"),
455 _("Pairing request for %s").format(name),
456 { customContent: true });
457 this.setResident(true);
458
459 this._applet = applet;
460 this._devicePath = device_path;
461 this._numeric = numeric;
462 this.addBody(_("Device %s wants to pair with this computer").format(long_name));
463 this.addBody(_("Please enter the PIN mentioned on the device."));
464
465 this._entry = new St.Entry();
466 this._entry.connect('key-release-event', Lang.bind(this, function(entry, event) {
467 let key = event.get_key_symbol();
468 if (key == Clutter.KEY_Return) {
469 this.emit('action-invoked', 'ok');
470 return true;
471 } else if (key == Clutter.KEY_Escape) {
472 this.emit('action-invoked', 'cancel');
473 return true;
474 }
475 return false;
476 }));
477 this.addActor(this._entry);
478
479 this.addButton('ok', _("OK"));
480 this.addButton('cancel', _("Cancel"));
481
482 this.connect('action-invoked', Lang.bind(this, function(self, action) {
483 if (action == 'ok') {
484 if (this._numeric) {
485 let num = parseInt(this._entry.text);
486 if (isNaN(num)) {
487 // user reply was empty, or was invalid
488 // cancel the operation
489 num = -1;
490 }
491 this._applet.agent_reply_passkey(this._devicePath, num);
492 } else
493 this._applet.agent_reply_pincode(this._devicePath, this._entry.text);
494 } else {
495 if (this._numeric)
496 this._applet.agent_reply_passkey(this._devicePath, -1);
497 else
498 this._applet.agent_reply_pincode(this._devicePath, null);
499 }
500 this.destroy();
501 }));
502 },
503
504 grabFocus: function(lockTray) {
505 MessageTray.Notification.prototype.grabFocus.call(this, lockTray);
506 global.stage.set_key_focus(this._entry);
507 }
508}
0509
=== modified file '.pc/applied-patches'
--- .pc/applied-patches 2011-09-22 08:50:45 +0000
+++ .pc/applied-patches 2012-01-18 14:13:28 +0000
@@ -1,2 +1,2 @@
101_favorite_apps.patch
203_remove-glx-dependency-on-armel.patch103_remove-glx-dependency-on-armel.patch
204_bluetooth-fix-connection-from-gs-menu.patch
33
=== modified file 'NEWS'
--- NEWS 2011-09-28 00:41:45 +0000
+++ NEWS 2012-01-18 14:13:28 +0000
@@ -1,3 +1,69 @@
13.2.1
2=====
3* Restore the IM state on startup - if you were available in when you logged
4 out, then you'll be set available again when you log in.
5 [Florian; #65902, #661485]
6* Improve searching for contacts in the overview: search more fields,
7 show a more meaningful name, require that all search terms match.
8 [Florian, Matthias; #660580]
9* Improve search for applications in the overview: take frequency into
10 account and tweak match algorithm [Florian; #623372]
11* Remove the "Show Password" switch from network password prompts, and
12 move the functionality to a right-click menu [Florian; #658948]
13* Add context menus with Cut/Paste options to most entries [Florian; #659275]
14* On screen keyboard:
15 - Show the keyboard immediately when it's turned enabled [Dan; #659743]
16 - Fix problem where keyboard would hide when starting to type
17 in the search entry [Nohemi; #661340]
18 - Fix problem with keyboard hiding when selected accented characters
19 [Nohemi; 661707]
20* Login mode:
21 - Allow hitting Enter to select the first user [Ray; #657996]
22 - Fix flicker of a fingerprint prompt that could show up [Ray; #660492]
23 - Fix password bullets vanishing during login [Ray; #657894]
24 - Misc bug fixes and visual tweaks [Ray; #659763, #660919, #661479]
25* Display a caps-lock warning in password entries [Florian; #660806]
26* Show the state of installed extensions in Looking Glass [Jasper; #660494]
27* Load user extensions after system ones [Jasper; #661815]
28* Fix problem with many applications showing extra-large icons in
29 notifications [Marina; #659158]
30* Fix a problem where alt-Tab had trouble tracking the current
31 application with certain applications such as Emacs. [Dan; #645026]
32* Fix confusion between different users avatar images [Florian; #660585]
33* Remove behavior where you could switch workspaces by bumping
34 a dragged window in the overview against a screen edge; it was
35 leftover and just confusing. [Florian; #660838]
36* Fix long-standing bug where the Dash in the overview could end up mis-sized
37 and run off the screen [Florian; #649248]
38* Fix automatic launching of applications when media is inserted
39 [Cosimo; #660821]
40* Fix handling of vertically stacked monitors with NVIDIA drivers
41 [Florian; #661387]
42* Translation marking fixes [Jasper, Wouter; #660600]
43* Code cleanups and warning fixes [Adel, Dan, Florian, Jasper;
44 #659822, #659940, #660122, #660358, #660968, #661231]
45* Small memory leak fixes [Florian, Jasper; #661231]
46* Misc bug fixes [Adel, Florian, Jasper; #659274, #659861, #660166, #660310,
47 #660397, #660608, #660606, #660674, #660774. #660848, #661151, #661617]
48
49Contributors:
50 Wouter Bolsterlee, Cosimo Cecchi, Matthias Clasen, Nohemi Fernandez,
51 Adel Gadllah, Florian Müllner, Jasper St. Pierre, Ray Strode, Dan Winship,
52 Marina Zhurakhinskaya
53
54Translations:
55 Tiffany Antopolski [eo], Xandru Armesto [ast], Alexander Shopov,
56 Ivaylo Valkov [bg], Gil Forcada [ca], Carles Ferrando [ca@valencia],
57 Mario Blättermann, Paul Seyfert [de], Bruce Cowan [en_GB],
58 Jorge González, Daniel Mustieles [es], Arash Mousavi [fa], Bruno Brouard [fr],
59 Seán de Búrca [ga], Fran Diéguez [gl], Gabor Kelemen [hu], Luca Ferretti [it],
60 Takayuki Kusano [ja], Changwoo Ryu [ko], Erdal Ronahi [ku],
61 Algimantas Margevičius [lt], Rudolfs Mazurs [lv], Wouter Bolsterlee [nl],
62 Piotr Drąg [pl], Adorilson Bezerra [pt_BR], Yuri Myasoedov [ru],
63 Matej Urbančič [sl], Daniel Nylander [sv], Miroslav Nikolić [sr, sr@latin],
64 Tirumurti Vasudevan [ta], Krishnababu Krothapalli [te], Daniel Korostil [uk],
65 Nguyễn Thái Ngọc Duy [vi], YunQiang Su [zh_CN]
66
13.2.0673.2.0
2=====68=====
3* Prevent the fallback on-screen keyboard from showing up while69* Prevent the fallback on-screen keyboard from showing up while
470
=== modified file 'configure'
--- configure 2011-09-28 06:48:58 +0000
+++ configure 2012-01-18 14:13:28 +0000
@@ -1,6 +1,6 @@
1#! /bin/sh1#! /bin/sh
2# Guess values for system-dependent variables and create Makefiles.2# Guess values for system-dependent variables and create Makefiles.
3# Generated by GNU Autoconf 2.68 for gnome-shell 3.2.0.3# Generated by GNU Autoconf 2.68 for gnome-shell 3.2.1.
4#4#
5# Report bugs to <https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell>.5# Report bugs to <https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell>.
6#6#
@@ -571,8 +571,8 @@
571# Identity of this package.571# Identity of this package.
572PACKAGE_NAME='gnome-shell'572PACKAGE_NAME='gnome-shell'
573PACKAGE_TARNAME='gnome-shell'573PACKAGE_TARNAME='gnome-shell'
574PACKAGE_VERSION='3.2.0'574PACKAGE_VERSION='3.2.1'
575PACKAGE_STRING='gnome-shell 3.2.0'575PACKAGE_STRING='gnome-shell 3.2.1'
576PACKAGE_BUGREPORT='https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell'576PACKAGE_BUGREPORT='https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell'
577PACKAGE_URL=''577PACKAGE_URL=''
578578
@@ -1453,7 +1453,7 @@
1453 # Omit some internal or obsolete options to make the list less imposing.1453 # Omit some internal or obsolete options to make the list less imposing.
1454 # This message is too long to be a string in the A/UX 3.1 sh.1454 # This message is too long to be a string in the A/UX 3.1 sh.
1455 cat <<_ACEOF1455 cat <<_ACEOF
1456\`configure' configures gnome-shell 3.2.0 to adapt to many kinds of systems.1456\`configure' configures gnome-shell 3.2.1 to adapt to many kinds of systems.
14571457
1458Usage: $0 [OPTION]... [VAR=VALUE]...1458Usage: $0 [OPTION]... [VAR=VALUE]...
14591459
@@ -1523,7 +1523,7 @@
15231523
1524if test -n "$ac_init_help"; then1524if test -n "$ac_init_help"; then
1525 case $ac_init_help in1525 case $ac_init_help in
1526 short | recursive ) echo "Configuration of gnome-shell 3.2.0:";;1526 short | recursive ) echo "Configuration of gnome-shell 3.2.1:";;
1527 esac1527 esac
1528 cat <<\_ACEOF1528 cat <<\_ACEOF
15291529
@@ -1698,7 +1698,7 @@
1698test -n "$ac_init_help" && exit $ac_status1698test -n "$ac_init_help" && exit $ac_status
1699if $ac_init_version; then1699if $ac_init_version; then
1700 cat <<\_ACEOF1700 cat <<\_ACEOF
1701gnome-shell configure 3.2.01701gnome-shell configure 3.2.1
1702generated by GNU Autoconf 2.681702generated by GNU Autoconf 2.68
17031703
1704Copyright (C) 2010 Free Software Foundation, Inc.1704Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2067,7 +2067,7 @@
2067This file contains any messages produced by compilers while2067This file contains any messages produced by compilers while
2068running configure, to aid debugging if configure makes a mistake.2068running configure, to aid debugging if configure makes a mistake.
20692069
2070It was created by gnome-shell $as_me 3.2.0, which was2070It was created by gnome-shell $as_me 3.2.1, which was
2071generated by GNU Autoconf 2.68. Invocation command line was2071generated by GNU Autoconf 2.68. Invocation command line was
20722072
2073 $ $0 $@2073 $ $0 $@
@@ -2894,7 +2894,7 @@
28942894
2895# Define the identity of the package.2895# Define the identity of the package.
2896 PACKAGE='gnome-shell'2896 PACKAGE='gnome-shell'
2897 VERSION='3.2.0'2897 VERSION='3.2.1'
28982898
28992899
2900cat >>confdefs.h <<_ACEOF2900cat >>confdefs.h <<_ACEOF
@@ -14948,7 +14948,7 @@
14948CLUTTER_MIN_VERSION=1.7.514948CLUTTER_MIN_VERSION=1.7.5
14949GOBJECT_INTROSPECTION_MIN_VERSION=0.10.114949GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
14950GJS_MIN_VERSION=1.29.1814950GJS_MIN_VERSION=1.29.18
14951MUTTER_MIN_VERSION=3.0.014951MUTTER_MIN_VERSION=3.2.1
14952FOLKS_MIN_VERSION=0.5.214952FOLKS_MIN_VERSION=0.5.2
14953GTK_MIN_VERSION=3.0.014953GTK_MIN_VERSION=3.0.0
14954GIO_MIN_VERSION=2.29.1014954GIO_MIN_VERSION=2.29.10
@@ -17250,7 +17250,7 @@
17250# report actual input values of CONFIG_FILES etc. instead of their17250# report actual input values of CONFIG_FILES etc. instead of their
17251# values after options handling.17251# values after options handling.
17252ac_log="17252ac_log="
17253This file was extended by gnome-shell $as_me 3.2.0, which was17253This file was extended by gnome-shell $as_me 3.2.1, which was
17254generated by GNU Autoconf 2.68. Invocation command line was17254generated by GNU Autoconf 2.68. Invocation command line was
1725517255
17256 CONFIG_FILES = $CONFIG_FILES17256 CONFIG_FILES = $CONFIG_FILES
@@ -17316,7 +17316,7 @@
17316cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=117316cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
17317ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"17317ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
17318ac_cs_version="\\17318ac_cs_version="\\
17319gnome-shell config.status 3.2.017319gnome-shell config.status 3.2.1
17320configured by $0, generated by GNU Autoconf 2.68,17320configured by $0, generated by GNU Autoconf 2.68,
17321 with options \\"\$ac_cs_config\\"17321 with options \\"\$ac_cs_config\\"
1732217322
1732317323
=== modified file 'configure.ac'
--- configure.ac 2011-09-28 06:48:58 +0000
+++ configure.ac 2012-01-18 14:13:28 +0000
@@ -1,5 +1,5 @@
1AC_PREREQ(2.63)1AC_PREREQ(2.63)
2AC_INIT([gnome-shell],[3.2.0],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])2AC_INIT([gnome-shell],[3.2.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
33
4AC_CONFIG_HEADERS([config.h])4AC_CONFIG_HEADERS([config.h])
5AC_CONFIG_SRCDIR([src/shell-global.c])5AC_CONFIG_SRCDIR([src/shell-global.c])
@@ -67,7 +67,7 @@
67CLUTTER_MIN_VERSION=1.7.567CLUTTER_MIN_VERSION=1.7.5
68GOBJECT_INTROSPECTION_MIN_VERSION=0.10.168GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
69GJS_MIN_VERSION=1.29.1869GJS_MIN_VERSION=1.29.18
70MUTTER_MIN_VERSION=3.0.070MUTTER_MIN_VERSION=3.2.1
71FOLKS_MIN_VERSION=0.5.271FOLKS_MIN_VERSION=0.5.2
72GTK_MIN_VERSION=3.0.072GTK_MIN_VERSION=3.0.0
73GIO_MIN_VERSION=2.29.1073GIO_MIN_VERSION=2.29.10
7474
=== modified file 'data/org.gnome.shell.gschema.xml.in'
--- data/org.gnome.shell.gschema.xml.in 2011-09-22 08:50:45 +0000
+++ data/org.gnome.shell.gschema.xml.in 2012-01-18 14:13:28 +0000
@@ -31,7 +31,7 @@
31 </_description>31 </_description>
32 </key>32 </key>
33 <key name="favorite-apps" type="as">33 <key name="favorite-apps" type="as">
34 <default>[ 'firefox.desktop', 'thunderbird.desktop', 'empathy.desktop', 'banshee.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop' ]</default>34 <default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop' ]</default>
35 <_summary>List of desktop file IDs for favorite applications</_summary>35 <_summary>List of desktop file IDs for favorite applications</_summary>
36 <_description>36 <_description>
37 The applications corresponding to these identifiers37 The applications corresponding to these identifiers
@@ -50,6 +50,14 @@
50 <default>[]</default>50 <default>[]</default>
51 <_summary>History for the looking glass dialog</_summary>51 <_summary>History for the looking glass dialog</_summary>
52 </key>52 </key>
53 <key name="saved-im-presence" type="i">
54 <default>1</default>
55 <_summary></_summary>
56 </key>
57 <key name="saved-session-presence" type="i">
58 <default>0</default>
59 <_summary></_summary>
60 </key>
53 <child name="clock" schema="org.gnome.shell.clock"/>61 <child name="clock" schema="org.gnome.shell.clock"/>
54 <child name="calendar" schema="org.gnome.shell.calendar"/>62 <child name="calendar" schema="org.gnome.shell.calendar"/>
55 <child name="recorder" schema="org.gnome.shell.recorder"/>63 <child name="recorder" schema="org.gnome.shell.recorder"/>
5664
=== modified file 'data/theme/gdm.css'
--- data/theme/gdm.css 2011-09-21 16:26:15 +0000
+++ data/theme/gdm.css 2012-01-18 14:13:28 +0000
@@ -98,8 +98,12 @@
98 color: #666666;98 color: #666666;
99}99}
100100
101.login-dialog-not-listed-button:hover .login-dialog-not-listed-label {
102 color: white;
103}
104
101.login-dialog-prompt-layout {105.login-dialog-prompt-layout {
102 padding-bottom: 64px;106 padding-bottom: 32px;
103}107}
104.login-dialog-prompt-label {108.login-dialog-prompt-label {
105 color: white;109 color: white;
@@ -117,6 +121,16 @@
117 width: 15em;121 width: 15em;
118}122}
119123
124.login-dialog-prompt-entry .capslock-warning {
125 icon-size: 16px;
126 warning-color: #999;
127}
128
129.login-dialog-prompt-entry:insensitive {
130 color: rgba(0,0,0,0.7);
131 border: 2px solid #565656;
132}
133
120.login-dialog-session-list {134.login-dialog-session-list {
121 color: #ffffff;135 color: #ffffff;
122 font-size: 10.5pt;136 font-size: 10.5pt;
123137
=== modified file 'data/theme/gnome-shell.css'
--- data/theme/gnome-shell.css 2011-09-21 16:26:15 +0000
+++ data/theme/gnome-shell.css 2012-01-18 14:13:28 +0000
@@ -907,7 +907,7 @@
907 font-weight: bold;907 font-weight: bold;
908}908}
909909
910.lg-extension-actions {910.lg-extension-meta {
911 spacing: 6px;911 spacing: 6px;
912}912}
913913
@@ -1907,6 +1907,12 @@
1907 border: 2px solid #3465a4;1907 border: 2px solid #3465a4;
1908}1908}
19091909
1910.polkit-dialog-password-entry .capslock-warning {
1911 icon-size: 16px;
1912 warning-color: #999;
1913 padding: 0 4px;
1914}
1915
1910.polkit-dialog-error-label {1916.polkit-dialog-error-label {
1911 font-size: 10pt;1917 font-size: 10pt;
1912 color: #ffff00;1918 color: #ffff00;
@@ -1925,14 +1931,6 @@
1925 padding-bottom: 8px;1931 padding-bottom: 8px;
1926}1932}
19271933
1928.network-dialog-show-password-checkbox {
1929 padding-top: 5px;
1930 padding-bottom: 5px;
1931 font-size: 10pt;
1932 color: white;
1933 spacing: 10px;
1934}
1935
1936.network-dialog-secret-table {1934.network-dialog-secret-table {
1937 spacing-rows: 15px;1935 spacing-rows: 15px;
1938}1936}
19391937
=== modified file 'debian/changelog'
--- debian/changelog 2011-09-28 06:48:58 +0000
+++ debian/changelog 2012-01-18 14:13:28 +0000
@@ -1,3 +1,63 @@
1gnome-shell (3.2.1-0ubuntu1.2~tkluck1) oneiric; urgency=low
2
3 * Fix bluetooth device connecting from gnome-shell menu
4
5 -- Timo Kluck <tkluck@infty.nl> Wed, 18 Jan 2012 14:34:22 +0100
6
7gnome-shell (3.2.1-0ubuntu1.1) oneiric-proposed; urgency=low
8
9 * No-change rebuild to fix up dependencies (LP: #903382)
10
11 -- Evan Broder <evan@ebroder.net> Mon, 19 Dec 2011 23:13:06 -0800
12
13gnome-shell (3.2.1-0ubuntu1) oneiric-proposed; urgency=low
14
15 [ Jeremy Bicha ]
16 * New upstream release (LP: #878672).
17 - Restore the IM state on startup - if you were available in when you
18 logged out, then you'll be set available again when you log in.
19 - Improve searching for contacts in the overview: search more fields,
20 show a more meaningful name, require that all search terms match.
21 - Improve search for applications in the overview: take frequency into
22 account and tweak match algorithm
23 - Remove the "Show Password" switch from network password prompts, and
24 move the functionality to a right-click menu
25 - Add context menus with Cut/Paste options to most entries
26 - Display a caps-lock warning in password entries
27 - Show the state of installed extensions in Looking Glass
28 - Load user extensions after system ones
29 - Fix problem with many applications showing extra-large icons in
30 notifications
31 - Fix a problem where alt-Tab had trouble tracking the current
32 application with certain applications such as Emacs.
33 - Fix confusion between different users avatar images
34 - Remove behavior where you could switch workspaces by bumping
35 a dragged window in the overview against a screen edge; it was
36 leftover and just confusing.
37 - Fix long-standing bug where the Dash in the overview could end up
38 mis-sized and run off the screen
39 - Fix automatic launching of applications when media is inserted
40 - Fix handling of vertically stacked monitors with NVIDIA drivers
41 - Translation marking fixes
42 - Code cleanups and warning fixes
43 - Small memory leak fixes
44 - On screen keyboard:
45 + Show the keyboard immediately when it's turned enabled
46 + Fix problem where keyboard would hide when starting to type
47 in the search entry
48 + Fix problem with keyboard hiding when selected accented characters
49 - Misc bug fixes
50 * debian/control.in:
51 - Bump minimum mutter to 3.2.1
52 - Drop dependency against libdconf0 and let dh_installgsettings set
53 the right dependencies.
54 - Depends on cups-pk-helper instead of recommends to ensure that
55 the printer applet works (LP: #877367)
56 * 01_favorite_apps.patch: dropped, replaced by override file.
57 * New upstream release.
58
59 -- Jeremy Bicha <jbicha@ubuntu.com> Mon, 24 Oct 2011 06:43:05 +0200
60
1gnome-shell (3.2.0-0ubuntu1) oneiric; urgency=low61gnome-shell (3.2.0-0ubuntu1) oneiric; urgency=low
262
3 * New upstream stable release.63 * New upstream stable release.
464
=== modified file 'debian/control'
--- debian/control 2011-09-28 06:48:58 +0000
+++ debian/control 2012-01-18 14:13:28 +0000
@@ -36,7 +36,7 @@
36 libgudev-1.0-dev,36 libgudev-1.0-dev,
37 libnm-glib-dev (>= 0.8.999),37 libnm-glib-dev (>= 0.8.999),
38 libstartup-notification0-dev (>= 0.11),38 libstartup-notification0-dev (>= 0.11),
39 libmutter-dev (>= 3.1.92),39 libmutter-dev (>= 3.2.1),
40 librsvg2-dev,40 librsvg2-dev,
41 libwnck-dev,41 libwnck-dev,
42 libclutter-1.0-dev (>= 1.7.5),42 libclutter-1.0-dev (>= 1.7.5),
@@ -62,7 +62,7 @@
62 ${shlibs:Depends},62 ${shlibs:Depends},
63 ${misc:Depends},63 ${misc:Depends},
64 caribou,64 caribou,
65 libdconf0 | gsettings-backend,65 cups-pk-helper,
66 gnome-settings-daemon (>= 2.91.5.1),66 gnome-settings-daemon (>= 2.91.5.1),
67 gsettings-desktop-schemas (>= 0.1.7),67 gsettings-desktop-schemas (>= 0.1.7),
68 gnome-icon-theme-symbolic (>= 2.91),68 gnome-icon-theme-symbolic (>= 2.91),
@@ -78,7 +78,7 @@
78 python,78 python,
79 pkg-config,79 pkg-config,
80 mesa-utils80 mesa-utils
81Recommends: gnome-control-center, gnome-user-guide, gnome-themes-standard, cups-pk-helper, gnome-session-fallback81Recommends: gnome-control-center, gnome-user-guide, gnome-themes-standard, gnome-session-fallback
82Breaks: gnome-control-center (<< 1:3.0)82Breaks: gnome-control-center (<< 1:3.0)
83Description: graphical shell for the GNOME desktop83Description: graphical shell for the GNOME desktop
84 The GNOME Shell redefines user interactions with the GNOME desktop.84 The GNOME Shell redefines user interactions with the GNOME desktop.
8585
=== modified file 'debian/control.in'
--- debian/control.in 2011-09-28 06:48:58 +0000
+++ debian/control.in 2012-01-18 14:13:28 +0000
@@ -31,7 +31,7 @@
31 libgudev-1.0-dev,31 libgudev-1.0-dev,
32 libnm-glib-dev (>= 0.8.999),32 libnm-glib-dev (>= 0.8.999),
33 libstartup-notification0-dev (>= 0.11),33 libstartup-notification0-dev (>= 0.11),
34 libmutter-dev (>= 3.1.92),34 libmutter-dev (>= 3.2.1),
35 librsvg2-dev,35 librsvg2-dev,
36 libwnck-dev,36 libwnck-dev,
37 libclutter-1.0-dev (>= 1.7.5),37 libclutter-1.0-dev (>= 1.7.5),
@@ -57,7 +57,7 @@
57 ${shlibs:Depends},57 ${shlibs:Depends},
58 ${misc:Depends},58 ${misc:Depends},
59 caribou,59 caribou,
60 libdconf0 | gsettings-backend,60 cups-pk-helper,
61 gnome-settings-daemon (>= 2.91.5.1),61 gnome-settings-daemon (>= 2.91.5.1),
62 gsettings-desktop-schemas (>= 0.1.7),62 gsettings-desktop-schemas (>= 0.1.7),
63 gnome-icon-theme-symbolic (>= 2.91),63 gnome-icon-theme-symbolic (>= 2.91),
@@ -73,7 +73,7 @@
73 python,73 python,
74 pkg-config,74 pkg-config,
75 mesa-utils75 mesa-utils
76Recommends: gnome-control-center, gnome-user-guide, gnome-themes-standard, cups-pk-helper, gnome-session-fallback76Recommends: gnome-control-center, gnome-user-guide, gnome-themes-standard, gnome-session-fallback
77Breaks: gnome-control-center (<< 1:3.0)77Breaks: gnome-control-center (<< 1:3.0)
78Description: graphical shell for the GNOME desktop78Description: graphical shell for the GNOME desktop
79 The GNOME Shell redefines user interactions with the GNOME desktop.79 The GNOME Shell redefines user interactions with the GNOME desktop.
8080
=== added file 'debian/gnome-shell.gsettings-override'
--- debian/gnome-shell.gsettings-override 1970-01-01 00:00:00 +0000
+++ debian/gnome-shell.gsettings-override 2012-01-18 14:13:28 +0000
@@ -0,0 +1,3 @@
1[org.gnome.shell]
2favorite-apps=[ 'firefox.desktop', 'thunderbird.desktop', 'empathy.desktop', 'banshee.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop' ]
3
04
=== removed file 'debian/patches/01_favorite_apps.patch'
--- debian/patches/01_favorite_apps.patch 2011-09-22 08:50:45 +0000
+++ debian/patches/01_favorite_apps.patch 1970-01-01 00:00:00 +0000
@@ -1,16 +0,0 @@
1Description: Use Ubuntu defaults (Firefox, Thunderbird, and Banshee)
2Forwarded: not-needed
3Author: Jeremy Bicha <jbicha@ubuntu.com>
4Index: oneiric/data/org.gnome.shell.gschema.xml.in
5===================================================================
6--- oneiric.orig/data/org.gnome.shell.gschema.xml.in 2011-09-20 18:38:13.116385829 -0400
7+++ oneiric/data/org.gnome.shell.gschema.xml.in 2011-09-20 18:38:36.746420484 -0400
8@@ -31,7 +31,7 @@
9 </_description>
10 </key>
11 <key name="favorite-apps" type="as">
12- <default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop' ]</default>
13+ <default>[ 'firefox.desktop', 'thunderbird.desktop', 'empathy.desktop', 'banshee.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop' ]</default>
14 <_summary>List of desktop file IDs for favorite applications</_summary>
15 <_description>
16 The applications corresponding to these identifiers
170
=== added file 'debian/patches/04_bluetooth-fix-connection-from-gs-menu.patch'
--- debian/patches/04_bluetooth-fix-connection-from-gs-menu.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/04_bluetooth-fix-connection-from-gs-menu.patch 2012-01-18 14:13:28 +0000
@@ -0,0 +1,31 @@
1From 0ed0dc89b51f8e584dd21c87a7178ba138bed44b Mon Sep 17 00:00:00 2001
2From: Alessandro Crismani <alessandro.crismani@gmail.com>
3Date: Tue, 13 Dec 2011 10:01:34 +0100
4Subject: [PATCH] Bluetooth: fix connecting devices from GS's panel on 3.2.1
5
6Connecting devices from Gnome Shell's panel on Gnome 3.2.1 fails because
7of an undefined variable in
8js/ui/status/bluetooth.js:buildDeviceSubMenu. More explicitly, the
9menuitem variable is not declared and hence connecting and disconnecting
10fails. Fix it to make the bluetooth panel menu item work.
11---
12 js/ui/status/bluetooth.js | 3 ++-
13 1 files changed, 2 insertions(+), 1 deletions(-)
14
15diff --git a/js/ui/status/bluetooth.js b/js/ui/status/bluetooth.js
16index f2d95f5..3aa7960 100644
17--- a/js/ui/status/bluetooth.js
18+++ b/js/ui/status/bluetooth.js
19@@ -205,7 +205,8 @@ Indicator.prototype = {
20 _buildDeviceSubMenu: function(item, device) {
21 if (device.can_connect) {
22 item._connected = device.connected;
23- item._connectedMenuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
24+ let menuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
25+ item._connectedMenuitem = menuitem;
26 item._connectedMenuitem.connect('toggled', Lang.bind(this, function() {
27 if (item._connected > ConnectionState.CONNECTED) {
28 // operation already in progress, revert
29--
301.7.8
31
032
=== modified file 'debian/patches/series'
--- debian/patches/series 2011-09-22 08:50:45 +0000
+++ debian/patches/series 2012-01-18 14:13:28 +0000
@@ -1,2 +1,2 @@
101_favorite_apps.patch
203_remove-glx-dependency-on-armel.patch103_remove-glx-dependency-on-armel.patch
204_bluetooth-fix-connection-from-gs-menu.patch
33
=== modified file 'js/Makefile.am'
--- js/Makefile.am 2011-09-22 08:50:45 +0000
+++ js/Makefile.am 2012-01-18 14:13:28 +0000
@@ -46,6 +46,7 @@
46 ui/messageTray.js \46 ui/messageTray.js \
47 ui/modalDialog.js \47 ui/modalDialog.js \
48 ui/networkAgent.js \48 ui/networkAgent.js \
49 ui/shellEntry.js \
49 ui/shellMountOperation.js \50 ui/shellMountOperation.js \
50 ui/notificationDaemon.js \51 ui/notificationDaemon.js \
51 ui/overview.js \52 ui/overview.js \
5253
=== modified file 'js/Makefile.in'
--- js/Makefile.in 2011-09-22 08:50:45 +0000
+++ js/Makefile.in 2012-01-18 14:13:28 +0000
@@ -337,6 +337,7 @@
337 ui/messageTray.js \337 ui/messageTray.js \
338 ui/modalDialog.js \338 ui/modalDialog.js \
339 ui/networkAgent.js \339 ui/networkAgent.js \
340 ui/shellEntry.js \
340 ui/shellMountOperation.js \341 ui/shellMountOperation.js \
341 ui/notificationDaemon.js \342 ui/notificationDaemon.js \
342 ui/overview.js \343 ui/overview.js \
343344
=== modified file 'js/gdm/batch.js'
--- js/gdm/batch.js 2011-09-04 08:02:35 +0000
+++ js/gdm/batch.js 2012-01-18 14:13:28 +0000
@@ -1,5 +1,5 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2 *2/*
3 * Copyright 2011 Red Hat, Inc3 * Copyright 2011 Red Hat, Inc
4 *4 *
5 * This program is free software; you can redistribute it and/or modify5 * This program is free software; you can redistribute it and/or modify
66
=== modified file 'js/gdm/consoleKit.js'
--- js/gdm/consoleKit.js 2011-09-21 16:26:15 +0000
+++ js/gdm/consoleKit.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DBus = imports.dbus;3const DBus = imports.dbus;
44
55
=== modified file 'js/gdm/fingerprint.js'
--- js/gdm/fingerprint.js 2011-09-21 16:26:15 +0000
+++ js/gdm/fingerprint.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DBus = imports.dbus;3const DBus = imports.dbus;
4const Lang = imports.lang;4const Lang = imports.lang;
55
=== modified file 'js/gdm/loginDialog.js'
--- js/gdm/loginDialog.js 2011-09-21 16:26:15 +0000
+++ js/gdm/loginDialog.js 2012-01-18 14:13:28 +0000
@@ -1,5 +1,5 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2 *2/*
3 * Copyright 2011 Red Hat, Inc3 * Copyright 2011 Red Hat, Inc
4 *4 *
5 * This program is free software; you can redistribute it and/or modify5 * This program is free software; you can redistribute it and/or modify
@@ -297,6 +297,20 @@
297 x_align: St.Align.START,297 x_align: St.Align.START,
298 y_align: St.Align.MIDDLE });298 y_align: St.Align.MIDDLE });
299 this._items = {};299 this._items = {};
300
301 this.actor.connect('key-focus-in', Lang.bind(this, this._moveFocusToItems));
302 },
303
304 _moveFocusToItems: function() {
305 let hasItems = Object.keys(this._items).length > 0;
306
307 if (!hasItems)
308 return;
309
310 if (global.stage.get_key_focus() != this.actor)
311 return;
312
313 this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
300 },314 },
301315
302 _showItem: function(item) {316 _showItem: function(item) {
@@ -502,6 +516,8 @@
502 item.showFocusAnimation(0);516 item.showFocusAnimation(0);
503 }));517 }));
504518
519 this._moveFocusToItems();
520
505 this.emit('item-added', item);521 this.emit('item-added', item);
506 },522 },
507523
@@ -694,10 +710,13 @@
694 let ids = GdmGreeter.get_session_ids();710 let ids = GdmGreeter.get_session_ids();
695 ids.sort();711 ids.sort();
696712
697 if (ids.length <= 1)713 if (ids.length <= 1) {
698 this._box.hide();714 this._box.hide();
699 else715 this._button.hide();
716 } else {
717 this._button.show();
700 this._box.show();718 this._box.show();
719 }
701720
702 for (let i = 0; i < ids.length; i++) {721 for (let i = 0; i < ids.length; i++) {
703 let [sessionName, sessionDescription] = GdmGreeter.get_session_name_and_description(ids[i]);722 let [sessionName, sessionDescription] = GdmGreeter.get_session_name_and_description(ids[i]);
@@ -922,6 +941,7 @@
922941
923 function() {942 function() {
924 this._sessionList.close();943 this._sessionList.close();
944 this._promptFingerprintMessage.hide();
925 this._userList.actor.show();945 this._userList.actor.show();
926 this._userList.actor.opacity = 255;946 this._userList.actor.opacity = 255;
927 return this._userList.showItems();947 return this._userList.showItems();
@@ -943,7 +963,18 @@
943 },963 },
944964
945 _onInfo: function(client, serviceName, info) {965 _onInfo: function(client, serviceName, info) {
946 // we don't want fingerprint messages with the word UPEK in them966 // We don't display fingerprint messages, because they
967 // have words like UPEK in them. Instead we use the messages
968 // as a cue to display our own message.
969 if (serviceName == _FINGERPRINT_SERVICE_NAME &&
970 this._haveFingerprintReader &&
971 (!this._promptFingerprintMessage.visible ||
972 this._promptFingerprintMessage.opacity != 255)) {
973
974 _fadeInActor(this._promptFingerprintMessage);
975 return;
976 }
977
947 if (serviceName != _PASSWORD_SERVICE_NAME)978 if (serviceName != _PASSWORD_SERVICE_NAME)
948 return;979 return;
949 Main.notifyError(info);980 Main.notifyError(info);
@@ -971,10 +1002,10 @@
971 },1002 },
9721003
973 function() {1004 function() {
974 if (!this._haveFingerprintReader)1005 // Show it with 0 opacity so we preallocate space for it
975 return null;1006 // in the event we need to fade in the message
9761007 this._promptFingerprintMessage.opacity = 0;
977 return _fadeInActor(this._promptFingerprintMessage);1008 this._promptFingerprintMessage.show();
978 },1009 },
9791010
980 function() {1011 function() {
@@ -1046,6 +1077,8 @@
10461077
1047 function() {1078 function() {
1048 this._promptFingerprintMessage.hide();1079 this._promptFingerprintMessage.hide();
1080 this._promptEntry.reactive = true;
1081 this._promptEntry.remove_style_pseudo_class('insensitive');
1049 this._promptEntry.set_text('');1082 this._promptEntry.set_text('');
1050 }];1083 }];
10511084
@@ -1061,7 +1094,8 @@
10611094
1062 function() {1095 function() {
1063 let _text = this._promptEntry.get_text();1096 let _text = this._promptEntry.get_text();
1064 this._promptEntry.set_text('');1097 this._promptEntry.reactive = false;
1098 this._promptEntry.add_style_pseudo_class('insensitive');
1065 this._greeterClient.call_answer_query(serviceName, _text);1099 this._greeterClient.call_answer_query(serviceName, _text);
1066 }];1100 }];
10671101
10681102
=== modified file 'js/gdm/powerMenu.js'
--- js/gdm/powerMenu.js 2011-09-21 16:26:15 +0000
+++ js/gdm/powerMenu.js 2012-01-18 14:13:28 +0000
@@ -1,5 +1,5 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2 *2/*
3 * Copyright 2011 Red Hat, Inc3 * Copyright 2011 Red Hat, Inc
4 *4 *
5 * This program is free software; you can redistribute it and/or modify5 * This program is free software; you can redistribute it and/or modify
66
=== modified file 'js/misc/config.js'
--- js/misc/config.js 2011-09-28 00:41:45 +0000
+++ js/misc/config.js 2012-01-18 14:13:28 +0000
@@ -1,10 +1,11 @@
1/* mode: js2; indent-tabs-mode: nil; tab-size: 4 */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2
2/* The name of this package (not localized) */3/* The name of this package (not localized) */
3const PACKAGE_NAME = 'gnome-shell';4const PACKAGE_NAME = 'gnome-shell';
4/* The version of this package */5/* The version of this package */
5const PACKAGE_VERSION = '3.2.0';6const PACKAGE_VERSION = '3.2.1';
6/* The version of GJS we're linking to */7/* The version of GJS we're linking to */
7const GJS_VERSION = '1.29.19';8const GJS_VERSION = '1.30.0';
8/* 1 if gnome-bluetooth is available, 0 otherwise */9/* 1 if gnome-bluetooth is available, 0 otherwise */
9const HAVE_BLUETOOTH = 1;10const HAVE_BLUETOOTH = 1;
10/* The system TLS CA list */11/* The system TLS CA list */
1112
=== modified file 'js/misc/config.js.in'
--- js/misc/config.js.in 2011-09-21 16:26:15 +0000
+++ js/misc/config.js.in 2012-01-18 14:13:28 +0000
@@ -1,4 +1,5 @@
1/* mode: js2; indent-tabs-mode: nil; tab-size: 4 */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2
2/* The name of this package (not localized) */3/* The name of this package (not localized) */
3const PACKAGE_NAME = '@PACKAGE_NAME@';4const PACKAGE_NAME = '@PACKAGE_NAME@';
4/* The version of this package */5/* The version of this package */
56
=== modified file 'js/misc/docInfo.js'
--- js/misc/docInfo.js 2011-02-25 12:23:23 +0000
+++ js/misc/docInfo.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const St = imports.gi.St;3const St = imports.gi.St;
4const Shell = imports.gi.Shell;4const Shell = imports.gi.Shell;
55
=== modified file 'js/misc/fileUtils.js'
--- js/misc/fileUtils.js 2011-09-21 16:26:15 +0000
+++ js/misc/fileUtils.js 2012-01-18 14:13:28 +0000
@@ -1,3 +1,5 @@
1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2
1const Gio = imports.gi.Gio;3const Gio = imports.gi.Gio;
2const GLib = imports.gi.GLib;4const GLib = imports.gi.GLib;
35
46
=== modified file 'js/misc/format.js'
--- js/misc/format.js 2010-07-13 14:36:34 +0000
+++ js/misc/format.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3/*3/*
4 * This function is intended to extend the String object and provide4 * This function is intended to extend the String object and provide
55
=== modified file 'js/misc/gnomeSession.js'
--- js/misc/gnomeSession.js 2011-07-20 14:46:28 +0000
+++ js/misc/gnomeSession.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DBus = imports.dbus;3const DBus = imports.dbus;
4const Lang = imports.lang;4const Lang = imports.lang;
@@ -78,7 +78,7 @@
78Inhibitor.prototype = {78Inhibitor.prototype = {
79 _init: function(objectPath) {79 _init: function(objectPath) {
80 DBus.session.proxifyObject(this,80 DBus.session.proxifyObject(this,
81 "org.gnome.SessionManager",81 'org.gnome.SessionManager',
82 objectPath);82 objectPath);
83 this.isLoaded = false;83 this.isLoaded = false;
84 this._loadingPropertiesCount = InhibitorIface.properties.length;84 this._loadingPropertiesCount = InhibitorIface.properties.length;
@@ -94,7 +94,7 @@
9494
95 if (this._loadingPropertiesCount == 0) {95 if (this._loadingPropertiesCount == 0) {
96 this.isLoaded = true;96 this.isLoaded = true;
97 this.emit("is-loaded");97 this.emit('is-loaded');
98 }98 }
99 }));99 }));
100 }100 }
101101
=== modified file 'js/misc/history.js'
--- js/misc/history.js 2011-05-31 19:31:47 +0000
+++ js/misc/history.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Lang = imports.lang;3const Lang = imports.lang;
4const Signals = imports.signals;4const Signals = imports.signals;
55
=== modified file 'js/misc/modemManager.js'
--- js/misc/modemManager.js 2011-03-24 19:28:12 +0000
+++ js/misc/modemManager.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DBus = imports.dbus;3const DBus = imports.dbus;
4const Lang = imports.lang;4const Lang = imports.lang;
55
=== modified file 'js/misc/params.js'
--- js/misc/params.js 2010-05-31 11:03:29 +0000
+++ js/misc/params.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3// parse:3// parse:
4// @params: caller-provided parameter object, or %null4// @params: caller-provided parameter object, or %null
55
=== modified file 'js/misc/screenSaver.js'
--- js/misc/screenSaver.js 2011-08-24 02:33:44 +0000
+++ js/misc/screenSaver.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DBus = imports.dbus;3const DBus = imports.dbus;
4const Lang = imports.lang;4const Lang = imports.lang;
55
=== modified file 'js/misc/util.js'
--- js/misc/util.js 2011-09-21 16:26:15 +0000
+++ js/misc/util.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Gdk = imports.gi.Gdk;3const Gdk = imports.gi.Gdk;
4const Gio = imports.gi.Gio;4const Gio = imports.gi.Gio;
55
=== modified file 'js/perf/core.js'
--- js/perf/core.js 2011-09-04 08:02:35 +0000
+++ js/perf/core.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Main = imports.ui.main;3const Main = imports.ui.main;
4const Scripting = imports.ui.scripting;4const Scripting = imports.ui.scripting;
55
=== modified file 'js/ui/altTab.js'
--- js/ui/altTab.js 2011-09-22 08:50:45 +0000
+++ js/ui/altTab.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Gdk = imports.gi.Gdk;4const Gdk = imports.gi.Gdk;
@@ -134,11 +134,40 @@
134 }134 }
135 },135 },
136136
137 _getAppLists: function() {
138 let tracker = Shell.WindowTracker.get_default();
139 let appSys = Shell.AppSystem.get_default();
140 let allApps = appSys.get_running ();
141
142 let screen = global.screen;
143 let display = screen.get_display();
144 let windows = display.get_tab_list(Meta.TabList.NORMAL, screen,
145 screen.get_active_workspace());
146
147 // windows is only the windows on the current workspace. For
148 // each one, if it corresponds to an app we know, move that
149 // app from allApps to apps.
150 let apps = [];
151 for (let i = 0; i < windows.length && allApps.length != 0; i++) {
152 let app = tracker.get_window_app(windows[i]);
153 let index = allApps.indexOf(app);
154 if (index != -1) {
155 apps.push(app);
156 allApps.splice(index, 1);
157 }
158 }
159
160 // Now @apps is a list of apps on the current workspace, in
161 // standard Alt+Tab order (MRU except for minimized windows),
162 // and allApps is a list of apps that only appear on other
163 // workspaces, sorted by user_time, which is good enough.
164 return [apps, allApps];
165 },
166
137 show : function(backward, binding, mask) {167 show : function(backward, binding, mask) {
138 let appSys = Shell.AppSystem.get_default();168 let [localApps, otherApps] = this._getAppLists();
139 let apps = appSys.get_running ();
140169
141 if (!apps.length)170 if (localApps.length == 0 && otherApps.length == 0)
142 return false;171 return false;
143172
144 if (!Main.pushModal(this.actor))173 if (!Main.pushModal(this.actor))
@@ -152,7 +181,7 @@
152 this.actor.connect('button-press-event', Lang.bind(this, this._clickedOutside));181 this.actor.connect('button-press-event', Lang.bind(this, this._clickedOutside));
153 this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));182 this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
154183
155 this._appSwitcher = new AppSwitcher(apps, this);184 this._appSwitcher = new AppSwitcher(localApps, otherApps, this);
156 this.actor.add_actor(this._appSwitcher.actor);185 this.actor.add_actor(this._appSwitcher.actor);
157 this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));186 this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));
158 this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered));187 this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered));
@@ -846,33 +875,32 @@
846 }875 }
847};876};
848877
849function AppSwitcher(apps, altTabPopup) {878function AppSwitcher() {
850 this._init(apps, altTabPopup);879 this._init.apply(this, arguments);
851}880}
852881
853AppSwitcher.prototype = {882AppSwitcher.prototype = {
854 __proto__ : SwitcherList.prototype,883 __proto__ : SwitcherList.prototype,
855884
856 _init : function(apps, altTabPopup) {885 _init : function(localApps, otherApps, altTabPopup) {
857 SwitcherList.prototype._init.call(this, true);886 SwitcherList.prototype._init.call(this, true);
858887
859 // Construct the AppIcons, sort by time, add to the popup888 // Construct the AppIcons, add to the popup
860 let activeWorkspace = global.screen.get_active_workspace();889 let activeWorkspace = global.screen.get_active_workspace();
861 let workspaceIcons = [];890 let workspaceIcons = [];
862 let otherIcons = [];891 let otherIcons = [];
863 for (let i = 0; i < apps.length; i++) {892 for (let i = 0; i < localApps.length; i++) {
864 let appIcon = new AppIcon(apps[i]);893 let appIcon = new AppIcon(localApps[i]);
865 // Cache the window list now; we don't handle dynamic changes here,894 // Cache the window list now; we don't handle dynamic changes here,
866 // and we don't want to be continually retrieving it895 // and we don't want to be continually retrieving it
867 appIcon.cachedWindows = appIcon.app.get_windows();896 appIcon.cachedWindows = appIcon.app.get_windows();
868 if (this._hasWindowsOnWorkspace(appIcon, activeWorkspace))897 workspaceIcons.push(appIcon);
869 workspaceIcons.push(appIcon);898 }
870 else899 for (let i = 0; i < otherApps.length; i++) {
871 otherIcons.push(appIcon);900 let appIcon = new AppIcon(otherApps[i]);
872 }901 appIcon.cachedWindows = appIcon.app.get_windows();
873902 otherIcons.push(appIcon);
874 workspaceIcons.sort(Lang.bind(this, this._sortAppIcon));903 }
875 otherIcons.sort(Lang.bind(this, this._sortAppIcon));
876904
877 this.icons = [];905 this.icons = [];
878 this._arrows = [];906 this._arrows = [];
@@ -1012,19 +1040,6 @@
10121040
1013 if (appIcon.cachedWindows.length == 1)1041 if (appIcon.cachedWindows.length == 1)
1014 arrow.hide();1042 arrow.hide();
1015 },
1016
1017 _hasWindowsOnWorkspace: function(appIcon, workspace) {
1018 let windows = appIcon.cachedWindows;
1019 for (let i = 0; i < windows.length; i++) {
1020 if (windows[i].get_workspace() == workspace)
1021 return true;
1022 }
1023 return false;
1024 },
1025
1026 _sortAppIcon : function(appIcon1, appIcon2) {
1027 return appIcon1.app.compare(appIcon2.app);
1028 }1043 }
1029};1044};
10301045
10311046
=== modified file 'js/ui/appDisplay.js'
--- js/ui/appDisplay.js 2011-09-21 16:26:15 +0000
+++ js/ui/appDisplay.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const GLib = imports.gi.GLib;4const GLib = imports.gi.GLib;
55
=== modified file 'js/ui/appFavorites.js'
--- js/ui/appFavorites.js 2011-09-04 08:02:35 +0000
+++ js/ui/appFavorites.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Shell = imports.gi.Shell;3const Shell = imports.gi.Shell;
4const Lang = imports.lang;4const Lang = imports.lang;
55
=== modified file 'js/ui/automountManager.js'
--- js/ui/automountManager.js 2011-08-24 02:33:44 +0000
+++ js/ui/automountManager.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Lang = imports.lang;3const Lang = imports.lang;
4const DBus = imports.dbus;4const DBus = imports.dbus;
@@ -209,10 +209,14 @@
209 }209 }
210 }210 }
211211
212 // Volume is already mounted, don't bother.
213 if (volume.get_mount())
214 return;
215
212 if (!this._settings.get_boolean(SETTING_ENABLE_AUTOMOUNT) ||216 if (!this._settings.get_boolean(SETTING_ENABLE_AUTOMOUNT) ||
213 !volume.should_automount() ||217 !volume.should_automount() ||
214 !volume.can_mount()) {218 !volume.can_mount()) {
215 // allow the autorun to run anyway; this can happen if the219 // allow the autorun to run anyway; this can happen if the
216 // mount gets added programmatically later, even if 220 // mount gets added programmatically later, even if
217 // should_automount() or can_mount() are false, like for221 // should_automount() or can_mount() are false, like for
218 // blank optical media.222 // blank optical media.
219223
=== modified file 'js/ui/autorunManager.js'
--- js/ui/autorunManager.js 2011-09-28 00:41:45 +0000
+++ js/ui/autorunManager.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Lang = imports.lang;3const Lang = imports.lang;
4const DBus = imports.dbus;4const DBus = imports.dbus;
@@ -491,7 +491,7 @@
491 let app = null;491 let app = null;
492492
493 if (setting == AutorunSetting.RUN) {493 if (setting == AutorunSetting.RUN) {
494 app = Gio.app_info_get_default_for_type(type, false);494 app = Gio.app_info_get_default_for_type(contentTypes[0], false);
495 } else if (setting == AutorunSetting.FILES) {495 } else if (setting == AutorunSetting.FILES) {
496 app = Gio.app_info_get_default_for_type('inode/directory', false);496 app = Gio.app_info_get_default_for_type('inode/directory', false);
497 }497 }
498498
=== modified file 'js/ui/boxpointer.js'
--- js/ui/boxpointer.js 2011-09-04 08:02:35 +0000
+++ js/ui/boxpointer.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Lang = imports.lang;4const Lang = imports.lang;
@@ -46,6 +46,7 @@
46 this._yOffset = 0;46 this._yOffset = 0;
47 this._xPosition = 0;47 this._xPosition = 0;
48 this._yPosition = 0;48 this._yPosition = 0;
49 this._sourceAlignment = 0.5;
49 },50 },
5051
51 show: function(animate, onComplete) {52 show: function(animate, onComplete) {
@@ -75,7 +76,7 @@
75 Tweener.addTween(this, { opacity: 255,76 Tweener.addTween(this, { opacity: 255,
76 xOffset: 0,77 xOffset: 0,
77 yOffset: 0,78 yOffset: 0,
78 transition: "linear",79 transition: 'linear',
79 onComplete: onComplete,80 onComplete: onComplete,
80 time: POPUP_ANIMATION_TIME });81 time: POPUP_ANIMATION_TIME });
81 },82 },
@@ -106,7 +107,7 @@
106 Tweener.addTween(this, { opacity: 0,107 Tweener.addTween(this, { opacity: 0,
107 xOffset: xOffset,108 xOffset: xOffset,
108 yOffset: yOffset,109 yOffset: yOffset,
109 transition: "linear",110 transition: 'linear',
110 time: POPUP_ANIMATION_TIME,111 time: POPUP_ANIMATION_TIME,
111 onComplete: Lang.bind(this, function () {112 onComplete: Lang.bind(this, function () {
112 this.actor.hide();113 this.actor.hide();
@@ -180,7 +181,7 @@
180 this.bin.allocate(childBox, flags);181 this.bin.allocate(childBox, flags);
181182
182 if (this._sourceActor && this._sourceActor.mapped)183 if (this._sourceActor && this._sourceActor.mapped)
183 this._reposition(this._sourceActor, this._alignment);184 this._reposition(this._sourceActor, this._arrowAlignment);
184 },185 },
185186
186 _drawBorder: function(area) {187 _drawBorder: function(area) {
@@ -312,24 +313,37 @@
312 this.actor.show();313 this.actor.show();
313314
314 this._sourceActor = sourceActor;315 this._sourceActor = sourceActor;
315 this._alignment = alignment;316 this._arrowAlignment = alignment;
316317
317 this._reposition(sourceActor, alignment);318 this._reposition(sourceActor, alignment);
318 },319 },
319320
321 setSourceAlignment: function(alignment) {
322 this._sourceAlignment = alignment;
323
324 if (!this._sourceActor)
325 return;
326
327 // We need to show it now to force an allocation,
328 // so that we can query the correct size.
329 this.actor.show();
330
331 this._reposition(this._sourceActor, this._arrowAlignment);
332 },
333
320 _reposition: function(sourceActor, alignment) {334 _reposition: function(sourceActor, alignment) {
321 // Position correctly relative to the sourceActor335 // Position correctly relative to the sourceActor
322 let sourceNode = sourceActor.get_theme_node();336 let sourceNode = sourceActor.get_theme_node();
323 let sourceContentBox = sourceNode.get_content_box(sourceActor.get_allocation_box());337 let sourceContentBox = sourceNode.get_content_box(sourceActor.get_allocation_box());
324 let sourceAllocation = Shell.util_get_transformed_allocation(sourceActor);338 let sourceAllocation = Shell.util_get_transformed_allocation(sourceActor);
325 let sourceCenterX = sourceAllocation.x1 + sourceContentBox.x1 + (sourceContentBox.x2 - sourceContentBox.x1) / 2;339 let sourceCenterX = sourceAllocation.x1 + sourceContentBox.x1 + (sourceContentBox.x2 - sourceContentBox.x1) * this._sourceAlignment;
326 let sourceCenterY = sourceAllocation.y1 + sourceContentBox.y1 + (sourceContentBox.y2 - sourceContentBox.y1) / 2;340 let sourceCenterY = sourceAllocation.y1 + sourceContentBox.y1 + (sourceContentBox.y2 - sourceContentBox.y1) * this._sourceAlignment;
327 let [minWidth, minHeight, natWidth, natHeight] = this.actor.get_preferred_size();341 let [minWidth, minHeight, natWidth, natHeight] = this.actor.get_preferred_size();
328342
329 // We also want to keep it onscreen, and separated from the343 // We also want to keep it onscreen, and separated from the
330 // edge by the same distance as the main part of the box is344 // edge by the same distance as the main part of the box is
331 // separated from its sourceActor345 // separated from its sourceActor
332 let primary = Main.layoutManager.primaryMonitor;346 let monitor = Main.layoutManager.findMonitorForActor(sourceActor);
333 let themeNode = this.actor.get_theme_node();347 let themeNode = this.actor.get_theme_node();
334 let borderWidth = themeNode.get_length('-arrow-border-width');348 let borderWidth = themeNode.get_length('-arrow-border-width');
335 let arrowBase = themeNode.get_length('-arrow-base');349 let arrowBase = themeNode.get_length('-arrow-base');
@@ -364,8 +378,8 @@
364 case St.Side.BOTTOM:378 case St.Side.BOTTOM:
365 resX = sourceCenterX - (halfMargin + (natWidth - margin) * alignment);379 resX = sourceCenterX - (halfMargin + (natWidth - margin) * alignment);
366380
367 resX = Math.max(resX, primary.x + 10);381 resX = Math.max(resX, monitor.x + 10);
368 resX = Math.min(resX, primary.x + primary.width - (10 + natWidth));382 resX = Math.min(resX, monitor.x + monitor.width - (10 + natWidth));
369 this.setArrowOrigin(sourceCenterX - resX);383 this.setArrowOrigin(sourceCenterX - resX);
370 break;384 break;
371385
@@ -373,8 +387,8 @@
373 case St.Side.RIGHT:387 case St.Side.RIGHT:
374 resY = sourceCenterY - (halfMargin + (natHeight - margin) * alignment);388 resY = sourceCenterY - (halfMargin + (natHeight - margin) * alignment);
375389
376 resY = Math.max(resY, primary.y + 10);390 resY = Math.max(resY, monitor.y + 10);
377 resY = Math.min(resY, primary.y + primary.height - (10 + natHeight));391 resY = Math.min(resY, monitor.y + monitor.height - (10 + natHeight));
378392
379 this.setArrowOrigin(sourceCenterY - resY);393 this.setArrowOrigin(sourceCenterY - resY);
380 break;394 break;
381395
=== modified file 'js/ui/calendar.js'
--- js/ui/calendar.js 2011-09-04 08:02:35 +0000
+++ js/ui/calendar.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DBus = imports.dbus;3const DBus = imports.dbus;
4const Clutter = imports.gi.Clutter;4const Clutter = imports.gi.Clutter;
55
=== modified file 'js/ui/contactDisplay.js'
--- js/ui/contactDisplay.js 2011-09-04 08:02:35 +0000
+++ js/ui/contactDisplay.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Folks = imports.gi.Folks3const Folks = imports.gi.Folks
4const Lang = imports.lang;4const Lang = imports.lang;
@@ -26,7 +26,8 @@
2626
27Contact.prototype = {27Contact.prototype = {
28 _init: function(id) {28 _init: function(id) {
29 this.individual = Shell.ContactSystem.get_default().get_individual(id);29 this._contactSys = Shell.ContactSystem.get_default();
30 this.individual = this._contactSys.get_individual(id);
3031
31 this.actor = new St.Bin({ style_class: 'contact',32 this.actor = new St.Bin({ style_class: 'contact',
32 reactive: true,33 reactive: true,
@@ -56,7 +57,12 @@
56 x_align: St.Align.START,57 x_align: St.Align.START,
57 y_align: St.Align.MIDDLE });58 y_align: St.Align.MIDDLE });
5859
59 let aliasText = this.individual.alias || _("Unknown");60 let email = this._contactSys.get_email_for_display(this.individual);
61 let aliasText = this.individual.alias ||
62 this.individual.full_name ||
63 this.individual.nickname ||
64 email ||
65 _("Unknown");
60 let aliasLabel = new St.Label({ text: aliasText,66 let aliasLabel = new St.Label({ text: aliasText,
61 style_class: 'contact-details-alias' });67 style_class: 'contact-details-alias' });
62 details.add(aliasLabel, { x_fill: true,68 details.add(aliasLabel, { x_fill: true,
6369
=== modified file 'js/ui/ctrlAltTab.js'
--- js/ui/ctrlAltTab.js 2011-09-21 16:26:15 +0000
+++ js/ui/ctrlAltTab.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Gdk = imports.gi.Gdk;4const Gdk = imports.gi.Gdk;
55
=== modified file 'js/ui/dash.js'
--- js/ui/dash.js 2011-09-21 16:26:15 +0000
+++ js/ui/dash.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Signals = imports.signals;4const Signals = imports.signals;
@@ -37,6 +37,7 @@
37 this.child = null;37 this.child = null;
38 this._childScale = 1;38 this._childScale = 1;
39 this._childOpacity = 255;39 this._childOpacity = 255;
40 this.animatingOut = false;
40 },41 },
4142
42 _allocate: function(actor, box, flags) {43 _allocate: function(actor, box, flags) {
@@ -115,6 +116,7 @@
115 return;116 return;
116 }117 }
117118
119 this.animatingOut = true;
118 this.childScale = 1.0;120 this.childScale = 1.0;
119 Tweener.addTween(this,121 Tweener.addTween(this,
120 { childScale: 0.0,122 { childScale: 0.0,
@@ -177,12 +179,6 @@
177 this._iconBin._delegate = this;179 this._iconBin._delegate = this;
178180
179 this.setChild(this._iconBin);181 this.setChild(this._iconBin);
180 this.hiding = false;
181 },
182
183 animateOutAndDestroy: function() {
184 DashItemContainer.prototype.animateOutAndDestroy.call(this);
185 this.hiding = true;
186 },182 },
187183
188 _createIcon: function(size) {184 _createIcon: function(size) {
@@ -314,15 +310,12 @@
314 _endDrag: function() {310 _endDrag: function() {
315 this._clearDragPlaceholder();311 this._clearDragPlaceholder();
316 if (this._favRemoveTarget) {312 if (this._favRemoveTarget) {
317 this._favRemoveTarget.actor.hide();
318 this._adjustIconSize();
319 this._favRemoveTarget.actor.show();
320
321 this._favRemoveTarget.animateOutAndDestroy();313 this._favRemoveTarget.animateOutAndDestroy();
322 this._favRemoveTarget.actor.connect('destroy', Lang.bind(this,314 this._favRemoveTarget.actor.connect('destroy', Lang.bind(this,
323 function() {315 function() {
324 this._favRemoveTarget = null;316 this._favRemoveTarget = null;
325 }));317 }));
318 this._adjustIconSize();
326 }319 }
327 DND.removeDragMonitor(this._dragMonitor);320 DND.removeDragMonitor(this._dragMonitor);
328 },321 },
@@ -401,8 +394,18 @@
401 },394 },
402395
403 _adjustIconSize: function() {396 _adjustIconSize: function() {
404 let children = this._box.get_children();397 // For the icon size, we only consider children which are "proper"
405 if (children.length == 0) {398 // icons (i.e. ignoring drag placeholders) and which are not
399 // animating out (which means they will be destroyed at the end of
400 // the animation)
401 let iconChildren = this._box.get_children().filter(function(actor) {
402 return actor._delegate.child &&
403 actor._delegate.child._delegate &&
404 actor._delegate.child._delegate.icon &&
405 !actor._delegate.animatingOut;
406 });
407
408 if (iconChildren.length == 0) {
406 this._box.add_style_pseudo_class('empty');409 this._box.add_style_pseudo_class('empty');
407 return;410 return;
408 }411 }
@@ -412,23 +415,45 @@
412 if (this._maxHeight == -1)415 if (this._maxHeight == -1)
413 return;416 return;
414417
415 let iconChildren = children.filter(function(actor) {418
416 return actor.visible &&419 let themeNode = this.actor.get_theme_node();
417 actor._delegate.child &&420 let maxAllocation = new Clutter.ActorBox({ x1: 0, y1: 0,
418 actor._delegate.child._delegate &&421 x2: 42 /* whatever */,
419 actor._delegate.child._delegate.icon;422 y2: this._maxHeight });
420 });423 let maxContent = themeNode.get_content_box(maxAllocation);
421424 let availHeight = maxContent.y2 - maxContent.y1;
422 // Compute the amount of extra space (or missing space) we have425 let spacing = themeNode.get_length('spacing');
423 // per icon with the current icon size426
424 let [minHeight, natHeight] = this.actor.get_preferred_height(-1);427
425 let diff = (this._maxHeight - natHeight) / iconChildren.length;428 let firstIcon = iconChildren[0]._delegate.child._delegate.icon;
429
430 let minHeight, natHeight;
431
432 // Enforce the current icon size during the size request if
433 // the icon is animating
434 if (firstIcon._animating) {
435 let [currentWidth, currentHeight] = firstIcon.icon.get_size();
436
437 firstIcon.icon.set_size(this.iconSize, this.iconSize);
438 [minHeight, natHeight] = iconChildren[0].get_preferred_height(-1);
439
440 firstIcon.icon.set_size(currentWidth, currentHeight);
441 } else {
442 [minHeight, natHeight] = iconChildren[0].get_preferred_height(-1);
443 }
444
445
446 // Subtract icon padding and box spacing from the available height
447 availHeight -= iconChildren.length * (natHeight - this.iconSize) +
448 (iconChildren.length - 1) * spacing;
449
450 let availSize = availHeight / iconChildren.length;
426451
427 let iconSizes = [ 16, 22, 24, 32, 48, 64 ];452 let iconSizes = [ 16, 22, 24, 32, 48, 64 ];
428453
429 let newIconSize = 16;454 let newIconSize = 16;
430 for (let i = 0; i < iconSizes.length; i++) {455 for (let i = 0; i < iconSizes.length; i++) {
431 if (iconSizes[i] < this.iconSize + diff)456 if (iconSizes[i] < availSize)
432 newIconSize = iconSizes[i];457 newIconSize = iconSizes[i];
433 }458 }
434459
@@ -459,11 +484,15 @@
459 icon.icon.set_size(icon.icon.width * scale,484 icon.icon.set_size(icon.icon.width * scale,
460 icon.icon.height * scale);485 icon.icon.height * scale);
461486
487 icon._animating = true;
462 Tweener.addTween(icon.icon,488 Tweener.addTween(icon.icon,
463 { width: targetWidth,489 { width: targetWidth,
464 height: targetHeight,490 height: targetHeight,
465 time: DASH_ANIMATION_TIME,491 time: DASH_ANIMATION_TIME,
466 transition: 'easeOutQuad'492 transition: 'easeOutQuad',
493 onComplete: function() {
494 icon._animating = false;
495 }
467 });496 });
468 }497 }
469 },498 },
@@ -566,29 +595,7 @@
566 this._box.insert_actor(addedItems[i].item.actor,595 this._box.insert_actor(addedItems[i].item.actor,
567 addedItems[i].pos);596 addedItems[i].pos);
568597
569 // Hide removed actors to not take them into account
570 // when adjusting the icon size ...
571 for (let i = 0; i < removedActors.length; i++)
572 removedActors[i].hide();
573
574 // ... and do the same for the remove target if necessary
575 if (this._favRemoveTarget && this._favRemoveTarget.hiding)
576 this._favRemoveTarget.actor.hide();
577
578 this._adjustIconSize();
579
580 if (this._favRemoveTarget && this._favRemoveTarget.hiding)
581 this._favRemoveTarget.actor.show();
582
583 // Skip animations on first run when adding the initial set
584 // of items, to avoid all items zooming in at once
585 if (!this._shownInitially) {
586 this._shownInitially = true;
587 return;
588 }
589
590 for (let i = 0; i < removedActors.length; i++) {598 for (let i = 0; i < removedActors.length; i++) {
591 removedActors[i].show();
592 let item = removedActors[i]._delegate;599 let item = removedActors[i]._delegate;
593600
594 // Don't animate item removal when the overview is hidden601 // Don't animate item removal when the overview is hidden
@@ -598,6 +605,15 @@
598 item.actor.destroy();605 item.actor.destroy();
599 }606 }
600607
608 this._adjustIconSize();
609
610 // Skip animations on first run when adding the initial set
611 // of items, to avoid all items zooming in at once
612 if (!this._shownInitially) {
613 this._shownInitially = true;
614 return;
615 }
616
601 // Don't animate item addition when the overview is hidden617 // Don't animate item addition when the overview is hidden
602 if (!Main.overview.visible)618 if (!Main.overview.visible)
603 return;619 return;
604620
=== modified file 'js/ui/dateMenu.js'
--- js/ui/dateMenu.js 2011-09-21 16:26:15 +0000
+++ js/ui/dateMenu.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const GLib = imports.gi.GLib;3const GLib = imports.gi.GLib;
4const Gio = imports.gi.Gio;4const Gio = imports.gi.Gio;
55
=== modified file 'js/ui/dnd.js'
--- js/ui/dnd.js 2011-07-20 14:46:28 +0000
+++ js/ui/dnd.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Gtk = imports.gi.Gtk;4const Gtk = imports.gi.Gtk;
55
=== modified file 'js/ui/docDisplay.js'
--- js/ui/docDisplay.js 2011-09-04 08:02:35 +0000
+++ js/ui/docDisplay.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DocInfo = imports.misc.docInfo;3const DocInfo = imports.misc.docInfo;
4const Params = imports.misc.params;4const Params = imports.misc.params;
55
=== modified file 'js/ui/endSessionDialog.js'
--- js/ui/endSessionDialog.js 2011-09-21 16:26:15 +0000
+++ js/ui/endSessionDialog.js 2012-01-18 14:13:28 +0000
@@ -1,5 +1,5 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2 *2/*
3 * Copyright 2010 Red Hat, Inc3 * Copyright 2010 Red Hat, Inc
4 *4 *
5 * This program is free software; you can redistribute it and/or modify5 * This program is free software; you can redistribute it and/or modify
66
=== modified file 'js/ui/environment.js'
--- js/ui/environment.js 2011-07-20 14:46:28 +0000
+++ js/ui/environment.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3imports.gi.versions.Clutter = '1.0';3imports.gi.versions.Clutter = '1.0';
4imports.gi.versions.Gio = '2.0';4imports.gi.versions.Gio = '2.0';
55
=== modified file 'js/ui/extensionSystem.js'
--- js/ui/extensionSystem.js 2011-09-21 16:26:15 +0000
+++ js/ui/extensionSystem.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Lang = imports.lang;3const Lang = imports.lang;
4const Signals = imports.signals;4const Signals = imports.signals;
@@ -289,7 +289,7 @@
289 }289 }
290290
291 if (extensions[uuid] != undefined) {291 if (extensions[uuid] != undefined) {
292 logExtensionError(uuid, "extension already loaded");292 logExtensionError(uuid, 'extension already loaded');
293 return;293 return;
294 }294 }
295295
@@ -450,7 +450,6 @@
450}450}
451451
452function loadExtensions() {452function loadExtensions() {
453 _loadExtensionsIn(userExtensionsDir, ExtensionType.PER_USER);
454 let systemDataDirs = GLib.get_system_data_dirs();453 let systemDataDirs = GLib.get_system_data_dirs();
455 for (let i = 0; i < systemDataDirs.length; i++) {454 for (let i = 0; i < systemDataDirs.length; i++) {
456 let dirPath = systemDataDirs[i] + '/gnome-shell/extensions';455 let dirPath = systemDataDirs[i] + '/gnome-shell/extensions';
@@ -458,6 +457,7 @@
458 if (dir.query_exists(null))457 if (dir.query_exists(null))
459 _loadExtensionsIn(dir, ExtensionType.SYSTEM);458 _loadExtensionsIn(dir, ExtensionType.SYSTEM);
460 }459 }
460 _loadExtensionsIn(userExtensionsDir, ExtensionType.PER_USER);
461}461}
462462
463function InstallExtensionDialog(uuid, version_tag, name) {463function InstallExtensionDialog(uuid, version_tag, name) {
464464
=== modified file 'js/ui/iconGrid.js'
--- js/ui/iconGrid.js 2011-07-20 14:46:28 +0000
+++ js/ui/iconGrid.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Shell = imports.gi.Shell;4const Shell = imports.gi.Shell;
55
=== modified file 'js/ui/keyboard.js'
--- js/ui/keyboard.js 2011-09-28 00:41:45 +0000
+++ js/ui/keyboard.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Caribou = imports.gi.Caribou;3const Caribou = imports.gi.Caribou;
4const Clutter = imports.gi.Clutter;4const Clutter = imports.gi.Clutter;
@@ -75,7 +75,7 @@
75 this._extended_keys = this._key.get_extended_keys();75 this._extended_keys = this._key.get_extended_keys();
76 this._extended_keyboard = null;76 this._extended_keyboard = null;
7777
78 if (this._key.name == "Control_L" || this._key.name == "Alt_L")78 if (this._key.name == 'Control_L' || this._key.name == 'Alt_L')
79 this._key.latch = true;79 this._key.latch = true;
8080
81 this._key.connect('key-pressed', Lang.bind(this, function ()81 this._key.connect('key-pressed', Lang.bind(this, function ()
@@ -218,7 +218,7 @@
218 this._redraw();218 this._redraw();
219 },219 },
220220
221 _settingsChanged: function () {221 _settingsChanged: function (settings, key) {
222 this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD);222 this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD);
223 if (!this._enableKeyboard && !this._keyboard)223 if (!this._enableKeyboard && !this._keyboard)
224 return;224 return;
@@ -228,9 +228,20 @@
228228
229 if (this._keyboard)229 if (this._keyboard)
230 this._destroyKeyboard();230 this._destroyKeyboard();
231 if (this._enableKeyboard)231
232 this._setupKeyboard();232 if (this._enableKeyboard) {
233 else233 // If we've been called because the setting actually just
234 // changed to true (as opposed to being called from
235 // this._init()), then we want to pop up the keyboard.
236 let showKeyboard = (settings != null);
237
238 // However, caribou-gtk-module or this._onKeyFocusChanged
239 // will probably immediately tell us to hide it, so we
240 // have to fake things out so we'll ignore that request.
241 if (showKeyboard)
242 this._timestamp = global.display.get_current_time_roundtrip() + 1;
243 this._setupKeyboard(showKeyboard);
244 } else
234 Main.layoutManager.hideKeyboard(true);245 Main.layoutManager.hideKeyboard(true);
235 },246 },
236247
@@ -246,7 +257,7 @@
246 this._destroySource();257 this._destroySource();
247 },258 },
248259
249 _setupKeyboard: function() {260 _setupKeyboard: function(show) {
250 this.actor = new St.BoxLayout({ name: 'keyboard', vertical: true, reactive: true });261 this.actor = new St.BoxLayout({ name: 'keyboard', vertical: true, reactive: true });
251 Main.layoutManager.keyboardBox.add_actor(this.actor);262 Main.layoutManager.keyboardBox.add_actor(this.actor);
252 Main.layoutManager.trackChrome(this.actor);263 Main.layoutManager.trackChrome(this.actor);
@@ -263,20 +274,26 @@
263274
264 this._keyboardNotifyId = this._keyboard.connect('notify::active-group', Lang.bind(this, this._onGroupChanged));275 this._keyboardNotifyId = this._keyboard.connect('notify::active-group', Lang.bind(this, this._onGroupChanged));
265 this._focusNotifyId = global.stage.connect('notify::key-focus', Lang.bind(this, this._onKeyFocusChanged));276 this._focusNotifyId = global.stage.connect('notify::key-focus', Lang.bind(this, this._onKeyFocusChanged));
266 this._createSource();277
278 if (show)
279 this.show();
280 else
281 this._createSource();
267 },282 },
268283
269 _onKeyFocusChanged: function () {284 _onKeyFocusChanged: function () {
270 let focus = global.stage.key_focus;285 let focus = global.stage.key_focus;
271286
272 // Showing an extended key popup will grab focus, but ignore that287 // Showing an extended key popup and clicking a key from the extended keys
273 if (focus && focus._extended_keys)288 // will grab focus, but ignore that
289 if (focus && (focus._extended_keys || (focus._key && focus._key.extended_key)))
274 return;290 return;
275291
292 let time = global.current_event_time();
276 if (focus instanceof Clutter.Text)293 if (focus instanceof Clutter.Text)
277 this.show();294 this.Show(time);
278 else295 else
279 this.hide();296 this.Hide(time);
280 },297 },
281298
282 _addKeys: function () {299 _addKeys: function () {
@@ -305,7 +322,8 @@
305 },322 },
306323
307 _getTrayIcon: function () {324 _getTrayIcon: function () {
308 let trayButton = new St.Button ({ label: "tray", style_class: 'keyboard-key' });325 let trayButton = new St.Button ({ label: _("tray"),
326 style_class: 'keyboard-key' });
309 trayButton.key_width = 1;327 trayButton.key_width = 1;
310 trayButton.connect('button-press-event', Lang.bind(this, function () {328 trayButton.connect('button-press-event', Lang.bind(this, function () {
311 Main.messageTray.toggle();329 Main.messageTray.toggle();
@@ -339,7 +357,7 @@
339 right_box.add(button.actor);357 right_box.add(button.actor);
340 else358 else
341 left_box.add(button.actor);359 left_box.add(button.actor);
342 if (key.name == "Caribou_Prefs") {360 if (key.name == 'Caribou_Prefs') {
343 key.connect('key-released', Lang.bind(this, this.hide));361 key.connect('key-released', Lang.bind(this, this.hide));
344362
345 // Add new key for hiding message tray363 // Add new key for hiding message tray
@@ -476,6 +494,9 @@
476494
477 // D-Bus methods495 // D-Bus methods
478 Show: function(timestamp) {496 Show: function(timestamp) {
497 if (!this._enableKeyboard)
498 return;
499
479 if (timestamp - this._timestamp < 0)500 if (timestamp - this._timestamp < 0)
480 return;501 return;
481502
@@ -484,6 +505,9 @@
484 },505 },
485506
486 Hide: function(timestamp) {507 Hide: function(timestamp) {
508 if (!this._enableKeyboard)
509 return;
510
487 if (timestamp - this._timestamp < 0)511 if (timestamp - this._timestamp < 0)
488 return;512 return;
489513
@@ -492,10 +516,16 @@
492 },516 },
493517
494 SetCursorLocation: function(x, y, w, h) {518 SetCursorLocation: function(x, y, w, h) {
519 if (!this._enableKeyboard)
520 return;
521
495// this._setLocation(x, y);522// this._setLocation(x, y);
496 },523 },
497524
498 SetEntryLocation: function(x, y, w, h) {525 SetEntryLocation: function(x, y, w, h) {
526 if (!this._enableKeyboard)
527 return;
528
499// this._setLocation(x, y);529// this._setLocation(x, y);
500 },530 },
501531
502532
=== modified file 'js/ui/layout.js'
--- js/ui/layout.js 2011-09-28 06:48:58 +0000
+++ js/ui/layout.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Lang = imports.lang;4const Lang = imports.lang;
@@ -216,10 +216,10 @@
216 let monitorLeft = monitor.x, monitorRight = monitor.x + monitor.width;216 let monitorLeft = monitor.x, monitorRight = monitor.x + monitor.width;
217 let primaryLeft = primary.x, primaryRight = primary.x + primary.width;217 let primaryLeft = primary.x, primaryRight = primary.x + primary.width;
218218
219 if ((monitorLeft >= primaryLeft && monitorLeft <= primaryRight) ||219 if ((monitorLeft >= primaryLeft && monitorLeft < primaryRight) ||
220 (monitorRight >= primaryLeft && monitorRight <= primaryRight) ||220 (monitorRight > primaryLeft && monitorRight <= primaryRight) ||
221 (primaryLeft >= monitorLeft && primaryLeft <= monitorRight) ||221 (primaryLeft >= monitorLeft && primaryLeft < monitorRight) ||
222 (primaryRight >= monitorLeft && primaryRight <= monitorRight))222 (primaryRight > monitorLeft && primaryRight <= monitorRight))
223 return true;223 return true;
224224
225 return false;225 return false;
@@ -369,6 +369,10 @@
369 // Removes @actor from the chrome369 // Removes @actor from the chrome
370 removeChrome: function(actor) {370 removeChrome: function(actor) {
371 this._chrome.removeActor(actor);371 this._chrome.removeActor(actor);
372 },
373
374 findMonitorForActor: function(actor) {
375 return this._chrome.findMonitorForActor(actor);
372 }376 }
373};377};
374Signals.addSignalMethods(LayoutManager.prototype);378Signals.addSignalMethods(LayoutManager.prototype);
@@ -621,7 +625,7 @@
621 // We can't use Params.parse here because we want to drop625 // We can't use Params.parse here because we want to drop
622 // the extra values like ancestorData.actor626 // the extra values like ancestorData.actor
623 for (let prop in defaultParams) {627 for (let prop in defaultParams) {
624 if (!params[prop])628 if (!params.hasOwnProperty(prop))
625 params[prop] = ancestorData[prop];629 params[prop] = ancestorData[prop];
626 }630 }
627631
@@ -700,7 +704,7 @@
700 else if (this._inOverview)704 else if (this._inOverview)
701 visible = true;705 visible = true;
702 else if (!actorData.visibleInFullscreen &&706 else if (!actorData.visibleInFullscreen &&
703 this._findMonitorForActor(actorData.actor).inFullscreen)707 this.findMonitorForActor(actorData.actor).inFullscreen)
704 visible = false;708 visible = false;
705 else709 else
706 visible = true;710 visible = true;
@@ -762,7 +766,7 @@
762766
763 // This call guarantees that we return some monitor to simplify usage of it767 // This call guarantees that we return some monitor to simplify usage of it
764 // In practice all tracked actors should be visible on some monitor anyway768 // In practice all tracked actors should be visible on some monitor anyway
765 _findMonitorForActor: function(actor) {769 findMonitorForActor: function(actor) {
766 let [x, y] = actor.get_transformed_position();770 let [x, y] = actor.get_transformed_position();
767 let [w, h] = actor.get_transformed_size();771 let [w, h] = actor.get_transformed_size();
768 let monitor = this._findMonitorForRect(x, y, w, h);772 let monitor = this._findMonitorForRect(x, y, w, h);
@@ -821,6 +825,18 @@
821 monitor.inFullscreen = true;825 monitor.inFullscreen = true;
822 }826 }
823 if (layer == Meta.StackLayer.OVERRIDE_REDIRECT) {827 if (layer == Meta.StackLayer.OVERRIDE_REDIRECT) {
828 // Check whether the window is screen sized
829 let isScreenSized =
830 (window.x == 0 && window.y == 0 &&
831 window.width == global.screen_width &&
832 window.height == global.screen_height);
833
834 if (isScreenSized) {
835 for (let i = 0; i < this._monitors.length; i++)
836 this._monitors[i].inFullscreen = true;
837 }
838
839 // Or whether it is monitor sized
824 let monitor = this._findMonitorForWindow(window);840 let monitor = this._findMonitorForWindow(window);
825 if (monitor &&841 if (monitor &&
826 window.x <= monitor.x &&842 window.x <= monitor.x &&
827843
=== modified file 'js/ui/lightbox.js'
--- js/ui/lightbox.js 2010-12-19 00:08:30 +0000
+++ js/ui/lightbox.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Lang = imports.lang;3const Lang = imports.lang;
4const Meta = imports.gi.Meta;4const Meta = imports.gi.Meta;
55
=== modified file 'js/ui/link.js'
--- js/ui/link.js 2010-12-19 00:08:30 +0000
+++ js/ui/link.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Lang = imports.lang;3const Lang = imports.lang;
4const Signals = imports.signals;4const Signals = imports.signals;
55
=== modified file 'js/ui/lookingGlass.js'
--- js/ui/lookingGlass.js 2011-09-21 16:26:15 +0000
+++ js/ui/lookingGlass.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Cogl = imports.gi.Cogl;4const Cogl = imports.gi.Cogl;
@@ -17,6 +17,7 @@
17const History = imports.misc.history;17const History = imports.misc.history;
18const ExtensionSystem = imports.ui.extensionSystem;18const ExtensionSystem = imports.ui.extensionSystem;
19const Link = imports.ui.link;19const Link = imports.ui.link;
20const ShellEntry = imports.ui.shellEntry;
20const Tweener = imports.ui.tweener;21const Tweener = imports.ui.tweener;
21const Main = imports.ui.main;22const Main = imports.ui.main;
2223
@@ -157,9 +158,9 @@
157function objectToString(o) {158function objectToString(o) {
158 if (typeof(o) == typeof(objectToString)) {159 if (typeof(o) == typeof(objectToString)) {
159 // special case this since the default is way, way too verbose160 // special case this since the default is way, way too verbose
160 return "<js function>";161 return '<js function>';
161 } else {162 } else {
162 return "" + o;163 return '' + o;
163 }164 }
164}165}
165166
@@ -322,7 +323,7 @@
322 link = new St.Label({ text: '<error>' });323 link = new St.Label({ text: '<error>' });
323 }324 }
324 let hbox = new St.BoxLayout();325 let hbox = new St.BoxLayout();
325 let propText = propName + ": " + valueStr;326 let propText = propName + ': ' + valueStr;
326 hbox.add(new St.Label({ text: propName + ': ' }));327 hbox.add(new St.Label({ text: propName + ': ' }));
327 hbox.add(link);328 hbox.add(link);
328 this._container.add_actor(hbox);329 this._container.add_actor(hbox);
@@ -343,7 +344,7 @@
343 this.actor.move_anchor_point(Math.floor(sourceX + sourceWidth / 2),344 this.actor.move_anchor_point(Math.floor(sourceX + sourceWidth / 2),
344 Math.floor(sourceY + sourceHeight / 2));345 Math.floor(sourceY + sourceHeight / 2));
345 Tweener.addTween(this.actor, { scale_x: 1, scale_y: 1,346 Tweener.addTween(this.actor, { scale_x: 1, scale_y: 1,
346 transition: "easeOutQuad",347 transition: 'easeOutQuad',
347 time: 0.2 });348 time: 0.2 });
348 } else {349 } else {
349 this.actor.set_scale(1, 1);350 this.actor.set_scale(1, 1);
@@ -710,27 +711,23 @@
710 text: meta.description || 'No description' });711 text: meta.description || 'No description' });
711 box.add(description, { expand: true });712 box.add(description, { expand: true });
712713
713 let metaBox = new St.BoxLayout();714 let metaBox = new St.BoxLayout({ style_class: 'lg-extension-meta' });
714 box.add(metaBox);715 box.add(metaBox);
715 let stateString = this._stateToString(meta.state);716 let stateString = this._stateToString(meta.state);
716 let state = new St.Label({ style_class: 'lg-extension-state',717 let state = new St.Label({ style_class: 'lg-extension-state',
717 text: this._stateToString(meta.state) });718 text: this._stateToString(meta.state) });
718719 metaBox.add(state);
719 let actionsContainer = new St.Bin({ x_align: St.Align.END });
720 metaBox.add(actionsContainer);
721 let actionsBox = new St.BoxLayout({ style_class: 'lg-extension-actions' });
722 actionsContainer.set_child(actionsBox);
723720
724 let viewsource = new Link.Link({ label: _("View Source") });721 let viewsource = new Link.Link({ label: _("View Source") });
725 viewsource.actor._extensionMeta = meta;722 viewsource.actor._extensionMeta = meta;
726 viewsource.actor.connect('clicked', Lang.bind(this, this._onViewSource));723 viewsource.actor.connect('clicked', Lang.bind(this, this._onViewSource));
727 actionsBox.add(viewsource.actor);724 metaBox.add(viewsource.actor);
728725
729 if (meta.url) {726 if (meta.url) {
730 let webpage = new Link.Link({ label: _("Web Page") });727 let webpage = new Link.Link({ label: _("Web Page") });
731 webpage.actor._extensionMeta = meta;728 webpage.actor._extensionMeta = meta;
732 webpage.actor.connect('clicked', Lang.bind(this, this._onWebPage));729 webpage.actor.connect('clicked', Lang.bind(this, this._onWebPage));
733 actionsBox.add(webpage.actor);730 metaBox.add(webpage.actor);
734 }731 }
735732
736 return box;733 return box;
@@ -820,6 +817,7 @@
820 entryArea.add(label);817 entryArea.add(label);
821818
822 this._entry = new St.Entry({ can_focus: true });819 this._entry = new St.Entry({ can_focus: true });
820 ShellEntry.addContextMenu(this._entry);
823 entryArea.add(this._entry, { expand: true });821 entryArea.add(this._entry, { expand: true });
824822
825 this._windowList = new WindowList();823 this._windowList = new WindowList();
826824
=== modified file 'js/ui/magnifier.js'
--- js/ui/magnifier.js 2011-02-25 12:23:23 +0000
+++ js/ui/magnifier.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Gio = imports.gi.Gio;4const Gio = imports.gi.Gio;
55
=== modified file 'js/ui/magnifierDBus.js'
--- js/ui/magnifierDBus.js 2011-01-12 23:41:41 +0000
+++ js/ui/magnifierDBus.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DBus = imports.dbus;3const DBus = imports.dbus;
4const Main = imports.ui.main;4const Main = imports.ui.main;
55
=== modified file 'js/ui/main.js'
--- js/ui/main.js 2011-09-22 08:50:45 +0000
+++ js/ui/main.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const DBus = imports.dbus;4const DBus = imports.dbus;
@@ -129,8 +129,6 @@
129function _initUserSession() {129function _initUserSession() {
130 _initRecorder();130 _initRecorder();
131131
132 keyboard.init();
133
134 global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT, false, -1, 1);132 global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT, false, -1, 1);
135133
136 ExtensionSystem.init();134 ExtensionSystem.init();
@@ -496,9 +494,9 @@
496function notifyError(msg, details) {494function notifyError(msg, details) {
497 // Also print to stderr so it's logged somewhere495 // Also print to stderr so it's logged somewhere
498 if (details)496 if (details)
499 log("error: " + msg + ": " + details);497 log('error: ' + msg + ': ' + details);
500 else498 else
501 log("error: " + msg)499 log('error: ' + msg);
502500
503 notify(msg, details);501 notify(msg, details);
504}502}
505503
=== modified file 'js/ui/messageTray.js'
--- js/ui/messageTray.js 2011-09-28 06:48:58 +0000
+++ js/ui/messageTray.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const GLib = imports.gi.GLib;4const GLib = imports.gi.GLib;
@@ -252,7 +252,8 @@
252 this._prevFocusedWindow = global.display.focus_window;252 this._prevFocusedWindow = global.display.focus_window;
253 this._prevKeyFocusActor = global.stage.get_key_focus();253 this._prevKeyFocusActor = global.stage.get_key_focus();
254254
255 if (!Main.overview.visible)255 if (global.stage_input_mode == Shell.StageInputMode.NONREACTIVE ||
256 global.stage_input_mode == Shell.StageInputMode.NORMAL)
256 global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);257 global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
257258
258 // Use captured-event to notice clicks outside the focused actor259 // Use captured-event to notice clicks outside the focused actor
@@ -702,6 +703,7 @@
702 this._imageBin.opacity = 230;703 this._imageBin.opacity = 230;
703 this._table.add_style_class_name('multi-line-notification');704 this._table.add_style_class_name('multi-line-notification');
704 this._table.add_style_class_name('notification-with-image');705 this._table.add_style_class_name('notification-with-image');
706 this._addBannerBody();
705 this._updateLastColumnSettings();707 this._updateLastColumnSettings();
706 this._table.add(this._imageBin, { row: 1,708 this._table.add(this._imageBin, { row: 1,
707 col: 1,709 col: 1,
@@ -1585,7 +1587,7 @@
15851587
1586 summaryItemToRemove.actor.destroy();1588 summaryItemToRemove.actor.destroy();
15871589
1588 if (needUpdate);1590 if (needUpdate)
1589 this._updateState();1591 this._updateState();
1590 },1592 },
15911593
15921594
=== modified file 'js/ui/modalDialog.js'
--- js/ui/modalDialog.js 2011-09-21 16:26:15 +0000
+++ js/ui/modalDialog.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Gdk = imports.gi.Gdk;4const Gdk = imports.gi.Gdk;
55
=== modified file 'js/ui/networkAgent.js'
--- js/ui/networkAgent.js 2011-09-21 16:26:15 +0000
+++ js/ui/networkAgent.js 2012-01-18 14:13:28 +0000
@@ -1,5 +1,5 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2 *2/*
3 * Copyright 2011 Giovanni Campagna <scampa.giovanni@gmail.com>3 * Copyright 2011 Giovanni Campagna <scampa.giovanni@gmail.com>
4 *4 *
5 * This program is free software; you can redistribute it and/or modify5 * This program is free software; you can redistribute it and/or modify
@@ -30,6 +30,7 @@
3030
31const ModalDialog = imports.ui.modalDialog;31const ModalDialog = imports.ui.modalDialog;
32const PopupMenu = imports.ui.popupMenu;32const PopupMenu = imports.ui.popupMenu;
33const ShellEntry = imports.ui.shellEntry;
3334
34function NetworkSecretDialog() {35function NetworkSecretDialog() {
35 this._init.apply(this, arguments);36 this._init.apply(this, arguments);
@@ -103,6 +104,8 @@
103 secret.entry = new St.Entry({ style_class: 'polkit-dialog-password-entry',104 secret.entry = new St.Entry({ style_class: 'polkit-dialog-password-entry',
104 text: secret.value, can_focus: reactive,105 text: secret.value, can_focus: reactive,
105 reactive: reactive });106 reactive: reactive });
107 ShellEntry.addContextMenu(secret.entry,
108 { isPassword: secret.password });
106109
107 if (secret.validate)110 if (secret.validate)
108 secret.valid = secret.validate(secret);111 secret.valid = secret.validate(secret);
@@ -127,34 +130,14 @@
127 } else130 } else
128 secret.valid = true;131 secret.valid = true;
129132
130 secretTable.add(label, { row: pos, col: 0, x_align: St.Align.START, y_align: St.Align.START });133 secretTable.add(label, { row: pos, col: 0, x_expand: false, x_fill: true, x_align: St.Align.START, y_align: St.Align.START });
131 secretTable.add(secret.entry, { row: pos, col: 1, x_expand: true, x_fill: true, y_align: St.Align.END });134 secretTable.add(secret.entry, { row: pos, col: 1, x_expand: true, x_fill: true, y_align: St.Align.END });
132 pos++;135 pos++;
133136
134 if (secret.password) {137 if (secret.password)
135 secret.entry.clutter_text.set_password_char('\u25cf');138 secret.entry.clutter_text.set_password_char('\u25cf');
139 }
136140
137 // FIXME: need a real checkbox here
138 let button = new St.Button({ button_mask: St.ButtonMask.ONE,
139 can_focus: true });
140 let checkbox = new St.BoxLayout({ vertical: false,
141 style_class: 'network-dialog-show-password-checkbox'
142 });
143 let _switch = new PopupMenu.Switch(false);
144 checkbox.add(_switch.actor);
145 checkbox.add(new St.Label({ text: _("Show password") }), { expand: true });
146 button.connect('clicked', function() {
147 _switch.toggle();
148 if (_switch.state)
149 secret.entry.clutter_text.set_password_char('');
150 else
151 secret.entry.clutter_text.set_password_char('\u25cf');
152 });
153 button.child = checkbox;
154 secretTable.add(button, { row: pos, col: 1, x_expand: true, x_fill: true, y_fill: true })
155 pos++;
156 }
157 }
158 messageBox.add(secretTable);141 messageBox.add(secretTable);
159142
160 this._okButton = { label: _("Connect"),143 this._okButton = { label: _("Connect"),
@@ -404,4 +387,4 @@
404 this._dialogs[requestId].close(global.get_current_time());387 this._dialogs[requestId].close(global.get_current_time());
405 this._dialogs[requestId].destroy();388 this._dialogs[requestId].destroy();
406 }389 }
407};
408\ No newline at end of file390\ No newline at end of file
391};
409392
=== modified file 'js/ui/notificationDaemon.js'
--- js/ui/notificationDaemon.js 2011-09-04 08:02:35 +0000
+++ js/ui/notificationDaemon.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const DBus = imports.dbus;4const DBus = imports.dbus;
@@ -109,6 +109,14 @@
109 _iconForNotificationData: function(icon, hints, size) {109 _iconForNotificationData: function(icon, hints, size) {
110 let textureCache = St.TextureCache.get_default();110 let textureCache = St.TextureCache.get_default();
111111
112 // If an icon is not specified, we use 'image-data' or 'image-path' hint for an icon
113 // and don't show a large image. There are currently many applications that use
114 // notify_notification_set_icon_from_pixbuf() from libnotify, which in turn sets
115 // the 'image-data' hint. These applications don't typically pass in 'app_icon'
116 // argument to Notify() and actually expect the pixbuf to be shown as an icon.
117 // So the logic here does the right thing for this case. If both an icon and either
118 // one of 'image-data' or 'image-path' are specified, we show both an icon and
119 // a large image.
112 if (icon) {120 if (icon) {
113 if (icon.substr(0, 7) == 'file://')121 if (icon.substr(0, 7) == 'file://')
114 return textureCache.load_uri_async(icon, size, size);122 return textureCache.load_uri_async(icon, size, size);
@@ -119,6 +127,12 @@
119 return new St.Icon({ icon_name: icon,127 return new St.Icon({ icon_name: icon,
120 icon_type: St.IconType.FULLCOLOR,128 icon_type: St.IconType.FULLCOLOR,
121 icon_size: size });129 icon_size: size });
130 } else if (hints['image-data']) {
131 let [width, height, rowStride, hasAlpha,
132 bitsPerSample, nChannels, data] = hints['image-data'];
133 return textureCache.load_from_raw(data, hasAlpha, width, height, rowStride, size);
134 } else if (hints['image-path']) {
135 return textureCache.load_uri_async(GLib.filename_to_uri(hints['image-path'], null), size, size);
122 } else {136 } else {
123 let stockIcon;137 let stockIcon;
124 switch (hints.urgency) {138 switch (hints.urgency) {
@@ -330,7 +344,8 @@
330 clear: true });344 clear: true });
331 }345 }
332346
333 if (hints['image-data'] || hints['image-path']) {347 // We only display a large image if an icon is also specified.
348 if (icon && (hints['image-data'] || hints['image-path'])) {
334 let image = null;349 let image = null;
335 if (hints['image-data']) {350 if (hints['image-data']) {
336 let [width, height, rowStride, hasAlpha,351 let [width, height, rowStride, hasAlpha,
337352
=== modified file 'js/ui/overview.js'
--- js/ui/overview.js 2011-09-21 16:26:15 +0000
+++ js/ui/overview.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Gtk = imports.gi.Gtk;4const Gtk = imports.gi.Gtk;
55
=== modified file 'js/ui/panel.js'
--- js/ui/panel.js 2011-09-21 16:26:15 +0000
+++ js/ui/panel.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Cairo = imports.cairo;3const Cairo = imports.cairo;
4const Clutter = imports.gi.Clutter;4const Clutter = imports.gi.Clutter;
55
=== modified file 'js/ui/panelMenu.js'
--- js/ui/panelMenu.js 2011-09-21 16:26:15 +0000
+++ js/ui/panelMenu.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Gtk = imports.gi.Gtk;4const Gtk = imports.gi.Gtk;
55
=== modified file 'js/ui/placeDisplay.js'
--- js/ui/placeDisplay.js 2011-09-04 08:02:35 +0000
+++ js/ui/placeDisplay.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const GLib = imports.gi.GLib;3const GLib = imports.gi.GLib;
4const Gio = imports.gi.Gio;4const Gio = imports.gi.Gio;
55
=== modified file 'js/ui/polkitAuthenticationAgent.js'
--- js/ui/polkitAuthenticationAgent.js 2011-09-21 16:26:15 +0000
+++ js/ui/polkitAuthenticationAgent.js 2012-01-18 14:13:28 +0000
@@ -1,5 +1,5 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2 *2/*
3 * Copyright 2010 Red Hat, Inc3 * Copyright 2010 Red Hat, Inc
4 *4 *
5 * This program is free software; you can redistribute it and/or modify5 * This program is free software; you can redistribute it and/or modify
@@ -33,6 +33,7 @@
33const PolkitAgent = imports.gi.PolkitAgent;33const PolkitAgent = imports.gi.PolkitAgent;
3434
35const ModalDialog = imports.ui.modalDialog;35const ModalDialog = imports.ui.modalDialog;
36const ShellEntry = imports.ui.shellEntry;
3637
37function AuthenticationDialog(actionId, message, cookie, userNames) {38function AuthenticationDialog(actionId, message, cookie, userNames) {
38 this._init(actionId, message, cookie, userNames);39 this._init(actionId, message, cookie, userNames);
@@ -139,6 +140,7 @@
139 this._passwordEntry = new St.Entry({ style_class: 'polkit-dialog-password-entry',140 this._passwordEntry = new St.Entry({ style_class: 'polkit-dialog-password-entry',
140 text: "",141 text: "",
141 can_focus: true});142 can_focus: true});
143 ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
142 this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate));144 this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate));
143 this._passwordBox.add(this._passwordEntry,145 this._passwordBox.add(this._passwordEntry,
144 {expand: true });146 {expand: true });
145147
=== modified file 'js/ui/popupMenu.js'
--- js/ui/popupMenu.js 2011-09-28 00:41:45 +0000
+++ js/ui/popupMenu.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Cairo = imports.cairo;3const Cairo = imports.cairo;
4const Clutter = imports.gi.Clutter;4const Clutter = imports.gi.Clutter;
@@ -1142,10 +1142,10 @@
1142PopupMenu.prototype = {1142PopupMenu.prototype = {
1143 __proto__: PopupMenuBase.prototype,1143 __proto__: PopupMenuBase.prototype,
11441144
1145 _init: function(sourceActor, alignment, arrowSide) {1145 _init: function(sourceActor, arrowAlignment, arrowSide) {
1146 PopupMenuBase.prototype._init.call (this, sourceActor, 'popup-menu-content');1146 PopupMenuBase.prototype._init.call (this, sourceActor, 'popup-menu-content');
11471147
1148 this._alignment = alignment;1148 this._arrowAlignment = arrowAlignment;
1149 this._arrowSide = arrowSide;1149 this._arrowSide = arrowSide;
11501150
1151 this._boxPointer = new BoxPointer.BoxPointer(arrowSide,1151 this._boxPointer = new BoxPointer.BoxPointer(arrowSide,
@@ -1198,13 +1198,17 @@
1198 this._boxPointer.setArrowOrigin(origin);1198 this._boxPointer.setArrowOrigin(origin);
1199 },1199 },
12001200
1201 setSourceAlignment: function(alignment) {
1202 this._boxPointer.setSourceAlignment(alignment);
1203 },
1204
1201 open: function(animate) {1205 open: function(animate) {
1202 if (this.isOpen)1206 if (this.isOpen)
1203 return;1207 return;
12041208
1205 this.isOpen = true;1209 this.isOpen = true;
12061210
1207 this._boxPointer.setPosition(this.sourceActor, this._alignment);1211 this._boxPointer.setPosition(this.sourceActor, this._arrowAlignment);
1208 this._boxPointer.show(animate);1212 this._boxPointer.show(animate);
12091213
1210 this.actor.raise_top();1214 this.actor.raise_top();
12111215
=== modified file 'js/ui/runDialog.js'
--- js/ui/runDialog.js 2011-08-24 02:33:44 +0000
+++ js/ui/runDialog.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Gio = imports.gi.Gio;4const Gio = imports.gi.Gio;
@@ -12,6 +12,7 @@
12const FileUtils = imports.misc.fileUtils;12const FileUtils = imports.misc.fileUtils;
13const Main = imports.ui.main;13const Main = imports.ui.main;
14const ModalDialog = imports.ui.modalDialog;14const ModalDialog = imports.ui.modalDialog;
15const ShellEntry = imports.ui.shellEntry;
15const Tweener = imports.ui.tweener;16const Tweener = imports.ui.tweener;
16const Util = imports.misc.util;17const Util = imports.misc.util;
17const History = imports.misc.history;18const History = imports.misc.history;
@@ -210,6 +211,7 @@
210 this.contentLayout.add(label, { y_align: St.Align.START });211 this.contentLayout.add(label, { y_align: St.Align.START });
211212
212 let entry = new St.Entry({ style_class: 'run-dialog-entry' });213 let entry = new St.Entry({ style_class: 'run-dialog-entry' });
214 ShellEntry.addContextMenu(entry);
213215
214 this._entryText = entry.clutter_text;216 this._entryText = entry.clutter_text;
215 this.contentLayout.add(entry, { y_align: St.Align.START });217 this.contentLayout.add(entry, { y_align: St.Align.START });
216218
=== modified file 'js/ui/scripting.js'
--- js/ui/scripting.js 2011-08-24 02:33:44 +0000
+++ js/ui/scripting.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DBus = imports.dbus;3const DBus = imports.dbus;
4const Gio = imports.gi.Gio;4const Gio = imports.gi.Gio;
55
=== modified file 'js/ui/search.js'
--- js/ui/search.js 2011-09-21 16:26:15 +0000
+++ js/ui/search.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Gio = imports.gi.Gio;3const Gio = imports.gi.Gio;
4const GLib = imports.gi.GLib;4const GLib = imports.gi.GLib;
55
=== modified file 'js/ui/searchDisplay.js'
--- js/ui/searchDisplay.js 2011-09-21 16:26:15 +0000
+++ js/ui/searchDisplay.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Lang = imports.lang;4const Lang = imports.lang;
55
=== modified file 'js/ui/shellDBus.js'
--- js/ui/shellDBus.js 2011-09-21 16:26:15 +0000
+++ js/ui/shellDBus.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DBus = imports.dbus;3const DBus = imports.dbus;
4const Lang = imports.lang;4const Lang = imports.lang;
55
=== added file 'js/ui/shellEntry.js'
--- js/ui/shellEntry.js 1970-01-01 00:00:00 +0000
+++ js/ui/shellEntry.js 2012-01-18 14:13:28 +0000
@@ -0,0 +1,173 @@
1const Clutter = imports.gi.Clutter;
2const Gtk = imports.gi.Gtk;
3const Lang = imports.lang;
4const St = imports.gi.St;
5
6const Main = imports.ui.main;
7const Params = imports.misc.params;
8const PopupMenu = imports.ui.popupMenu;
9
10
11function _EntryMenu(entry, params) {
12 this._init(entry, params);
13};
14
15_EntryMenu.prototype = {
16 __proto__: PopupMenu.PopupMenu.prototype,
17
18 _init: function(entry, params) {
19 params = Params.parse (params, { isPassword: false });
20
21 PopupMenu.PopupMenu.prototype._init.call(this, entry, 0, St.Side.TOP);
22
23 this.actor.add_style_class_name('entry-context-menu');
24
25 this._entry = entry;
26 this._clipboard = St.Clipboard.get_default();
27
28 // Populate menu
29 let item;
30 item = new PopupMenu.PopupMenuItem(_("Copy"));
31 item.connect('activate', Lang.bind(this, this._onCopyActivated));
32 this.addMenuItem(item);
33 this._copyItem = item;
34
35 item = new PopupMenu.PopupMenuItem(_("Paste"));
36 item.connect('activate', Lang.bind(this, this._onPasteActivated));
37 this.addMenuItem(item);
38 this._pasteItem = item;
39
40 this._passwordItem = null;
41 if (params.isPassword) {
42 item = new PopupMenu.PopupMenuItem('');
43 item.connect('activate', Lang.bind(this,
44 this._onPasswordActivated));
45 this.addMenuItem(item);
46 this._passwordItem = item;
47 }
48
49 Main.uiGroup.add_actor(this.actor);
50 this.actor.hide();
51 },
52
53 open: function() {
54 this._updatePasteItem();
55 this._updateCopyItem();
56 if (this._passwordItem)
57 this._updatePasswordItem();
58
59 let direction = Gtk.DirectionType.TAB_FORWARD;
60 if (!this.actor.navigate_focus(null, direction, false))
61 this.actor.grab_key_focus();
62
63 PopupMenu.PopupMenu.prototype.open.call(this);
64 },
65
66 _updateCopyItem: function() {
67 let selection = this._entry.clutter_text.get_selection();
68 this._copyItem.setSensitive(selection && selection != '');
69 },
70
71 _updatePasteItem: function() {
72 this._clipboard.get_text(Lang.bind(this,
73 function(clipboard, text) {
74 this._pasteItem.setSensitive(text && text != '');
75 }));
76 },
77
78 _updatePasswordItem: function() {
79 let textHidden = (this._entry.clutter_text.password_char);
80 if (textHidden)
81 this._passwordItem.label.set_text(_("Show Text"));
82 else
83 this._passwordItem.label.set_text(_("Hide Text"));
84 },
85
86 _onCopyActivated: function() {
87 let selection = this._entry.clutter_text.get_selection();
88 this._clipboard.set_text(selection);
89 },
90
91 _onPasteActivated: function() {
92 this._clipboard.get_text(Lang.bind(this,
93 function(clipboard, text) {
94 if (!text)
95 return;
96 this._entry.clutter_text.delete_selection();
97 let pos = this._entry.clutter_text.get_cursor_position();
98 this._entry.clutter_text.insert_text(text, pos);
99 }));
100 },
101
102 _onPasswordActivated: function() {
103 let visible = !!(this._entry.clutter_text.password_char);
104 this._entry.clutter_text.set_password_char(visible ? '' : '\u25cf');
105 }
106};
107
108
109function _setMenuAlignment(entry, stageX) {
110 let [success, entryX, entryY] = entry.transform_stage_point(stageX, 0);
111 if (success)
112 entry._menu.setSourceAlignment(entryX / entry.width);
113};
114
115function _onClicked(action, actor) {
116 let entry = actor._menu ? actor : actor.get_parent();
117
118 if (entry._menu.isOpen) {
119 entry._menu.close();
120 } else if (action.get_button() == 3) {
121 let [stageX, stageY] = action.get_coords();
122 _setMenuAlignment(entry, stageX);
123 entry._menu.open();
124 }
125};
126
127function _onLongPress(action, actor, state) {
128 let entry = actor._menu ? actor : actor.get_parent();
129
130 if (state == Clutter.LongPressState.QUERY)
131 return action.get_button() == 1 && !entry._menu.isOpen;
132
133 if (state == Clutter.LongPressState.ACTIVATE) {
134 let [stageX, stageY] = action.get_coords();
135 _setMenuAlignment(entry, stageX);
136 entry._menu.open();
137 }
138 return false;
139};
140
141function _onPopup(actor) {
142 let entry = actor._menu ? actor : actor.get_parent();
143 let [success, textX, textY, lineHeight] = entry.clutter_text.position_to_coords(-1);
144 if (success)
145 entry._menu.setSourceAlignment(textX / entry.width);
146 entry._menu.open();
147};
148
149function addContextMenu(entry, params) {
150 if (entry._menu)
151 return;
152
153 entry._menu = new _EntryMenu(entry, params);
154 entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry });
155 entry._menuManager.addMenu(entry._menu);
156
157 let clickAction;
158
159 // Add a click action to both the entry and its clutter_text; the former
160 // so padding is included in the clickable area, the latter because the
161 // event processing of ClutterText prevents event-bubbling.
162 clickAction = new Clutter.ClickAction();
163 clickAction.connect('clicked', _onClicked);
164 clickAction.connect('long-press', _onLongPress);
165 entry.clutter_text.add_action(clickAction);
166
167 clickAction = new Clutter.ClickAction();
168 clickAction.connect('clicked', _onClicked);
169 clickAction.connect('long-press', _onLongPress);
170 entry.add_action(clickAction);
171
172 entry.connect('popup-menu', _onPopup);
173}
0174
=== modified file 'js/ui/shellMountOperation.js'
--- js/ui/shellMountOperation.js 2011-09-04 08:02:35 +0000
+++ js/ui/shellMountOperation.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Lang = imports.lang;3const Lang = imports.lang;
4const Signals = imports.signals;4const Signals = imports.signals;
55
=== modified file 'js/ui/status/accessibility.js'
--- js/ui/status/accessibility.js 2011-09-21 16:26:15 +0000
+++ js/ui/status/accessibility.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DBus = imports.dbus;3const DBus = imports.dbus;
4const GConf = imports.gi.GConf;4const GConf = imports.gi.GConf;
55
=== modified file 'js/ui/status/bluetooth.js'
--- js/ui/status/bluetooth.js 2011-09-04 08:02:35 +0000
+++ js/ui/status/bluetooth.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Gdk = imports.gi.Gdk;4const Gdk = imports.gi.Gdk;
@@ -205,7 +205,8 @@
205 _buildDeviceSubMenu: function(item, device) {205 _buildDeviceSubMenu: function(item, device) {
206 if (device.can_connect) {206 if (device.can_connect) {
207 item._connected = device.connected;207 item._connected = device.connected;
208 item._connectedMenuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);208 let menuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
209 item._connectedMenuitem = menuitem;
209 item._connectedMenuitem.connect('toggled', Lang.bind(this, function() {210 item._connectedMenuitem.connect('toggled', Lang.bind(this, function() {
210 if (item._connected > ConnectionState.CONNECTED) {211 if (item._connected > ConnectionState.CONNECTED) {
211 // operation already in progress, revert212 // operation already in progress, revert
212213
=== modified file 'js/ui/status/keyboard.js'
--- js/ui/status/keyboard.js 2011-09-21 16:26:15 +0000
+++ js/ui/status/keyboard.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const GdkPixbuf = imports.gi.GdkPixbuf;4const GdkPixbuf = imports.gi.GdkPixbuf;
55
=== modified file 'js/ui/status/network.js'
--- js/ui/status/network.js 2011-09-21 16:26:15 +0000
+++ js/ui/status/network.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2const ByteArray = imports.byteArray;2const ByteArray = imports.byteArray;
3const DBus = imports.dbus;3const DBus = imports.dbus;
4const GLib = imports.gi.GLib;4const GLib = imports.gi.GLib;
55
=== modified file 'js/ui/status/power.js'
--- js/ui/status/power.js 2011-09-22 08:50:45 +0000
+++ js/ui/status/power.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Gio = imports.gi.Gio;3const Gio = imports.gi.Gio;
4const DBus = imports.dbus;4const DBus = imports.dbus;
@@ -43,8 +43,8 @@
43const PowerManagerInterface = {43const PowerManagerInterface = {
44 name: 'org.gnome.SettingsDaemon.Power',44 name: 'org.gnome.SettingsDaemon.Power',
45 methods: [45 methods: [
46 { name: 'GetDevices', inSignature: '', outSignature: 'a(susbut)' },46 { name: 'GetDevices', inSignature: '', outSignature: 'a(susdut)' },
47 { name: 'GetPrimaryDevice', inSignature: '', outSignature: '(susbut)' },47 { name: 'GetPrimaryDevice', inSignature: '', outSignature: '(susdut)' },
48 ],48 ],
49 signals: [49 signals: [
50 { name: 'Changed', inSignature: '' },50 { name: 'Changed', inSignature: '' },
@@ -155,7 +155,7 @@
155 _devicesChanged: function() {155 _devicesChanged: function() {
156 this._proxy.GetRemote('Icon', Lang.bind(this, function(icon, error) {156 this._proxy.GetRemote('Icon', Lang.bind(this, function(icon, error) {
157 if (icon) {157 if (icon) {
158 let gicon = Shell.util_icon_from_string (icon);158 let gicon = Gio.icon_new_for_string(icon);
159 this.setGIcon(gicon);159 this.setGIcon(gicon);
160 this.actor.show();160 this.actor.show();
161 } else {161 } else {
@@ -183,7 +183,7 @@
183 this._box = new St.BoxLayout({ style_class: 'popup-device-menu-item' });183 this._box = new St.BoxLayout({ style_class: 'popup-device-menu-item' });
184 this._label = new St.Label({ text: this._deviceTypeToString(device_type) });184 this._label = new St.Label({ text: this._deviceTypeToString(device_type) });
185185
186 this._icon = new St.Icon({ gicon: Shell.util_icon_from_string(icon),186 this._icon = new St.Icon({ gicon: Gio.icon_new_for_string(icon),
187 icon_type: St.IconType.SYMBOLIC,187 icon_type: St.IconType.SYMBOLIC,
188 style_class: 'popup-menu-icon' });188 style_class: 'popup-menu-icon' });
189189
190190
=== modified file 'js/ui/status/volume.js'
--- js/ui/status/volume.js 2011-09-21 16:26:15 +0000
+++ js/ui/status/volume.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const DBus = imports.dbus;4const DBus = imports.dbus;
55
=== modified file 'js/ui/statusIconDispatcher.js'
--- js/ui/statusIconDispatcher.js 2011-04-11 21:03:31 +0000
+++ js/ui/statusIconDispatcher.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Lang = imports.lang;3const Lang = imports.lang;
4const Shell = imports.gi.Shell;4const Shell = imports.gi.Shell;
55
=== modified file 'js/ui/telepathyClient.js'
--- js/ui/telepathyClient.js 2011-09-28 00:41:45 +0000
+++ js/ui/telepathyClient.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const DBus = imports.dbus;3const DBus = imports.dbus;
4const Gio = imports.gi.Gio;4const Gio = imports.gi.Gio;
@@ -257,7 +257,7 @@
257 // FIXME: We don't have a 'chat room' icon (bgo #653737) use257 // FIXME: We don't have a 'chat room' icon (bgo #653737) use
258 // system-users for now as Empathy does.258 // system-users for now as Empathy does.
259 let source = new ApproverSource(dispatchOp, _("Invitation"),259 let source = new ApproverSource(dispatchOp, _("Invitation"),
260 Shell.util_icon_from_string('system-users'));260 Gio.icon_new_for_string('system-users'));
261 Main.messageTray.add(source);261 Main.messageTray.add(source);
262262
263 let notif = new RoomInviteNotification(source, dispatchOp, channel, contacts[0]);263 let notif = new RoomInviteNotification(source, dispatchOp, channel, contacts[0]);
@@ -325,8 +325,8 @@
325325
326 // We got the TpContact326 // We got the TpContact
327 let source = new ApproverSource(dispatchOp, _("Call"), isVideo ?327 let source = new ApproverSource(dispatchOp, _("Call"), isVideo ?
328 Shell.util_icon_from_string('camera-web') :328 Gio.icon_new_for_string('camera-web') :
329 Shell.util_icon_from_string('audio-input-microphone'));329 Gio.icon_new_for_string('audio-input-microphone'));
330 Main.messageTray.add(source);330 Main.messageTray.add(source);
331331
332 let notif = new AudioVideoNotification(source, dispatchOp, channel, contacts[0], isVideo);332 let notif = new AudioVideoNotification(source, dispatchOp, channel, contacts[0], isVideo);
@@ -539,9 +539,13 @@
539539
540 _updateAlias: function() {540 _updateAlias: function() {
541 let oldAlias = this.title;541 let oldAlias = this.title;
542 this.setTitle(this._contact.get_alias());542 let newAlias = this._contact.get_alias();
543 this._notification.appendAliasChange(oldAlias, this.title);543
544 this.pushNotification(this._notification);544 if (oldAlias == newAlias)
545 return;
546
547 this.setTitle(newAlias);
548 this._notification.appendAliasChange(oldAlias, newAlias);
545 },549 },
546550
547 createNotificationIcon: function() {551 createNotificationIcon: function() {
@@ -570,7 +574,7 @@
570 open: function(notification) {574 open: function(notification) {
571 if (this._client.is_handling_channel(this._channel)) {575 if (this._client.is_handling_channel(this._channel)) {
572 // We are handling the channel, try to pass it to Empathy576 // We are handling the channel, try to pass it to Empathy
573 this._client.delegate_channels_async([this._channel], global.get_current_time(), "", null);577 this._client.delegate_channels_async([this._channel], global.get_current_time(), '', null);
574 }578 }
575 else {579 else {
576 // We are not the handler, just ask to present the channel580 // We are not the handler, just ask to present the channel
@@ -1198,6 +1202,7 @@
1198 this.setResident(true);1202 this.setResident(true);
11991203
1200 this.addButton('reject', _("Reject"));1204 this.addButton('reject', _("Reject"));
1205 /* translators: this is a button label (verb), not a noun */
1201 this.addButton('answer', _("Answer"));1206 this.addButton('answer', _("Answer"));
12021207
1203 this.connect('action-invoked', Lang.bind(this, function(self, action) {1208 this.connect('action-invoked', Lang.bind(this, function(self, action) {
12041209
=== modified file 'js/ui/tweener.js'
--- js/ui/tweener.js 2011-02-25 12:23:23 +0000
+++ js/ui/tweener.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Lang = imports.lang;4const Lang = imports.lang;
55
=== modified file 'js/ui/userMenu.js'
--- js/ui/userMenu.js 2011-09-21 16:26:15 +0000
+++ js/ui/userMenu.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const AccountsService = imports.gi.AccountsService;3const AccountsService = imports.gi.AccountsService;
4const DBus = imports.dbus;4const DBus = imports.dbus;
@@ -158,22 +158,29 @@
158 Lang.bind(this, this._changeIMStatus));158 Lang.bind(this, this._changeIMStatus));
159159
160 this._presence = new GnomeSession.Presence();160 this._presence = new GnomeSession.Presence();
161 this._presence.getStatus(Lang.bind(this, this._sessionStatusChanged));
162 this._presence.connect('StatusChanged',161 this._presence.connect('StatusChanged',
163 Lang.bind(this, this._sessionStatusChanged));162 Lang.bind(this, this._sessionStatusChanged));
164163
164 this._sessionPresenceRestored = false;
165 this._imPresenceRestored = false;
165 this._currentPresence = undefined;166 this._currentPresence = undefined;
166 this._previousPresence = undefined;
167167
168 this._accountMgr = Tp.AccountManager.dup()168 this._accountMgr = Tp.AccountManager.dup()
169 this._accountMgr.connect('most-available-presence-changed',169 this._accountMgr.connect('most-available-presence-changed',
170 Lang.bind(this, this._IMStatusChanged));170 Lang.bind(this, this._IMStatusChanged));
171 this._accountMgr.prepare_async(null, Lang.bind(this,171 this._accountMgr.prepare_async(null, Lang.bind(this,
172 function(mgr) {172 function(mgr) {
173 let [presence, s, msg] = mgr.get_most_available_presence();173 let [presence, status, msg] = mgr.get_most_available_presence();
174174
175 this._previousPresence = presence;175 let savedPresence = global.settings.get_int('saved-im-presence');
176 this._IMStatusChanged(mgr, presence, s, msg);176 if (savedPresence == presence) {
177 this._IMStatusChanged(mgr, presence, status, msg);
178 } else {
179 this._setComboboxPresence(savedPresence);
180 status = this._statusForPresence(savedPresence);
181 msg = msg ? msg : '';
182 mgr.set_all_requested_presences(savedPresence, status, msg);
183 }
177 }));184 }));
178185
179 this._userManager = AccountsService.UserManager.get_default();186 this._userManager = AccountsService.UserManager.get_default();
@@ -261,19 +268,35 @@
261 },268 },
262269
263 _IMStatusChanged: function(accountMgr, presence, status, message) {270 _IMStatusChanged: function(accountMgr, presence, status, message) {
271 if (!this._imPresenceRestored)
272 this._imPresenceRestored = true;
273
264 if (presence == this._currentPresence)274 if (presence == this._currentPresence)
265 return;275 return;
266276
267 this._currentPresence = presence;277 this._currentPresence = presence;
278 this._setComboboxPresence(presence);
279
280 if (!this._sessionPresenceRestored) {
281 this._presence.getStatus(Lang.bind(this, this._sessionStatusChanged));
282 return;
283 }
268284
269 if (presence == Tp.ConnectionPresenceType.AVAILABLE)285 if (presence == Tp.ConnectionPresenceType.AVAILABLE)
270 this._presence.setStatus(GnomeSession.PresenceStatus.AVAILABLE);286 this._presence.setStatus(GnomeSession.PresenceStatus.AVAILABLE);
271287
272 if (!this._expectedPresence || presence != this._expectedPresence)288 // We ignore the actual value of _expectedPresence and never safe
273 this._previousPresence = presence;289 // the first presence change after an "automatic" change, assuming
290 // that it is the response to our request; this is to account for
291 // mission control falling back to "similar" presences if an account
292 // type does not implement the requested presence.
293 if (!this._expectedPresence)
294 global.settings.set_int('saved-im-presence', presence);
274 else295 else
275 this._expectedPresence = undefined;296 this._expectedPresence = undefined;
297 },
276298
299 _setComboboxPresence: function(presence) {
277 let activatedItem;300 let activatedItem;
278301
279 if (presence == Tp.ConnectionPresenceType.AVAILABLE)302 if (presence == Tp.ConnectionPresenceType.AVAILABLE)
@@ -310,13 +333,16 @@
310 return;333 return;
311334
312 status = this._statusForPresence(newPresence);335 status = this._statusForPresence(newPresence);
313 msg = msg ? msg : "";336 msg = msg ? msg : '';
314 this._accountMgr.set_all_requested_presences(newPresence, status, msg);337 this._accountMgr.set_all_requested_presences(newPresence, status, msg);
315 },338 },
316339
317 getIMPresenceForSessionStatus: function(sessionStatus) {340 getIMPresenceForSessionStatus: function(sessionStatus) {
341 // Restore the last user-set presence when coming back from
342 // BUSY/IDLE (otherwise the last user-set presence matches
343 // the current one)
318 if (sessionStatus == GnomeSession.PresenceStatus.AVAILABLE)344 if (sessionStatus == GnomeSession.PresenceStatus.AVAILABLE)
319 return this._previousPresence;345 return global.settings.get_int('saved-im-presence');
320346
321 if (sessionStatus == GnomeSession.PresenceStatus.BUSY) {347 if (sessionStatus == GnomeSession.PresenceStatus.BUSY) {
322 // Only change presence if the current one is "more present" than348 // Only change presence if the current one is "more present" than
@@ -337,6 +363,20 @@
337 },363 },
338364
339 _sessionStatusChanged: function(sessionPresence, sessionStatus) {365 _sessionStatusChanged: function(sessionPresence, sessionStatus) {
366 if (!this._imPresenceRestored)
367 return;
368
369 if (!this._sessionPresenceRestored) {
370 let savedStatus = global.settings.get_int('saved-session-presence');
371 if (sessionStatus != savedStatus) {
372 this._presence.setStatus(savedStatus);
373 return;
374 }
375 this._sessionPresenceRestored = true;
376 }
377
378 global.settings.set_int('saved-session-presence', sessionStatus);
379
340 let [presence, s, msg] = this._accountMgr.get_most_available_presence();380 let [presence, s, msg] = this._accountMgr.get_most_available_presence();
341 let newPresence, status;381 let newPresence, status;
342382
@@ -346,7 +386,7 @@
346 return;386 return;
347387
348 status = this._statusForPresence(newPresence);388 status = this._statusForPresence(newPresence);
349 msg = msg ? msg : "";389 msg = msg ? msg : '';
350390
351 this._expectedPresence = newPresence;391 this._expectedPresence = newPresence;
352 this._accountMgr.set_all_requested_presences(newPresence, status, msg);392 this._accountMgr.set_all_requested_presences(newPresence, status, msg);
353393
=== modified file 'js/ui/viewSelector.js'
--- js/ui/viewSelector.js 2011-09-21 16:26:15 +0000
+++ js/ui/viewSelector.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Gtk = imports.gi.Gtk;4const Gtk = imports.gi.Gtk;
@@ -12,6 +12,7 @@
12const Main = imports.ui.main;12const Main = imports.ui.main;
13const Search = imports.ui.search;13const Search = imports.ui.search;
14const SearchDisplay = imports.ui.searchDisplay;14const SearchDisplay = imports.ui.searchDisplay;
15const ShellEntry = imports.ui.shellEntry;
15const Tweener = imports.ui.tweener;16const Tweener = imports.ui.tweener;
1617
17function BaseTab(titleActor, pageActor, name, a11yIcon) {18function BaseTab(titleActor, pageActor, name, a11yIcon) {
@@ -120,6 +121,7 @@
120 hint_text: _("Type to search..."),121 hint_text: _("Type to search..."),
121 track_hover: true,122 track_hover: true,
122 can_focus: true });123 can_focus: true });
124 ShellEntry.addContextMenu(this._entry);
123 this._text = this._entry.clutter_text;125 this._text = this._entry.clutter_text;
124 this._text.connect('key-press-event', Lang.bind(this, this._onKeyPress));126 this._text.connect('key-press-event', Lang.bind(this, this._onKeyPress));
125127
@@ -289,9 +291,11 @@
289 _onCapturedEvent: function(actor, event) {291 _onCapturedEvent: function(actor, event) {
290 if (event.type() == Clutter.EventType.BUTTON_PRESS) {292 if (event.type() == Clutter.EventType.BUTTON_PRESS) {
291 let source = event.get_source();293 let source = event.get_source();
292 if (source != this._text && this._text.text == '') {294 if (source != this._text && this._text.text == '' &&
295 !Main.layoutManager.keyboardBox.contains(source)) {
293 // the user clicked outside after activating the entry, but296 // the user clicked outside after activating the entry, but
294 // with no search term entered - cancel the search297 // with no search term entered and no keyboard button pressed
298 // - cancel the search
295 this._reset();299 this._reset();
296 }300 }
297 }301 }
298302
=== modified file 'js/ui/windowAttentionHandler.js'
--- js/ui/windowAttentionHandler.js 2011-09-04 08:02:35 +0000
+++ js/ui/windowAttentionHandler.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Lang = imports.lang;3const Lang = imports.lang;
4const Shell = imports.gi.Shell;4const Shell = imports.gi.Shell;
@@ -12,35 +12,10 @@
1212
13WindowAttentionHandler.prototype = {13WindowAttentionHandler.prototype = {
14 _init : function() {14 _init : function() {
15 this._startupIds = {};
16 this._tracker = Shell.WindowTracker.get_default();15 this._tracker = Shell.WindowTracker.get_default();
17 this._tracker.connect('startup-sequence-changed', Lang.bind(this, this._onStartupSequenceChanged));
18
19 global.display.connect('window-demands-attention', Lang.bind(this, this._onWindowDemandsAttention));16 global.display.connect('window-demands-attention', Lang.bind(this, this._onWindowDemandsAttention));
20 },17 },
2118
22 _onStartupSequenceChanged : function(tracker) {
23 let sequences = tracker.get_startup_sequences();
24 this._startupIds = {};
25 for(let i = 0; i < sequences.length; i++) {
26 this._startupIds[sequences[i].get_id()] = true;
27 }
28 },
29
30 _getTitle : function(app, window) {
31 if (this._startupIds[window.get_startup_id()])
32 return app.get_name();
33 else
34 return window.title;
35 },
36
37 _getBanner : function(app, window) {
38 if (this._startupIds[window.get_startup_id()])
39 return _("%s has finished starting").format(app.get_name());
40 else
41 return _("'%s' is ready").format(window.title);
42 },
43
44 _onWindowDemandsAttention : function(display, window) {19 _onWindowDemandsAttention : function(display, window) {
45 // We don't want to show the notification when the window is already focused,20 // We don't want to show the notification when the window is already focused,
46 // because this is rather pointless.21 // because this is rather pointless.
@@ -57,12 +32,16 @@
57 let source = new Source(app, window);32 let source = new Source(app, window);
58 Main.messageTray.add(source);33 Main.messageTray.add(source);
5934
60 let notification = new MessageTray.Notification(source, this._getTitle(app, window), this._getBanner(app, window));35 let banner = _("'%s' is ready").format(window.title);
36 let title = app.get_name();
37
38 let notification = new MessageTray.Notification(source, title, banner);
61 source.notify(notification);39 source.notify(notification);
6240
63 source.signalIDs.push(window.connect('notify::title', Lang.bind(this, function(win) {41 source.signalIDs.push(window.connect('notify::title',
64 notification.update(this._getTitle(app, win), this._getBanner(app, win));42 Lang.bind(this, function() {
65 })));43 notification.update(title, banner);
44 })));
66 }45 }
67};46};
6847
6948
=== modified file 'js/ui/windowManager.js'
--- js/ui/windowManager.js 2011-09-21 16:26:15 +0000
+++ js/ui/windowManager.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const GLib = imports.gi.GLib;4const GLib = imports.gi.GLib;
@@ -37,28 +37,36 @@
3737
38WindowDimmer.prototype = {38WindowDimmer.prototype = {
39 _init: function(actor) {39 _init: function(actor) {
40 this.effect = new Clutter.ShaderEffect({ shader_type: Clutter.ShaderType.FRAGMENT_SHADER });40 if (Clutter.feature_available(Clutter.FeatureFlags.SHADERS_GLSL)) {
41 this.effect.set_shader_source(getDimShaderSource());41 this._effect = new Clutter.ShaderEffect({ shader_type: Clutter.ShaderType.FRAGMENT_SHADER });
42 this._effect.set_shader_source(getDimShaderSource());
43 } else {
44 this._effect = null;
45 }
4246
43 this.actor = actor;47 this.actor = actor;
44 },48 },
4549
46 set dimFraction(fraction) {50 set dimFraction(fraction) {
47 this._dimFraction = fraction;51 this._dimFraction = fraction;
52
53 if (this._effect == null)
54 return;
55
48 if (!Meta.prefs_get_attach_modal_dialogs()) {56 if (!Meta.prefs_get_attach_modal_dialogs()) {
49 this.effect.enabled = false;57 this._effect.enabled = false;
50 return;58 return;
51 }59 }
5260
53 if (fraction > 0.01) {61 if (fraction > 0.01) {
54 Shell.shader_effect_set_double_uniform(this.effect, 'height', this.actor.get_height());62 Shell.shader_effect_set_double_uniform(this._effect, 'height', this.actor.get_height());
55 Shell.shader_effect_set_double_uniform(this.effect, 'fraction', fraction);63 Shell.shader_effect_set_double_uniform(this._effect, 'fraction', fraction);
5664
57 if (!this.effect.actor)65 if (!this._effect.actor)
58 this.actor.add_effect(this.effect);66 this.actor.add_effect(this._effect);
59 } else {67 } else {
60 if (this.effect.actor)68 if (this._effect.actor)
61 this.actor.remove_effect(this.effect);69 this.actor.remove_effect(this._effect);
62 }70 }
63 },71 },
6472
6573
=== modified file 'js/ui/workspace.js'
--- js/ui/workspace.js 2011-09-21 16:26:15 +0000
+++ js/ui/workspace.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const GConf = imports.gi.GConf;4const GConf = imports.gi.GConf;
@@ -135,8 +135,11 @@
135 this._realWindowDestroyId = this.realWindow.connect('destroy',135 this._realWindowDestroyId = this.realWindow.connect('destroy',
136 Lang.bind(this, this._disconnectRealWindowSignals));136 Lang.bind(this, this._disconnectRealWindowSignals));
137137
138 this.actor.connect('button-release-event',138 let clickAction = new Clutter.ClickAction();
139 Lang.bind(this, this._onButtonRelease));139 clickAction.connect('clicked', Lang.bind(this, this._onClicked));
140 clickAction.connect('long-press', Lang.bind(this, this._onLongPress));
141
142 this.actor.add_action(clickAction);
140143
141 this.actor.connect('scroll-event',144 this.actor.connect('scroll-event',
142 Lang.bind(this, this._onScroll));145 Lang.bind(this, this._onScroll));
@@ -147,6 +150,7 @@
147150
148 this._draggable = DND.makeDraggable(this.actor,151 this._draggable = DND.makeDraggable(this.actor,
149 { restoreOnSuccess: true,152 { restoreOnSuccess: true,
153 manualMode: true,
150 dragActorMaxSize: WINDOW_DND_SIZE,154 dragActorMaxSize: WINDOW_DND_SIZE,
151 dragActorOpacity: DRAGGING_WINDOW_OPACITY });155 dragActorOpacity: DRAGGING_WINDOW_OPACITY });
152 this._draggable.connect('drag-begin', Lang.bind(this, this._onDragBegin));156 this._draggable.connect('drag-begin', Lang.bind(this, this._onDragBegin));
@@ -345,9 +349,27 @@
345 this._zoomStep = undefined;349 this._zoomStep = undefined;
346 },350 },
347351
348 _onButtonRelease : function (actor, event) {352 _onClicked: function(action, actor) {
349 this._selected = true;353 this._selected = true;
350 this.emit('selected', event.get_time());354 this.emit('selected', global.get_current_time());
355 },
356
357 _onLongPress: function(action, actor, state) {
358 // Take advantage of the Clutter policy to consider
359 // a long-press canceled when the pointer movement
360 // exceeds dnd-drag-threshold to manually start the drag
361 if (state == Clutter.LongPressState.CANCEL) {
362 // A click cancels a long-press before any click handler is
363 // run - make sure to not start a drag in that case
364 Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
365 function() {
366 if (this._selected)
367 return;
368 let [x, y] = action.get_coords();
369 this._draggable.startDrag(x, y, global.get_current_time());
370 }));
371 }
372 return true;
351 },373 },
352374
353 _onDragBegin : function (draggable, time) {375 _onDragBegin : function (draggable, time) {
354376
=== modified file 'js/ui/workspaceSwitcherPopup.js'
--- js/ui/workspaceSwitcherPopup.js 2011-08-24 02:33:44 +0000
+++ js/ui/workspaceSwitcherPopup.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Lang = imports.lang;4const Lang = imports.lang;
55
=== modified file 'js/ui/workspaceThumbnail.js'
--- js/ui/workspaceThumbnail.js 2011-09-04 08:02:35 +0000
+++ js/ui/workspaceThumbnail.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Lang = imports.lang;4const Lang = imports.lang;
55
=== modified file 'js/ui/workspacesView.js'
--- js/ui/workspacesView.js 2011-09-21 16:26:15 +0000
+++ js/ui/workspacesView.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Lang = imports.lang;4const Lang = imports.lang;
@@ -109,8 +109,6 @@
109 this._scrollAdjustment.connect('notify::value',109 this._scrollAdjustment.connect('notify::value',
110 Lang.bind(this, this._onScroll));110 Lang.bind(this, this._onScroll));
111111
112 this._timeoutId = 0;
113
114 this._switchWorkspaceNotifyId =112 this._switchWorkspaceNotifyId =
115 global.window_manager.connect('switch-workspace',113 global.window_manager.connect('switch-workspace',
116 Lang.bind(this, this._activeWorkspaceChanged));114 Lang.bind(this, this._activeWorkspaceChanged));
@@ -321,10 +319,6 @@
321 if (this._inDrag)319 if (this._inDrag)
322 this._dragEnd();320 this._dragEnd();
323321
324 if (this._timeoutId) {
325 Mainloop.source_remove(this._timeoutId);
326 this._timeoutId = 0;
327 }
328 if (this._itemDragBeginId > 0) {322 if (this._itemDragBeginId > 0) {
329 Main.overview.disconnect(this._itemDragBeginId);323 Main.overview.disconnect(this._itemDragBeginId);
330 this._itemDragBeginId = 0;324 this._itemDragBeginId = 0;
@@ -383,72 +377,10 @@
383 this._extraWorkspaces[i].setReservedSlot(dragEvent.dragActor._delegate);377 this._extraWorkspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
384 }378 }
385379
386 let primary = Main.layoutManager.primaryMonitor;380 return DND.DragMotionResult.CONTINUE;
387
388 let activeWorkspaceIndex = global.screen.get_active_workspace_index();
389 let topWorkspace, bottomWorkspace;
390 topWorkspace = this._workspaces[activeWorkspaceIndex - 1];
391 bottomWorkspace = this._workspaces[activeWorkspaceIndex + 1];
392 let hoverWorkspace = null;
393
394 // reactive monitor edges
395 let topEdge = primary.y;
396 let switchTop = (dragEvent.y <= topEdge && topWorkspace);
397 if (switchTop && this._dragOverLastY != topEdge) {
398 topWorkspace.metaWorkspace.activate(global.get_current_time());
399 this._dragOverLastY = topEdge;
400
401 return DND.DragMotionResult.CONTINUE;
402 }
403 let bottomEdge = primary.y + primary.height - 1;
404 let switchBottom = (dragEvent.y >= bottomEdge && bottomWorkspace);
405 if (switchBottom && this._dragOverLastY != bottomEdge) {
406 bottomWorkspace.metaWorkspace.activate(global.get_current_time());
407 this._dragOverLastY = bottomEdge;
408
409 return DND.DragMotionResult.CONTINUE;
410 }
411 this._dragOverLastY = dragEvent.y;
412 let result = DND.DragMotionResult.CONTINUE;
413
414 // check hover state of new workspace area / inactive workspaces
415 if (topWorkspace) {
416 if (topWorkspace.actor.contains(dragEvent.targetActor)) {
417 hoverWorkspace = topWorkspace;
418 result = topWorkspace.handleDragOver(dragEvent.source, dragEvent.dragActor);
419 }
420 }
421
422 if (bottomWorkspace) {
423 if (bottomWorkspace.actor.contains(dragEvent.targetActor)) {
424 hoverWorkspace = bottomWorkspace;
425 result = bottomWorkspace.handleDragOver(dragEvent.source, dragEvent.dragActor);
426 }
427 }
428
429 // handle delayed workspace switches
430 if (hoverWorkspace) {
431 if (!this._timeoutId)
432 this._timeoutId = Mainloop.timeout_add_seconds(1,
433 Lang.bind(this, function() {
434 hoverWorkspace.metaWorkspace.activate(global.get_current_time());
435 return false;
436 }));
437 } else {
438 if (this._timeoutId) {
439 Mainloop.source_remove(this._timeoutId);
440 this._timeoutId = 0;
441 }
442 }
443
444 return result;
445 },381 },
446382
447 _dragEnd: function() {383 _dragEnd: function() {
448 if (this._timeoutId) {
449 Mainloop.source_remove(this._timeoutId);
450 this._timeoutId = 0;
451 }
452 DND.removeDragMonitor(this._dragMonitor);384 DND.removeDragMonitor(this._dragMonitor);
453 this._inDrag = false;385 this._inDrag = false;
454386
455387
=== modified file 'js/ui/xdndHandler.js'
--- js/ui/xdndHandler.js 2011-03-16 21:47:27 +0000
+++ js/ui/xdndHandler.js 2012-01-18 14:13:28 +0000
@@ -1,4 +1,4 @@
1/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
22
3const Clutter = imports.gi.Clutter;3const Clutter = imports.gi.Clutter;
4const Lang = imports.lang;4const Lang = imports.lang;
55
=== modified file 'po/LINGUAS'
--- po/LINGUAS 2011-09-28 00:41:45 +0000
+++ po/LINGUAS 2012-01-18 14:13:28 +0000
@@ -2,6 +2,7 @@
2an2an
3ar3ar
4as4as
5ast
5be6be
6bg7bg
7bn8bn
@@ -31,6 +32,7 @@
31ja32ja
32ko33ko
33kn34kn
35ku
34lt36lt
35lv37lv
36mr38mr
3739
=== modified file 'po/POTFILES.in'
--- po/POTFILES.in 2011-09-22 08:50:45 +0000
+++ po/POTFILES.in 2012-01-18 14:13:28 +0000
@@ -25,6 +25,7 @@
25js/ui/popupMenu.js25js/ui/popupMenu.js
26js/ui/runDialog.js26js/ui/runDialog.js
27js/ui/searchDisplay.js27js/ui/searchDisplay.js
28js/ui/shellEntry.js
28js/ui/shellMountOperation.js29js/ui/shellMountOperation.js
29js/ui/status/accessibility.js30js/ui/status/accessibility.js
30js/ui/status/bluetooth.js31js/ui/status/bluetooth.js
@@ -44,4 +45,3 @@
44src/shell-mobile-providers.c45src/shell-mobile-providers.c
45src/shell-polkit-authentication-agent.c46src/shell-polkit-authentication-agent.c
46src/shell-util.c47src/shell-util.c
47
4848
=== added file 'po/ast.po'
--- po/ast.po 1970-01-01 00:00:00 +0000
+++ po/ast.po 2012-01-18 14:13:28 +0000
@@ -0,0 +1,1630 @@
1# SOME DESCRIPTIVE TITLE.
2# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3# This file is distributed under the same license as the PACKAGE package.
4# Xandru Armesto <xandru@softastur.org>, 2011.
5msgid ""
6msgstr ""
7"Project-Id-Version: gnome-shell\n"
8"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
9"shell&keywords=I18N+L10N&component=general\n"
10"POT-Creation-Date: 2011-09-30 18:14+0000\n"
11"PO-Revision-Date: 2011-09-30 20:56+0200\n"
12"Last-Translator: Xandru Armesto <xandru@softastur.org>\n"
13"Language-Team: Softastur <alministradores@softastur.org>\n"
14"Language: ast\n"
15"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
19"X-Generator: Virtaal 0.5.2\n"
20"X-Poedit-Language: asturian\n"
21
22#: ../data/gnome-shell.desktop.in.in.h:1
23msgid "GNOME Shell"
24msgstr "GNOME Shell"
25
26#: ../data/gnome-shell.desktop.in.in.h:2
27msgid "Window management and application launching"
28msgstr "Xestión de ventanes y aniciu d'aplicaciones"
29
30#: ../data/org.gnome.shell.gschema.xml.in.h:1
31msgid ""
32"Allows access to internal debugging and monitoring tools using the Alt-F2 "
33"dialog."
34msgstr ""
35"Permitir acceder a les ferramientes internes de depuración y monitorización "
36"usando'l diálogu Alt+F2"
37
38#: ../data/org.gnome.shell.gschema.xml.in.h:2
39msgid "Enable internal tools useful for developers and testers from Alt-F2"
40msgstr ""
41"Activar les ferramientes internes, útiles pa desendolcadores y probadores, "
42"dende Alt+F2"
43
44#: ../data/org.gnome.shell.gschema.xml.in.h:3
45msgid "File extension used for storing the screencast"
46msgstr "Estensión de ficheru qu'usar p'almacenar los «screencast»"
47
48#: ../data/org.gnome.shell.gschema.xml.in.h:4
49msgid "Framerate used for recording screencasts."
50msgstr "Tasa de fotogrames usada pa grabar «screencast»."
51
52#: ../data/org.gnome.shell.gschema.xml.in.h:5
53msgid ""
54"GNOME Shell extensions have a uuid property; this key lists extensions which "
55"should be loaded. disabled-extensions overrides this setting for extensions "
56"that appear in both lists."
57msgstr ""
58"Les estensiones de GNOME Shell tienen una propiedá uuid; esta contraseña "
59"llista les estensiones que nun se deben cargar. «disabled-extensions» "
60"sobrescribe esti axuste pa les estensiones qu'aparecen en dambes llistes."
61
62#: ../data/org.gnome.shell.gschema.xml.in.h:6
63msgid "History for command (Alt-F2) dialog"
64msgstr "Históricu del diálogu de comandos (Alt+F2)"
65
66#: ../data/org.gnome.shell.gschema.xml.in.h:7
67msgid "History for the looking glass dialog"
68msgstr "Históricu del diálogu de «looking glass»"
69
70#: ../data/org.gnome.shell.gschema.xml.in.h:8
71msgid "If true, display date in the clock, in addition to time."
72msgstr "Si ye cierta, amuesa la data nel reló, arriendes de la hora."
73
74#: ../data/org.gnome.shell.gschema.xml.in.h:9
75msgid "If true, display seconds in time."
76msgstr "Si ye cierta, amuesa los segundos na hora."
77
78#: ../data/org.gnome.shell.gschema.xml.in.h:10
79msgid "If true, display the ISO week date in the calendar."
80msgstr "Si ye cierta, amuesa la data de selmana ISO nel calendariu."
81
82#: ../data/org.gnome.shell.gschema.xml.in.h:11
83msgid "List of desktop file IDs for favorite applications"
84msgstr "Llista de ID de ficheros d'escritoriu pa les aplicaciones favorites"
85
86#: ../data/org.gnome.shell.gschema.xml.in.h:13
87#, no-c-format
88msgid ""
89"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
90"used for gst-launch. The pipeline should have an unconnected sink pad where "
91"the recorded video is recorded. It will normally have a unconnected source "
92"pad; output from that pad will be written into the output file. However the "
93"pipeline can also take care of its own output - this might be used to send "
94"the output to an icecast server via shout2send or similar. When unset or set "
95"to an empty value, the default pipeline will be used. This is currently "
96"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
97"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
98"at the optimal thread count on the system."
99msgstr ""
100"Afita la tubería GStreamer usada pa codificar grabaciones. Sigue la sintaxis "
101"usada pa gst-launch. La tubería tendría tener un sumideru («sink») "
102"d'ensamblaxe/desensamblaxe au'l videu que se ta grabando, se graba. "
103"Xeneralmente tendrá un orixe d'ensambláu/desensambláu; la salida d'esi puntu "
104"escribiráse nel ficheru de salida. Sicasí, la tubería tamién pue tomar "
105"parte na so propia salida; esto pue usase pa unviar la salida a un sirvidor "
106"«icecast» a traviés de shout2send o similar. Cuando nun ta afitáu o lo ta a "
107"un valor baleru, va usase la tubería predeterminada. Anguaño te «videorate ! "
108"vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux» y graba en WEBM "
109"usando'l códec VP8. Úsase %T como suposición pal númberu de filos óptimos "
110"nel sistema."
111
112#: ../data/org.gnome.shell.gschema.xml.in.h:14
113msgid "Show date in clock"
114msgstr "Amosar la data nel reló"
115
116#: ../data/org.gnome.shell.gschema.xml.in.h:15
117msgid "Show the week date in the calendar"
118msgstr "Amosar la data de la selmana nel calendariu"
119
120#: ../data/org.gnome.shell.gschema.xml.in.h:16
121msgid "Show time with seconds"
122msgstr "Amosar la hora con segundos"
123
124#: ../data/org.gnome.shell.gschema.xml.in.h:17
125msgid ""
126"The applications corresponding to these identifiers will be displayed in the "
127"favorites area."
128msgstr ""
129"Les aplicaciones correspondientes con esos identificadores van amosase nel "
130"área de favoritos."
131
132#: ../data/org.gnome.shell.gschema.xml.in.h:18
133msgid ""
134"The filename for recorded screencasts will be a unique filename based on the "
135"current date, and use this extension. It should be changed when recording to "
136"a different container format."
137msgstr ""
138"El nome de ficheru pa los «screencast» sedrá un nome de ficheru únicu basáu "
139"na data actual y usará esta estensión. Tendría de camudase al grabar n'otru "
140"formatu contenedor distintu."
141
142#: ../data/org.gnome.shell.gschema.xml.in.h:19
143msgid ""
144"The framerate of the resulting screencast recordered by GNOME Shell's "
145"screencast recorder in frames-per-second."
146msgstr ""
147"La tasa de fotogrames de la grabación resultante grabada pol grabador de "
148"«screencast» de GNOME Shell, en fotogrames per segundu."
149
150#: ../data/org.gnome.shell.gschema.xml.in.h:20
151msgid "The gstreamer pipeline used to encode the screencast"
152msgstr "La tubería de gstreamer usada pa codificar el «screencast»"
153
154#: ../data/org.gnome.shell.gschema.xml.in.h:21
155msgid ""
156"The shell normally monitors active applications in order to present the most "
157"used ones (e.g. in launchers). While this data will be kept private, you may "
158"want to disable this for privacy reasons. Please note that doing so won't "
159"remove already saved data."
160msgstr ""
161"La «shell» normalmente monitoriza toles aplicaciones actives pa presentar "
162"les más usaes (ex. nos lanzadores). Magar qu'estos datos se caltienen de "
163"forma privada, pues querer desactivalo por razones de privacidá. Nota que "
164"faciéndolo nun desanicies los datos yá guardaos."
165
166#: ../data/org.gnome.shell.gschema.xml.in.h:22
167msgid "The type of keyboard to use."
168msgstr "La triba de tecláu qu'usar."
169
170#: ../data/org.gnome.shell.gschema.xml.in.h:23
171msgid "Uuids of extensions to enable"
172msgstr "Uuid de les estensiones qu'activar"
173
174#: ../data/org.gnome.shell.gschema.xml.in.h:24
175msgid "Whether to collect stats about applications usage"
176msgstr ""
177"Indica si hai de recolectar estadístiques tocante al usu de les aplicaciones"
178
179#: ../data/org.gnome.shell.gschema.xml.in.h:25
180msgid "Which keyboard to use"
181msgstr "Qué tecláu usar"
182
183#: ../data/org.gnome.shell.gschema.xml.in.h:26
184msgid "disabled OpenSearch providers"
185msgstr "fornidores OpenSearch desactivaos"
186
187#: ../js/gdm/loginDialog.js:617
188msgid "Session..."
189msgstr "Sesión…"
190
191#: ../js/gdm/loginDialog.js:785
192msgctxt "title"
193msgid "Sign In"
194msgstr "Entamar sesión"
195
196#. translators: this message is shown below the password entry field
197#. to indicate the user can swipe their finger instead
198#: ../js/gdm/loginDialog.js:830
199msgid "(or swipe finger)"
200msgstr "(o pasa'l deu)"
201
202#: ../js/gdm/loginDialog.js:848
203msgid "Not listed?"
204msgstr "¿Nun ta llistáu?"
205
206#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
207#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:165
208#: ../js/ui/polkitAuthenticationAgent.js:171 ../js/ui/status/bluetooth.js:480
209msgid "Cancel"
210msgstr "Encaboxar"
211
212#: ../js/gdm/loginDialog.js:1009
213msgctxt "button"
214msgid "Sign In"
215msgstr "Entamar sesión"
216
217#: ../js/gdm/loginDialog.js:1358
218msgid "Login Window"
219msgstr "Ventana d'aniciu de sesión"
220
221#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:514
222#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:585
223msgid "Suspend"
224msgstr "Suspender"
225
226#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
227#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
228msgid "Restart"
229msgstr "Reaniciar"
230
231#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
232#: ../js/ui/endSessionDialog.js:91
233msgid "Power Off"
234msgstr "Apagar"
235
236#: ../js/misc/util.js:92
237msgid "Command not found"
238msgstr "Comandu non alcontráu"
239
240#. Replace "Error invoking GLib.shell_parse_argv: " with
241#. something nicer
242#: ../js/misc/util.js:119
243msgid "Could not parse command:"
244msgstr "Nun pudo analizase'l comandu:"
245
246#: ../js/misc/util.js:127
247#, c-format
248msgid "Execution of '%s' failed:"
249msgstr "Falló la execución de «%s»:"
250
251#. Translators: Filter to display all applications
252#: ../js/ui/appDisplay.js:255
253msgid "All"
254msgstr "Toes"
255
256#: ../js/ui/appDisplay.js:319
257msgid "APPLICATIONS"
258msgstr "APLICACIONES"
259
260#: ../js/ui/appDisplay.js:377
261msgid "SETTINGS"
262msgstr "CONFIGURACIÓN"
263
264#: ../js/ui/appDisplay.js:684
265msgid "New Window"
266msgstr "Ventana nueva"
267
268#: ../js/ui/appDisplay.js:687
269msgid "Remove from Favorites"
270msgstr "Quitar de los favoritos"
271
272#: ../js/ui/appDisplay.js:688
273msgid "Add to Favorites"
274msgstr "Amestar a los favoritos"
275
276#: ../js/ui/appFavorites.js:89
277#, c-format
278msgid "%s has been added to your favorites."
279msgstr "Amestóse %s a los favoritos."
280
281#: ../js/ui/appFavorites.js:120
282#, c-format
283msgid "%s has been removed from your favorites."
284msgstr "Desanicióse %s de los favoritos."
285
286#: ../js/ui/autorunManager.js:280
287msgid "Removable Devices"
288msgstr "Preseos extraíbles"
289
290#: ../js/ui/autorunManager.js:590
291#, c-format
292msgid "Open with %s"
293msgstr "Abrir con %s"
294
295#: ../js/ui/autorunManager.js:616
296msgid "Eject"
297msgstr "Espulsar"
298
299#. Translators: Shown in calendar event list for all day events
300#. * Keep it short, best if you can use less then 10 characters
301#.
302#: ../js/ui/calendar.js:63
303msgctxt "event list time"
304msgid "All Day"
305msgstr "Tol día"
306
307#. Translators: Shown in calendar event list, if 24h format
308#: ../js/ui/calendar.js:68
309msgctxt "event list time"
310msgid "%H:%M"
311msgstr "%H:%M"
312
313#. Transators: Shown in calendar event list, if 12h format
314#: ../js/ui/calendar.js:75
315msgctxt "event list time"
316msgid "%l:%M %p"
317msgstr "%l:%M %p"
318
319#. Translators: Calendar grid abbreviation for Sunday.
320#. *
321#. * NOTE: These grid abbreviations are always shown together
322#. * and in order, e.g. "S M T W T F S".
323#.
324#: ../js/ui/calendar.js:115
325msgctxt "grid sunday"
326msgid "S"
327msgstr "D"
328
329#. Translators: Calendar grid abbreviation for Monday
330#: ../js/ui/calendar.js:117
331msgctxt "grid monday"
332msgid "M"
333msgstr "L"
334
335#. Translators: Calendar grid abbreviation for Tuesday
336#: ../js/ui/calendar.js:119
337msgctxt "grid tuesday"
338msgid "T"
339msgstr "M"
340
341#. Translators: Calendar grid abbreviation for Wednesday
342#: ../js/ui/calendar.js:121
343msgctxt "grid wednesday"
344msgid "W"
345msgstr "m"
346
347#. Translators: Calendar grid abbreviation for Thursday
348#: ../js/ui/calendar.js:123
349msgctxt "grid thursday"
350msgid "T"
351msgstr "X"
352
353#. Translators: Calendar grid abbreviation for Friday
354#: ../js/ui/calendar.js:125
355msgctxt "grid friday"
356msgid "F"
357msgstr "V"
358
359#. Translators: Calendar grid abbreviation for Saturday
360#: ../js/ui/calendar.js:127
361msgctxt "grid saturday"
362msgid "S"
363msgstr "S"
364
365#. Translators: Event list abbreviation for Sunday.
366#. *
367#. * NOTE: These list abbreviations are normally not shown together
368#. * so they need to be unique (e.g. Tuesday and Thursday cannot
369#. * both be 'T').
370#.
371#: ../js/ui/calendar.js:140
372msgctxt "list sunday"
373msgid "Su"
374msgstr "Dom"
375
376#. Translators: Event list abbreviation for Monday
377#: ../js/ui/calendar.js:142
378msgctxt "list monday"
379msgid "M"
380msgstr "Llu"
381
382#. Translators: Event list abbreviation for Tuesday
383#: ../js/ui/calendar.js:144
384msgctxt "list tuesday"
385msgid "T"
386msgstr "Mar"
387
388#. Translators: Event list abbreviation for Wednesday
389#: ../js/ui/calendar.js:146
390msgctxt "list wednesday"
391msgid "W"
392msgstr "Mié"
393
394#. Translators: Event list abbreviation for Thursday
395#: ../js/ui/calendar.js:148
396msgctxt "list thursday"
397msgid "Th"
398msgstr "Xue"
399
400#. Translators: Event list abbreviation for Friday
401#: ../js/ui/calendar.js:150
402msgctxt "list friday"
403msgid "F"
404msgstr "Vie"
405
406#. Translators: Event list abbreviation for Saturday
407#: ../js/ui/calendar.js:152
408msgctxt "list saturday"
409msgid "S"
410msgstr "Sáb"
411
412#. Translators: Text to show if there are no events
413#: ../js/ui/calendar.js:687
414msgid "Nothing Scheduled"
415msgstr "Res programáu"
416
417#. Translators: Shown on calendar heading when selected day occurs on current year
418#: ../js/ui/calendar.js:703
419msgctxt "calendar heading"
420msgid "%A, %B %d"
421msgstr "%A, %d de %B"
422
423#. Translators: Shown on calendar heading when selected day occurs on different year
424#: ../js/ui/calendar.js:706
425msgctxt "calendar heading"
426msgid "%A, %B %d, %Y"
427msgstr "%A, %d de %B de %Y"
428
429#: ../js/ui/calendar.js:716
430msgid "Today"
431msgstr "Güei"
432
433#: ../js/ui/calendar.js:720
434msgid "Tomorrow"
435msgstr "Mañana"
436
437#: ../js/ui/calendar.js:729
438msgid "This week"
439msgstr "Esta selmana"
440
441#: ../js/ui/calendar.js:737
442msgid "Next week"
443msgstr "La selmana que vien"
444
445#: ../js/ui/contactDisplay.js:59 ../js/ui/notificationDaemon.js:444
446#: ../js/ui/status/power.js:223 ../src/shell-app.c:355
447msgid "Unknown"
448msgstr "Desconocíu"
449
450#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:139
451msgid "Available"
452msgstr "Disponible"
453
454#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:148
455msgid "Away"
456msgstr "Ausente"
457
458#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:142
459msgid "Busy"
460msgstr "Ocupáu"
461
462#: ../js/ui/contactDisplay.js:93
463msgid "Offline"
464msgstr "Desconeutáu"
465
466#: ../js/ui/contactDisplay.js:140
467msgid "CONTACTS"
468msgstr "CONTAUTOS"
469
470#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1204
471msgid "Remove"
472msgstr "Desaniciar"
473
474#: ../js/ui/dateMenu.js:99
475msgid "Date and Time Settings"
476msgstr "Axustes d'hora y data"
477
478#: ../js/ui/dateMenu.js:125
479msgid "Open Calendar"
480msgstr "Abrir calendariu"
481
482#. Translators: This is the time format with date used
483#. in 24-hour mode.
484#: ../js/ui/dateMenu.js:183
485msgid "%a %b %e, %R:%S"
486msgstr "%a %e de %b, %R:%S"
487
488#: ../js/ui/dateMenu.js:184
489msgid "%a %b %e, %R"
490msgstr "%a %e de %b, %R"
491
492#. Translators: This is the time format without date used
493#. in 24-hour mode.
494#: ../js/ui/dateMenu.js:188
495msgid "%a %R:%S"
496msgstr "%a %R:%S"
497
498#: ../js/ui/dateMenu.js:189
499msgid "%a %R"
500msgstr "%a %R"
501
502#. Translators: This is a time format with date used
503#. for AM/PM.
504#: ../js/ui/dateMenu.js:196
505msgid "%a %b %e, %l:%M:%S %p"
506msgstr "%a %e de %b, %l:%M:%S %p"
507
508#: ../js/ui/dateMenu.js:197
509msgid "%a %b %e, %l:%M %p"
510msgstr "%a %e de %b, %l:%M %p"
511
512#. Translators: This is a time format without date used
513#. for AM/PM.
514#: ../js/ui/dateMenu.js:201
515msgid "%a %l:%M:%S %p"
516msgstr "%a %l:%M:%S %p"
517
518#: ../js/ui/dateMenu.js:202
519msgid "%a %l:%M %p"
520msgstr "%a %l:%M %p"
521
522#. Translators: This is the date format to use when the calendar popup is
523#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
524#.
525#: ../js/ui/dateMenu.js:213
526msgid "%A %B %e, %Y"
527msgstr "%A, %e de %B de %Y"
528
529#: ../js/ui/docDisplay.js:16
530msgid "RECENT ITEMS"
531msgstr "ELEMENTOS RECIENTES"
532
533#: ../js/ui/endSessionDialog.js:60
534#, c-format
535msgid "Log Out %s"
536msgstr "Zarrar la sesión %s"
537
538#: ../js/ui/endSessionDialog.js:61 ../js/ui/endSessionDialog.js:75
539msgid "Log Out"
540msgstr "Zarrar la sesión"
541
542#: ../js/ui/endSessionDialog.js:62
543msgid "Click Log Out to quit these applications and log out of the system."
544msgstr ""
545"Calca «Zarrar la sesión» pa colar d'eses aplicaciones y zarrar la sesión del "
546"sistema."
547
548#: ../js/ui/endSessionDialog.js:64
549#, c-format
550msgid "%s will be logged out automatically in %d second."
551msgid_plural "%s will be logged out automatically in %d seconds."
552msgstr[0] "va zarrase automáticamente la sesión de %s en %d segundu."
553msgstr[1] "va zarrase automáticamente la sesión de %s en %d segundos."
554
555#: ../js/ui/endSessionDialog.js:69
556#, c-format
557msgid "You will be logged out automatically in %d second."
558msgid_plural "You will be logged out automatically in %d seconds."
559msgstr[0] "La sesión va zarrase automáticamente en %d segundu."
560msgstr[1] "La sesión va zarrase automáticamente en %d segundos."
561
562#: ../js/ui/endSessionDialog.js:73
563msgid "Logging out of the system."
564msgstr "Zarrando la sesión."
565
566#: ../js/ui/endSessionDialog.js:81
567msgid "Click Power Off to quit these applications and power off the system."
568msgstr "Calca «Apagar» pa colar d'eses aplicaciones y apagar el sistema."
569
570#: ../js/ui/endSessionDialog.js:83
571#, c-format
572msgid "The system will power off automatically in %d second."
573msgid_plural "The system will power off automatically in %d seconds."
574msgstr[0] "El sistema va apagase automáticamente en %d segundu."
575msgstr[1] "El sistema va apagase automáticamente en %d segundos."
576
577#: ../js/ui/endSessionDialog.js:87
578msgid "Powering off the system."
579msgstr "Apagando'l sistema."
580
581#: ../js/ui/endSessionDialog.js:98
582msgid "Click Restart to quit these applications and restart the system."
583msgstr "Calca «Reaniciar» pa colar d'eses aplicaciones y reaniciar el sistema."
584
585#: ../js/ui/endSessionDialog.js:100
586#, c-format
587msgid "The system will restart automatically in %d second."
588msgid_plural "The system will restart automatically in %d seconds."
589msgstr[0] "El sistema va reaniciase automáticamente en %d segundu."
590msgstr[1] "El sistema va reaniciase automáticamente en %d segundos."
591
592#: ../js/ui/endSessionDialog.js:104
593msgid "Restarting the system."
594msgstr "Reaniciando'l sistema."
595
596#: ../js/ui/extensionSystem.js:481
597msgid "Install"
598msgstr "Instalar"
599
600#: ../js/ui/extensionSystem.js:485
601#, c-format
602msgid "Download and install '%s' from extensions.gnome.org?"
603msgstr "¿Baxar ya instalar «%s» dende extensions.gnome.org?"
604
605#: ../js/ui/keyboard.js:529 ../js/ui/status/power.js:211
606msgid "Keyboard"
607msgstr "Tecláu"
608
609#: ../js/ui/lookingGlass.js:645
610msgid "No extensions installed"
611msgstr "Nun hai estensiones instalaes"
612
613#. Translators: argument is an extension UUID.
614#: ../js/ui/lookingGlass.js:700
615#, c-format
616msgid "%s has not emitted any errors."
617msgstr "%s nun emitió error nengún."
618
619#: ../js/ui/lookingGlass.js:706
620msgid "Hide Errors"
621msgstr "Anubrir Errores"
622
623#: ../js/ui/lookingGlass.js:710 ../js/ui/lookingGlass.js:760
624msgid "Show Errors"
625msgstr "Amosar Errores"
626
627#: ../js/ui/lookingGlass.js:719
628msgid "Enabled"
629msgstr "Activáu"
630
631#. translators:
632#. * The device has been disabled
633#: ../js/ui/lookingGlass.js:721 ../src/gvc/gvc-mixer-control.c:1093
634msgid "Disabled"
635msgstr "Desactiváu"
636
637#: ../js/ui/lookingGlass.js:723
638msgid "Error"
639msgstr "Fallu"
640
641#: ../js/ui/lookingGlass.js:725
642msgid "Out of date"
643msgstr "Caducáu"
644
645#: ../js/ui/lookingGlass.js:727
646msgid "Downloading"
647msgstr "Descargando"
648
649#: ../js/ui/lookingGlass.js:748
650msgid "View Source"
651msgstr "Ver fonte"
652
653#: ../js/ui/lookingGlass.js:754
654msgid "Web Page"
655msgstr "Páxina web"
656
657#: ../js/ui/messageTray.js:1197
658msgid "Open"
659msgstr "Abrir"
660
661#: ../js/ui/messageTray.js:2406
662msgid "System Information"
663msgstr "Información del sistema"
664
665#: ../js/ui/networkAgent.js:145
666msgid "Show password"
667msgstr "Amosar contraseña"
668
669#: ../js/ui/networkAgent.js:160
670msgid "Connect"
671msgstr "Coneutar"
672
673#. Cisco LEAP
674#: ../js/ui/networkAgent.js:255 ../js/ui/networkAgent.js:267
675#: ../js/ui/networkAgent.js:294 ../js/ui/networkAgent.js:314
676#: ../js/ui/networkAgent.js:324
677msgid "Password: "
678msgstr "Contraseña: "
679
680#. static WEP
681#: ../js/ui/networkAgent.js:260
682msgid "Key: "
683msgstr "Contraseña:"
684
685#. TTLS and PEAP are actually much more complicated, but this complication
686#. is not visible here since we only care about phase2 authentication
687#. (and don't even care of which one)
688#: ../js/ui/networkAgent.js:292 ../js/ui/networkAgent.js:310
689msgid "Username: "
690msgstr "Nome d'usuariu:"
691
692#: ../js/ui/networkAgent.js:298
693msgid "Identity: "
694msgstr "Identidá:"
695
696#: ../js/ui/networkAgent.js:300
697msgid "Private key password: "
698msgstr "Clave de la contraseña privada:"
699
700#: ../js/ui/networkAgent.js:312
701msgid "Service: "
702msgstr "Serviciu:"
703
704#: ../js/ui/networkAgent.js:341
705msgid "Authentication required by wireless network"
706msgstr "La rede inalámbrica requier autenticación"
707
708#: ../js/ui/networkAgent.js:342
709#, c-format
710msgid ""
711"Passwords or encryption keys are required to access the wireless network '%"
712"s'."
713msgstr ""
714"Necesítense contraseñes o claves de cifráu p'acceder a la rede inalámbrica «"
715"%s»."
716
717#: ../js/ui/networkAgent.js:346
718msgid "Wired 802.1X authentication"
719msgstr "Autenticación 802.1X cableada"
720
721#: ../js/ui/networkAgent.js:348
722msgid "Network name: "
723msgstr "Nome de la rede"
724
725#: ../js/ui/networkAgent.js:353
726msgid "DSL authentication"
727msgstr "Autenticación DSL"
728
729#: ../js/ui/networkAgent.js:360
730msgid "PIN code required"
731msgstr "Códigu PIN requeríu"
732
733#: ../js/ui/networkAgent.js:361
734msgid "PIN code is needed for the mobile broadband device"
735msgstr "Necesítase un códigu PIN pal preséu de banda ancha móvil"
736
737#: ../js/ui/networkAgent.js:362
738msgid "PIN: "
739msgstr "PIN: "
740
741#: ../js/ui/networkAgent.js:368
742msgid "Mobile broadband network password"
743msgstr "Contraseña de la rede de banda ancha móvil"
744
745#: ../js/ui/networkAgent.js:369
746#, c-format
747msgid "A password is required to connect to '%s'."
748msgstr "Requierse una contraseña pa coneutar a «%s»."
749
750#: ../js/ui/overview.js:91
751msgid "Undo"
752msgstr "Desfacer"
753
754#: ../js/ui/overview.js:205
755msgid "Windows"
756msgstr "Ventanes"
757
758#: ../js/ui/overview.js:208
759msgid "Applications"
760msgstr "Aplicaciones"
761
762#. Translators: this is the name of the dock/favorites area on
763#. the left of the overview
764#: ../js/ui/overview.js:230
765msgid "Dash"
766msgstr "Tableru"
767
768#. TODO - _quit() doesn't really work on apps in state STARTING yet
769#: ../js/ui/panel.js:539
770#, c-format
771msgid "Quit %s"
772msgstr "Colar de %s"
773
774#. Translators: If there is no suitable word for "Activities"
775#. in your language, you can use the word for "Overview".
776#: ../js/ui/panel.js:575
777msgid "Activities"
778msgstr "Actividaes"
779
780#: ../js/ui/panel.js:967
781msgid "Top Bar"
782msgstr "Barra superior"
783
784#: ../js/ui/placeDisplay.js:120
785#, c-format
786msgid "Failed to unmount '%s'"
787msgstr "Falló al desmontar «%s»"
788
789#: ../js/ui/placeDisplay.js:123
790msgid "Retry"
791msgstr "Reintentar"
792
793#: ../js/ui/placeDisplay.js:163
794msgid "Connect to..."
795msgstr "Coneutar a…"
796
797#: ../js/ui/placeDisplay.js:375
798msgid "PLACES & DEVICES"
799msgstr "LLUGARES Y PRESEOS"
800
801#: ../js/ui/polkitAuthenticationAgent.js:72
802msgid "Authentication Required"
803msgstr "Necesítase autenticación"
804
805#: ../js/ui/polkitAuthenticationAgent.js:106
806msgid "Administrator"
807msgstr "Alministrador"
808
809#: ../js/ui/polkitAuthenticationAgent.js:175
810msgid "Authenticate"
811msgstr "Autenticar"
812
813#. Translators: "that didn't work" refers to the fact that the
814#. * requested authentication was not gained; this can happen
815#. * because of an authentication error (like invalid password),
816#. * for instance.
817#: ../js/ui/polkitAuthenticationAgent.js:256
818msgid "Sorry, that didn't work. Please try again."
819msgstr "Inténtalo de nueves,"
820
821#: ../js/ui/polkitAuthenticationAgent.js:268
822msgid "Password:"
823msgstr "Contraseña:"
824
825#. Translators: this MUST be either "toggle-switch-us"
826#. (for toggle switches containing the English words
827#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
828#. switches containing "◯" and "|"). Other values will
829#. simply result in invisible toggle switches.
830#: ../js/ui/popupMenu.js:731
831msgid "toggle-switch-us"
832msgstr "toggle-switch-intl"
833
834#: ../js/ui/runDialog.js:208
835msgid "Please enter a command:"
836msgstr "Introduz un comandu:"
837
838#: ../js/ui/searchDisplay.js:340
839msgid "Searching..."
840msgstr "Guetando…"
841
842#: ../js/ui/searchDisplay.js:363
843msgid "No matching results."
844msgstr "Nun s'atopó dengún resultáu coincidente."
845
846#: ../js/ui/shellMountOperation.js:285
847msgid "Wrong password, please try again"
848msgstr "Contraseña incorreuta; inténtalo de nueves"
849
850#: ../js/ui/status/accessibility.js:60
851msgid "Zoom"
852msgstr "Ampliación"
853
854#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
855#. 'screen-reader-enabled');
856#. this.menu.addMenuItem(screenReader);
857#: ../js/ui/status/accessibility.js:71
858msgid "Screen Keyboard"
859msgstr "Tecláu en pantalla"
860
861#: ../js/ui/status/accessibility.js:75
862msgid "Visual Alerts"
863msgstr "Alertes visuales"
864
865#: ../js/ui/status/accessibility.js:78
866msgid "Sticky Keys"
867msgstr "Tecles persistentes"
868
869#: ../js/ui/status/accessibility.js:81
870msgid "Slow Keys"
871msgstr "Tecles lentes"
872
873#: ../js/ui/status/accessibility.js:84
874msgid "Bounce Keys"
875msgstr "Refugu de tecles"
876
877#: ../js/ui/status/accessibility.js:87
878msgid "Mouse Keys"
879msgstr "Tecles del mur"
880
881#: ../js/ui/status/accessibility.js:91
882msgid "Universal Access Settings"
883msgstr "Configuración del accesu universal"
884
885#: ../js/ui/status/accessibility.js:141
886msgid "High Contrast"
887msgstr "Contraste altu"
888
889#: ../js/ui/status/accessibility.js:178
890msgid "Large Text"
891msgstr "Testu grande"
892
893#: ../js/ui/status/bluetooth.js:39 ../js/ui/status/bluetooth.js:261
894#: ../js/ui/status/bluetooth.js:347 ../js/ui/status/bluetooth.js:381
895#: ../js/ui/status/bluetooth.js:421 ../js/ui/status/bluetooth.js:454
896msgid "Bluetooth"
897msgstr "Bluetooth"
898
899#: ../js/ui/status/bluetooth.js:52
900msgid "Visibility"
901msgstr "Visibilidá"
902
903#: ../js/ui/status/bluetooth.js:66
904msgid "Send Files to Device..."
905msgstr "Unviar ficheros al preséu…"
906
907#: ../js/ui/status/bluetooth.js:67
908msgid "Set up a New Device..."
909msgstr "Configurar un preséu nuevu…"
910
911#: ../js/ui/status/bluetooth.js:91
912msgid "Bluetooth Settings"
913msgstr "Configuración de Bluetooth"
914
915#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
916#: ../js/ui/status/bluetooth.js:111
917msgid "hardware disabled"
918msgstr "hardware desactiváu"
919
920#: ../js/ui/status/bluetooth.js:208
921msgid "Connection"
922msgstr "Conexón"
923
924#: ../js/ui/status/bluetooth.js:217 ../js/ui/status/network.js:486
925msgid "disconnecting..."
926msgstr "desconeutando…"
927
928#: ../js/ui/status/bluetooth.js:230 ../js/ui/status/network.js:492
929msgid "connecting..."
930msgstr "coneutando…"
931
932#: ../js/ui/status/bluetooth.js:248
933msgid "Send Files..."
934msgstr "Unviar ficheros…"
935
936#: ../js/ui/status/bluetooth.js:253
937msgid "Browse Files..."
938msgstr "Desaminar ficheros…"
939
940#: ../js/ui/status/bluetooth.js:262
941msgid "Error browsing device"
942msgstr "Fallu al desaminar el preséu"
943
944#: ../js/ui/status/bluetooth.js:263
945#, c-format
946msgid "The requested device cannot be browsed, error is '%s'"
947msgstr "Nun se pue desaminar el preséu solicitáu, el fallu ye «%s»"
948
949#: ../js/ui/status/bluetooth.js:271
950msgid "Keyboard Settings"
951msgstr "Configuración del tecláu"
952
953#: ../js/ui/status/bluetooth.js:274
954msgid "Mouse Settings"
955msgstr "Axustes del mur…"
956
957#: ../js/ui/status/bluetooth.js:279 ../js/ui/status/volume.js:62
958msgid "Sound Settings"
959msgstr "Configuración del soníu"
960
961#: ../js/ui/status/bluetooth.js:382
962#, c-format
963msgid "Authorization request from %s"
964msgstr "Solicitú d'autorización de %s"
965
966#: ../js/ui/status/bluetooth.js:388
967#, c-format
968msgid "Device %s wants access to the service '%s'"
969msgstr "El preséu %s quier acceder al serviciu «%s»"
970
971#: ../js/ui/status/bluetooth.js:390
972msgid "Always grant access"
973msgstr "Conceder accesu siempre"
974
975#: ../js/ui/status/bluetooth.js:391
976msgid "Grant this time only"
977msgstr "Conceder namái esta vegada"
978
979#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1200
980msgid "Reject"
981msgstr "Refugar"
982
983#: ../js/ui/status/bluetooth.js:422
984#, c-format
985msgid "Pairing confirmation for %s"
986msgstr "Confirmación d'emparexamientu pa «%s»"
987
988#: ../js/ui/status/bluetooth.js:428 ../js/ui/status/bluetooth.js:462
989#, c-format
990msgid "Device %s wants to pair with this computer"
991msgstr "El preséu «%s» quier emparexase con esti equipu"
992
993#: ../js/ui/status/bluetooth.js:429
994#, c-format
995msgid "Please confirm whether the PIN '%s' matches the one on the device."
996msgstr "Confirma que'l PIN amosáu en «%s» concasa col del preséu."
997
998#: ../js/ui/status/bluetooth.js:431
999msgid "Matches"
1000msgstr "Concasa"
1001
1002#: ../js/ui/status/bluetooth.js:432
1003msgid "Does not match"
1004msgstr "Nun concasa"
1005
1006#: ../js/ui/status/bluetooth.js:455
1007#, c-format
1008msgid "Pairing request for %s"
1009msgstr "Solicitú d'emparexamientu pa «%s»"
1010
1011#: ../js/ui/status/bluetooth.js:463
1012msgid "Please enter the PIN mentioned on the device."
1013msgstr "Introduz el PIN mencionáu nel preséu."
1014
1015#: ../js/ui/status/bluetooth.js:479
1016msgid "OK"
1017msgstr "Aceutar"
1018
1019#: ../js/ui/status/keyboard.js:73
1020msgid "Show Keyboard Layout"
1021msgstr "Amosar la distribución del tecláu"
1022
1023#: ../js/ui/status/keyboard.js:78
1024msgid "Region and Language Settings"
1025msgstr "Configuración de rexón y llingua"
1026
1027#: ../js/ui/status/network.js:97
1028msgid "<unknown>"
1029msgstr "<desconocíu>"
1030
1031#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
1032#: ../js/ui/status/network.js:285
1033msgid "disabled"
1034msgstr "desactivada"
1035
1036#. Translators: this is for network devices that are physically present but are not
1037#. under NetworkManager's control (and thus cannot be used in the menu)
1038#: ../js/ui/status/network.js:484
1039msgid "unmanaged"
1040msgstr "non xestionada"
1041
1042#. Translators: this is for network connections that require some kind of key or password
1043#: ../js/ui/status/network.js:495
1044msgid "authentication required"
1045msgstr "necesítase autenticación"
1046
1047#. Translators: this is for devices that require some kind of firmware or kernel
1048#. module, which is missing
1049#: ../js/ui/status/network.js:505
1050msgid "firmware missing"
1051msgstr "falta'l «firmware»"
1052
1053#. Translators: this is for wired network devices that are physically disconnected
1054#: ../js/ui/status/network.js:512
1055msgid "cable unplugged"
1056msgstr "cable desconeutáu"
1057
1058#. Translators: this is for a network device that cannot be activated (for example it
1059#. is disabled by rfkill, or it has no coverage
1060#: ../js/ui/status/network.js:517
1061msgid "unavailable"
1062msgstr "non disponible"
1063
1064#: ../js/ui/status/network.js:519
1065msgid "connection failed"
1066msgstr "falló la conexón"
1067
1068#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1523
1069msgid "More..."
1070msgstr "Más…"
1071
1072#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
1073#. and we cannot access its settings (including the name)
1074#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1458
1075msgid "Connected (private)"
1076msgstr "Coneutada (privada)"
1077
1078#: ../js/ui/status/network.js:689
1079msgid "Auto Ethernet"
1080msgstr "Ethernet automática"
1081
1082#: ../js/ui/status/network.js:753
1083msgid "Auto broadband"
1084msgstr "Banda ancha automática"
1085
1086#: ../js/ui/status/network.js:756
1087msgid "Auto dial-up"
1088msgstr "Marcáu automáticu"
1089
1090#. TRANSLATORS: this the automatic wireless connection name (including the network name)
1091#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1470
1092#, c-format
1093msgid "Auto %s"
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: