Browse Source

Imported Upstream version 2.6.5

tags/upstream/2.6.5^0
Fabio Fantoni 6 years ago
parent
commit
53dc204748
23 changed files with 807 additions and 203 deletions
  1. +104
    -9
      .gitignore
  2. +111
    -111
      cinnamon.pot
  3. +1
    -1
      configure.ac
  4. +1
    -1
      docs/reference/cinnamon-js/Makefile.am
  5. +7
    -0
      docs/reference/cinnamon-js/gen_doc.py
  6. +118
    -3
      docs/reference/cinnamon-js/gen_lib.py
  7. +3
    -1
      docs/reference/cinnamon-tutorials/Makefile.am
  8. +22
    -19
      docs/reference/cinnamon-tutorials/cinnamon-tutorials-docs.sgml.in
  9. +6
    -5
      docs/reference/cinnamon-tutorials/documenting-source.xml
  10. +210
    -0
      docs/reference/cinnamon-tutorials/xlet-settings-ref.xml
  11. +14
    -4
      docs/reference/cinnamon-tutorials/xlet-settings.xml
  12. +3
    -1
      docs/reference/cinnamon/cinnamon-docs.sgml.in
  13. +3
    -3
      docs/reference/st/cinnamon-st-docs.sgml.in
  14. +51
    -0
      files/usr/bin/cinnamon-killer-daemon
  15. +9
    -8
      files/usr/lib/cinnamon-desktop-editor/cinnamon-desktop-editor.py
  16. +1
    -0
      files/usr/lib/cinnamon-settings/modules/cs_keyboard.py
  17. +8
    -0
      files/usr/share/applications/cinnamon-killer-daemon.desktop
  18. +1
    -1
      files/usr/share/cinnamon-session/sessions/cinnamon.session
  19. +1
    -1
      files/usr/share/cinnamon-session/sessions/cinnamon2d.session
  20. +17
    -14
      files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js
  21. +1
    -1
      js/ui/applet.js
  22. +2
    -0
      js/ui/appletManager.js
  23. +113
    -20
      js/ui/settings.js

+ 104
- 9
.gitignore View File

