diff options
author | BlackNoxis <steven.darklight@gmail.com> | 2014-02-15 23:46:38 +0200 |
---|---|---|
committer | BlackNoxis <steven.darklight@gmail.com> | 2014-02-15 23:46:38 +0200 |
commit | 539ab2c329ef87cb855c5965a4e3995af9b1cad3 (patch) | |
tree | eb48abd2bb1152d7a5a6e8e048d20f76b0057c9e /gnome-extra/cinnamon | |
parent | bf9f773fb3fcefed199cd8af38b65f77b347c80c (diff) |
Added gnome already splitted ebuilds. will split later if needed to improve deps heaven
Diffstat (limited to 'gnome-extra/cinnamon')
19 files changed, 1821 insertions, 0 deletions
diff --git a/gnome-extra/cinnamon/Manifest b/gnome-extra/cinnamon/Manifest new file mode 100644 index 00000000..940413dc --- /dev/null +++ b/gnome-extra/cinnamon/Manifest @@ -0,0 +1,2 @@ +DIST cinnamon-2.0.12.tar.gz 2605863 SHA256 5c0f7142cafae9906d2653f38086f22704fcf021b486a9525b0f62b9a654d07b SHA512 f4e180f48e7c71ef75b86fa385f7c9fb20401541759e76867d4edc89a1bc4ced8fb961729ade2b4ce7c34d0972d103a120df4714cdb24333a07fcc411bf9936e WHIRLPOOL 1e4a4f082f40aeb6eaa6cd54dc983f1ed03b31f22a9f9ac19fd92c18afd378cd9dd4150ea9e6726255c60ebaedb50a5e117ff008196af538fd0a0420c214fd17 +DIST gnome-3.8.patch 138356 SHA256 840cebcefc183076f9e9208421354e5e9cbccec62824c788b17cb564c2d2519a SHA512 1fd95720a6398607330ff445bd55f1f898dac03dda542d7a7246f81127e55793b02a4df4cc8c759a5f6c11dd7e5a6609bf0bfc05266a87e65034eab0f94077f2 WHIRLPOOL 84899979f7a4c1c6f7cb4f3d356e45e3b49f798605e48c768c3f43a90b828b3f1e9051e9e176bc099c9051d8fb4107e7d127cef27dc4797189b7c9479edf9bd5 diff --git a/gnome-extra/cinnamon/cinnamon-2.0.12.ebuild b/gnome-extra/cinnamon/cinnamon-2.0.12.ebuild new file mode 100644 index 00000000..73f3e892 --- /dev/null +++ b/gnome-extra/cinnamon/cinnamon-2.0.12.ebuild @@ -0,0 +1,213 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI="5" +GCONF_DEBUG="no" +GNOME2_LA_PUNT="yes" +PYTHON_COMPAT=( python{2_6,2_7} ) +PYTHON_REQ_USE="xml" + +inherit autotools eutils gnome2 multilib pax-utils python-single-r1 + +DESCRIPTION="A fork of GNOME Shell with layout similar to GNOME 2" +HOMEPAGE="http://cinnamon.linuxmint.com/" + +MY_PV="${PV/_p/-UP}" +MY_P="${PN}-${MY_PV}" + +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" +IUSE="+l10n" +KEYWORDS="~amd64 ~x86" + +COMMON_DEPEND=" + >=dev-libs/glib-2.29.10:2 + >=dev-libs/cjs-1.9.0 + >=dev-libs/gobject-introspection-0.10.1 + x11-libs/gdk-pixbuf:2[introspection] + >=x11-libs/gtk+-3.0.0:3[introspection] + >=media-libs/clutter-1.7.5:1.0[introspection] + app-misc/ca-certificates + >=dev-libs/json-glib-0.13.2 + >=gnome-extra/cinnamon-desktop-2.0.3 + >=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.9.1[introspection] + + dev-libs/dbus-glib + dev-libs/libxml2:2 + x11-libs/pango[introspection] + >=dev-libs/libcroco-0.6.2:0.6 + + gnome-base/gconf:2[introspection] + gnome-base/librsvg + media-libs/libcanberra + media-sound/pulseaudio + + >=x11-libs/startup-notification-0.11 + x11-libs/libX11 + >=x11-libs/libXfixes-5.0 + x11-apps/mesa-progs + + ${PYTHON_DEPS} + + >=net-misc/networkmanager-0.9 + >=net-wireless/cinnamon-bluetooth-3.8.2 +" +RDEPEND="${COMMON_DEPEND} + >=gnome-base/dconf-0.4.1 + >=gnome-base/libgnomekbd-2.91.4[introspection] + sys-power/upower[introspection] + + >=gnome-extra/cinnamon-control-center-2.0.7 + >=gnome-extra/cinnamon-screensaver-2.0.3 + >=gnome-extra/cinnamon-session-2.0.5 + >=gnome-extra/cinnamon-settings-daemon-2.0.7 + + >=sys-apps/accountsservice-0.6.14[introspection] + + >=app-accessibility/caribou-0.3 + + x11-misc/xdg-utils + + dev-python/dbus-python[${PYTHON_USEDEP}] + dev-python/gconf-python:2 + virtual/python-imaging + dev-python/lxml + + dev-python/pypam + dev-python/pexpect + + x11-themes/gnome-icon-theme-symbolic + + dev-python/pygobject:3[${PYTHON_USEDEP}] + + gnome-extra/nemo +" +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* +" +PDEPEND="l10n? ( >=gnome-extra/cinnamon-translations-2.0.2 )" + +S="${WORKDIR}/Cinnamon-${PV}" + +pkg_setup() { + python-single-r1_pkg_setup +} + +src_prepare() { + epatch "${FILESDIR}/background.patch" + epatch "${FILESDIR}/screensaver.patch" + epatch "${FILESDIR}/remove_GC.patch" + epatch "${FILESDIR}/keyboard_applet-2.patch" + epatch "${FILESDIR}/input_keybindings.patch" + epatch "${FILESDIR}/lspci.patch" + + # Use Sabayon branding + cp "${FILESDIR}"/start-here.png data/theme/menu.png || die "Could not copy image." + + # Gentoo uses /usr/$(get_libdir), not /usr/lib even for python + sed -e "s:/usr/lib/:/usr/$(get_libdir)/:" \ + -e 's:"/usr/lib":"/usr/'"$(get_libdir)"'":' \ + -i files/usr/bin/cinnamon-menu-editor \ + -i files/usr/bin/cinnamon-settings \ + -i files/usr/bin/cinnamon-desktop-editor \ + -i files/usr/bin/cinnamon-json-makepot \ + -i files/usr/bin/cinnamon-screensaver-lock-dialog \ + -i files/usr/bin/cinnamon-settings-users \ + -i files/usr/bin/cinnamon-looking-glass \ + -i files/usr/lib/cinnamon-menu-editor/cme/MainWindow.py \ + -i files/usr/lib/cinnamon-menu-editor/cme/config.py \ + -i files/usr/lib/cinnamon-settings/modules/cs_backgrounds.py \ + -i files/usr/lib/cinnamon-settings/modules/cs_info.py \ + -i files/usr/lib/cinnamon-settings/data/spices/applet-detail.html \ + -i files/usr/lib/cinnamon-settings/cinnamon-settings.py \ + -i files/usr/lib/cinnamon-settings/bin/XletSettings.py \ + -i files/usr/lib/cinnamon-settings/bin/Spices.py \ + -i files/usr/lib/cinnamon-settings/bin/ExtensionCore.py \ + -i files/usr/lib/cinnamon-settings/bin/capi.py \ + -i files/usr/lib/cinnamon-desktop-editor/cinnamon-desktop-editor.py \ + -i files/usr/lib/cinnamon-screensaver-lock-dialog/cinnamon-screensaver-lock-dialog.py \ + -i files/usr/lib/cinnamon-settings-users/cinnamon-settings-users.py \ + || die "sed 2 failed" + if [[ "$(get_libdir)" != lib ]]; then + mv files/usr/lib "files/usr/$(get_libdir)" || die "mv failed" + fi + + eautoreconf + gnome2_src_prepare +} + +src_configure() { + # Don't error out on warnings + gnome2_src_configure \ + --disable-jhbuild-wrapper-script \ + --with-ca-certificates="${EPREFIX}/etc/ssl/certs/ca-certificates.crt" \ + BROWSER_PLUGIN_DIR="${EPREFIX}/usr/$(get_libdir)/nsbrowser/plugins" +} + +src_install() { + gnome2_src_install + python_optimize "${ED}usr/$(get_libdir)/cinnamon-"{settings,menu-editor} + # Fix broken shebangs + sed -e "s%#!.*python%#!${PYTHON}%" \ + -i "${ED}usr/bin/cinnamon-"{launcher,menu-editor,settings} \ + -i "${ED}usr/$(get_libdir)/cinnamon-settings/cinnamon-settings.py" || die + + 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" + + # Avoid collisions with cinnamon-screensaver, upstream bug + rm -f "${ED}usr/share/applications/cinnamon-screensaver.desktop" + + # Doesn't exist on Gentoo, causing this to be a dead symlink + rm -f "${ED}etc/xdg/menus/cinnamon-applications-merged" || die +} + +pkg_postinst() { + gnome2_pkg_postinst + + if ! has_version '>=media-libs/gst-plugins-good-0.10.23:0.10' || \ + ! has_version 'media-plugins/gst-plugins-vp8:0.10'; then + ewarn "To make use of Cinnamon's built-in screen recording utility," + ewarn "you need to either install >=media-libs/gst-plugins-good-0.10.23:0.10" + ewarn "and media-plugins/gst-plugins-vp8:0.10, or use dconf-editor to change" + ewarn "org.cinnamon.recorder/pipeline to what you want to use." + fi + + if ! has_version ">=x11-base/xorg-server-1.11"; then + ewarn "If you use multiple screens, it is highly recommended that you" + ewarn "upgrade to >=x11-base/xorg-server-1.11 to be able to make use of" + ewarn "pointer barriers which will make it easier to use hot corners." + fi + + 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 switch to" + ewarn "open-source drivers." + fi + + if has_version "media-libs/mesa[video_cards_radeon]"; then + elog "Cinnamon is unstable under classic-mode r300/r600 mesa drivers." + elog "Make sure that gallium architecture for r300 and r600 drivers is" + elog "selected using 'eselect mesa'." + if ! has_version "media-libs/mesa[gallium]"; then + ewarn "You will need to emerge media-libs/mesa with USE=gallium." + fi + fi +} diff --git a/gnome-extra/cinnamon/files/background.patch b/gnome-extra/cinnamon/files/background.patch new file mode 100644 index 00000000..ccfdce4c --- /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 00000000..0e632c48 --- /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.6.1-automagic-gnome-bluetooth.patch b/gnome-extra/cinnamon/files/cinnamon-1.6.1-automagic-gnome-bluetooth.patch new file mode 100644 index 00000000..9a8f5ab4 --- /dev/null +++ b/gnome-extra/cinnamon/files/cinnamon-1.6.1-automagic-gnome-bluetooth.patch @@ -0,0 +1,44 @@ +From ee11a71f55eb0860fb61f5c250792221387f09bf Mon Sep 17 00:00:00 2001 +From: root <admin@catmur.co.uk> +Date: Sun, 8 Jan 2012 13:55:05 +0000 +Subject: [PATCH] Fix automagic gnome-bluetooth dependency + +https://bugs.gentoo.org/show_bug.cgi?id=398145 + +Ed Catmur 2012-01-08 13:46:22 UTC +libgnome-bluetooth-applet is a private library so they shouldn't be linking +against it anyway. I tried to work out how to tell libtool to add it to rpath +but got totally lost. + +I'll see if I can work out how to fix the automagic gnome-bluetooth dependency +so I can at least merge USE=-bluetooth. +--- + configure.ac | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 69728ed..58c35f9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -113,6 +113,8 @@ PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0) + PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 0.1.7) + + AC_MSG_CHECKING([for bluetooth support]) ++AC_ARG_WITH([bluetooth], AS_HELP_STRING([--without-bluetooth], [Build without gnome-bluetooth library (default: auto)])) ++AS_IF([test "x$with_bluetooth" != "xno"], [ + PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.1.0], + [BLUETOOTH_DIR=`$PKG_CONFIG --variable=applet_libdir gnome-bluetooth-1.0` + BLUETOOTH_LIBS=`$PKG_CONFIG --variable=applet_libs gnome-bluetooth-1.0` +@@ -125,6 +127,9 @@ PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.1.0], + [AC_DEFINE([HAVE_BLUETOOTH],[0]) + AC_SUBST([HAVE_BLUETOOTH],[0]) + AC_MSG_RESULT([no])]) ++], [AC_DEFINE([HAVE_BLUETOOTH],[0]) ++ AC_SUBST([HAVE_BLUETOOTH],[0]) ++ AC_MSG_RESULT([no])]) + + MUFFIN_GIR_DIR=`$PKG_CONFIG --variable=girdir libmuffin` + MUFFIN_TYPELIB_DIR=`$PKG_CONFIG --variable=typelibdir libmuffin` +-- +1.7.12 + 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 00000000..87e37680 --- /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-1.8.8.1-optional-networkmanager.patch b/gnome-extra/cinnamon/files/cinnamon-1.8.8.1-optional-networkmanager.patch new file mode 100644 index 00000000..4acdb906 --- /dev/null +++ b/gnome-extra/cinnamon/files/cinnamon-1.8.8.1-optional-networkmanager.patch @@ -0,0 +1,145 @@ +--- a/configure.ac ++++ b/configure.ac +@@ -83,8 +83,40 @@ + gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION + libcanberra + polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes +- libnm-glib libnm-util gnome-keyring-1 + gnome-desktop-3.0 >= GNOME_DESKTOP_MIN_VERSION) ++ ++########################## ++# Check for NetworkManager ++########################## ++NM_MIN_VERSION=0.9 ++AC_ARG_ENABLE(networkmanager, ++ AS_HELP_STRING([--disable-networkmanager], ++ [disable NetworkManager support @<:@default=auto@:>@]),, ++ [enable_networkmanager=auto]) ++ ++if test "x$enable_networkmanager" != "xno"; then ++ PKG_CHECK_MODULES(NETWORKMANAGER, ++ [libnm-glib libnm-util gnome-keyring-1], ++ [have_networkmanager=yes], ++ [have_networkmanager=no]) ++ ++ CINNAMON_CFLAGS="$CINNAMON_CFLAGS $NETWORKMANAGER_CFLAGS" ++ CINNAMON_LIBS="$CINNAMON_LIBS $NETWORKMANAGER_LIBS" ++else ++ have_networkmanager="no (disabled)" ++fi ++ ++if test "x$have_networkmanager" = "xyes"; then ++ AC_DEFINE(HAVE_NETWORKMANAGER, [1], [Define if we have NetworkManager]) ++ AC_SUBST([HAVE_NETWORKMANAGER], [1]) ++else ++ if test "x$enable_networkmanager" = "xyes"; then ++ AC_MSG_ERROR([Couldn't find NetworkManager.]) ++ fi ++ AC_SUBST([HAVE_NETWORKMANAGER], [0]) ++fi ++ ++AM_CONDITIONAL(HAVE_NETWORKMANAGER, test "$have_networkmanager" = "yes") + + PKG_CHECK_MODULES(CINNAMON_PERF_HELPER, gtk+-3.0 gio-2.0) + +@@ -242,3 +274,15 @@ + files/Makefile + ]) + AC_OUTPUT ++ ++echo " ++Build configuration: ++ ++ Prefix: ${prefix} ++ Source code location: ${srcdir} ++ Compiler: ${CC} ++ Compiler Warnings: $enable_compile_warnings ++ ++ Support for NetworkManager: $have_networkmanager ++ Support for GStreamer recording: $build_recorder ++" +--- a/js/misc/config.js.in ++++ b/js/misc/config.js.in +@@ -8,5 +8,7 @@ + const GJS_VERSION = '@GJS_VERSION@'; + /* 1 if gnome-bluetooth is available, 0 otherwise */ + const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@; ++/* 1 if networkmanager is available, 0 otherwise */ ++const HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@; + /* The system TLS CA list */ + const CINNAMON_SYSTEM_CA_FILE = '@CINNAMON_SYSTEM_CA_FILE@'; +--- a/js/ui/main.js ++++ b/js/ui/main.js +@@ -57,6 +57,7 @@ + const AppletManager = imports.ui.appletManager; + const AutomountManager = imports.ui.automountManager; + const AutorunManager = imports.ui.autorunManager; ++const Config = imports.misc.config; + const DeskletManager = imports.ui.deskletManager; + const EndSessionDialog = imports.ui.endSessionDialog; + const PolkitAuthenticationAgent = imports.ui.polkitAuthenticationAgent; +@@ -70,7 +71,7 @@ + const RunDialog = imports.ui.runDialog; + const Layout = imports.ui.layout; + const LookingGlass = imports.ui.lookingGlass; +-const NetworkAgent = imports.ui.networkAgent; ++const NetworkAgent = Config.HAVE_NETWORKMANAGER ? imports.ui.networkAgent : null; + const NotificationDaemon = imports.ui.notificationDaemon; + const WindowAttentionHandler = imports.ui.windowAttentionHandler; + const Scripting = imports.ui.scripting; +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -111,9 +111,7 @@ + cinnamon-generic-container.h \ + cinnamon-gtk-embed.h \ + cinnamon-global.h \ +- cinnamon-mobile-providers.h \ + cinnamon-mount-operation.h \ +- cinnamon-network-agent.h \ + cinnamon-perf-log.h \ + cinnamon-screenshot.h \ + cinnamon-screen-grabber.h \ +@@ -125,6 +123,10 @@ + cinnamon-window-tracker.h \ + cinnamon-wm.h \ + cinnamon-xfixes-cursor.h ++ ++if HAVE_NETWORKMANAGER ++cinnamon_public_headers_h += cinnamon-mobile-providers.h cinnamon-network-agent.h ++endif + + libcinnamon_la_SOURCES = \ + $(cinnamon_built_sources) \ +@@ -149,9 +151,7 @@ + cinnamon-generic-container.c \ + cinnamon-gtk-embed.c \ + cinnamon-global.c \ +- cinnamon-mobile-providers.c \ + cinnamon-mount-operation.c \ +- cinnamon-network-agent.c \ + cinnamon-perf-log.c \ + cinnamon-polkit-authentication-agent.h \ + cinnamon-polkit-authentication-agent.c \ +@@ -166,6 +166,10 @@ + cinnamon-wm.c \ + cinnamon-xfixes-cursor.c + ++if HAVE_NETWORKMANAGER ++libcinnamon_la_SOURCES += cinnamon-mobile-providers.c cinnamon-network-agent.c ++endif ++ + libcinnamon_la_gir_sources = \ + $(filter-out %-private.h $(cinnamon_recorder_non_gir_sources), $(cinnamon_public_headers_h) $(libcinnamon_la_SOURCES)) + +@@ -277,7 +281,10 @@ + libcinnamon_la_CPPFLAGS = $(cinnamon_cflags) + + Cinnamon-0.1.gir: libcinnamon.la St-1.0.gir +-Cinnamon_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-Muffin.0 Soup-2.4 GMenu-3.0 NetworkManager-1.0 NMClient-1.0 ++Cinnamon_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-Muffin.0 Soup-2.4 GMenu-3.0 ++if HAVE_NETWORKMANAGER ++Cinnamon_0_1_gir_INCLUDES += NetworkManager-1.0 NMClient-1.0 ++endif + Cinnamon_0_1_gir_CFLAGS = $(libcinnamon_la_CPPFLAGS) -I $(srcdir) + Cinnamon_0_1_gir_LIBS = libcinnamon.la + Cinnamon_0_1_gir_FILES = $(libcinnamon_la_gir_sources) diff --git a/gnome-extra/cinnamon/files/cinnamon-screensaver.desktop b/gnome-extra/cinnamon/files/cinnamon-screensaver.desktop new file mode 100644 index 00000000..ddc96869 --- /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 00000000..aed9557b --- /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 00000000..981b1c1a --- /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 00000000..85f51238 --- /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/input_keybindings.patch b/gnome-extra/cinnamon/files/input_keybindings.patch new file mode 100644 index 00000000..2e7a4cd6 --- /dev/null +++ b/gnome-extra/cinnamon/files/input_keybindings.patch @@ -0,0 +1,11 @@ +--- a/files/usr/lib/cinnamon-settings/modules/cs_keyboard.py ++++ b/files/usr/lib/cinnamon-settings/modules/cs_keyboard.py +@@ -119,6 +119,8 @@ KEYBINDINGS = [ + [_("Log out"), MEDIA_KEYS_SCHEMA, "logout", False, "system"], + [_("Lock screen"), MEDIA_KEYS_SCHEMA, "screensaver", False, "system"], + [_("Toggle recording desktop (must restart Cinnamon)"), MUFFIN_KEYBINDINGS_SCHEMA, "toggle-recording", True, "system"], ++ [_("Switch to next source"), MEDIA_KEYS_SCHEMA, "switch-input-source", False, "system"], ++ [_("Switch to previous source"), MEDIA_KEYS_SCHEMA, "switch-input-source-backward", False, "system"], + + # Launchers + [_("Launch help browser"), MEDIA_KEYS_SCHEMA, "help", False, "launchers"], diff --git a/gnome-extra/cinnamon/files/keyboard_applet-2.patch b/gnome-extra/cinnamon/files/keyboard_applet-2.patch new file mode 100644 index 00000000..29ea489c --- /dev/null +++ b/gnome-extra/cinnamon/files/keyboard_applet-2.patch @@ -0,0 +1,133 @@ +--- 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 CinnamonDesktop = imports.gi.CinnamonDesktop; + const Main = imports.ui.main; + const PopupMenu = imports.ui.popupMenu; + const Util = imports.misc.util; +@@ -16,11 +17,12 @@ function LayoutMenuItem() { + 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); +@@ -29,7 +31,7 @@ LayoutMenuItem.prototype = { + + 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)); + } + }; + +@@ -62,18 +64,18 @@ MyApplet.prototype = { + this._syncConfig, + null); + +- 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 CinnamonDesktop.XkbInfo(); ++ this._ipsettings = new Gio.Settings({ schema: 'org.cinnamon.desktop.input-sources' }); ++ this._ipsettings.connect('changed::sources', Lang.bind(this, this._syncConfig)); ++ this._ipsettings.connect('changed::current', Lang.bind(this, this._syncGroup)); + +- 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(); +@@ -113,8 +115,8 @@ MyApplet.prototype = { + }, + + _syncConfig: function() { +- 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(); +@@ -127,25 +129,30 @@ MyApplet.prototype = { + 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); + } + +@@ -153,17 +160,17 @@ MyApplet.prototype = { + }, + + _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/keyboard_applet.patch b/gnome-extra/cinnamon/files/keyboard_applet.patch new file mode 100644 index 00000000..6b369408 --- /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/lspci.patch b/gnome-extra/cinnamon/files/lspci.patch new file mode 100644 index 00000000..d34e8b4c --- /dev/null +++ b/gnome-extra/cinnamon/files/lspci.patch @@ -0,0 +1,17 @@ +--- a/files/usr/lib/cinnamon-settings/modules/cs_info.py ++++ b/files/usr/lib/cinnamon-settings/modules/cs_info.py +@@ -31,12 +31,12 @@ def getProcessOut(command): + def getGraphicsInfos(): + cards = {} + count = 0 +- for card in getProcessOut(("lspci")): ++ for card in getProcessOut(("/usr/sbin/lspci")): + if not "VGA" in card: + continue + cardId = card.split()[0] + cardName = None +- 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()) + diff --git a/gnome-extra/cinnamon/files/menu_editor.patch b/gnome-extra/cinnamon/files/menu_editor.patch new file mode 100644 index 00000000..e18ee7f4 --- /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 00000000..7bd8e45a --- /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 00000000..1ffb916b --- /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: diff --git a/gnome-extra/cinnamon/files/start-here.png b/gnome-extra/cinnamon/files/start-here.png Binary files differnew file mode 100644 index 00000000..0a7a28ab --- /dev/null +++ b/gnome-extra/cinnamon/files/start-here.png |