diff options
Diffstat (limited to 'gnome-extra')
-rw-r--r-- | gnome-extra/Manifest.gz | bin | 11251 -> 11253 bytes | |||
-rw-r--r-- | gnome-extra/cinnamon-session/Manifest | 3 | ||||
-rw-r--r-- | gnome-extra/cinnamon-session/cinnamon-session-6.0.4.ebuild | 94 | ||||
-rw-r--r-- | gnome-extra/cinnamon-session/files/0001-cs-presence.c-Fix-CsmPresence-idle-handling.patch | 303 |
4 files changed, 400 insertions, 0 deletions
diff --git a/gnome-extra/Manifest.gz b/gnome-extra/Manifest.gz Binary files differindex a61fbfe247ea..5ba9ff0f97dc 100644 --- a/gnome-extra/Manifest.gz +++ b/gnome-extra/Manifest.gz diff --git a/gnome-extra/cinnamon-session/Manifest b/gnome-extra/cinnamon-session/Manifest index 330868099ae3..f887e95605c2 100644 --- a/gnome-extra/cinnamon-session/Manifest +++ b/gnome-extra/cinnamon-session/Manifest @@ -1,6 +1,9 @@ +AUX 0001-cs-presence.c-Fix-CsmPresence-idle-handling.patch 12035 BLAKE2B 7d0980553aa07cf310a1916743194742c906d8469ee0dc497b84332136c1674c243f39ae27ef988da32f1a9bc902275388325e4832f7c8afb255d4c8f469f4f5 SHA512 1c9afb2efabf45f3df61c6f8ad70a2bceb3eaa2d188cae0d7acf14693da9efc66e686691b4e1f9addf1b1f1b30ec640548e6faa4f3c3b55d2ce4c35c55deeb25 AUX cinnamon-session-6.0.0-fix-optional-systemd.patch 605 BLAKE2B 29057363842f23a5b37583ab5d2cf312fbf31f9ef78b66e9b70980051771cc701f9e5b811d03d3534046c2cb76fda1751fc11b36cbcf90685b6fc05dd3773158 SHA512 7b89ef4d9915d50377c0ad10a1296a6bd5a11dbb2f30b2e2531aa817335776d08823b4a6401c0d4638f0d89674d91c3165aafa0b217dd488e7127e8fbc6ba9c6 DIST cinnamon-session-5.8.1.tar.gz 199477 BLAKE2B 9371089e3caa4765498c2fa3ab9e5de03d47a67bced8a1a14fec33d7aea3372950b1e8f7f88be825697c8a2899dc0812f6ec7c5fb008f4bf2f4b5bdc343c01cc SHA512 8a88834a639c74b227f0d666fa2bcb4c3f73859ff8de84a440e84af3f3343c41c47a896ccf0dc09cc7114b7c921e2f670aec7846c57ec92b8da3333be7955309 DIST cinnamon-session-6.0.2.tar.gz 165188 BLAKE2B 077552f147a61d4615db8091411314560a12b5c40420381280e41a35395119ece15602f9c74bac3409b49d4363285a386555a787ced10dee5ca757d254ccb7ec SHA512 80e1c5b8654aad805424351c1a49cc3f68e52ddcf0606180fd5ee006607829f4f451c6bdd9be7e022a258041e8a6967faf0b16b8536a0a8982dcc805e35fd01a +DIST cinnamon-session-6.0.4.tar.gz 165520 BLAKE2B fa608de433a4d47db102b1f11c716da8afeabd5772b7e957449297629e39bc215124acd2f0f94afe91763590ab92b06a3bce8dd1a6bad3997b9496b4114a36fa SHA512 cd8ac8579f9311f5234dad17fb32d40a1c58da2292734e58c4832d94a8b0687e4909f5886c2db0dab1e0c396f12c3495a8d966e76373ac26f3bd9795efcd1f1f EBUILD cinnamon-session-5.8.1.ebuild 1420 BLAKE2B 45ec08fd6e7e8772785f60316986776e407293cd6e8113d0d6d46e5bd3124268c0ce670bbe93bef8aa01314d122bf2f71cc69e951124d6d7cef986f515b0aa34 SHA512 45daba06db4328d5fb0a1b80e16c4abdf649de6c48a29ded174bfa8a4fb8e7cbd8b6525612f4b0ab458d5c11ae34ede09838c464daf79d96366ab9d5b2379da8 EBUILD cinnamon-session-6.0.2.ebuild 1836 BLAKE2B a7154ca0b88e73a1e24dba105a19ef358e1ee3a67bee8a5336a466f7d510ae6a0f1aef428d65ea81c280cb219b487ca90c982d1ae607006ec68f25e01d995959 SHA512 97b42e560e08dd4b59586378ffb9aefb5183114059ec8a5074d6cb3ec2dbde84d92603ee53cfa84ff00382a34c174947b2b1e027a5b005079965b779c6967f54 +EBUILD cinnamon-session-6.0.4.ebuild 1929 BLAKE2B 571d76a19c57457c9787d6c92181743bc5ba3b36e0318909bd7944c51824c1887d819fc0dd5551528c23ea94747338b7a337909a02267a74693d771096213de6 SHA512 33616d893f8c4a302a78d7cde56c0299ce7d02071ee23015650bfc55c6b36243e332ffbe45bfa336324bc088b94c885fa825ebd8c7c5b1ed6330fcd05f68d1c5 MISC metadata.xml 496 BLAKE2B 3b3170a447d7818cdd93b3183feee36751832a07da741b16dfdfe029e09733f3ba94815312e6444b3421dd7bc3df9b4ca2f1c1ac2a5d83ae3881b1ab7cf809c0 SHA512 65d223bf44f83d8d2bda72791b362c4302ec813e9090331cf5ddc97e10ed610c1a91c6d467ff72d7e1430e7d70dcfa09f9c8e35c50a86130236798c80e19a2f2 diff --git a/gnome-extra/cinnamon-session/cinnamon-session-6.0.4.ebuild b/gnome-extra/cinnamon-session/cinnamon-session-6.0.4.ebuild new file mode 100644 index 000000000000..8da2d3ffc0b8 --- /dev/null +++ b/gnome-extra/cinnamon-session/cinnamon-session-6.0.4.ebuild @@ -0,0 +1,94 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +PYTHON_COMPAT=( python3_{10..12} ) + +inherit meson gnome2-utils python-single-r1 xdg-utils + +DESCRIPTION="Cinnamon session manager" +HOMEPAGE="https://projects.linuxmint.com/cinnamon/ https://github.com/linuxmint/cinnamon-session" +SRC_URI="https://github.com/linuxmint/cinnamon-session/archive/${PV}.tar.gz -> ${P}.tar.gz" + +LICENSE="GPL-2+ LGPL-2+" +SLOT="0" +KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~riscv ~x86" +IUSE="systemd" +REQUIRED_USE="${PYTHON_REQUIRED_USE}" + +COMMON_DEPEND=" + >=dev-libs/glib-2.37.3:2 + >=gnome-extra/cinnamon-desktop-6.0:0= + media-libs/libcanberra[pulseaudio] + virtual/opengl + x11-libs/cairo + x11-libs/gdk-pixbuf:2 + >=x11-libs/gtk+-3:3[introspection] + x11-libs/libICE + x11-libs/libSM + x11-libs/libX11 + x11-libs/libXau + x11-libs/libXcomposite + x11-libs/libXext + x11-libs/libXrender + x11-libs/libXtst + x11-libs/pango[X] + >=x11-libs/xapp-2.8.1[introspection] + + systemd? ( + >=sys-apps/systemd-183 + ) + !systemd? ( + sys-auth/elogind[policykit] + ) +" +DEPEND=" + ${COMMON_DEPEND} + x11-libs/xtrans +" +RDEPEND=" + ${COMMON_DEPEND} + ${PYTHON_DEPS} + dev-libs/gobject-introspection + $(python_gen_cond_dep ' + dev-python/pygobject:3[${PYTHON_USEDEP}] + dev-python/setproctitle[${PYTHON_USEDEP}] + ') +" +BDEPEND=" + ${PYTHON_DEPS} + dev-util/gdbus-codegen + virtual/pkgconfig +" + +PATCHES=( + # Fix bad systemd include + # https://github.com/linuxmint/cinnamon-session/pull/164 + "${FILESDIR}/${PN}-6.0.0-fix-optional-systemd.patch" + # fix crash on idle + "${FILESDIR}"/0001-cs-presence.c-Fix-CsmPresence-idle-handling.patch +) + +src_prepare() { + default + python_fix_shebang data cinnamon-session-quit +} + +src_configure() { + local emesonargs=( + -Dipv6=true + -Dxtrans=true + ) + meson_src_configure +} + +pkg_postinst() { + xdg_icon_cache_update + gnome2_schemas_update +} + +pkg_postrm() { + xdg_icon_cache_update + gnome2_schemas_update +} diff --git a/gnome-extra/cinnamon-session/files/0001-cs-presence.c-Fix-CsmPresence-idle-handling.patch b/gnome-extra/cinnamon-session/files/0001-cs-presence.c-Fix-CsmPresence-idle-handling.patch new file mode 100644 index 000000000000..01a194f7cb7b --- /dev/null +++ b/gnome-extra/cinnamon-session/files/0001-cs-presence.c-Fix-CsmPresence-idle-handling.patch @@ -0,0 +1,303 @@ +From 55e9291629cc028793e22b738214ecababe65c4b Mon Sep 17 00:00:00 2001 +From: Michael Webster <miketwebster@gmail.com> +Date: Wed, 24 Jan 2024 09:14:01 -0500 +Subject: [PATCH] cs-presence.c: Fix CsmPresence idle handling. + +Idle detection was broken since 5.4, as gnome-idle-monitor (in +libcinnamon-desktop) was looking for the wrong muffin interface +names. + +This file was also adapted incompletely to the new idle-monitor +API. + +requires: +linuxmint/cinnamon-desktop@d0f8c74a7864786cf04 +--- + cinnamon-session/csm-presence.c | 130 +++++++++++++++++++------------- + cinnamon-session/csm-presence.h | 6 -- + 2 files changed, 77 insertions(+), 59 deletions(-) + +diff --git a/cinnamon-session/csm-presence.c b/cinnamon-session/csm-presence.c +index 1fd3d7c..69da703 100644 +--- a/cinnamon-session/csm-presence.c ++++ b/cinnamon-session/csm-presence.c +@@ -64,16 +64,12 @@ struct CsmPresencePrivate + + enum { + PROP_0, +- PROP_STATUS, +- PROP_STATUS_TEXT, + PROP_IDLE_ENABLED, + PROP_IDLE_TIMEOUT, + }; + +- + enum { + STATUS_CHANGED, +- STATUS_TEXT_CHANGED, + LAST_SIGNAL + }; + +@@ -99,6 +95,10 @@ csm_presence_error_quark (void) + return quark_volatile; + } + ++static void idle_became_active_cb (GnomeIdleMonitor *idle_monitor, ++ guint id, ++ gpointer user_data); ++ + static gboolean + csm_presence_set_status_text (CsmPresence *presence, + const char *status_text, +@@ -120,6 +120,8 @@ csm_presence_set_status_text (CsmPresence *presence, + + if (status_text != NULL) { + presence->priv->status_text = g_strdup (status_text); ++ } else { ++ presence->priv->status_text = g_strdup (""); + } + + csm_exported_presence_set_status_text (presence->priv->skeleton, presence->priv->status_text); +@@ -128,11 +130,11 @@ csm_presence_set_status_text (CsmPresence *presence, + return TRUE; + } + +-static gboolean ++static void + csm_presence_set_status (CsmPresence *presence, + guint status) + { +- g_return_val_if_fail (CSM_IS_PRESENCE (presence), FALSE); ++ g_return_if_fail (CSM_IS_PRESENCE (presence)); + + if (status != presence->priv->status) { + presence->priv->status = status; +@@ -140,7 +142,6 @@ csm_presence_set_status (CsmPresence *presence, + csm_exported_presence_emit_status_changed (presence->priv->skeleton, presence->priv->status); + g_signal_emit (presence, signals[STATUS_CHANGED], 0, presence->priv->status); + } +- return TRUE; + } + + static void +@@ -158,6 +159,11 @@ set_session_idle (CsmPresence *presence, + /* save current status */ + presence->priv->saved_status = presence->priv->status; + csm_presence_set_status (presence, CSM_PRESENCE_STATUS_IDLE); ++ ++ gnome_idle_monitor_add_user_active_watch (presence->priv->idle_monitor, ++ idle_became_active_cb, ++ presence, ++ NULL); + } else { + if (presence->priv->status != CSM_PRESENCE_STATUS_IDLE) { + g_debug ("CsmPresence: already not idle, ignoring"); +@@ -171,27 +177,27 @@ set_session_idle (CsmPresence *presence, + } + } + +-static gboolean +-on_idle_timeout (GnomeIdleMonitor *monitor, +- guint id, +- gboolean condition, +- CsmPresence *presence) ++static void ++idle_became_idle_cb (GnomeIdleMonitor *idle_monitor, ++ guint id, ++ gpointer user_data) + { +- gboolean handled; +- +- handled = TRUE; +- set_session_idle (presence, condition); ++ CsmPresence *presence = user_data; ++ set_session_idle (presence, TRUE); ++} + +- return handled; ++static void ++idle_became_active_cb (GnomeIdleMonitor *idle_monitor, ++ guint id, ++ gpointer user_data) ++{ ++ CsmPresence *presence = user_data; ++ set_session_idle (presence, FALSE); + } + + static void + reset_idle_watch (CsmPresence *presence) + { +- if (presence->priv->idle_monitor == NULL) { +- return; +- } +- + if (presence->priv->idle_watch_id > 0) { + g_debug ("CsmPresence: removing idle watch (%i)", presence->priv->idle_watch_id); + gnome_idle_monitor_remove_watch (presence->priv->idle_monitor, +@@ -199,12 +205,11 @@ reset_idle_watch (CsmPresence *presence) + presence->priv->idle_watch_id = 0; + } + +- if (! presence->priv->screensaver_active +- && presence->priv->idle_enabled ++ if (presence->priv->idle_enabled + && presence->priv->idle_timeout > 0) { + presence->priv->idle_watch_id = gnome_idle_monitor_add_idle_watch (presence->priv->idle_monitor, + presence->priv->idle_timeout, +- (GnomeIdleMonitorWatchFunc) on_idle_timeout, ++ idle_became_idle_cb, + presence, + NULL); + g_debug ("CsmPresence: adding idle watch (%i) for %d secs", +@@ -229,11 +234,36 @@ on_screensaver_g_signal (GDBusProxy *proxy, + g_variant_get (parameters, + "(b)", &is_active); + +- g_debug ("screensaver status changed: %d", is_active); ++ if (presence->priv->screensaver_active != is_active) { ++ presence->priv->screensaver_active = is_active; ++ set_session_idle (presence, is_active); ++ } ++} ++ ++static void ++screensaver_get_active_cb (GDBusProxy *screensaver_proxy, ++ GAsyncResult *res, ++ CsmPresence *presence) ++{ ++ g_autoptr(GVariant) data = NULL; ++ g_autoptr(GError) error = NULL; ++ gboolean is_active; + ++ data = g_dbus_proxy_call_finish (screensaver_proxy, res, &error); ++ if (!data) { ++ if (error) { ++ g_warning ("Could not retrieve current screensaver active state: %s", ++ error->message); ++ } else { ++ g_warning ("Could not retrieve current screensaver active state!"); ++ } ++ ++ return; ++ } ++ ++ g_variant_get (data, "(b)", &is_active); + if (presence->priv->screensaver_active != is_active) { + presence->priv->screensaver_active = is_active; +- reset_idle_watch (presence); + set_session_idle (presence, is_active); + } + } +@@ -248,14 +278,25 @@ on_screensaver_name_owner_changed (GDBusProxy *proxy, + + presence = CSM_PRESENCE (user_data); + name_owner = g_dbus_proxy_get_name_owner (proxy); ++ if (name_owner == NULL) { ++ g_debug ("Detected that screensaver has left the bus"); + +- if (name_owner && g_strcmp0 (name_owner, CS_NAME)) { +- g_warning ("Detected that screensaver has appeared on the bus"); +- } else { +- g_warning ("Detected that screensaver has left the bus"); ++ presence->priv->screensaver_active = FALSE; + set_session_idle (presence, FALSE); +- reset_idle_watch (presence); ++ } else { ++ g_debug ("Detected that screensaver has aquired the bus"); ++ ++ g_dbus_proxy_call (presence->priv->screensaver_proxy, ++ "GetActive", ++ NULL, ++ G_DBUS_CALL_FLAGS_NO_AUTO_START, ++ 1000, ++ NULL, ++ (GAsyncReadyCallback) screensaver_get_active_cb, ++ presence); + } ++ ++ g_free (name_owner); + } + + static gboolean +@@ -352,7 +393,8 @@ csm_presence_constructor (GType type, + } + + presence->priv->screensaver_proxy = g_dbus_proxy_new_sync (presence->priv->connection, +- G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, ++ G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | ++ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, + NULL, + CS_NAME, + CS_PATH, +@@ -424,12 +466,6 @@ csm_presence_set_property (GObject *object, + self = CSM_PRESENCE (object); + + switch (prop_id) { +- case PROP_STATUS: +- csm_presence_set_status (self, g_value_get_uint (value)); +- break; +- case PROP_STATUS_TEXT: +- csm_presence_set_status_text (self, g_value_get_string (value), NULL); +- break; + case PROP_IDLE_ENABLED: + csm_presence_set_idle_enabled (self, g_value_get_boolean (value)); + break; +@@ -453,12 +489,6 @@ csm_presence_get_property (GObject *object, + self = CSM_PRESENCE (object); + + switch (prop_id) { +- case PROP_STATUS: +- g_value_set_uint (value, self->priv->status); +- break; +- case PROP_STATUS_TEXT: +- g_value_set_string (value, self->priv->status_text ? self->priv->status_text : ""); +- break; + case PROP_IDLE_ENABLED: + g_value_set_boolean (value, self->priv->idle_enabled); + break; +@@ -482,15 +512,9 @@ csm_presence_finalize (GObject *object) + presence->priv->idle_watch_id = 0; + } + +- if (presence->priv->status_text != NULL) { +- g_free (presence->priv->status_text); +- presence->priv->status_text = NULL; +- } +- +- if (presence->priv->idle_monitor != NULL) { +- g_object_unref (presence->priv->idle_monitor); +- presence->priv->idle_monitor = NULL; +- } ++ g_clear_pointer (&presence->priv->status_text, g_free); ++ g_clear_object (&presence->priv->idle_monitor); ++ g_clear_object (&presence->priv->screensaver_proxy); + + G_OBJECT_CLASS (csm_presence_parent_class)->finalize (object); + } +diff --git a/cinnamon-session/csm-presence.h b/cinnamon-session/csm-presence.h +index 41de5aa..d2713ab 100644 +--- a/cinnamon-session/csm-presence.h ++++ b/cinnamon-session/csm-presence.h +@@ -50,9 +50,6 @@ struct _CsmPresenceClass + + void (* status_changed) (CsmPresence *presence, + guint status); +- void (* status_text_changed) (CsmPresence *presence, +- const char *status_text); +- + }; + + typedef enum { +@@ -69,9 +66,6 @@ typedef enum + } CsmPresenceError; + + #define CSM_PRESENCE_ERROR csm_presence_error_quark () +-GType csm_presence_error_get_type (void); +-#define CSM_PRESENCE_TYPE_ERROR (csm_presence_error_get_type ()) +- + GQuark csm_presence_error_quark (void); + + GType csm_presence_get_type (void) G_GNUC_CONST; +-- +2.44.2 + |