@@ -1,24 +1,119 @@
.pc
ABOUT-NLS
Makefile
Makefile.in
!files/Makefile.in
aclocal.m4
autom4te.cache/
browser-plugin/*
config.h
config.h.in
config/compile
config/depcomp
config/install-sh
config/ltmain.sh
config.log
config.status
config/
configure
data/Makefile
data/Makefile.in
data/cinnamon.desktop
data/gschemas.compiled
data/icons/Makefile
data/org.cinnamon.gschema.valid
data/org.cinnamon.gschema.xml
data/theme/gdm.css
docs/Makefile
docs/reference/*/*-docs.sgml
docs/reference/*/*.args
docs/reference/*/*.hierarchy
docs/reference/*/*.interfaces
docs/reference/*/*.prerequisites
docs/reference/*/*.signals
docs/reference/*/*.stamp
docs/reference/*/*.txt
docs/reference/*/*.types
docs/reference/*/.libs/
docs/reference/*/Makefile
docs/reference/*/html/
docs/reference/*/xml/
docs/reference/Makefile
docs/reference/cinnamon-js/__pycache__/
docs/reference/cinnamon-js/misc/
docs/reference/cinnamon-js/ui/
files/Makefile
gtk-doc.make
js/Makefile
js/Makefile.in
js/gdm/*
m4/intltool.m4
m4/libtool.m4
m4/lt~obsolete.m4
js/misc/config.js
libtool
m4/
man/Makefile
man/Makefile.in
po/Makefile
po/Makefile.in.in
po/Makevars.template
po/POTFILES
po/Rules-quot
po/boldquot.sed
po/en@boldquot.header
po/en@quot.header
po/insert-header.sin
po/quot.sed
po/remove-potcdate.sin
po/stamp-it
src/*.gir
src/*.la
src/*.lo
src/*.o
src/*.typelib
src/.deps/
src/.libs/
src/Makefile
src/Makefile.in
src/cinnamon
src/cinnamon-enum-types.c
src/cinnamon-enum-types.h
src/cinnamon-extension-tool
src/cinnamon-hotplug-sniffer
src/cinnamon-marshal.c
src/cinnamon-marshal.h
src/cinnamon-perf-helper
src/cinnamon-real
src/cinnamon_perf_helper-cinnamon-perf-helper.o
src/cinnamon_real-main.o
src/gvc/*.lo
src/gvc/.deps/
src/gvc/.dirstamp
src/gvc/.libs/
src/hotplug-sniffer/*.o
src/hotplug-sniffer/.deps/
src/hotplug-sniffer/.dirstamp
src/hotplug-sniffer/org.Cinnamon.HotplugSniffer.service
src/na-marshal.c
src/na-marshal.h
src/run-js-test
src/run_js_test-run-js-test.o
src/st-enum-types.c
src/st-enum-types.h
src/st-marshal.c
src/st-marshal.h
src/st.h
src/st/*.lo
src/st/.deps/
src/st/.dirstamp
src/st/.libs/
src/st/test_theme-test-theme.o
src/stamp-cinnamon-enum-types.h
src/stamp-cinnamon-marshal.h
src/stamp-na-marshal.h
src/stamp-st-enum-types.h
src/stamp-st-marshal.h
src/stamp-st.h
src/test-recorder
src/test-theme
src/tray/*.lo
src/tray/.deps/
src/tray/.dirstamp
src/tray/.libs/
stamp-h1
tests/Makefile
tests/Makefile.in
.pc
tests/run-test.sh

+ 111
- 111
cinnamon.pot View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-05-22 13:42+0200\n"
"POT-Creation-Date: 2015-05-27 12:12+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -154,7 +154,7 @@ msgstr ""
msgid "Remove this desklet"
msgstr ""

#: js/ui/expoThumbnail.js:896
#: js/ui/expoThumbnail.js:899
#, javascript-format
msgid ""
"Are you sure you want to remove workspace \"%s\"?\n"
@@ -243,7 +243,7 @@ msgid "WORKSPACE"
msgstr ""

#: js/ui/messageTray.js:449
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:250
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:251
msgid "%l:%M %p"
msgstr ""

@@ -285,78 +285,78 @@ msgstr ""
msgid "Select new position of panel. Esc to cancel."
msgstr ""

#: js/ui/panel.js:997
#: js/ui/panel.js:974
msgid "Troubleshoot ..."
msgstr ""

#: js/ui/panel.js:998
#: js/ui/panel.js:975
msgid "Restart Cinnamon"
msgstr ""

#: js/ui/panel.js:1002
#: js/ui/panel.js:979
msgid "Looking Glass"
msgstr ""

#: js/ui/panel.js:1006
#: js/ui/panel.js:983
msgid "Restore all settings to default"
msgstr ""

#: js/ui/panel.js:1021
#: js/ui/panel.js:998
msgid "Modify panel ..."
msgstr ""

#: js/ui/panel.js:1023
#: js/ui/panel.js:1000
msgid "Remove panel"
msgstr ""

#: js/ui/panel.js:1029
#: js/ui/panel.js:1006
msgid "Add panel"
msgstr ""

#: js/ui/panel.js:1036
#: js/ui/panel.js:1013
msgid "Move panel"
msgstr ""

#: js/ui/panel.js:1043
#: js/ui/panel.js:1020
msgid "Copy applet configuration"
msgstr ""

#: js/ui/panel.js:1050
#: js/ui/panel.js:1027
msgid "Paste applet configuration"
msgstr ""

#: js/ui/panel.js:1053
#: js/ui/panel.js:1030
msgid ""
"Pasting applet configuration will remove all existing applets on this panel."
" Do you want to continue?"
msgstr ""

#: js/ui/panel.js:1061
#: js/ui/panel.js:1038
msgid "Clear all applets"
msgstr ""

#: js/ui/panel.js:1064
#: js/ui/panel.js:1041
msgid "Are you sure you want to clear all applets on this panel?"
msgstr ""

#: js/ui/panel.js:1077 files/usr/lib/cinnamon-settings/modules/cs_panel.py:129
#: js/ui/panel.js:1054 files/usr/lib/cinnamon-settings/modules/cs_panel.py:119
msgid "Panel edit mode"
msgstr ""

#: js/ui/panel.js:1100
#: js/ui/panel.js:1077
msgid "Add applets to the panel"
msgstr ""

#: js/ui/panel.js:1103
#: js/ui/panel.js:1080
msgid "Panel settings"
msgstr ""

#: js/ui/panel.js:1106 files/usr/lib/cinnamon-settings/modules/cs_themes.py:17
#: js/ui/panel.js:1083 files/usr/lib/cinnamon-settings/modules/cs_themes.py:17
#: files/usr/lib/cinnamon-settings/modules/cs_themes.py:36
msgid "Themes"
msgstr ""

#: js/ui/panel.js:1109
#: js/ui/panel.js:1086
msgid "All settings"
msgstr ""

@@ -544,7 +544,7 @@ msgstr ""

#. notifications@cinnamon.org->metadata.json->name
#: files/usr/share/cinnamon/applets/inhibit@cinnamon.org/applet.js:146
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:48
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:49
#: files/usr/lib/cinnamon-settings/modules/cs_notifications.py:35
msgid "Notifications"
msgstr ""
@@ -614,38 +614,38 @@ msgstr ""
msgid "Menu"
msgstr ""

#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1741
#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1746
#: files/usr/share/cinnamon/applets/recent@cinnamon.org/applet.js:95
msgid "No recent documents"
msgstr ""

#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1950
#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1955
#: files/usr/lib/cinnamon-settings/modules/cs_keyboard.py:152
msgid "Lock screen"
msgstr ""

#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1951
#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1956
#: files/usr/lib/cinnamon-settings/modules/cs_power.py:7
msgid "Lock the screen"
msgstr ""

#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1978
#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1983
msgid "Logout"
msgstr ""

#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1979
#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1984
msgid "Leave the session"
msgstr ""

#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1993
#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1998
msgid "Quit"
msgstr ""

#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1994
#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:1999
msgid "Shutdown the computer"
msgstr ""

#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:2117
#: files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js:2122
msgid "Type to search..."
msgstr ""

@@ -766,90 +766,90 @@ msgstr ""
msgid "Activation of network connection failed"
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2112
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2124
msgid "Networking is disabled"
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2131
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2143
msgid "No connection"
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2137
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2149
msgid "Connecting to the cellular network..."
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2141
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2153
msgid "Connecting to the wireless network..."
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2145
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2157
msgid "Connecting to the wired network..."
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2149
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2161
msgid "Connecting to the VPN..."
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2155
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2167
msgid "Connecting to the network..."
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2171
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2183
msgid "Connected to the wireless network"
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2174
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2186
msgid "Wireless connection"
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2184
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2196
msgid "Connected to the wired network"
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2195
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2200
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2207
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2212
msgid "Connected to the cellular network"
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2205
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2217
msgid "Connected to the VPN"
msgstr ""

#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2211
#: files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js:2223
msgid "Connected to the network"
msgstr ""

#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:63
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:64
msgid "Clear notifications"
msgstr ""

#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:283
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:284
msgid "No notifications"
msgstr ""

#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:286
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:287
msgid " notification"
msgstr ""

#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:289
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:290
msgid " notifications"
msgstr ""

#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:303
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:311
msgid " (Just now)"
msgstr ""

#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:306
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:314
#, javascript-format
msgid " (%s seconds ago)"
msgstr ""

#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:309
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:317
#, javascript-format
msgid " (%s minute ago)"
msgstr ""

#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:312
#: files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js:320
#, javascript-format
msgid " (%s minutes ago)"
msgstr ""
@@ -1107,122 +1107,122 @@ msgstr ""
msgid "Background Settings"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:29
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:28
msgid "Playing"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:30
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:29
msgid "Paused"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:31
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:30
msgid "Stopped"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:349
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:613
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:348
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:600
msgid "Unknown Artist"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:350
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:617
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:349
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:604
msgid "Unknown Album"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:351
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:621
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:350
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:608
msgid "Unknown Title"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:360
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:359
msgid "Previous"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:363
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:678
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:684
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:362
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:665
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:671
#: files/usr/lib/cinnamon-settings/modules/cs_keyboard.py:188
msgid "Play"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:366
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:365
msgid "Stop"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:369
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:368
msgid "Next"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:382
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:708
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:381
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:695
msgid "Consecutive Playing"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:388
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:722
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:387
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:709
msgid "No Shuffle"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:422
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:421
msgid "Open Player"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:436
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:435
msgid "Quit Player"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:672
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:659
msgid "Pause"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:710
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:697
msgid "Repeat Single"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:712
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:699
msgid "Repeat All"
msgstr ""

#. photoframe@cinnamon.org->settings-schema.json->shuffle->description
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:722
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:709
#: files/usr/lib/cinnamon-settings/modules/cs_keyboard.py:197
msgid "Shuffle"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1014
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1003
msgid "Mute output"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1015
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1004
msgid "Mute input"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1266
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1255
msgid "Launch player..."
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1278
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1402
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1267
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1391
msgid "Volume"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1280
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1269
msgid "Applications..."
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1281
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1270
msgid "Output device..."
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1291
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1280
msgid "Microphone"
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1292
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1281
msgid "Input device..."
msgstr ""

#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1303
#: files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js:1292
msgid "Sound Settings"
msgstr ""

@@ -1267,8 +1267,8 @@ msgstr ""
#: files/usr/share/cinnamon/applets/user@cinnamon.org/applet.js:69
#: generate_additional_files.py:24
#: files/usr/lib/cinnamon-settings/cinnamon-settings.py:41
#: files/usr/lib/cinnamon-settings/cinnamon-settings.py:287
#: files/usr/lib/cinnamon-settings/cinnamon-settings.py:554
#: files/usr/lib/cinnamon-settings/cinnamon-settings.py:299
#: files/usr/lib/cinnamon-settings/cinnamon-settings.py:566
msgid "System Settings"
msgstr ""

@@ -1563,7 +1563,7 @@ msgstr ""
msgid "user, users, account, accounts, group, groups, password"
msgstr ""

#: files/usr/lib/cinnamon-settings/cinnamon-settings.py:183
#: files/usr/lib/cinnamon-settings/cinnamon-settings.py:195
msgid "Back to all settings"
msgstr ""

@@ -1973,37 +1973,37 @@ msgstr ""
msgid "Are you sure you want to completely remove %s?"
msgstr ""

#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1105
#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1108
msgid ""
"This operation will update the selected items.\n"
"\n"
"Do you want to continue?"
msgstr ""

#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1107
#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1110
msgid ""
"This operation will update the selected item.\n"
"\n"
"Do you want to continue?"
msgstr ""

#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1123
#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1126
#, python-format
msgid "%d updates available!"
msgstr ""

#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1125
#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1128
#, python-format
msgid "%d update available!"
msgstr ""

#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1185
#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1190
msgid ""
"This will restore the default set of enabled applets. Are you sure you want "
"to do this?"
msgstr ""

#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1187
#: files/usr/lib/cinnamon-settings/bin/ExtensionCore.py:1192
msgid ""
"This will restore the default set of enabled desklets. Are you sure you want"
" to do this?"
@@ -2916,37 +2916,37 @@ msgstr ""
msgid "User interface scaling:"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_general.py:28
#: files/usr/lib/cinnamon-settings/modules/cs_general.py:41
#: files/usr/lib/cinnamon-settings/modules/cs_workspaces.py:52
msgid "Miscellaneous Options"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_general.py:30
#: files/usr/lib/cinnamon-settings/modules/cs_general.py:43
msgid "Disable compositing for full-screen windows"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_general.py:31
#: files/usr/lib/cinnamon-settings/modules/cs_general.py:44
msgid ""
"Select this option to let full-screen applications skip the compositing "
"manager and run at maximum speed. Unselect it if you're experiencing screen-"
"tearing in full screen mode."
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_general.py:34
#: files/usr/lib/cinnamon-settings/modules/cs_general.py:47
msgid "Enable timer when logging out or shutting down"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_general.py:37
#: files/usr/lib/cinnamon-settings/modules/cs_general.py:50
msgid "Timer delay"
msgstr ""

#. photoframe@cinnamon.org->settings-schema.json->fade-delay->units
#. photoframe@cinnamon.org->settings-schema.json->delay->units
#: files/usr/lib/cinnamon-settings/modules/cs_general.py:37
#: files/usr/lib/cinnamon-settings/modules/cs_general.py:50
msgid "seconds"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_general.py:40
#: files/usr/lib/cinnamon-settings/modules/cs_general.py:53
msgid ""
"Log LookingGlass output to ~/.cinnamon/glass.log (Requires Cinnamon restart)"
msgstr ""
@@ -3191,11 +3191,11 @@ msgid "Decrease opacity"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_keyboard.py:89
msgid "Maximize vertically"
msgid "Toggle vertical maximization"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_keyboard.py:90
msgid "Maximize horizontally"
msgid "Toggle horizontal maximization"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_keyboard.py:92
@@ -4056,24 +4056,24 @@ msgstr ""
msgid "Panel"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_panel.py:89
#: files/usr/lib/cinnamon-settings/modules/cs_panel.py:80
msgid "Previous panel"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_panel.py:90
#: files/usr/lib/cinnamon-settings/modules/cs_panel.py:81
msgid "Next panel"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_panel.py:123
#: files/usr/lib/cinnamon-settings/modules/cs_panel.py:113
msgid "General Panel Options"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_panel.py:126
#: files/usr/lib/cinnamon-settings/modules/cs_panel.py:116
msgid "Add new panel"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_panel.py:135
msgid "Allow the pointer to pass through the edges of adjacent panels"
#: files/usr/lib/cinnamon-settings/modules/cs_panel.py:125
msgid "Allow the pointer to pass through the edges of panels"
msgstr ""

#: files/usr/lib/cinnamon-settings/modules/cs_power.py:9


+ 1
- 1
configure.ac View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([cinnamon],[2.6.3],[https://github.com/linuxmint/Cinnamon/issues],[cinnamon])
AC_INIT([cinnamon],[2.6.5],[https://github.com/linuxmint/Cinnamon/issues],[cinnamon])

AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/cinnamon-global.c])


+ 1
- 1
docs/reference/cinnamon-js/Makefile.am View File

@@ -49,7 +49,7 @@ MKHTML_OPTIONS=

# Extra options to supply to gtkdoc-fixref. Not normally needed.
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
FIXXREF_OPTIONS=
FIXXREF_OPTIONS=--src-lang=js

# Used for dependencies. The docs will be rebuilt if any of these change.
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h


+ 7
- 0
docs/reference/cinnamon-js/gen_doc.py View File

@@ -68,6 +68,7 @@ RETURNS_REGEX = re.compile(r'^Returns\s*\(?(' + TYPE_REGEX + ')?\)?:(.*)')
INHERITS_REGEX = re.compile(r'^Inherits:\s*(' + TYPE_REGEX + ')\s*$')
PROPERTY_REGEX = re.compile(r'^@(\w+)\s*\(?(' + TYPE_REGEX + ')?\)?:(.*)')
FILE_NAME_REGEX = re.compile(r'FILE:\s*(\w+\.js):?')
ENUM_NAME_REGEX = re.compile(r'ENUM:\s*(\w+):?')
FUNCTION_NAME_REGEX = re.compile(r'^(\w+):?\s*$')

OBJECT_NAME_REGEX = re.compile(r'^#(\w+):?\s*$')
@@ -174,6 +175,7 @@ for _file in _files:
if FILE_NAME_REGEX.match(line) and bracket_count == 0:
curr_item = curr_file
curr_obj = curr_file
objects[curr_file.name] = curr_file
state = STATE_PROPERTY

elif OBJECT_NAME_REGEX.match(line) and bracket_count == 0:
@@ -190,6 +192,11 @@ for _file in _files:
curr_obj.add_function(curr_item)
state = STATE_PROPERTY

elif ENUM_NAME_REGEX.match(line) and bracket_count == 0:
curr_item = JSEnum(ENUM_NAME_REGEX.match(line).group(1))
objects[curr_file.name + '.' + curr_item.name] = curr_item
curr_file.add_enum(curr_item)
state = STATE_PROPERTY
else:
state = STATE_COMMENT



+ 118
- 3
docs/reference/cinnamon-js/gen_lib.py View File

@@ -79,6 +79,7 @@ def markup(line, obj):
return '<code>{name}</code>'.format(name = full)

func_names = [x.name for x in object.functions]
enum_names = [x.name for x in object.enums]
prop_names = [x.name for x in object.properties]

if thing in prop_names and not full.endswith("()"):
@@ -86,7 +87,7 @@ def markup(line, obj):
prefix = object.prefix,
thing = thing,
full = full)
elif thing in func_names:
elif thing in func_names or (thing in enum_names and not full.endswith("()")):
return '<link linkend="cinnamon-js-{prefix}-{thing}"><code>{full}</code></link>'.format(
prefix = object.prefix,
thing = thing,
@@ -220,6 +221,7 @@ class JSFile(JSThing):
self.short_description = JSProperty(None, '', '')
self.properties = []
self.objects = []
self.enums = []
self.functions = []
self.file = self
self.object = self
@@ -240,6 +242,13 @@ class JSFile(JSThing):
obj.name = self.name + "-" + obj.name
obj.file = self

def add_enum(self, obj):
self.enums.append(obj)
obj.parent = self
obj.directory = self.directory
obj.prefix = self.prefix + "-" + obj.name
obj.file = self

class JSObject(JSThing):
def __init__ (self, name):
self.name = name
@@ -252,6 +261,7 @@ class JSObject(JSThing):
self.prefix = None
self.functions = []
self.properties = []
self.enums = []
self.object = self

def add_function(self, func):
@@ -262,6 +272,14 @@ class JSObject(JSThing):
def set_inherit(self, inherit):
self.inherit = inherit

class JSEnum(JSThing):
def __init__ (self, name):
self.name = name
self.description = ''
self.short_description = JSProperty(None, '', '')
self.properties = []
self.object = self

SGML_FORMAT = '''\
<?xml version='1.0'?>
<!DOCTYPE book PUBLIC '-//OASIS//DTD DocBook XML V4.3//EN'
@@ -273,7 +291,9 @@ SGML_FORMAT = '''\
<bookinfo>
<title>Cinnamon Javascript Reference Manual</title>
<releaseinfo>
for Cinnamon {version}.
This document is for for Cinnamon {version}.

The latest version of this documentation can be found online at <ulink role="online-location" url="http://developer.linuxmint.com/reference/git/cinnamon-js/">http://developer.linuxmint.com/reference/git/cinnamon-js/</ulink>.
</releaseinfo>
</bookinfo>
{chapters}
@@ -308,10 +328,12 @@ FILE_FORMAT = '''\
</refnamediv>
{func_header}
{prop_header}
{enum_header}
{hierarchy}
{description}
{functions}
{properties}
{enums}
</refentry>
'''

@@ -358,6 +380,30 @@ PROPERTY_HEADER_FORMAT = '''
</refsect1>
'''

ENUM_HEADER_FORMAT = '''
<refsect1 id="cinnamon-js-{prefix}.other" role="other_proto">
<title role="other_proto.title">Types and Values</title>
<informaltable role="enum_members_table" pgwide="1" frame="none">
<tgroup cols="2">
<colspec colname="name" colwidth="150px"/>
<colspec colname="description"/>
<tbody>
{enum_headers}
</tbody>
</tgroup>
</informaltable>
</refsect1>
'''

ENUM_HEADER_ITEM_FORMAT = '''
<row>
<entry role="datatype_keyword">enum</entry>
<entry role="function_name">
<link linkend="cinnamon-js-{prefix}-{name}">{name}</link>
</entry>
</row>
'''

PROPERTY_HEADER_ITEM_FORMAT = '''
<row>
<entry role="property_type">
@@ -459,6 +505,40 @@ PROPERTIES_ITEM_FORMAT = '''
</refsect2>
'''

ENUMS_FORMAT = '''
<refsect1 id="CinnamonGlobal.other_details" role="details">
<title role="details.title">Types and Values</title>
{enums}
</refsect1>
'''

ENUMS_ITEM_FORMAT = '''
<refsect2 id="cinnamon-js-{prefix}" role="enum">
<title>enum {name}</title>
<indexterm zone="{name}"><primary>{name}</primary></indexterm>
{description}
<refsect3 role="enum_members">
<title>Members</title>
<informaltable role="enum_members_table" pgwide="1" frame="none">
<tgroup cols="2">
<colspec colname="enum_members_name" colwidth="300px"/>
<colspec colname="enum_members_description"/>
<tbody>
{enum_items}
</tbody>
</tgroup>
</informaltable>
</refsect3>
</refsect2>
'''

ENUMS_ITEM_ROW_FORMAT = '''
<row role="constant">
<entry role="enum_member_name"><para id="{name}:CAPS">{name}</para></entry>
<entry role="enum_member_description">{description}</entry>
</row>
'''

def write_sgml(files, version):
sgml = open('cinnamon-js-docs.sgml', 'w')

@@ -494,10 +574,12 @@ def create_file(obj):
short_description = markup(short_description, obj),
func_header = get_function_header(obj),
prop_header = get_properties_header(obj),
enum_header = get_enum_header(obj),
hierarchy = get_hierarchy(obj),
description = get_description(obj),
functions = get_functions(obj),
properties = get_properties(obj)))
properties = get_properties(obj),
enums = get_enums(obj)))

file_obj.close()

@@ -529,6 +611,19 @@ def get_properties_header(obj):
prefix = obj.prefix,
property_headers = "\n".join(properties))

def get_enum_header(obj):
if len(obj.enums) == 0:
return ""

enums = [ENUM_HEADER_ITEM_FORMAT.format(
prefix = obj.prefix,
name = enum.name) for enum in obj.enums]

return ENUM_HEADER_FORMAT.format(
prefix = obj.prefix,
enum_headers = "\n".join(enums))


def get_hierarchy(obj):
from gen_doc import objects

@@ -645,3 +740,23 @@ def get_properties(obj):
prefix = obj.prefix,
properties = "\n".join(properties))

def get_enums(obj):
if len(obj.enums) == 0:
return ""

enums = []

for enum in obj.enums:
items = [ENUMS_ITEM_ROW_FORMAT.format(
name = item.name,
description = item.get_xml_description()) for item in enum.properties]

enums.append(ENUMS_ITEM_FORMAT.format(
prefix = enum.prefix,
name = enum.name,
description = enum.get_xml_description(),
enum_items = "\n".join(items)))

return ENUMS_FORMAT.format(
prefix = obj.prefix,
enums = "\n".join(enums))

+ 3
- 1
docs/reference/cinnamon-tutorials/Makefile.am View File

@@ -47,7 +47,7 @@ MKHTML_OPTIONS=

# Extra options to supply to gtkdoc-fixref. Not normally needed.
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
FIXXREF_OPTIONS=
FIXXREF_OPTIONS=--src-lang=js

# Used for dependencies. The docs will be rebuilt if any of these change.
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
@@ -76,6 +76,7 @@ content_files= \
using-documentation.xml \
write-applet.xml \
xlet-settings.xml \
xlet-settings-ref.xml \
xlet-versioning.xml \
$(NULL)

@@ -89,6 +90,7 @@ expand_content_files= \
using-documentation.xml \
write-applet.xml \
xlet-settings.xml \
xlet-settings-ref.xml \
xlet-versioning.xml \
$(NULL)



+ 22
- 19
docs/reference/cinnamon-tutorials/cinnamon-tutorials-docs.sgml.in View File

@@ -5,23 +5,26 @@
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
]>
<book id='index'>
<bookinfo>
<title>Cinnamon Tutorials</title>
<releaseinfo>
for Cinnamon @VERSION@.
</releaseinfo>
</bookinfo>
<part id="documentation">
<title>Documentation</title>
<xi:include href="using-documentation.xml"/>
<xi:include href="documenting-source.xml"/>
<xi:include href="documenting-tutorial.xml"/>
</part>
<xi:include href="building.xml"/>
<part id="extension-system">
<title>Extension system</title>
<xi:include href="write-applet.xml"/>
<xi:include href="xlet-versioning.xml"/>
<xi:include href="xlet-settings.xml"/>
</part>
<bookinfo>
<title>Cinnamon Tutorials</title>
<releaseinfo>
This document is for Cinnamon @VERSION@.

The latest version of this documentation can be found online at <ulink role="online-location" url="http://developer.linuxmint.com/reference/git/cinnamon-tutorials/">http://developer.linuxmint.com/reference/git/cinnamon-tutorials/</ulink>.
</releaseinfo>
</bookinfo>
<part id="documentation">
<title>Documentation</title>
<xi:include href="using-documentation.xml"/>
<xi:include href="documenting-source.xml"/>
<xi:include href="documenting-tutorial.xml"/>
</part>
<xi:include href="building.xml"/>
<part id="extension-system">
<title>Extension system</title>
<xi:include href="write-applet.xml"/>
<xi:include href="xlet-versioning.xml"/>
<xi:include href="xlet-settings.xml"/>
<xi:include href="xlet-settings-ref.xml"/>
</part>
</book>

+ 6
- 5
docs/reference/cinnamon-tutorials/documenting-source.xml View File

@@ -4,7 +4,7 @@
The C part of Cinnamon can be documented using standard gtk-doc format, and there should be plenty of tutorials on that. The JavaScript part of Cinnamon can also be documented using something that resembles gtk-doc format.
</para>

<para> Currently, we support documenting files (eg. <code>main.js</code>), objects (eg. <code>Applet.Applet</code>) and functions (including functions of files and functions of objects). </para>
<para> Currently, we support documenting files (eg. <code>main.js</code>), objects (eg. <code>Applet.Applet</code>), functions (including functions of files and functions of objects) and enums. </para>

<para> The documentation appears as a comment <emphasis>right before</emphasis> the thing it describes. In the case of a file, it should appear at the very beginning of the file. If a object is declared using <code>prototype</code>, then it can appear right before either the function declaration or the prototype declaration, ie. before line 1 or line 5 in the example below. </para>
<informalexample>
@@ -50,11 +50,12 @@
Avoid starting comments with this (use <code>/*</code> instead) even though the parser should be smart enough to not parse them, but if they look too like a piece of documentation, the parser might get confused.
</para>

<para> The next line is the name of the thing being documented. Function, object and file documentation are distinguished using this line. They should look, respectively, like this: </para> <informalexample>
<para> The next line is the name of the thing being documented. Function, object, file and enum documentations are distinguished using this line. They should look, respectively, like this: </para> <informalexample>
<programlisting>
* function_name:
* #ObjectName:
* FILE:filename.js
* ENUM:EnumName
</programlisting>
</informalexample>
<para>Note that we do not have to include the namespace of an object, ie. it is <code>#ObjectName</code>, not <code>#FileName.ObjectName.</code></para>
@@ -65,7 +66,7 @@
Object.Name - short description
</informalexample>

<para>Afterwards, all the properties of the thing should be listed. A "property" is a globally accessible variable in the case of a file, a genuine property in the case of an object, and a parameter for a function. The type of the property is optional, but leaving it out makes the documentation less helpful and also more ugly. If the description is too long to fit in one line, break it into two rows using a *single* line break. Single line breaks are always ignored when parsing. For example,</para>
<para>Afterwards, all the properties of the thing should be listed. A "property" is a globally accessible variable in the case of a file, a genuine property in the case of an object, a parameter for a function, or an elemenet of the enum for an enum. The type of the property is optional, but leaving it out makes the documentation less helpful and also more ugly (except for enums, where types should not appear). If the description is too long to fit in one line, break it into two rows using a *single* line break. Single line breaks are always ignored when parsing. For example,</para>
<informalexample>
<programlisting>
* @prop (type): this is a very long description. Oh my gosh I am
@@ -153,7 +154,7 @@
</listitem>
<listitem>
<para>
Links to functions and properties of other objects with a <code>%percentage sign</code>. If you wish to link to functions of the same object, the following four are acceptable:
Links to functions, properties or enums of other objects with a <code>%percentage sign</code>. If you wish to link to functions of the same object, the following four are acceptable:
</para>
<itemizedlist>
<listitem><code>this.func</code></listitem>
@@ -171,7 +172,7 @@
<listitem><code>PopupBaseMenuItem._init()</code></listitem>
</itemizedlist>
<para>
If there are functions and properties that take the same name, the property will be linked to, unless the name ends with <code>()</code>, in which case it will always be a function.
If there are functions, properties and enums that take the same name, the property will be linked to, unless the name ends with <code>()</code>, in which case it will always be a function. If a function and an enum have the same name, the whole thing will explode into pieces and don't do that. It is a bad idea to have things with the same name anyway.
</para>
</listitem>
<listitem>


+ 210
- 0
docs/reference/cinnamon-tutorials/xlet-settings-ref.xml View File

@@ -0,0 +1,210 @@
<chapter id="xlet-settings-ref">
<title>Applet, desklet and extension settings reference</title>
<para>This is the reference for the settings API.</para>

<sect2>
<title>Widget types and required fields</title>
<sect3>
<title>checkbox</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>checkbox</code></listitem>
<listitem><code>default</code>: <code>true</code> or <code>false</code> (no quotes)</listitem>
<listitem><code>description</code>: String describing the setting</listitem>
</itemizedlist>

<para>A simple checkbox that controls a <code>boolean</code> type value</para>

</sect3>
<sect3>
<title>entry</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>entry</code></listitem>
<listitem><code>default</code>: default string value</listitem>
<listitem><code>description</code>: String describing the setting</listitem>
</itemizedlist>

<para>A text entry field that stores a <code>string</code></para>

</sect3>
<sect3>
<title>colorchooser</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>colorchooser</code></listitem>
<listitem><code>default</code>: default color string - can be <code>"red"</code> or <code>"rgba(x,x,x,x)"</code>, etc...</listitem>
<listitem><code>description</code>: String describing the setting</listitem>
</itemizedlist>

<para>A Color button that lets you choose a RGBA color code as a <code>string</code></para>

</sect3>
<sect3>
<title>keybinding</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>keybinding</code></listitem>
<listitem><code>default</code>: default keybinding string - i.e. <code>&lt;Control&gt;F8</code> or other string parseable by gtk_accelerator_parse.</listitem>
<listitem><code>description</code>: String describing the setting</listitem>
</itemizedlist>

<para>An input that allows you to select a keybinding for an action.</para>

</sect3>
<sect3>
<title>radiogroup</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>radiogroup</code></listitem>
<listitem><code>default</code>: default value from the list of options, or it can be a custom value if <code>custom</code> is defined</listitem>
<listitem><code>description</code>: String describing the setting</listitem>
<listitem><code>options</code>: node of desc:val pair options, where desc is the displayed option name, val is the stored value</listitem>
</itemizedlist>

<para>A group of radio buttons whose description and values are defined by <code>options</code> in <code>description:value</code> pairs. Values may be <code>string</code> or <code>number</code>. also have a value of <code>custom</code>, and a text entry will be provided next to that option, to allow entering a custom value.</para>

<para>Options might be:</para>
<informalexample>
<programlisting>
"options" : {
"Option 1" : "this value",
"Option 2" : "that value",
"Option 3" : "other value"
}
</programlisting>
</informalexample>
</sect3>
<sect3>
<title>filechooser</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>filechooser</code></listitem>
<listitem><code>description</code>: String describing the setting</listitem>
<listitem><code>default</code>: Default filename to use</listitem>
<listitem><code>select-dir</code>: (optional) true or false, or leave off entirely. Forces directory selection.</listitem>
</itemizedlist>

<para>Opens a file picker dialog to allow you to choose a filename. If <code>select-dir</code> is <code>true</code>, it will only allow directories to be selected. Stores as a <code>string</code>.</para>

</sect3>
<sect3>
<title>iconfilechooser</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>iconfilechooser</code></listitem>
<listitem><code>description</code>: String describing the setting</listitem>
<listitem><code>default</code>: default icon path or icon name to use</listitem>
</itemizedlist>

<para>Provides a preview button and text entry field. You can open a file dialog to pick an image-type file, or enter a registered icon name in the text field. Stores as a <code>string</code>.</para>

</sect3>
<sect3>
<title>combobox</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>combobox</code></listitem>
<listitem><code>default</code>: default value to set</listitem>
<listitem><code>description</code>: String describing the setting</listitem>
<listitem><code>options</code>: node of desc:val pair options, where desc is the displayed option name, val is the stored value</listitem>
</itemizedlist>

<para>Provides a dropdown list from which you can select from <code>description:value</code> pairs defined by <code>options</code>. The values can be <code>string</code>, <code>number</code>, or <code>boolean</code>.</para>
</sect3>
<sect3>
<title>spinbutton</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>spinbutton</code></listitem>
<listitem><code>default</code>: default value to use - int or leading</listitem>
<listitem><code>min</code>: minimum value</listitem>
<listitem><code>max</code>: maximum value</listitem>
<listitem><code>units</code>: String describing what the number is a unit of (pixels, bytes, etc..)</listitem>
<listitem><code>step</code>: adjustment amount</listitem>
<listitem><code>description</code>: String describing the setting</listitem>
</itemizedlist>

<para>Provides a spin button and entry for changing setting a <code>number</code> value. This can be integer or floating point format. For floating point, all values must have leading 0's.</para>

</sect3>
<sect3>
<title>scale</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>scale</code></listitem>
<listitem><code>default</code>: default value to use - int or leading</listitem>
<listitem><code>min</code>: minimum value</listitem>
<listitem><code>max</code>: maximum value</listitem>
<listitem><code>step</code>: adjustment amount</listitem>
<listitem><code>description</code>: String describing the setting</listitem>
</itemizedlist>

<para>Provides a scale widget to allow you to pick a <code>number</code> value between min and max, by step amount. Integer or floating point numbers can be used. For floating point, all values must have leading 0's.</para>

</sect3>
<sect3>
<title>generic</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>generic</code></listitem>
<listitem><code>default</code>: default value</listitem>
</itemizedlist>

<para>A generic storage object for any type of value. This is generally intended for internal settings that won't be adjusted by the user. For example, a history, or most recent command. There is no corresponding widget for it in Cinnamon Settings.</para>

</sect3>
<sect3>
<title>header</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>header</code></listitem>
<listitem><code>description</code>: String to display as a bold header</listitem>
</itemizedlist>

<para>A <emphasis>non-setting</emphasis> widget, this provides a bold-faced label for assisting in organizing your settings</para>

</sect3>
<sect3>
<title>separator</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>separator</code></listitem>
</itemizedlist>

<para>A <emphasis>non-setting</emphasis> widget, this draws a horizontal separator for assisting in organizing your settings</para>

</sect3>
<sect3>
<title>button</title>
<itemizedlist>
<listitem><code>type</code>: should be <code>button</code></listitem>
<listitem><code>description</code>: Label for the button</listitem>
<listitem><code>callback</code>: string of callback method name (no "this", just "myFunc")</listitem>
</itemizedlist>

<para>A <emphasis>non-setting</emphasis> widget, this provides a button, which, when clicked, activates the <code>callback</code> method in your applet. Note: the callback value should be a string of the method name only. For instance, to call <code>this.myCallback()</code>, you would put <code>myCallback</code> for the callback value.</para>
</sect3>
<sect3>
<title>Additional Setting Options</title>
These fields can be added to any widget:

<itemizedlist>
<listitem><code>indent: true</code>: Indent the widget in the settings page to help with organizing your layout.</listitem>
<listitem><code>dependency: &lt;key&gt;</code>: where <code>key</code> is the name of a <code>checkbox</code> setting. If that checkbox setting is un-checked, this setting will be made insensitive (greyed out). The checkbox must occur <emphasis>before</emphasis> the setting that depends on it.</listitem>
<listitem><code>tooltip</code>: Adds a popup tooltip to the widget</listitem>
</itemizedlist>
</sect3>
</sect2>

<sect2>
<title>Signals</title>
<sect3>
<title><code>settings-changed</code></title>
Signal when the underlying config file has changed and the in-memory values have been updated.
</sect3>
<sect3>
<title><code>changed::&lt;key&gt;</code></title>

<para>Signals when <code>key</code> has changed in the configuration file. Use this in conjunction with <code>getValue</code> if you want to handle your own updating in a more traditional way (like gsettings).</para>

<para>The callback function will be called with three paramenters: <code>settingProvider, oldval, newval</code>, which are, respectively, the settings object (which you usually don't need), the original value and the updated value.</para>
</sect3>
</sect2>

<sect2>
<title>Additional options in metadata.json</title>
You can add the following items to <code>metadata.json</code> to affect how the settings are presented to the user:
<itemizedlist>
<listitem><code>hide-configuration</code>: Hides the configure button in Cinnamon Settings. Set to <code>true</code> if you are using only <code>generic</code>-type settings that should be hidden from the user. This is not a mandatory key. Omitting it will allow the configuration button to hide or display depending on whether you are utilizing the settings API or not.</listitem>
<listitem><code>external-configuration-app</code>: Allows you to define an external settings app to use instead of the built-in settings GUI. This should be a <code>string</code> with the name of your executable settings app (path relative to the applet's install directory). Note, this key can be overridden by the <code>hide-configuration</code> key. This is not a mandatory key. Omitting it will allow the configuration button to hide or display depending on whether you are utilizing the settings API or not.</listitem>
</itemizedlist>
</sect2>
</chapter>

+ 14
- 4
docs/reference/cinnamon-tutorials/xlet-settings.xml View File

@@ -112,12 +112,12 @@
}

MyApplet.prototype = {
__proto__: Applet.TextIconApplet.prototype,
__proto__: Applet.TextIconApplet.prototype,

_init: function(metadata, orientation, panel_height, instanceId) {
....
....
....
....
....
....
</programlisting>
</informalexample>
<para>
@@ -146,6 +146,9 @@
<para>
In other words, the object reference you pass in can be any object. The UUID there can be just hardcoded, or can be drawn from the metadata (<code>metadata["uuid"]</code>), whichever you prefer. You can also leave off the instanceId if you haven’t defined your applet as multiple-instance capable.
</para>
<para>
Obviously, if instead of an applet, you have a desklet or an extension, you would use <code>new Settings.DeskletSettings</code> and <code>new Settings.ExtensionSettings</code> respectively.
</para>
</sect2>
<sect2>
<title>Binding your settings</title>
@@ -211,5 +214,12 @@
<para>
This has been automatically generated by our JSON file. If we adjust the scale, the JSON config file is rewritten, the settings provider for our applet notices, and reloads the new value into the applet’s <code>this.width</code> property, and <code>this.on_settings_changed()</code> is called.
</para>
<para>
Alternatively, this can be launched by running the command <code>cinnamon-settings applets *uuid*</code> (with obvious modifications for desklets and extensions).
</para>
</sect2>
<sect2>
<title>More information</title>
<para>The available settings items and widgets can be found an the <xref linkend="xlet-settings-ref" />, alongside with some extra options. The settings objects themselves are <link linkend="cinnamon-js-ui-settings-AppletSettings"><code>Settings.AppletSettings</code></link>, <link linkend="cinnamon-js-ui-settings-DeskletSettings"><code>Settings.DeskletSettings</code></link> and <link linkend="cinnamon-js-ui-settings-ExtensionSettings"><code>Settings.ExtensionSettings</code></link>, which all inherit <link linkend="cinnamon-js-ui-settings-_provider"><code>Settings._provider</code></link>. Most useful functions will be found inside the <code>_provider</code> object.</para>
</sect2>
</chapter>

+ 3
- 1
docs/reference/cinnamon/cinnamon-docs.sgml.in View File

@@ -8,7 +8,9 @@
<bookinfo>
<title>Cinnamon Reference Manual</title>
<releaseinfo>
for Cinnamon @VERSION@.
This document is for Cinnamon @VERSION@.

The latest version of this documentation can be found online at <ulink role="online-location" url="http://developer.linuxmint.com/reference/git/cinnamon/">http://developer.linuxmint.com/reference/git/cinnamon/</ulink>.
</releaseinfo>
</bookinfo>



+ 3
- 3
docs/reference/st/cinnamon-st-docs.sgml.in View File

@@ -8,9 +8,9 @@
<bookinfo>
<title>Cinnamon St Reference Manual</title>
<releaseinfo>
for Cinnamon @VERSION@.
<!--The latest version of this documentation can be found on-line at
<ulink role="online-location" url="http://[SERVER]/st/index.html">http://[SERVER]/st/</ulink>.-->
This document is for Cinnamon @VERSION@.
The latest version of this documentation can be found online at <ulink role="online-location" url="http://developer.linuxmint.com/reference/git/st/">http://developer.linuxmint.com/reference/git/st/</ulink>.
</releaseinfo>
</bookinfo>



+ 51
- 0
files/usr/bin/cinnamon-killer-daemon View File

@@ -0,0 +1,51 @@
#!/usr/bin/python2
# -*- coding: utf-8 -*-

import gi
gi.require_version('Keybinder', '3.0')
from gi.repository import Keybinder
from gi.repository import Gtk, Gio
import os
import syslog

SETTINGS_SCHEMA = 'org.cinnamon.desktop.keybindings.media-keys'
SETTINGS_KEY = 'restart-cinnamon'

class KillerDaemon:

def __init__(self):
Keybinder.init()
self.bindings = None
self.settings = Gio.Settings(SETTINGS_SCHEMA)
self.apply_bindings()
self.settings.connect('changed::' + SETTINGS_KEY, self.apply_bindings)

def apply_bindings(self, settings=None, key=None):
# Ubind the previous bindings
try:
if self.bindings is not None:
for binding in self.bindings:
Keybinder.unbind(binding)
except Exception, detail:
syslog.syslog(detail)

# Get the new ones
self.bindings = self.settings.get_strv(SETTINGS_KEY)

# Bind them
try:
if self.bindings is not None:
for binding in self.bindings:
if Keybinder.bind(binding, self.restart_cinnamon, None):
syslog.syslog("Bound Cinnamon restart to %s." % binding)
except Exception, detail:
syslog.syslog(detail)

def restart_cinnamon(self, keystring, data):
os.system("nemo -n &") # restart nemo if it's not running already
os.system("cinnamon-settings-daemon &") # restart CSD if it's not running already
os.system("cinnamon --replace &") # restart Cinnamon whether it's running or not (can be handy in case of a DE freeze)

if __name__ == '__main__':
daemon = KillerDaemon()
Gtk.main()

+ 9
- 8
files/usr/lib/cinnamon-desktop-editor/cinnamon-desktop-editor.py View File

@@ -106,14 +106,15 @@ class IconPicker(object):
chooser.add_shortcut_folder("/usr/share/pixmaps")
chooser.add_shortcut_folder("/usr/share/icons")
fn = get_icon_string(self.image)
if GLib.path_is_absolute(fn):
chooser.set_filename(fn)
else:
theme = Gtk.IconTheme.get_default()
icon_info = theme.lookup_icon(fn, 64, 0)
icon_info_fn = icon_info.get_filename() if icon_info != None else None
if icon_info_fn:
chooser.set_filename(icon_info_fn)
if fn:
if GLib.path_is_absolute(fn):
chooser.set_filename(fn)
else:
theme = Gtk.IconTheme.get_default()
icon_info = theme.lookup_icon(fn, 64, 0)
icon_info_fn = icon_info.get_filename() if icon_info != None else None
if icon_info_fn:
chooser.set_filename(icon_info_fn)
filter = Gtk.FileFilter();
filter.add_pixbuf_formats ();
chooser.set_filter(filter);


+ 1
- 0
files/usr/lib/cinnamon-settings/modules/cs_keyboard.py View File

@@ -152,6 +152,7 @@ KEYBINDINGS = [
[_("Lock screen"), MEDIA_KEYS_SCHEMA, "screensaver", "system"],
[_("Suspend"), MEDIA_KEYS_SCHEMA, "suspend", "system"],
[_("Hibernate"), MEDIA_KEYS_SCHEMA, "hibernate", "system"],
[_("Restart Cinnamon"), MEDIA_KEYS_SCHEMA, "restart-cinnamon", "system"],
# System - Screenshots
[_("Take a screenshot of an area"), MEDIA_KEYS_SCHEMA, "area-screenshot", "sys-screen"],
[_("Copy a screenshot of an area to clipboard"), MEDIA_KEYS_SCHEMA, "area-screenshot-clip", "sys-screen"],


+ 8
- 0
files/usr/share/applications/cinnamon-killer-daemon.desktop View File

@@ -0,0 +1,8 @@
[Desktop Entry]
Name=Cinnamon Killer Daemon
Comment=Restarts Cinnamon, Nemo and cinnamon-settings-daemon when a key combination is pressed
Icon=reload
Exec=cinnamon-killer-daemon
Terminal=false
Type=Application
NoDisplay=true

+ 1
- 1
files/usr/share/cinnamon-session/sessions/cinnamon.session View File

@@ -1,6 +1,6 @@
[Cinnamon Session]
Name=Cinnamon
RequiredComponents=cinnamon;cinnamon-settings-daemon;cinnamon-screensaver;nemo-autostart;nm-applet;
RequiredComponents=cinnamon;cinnamon-settings-daemon;cinnamon-screensaver;nemo-autostart;nm-applet;cinnamon-killer-daemon;
DesktopName=X-Cinnamon



+ 1
- 1
files/usr/share/cinnamon-session/sessions/cinnamon2d.session View File

@@ -1,6 +1,6 @@
[Cinnamon Session]
Name=Cinnamon (Software Rendering)
RequiredComponents=cinnamon2d;cinnamon-settings-daemon;cinnamon-screensaver;nemo-autostart;nm-applet;
RequiredComponents=cinnamon2d;cinnamon-settings-daemon;cinnamon-screensaver;nemo-autostart;nm-applet;cinnamon-killer-daemon;
DesktopName=X-Cinnamon



+ 17
- 14
files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js View File

@@ -1919,7 +1919,6 @@ MyApplet.prototype = {
let default_ip6 = null;
for (let i = 0; i < this._activeConnections.length; i++) {
let a = this._activeConnections[i];

if (!a._inited) {
//a._notifyDefaultId = a.connect('notify::default', Lang.bind(this, this._updateIcon));
//a._notifyDefault6Id = a.connect('notify::default6', Lang.bind(this, this._updateIcon));
@@ -1949,28 +1948,32 @@ MyApplet.prototype = {
}
}

if (a['default']) {
default_ip4 = a;
}
if (a.default6) {
default_ip6 = a;
}

if (a.state == NetworkManager.ActiveConnectionState.ACTIVATED) {
if (activated) {
// We already found an activated device, consider this one activated if it's the default IPV4 or IPV6
if (a['default'] || a.default6) {
if (!default_ip4) {
// We didn't find the default IPV4 device yet..
if (!default_ip6) {
// We didn't find the default IPV6 device either so consider this one.
activated = a;
}
}
else {
activated = a;
else {
// We already found the default IPV6 device, so only use this one if it's the default IPV4 device
if (a['default']) {
activated = a;
}
}
}
}
if (a.state == NetworkManager.ActiveConnectionState.ACTIVATING) {
activating = a;
}

if (a['default']) {
default_ip4 = a;
}
if (a.default6) {
default_ip6 = a;
}

if (!a._primaryDevice) {
if (a._type != NetworkManager.SETTING_VPN_SETTING_NAME) {
// find a good device to be considered primary


+ 1
- 1
js/ui/applet.js View File

@@ -518,7 +518,7 @@ IconApplet.prototype = {
},

/**
* set_applet_icon:path:
* set_applet_icon_path:
* @icon_path (string): path of the icon
*
* Sets the icon of the applet to the image file at @icon_path


+ 2
- 0
js/ui/appletManager.js View File

@@ -298,7 +298,9 @@ function addAppletToPanels(extension, appletDefinition) {

applet._panelLocation = appletDefinition.location;
for (let i=0; i<appletsToMove.length; i++) {
let hidden = !appletsToMove[i].visible;
appletDefinition.location.add(appletsToMove[i]);
if (hidden) appletsToMove[i].hide();
}
if(!extension._loadedDefinitions) {


+ 113
- 20
js/ui/settings.js View File

@@ -1,3 +1,10 @@
/**
* FILE:settings.js
* @short_description: File providing settings objects for xlets.
*
* This file provides the settings API for applets, desklets and extensions.
*/

