aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Falsi <madpilot@FreeBSD.org>2019-06-06 22:07:17 +0000
committerGuido Falsi <madpilot@FreeBSD.org>2019-06-06 22:07:17 +0000
commit25538aefc101cb67288f17cf8936c9c450511e06 (patch)
tree27062ef69ba94d122623cc032b55b7d68d269e68
parentb5565ad0e7794abf71f00a4177f9f326c91f76ed (diff)
downloadports-25538aefc101cb67288f17cf8936c9c450511e06.tar.gz
ports-25538aefc101cb67288f17cf8936c9c450511e06.zip
MFH: r503583
Import upstreamed patch to fix the Inhibit lock functionality. Also add some required dependencies. PR: 238348 Submitted by: Olivier Duchateau <duchateau.olivier@gmail.com> Approved by: ports-secteam (joneum)
Notes
Notes: svn path=/branches/2019Q2/; revision=503607
-rw-r--r--x11/xfce4-screensaver/Makefile6
-rw-r--r--x11/xfce4-screensaver/files/patch-src_gs-listener-dbus.c161
2 files changed, 165 insertions, 2 deletions
diff --git a/x11/xfce4-screensaver/Makefile b/x11/xfce4-screensaver/Makefile
index 7c1a764b6e33..b6bf3318ba23 100644
--- a/x11/xfce4-screensaver/Makefile
+++ b/x11/xfce4-screensaver/Makefile
@@ -2,6 +2,7 @@
PORTNAME= xfce4-screensaver
PORTVERSION= 0.1.4
+PORTREVISION= 1
CATEGORIES= x11 xfce
MASTER_SITES= XFCE/src/apps/${PORTNAME}/${PORTVERSION:R}
DIST_SUBDIR= xfce4
@@ -18,9 +19,10 @@ LIB_DEPENDS= libdbus-1.so:devel/dbus \
libdbus-glib-1.so:devel/dbus-glib \
libnotify.so:devel/libnotify \
libstartup-notification-1.so:x11/startup-notification \
- libxklavier.so:x11/libxklavier
+ libxklavier.so:x11/libxklavier \
+ libconsolekit.so:sysutils/consolekit2
-USES= gettext-tools gmake gnome pkgconfig tar:bzip2 xfce:gtk3
+USES= gettext-tools gl gmake gnome pkgconfig tar:bzip2 xfce:gtk3
USE_GL= gl
USE_GNOME= cairo gdkpixbuf2 glib20 gtk30 intltool
USE_XFCE= garcon libexo libutil
diff --git a/x11/xfce4-screensaver/files/patch-src_gs-listener-dbus.c b/x11/xfce4-screensaver/files/patch-src_gs-listener-dbus.c
new file mode 100644
index 000000000000..a55e8b2f9b62
--- /dev/null
+++ b/x11/xfce4-screensaver/files/patch-src_gs-listener-dbus.c
@@ -0,0 +1,161 @@
+--- src/gs-listener-dbus.c.orig 2019-03-15 02:23:32 UTC
++++ src/gs-listener-dbus.c
+@@ -74,10 +74,6 @@ static DBusHandlerResult gs_listener_message_handler
+ #define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager"
+ #define CK_SESSION_INTERFACE "org.freedesktop.ConsoleKit.Session"
+
+-#define SESSION_NAME "org.gnome.SessionManager"
+-#define SESSION_PATH "/org/gnome/SessionManager"
+-#define SESSION_INTERFACE "org.gnome.SessionManager"
+-
+ #define TYPE_MISMATCH_ERROR GS_LISTENER_INTERFACE ".TypeMismatch"
+
+ struct GSListenerPrivate {
+@@ -108,7 +104,7 @@ typedef struct {
+ char *reason;
+ char *connection;
+ guint32 cookie;
+- guint32 foreign_cookie;
++ gint32 fd;
+ GTimeVal since;
+ } GSListenerRefEntry;
+
+@@ -604,34 +600,44 @@ listener_ref_entry_check (GSListener *listener,
+ static void
+ add_session_inhibit (GSListener *listener,
+ GSListenerRefEntry *entry) {
+- DBusMessage *message;
+- DBusMessage *reply;
+- DBusMessageIter iter;
+- DBusMessageIter reply_iter;
++ DBusMessage *message, *reply;
++ DBusMessageIter iter, reply_iter;
+ DBusError error;
+- guint xid;
+- guint flags;
++ const gchar *mode = "block";
++ /* it is a colon-separated list of lock types */
++ const gchar *what = "idle";
+
+ g_return_if_fail (listener != NULL);
+
+ dbus_error_init (&error);
+
+- message = dbus_message_new_method_call (SESSION_NAME,
+- SESSION_PATH,
+- SESSION_INTERFACE,
++#if defined(WITH_SYSTEMD)
++ message = dbus_message_new_method_call (SYSTEMD_LOGIND_SERVICE,
++ SYSTEMD_LOGIND_PATH,
++ SYSTEMD_LOGIND_INTERFACE,
+ "Inhibit");
++#elif defined(WITH_CONSOLE_KIT)
++ message = dbus_message_new_method_call (CK_NAME,
++ CK_MANAGER_PATH,
++ CK_MANAGER_INTERFACE,
++ "Inhibit");
++#endif
+ if (message == NULL) {
+ gs_debug ("Couldn't allocate the dbus message");
+ return;
+ }
+
+ dbus_message_iter_init_append (message, &iter);
+- xid = 0;
+- flags = 8;
+- dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &entry->application);
+- dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &xid);
+- dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &entry->reason);
+- dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &flags);
++ /* what parameter */
++ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &what);
++ /* who parameter */
++ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING,
++ &entry->application);
++ /* why parameter */
++ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING,
++ &entry->reason);
++ /* mode parameter */
++ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &mode);
+
+ /* FIXME: use async? */
+ reply = dbus_connection_send_with_reply_and_block (listener->priv->connection,
+@@ -647,54 +653,23 @@ add_session_inhibit (GSListener *listener,
+ }
+
+ dbus_message_iter_init (reply, &reply_iter);
+- dbus_message_iter_get_basic (&reply_iter, &entry->foreign_cookie);
++ if (DBUS_TYPE_UNIX_FD == dbus_message_iter_get_arg_type(&reply_iter))
++ dbus_message_iter_get_basic (&reply_iter, &entry->fd);
+
+ dbus_message_unref (reply);
+ }
+
+ static void
+-remove_session_inhibit (GSListener *listener,
+- GSListenerRefEntry *entry) {
+- DBusMessage *message;
+- DBusMessage *reply;
+- DBusMessageIter iter;
+- DBusError error;
+-
+- g_return_if_fail (listener != NULL);
+-
+- if (entry->foreign_cookie == 0) {
++remove_session_inhibit (GSListenerRefEntry *entry) {
++ if (entry->fd < 0) {
+ gs_debug ("Can't remove inhibitor from session: Session cookie not set");
+ return;
+ }
+
+- dbus_error_init (&error);
+-
+- message = dbus_message_new_method_call (SESSION_NAME,
+- SESSION_PATH,
+- SESSION_INTERFACE,
+- "Uninhibit");
+- if (message == NULL) {
+- gs_debug ("Couldn't allocate the dbus message");
++ if (close(entry->fd) < 0) {
++ gs_debug ("Can't close file descriptor");
+ return;
+ }
+-
+- dbus_message_iter_init_append (message, &iter);
+- dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &entry->foreign_cookie);
+-
+- /* FIXME: use async? */
+- reply = dbus_connection_send_with_reply_and_block (listener->priv->connection,
+- message,
+- -1,
+- &error);
+- dbus_message_unref (message);
+-
+- if (dbus_error_is_set (&error)) {
+- gs_debug ("%s raised:\n %s\n\n", error.name, error.message);
+- dbus_error_free (&error);
+- return;
+- }
+-
+- dbus_message_unref (reply);
+ }
+
+ static void
+@@ -745,7 +720,7 @@ listener_remove_ref_entry (GSListener *listener,
+
+ if (entry_type == REF_ENTRY_TYPE_INHIBIT) {
+ /* remove inhibit from xfce session */
+- remove_session_inhibit (listener, entry);
++ remove_session_inhibit (entry);
+ }
+
+ removed = g_hash_table_remove (hash, &cookie);
+@@ -977,7 +952,7 @@ listener_ref_entry_remove_for_connection (GSListener
+
+ if (entry->entry_type == REF_ENTRY_TYPE_INHIBIT) {
+ /* remove inhibit from xfce session */
+- remove_session_inhibit (listener, entry);
++ remove_session_inhibit (entry);
+ }
+
+ g_hash_table_iter_remove (&iter);