ekiga r6521 - in trunk: . lib/engine/gui/gtk-frontend



Author: jpuydt
Date: Sat Jul 26 01:47:49 2008
New Revision: 6521
URL: http://svn.gnome.org/viewvc/ekiga?rev=6521&view=rev

Log:
New "presentity-selected" signal in the roster view

Modified:
   trunk/ChangeLog
   trunk/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp
   trunk/lib/engine/gui/gtk-frontend/roster-view-gtk.h

Modified: trunk/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp
==============================================================================
--- trunk/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp	(original)
+++ trunk/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp	Sat Jul 26 01:47:49 2008
@@ -73,6 +73,13 @@
   TYPE_PRESENTITY
 };
 
+enum {
+  PRESENTITY_SELECTED_SIGNAL,
+  LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
 static GObjectClass *parent_class = NULL;
 
 
@@ -137,6 +144,13 @@
 					      GmConfEntry *entry,
 					      gpointer data);
 
+/* DESCRIPTION  : Called when the user selects a presentity
+ * BEHAVIOR     : Emit the presentity-selected signal
+ * PRE          : The gpointer must point to the RosterViewGtk GObject.
+ */
+static void on_selection_changed (GtkTreeSelection* selection,
+				  gpointer data);
+
 /* DESCRIPTION  : Called when the user right-clicks on a heap, group or
  *                presentity.
  * BEHAVIOR     : Update the menu and displays it as a popup.
@@ -493,6 +507,26 @@
 }
 
 
+static void
+on_selection_changed (GtkTreeSelection* selection,
+		      gpointer data)
+{
+  RosterViewGtk* self = NULL;
+  GtkTreeModel* model = NULL;
+  GtkTreeIter iter;
+
+  self = ROSTER_VIEW_GTK (data);
+
+  if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+
+    Ekiga::Presentity *presentity = NULL;
+    gtk_tree_model_get (model, &iter,
+			COLUMN_PRESENTITY, &presentity,
+			-1);
+    g_signal_emit (self, signals[PRESENTITY_SELECTED_SIGNAL], 0, presentity);
+  }
+}
+
 static gint
 on_view_clicked (GtkWidget *tree_view,
 		 GdkEventButton *event,
@@ -1088,6 +1122,7 @@
 roster_view_gtk_class_init (gpointer g_class,
 			    gpointer /*class_data*/)
 {
+  RosterViewGtkClass* roster_view_gtk_class = NULL;
   GObjectClass *gobject_class = NULL;
 
   parent_class = (GObjectClass *) g_type_class_peek_parent (g_class);
@@ -1095,6 +1130,20 @@
   gobject_class = (GObjectClass *) g_class;
   gobject_class->dispose = roster_view_gtk_dispose;
   gobject_class->finalize = roster_view_gtk_finalize;
+
+  signals[PRESENTITY_SELECTED_SIGNAL] =
+    g_signal_new ("presentity-selected",
+		  G_OBJECT_CLASS_TYPE (gobject_class),
+		  G_SIGNAL_RUN_LAST,
+		  G_STRUCT_OFFSET (RosterViewGtkClass, presentity_selected),
+		  NULL, NULL,
+		  g_cclosure_marshal_VOID__POINTER,
+		  G_TYPE_NONE, 1,
+		  G_TYPE_POINTER);
+
+  /* FIXME: is it useful? */
+  roster_view_gtk_class = (RosterViewGtkClass*)g_class;
+  roster_view_gtk_class->presentity_selected = NULL;
 }
 
 
@@ -1257,6 +1306,8 @@
   /* Callback when the selection has been changed */
   selection = gtk_tree_view_get_selection (self->priv->tree_view);
   gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+  g_signal_connect (G_OBJECT (selection), "changed",
+		    G_CALLBACK (on_selection_changed), self);
   g_signal_connect (G_OBJECT (self->priv->tree_view), "event-after",
 		    G_CALLBACK (on_view_clicked), self);
 

Modified: trunk/lib/engine/gui/gtk-frontend/roster-view-gtk.h
==============================================================================
--- trunk/lib/engine/gui/gtk-frontend/roster-view-gtk.h	(original)
+++ trunk/lib/engine/gui/gtk-frontend/roster-view-gtk.h	Sat Jul 26 01:47:49 2008
@@ -60,6 +60,9 @@
 struct _RosterViewGtkClass
 {
   GtkFrameClass parent;
+
+  void (*presentity_selected) (RosterViewGtk* self,
+			       gpointer presentity);
 };
 
 #define ROSTER_VIEW_GTK_TYPE (roster_view_gtk_get_type ())



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