const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
@@ -9,10 +16,24 @@ const Mainloop = imports.mainloop;

const SETTING_SCHEMA_FILE = "settings-schema.json";

/**
* ENUM:BindingDirection
* @IN: Set the property at binding time, and automatically update the property
* and execute the callback when the setting file changes. This is probably
* the most common mode.
*
* @OUT: Set the property at binding time, and automatically update the setting
* file when the property changes. The callback can be omitted when using this
* mode, as it will not be used.
*
* @BIDIRECTIONAL: Combines the effects of `IN` and `OUT`.
*
* The direction of binding settings
*/
const BindingDirection = {
IN : 1, // Applet property is updated automatically from settings.json
OUT : 2, // Setting value is kept updated by applet property changes
BIDIRECTIONAL : 3 // Applet property updated automatically from settings.json, and vise-versa
IN : 1,
OUT : 2,
BIDIRECTIONAL : 3
};

var BOOLEAN_TYPES = {
@@ -182,6 +203,12 @@ function _provider(xlet, uuid, instanceId, type, string) {
this._init(xlet, uuid, instanceId, type, string);
}

/**
* #_provider:
* @short_description: Xlet settings object
*
* This is the settings object produced in the settings API.
*/
_provider.prototype = {
_init: function (xlet, uuid, instanceId, type, string) {
if (type && string) {
@@ -471,31 +498,36 @@ _provider.prototype = {
return this.settings_file.get_path();
},

/* _settings_file_changed: For convenience only, if you want to handle updating your applet props yourself,
* connect to this signal on your AppletSettings object to get notified when the json file changes, then
* you can call AppletSettings.getValue(key) to update your props
*/
/* _settings_file_changed: For convenience only, if you want to handle
* updating your applet props yourself, connect to this signal on your
* AppletSettings object to get notified when the json file changes,
* then you can call AppletSettings.getValue(key) to update your props
*/

_setting_file_changed_notify: function() {
this.emit("settings-changed");
},

/* individual key notification, sends old and new value with signal */
/* individual key notification, sends old and new value with signal */

_value_changed_notify: function(key, oldval, newval) {
this.emit("changed::" + key, key, oldval, newval);
},

/* Public api: bind an applet property/variable to a setting
*
* sync_type: BindingDirection.OUT, .IN, or .BIDIRECTIONAL (see declaration at top of file)
* key_name: The id of the setting
* applet_var: The applet's property that is used to hold the setting, passed as a string
* (i.e. your applet's this.value passes as simply "value")
* applet_callback: The applet method to call when the setting has changed and the new value set (or null)
* user_data: Any extra data/object you wish to pass to the callback (or null)
*/

/**
* bindProperty:
* @sync_type (Settings.BindingDirection): the direction of the binding
* @key_name (string): the id of the setting
* @applet_var (string): the applet's property that is used to hold the
* setting (eg. `this.value` passes as `"value`")
* @applet_callback (function): (optional) the applet method to call
* when the setting has changed and the new values set
* @user_data: (optional) any extra data/object you wish to pass to the callback
*
* Bind an applet proprety/varaible to a setting
*
* Returns (boolean): Whether the bind was successful
*/
bindProperty: function (sync_type, key_name, applet_var, applet_callback, user_data) {
if (!this.valid) {
settings_not_initialized_error(this.uuid);
@@ -518,6 +550,14 @@ _provider.prototype = {
}
},

/**
* unbindProperty:
* @key_name (string): the id of the setting
*
* Reverses the effect of %bindProperty.
*
* Returns (boolean): Whether the unbind was successful.
*/
unbindProperty: function (key_name) {
if (this.metaBindings[key_name]) {
this.metaBindings[key_name].finalize();
@@ -528,6 +568,11 @@ _provider.prototype = {
return false;
},

/**
* finalize:
*
* Destroys the setting object.
*/
finalize: function () {
this.settings_obj.finalize();
for (let setting in this.metaBindings) {
@@ -538,6 +583,14 @@ _provider.prototype = {
Main.settingsManager.unregister(this.uuid, this.instanceId);
},

/**
* getValue:
* @key_name (String): the key name to fetch the value for
*
* Returns the currently stored value of the key `key_name`
*
* Returns: The currently stored value of the key
*/
getValue: function (key_name) {
if (key_name in this.settings_obj.json) {
return this.settings_obj.get_data(key_name)["value"];
@@ -547,6 +600,13 @@ _provider.prototype = {
}
},

/**
* setValue:
* @key_name (string): the key name to set the value for
* @value: the new value
*
* Sets the value of @key_name to @value.
*/
setValue: function (key_name, value) {
if (key_name in this.settings_obj.json) {
let oldval = this.settings_obj.get_data(key_name)["value"];
@@ -771,6 +831,12 @@ _setting.prototype = {
};


/**
* #AppletSettings:
* @short_description: Settings object for applets.
*
* Inherits: Settings._provider
*/
function AppletSettings(xlet, uuid, instanceId) {
this._init(xlet, uuid, instanceId);
}
@@ -778,6 +844,12 @@ function AppletSettings(xlet, uuid, instanceId) {
AppletSettings.prototype = {
__proto__: _provider.prototype,

/**
* _init:
* @xlet (Object): the object variables are binded to (usually `this`)
* @uuid (string): uuid of the applet
* @instanceId (int): instance id of the applet
*/
_init: function (xlet, uuid, instanceId) {
_provider.prototype._init.call(this, xlet, uuid, instanceId, Extension.Type.APPLET, "Applet");
},
@@ -787,7 +859,12 @@ AppletSettings.prototype = {
},
};


/**
* #DeskletSettings:
* @short_description: Settings object for desklets.
*
* Inherits: Settings._provider
*/
function DeskletSettings(xlet, uuid, instanceId) {
this._init(xlet, uuid, instanceId);
}
@@ -795,6 +872,12 @@ function DeskletSettings(xlet, uuid, instanceId) {
DeskletSettings.prototype = {
__proto__: _provider.prototype,

/**
* _init:
* @xlet (Object): the object variables are binded to (usually `this`)
* @uuid (string): uuid of the desklet
* @instanceId (int): instance id of the desklet
*/
_init: function (xlet, uuid, instanceId) {
_provider.prototype._init.call(this, xlet, uuid, instanceId, Extension.Type.DESKLET, "Desklet");
},
@@ -804,7 +887,12 @@ DeskletSettings.prototype = {
}
};


/**
* #ExtensionSettings:
* @short_description: Settings object for extensions.
*
* Inherits: Settings._provider
*/
function ExtensionSettings(xlet, uuid) {
this._init(xlet, uuid);
}
@@ -812,6 +900,11 @@ function ExtensionSettings(xlet, uuid) {
ExtensionSettings.prototype = {
__proto__: _provider.prototype,

/**
* _init:
* @xlet (Object): the object variables are binded to (usually `this`)
* @uuid (string): uuid of the extension
*/
_init: function (xlet, uuid) {
_provider.prototype._init.call(this, xlet, uuid, null, Extension.Type.EXTENSION, "Extension");
},


Loading…
Cancel
Save