summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPacho Ramos <pacho@gentoo.org>2013-09-01 08:49:51 +0000
committerPacho Ramos <pacho@gentoo.org>2013-09-01 08:49:51 +0000
commit3db554431bd06046a687be504e65952423de1196 (patch)
tree01e32bfab75607d79423d5f9dabab97b83df312b /gnome-extra/cinnamon
parentFix SRC_URI and HOMEPAGE (case-sensitive). (diff)
downloadhistorical-3db554431bd06046a687be504e65952423de1196.tar.gz
historical-3db554431bd06046a687be504e65952423de1196.tar.bz2
historical-3db554431bd06046a687be504e65952423de1196.zip
Version bump
Package-Manager: portage-2.2.1/cvs/Linux x86_64 Manifest-Sign-Key: 0xA188FBD4
Diffstat (limited to 'gnome-extra/cinnamon')
-rw-r--r--gnome-extra/cinnamon/ChangeLog13
-rw-r--r--gnome-extra/cinnamon/Manifest25
-rw-r--r--gnome-extra/cinnamon/cinnamon-1.8.8.1.ebuild (renamed from gnome-extra/cinnamon/cinnamon-1.6.7-r1.ebuild)76
-rw-r--r--gnome-extra/cinnamon/files/background.patch16
-rw-r--r--gnome-extra/cinnamon/files/bluetooth_obex_transfer.patch25
-rw-r--r--gnome-extra/cinnamon/files/cinnamon-1.7.8-settings-lspci.patch21
-rw-r--r--gnome-extra/cinnamon/files/cinnamon-screensaver.desktop15
-rw-r--r--gnome-extra/cinnamon/files/cinnamon2d-screensaver.desktop15
-rw-r--r--gnome-extra/cinnamon/files/fix-control-center-check.patch12
-rw-r--r--gnome-extra/cinnamon/files/idle-dim.patch35
-rw-r--r--gnome-extra/cinnamon/files/keyboard_applet.patch142
-rw-r--r--gnome-extra/cinnamon/files/menu_editor.patch815
-rw-r--r--gnome-extra/cinnamon/files/remove_GC.patch124
-rw-r--r--gnome-extra/cinnamon/files/screensaver.patch36
14 files changed, 1333 insertions, 37 deletions
diff --git a/gnome-extra/cinnamon/ChangeLog b/gnome-extra/cinnamon/ChangeLog
index 7a82cce1353c..45284e87f30d 100644
--- a/gnome-extra/cinnamon/ChangeLog
+++ b/gnome-extra/cinnamon/ChangeLog
@@ -1,6 +1,17 @@
# ChangeLog for gnome-extra/cinnamon
# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/gnome-extra/cinnamon/ChangeLog,v 1.24 2013/06/10 16:16:41 floppym Exp $
+# $Header: /var/cvsroot/gentoo-x86/gnome-extra/cinnamon/ChangeLog,v 1.25 2013/09/01 08:49:47 pacho Exp $
+
+*cinnamon-1.8.8.1 (01 Sep 2013)
+
+ 01 Sep 2013; Pacho Ramos <pacho@gentoo.org> +cinnamon-1.8.8.1.ebuild,
+ +files/background.patch, +files/bluetooth_obex_transfer.patch,
+ +files/cinnamon-1.7.8-settings-lspci.patch,
+ +files/cinnamon-screensaver.desktop, +files/cinnamon2d-screensaver.desktop,
+ +files/fix-control-center-check.patch, +files/idle-dim.patch,
+ +files/keyboard_applet.patch, +files/menu_editor.patch,
+ +files/remove_GC.patch, +files/screensaver.patch, -cinnamon-1.6.7-r1.ebuild:
+ Version bump
*cinnamon-1.6.7-r2 (10 Jun 2013)
diff --git a/gnome-extra/cinnamon/Manifest b/gnome-extra/cinnamon/Manifest
index e2ef92a0bd35..a5e71a391eab 100644
--- a/gnome-extra/cinnamon/Manifest
+++ b/gnome-extra/cinnamon/Manifest
@@ -1,18 +1,31 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
+AUX background.patch 938 SHA256 373d80cdb23250fbde846ed493ba422672cc42b03a111c2ce044467ee782df7f SHA512 fab92f83d7d1047ff0a1ed2fe5741d14a9baa0353599295bed032930bcd530a9e293382701cad69dea64a7a998cc1bd1f5cc0bd3d03f7b5cdcb0a5518ddd7289 WHIRLPOOL 8457f040b71b142dbb79442cc6bc7eaa40917b70db583c7b4b0f1a74f865e66bf3bd6cd83544c63a2b5a5dc705e93be6544f29b006ee64decabf93f3a6f82304
+AUX bluetooth_obex_transfer.patch 1289 SHA256 4497f3e0a97c364845d8a3a3b3b75e7dc9d475dc39f56b2106f8c4b9e5111ac2 SHA512 a6353192ae1df6a4b1adf3847118eb0e9d064df2eeec339fbfd13180ceb0635b9054459e5877ece5daf7e9ce942b6c258c0cd8069b996e1606f18a3a7ea8b119 WHIRLPOOL 2578586e9d888429ad11d946c15ffa9f90bd11649733f4f5dab3cdb119930e7d80ef1038111e1310b0038bd745d3049aaa533acf967cf2bdce1da981215cb2c7
AUX cinnamon-1.6.1-automagic-gnome-bluetooth.patch 1725 SHA256 788176a82802b45ebff7db3c8540dc4621c09f5e57f37ebeddc34771ca512847 SHA512 c2f7ae82074c98318026a651042bab40183339db4c4f9a48615487bec02a39398f19713af3ff7989632d3d415942ddfb7bb46c540ce73d7a74809d5b3625001d WHIRLPOOL 5ef7e830aff3df3dc0cda5abd0f37296c2b0ae35877fa911548eaa189d435b6ba1df66430a4b423f3a311b419ab8f72b146a330cf06b41ecf431867b4cd798ac
AUX cinnamon-1.6.1-optional-networkmanager.patch 6418 SHA256 d5fc4f1be5a4b9f8c7e9a18c42a1179e111e8d28f01f8d8d4142d9a9fb44108a SHA512 863a2a7ada2dae38a474bc651094595bf9d0fb64a8523161605977bbfc7522946b93ecf73b4d73061e31390bc0df886e8f299dacbfdc4f076576c3e5c2094a5e WHIRLPOOL 151271653b2f6c30a1dafae93a790e4947581ec37ed8af3713dd4839e404b5b81c74d02267c8f8841c0fafdf5b8cde048cac74197ce5df843166b44e6a1e7999
AUX cinnamon-1.6.7-pillow.patch 840 SHA256 8da30d383b5a437279d177e360e0b200bbd6670e851419b0e5bb877acbad9b6e SHA512 3321d10072e60ba248dc84916bcce1254925e7b0f2a32982d66b4545294c6f3af1e10265443af35619a17707921ffc818d3f60c4aaf63bab008ba12340f55043 WHIRLPOOL b098f3d8e3bda7e76c358d939d7f4461c70f98785d6a37679974dbc42219e187c5502fbe121787b6ec5db6dc0e109bd5ff1841962130dd88876e562379e90508
+AUX cinnamon-1.7.8-settings-lspci.patch 930 SHA256 af22f896dde77eac0ff209908e95e2a528f22cd60bb34c9530747239ee762eb6 SHA512 a40ce12c7ea2c9ea0d6a5c155f8721030f32dca3038b0d47b254a8cae56237dbcad97ada0255e502ae3015533a6d8d0011c60d4cdf3eb27c70e3740de1f7a062 WHIRLPOOL d403a8bec88474f09c4900477014a5a72f36f75a472f193c78550e7ac38fa28b4d9a991a553a3c2465b2f1c3c08c175d4d9b4fed27c71fe75829716f9e08e60e
+AUX cinnamon-screensaver.desktop 451 SHA256 19ca21fbe12ef393176c2dfa75c7c1b248c6e1560005e0c19a07349f25101323 SHA512 8e1f7b5524494336da3f469f446c45adfefee0ff55f04d069612234cc27ca39b6bf1c87bdcdb18078ddffad4b46a8750bd5b41d35ab9180b4ed1417cc82e5552 WHIRLPOOL 29a1a430f7d7aa73bd8ff5d0877772fe092c3c39b9bc1adb35b32f5432f357204b7367edd00616adc5a15f3059cd16da14db5047ddc09795ce761e53f2fec626
+AUX cinnamon2d-screensaver.desktop 455 SHA256 ce9172af04758a4078079e6bcb7b1117bfce02e3a9a7f794f32d7359612a3aa0 SHA512 2dffcbc2dba76597176ea645974208b58aca9c5809e46426e55f655a4f05a2fafffb9f024d25ec6bbe7fb05a3e8bfbfdfed055051895838db8816edfaea57791 WHIRLPOOL a4bec3d1c85b47691b2ddd337c480889a51a3140ff17ecb7fd11e3326788b9b20044a540851b3bcfae3a106e143363369d47c03310b315a78faff5201c66e215
+AUX fix-control-center-check.patch 845 SHA256 ee5694bdc997ffa35a817f691b15bae13747137d35ec2aecd0da298d7edbe426 SHA512 6e60335db973ee203114527c4aeb1e5f07319916e30a834b04c57fc19992cfa5a0df8c5eb4fabbaf1d2a92337824ad60e12acbca8e8440a4ef9224588ee21a1d WHIRLPOOL f7656195bac65dc75860a753fd45539b168f07bd5f78170a42569c6d60ef2f62688de5609e59993a2e613084a86d620fafce5c949f353084084411e4790a278a
+AUX idle-dim.patch 1963 SHA256 23228a6b92d2f7cc85f8deac5c1ad622e0d86a7bd2de1288997a307421f57055 SHA512 4e28fab965019a11e12acd0c807f3413e4d1264c2c261003a626aa73a929f238ee5e4dd8ad060887e5cf160d4345e896690d91547e3e6e755b25e4a35300a157 WHIRLPOOL 94200e376fecd7a00280a94e93834b3e67258c3adea533361e2f0f732f51c583d161644f39a229f65cb196717d9037712725d318b6b8153523fa22d76f418dcb
+AUX keyboard_applet.patch 5979 SHA256 a0c05c995102b16f1060cbd43931eeaefeafd0265a0335e4ca14a143bd4c8c30 SHA512 ed9c30810eea45aae6ba76a615cec153db69ee21779c4e7c457be2aea274838724659606dba517f68324186ad55b7624cf63b222a6ff6fc1a6f1cd0c65011ca6 WHIRLPOOL 42e7bdcfceaf77689ba51d20e146d8728a58d94eded600fa5e94ec087832ef8e1aaf92d676af380993ac8f7eb425291665ac3010e3b3fc60cc754e071a268801
+AUX menu_editor.patch 34725 SHA256 9e6c1ab7612ce67ebc310888186b9a626e3251da8d525b5029d3e5e369014142 SHA512 e1ddd504db3ee80d1dcec6ccbc83276abc8ebbfc0406c815b45e6908ae6309dcad957d0b0c858d29d92c504a4a80602f67f563bb02babdb401184a46f3e984d8 WHIRLPOOL b2bfe9458e0a6c92fedc20ebc12ccba616178f8102cc907be95ef840fc732597784ab73b41b7878e94c2381b693ffdb6b866b944eebd786ede869ce0c8343820
+AUX remove_GC.patch 3772 SHA256 3d362efd15f8cfeca1713f5bcf88d4be787b39d7c7f24b73cd13f867af33a680 SHA512 6796ff6735c3480013ca59b2df4c1ac5aebfc66e6137df8d06ab06e5d6b8ae6213e452d7219e50c1eb973ebbd8b7fdd962b90c119a6bd4d3e82678dd94ed8573 WHIRLPOOL b6c36992a7dee94d76e6288d3d1350a9d08b1758ad7abba3b93f83df43b7236608e420954c7f31d9709042093ccc3d26b1dc95ca1d0c69792da1793d56097e4f
+AUX screensaver.patch 2218 SHA256 d931ca3ac5e5294a5a8afde9b861116d2b2688acaec7f31009f00debbfae9cd9 SHA512 b5a6f413333f5c9196eaab95e7376d46eb69de9cf5392eccf31f78f2bb045eac550fe0fec5760056f8828f729eeda31d8bc519aec30b74fd039bfae9e799d7c9 WHIRLPOOL 8147366ccb45f4940df7884539a55e09141adcd1624950b6772afd3403378a40b2525a9d23667e0708f6cded50179bbfb3b371da9ba101f61902ad80e4471127
DIST cinnamon-1.6.7.tar.gz 3748727 SHA256 283d8ec894831df5c062e88196c5f0191daa99b1da1cbfada1547a700f50ab24 SHA512 73a774af74ad9223f16cf5082f7507322471f9d329b402f9d5ebba28f5c620234a9e28ffcdd8810c0ca4944b2aa7e3b82e59c445f8d64c0a8c5cd7a036f5c633 WHIRLPOOL 424201aca9d40fd64e8327ade88e662d73ed7a8ba551406a705afd8d2a386321b48b9decae8c3b39939d638b0fcc08198f1ecc415d3d9af38d67fe638e9cce70
-EBUILD cinnamon-1.6.7-r1.ebuild 8232 SHA256 e355f4615132326e903853601476e4feab9dd098c9d006a6048ee1cbf948b9a8 SHA512 c03c0af30d765f72fd8802dbca62e61ace2b178c6fb2c67a381645fcaeb85e37c2ff0d15cca758e99aeef365ada487e381cfd3e7a2ebc5bdda512a8f8da59f45 WHIRLPOOL c2a22820b68943231a2c380350dbf5f2cebfc5fcc5785dd6fbfc362222df0203c01de5d01c01d231e6d39533406eac7cebdbb6096022a55ea6609900e09fa6f4
+DIST cinnamon-1.8.8.1.tar.gz 4347516 SHA256 100cf6ca9b2622d74532323278bdefb06ac76b750bbf326cc9dadd14e99909bb SHA512 a709781b4e6cecfe97f6fb4bad4b953f6c11ec49ebacabbfcc186e57a2e6a28abebc163d7081248d6cbac24996732a4aea7e5d54991e6c09b9701b7e64a91a0f WHIRLPOOL 49533ec7c6c40aae5e76377a67efa88f16a7ae2a6b2c3b3ab9316cb61d40fbca544f00f402e2a75b54bd90537f0813dfb5ba4d3a17a2ad3ce5d7e67e88a6c543
+DIST gnome-3.8.patch 138356 SHA256 840cebcefc183076f9e9208421354e5e9cbccec62824c788b17cb564c2d2519a SHA512 1fd95720a6398607330ff445bd55f1f898dac03dda542d7a7246f81127e55793b02a4df4cc8c759a5f6c11dd7e5a6609bf0bfc05266a87e65034eab0f94077f2 WHIRLPOOL 84899979f7a4c1c6f7cb4f3d356e45e3b49f798605e48c768c3f43a90b828b3f1e9051e9e176bc099c9051d8fb4107e7d127cef27dc4797189b7c9479edf9bd5
EBUILD cinnamon-1.6.7-r2.ebuild 8326 SHA256 a2e729516c3d6d6b58a788bfa41c90f0d651c820c5aa4ab70ad40047511b56cb SHA512 5866bf61ff0bb79f144d7f16be4c8010320595928b549fb27e9390f58db66b4e7638ba4a9e7f8dbffa177c03e2d6bee821e8e92342f5ea93af9f257873d2558c WHIRLPOOL 99b43e6459c95c9ad041c72d31ce88ae17839f6bbee15fb04ea4e51d921a48f8bd3212e728c34e9f954056b68c3f68741388908bc120282c8301f5c2ad235fe8
-MISC ChangeLog 6101 SHA256 9b0937994b911e4888cf837527d0e73592c0002f8209b6c820ff1e93ca73b5d5 SHA512 324d8abeeaf365fdce92b79a8e582c506119bf686ed9c4aa2cbcda2e7d4d6d0968a0ef1d8a497dc402949c53e699e889f6219c7d3abb935b010d9c0b45d7cff7 WHIRLPOOL 4f8d7d18f189909209d5b5bd326a0f3f0a8a2b956c00ef0523cdaa349c8573ab2a32531096abf4839582210e29275a01c207a88c696c971997496a8d4492a226
+EBUILD cinnamon-1.8.8.1.ebuild 8628 SHA256 306510d2ca8870b17493434728512de5d7e1c7f22e7ab178c9e818bd172424c9 SHA512 cc5e23d29cc9886c1179a606e44db7127024161b7e6c38f6f944bbda11e99964ce6bff4cb3f60333383fb0c52fbc072e8f6d35c283e656ff69ef0dffe3148e65 WHIRLPOOL 5b1945164d160c0be97e3aa8cec723a65037cf45a6dd4311a38af3af7bc827e70e978386399e7336fc495b6c5aca36699a9495b094284515e8965bbdaae357eb
+MISC ChangeLog 6610 SHA256 c26313d075e8db38007f7e3af9b85578e4e89640d5c7e3ebcec4dd9bb3645844 SHA512 d26f70ab34d64ae6cfde75657e8f4e743cd38cf0c48b6badfebe272bf2ea61cdd804414c4a666c7f0bc134927cdfc394b02154b9f556379cdbb49d3940bf2912 WHIRLPOOL 9a043108745da2dccd3214605aa046a9e3fd6500ab0adf389776a217e7555ef34b1042005c31acc5e7c86e96cdf8c2af0b3bfd044e7e2b16fc6b2a6384297854
MISC metadata.xml 158 SHA256 3a7dbca0fdc557de69783e0663e2d76ddab129ea8a19b2d0ef6d3e5d1b947ce1 SHA512 7fbfbd2b3ed1b81867d55648509f778fdbe2091af53727b3426a3c7f453ae7e1663a99fdd2101508b8d6c85b3158459c93551b77a6a394f02d7e11cbc8a5ecf4 WHIRLPOOL 4bcd5662974877d42ebc4361b6eb412bfeea2af7144b436ce7ed152327d554afc321c376625ba0bb85a704b70d86e3c4882dff3573047acddd8ffccf655d4f7e
-----BEGIN PGP SIGNATURE-----
-Version: GnuPG v2.0.19 (GNU/Linux)
+Version: GnuPG v2.0.20 (GNU/Linux)
-iF4EAREIAAYFAlG1++oACgkQC77qH+pIQ6SdLAD/c0JT+UElWHMBQSO340qXWiPz
-/eVp2Xq4sPZXI20MnvIBAIiXtUNFbkFyeMwDe4rYnRcwrXefAThvNHCxzsnXjHDL
-=IJZC
+iEYEAREIAAYFAlIi/6wACgkQCaWpQKGI+9QprQCghBOpDwI3XDVFZXYXCEk54a3A
+vb8AmwamD1NfEYpN7iKwxy3xvywYCNEc
+=fvEy
-----END PGP SIGNATURE-----
diff --git a/gnome-extra/cinnamon/cinnamon-1.6.7-r1.ebuild b/gnome-extra/cinnamon/cinnamon-1.8.8.1.ebuild
index 1bd1c8521dda..5bb9b00d4fd0 100644
--- a/gnome-extra/cinnamon/cinnamon-1.6.7-r1.ebuild
+++ b/gnome-extra/cinnamon/cinnamon-1.8.8.1.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/gnome-extra/cinnamon/cinnamon-1.6.7-r1.ebuild,v 1.2 2013/05/19 13:40:14 zorry Exp $
+# $Header: /var/cvsroot/gentoo-x86/gnome-extra/cinnamon/cinnamon-1.8.8.1.ebuild,v 1.1 2013/09/01 08:49:47 pacho Exp $
EAPI="5"
GCONF_DEBUG="no"
@@ -16,7 +16,8 @@ HOMEPAGE="http://cinnamon.linuxmint.com/"
MY_PV="${PV/_p/-UP}"
MY_P="${PN}-${MY_PV}"
-SRC_URI="https://github.com/linuxmint/Cinnamon/tarball/${MY_PV} -> ${MY_P}.tar.gz"
+SRC_URI="https://github.com/linuxmint/Cinnamon/archive/${MY_PV}.tar.gz -> ${MY_P}.tar.gz
+ http://dev.gentoo.org/~pacho/gnome/cinnamon-1.8/gnome-3.8.patch"
LICENSE="GPL-2+"
SLOT="0"
@@ -28,7 +29,8 @@ KEYWORDS="~amd64 ~x86"
# latest g-c-c is needed due to https://bugs.gentoo.org/show_bug.cgi?id=360057
# libXfixes-5.0 needed for pointer barriers
# gnome-menus-3.2.0.1-r1 needed for new 10-xdg-menu-gnome
-COMMON_DEPEND=">=dev-libs/glib-2.29.10:2
+COMMON_DEPEND="
+ >=dev-libs/glib-2.29.10:2
>=dev-libs/gjs-1.29.18
>=dev-libs/gobject-introspection-0.10.1
x11-libs/gdk-pixbuf:2[introspection]
@@ -37,13 +39,13 @@ COMMON_DEPEND=">=dev-libs/glib-2.29.10:2
media-libs/cogl:1.0=[introspection]
app-misc/ca-certificates
>=dev-libs/json-glib-0.13.2
- >=gnome-base/gnome-desktop-2.91.2:3=[introspection]
+ >=gnome-base/gnome-desktop-3.0.0:3=[introspection]
>=gnome-base/gsettings-desktop-schemas-2.91.91
>=media-libs/gstreamer-0.10.16:0.10
>=media-libs/gst-plugins-base-0.10.16:0.10
net-libs/libsoup:2.4[introspection]
>=sys-auth/polkit-0.100[introspection]
- >=x11-wm/muffin-1.0.5[introspection]
+ >=x11-wm/muffin-1.7.4[introspection]
dev-libs/dbus-glib
dev-libs/libxml2:2
@@ -66,7 +68,8 @@ COMMON_DEPEND=">=dev-libs/glib-2.29.10:2
bluetooth? ( >=net-wireless/gnome-bluetooth-3.4:=[introspection] )
networkmanager? (
gnome-base/libgnome-keyring
- >=net-misc/networkmanager-0.8.999[introspection] )"
+ >=net-misc/networkmanager-0.8.999[introspection] )
+"
# Runtime-only deps are probably incomplete and approximate.
# Each block:
# 2. Introspection stuff + dconf needed via imports.gi.*
@@ -81,15 +84,16 @@ COMMON_DEPEND=">=dev-libs/glib-2.29.10:2
# 10. pygobject needed for menu editor
# 11. nemo - default file manager, tightly integrated with cinnamon
# 12. timedated or DateTimeMechanism implementation for cinnamon-settings
+# TODO(lxnay): fix error: libgnome-desktop/gnome-rr-labeler.h: No such file or directory
+# =gnome-extra/cinnamon-control-center-1.8*
RDEPEND="${COMMON_DEPEND}
>=gnome-base/dconf-0.4.1
>=gnome-base/libgnomekbd-2.91.4[introspection]
sys-power/upower[introspection]
- >=gnome-base/gnome-session-3.2.1-r1
+ >=gnome-base/gnome-session-3.8
>=gnome-base/gnome-settings-daemon-2.91
- >=gnome-base/gnome-control-center-2.91.92-r1
>=sys-apps/accountsservice-0.6.14[introspection]
@@ -99,7 +103,7 @@ RDEPEND="${COMMON_DEPEND}
dev-python/dbus-python[${PYTHON_USEDEP}]
dev-python/gconf-python:2
- dev-python/imaging
+ virtual/python-imaging
dev-python/lxml
x11-themes/gnome-icon-theme-symbolic
@@ -107,6 +111,7 @@ RDEPEND="${COMMON_DEPEND}
dev-python/pygobject:3[${PYTHON_USEDEP}]
gnome-extra/nemo
+ gnome-extra/gnome-screensaver
|| (
app-admin/openrc-settingsd
@@ -115,29 +120,42 @@ RDEPEND="${COMMON_DEPEND}
networkmanager? (
net-misc/mobile-broadband-provider-info
- sys-libs/timezone-data )"
+ sys-libs/timezone-data )
+"
+# gnome-extra/gnome-screensaver due screensaver patch, otherwise it uses
+# cinnamon-screensaver
+
DEPEND="${COMMON_DEPEND}
>=sys-devel/gettext-0.17
virtual/pkgconfig
>=dev-util/intltool-0.40
gnome-base/gnome-common
- !!=dev-lang/spidermonkey-1.8.2*"
+ !!=dev-lang/spidermonkey-1.8.2*
+"
# libmozjs.so is picked up from /usr/lib while compiling, so block at build-time
# https://bugs.gentoo.org/show_bug.cgi?id=360413
-S="${WORKDIR}/linuxmint-Cinnamon-5ab432d"
+S="${WORKDIR}/Cinnamon-${PV}"
pkg_setup() {
python-single-r1_pkg_setup
}
src_prepare() {
+ # Fix GNOME 3.8 support
+ epatch "${DISTDIR}/gnome-3.8.patch"
+ epatch "${FILESDIR}/background.patch"
+ epatch "${FILESDIR}/idle-dim.patch"
+ # https://github.com/linuxmint/Cinnamon/issues/1337
+ epatch "${FILESDIR}/keyboard_applet.patch"
+ epatch "${FILESDIR}/screensaver.patch"
+ epatch "${FILESDIR}/bluetooth_obex_transfer.patch"
+ epatch "${FILESDIR}/remove_GC.patch"
+ epatch "${FILESDIR}/menu_editor.patch"
+
# Fix automagic gnome-bluetooth dep, bug #398145
epatch "${FILESDIR}/${PN}-1.6.1-automagic-gnome-bluetooth.patch"
- # Make networkmanager optional, bug #398593
- epatch "${FILESDIR}/${PN}-1.6.1-optional-networkmanager.patch"
-
# Gentoo uses /usr/libexec
sed -e "s:/usr/lib/gnome-session/gnome-session-check-accelerated:${EPREFIX}/usr/libexec/gnome-session-check-accelerated:" \
-i "files/usr/share/gnome-session/sessions/cinnamon.session" || die "sed 1 failed"
@@ -147,8 +165,8 @@ src_prepare() {
-e 's:"/usr/lib":"/usr/'"$(get_libdir)"'":' \
-i files/usr/bin/cinnamon-menu-editor \
-i files/usr/bin/cinnamon-settings \
- -i files/usr/lib/cinnamon-menu-editor/Alacarte/config.py \
- -i files/usr/lib/cinnamon-menu-editor/Alacarte/MainWindow.py \
+ -i files/usr/lib/cinnamon-menu-editor/cme/config.py \
+ -i files/usr/lib/cinnamon-menu-editor/cme/MainWindow.py \
-i files/usr/lib/cinnamon-settings/cinnamon-settings.py || die "sed 2 failed"
if [[ "$(get_libdir)" != lib ]]; then
mv files/usr/lib "files/usr/$(get_libdir)" || die "mv failed"
@@ -164,21 +182,13 @@ src_prepare() {
eautoreconf
gnome2_src_prepare
-
- # Drop G_DISABLE_DEPRECATED for sanity on glib upgrades; bug #384765
- # Note: sed Makefile.in because it is generated from several Makefile.ams
- sed -e 's/-DG_DISABLE_DEPRECATED//g' \
- -i src/Makefile.in browser-plugin/Makefile.in || die "sed 3 failed"
}
src_configure() {
# Don't error out on warnings
gnome2_src_configure \
- --enable-compile-warnings=maximum \
- --disable-schemas-compile \
--disable-jhbuild-wrapper-script \
$(use_with bluetooth) \
- $(use_enable networkmanager) \
--with-ca-certificates="${EPREFIX}/etc/ssl/certs/ca-certificates.crt" \
BROWSER_PLUGIN_DIR="${EPREFIX}/usr/$(get_libdir)/nsbrowser/plugins"
}
@@ -191,9 +201,15 @@ src_install() {
-i "${ED}usr/bin/cinnamon-"{launcher,menu-editor,settings} \
-i "${ED}usr/$(get_libdir)/cinnamon-settings/cinnamon-settings.py" || die
- # Required for gnome-shell on hardened/PaX, bug #398941 and #457194
- # PaX EMUTRAMP need to be on
- pax-mark mrE "${ED}usr/bin/cinnamon"
+ insinto /usr/share/applications
+ doins "${FILESDIR}/cinnamon-screensaver.desktop"
+ doins "${FILESDIR}/cinnamon2d-screensaver.desktop"
+
+ # Required for gnome-shell on hardened/PaX, bug #398941
+ pax-mark mr "${ED}usr/bin/cinnamon"
+
+ # Doesn't exist on Gentoo, causing this to be a dead symlink
+ rm -f "${ED}etc/xdg/menus/cinnamon-applications-merged" || die
}
pkg_postinst() {
@@ -215,8 +231,8 @@ pkg_postinst() {
if has_version "<x11-drivers/ati-drivers-12"; then
ewarn "Cinnamon has been reported to show graphical corruption under"
- ewarn "x11-drivers/ati-drivers-11.*; you may want to use GNOME in"
- ewarn "fallback mode, or switch to open-source drivers."
+ ewarn "x11-drivers/ati-drivers-11.*; you may want to switch to"
+ ewarn "open-source drivers."
fi
if has_version "media-libs/mesa[video_cards_radeon]"; then
diff --git a/gnome-extra/cinnamon/files/background.patch b/gnome-extra/cinnamon/files/background.patch
new file mode 100644
index 000000000000..ccfdce4cf22c
--- /dev/null
+++ b/gnome-extra/cinnamon/files/background.patch
@@ -0,0 +1,16 @@
+--- a/files/usr/lib/cinnamon-settings/modules/cs_backgrounds.py
++++ b/files/usr/lib/cinnamon-settings/modules/cs_backgrounds.py
+@@ -334,10 +334,9 @@ class BackgroundWallpaperPane (Gtk.VBox)
+
+ def update_icon_view(self):
+ pictures_list = []
+- if os.path.exists("/usr/share/cinnamon-background-properties"):
+- for i in os.listdir("/usr/share/cinnamon-background-properties"):
+- if i.endswith(".xml"):
+- pictures_list += self.parse_xml_backgrounds_list(os.path.join("/usr/share/cinnamon-background-properties", i))
++ for i in os.listdir("/usr/share/gnome-background-properties"):
++ if i.endswith(".xml"):
++ pictures_list += self.parse_xml_backgrounds_list(os.path.join("/usr/share/gnome-background-properties", i))
+
+ path = os.path.join(os.getenv("HOME"), ".cinnamon", "backgrounds")
+ if os.path.exists(path):
diff --git a/gnome-extra/cinnamon/files/bluetooth_obex_transfer.patch b/gnome-extra/cinnamon/files/bluetooth_obex_transfer.patch
new file mode 100644
index 000000000000..0e632c48b07c
--- /dev/null
+++ b/gnome-extra/cinnamon/files/bluetooth_obex_transfer.patch
@@ -0,0 +1,25 @@
+--- a/files/usr/share/cinnamon/applets/bluetooth@cinnamon.org/applet.js
++++ b/files/usr/share/cinnamon/applets/bluetooth@cinnamon.org/applet.js
+@@ -455,22 +455,6 @@ MyApplet.prototype = {
+ this._applet.send_to_address(device.bdaddr, device.alias);
+ }));
+ }
+- if (device.capabilities & GnomeBluetoothApplet.Capabilities.OBEX_FILE_TRANSFER) {
+- item.menu.addAction(_("Browse Files..."), Lang.bind(this, function(event) {
+- this._applet.browse_address(device.bdaddr, event.get_time(),
+- Lang.bind(this, function(applet, result) {
+- try {
+- applet.browse_address_finish(result);
+- } catch (e) {
+- this._ensureSource();
+- this._source.notify(new MessageTray.Notification(this._source,
+- _("Bluetooth"),
+- _("Error browsing device"),
+- { body: _("The requested device cannot be browsed, error is '%s'").format(e) }));
+- }
+- }));
+- }));
+- }
+
+ switch (device.type) {
+ case GnomeBluetoothApplet.Type.KEYBOARD:
diff --git a/gnome-extra/cinnamon/files/cinnamon-1.7.8-settings-lspci.patch b/gnome-extra/cinnamon/files/cinnamon-1.7.8-settings-lspci.patch
new file mode 100644
index 000000000000..87e376806b46
--- /dev/null
+++ b/gnome-extra/cinnamon/files/cinnamon-1.7.8-settings-lspci.patch
@@ -0,0 +1,21 @@
+diff -urN a/files/usr/lib/cinnamon-settings/modules/cs_info.py b/files/usr/lib/cinnamon-settings/modules/cs_info.py
+--- a/files/usr/lib/cinnamon-settings/modules/cs_info.py 2013-04-30 18:01:56.000000000 +0200
++++ b/files/usr/lib/cinnamon-settings/modules/cs_info.py 2013-05-01 22:30:03.725733012 +0200
+@@ -27,7 +27,7 @@
+ "T": 1024*1024*1024*1024,
+ }
+ count = 0
+- for card in getProcessOut(("lspci")):
++ for card in getProcessOut(("/usr/sbin/lspci")):
+ if not "VGA" in card:
+ continue
+ cardId = card.split()[0]
+@@ -35,7 +35,7 @@
+ cardUnitName = ""
+ cardName = None
+ cardSize = 0
+- for line in getProcessOut(("lspci", "-v", "-s", cardId)):
++ for line in getProcessOut(("/usr/sbin/lspci", "-v", "-s", cardId)):
+ if line.startswith(cardId):
+ cardName = (line.split(":")[2].split("(rev")[0].strip())
+ else:
diff --git a/gnome-extra/cinnamon/files/cinnamon-screensaver.desktop b/gnome-extra/cinnamon/files/cinnamon-screensaver.desktop
new file mode 100644
index 000000000000..ddc968691325
--- /dev/null
+++ b/gnome-extra/cinnamon/files/cinnamon-screensaver.desktop
@@ -0,0 +1,15 @@
+[Desktop Entry]
+Type=Application
+Name=Cinnamon Screensaver
+Comment=Launch screensaver and locker program
+Icon=preferences-desktop-screensaver
+Exec=gnome-screensaver
+OnlyShowIn=GNOME;
+AutostartCondition=GNOME3 if-session cinnamon
+NoDisplay=true
+X-GNOME-Autostart-Phase=Application
+X-GNOME-Autostart-Notify=true
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-screensaver
+X-GNOME-Bugzilla-Component=general
+X-GNOME-Bugzilla-Version=3.6.0
diff --git a/gnome-extra/cinnamon/files/cinnamon2d-screensaver.desktop b/gnome-extra/cinnamon/files/cinnamon2d-screensaver.desktop
new file mode 100644
index 000000000000..aed9557bff0b
--- /dev/null
+++ b/gnome-extra/cinnamon/files/cinnamon2d-screensaver.desktop
@@ -0,0 +1,15 @@
+[Desktop Entry]
+Type=Application
+Name=Cinnamon2d Screensaver
+Comment=Launch screensaver and locker program
+Icon=preferences-desktop-screensaver
+Exec=gnome-screensaver
+OnlyShowIn=GNOME;
+AutostartCondition=GNOME3 if-session cinnamon2d
+NoDisplay=true
+X-GNOME-Autostart-Phase=Application
+X-GNOME-Autostart-Notify=true
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-screensaver
+X-GNOME-Bugzilla-Component=general
+X-GNOME-Bugzilla-Version=3.6.0
diff --git a/gnome-extra/cinnamon/files/fix-control-center-check.patch b/gnome-extra/cinnamon/files/fix-control-center-check.patch
new file mode 100644
index 000000000000..981b1c1a5435
--- /dev/null
+++ b/gnome-extra/cinnamon/files/fix-control-center-check.patch
@@ -0,0 +1,12 @@
+diff -Naur cinnamon-1.7.1.orig/files/usr/bin/cinnamon-settings cinnamon-1.7.1/files/usr/bin/cinnamon-settings
+--- cinnamon-1.7.1.orig/files/usr/bin/cinnamon-settings 2013-02-21 17:23:45.000000000 +0100
++++ cinnamon-1.7.1/files/usr/bin/cinnamon-settings 2013-03-03 03:03:24.151209998 +0100
+@@ -7,7 +7,7 @@
+ if os.path.exists("/usr/lib/cinnamon-settings/modules/cs_%s.py" % module):
+ print "Python module"
+ os.execvp("/usr/lib/cinnamon-settings/cinnamon-settings.py", ("",) + tuple(sys.argv[1:]))
+- elif os.path.exists("/usr/bin/cinnamon-control-center"):
++ elif os.path.exists("/usr/lib/cinnamon-control-center-1/panels"):
+ print "Unknown module %s, using cinnamon-control-center" % module
+ os.execvp("/usr/lib/cinnamon-settings/cinnamon-settings.py", ("",) + tuple(sys.argv[1:]))
+ elif os.path.exists("/usr/bin/gnome-control-center"): \ No newline at end of file
diff --git a/gnome-extra/cinnamon/files/idle-dim.patch b/gnome-extra/cinnamon/files/idle-dim.patch
new file mode 100644
index 000000000000..85f51238a7a6
--- /dev/null
+++ b/gnome-extra/cinnamon/files/idle-dim.patch
@@ -0,0 +1,35 @@
+diff -Naur linuxmint-Cinnamon-a464dc9.orig/files/usr/share/cinnamon/applets/brightness@cinnamon.org/applet.js linuxmint-Cinnamon-a464dc9/files/usr/share/cinnamon/applets/brightness@cinnamon.org/applet.js
+--- linuxmint-Cinnamon-a464dc9.orig/files/usr/share/cinnamon/applets/brightness@cinnamon.org/applet.js 2013-04-30 18:01:56.000000000 +0200
++++ linuxmint-Cinnamon-a464dc9/files/usr/share/cinnamon/applets/brightness@cinnamon.org/applet.js 2013-05-02 19:32:12.934254811 +0200
+@@ -8,8 +8,7 @@
+
+ /* constants */
+ const DimSettingsSchema = "org.gnome.settings-daemon.plugins.power";
+-const DimSettingsAc = "idle-dim-ac";
+-const DimSettingsBattery = "idle-dim-battery";
++const DimSettings = "idle-dim";
+ const PowerBusName = 'org.gnome.SettingsDaemon';
+ const PowerObjectPath = '/org/gnome/SettingsDaemon/Power';
+
+@@ -116,10 +115,8 @@
+
+ this._settingsMenu = new PopupMenu.PopupSubMenuMenuItem(_("Dimming settings"));
+
+- let dimSwitchAc = this._buildItem(_("Dim screen on AC power"), DimSettingsSchema, DimSettingsAc);
+- this._settingsMenu.menu.addMenuItem(dimSwitchAc);
+- let dimSwitchBattery = this._buildItem(_("Dim screen on battery"), DimSettingsSchema, DimSettingsBattery);
+- this._settingsMenu.menu.addMenuItem(dimSwitchBattery);
++ let dimSwitch = this._buildItem(_("Dim screen"), DimSettingsSchema, DimSettings);
++ this._settingsMenu.menu.addMenuItem(dimSwitch);
+
+ //initial update.
+ //We have to wait until dbus calls back to decide whether to display brightness controls.
+@@ -146,7 +146,7 @@
+ this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
+ }
+
+- this.menu.addSettingsAction(_("Settings"), "screen");
++ this.menu.addSettingsAction(_("Settings"), "screensaver");
+ }));
+ }
+ catch (e) {
diff --git a/gnome-extra/cinnamon/files/keyboard_applet.patch b/gnome-extra/cinnamon/files/keyboard_applet.patch
new file mode 100644
index 000000000000..6b36940862f4
--- /dev/null
+++ b/gnome-extra/cinnamon/files/keyboard_applet.patch
@@ -0,0 +1,142 @@
+diff --git a/applet.js b/applet.js
+--- a/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/applet.js
++++ b/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/applet.js
+@@ -1,9 +1,10 @@
+ const Applet = imports.ui.applet;
+-const Gkbd = imports.gi.Gkbd;
+ const Lang = imports.lang;
+-const Cinnamon = imports.gi.Cinnamon;
++const Gio = imports.gi.Gio;
++const GLib = imports.gi.GLib;
+ const St = imports.gi.St;
+ const Gtk = imports.gi.Gtk;
++const GnomeDesktop = imports.gi.GnomeDesktop;
+ const Main = imports.ui.main;
+ const PopupMenu = imports.ui.popupMenu;
+ const Util = imports.misc.util;
+@@ -15,11 +16,12 @@
+ LayoutMenuItem.prototype = {
+ __proto__: PopupMenu.PopupBaseMenuItem.prototype,
+
+- _init: function(config, id, indicator, long_name) {
++ _init: function(ipsettings, id, index, indicator, long_name) {
+ PopupMenu.PopupBaseMenuItem.prototype._init.call(this);
+
+- this._config = config;
++ this._ipsettings = ipsettings;
+ this._id = id;
++ this._index = index;
+ this.label = new St.Label({ text: long_name });
+ this.indicator = indicator;
+ this.addActor(this.label);
+@@ -28,7 +30,7 @@
+
+ activate: function(event) {
+ PopupMenu.PopupBaseMenuItem.prototype.activate.call(this);
+- this._config.lock_group(this._id);
++ this._ipsettings.set_value('current', GLib.Variant.new_uint32(this._index));
+ }
+ };
+
+@@ -54,18 +56,18 @@
+ this._layoutItems = [ ];
+
+ this._showFlags = global.settings.get_boolean("keyboard-applet-use-flags");
+- this._config = Gkbd.Configuration.get();
+- this._config.connect('changed', Lang.bind(this, this._syncConfig));
+- this._config.connect('group-changed', Lang.bind(this, this._syncGroup));
++ this._xkbInfo = new GnomeDesktop.XkbInfo();
++ this._ipsettings = new Gio.Settings({ schema: 'org.gnome.desktop.input-sources' });
++ this._ipsettings.connect('changed::sources', Lang.bind(this, this._syncConfig));
++ this._ipsettings.connect('changed::current', Lang.bind(this, this._syncGroup));
+ global.settings.connect('changed::keyboard-applet-use-flags', Lang.bind(this, this._reload_settings));
+- this._config.start_listen();
+
+ this._syncConfig();
+
+ this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
+ this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, function() {
+ Main.overview.hide();
+- Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]);
++ Util.spawn(['gkbd-keyboard-display', '-l', this._selectedLayout._id]);
+ }));
+ this.menu.addAction(_("Show Character Table"), Lang.bind(this, function() {
+ Main.overview.hide();
+@@ -98,7 +100,6 @@
+ },
+
+ _reload_settings: function() {
+- this._showFlags = global.settings.get_boolean("keyboard-applet-use-flags");
+ this._syncConfig();
+ },
+
+@@ -127,8 +128,8 @@
+ _syncConfig: function() {
+ this._showFlags = global.settings.get_boolean("keyboard-applet-use-flags");
+
+- let groups = this._config.get_group_names();
+- if (groups.length > 1) {
++ let sources = this._ipsettings.get_value('sources');
++ if (sources.n_children() > 1) {
+ this.actor.show();
+ } else {
+ this.menu.close();
+@@ -141,25 +142,29 @@
+ for (let i = 0; i < this._labelActors.length; i++)
+ this._labelActors[i].destroy();
+
+- let short_names = this._adjustGroupNames(this._config.get_short_group_names());
+-
+ this._selectedLayout = null;
+ this._layoutItems = [ ];
+ this._labelActors = [ ];
+- for (let i = 0; i < groups.length; i++) {
+- let icon_name = this._config.get_group_name(i);
++ for (let i = 0; i < sources.n_children(); i++) {
++ let [type, id] = sources.get_child_value(i).deep_unpack();
++ let displayName = id;
++ let shortName = id;
++ let xkbLayout = id;
++ if (type == 'xkb') {
++ [_exists, displayName, shortName, xkbLayout, _xkbVariant] = this._xkbInfo.get_layout_info(id);
++ } // TODO: errorhandling, handle 'ibus'
++ let icon_name = xkbLayout; // FIXME: Really?
+ let actor;
+ if (this._showFlags)
+ actor = new St.Icon({ icon_name: icon_name, icon_type: St.IconType.FULLCOLOR, style_class: 'popup-menu-icon' });
+ else
+- actor = new St.Label({ text: short_names[i] });
+- let item = new LayoutMenuItem(this._config, i, actor, groups[i]);
+- item._short_group_name = short_names[i];
++ actor = new St.Label({ text: shortName });
++ let item = new LayoutMenuItem(this._ipsettings, id, i, actor, displayName);
+ item._icon_name = icon_name;
+ this._layoutItems.push(item);
+ this.menu.addMenuItem(item, i);
+
+- let shortLabel = new St.Label({ text: short_names[i] });
++ let shortLabel = new St.Label({ text: shortName });
+ this._labelActors.push(shortLabel);
+ }
+
+@@ -167,17 +172,17 @@
+ },
+
+ _syncGroup: function() {
+- let selected = this._config.get_current_group();
++ let current = this._ipsettings.get_uint('current');
+
+ if (this._selectedLayout) {
+ this._selectedLayout.setShowDot(false);
+ this._selectedLayout = null;
+ }
+
+- let item = this._layoutItems[selected];
++ let item = this._layoutItems[current];
+ item.setShowDot(true);
+
+- let selectedLabel = this._labelActors[selected];
++ let selectedLabel = this._labelActors[current];
+
+ if (this._showFlags) {
+ this.set_applet_icon_name(item._icon_name);
diff --git a/gnome-extra/cinnamon/files/menu_editor.patch b/gnome-extra/cinnamon/files/menu_editor.patch
new file mode 100644
index 000000000000..e18ee7f48e85
--- /dev/null
+++ b/gnome-extra/cinnamon/files/menu_editor.patch
@@ -0,0 +1,815 @@
+diff --git a/files/usr/bin/cinnamon-launcher-creator b/files/usr/bin/cinnamon-launcher-creator
+new file mode 100755
+index 0000000..6f51401
+--- /dev/null
++++ b/files/usr/bin/cinnamon-launcher-creator
+@@ -0,0 +1,21 @@
++#! /usr/bin/python -OOt
++
++import sys
++sys.path.insert(0,'/usr/lib/cinnamon-menu-editor')
++from cme import ItemEditor, MenuEditor
++
++def main():
++ try:
++ from MenuEditor import config
++ datadir = config.pkgdatadir
++ version = config.VERSION
++ except:
++ datadir = '.'
++ version = '0.9'
++ if len(sys.argv) > 1:
++ app = ItemEditor.DesktopLauncherCreator(sys.argv[1])
++ else:
++ print "Missing path argument for launcher location"
++
++if __name__ == '__main__':
++ main()
+diff --git a/files/usr/lib/cinnamon-menu-editor/cme/ItemEditor.py b/files/usr/lib/cinnamon-menu-editor/cme/ItemEditor.py
+new file mode 100644
+index 0000000..80c2acd
+--- /dev/null
++++ b/files/usr/lib/cinnamon-menu-editor/cme/ItemEditor.py
+@@ -0,0 +1,247 @@
++# -*- coding: utf-8 -*-
++# Alacarte Menu Editor - Simple fd.o Compliant Menu Editor
++# Copyright (C) 2013 Red Hat, Inc.
++#
++# This library is free software; you can redistribute it and/or
++# modify it under the terms of the GNU Library General Public
++# License as published by the Free Software Foundation; either
++# version 2 of the License, or (at your option) any later version.
++#
++# This library is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# Library General Public License for more details.
++#
++# You should have received a copy of the GNU Library General Public
++# License along with this library; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++import gettext
++import os
++import gi
++from gi.repository import GLib, Gtk
++from cme import config, util
++
++_ = gettext.gettext
++
++EXTENSIONS = (".png", ".xpm", ".svg")
++
++def try_icon_name(filename):
++ # Detect if the user picked an icon, and make
++ # it into an icon name.
++ if not filename.endswith(EXTENSIONS):
++ return filename
++
++ filename = filename[:-4]
++
++ theme = Gtk.IconTheme.get_default()
++ resolved_path = None
++ for path in theme.get_search_path():
++ if filename.startswith(path):
++ resolved_path = filename[len(path):].lstrip(os.sep)
++ break
++
++ if resolved_path is None:
++ return filename
++
++ parts = resolved_path.split(os.sep)
++ # icon-theme/size/category/icon
++ if len(parts) != 4:
++ return filename
++
++ return parts[3]
++
++def get_icon_string(image):
++ filename = image.props.file
++ if filename is not None:
++ return try_icon_name(filename)
++
++ return image.props.icon_name
++
++def strip_extensions(icon):
++ if icon.endswith(EXTENSIONS):
++ return icon[:-4]
++ else:
++ return icon
++
++def set_icon_string(image, icon):
++ if GLib.path_is_absolute(icon):
++ image.props.file = icon
++ else:
++ image.props.icon_name = strip_extensions(icon)
++
++DESKTOP_GROUP = GLib.KEY_FILE_DESKTOP_GROUP
++
++# XXX - replace with a better UI eventually
++class IconPicker(object):
++ def __init__(self, dialog, button, image):
++ self.dialog = dialog
++ self.button = button
++ self.button.connect('clicked', self.pick_icon)
++ self.image = image
++
++ def pick_icon(self, button):
++ chooser = Gtk.FileChooserDialog(title=_("Choose an icon"),
++ parent=self.dialog,
++ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,
++ Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
++ response = chooser.run()
++ if response == Gtk.ResponseType.ACCEPT:
++ self.image.props.file = chooser.get_filename()
++ chooser.destroy()
++
++class ItemEditor(object):
++ ui_file = None
++
++ def __init__(self, item_path, parent=None):
++ self.builder = Gtk.Builder()
++ self.builder.add_from_file(self.ui_file)
++
++ self.dialog = self.builder.get_object('editor')
++ if parent:
++ self.dialog.set_transient_for(parent)
++ self.dialog.connect('response', self.on_response)
++
++ self.build_ui()
++
++ self.item_path = item_path
++ self.load()
++ self.resync_validity()
++
++ def build_ui(self):
++ raise NotImplementedError()
++
++ def get_keyfile_edits(self):
++ raise NotImplementedError()
++
++ def set_text(self, ctl, name):
++ try:
++ val = self.keyfile.get_string(DESKTOP_GROUP, name)
++ except GLib.GError:
++ pass
++ else:
++ self.builder.get_object(ctl).set_text(val)
++
++ def set_check(self, ctl, name):
++ try:
++ val = self.keyfile.get_boolean(DESKTOP_GROUP, name)
++ except GLib.GError:
++ pass
++ else:
++ self.builder.get_object(ctl).set_active(val)
++
++ def set_icon(self, ctl, name):
++ try:
++ val = self.keyfile.get_string(DESKTOP_GROUP, name)
++ except GLib.GError:
++ pass
++ else:
++ set_icon_string(self.builder.get_object(ctl), val)
++
++ def load(self):
++ self.keyfile = GLib.KeyFile()
++ try:
++ self.keyfile.load_from_file(self.item_path, util.KEY_FILE_FLAGS)
++ except GLib.GError:
++ pass
++
++ def save(self):
++ util.fillKeyFile(self.keyfile, self.get_keyfile_edits())
++ contents, length = self.keyfile.to_data()
++ need_exec = False
++ if ".desktop" not in self.item_path and ".directory" not in self.item_path:
++ need_exec = True
++ self.item_path = os.path.join(self.item_path, (self.builder.get_object('name-entry').get_text() + ".desktop"))
++ with open(self.item_path, 'w') as f:
++ f.write(contents)
++ if need_exec:
++ os.system("chmod a+x " + self.item_path)
++
++
++ def run(self):
++ self.dialog.present()
++
++ def on_response(self, dialog, response):
++ if response == Gtk.ResponseType.OK:
++ self.save()
++ self.dialog.destroy()
++
++class LauncherEditor(ItemEditor):
++ ui_file = '/usr/lib/cinnamon-menu-editor/launcher-editor.ui'
++
++ def build_ui(self):
++ self.icon_picker = IconPicker(self.dialog,
++ self.builder.get_object('icon-button'),
++ self.builder.get_object('icon-image'))
++
++ self.builder.get_object('exec-browse').connect('clicked', self.pick_exec)
++
++ self.builder.get_object('name-entry').connect('changed', self.resync_validity)
++ self.builder.get_object('exec-entry').connect('changed', self.resync_validity)
++
++ def resync_validity(self, *args):
++ name_text = self.builder.get_object('name-entry').get_text()
++ exec_text = self.builder.get_object('exec-entry').get_text()
++ valid = (name_text is not None and exec_text is not None)
++ self.builder.get_object('ok').set_sensitive(valid)
++
++ def load(self):
++ super(LauncherEditor, self).load()
++ self.set_text('name-entry', "Name")
++ self.set_text('exec-entry', "Exec")
++ self.set_text('comment-entry', "Comment")
++ self.set_check('terminal-check', "Terminal")
++ self.set_icon('icon-image', "Icon")
++
++ def get_keyfile_edits(self):
++ return dict(Name=self.builder.get_object('name-entry').get_text(),
++ Exec=self.builder.get_object('exec-entry').get_text(),
++ Comment=self.builder.get_object('comment-entry').get_text(),
++ Terminal=self.builder.get_object('terminal-check').get_active(),
++ Icon=get_icon_string(self.builder.get_object('icon-image')),
++ Type="Application")
++
++ def pick_exec(self, button):
++ chooser = Gtk.FileChooserDialog(title=_("Choose a command"),
++ parent=self.dialog,
++ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,
++ Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
++ response = chooser.run()
++ if response == Gtk.ResponseType.ACCEPT:
++ self.builder.get_object('exec-entry').set_text(chooser.get_filename())
++ chooser.destroy()
++
++class DirectoryEditor(ItemEditor):
++ ui_file = '/usr/lib/cinnamon-menu-editor/directory-editor.ui'
++
++ def build_ui(self):
++ self.icon_picker = IconPicker(self.dialog,
++ self.builder.get_object('icon-button'),
++ self.builder.get_object('icon-image'))
++
++ self.builder.get_object('name-entry').connect('changed', self.resync_validity)
++
++ def resync_validity(self, *args):
++ name_text = self.builder.get_object('name-entry').get_text()
++ valid = (name_text is not None)
++ self.builder.get_object('ok').set_sensitive(valid)
++
++ def load(self):
++ super(DirectoryEditor, self).load()
++ self.set_text('name-entry', "Name")
++ self.set_text('comment-entry', "Comment")
++ self.set_icon('icon-image', "Icon")
++
++ def get_keyfile_edits(self):
++ return dict(Name=self.builder.get_object('name-entry').get_text(),
++ Comment=self.builder.get_object('comment-entry').get_text(),
++ Icon=get_icon_string(self.builder.get_object('icon-image')),
++ Type="Directory")
++
++def DesktopLauncherCreator(path):
++ Gtk.Window.set_default_icon_name('alacarte')
++ editor = LauncherEditor(path, None)
++ editor.dialog.connect('destroy', Gtk.main_quit)
++ editor.dialog.show_all()
++ Gtk.main()
++
+diff --git a/files/usr/lib/cinnamon-menu-editor/cme/MainWindow.py b/files/usr/lib/cinnamon-menu-editor/cme/MainWindow.py
+index 33106a9..735d420 100644
+--- a/files/usr/lib/cinnamon-menu-editor/cme/MainWindow.py
++++ b/files/usr/lib/cinnamon-menu-editor/cme/MainWindow.py
+@@ -22,6 +22,7 @@ import cgi
+ import os
+ import gettext
+ import subprocess
++import shutil
+
+ from cme import config
+ gettext.bindtextdomain(config.GETTEXT_PACKAGE, config.localedir)
+@@ -29,6 +30,7 @@ gettext.textdomain(config.GETTEXT_PACKAGE)
+
+ _ = gettext.gettext
+ from cme.MenuEditor import MenuEditor
++from cme.ItemEditor import LauncherEditor, DirectoryEditor
+ from cme import util
+
+ class MainWindow(object):
+@@ -58,6 +60,7 @@ class MainWindow(object):
+ self.cut_copy_buffer = None
+ self.file_id = None
+ self.last_tree = None
++ self.main_window = self.tree.get_object('mainwindow')
+
+ def run(self):
+ self.loadMenus()
+@@ -261,8 +264,8 @@ class MainWindow(object):
+ else:
+ parent = menus[iter][3]
+ file_path = os.path.join(util.getUserDirectoryPath(), util.getUniqueFileId('alacarte-made', '.directory'))
+- process = subprocess.Popen(['gnome-desktop-item-edit', file_path], env=os.environ)
+- GObject.timeout_add(100, self.waitForNewMenuProcess, process, parent.get_menu_id(), file_path)
++ editor = DirectoryEditor(file_path, self.main_window)
++ editor.run()
+
+ def on_new_item_button_clicked(self, button):
+ menu_tree = self.tree.get_object('menu_tree')
+@@ -274,8 +277,8 @@ class MainWindow(object):
+ else:
+ parent = menus[iter][3]
+ file_path = os.path.join(util.getUserItemPath(), util.getUniqueFileId('alacarte-made', '.desktop'))
+- process = subprocess.Popen(['gnome-desktop-item-edit', file_path], env=os.environ)
+- GObject.timeout_add(100, self.waitForNewItemProcess, process, parent.get_menu_id(), file_path)
++ editor = LauncherEditor(file_path, self.main_window)
++ editor.run()
+
+ def on_edit_delete_activate(self, menu):
+ item_tree = self.tree.get_object('item_tree')
+@@ -302,18 +305,17 @@ class MainWindow(object):
+ if isinstance(item, GMenu.TreeEntry):
+ file_path = os.path.join(util.getUserItemPath(), item.get_desktop_file_id())
+ file_type = 'Item'
++ Editor = LauncherEditor
+ elif isinstance(item, GMenu.TreeDirectory):
+ file_path = os.path.join(util.getUserDirectoryPath(), os.path.split(item.get_desktop_file_path())[1])
+ file_type = 'Menu'
++ Editor = DirectoryEditor
+
+ if not os.path.isfile(file_path):
+- data = open(item.get_desktop_file_path()).read()
+- open(file_path, 'w').write(data)
++ shutil.copy(item.get_desktop_file_path(), file_path)
+
+- if file_path not in self.edit_pool:
+- self.edit_pool.append(file_path)
+- process = subprocess.Popen(['gnome-desktop-item-edit', file_path], env=os.environ)
+- GObject.timeout_add(100, self.waitForEditProcess, process, file_path)
++ editor = Editor(file_path, self.main_window)
++ editor.run()
+
+ def on_edit_cut_activate(self, menu):
+ item_tree = self.tree.get_object('item_tree')
+diff --git a/files/usr/lib/cinnamon-menu-editor/cme/util.py b/files/usr/lib/cinnamon-menu-editor/cme/util.py
+index 237f03b..459c222 100644
+--- a/files/usr/lib/cinnamon-menu-editor/cme/util.py
++++ b/files/usr/lib/cinnamon-menu-editor/cme/util.py
+@@ -32,10 +32,10 @@ def fillKeyFile(keyfile, items):
+
+ if isinstance(item, bool):
+ keyfile.set_boolean(DESKTOP_GROUP, key, item)
+- elif isinstance(item, Sequence):
+- keyfile.set_string_list(DESKTOP_GROUP, key, item)
+ elif isinstance(item, basestring):
+ keyfile.set_string(DESKTOP_GROUP, key, item)
++ elif isinstance(item, Sequence):
++ keyfile.set_string_list(DESKTOP_GROUP, key, item)
+
+ def getNameFromKeyFile(keyfile):
+ return keyfile.get_string(DESKTOP_GROUP, "Name")
+diff --git a/files/usr/lib/cinnamon-menu-editor/directory-editor.ui b/files/usr/lib/cinnamon-menu-editor/directory-editor.ui
+new file mode 100644
+index 0000000..9228c49
+--- /dev/null
++++ b/files/usr/lib/cinnamon-menu-editor/directory-editor.ui
+@@ -0,0 +1,178 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<interface>
++ <!-- interface-requires gtk+ 3.0 -->
++ <object class="GtkDialog" id="editor">
++ <property name="can_focus">False</property>
++ <property name="border_width">4</property>
++ <property name="title" translatable="yes">Directory Properties</property>
++ <property name="modal">True</property>
++ <property name="type_hint">dialog</property>
++ <child internal-child="vbox">
++ <object class="GtkBox" id="dialog-box">
++ <property name="can_focus">False</property>
++ <property name="orientation">vertical</property>
++ <property name="spacing">4</property>
++ <child internal-child="action_area">
++ <object class="GtkButtonBox" id="dialog-action_area">
++ <property name="can_focus">False</property>
++ <property name="layout_style">end</property>
++ <child>
++ <object class="GtkButton" id="cancel">
++ <property name="label">gtk-cancel</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">True</property>
++ <property name="use_stock">True</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">True</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkButton" id="ok">
++ <property name="label">gtk-ok</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">True</property>
++ <property name="use_stock">True</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">True</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">True</property>
++ <property name="pack_type">end</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkBox" id="hbox">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="spacing">10</property>
++ <child>
++ <object class="GtkAlignment" id="alignment1">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="xalign">1</property>
++ <property name="yalign">0</property>
++ <property name="yscale">0</property>
++ <child>
++ <object class="GtkButton" id="icon-button">
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">True</property>
++ <child>
++ <object class="GtkImage" id="icon-image">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="pixel_size">64</property>
++ <property name="icon_name">folder</property>
++ </object>
++ </child>
++ </object>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">True</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkGrid" id="grid1">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="row_spacing">6</property>
++ <property name="column_spacing">10</property>
++ <child>
++ <object class="GtkLabel" id="label2">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="xalign">1</property>
++ <property name="label" translatable="yes">Name:</property>
++ <attributes>
++ <attribute name="weight" value="bold"/>
++ </attributes>
++ </object>
++ <packing>
++ <property name="left_attach">0</property>
++ <property name="top_attach">0</property>
++ <property name="width">1</property>
++ <property name="height">1</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkLabel" id="label4">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="xalign">1</property>
++ <property name="label" translatable="yes">Comment:</property>
++ <attributes>
++ <attribute name="weight" value="bold"/>
++ </attributes>
++ </object>
++ <packing>
++ <property name="left_attach">0</property>
++ <property name="top_attach">1</property>
++ <property name="width">1</property>
++ <property name="height">1</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkEntry" id="name-entry">
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="has_focus">True</property>
++ <property name="invisible_char">●</property>
++ </object>
++ <packing>
++ <property name="left_attach">1</property>
++ <property name="top_attach">0</property>
++ <property name="width">1</property>
++ <property name="height">1</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkEntry" id="comment-entry">
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="invisible_char">●</property>
++ </object>
++ <packing>
++ <property name="left_attach">1</property>
++ <property name="top_attach">1</property>
++ <property name="width">1</property>
++ <property name="height">1</property>
++ </packing>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
++ <property name="pack_type">end</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ </object>
++ </child>
++ <action-widgets>
++ <action-widget response="-6">cancel</action-widget>
++ <action-widget response="-5">ok</action-widget>
++ </action-widgets>
++ </object>
++</interface>
+\ No newline at end of file
+diff --git a/files/usr/lib/cinnamon-menu-editor/launcher-editor.ui b/files/usr/lib/cinnamon-menu-editor/launcher-editor.ui
+new file mode 100644
+index 0000000..a643c63
+--- /dev/null
++++ b/files/usr/lib/cinnamon-menu-editor/launcher-editor.ui
+@@ -0,0 +1,252 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<interface>
++ <!-- interface-requires gtk+ 3.0 -->
++ <object class="GtkDialog" id="editor">
++ <property name="can_focus">False</property>
++ <property name="border_width">4</property>
++ <property name="title" translatable="yes">Launcher Properties</property>
++ <property name="modal">True</property>
++ <property name="type_hint">dialog</property>
++ <child internal-child="vbox">
++ <object class="GtkBox" id="dialog-box">
++ <property name="can_focus">False</property>
++ <property name="orientation">vertical</property>
++ <property name="spacing">4</property>
++ <child internal-child="action_area">
++ <object class="GtkButtonBox" id="dialog-action_area">
++ <property name="can_focus">False</property>
++ <property name="layout_style">end</property>
++ <child>
++ <object class="GtkButton" id="cancel">
++ <property name="label">gtk-cancel</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">True</property>
++ <property name="use_stock">True</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">True</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkButton" id="ok">
++ <property name="label">gtk-ok</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">True</property>
++ <property name="use_stock">True</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">True</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">True</property>
++ <property name="pack_type">end</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkBox" id="hbox">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="spacing">10</property>
++ <child>
++ <object class="GtkAlignment" id="alignment1">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="xalign">1</property>
++ <property name="yalign">0</property>
++ <property name="yscale">0</property>
++ <child>
++ <object class="GtkButton" id="icon-button">
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">True</property>
++ <child>
++ <object class="GtkImage" id="icon-image">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="pixel_size">64</property>
++ <property name="icon_name">gnome-panel-launcher</property>
++ </object>
++ </child>
++ </object>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">True</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkGrid" id="grid1">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="row_spacing">6</property>
++ <property name="column_spacing">10</property>
++ <child>
++ <object class="GtkLabel" id="label2">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="xalign">1</property>
++ <property name="label" translatable="yes">Name:</property>
++ <attributes>
++ <attribute name="weight" value="bold"/>
++ </attributes>
++ </object>
++ <packing>
++ <property name="left_attach">0</property>
++ <property name="top_attach">0</property>
++ <property name="width">1</property>
++ <property name="height">1</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkLabel" id="label3">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="xalign">1</property>
++ <property name="label" translatable="yes">Command:</property>
++ <attributes>
++ <attribute name="weight" value="bold"/>
++ </attributes>
++ </object>
++ <packing>
++ <property name="left_attach">0</property>
++ <property name="top_attach">1</property>
++ <property name="width">1</property>
++ <property name="height">1</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkLabel" id="label4">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="xalign">1</property>
++ <property name="label" translatable="yes">Comment:</property>
++ <attributes>
++ <attribute name="weight" value="bold"/>
++ </attributes>
++ </object>
++ <packing>
++ <property name="left_attach">0</property>
++ <property name="top_attach">2</property>
++ <property name="width">1</property>
++ <property name="height">1</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkEntry" id="name-entry">
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="has_focus">True</property>
++ <property name="invisible_char">●</property>
++ </object>
++ <packing>
++ <property name="left_attach">1</property>
++ <property name="top_attach">0</property>
++ <property name="width">1</property>
++ <property name="height">1</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkBox" id="command-box">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="spacing">10</property>
++ <child>
++ <object class="GtkEntry" id="exec-entry">
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="invisible_char">●</property>
++ </object>
++ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkButton" id="exec-browse">
++ <property name="label" translatable="yes">Browse</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">True</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">True</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ </object>
++ <packing>
++ <property name="left_attach">1</property>
++ <property name="top_attach">1</property>
++ <property name="width">1</property>
++ <property name="height">1</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkEntry" id="comment-entry">
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="invisible_char">●</property>
++ </object>
++ <packing>
++ <property name="left_attach">1</property>
++ <property name="top_attach">2</property>
++ <property name="width">1</property>
++ <property name="height">1</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkCheckButton" id="terminal-check">
++ <property name="label" translatable="yes">Launch in Terminal?</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">False</property>
++ <property name="xalign">0</property>
++ <property name="draw_indicator">True</property>
++ </object>
++ <packing>
++ <property name="left_attach">1</property>
++ <property name="top_attach">3</property>
++ <property name="width">1</property>
++ <property name="height">1</property>
++ </packing>
++ </child>
++ <child>
++ <placeholder/>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
++ <property name="pack_type">end</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ </object>
++ </child>
++ <action-widgets>
++ <action-widget response="-6">cancel</action-widget>
++ <action-widget response="-5">ok</action-widget>
++ </action-widgets>
++ </object>
++</interface>
+\ No newline at end of file
diff --git a/gnome-extra/cinnamon/files/remove_GC.patch b/gnome-extra/cinnamon/files/remove_GC.patch
new file mode 100644
index 000000000000..7bd8e45a6a9a
--- /dev/null
+++ b/gnome-extra/cinnamon/files/remove_GC.patch
@@ -0,0 +1,124 @@
+--- a/src/cinnamon-global.c
++++ b/src/cinnamon-global.c
+@@ -1399,35 +1399,6 @@ cinnamon_global_reexec_self (CinnamonGlo
+ g_ptr_array_free (arr, TRUE);
+ }
+
+-/**
+- * cinnamon_global_gc:
+- * @global: A #CinnamonGlobal
+- *
+- * Start a garbage collection process. For more information, see
+- * https://developer.mozilla.org/En/JS_GC
+- */
+-void
+-cinnamon_global_gc (CinnamonGlobal *global)
+-{
+- JSContext *context = gjs_context_get_native_context (global->js_context);
+-
+- JS_GC (context);
+-}
+-
+-/**
+- * cinnamon_global_maybe_gc:
+- * @global: A #CinnamonGlobal
+- *
+- * Start a garbage collection process when it would free up enough memory
+- * to be worth the amount of time it would take
+- * https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_MaybeGC
+- */
+-void
+-cinnamon_global_maybe_gc (CinnamonGlobal *global)
+-{
+- gjs_context_maybe_gc (global->js_context);
+-}
+-
+ static void
+ cinnamon_global_on_gc (GjsContext *context,
+ CinnamonGlobal *global)
+@@ -1768,13 +1768,6 @@ run_leisure_functions (gpointer data)
+ if (global->work_count > 0)
+ return FALSE;
+
+- /* Previously we called gjs_maybe_gc(). However, it simply doesn't
+- * trigger often enough. Garbage collection is very fast here, so
+- * let's just aggressively GC. This will help avoid both heap
+- * fragmentation, and the GC kicking in when we don't want it to.
+- */
+- gjs_context_gc (global->js_context);
+-
+ /* No leisure closures, so we are done */
+ if (global->leisure_closures == NULL)
+ return FALSE;
+--- a/src/cinnamon-global.h
++++ b/src/cinnamon-global.h
+@@ -88,10 +88,6 @@ void cinnamon_global_set_pointer
+ int y);
+
+
+-/* JavaScript utilities */
+-void cinnamon_global_gc (CinnamonGlobal *global);
+-void cinnamon_global_maybe_gc (CinnamonGlobal *global);
+-
+ typedef struct {
+ guint glibc_uordblks;
+
+
+
+--- a/js/perf/core.js
++++ b/js/perf/core.js
+@@ -1,5 +1,7 @@
+ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+
++const System = imports.system;
++
+ const Main = imports.ui.main;
+ const Scripting = imports.ui.scripting;
+
+@@ -99,7 +101,7 @@ function run() {
+ Main.overview.hide();
+ yield Scripting.waitLeisure();
+
+- global.gc();
++ System.gc();
+ yield Scripting.sleep(1000);
+ Scripting.collectStatistics();
+ Scripting.scriptEvent('afterShowHide');
+--- a/js/ui/lookingGlass.js
++++ b/js/ui/lookingGlass.js
+@@ -11,6 +11,7 @@ const St = imports.gi.St;
+ const Cinnamon = imports.gi.Cinnamon;
+ const Signals = imports.signals;
+ const Lang = imports.lang;
++const System = imports.system;
+
+ const History = imports.misc.history;
+ const Extension = imports.ui.extension;
+@@ -680,7 +681,7 @@ Memory.prototype = {
+
+ this._gcbutton = new St.Button({ label: 'Full GC',
+ style_class: 'lg-obj-inspector-button' });
+- this._gcbutton.connect('clicked', Lang.bind(this, function () { global.gc(); this._renderText(); }));
++ this._gcbutton.connect('clicked', Lang.bind(this, function () { System.gc(); this._renderText(); }));
+ this.actor.add(this._gcbutton, { x_align: St.Align.START,
+ x_fill: false });
+
+--- a/js/ui/lookingGlassDBus.js
++++ b/js/ui/lookingGlassDBus.js
+@@ -1,5 +1,7 @@
+ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+
++const System = imports.system;
++
+ const Gio = imports.gi.Gio;
+ const Main = imports.ui.main;
+ const Extension = imports.ui.extension;
+@@ -99,7 +101,7 @@ CinnamonLookingGlass.prototype = {
+ },
+
+ FullGc: function() {
+- global.gc();
++ System.gc();
+ },
+
+ Inspect: function(path) {
diff --git a/gnome-extra/cinnamon/files/screensaver.patch b/gnome-extra/cinnamon/files/screensaver.patch
new file mode 100644
index 000000000000..1ffb916b9786
--- /dev/null
+++ b/gnome-extra/cinnamon/files/screensaver.patch
@@ -0,0 +1,36 @@
+--- a/files/usr/lib/cinnamon-screensaver-lock-dialog/cinnamon-screensaver-lock-dialog.py
++++ b/files/usr/lib/cinnamon-screensaver-lock-dialog/cinnamon-screensaver-lock-dialog.py
+@@ -57,9 +57,9 @@ class MainWindow:
+ def lock_screen(self, data):
+ message = self.entry.get_text()
+ if (message != ""):
+- os.system("cinnamon-screensaver-command --lock --away-message \"%s\" &" % self.entry.get_text())
++ os.system("gnome-screensaver-command --lock --away-message \"%s\" &" % self.entry.get_text())
+ else:
+- os.system("cinnamon-screensaver-command --lock &")
++ os.system("gnome-screensaver-command --lock &")
+ gtk.main_quit()
+
+ if __name__ == "__main__":
+--- a/files/usr/lib/cinnamon-settings/modules/cs_screensaver.py
++++ b/files/usr/lib/cinnamon-settings/modules/cs_screensaver.py
+@@ -5,15 +5,15 @@ from SettingsWidgets import *
+
+ class Module:
+ def __init__(self, content_box):
+- keywords = _("screensaver, brightness, lock, password, away, message")
++ keywords = _("screensaver, brightness, lock, password, user, switching")
+ advanced = False
+ sidePage = SidePage(_("Screensaver & Lock Settings"), "screensaver.svg", keywords, advanced, content_box)
+ self.sidePage = sidePage
+ self.name = "screensaver"
+ self.category = "prefs"
+- if os.path.exists("/usr/bin/cinnamon-screensaver-command"):
+- sidePage.add_widget(GSettingsCheckButton(_("Ask for an away message when locking the screen from the menu"), "org.cinnamon.screensaver", "ask-for-away-message", None))
+- sidePage.add_widget(GSettingsEntry(_("Default away message"), "org.cinnamon.screensaver", "default-message", None))
++ if os.path.exists("/usr/bin/gnome-screensaver-command"):
++ self.sidePage.add_widget(GSettingsCheckButton(_("Ask for password when unlocking"), "org.gnome.desktop.screensaver", "lock-enabled", None))
++ self.sidePage.add_widget(GSettingsCheckButton(_("Enable user switching"), "org.gnome.desktop.screensaver", "user-switch-enabled", None))
+
+ widget = content_box.c_manager.get_c_widget("screen")
+ if widget is not None: