[Goodies-commits] r7155 - in xfce4-power-manager/trunk: . src
Ali Abdallah
aliov at xfce.org
Fri Apr 10 16:00:29 CEST 2009
Author: aliov
Date: 2009-04-10 14:00:29 +0000 (Fri, 10 Apr 2009)
New Revision: 7155
Added:
xfce4-power-manager/trunk/src/xfpm-session.c
xfce4-power-manager/trunk/src/xfpm-session.h
Modified:
xfce4-power-manager/trunk/ChangeLog
xfce4-power-manager/trunk/src/Makefile.am
xfce4-power-manager/trunk/src/xfpm-main.c
xfce4-power-manager/trunk/src/xfpm-manager.c
Log:
Connect to the session using libxfcegui4 and properly shutdown when the session dies
Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog 2009-04-10 11:05:57 UTC (rev 7154)
+++ xfce4-power-manager/trunk/ChangeLog 2009-04-10 14:00:29 UTC (rev 7155)
@@ -1,4 +1,7 @@
+2009-04-10 16:00 Ali aliov at xfce.org
+ * : Connect to the session using libxfcegui4 and properly shutdown when the session dies
+
2009-04-10 12:24 Ali aliov at xfce.org
* : Provide a wake up signal to avoid possible multiple sleep/hibernate request
Modified: xfce4-power-manager/trunk/src/Makefile.am
===================================================================
--- xfce4-power-manager/trunk/src/Makefile.am 2009-04-10 11:05:57 UTC (rev 7154)
+++ xfce4-power-manager/trunk/src/Makefile.am 2009-04-10 14:00:29 UTC (rev 7155)
@@ -15,6 +15,8 @@
xfpm-manager.h \
xfpm-engine.c \
xfpm-engine.h \
+ xfpm-session.c \
+ xfpm-session.h \
xfpm-xfconf.c \
xfpm-xfconf.h \
xfpm-supply.c \
Modified: xfce4-power-manager/trunk/src/xfpm-main.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-main.c 2009-04-10 11:05:57 UTC (rev 7154)
+++ xfce4-power-manager/trunk/src/xfpm-main.c 2009-04-10 14:00:29 UTC (rev 7155)
@@ -41,6 +41,7 @@
#include "xfce-power-manager-dbus-client.h"
#include "xfpm-manager.h"
+#include "xfpm-session.h"
static void
show_version()
@@ -64,6 +65,7 @@
gboolean version = FALSE;
gboolean no_daemon = FALSE;
gboolean reload = FALSE;
+ gchar *client_id = NULL;
xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
@@ -75,6 +77,7 @@
{ "customize", 'c', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &config, N_("Show the configuration dialog"), NULL },
{ "quit", 'q', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &quit, N_("Quit any running xfce power manager"), NULL },
{ "version", 'V', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &version, N_("Version information"), NULL },
+ { "sm-client-id", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &client_id, NULL, NULL },
{ NULL, },
};
@@ -227,14 +230,24 @@
else
{
TRACE("Starting the power manager\n");
+ XfpmSession *session;
+ session = xfpm_session_new ();
+
+ if ( client_id != NULL )
+ xfpm_session_set_client_id (session, client_id);
+
if ( no_daemon == FALSE && daemon(0,0) )
{
g_critical ("Could not daemonize");
}
+
XfpmManager *manager;
manager = xfpm_manager_new(bus);
xfpm_manager_start(manager);
gtk_main();
+
+ g_object_unref (session);
}
+
return EXIT_SUCCESS;
}
Modified: xfce4-power-manager/trunk/src/xfpm-manager.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-manager.c 2009-04-10 11:05:57 UTC (rev 7154)
+++ xfce4-power-manager/trunk/src/xfpm-manager.c 2009-04-10 14:00:29 UTC (rev 7155)
@@ -44,6 +44,7 @@
#include "xfpm-manager.h"
#include "xfpm-engine.h"
+#include "xfpm-session.h"
/* Init */
static void xfpm_manager_class_init (XfpmManagerClass *klass);
@@ -60,6 +61,7 @@
struct XfpmManagerPrivate
{
+ XfpmSession *session;
XfpmEngine *engine;
HalMonitor *monitor;
@@ -106,6 +108,8 @@
manager->priv->engine = NULL;
manager->priv->monitor = NULL;
+ manager->priv->session = xfpm_session_new ();
+
notify_init ("xfce4-power-manager");
}
@@ -121,6 +125,8 @@
if ( manager->priv->engine )
g_object_unref (manager->priv->engine);
+
+ g_object_unref (manager->priv->session);
g_object_unref (manager->priv->monitor);
@@ -166,6 +172,12 @@
}
}
+static void
+xfpm_manager_session_die_cb (XfpmSession *session, XfpmManager *manager)
+{
+ xfpm_manager_quit (manager);
+}
+
XfpmManager *
xfpm_manager_new (DBusGConnection *bus)
{
@@ -200,6 +212,11 @@
}
manager->priv->engine = xfpm_engine_new ();
+ manager->priv->session = xfpm_session_new ();
+
+ g_signal_connect (manager->priv->session, "session-die",
+ G_CALLBACK (xfpm_manager_session_die_cb), manager);
+
out:
;
}
Added: xfce4-power-manager/trunk/src/xfpm-session.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-session.c (rev 0)
+++ xfce4-power-manager/trunk/src/xfpm-session.c 2009-04-10 14:00:29 UTC (rev 7155)
@@ -0,0 +1,169 @@
+/*
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include <libxfce4util/libxfce4util.h>
+#include <libxfcegui4/libxfcegui4.h>
+
+#include "xfpm-session.h"
+
+/* Init */
+static void xfpm_session_class_init (XfpmSessionClass *klass);
+static void xfpm_session_init (XfpmSession *session);
+static void xfpm_session_finalize (GObject *object);
+
+#define XFPM_SESSION_GET_PRIVATE(o) \
+(G_TYPE_INSTANCE_GET_PRIVATE ((o), XFPM_TYPE_SESSION, XfpmSessionPrivate))
+
+struct XfpmSessionPrivate
+{
+ SessionClient *client;
+ gboolean managed;
+};
+
+enum
+{
+ SESSION_DIE,
+ LAST_SIGNAL
+};
+
+static guint signals [LAST_SIGNAL] = { 0 };
+
+static gpointer xfpm_session_object = NULL;
+
+G_DEFINE_TYPE (XfpmSession, xfpm_session, G_TYPE_OBJECT)
+
+static void
+xfpm_session_die (gpointer client_data)
+{
+ XfpmSession *session;
+
+ if ( G_UNLIKELY (xfpm_session_object == NULL ) )
+ return;
+
+ session = XFPM_SESSION (xfpm_session_object);
+ if ( G_UNLIKELY (session->priv->managed == FALSE) )
+ return;
+
+ TRACE ("Session disconnected signal\n");
+ g_signal_emit (G_OBJECT (session), signals [SESSION_DIE], 0);
+}
+
+static void
+xfpm_session_class_init (XfpmSessionClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ signals[SESSION_DIE] =
+ g_signal_new("session-die",
+ XFPM_TYPE_SESSION,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(XfpmSessionClass, session_die),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0, G_TYPE_NONE);
+
+ object_class->finalize = xfpm_session_finalize;
+
+ g_type_class_add_private (klass, sizeof (XfpmSessionPrivate));
+}
+
+static void
+xfpm_session_init (XfpmSession *session)
+{
+ gchar **restart_command;
+
+ session->priv = XFPM_SESSION_GET_PRIVATE (session);
+
+ session->priv->client = NULL;
+
+ restart_command = g_new (gchar *, 3);
+ restart_command[0] = g_strdup ("xfce4-power-manager");
+ restart_command[1] = g_strdup ("--restart");
+ restart_command[2] = NULL;
+
+ session->priv->client = client_session_new_full (NULL,
+ SESSION_RESTART_IMMEDIATELY,
+ 40,
+ NULL,
+ (gchar *) PACKAGE_NAME,
+ NULL,
+ restart_command,
+ g_strdupv (restart_command),
+ NULL,
+ NULL,
+ NULL);
+ if ( G_UNLIKELY (session->priv->client == NULL ) )
+ {
+ g_warning ("Failed to connect to session manager");
+ return;
+ }
+
+ session->priv->managed = session_init (session->priv->client);
+ session->priv->client->die = xfpm_session_die;
+}
+
+static void
+xfpm_session_finalize (GObject *object)
+{
+ XfpmSession *session;
+
+ session = XFPM_SESSION (object);
+
+ if ( session->priv->client != NULL )
+ client_session_free (session->priv->client);
+
+ G_OBJECT_CLASS (xfpm_session_parent_class)->finalize (object);
+}
+
+XfpmSession *
+xfpm_session_new (void)
+{
+ if ( xfpm_session_object != NULL )
+ {
+ g_object_ref (xfpm_session_object);
+ }
+ else
+ {
+ xfpm_session_object = g_object_new (XFPM_TYPE_SESSION, NULL);
+ g_object_add_weak_pointer (xfpm_session_object, &xfpm_session_object);
+ }
+ return XFPM_SESSION (xfpm_session_object);
+}
+
+void xfpm_session_set_client_id (XfpmSession *session, const gchar *client_id)
+{
+ g_return_if_fail (XFPM_IS_SESSION (session));
+
+ if ( G_UNLIKELY (session->priv->client == NULL) )
+ return;
+
+ client_session_set_client_id (session->priv->client, client_id);
+}
Added: xfce4-power-manager/trunk/src/xfpm-session.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-session.h (rev 0)
+++ xfce4-power-manager/trunk/src/xfpm-session.h 2009-04-10 14:00:29 UTC (rev 7155)
@@ -0,0 +1,57 @@
+/*
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __XFPM_SESSION_H
+#define __XFPM_SESSION_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define XFPM_TYPE_SESSION (xfpm_session_get_type () )
+#define XFPM_SESSION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), XFPM_TYPE_SESSION, XfpmSession))
+#define XFPM_IS_SESSION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), XFPM_TYPE_SESSION))
+
+typedef struct XfpmSessionPrivate XfpmSessionPrivate;
+
+typedef struct
+{
+ GObject parent;
+ XfpmSessionPrivate *priv;
+
+} XfpmSession;
+
+typedef struct
+{
+ GObjectClass parent_class;
+
+ void (*session_die) (XfpmSession *session);
+
+} XfpmSessionClass;
+
+GType xfpm_session_get_type (void) G_GNUC_CONST;
+XfpmSession *xfpm_session_new (void);
+
+void xfpm_session_set_client_id (XfpmSession *session,
+ const gchar *client_id);
+
+G_END_DECLS
+
+#endif /* __XFPM_SESSION_H */
More information about the Goodies-commits
mailing list