gnome-session r4804 - in branches/dbus_based: . gnome-session



Author: mccann
Date: Tue Jul 15 21:01:01 2008
New Revision: 4804
URL: http://svn.gnome.org/viewvc/gnome-session?rev=4804&view=rev

Log:
2008-07-15  William Jon McCann  <jmccann redhat com>

	* gnome-session/gsm-client.c (gsm_client_query_end_session),
	(gsm_client_end_session):
	* gnome-session/gsm-client.h:
	* gnome-session/gsm-client.xml:
	* gnome-session/gsm-dbus-client.c (dbus_client_query_end_session),
	(dbus_client_end_session), (gsm_dbus_client_class_init):
	* gnome-session/gsm-manager.c (_shutdown_client):
	* gnome-session/gsm-xsmp-client.c (xsmp_stop),
	(xsmp_query_end_session), (xsmp_end_session),
	(gsm_xsmp_client_class_init):
	Add QueryEndSession and EndSession methods and signals.



Modified:
   branches/dbus_based/ChangeLog
   branches/dbus_based/gnome-session/gsm-client.c
   branches/dbus_based/gnome-session/gsm-client.h
   branches/dbus_based/gnome-session/gsm-client.xml
   branches/dbus_based/gnome-session/gsm-dbus-client.c
   branches/dbus_based/gnome-session/gsm-manager.c
   branches/dbus_based/gnome-session/gsm-xsmp-client.c

Modified: branches/dbus_based/gnome-session/gsm-client.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-client.c	(original)
+++ branches/dbus_based/gnome-session/gsm-client.c	Tue Jul 15 21:01:01 2008
@@ -324,11 +324,21 @@
 }
 
 void
-gsm_client_notify_session_over (GsmClient *client)
+gsm_client_query_end_session (GsmClient *client,
+                              guint      flags)
 {
         g_return_if_fail (GSM_IS_CLIENT (client));
 
-        GSM_CLIENT_GET_CLASS (client)->impl_notify_session_over (client);
+        GSM_CLIENT_GET_CLASS (client)->impl_query_end_session (client, flags);
+}
+
+void
+gsm_client_end_session (GsmClient *client,
+                        guint      flags)
+{
+        g_return_if_fail (GSM_IS_CLIENT (client));
+
+        GSM_CLIENT_GET_CLASS (client)->impl_end_session (client, flags);
 }
 
 gboolean

Modified: branches/dbus_based/gnome-session/gsm-client.h
==============================================================================
--- branches/dbus_based/gnome-session/gsm-client.h	(original)
+++ branches/dbus_based/gnome-session/gsm-client.h	Tue Jul 15 21:01:01 2008
@@ -59,9 +59,16 @@
         /* signals */
         void         (*disconnected)        (GsmClient *client);
         void         (*stop)                (GsmClient *client);
+        void         (*query_end_session)   (GsmClient *client,
+                                             guint      flags);
+        void         (*end_session)         (GsmClient *client,
+                                             guint      flags);
 
         /* virtual methods */
-        void         (*impl_notify_session_over) (GsmClient *client);
+        void         (*impl_query_end_session)   (GsmClient *client,
+                                                  guint      flags);
+        void         (*impl_end_session)         (GsmClient *client,
+                                                  guint      flags);
         gboolean     (*impl_stop)                (GsmClient *client,
                                                   GError   **error);
 };
@@ -77,7 +84,12 @@
 void        gsm_client_set_status           (GsmClient  *client,
                                              int         status);
 
-void        gsm_client_notify_session_over  (GsmClient  *client);
+void        gsm_client_end_session          (GsmClient  *client,
+                                             guint       flags);
+void        gsm_client_query_end_session    (GsmClient  *client,
+                                             guint       flags);
+void        gsm_client_end_session          (GsmClient  *client,
+                                             guint       flags);
 
 gboolean    gsm_client_stop                 (GsmClient  *client,
                                              GError    **error);

Modified: branches/dbus_based/gnome-session/gsm-client.xml
==============================================================================
--- branches/dbus_based/gnome-session/gsm-client.xml	(original)
+++ branches/dbus_based/gnome-session/gsm-client.xml	Tue Jul 15 21:01:01 2008
@@ -6,5 +6,13 @@
     <signal name="Stop">
     </signal>
 
+    <signal name="QueryEndSession">
+      <arg name="flags" type="u"/>
+    </signal>
+
+    <signal name="EndSession">
+      <arg name="flags" type="u"/>
+    </signal>
+
   </interface>
 </node>

Modified: branches/dbus_based/gnome-session/gsm-dbus-client.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-dbus-client.c	(original)
+++ branches/dbus_based/gnome-session/gsm-dbus-client.c	Tue Jul 15 21:01:01 2008
@@ -190,6 +190,100 @@
 }
 
 static void
