]> git.0d.be Git - empathy.git/commitdiff
Add a "presence-changed" signal so that we can keep track of the
authorXavier Claessens <xclaesse@src.gnome.org>
Tue, 6 Jan 2009 16:47:22 +0000 (16:47 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Tue, 6 Jan 2009 16:47:22 +0000 (16:47 +0000)
previous presence of a contact when it changes.

svn path=/trunk/; revision=2051

libempathy/empathy-contact.c

index 314082b8651b497f917217a2ee700f7eec0e88fb..5418586734d8041541e44b04579c9d6cba873e9b 100644 (file)
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
 /*
  * Copyright (C) 2004 Imendio AB
  * Copyright (C) 2007-2008 Collabora Ltd.
 #include <glib/gi18n-lib.h>
 
 #include <telepathy-glib/util.h>
+#include <libmissioncontrol/mc-enum-types.h>
 
 #include "empathy-contact.h"
 #include "empathy-utils.h"
 #include "empathy-enum-types.h"
+#include "empathy-marshal.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
 #include "empathy-debug.h"
@@ -76,6 +78,13 @@ enum
   PROP_READY
 };
 
+enum {
+  PRESENCE_CHANGED,
+  LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
 static void
 empathy_contact_class_init (EmpathyContactClass *class)
 {
@@ -173,6 +182,17 @@ empathy_contact_class_init (EmpathyContactClass *class)
         EMPATHY_CONTACT_READY_NONE,
         G_PARAM_READABLE));
 
+  signals[PRESENCE_CHANGED] =
+    g_signal_new ("presence-changed",
+                  G_TYPE_FROM_CLASS (class),
+                  G_SIGNAL_RUN_LAST,
+                  0,
+                  NULL, NULL,
+                  _empathy_marshal_VOID__ENUM_ENUM,
+                  G_TYPE_NONE,
+                  2, MC_TYPE_PRESENCE,
+                  MC_TYPE_PRESENCE);
+
   g_type_class_add_private (object_class, sizeof (EmpathyContactPriv));
 }
 
@@ -506,6 +526,7 @@ empathy_contact_set_presence (EmpathyContact *contact,
                               McPresence presence)
 {
   EmpathyContactPriv *priv;
+  McPresence old_presence;
 
   g_return_if_fail (EMPATHY_IS_CONTACT (contact));
 
@@ -514,8 +535,11 @@ empathy_contact_set_presence (EmpathyContact *contact,
   if (presence == priv->presence)
     return;
 
+  old_presence = priv->presence;
   priv->presence = presence;
 
+  g_signal_emit (contact, signals[PRESENCE_CHANGED], 0, presence, old_presence);
+
   g_object_notify (G_OBJECT (contact), "presence");
 }