+dbus_client_query_end_session (GsmClient *client,
+                               guint      flags)
+{
+        GsmDBusClient  *dbus_client = (GsmDBusClient *) client;
+        DBusMessage    *message;
+        gboolean        ret;
+        DBusConnection *connection;
+        DBusError       local_error;
+        DBusMessageIter iter;
+
+        ret = FALSE;
+
+        /* unicast the signal to only the registered bus name */
+        message = dbus_message_new_signal (gsm_client_get_id (client),
+                                           CLIENT_INTERFACE,
+                                           "QueryEndSession");
+        if (message == NULL) {
+                goto out;
+        }
+        if (!dbus_message_set_destination (message, dbus_client->priv->bus_name)) {
+                goto out;
+        }
+
+        dbus_message_iter_init_append (message, &iter);
+        dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &flags);
+
+        dbus_error_init (&local_error);
+        connection = dbus_bus_get (DBUS_BUS_SESSION, &local_error);
+        if (dbus_error_is_set (&local_error)) {
+                g_warning ("%s", local_error.message);
+                dbus_error_free (&local_error);
+                goto out;
+        }
+
+        if (!dbus_connection_send (connection, message, NULL)) {
+                goto out;
+        }
+
+        ret = TRUE;
+
+ out:
+        if (message != NULL) {
+                dbus_message_unref (message);
+        }
+}
+
+static void
+dbus_client_end_session (GsmClient *client,
+                         guint      flags)
+{
+        GsmDBusClient  *dbus_client = (GsmDBusClient *) client;
+        DBusMessage    *message;
+        gboolean        ret;
+        DBusConnection *connection;
+        DBusError       local_error;
+        DBusMessageIter iter;
+
+        ret = FALSE;
+
+        /* unicast the signal to only the registered bus name */
+        message = dbus_message_new_signal (gsm_client_get_id (client),
+                                           CLIENT_INTERFACE,
+                                           "EndSession");
+        if (message == NULL) {
+                goto out;
+        }
+        if (!dbus_message_set_destination (message, dbus_client->priv->bus_name)) {
+                goto out;
+        }
+
+        dbus_message_iter_init_append (message, &iter);
+        dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &flags);
+
+        dbus_error_init (&local_error);
+        connection = dbus_bus_get (DBUS_BUS_SESSION, &local_error);
+        if (dbus_error_is_set (&local_error)) {
+                g_warning ("%s", local_error.message);
+                dbus_error_free (&local_error);
+                goto out;
+        }
+
+        if (!dbus_connection_send (connection, message, NULL)) {
+                goto out;
+        }
+
+        ret = TRUE;
+
+ out:
+        if (message != NULL) {
+                dbus_message_unref (message);
+        }
+}
+
+static void
 gsm_dbus_client_class_init (GsmDBusClientClass *klass)
 {
         GObjectClass   *object_class = G_OBJECT_CLASS (klass);
@@ -200,7 +294,9 @@
         object_class->get_property         = gsm_dbus_client_get_property;
         object_class->set_property         = gsm_dbus_client_set_property;
 
-        client_class->impl_stop            = dbus_client_stop;
+        client_class->impl_stop              = dbus_client_stop;
+        client_class->impl_query_end_session = dbus_client_query_end_session;
+        client_class->impl_end_session       = dbus_client_end_session;
 
         g_object_class_install_property (object_class,
                                          PROP_BUS_NAME,

Modified: branches/dbus_based/gnome-session/gsm-manager.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-manager.c	(original)
+++ branches/dbus_based/gnome-session/gsm-manager.c	Tue Jul 15 21:01:01 2008
@@ -1406,7 +1406,11 @@
                   GsmClient  *client,
                   GsmManager *manager)
 {
-        gsm_client_notify_session_over (client);
+        guint flags;
+
+        flags = 0;
+        gsm_client_end_session (client, flags);
+
         return FALSE;
 }
 

Modified: branches/dbus_based/gnome-session/gsm-xsmp-client.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-xsmp-client.c	(original)
+++ branches/dbus_based/gnome-session/gsm-xsmp-client.c	Tue Jul 15 21:01:01 2008
@@ -525,7 +525,7 @@
 {
         GsmXSMPClient *xsmp = (GsmXSMPClient *) client;
 
-        g_debug ("GsmXSMPClient: xsmp_die ('%s')", xsmp->priv->description);
+        g_debug ("GsmXSMPClient: xsmp_stop ('%s')", xsmp->priv->description);
 
         SmsDie (xsmp->priv->conn);
 
@@ -533,6 +533,20 @@
 }
 
 static void
+xsmp_query_end_session (GsmClient *client,
+                        guint      flags)
+{
+        xsmp_save_yourself (client, FALSE);
+}
+
+static void
+xsmp_end_session (GsmClient *client,
+                  guint      flags)
+{
+        xsmp_save_yourself (client, FALSE);
+}
+
+static void
 gsm_client_set_ice_connection (GsmXSMPClient *client,
                                gpointer       conn)
 {
@@ -632,7 +646,9 @@
         object_class->get_property         = gsm_xsmp_client_get_property;
         object_class->set_property         = gsm_xsmp_client_set_property;
 
-        client_class->impl_stop            = xsmp_stop;
+        client_class->impl_stop              = xsmp_stop;
+        client_class->impl_query_end_session = xsmp_query_end_session;
+        client_class->impl_end_session       = xsmp_end_session;
 
         signals[REGISTER_REQUEST] =
                 g_signal_new ("register-request",
@@ -1000,18 +1016,6 @@
         callbacks_ret->get_properties.manager_data = client;
 }
 
-gboolean
-gsm_xsmp_client_register_request (GsmXSMPClient *client,
-                                  char     **client_idp)
-{
-        gboolean res;
-
-        res = FALSE;
-        g_signal_emit (client, signals[REGISTER_REQUEST], 0, client_idp, &res);
-
-        return res;
-}
-
 void
 gsm_xsmp_client_save_state (GsmXSMPClient *client)
 {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]