empathy r1253 - in trunk: libempathy-gtk src



Author: xclaesse
Date: Tue Jul 15 14:00:50 2008
New Revision: 1253
URL: http://svn.gnome.org/viewvc/empathy?rev=1253&view=rev

Log:
Move the event manager to src/


Added:
   trunk/src/empathy-event-manager.c
      - copied, changed from r1252, /trunk/libempathy-gtk/empathy-event-manager.c
   trunk/src/empathy-event-manager.h
      - copied, changed from r1252, /trunk/libempathy-gtk/empathy-event-manager.h
Removed:
   trunk/libempathy-gtk/empathy-event-manager.c
   trunk/libempathy-gtk/empathy-event-manager.h
Modified:
   trunk/libempathy-gtk/Makefile.am
   trunk/libempathy-gtk/empathy-contact-list-view.c
   trunk/libempathy-gtk/empathy-contact-list-view.h
   trunk/src/Makefile.am
   trunk/src/empathy-main-window.c
   trunk/src/empathy-status-icon.c

Modified: trunk/libempathy-gtk/Makefile.am
==============================================================================
--- trunk/libempathy-gtk/Makefile.am	(original)
+++ trunk/libempathy-gtk/Makefile.am	Tue Jul 15 14:00:50 2008
@@ -47,8 +47,7 @@
 	empathy-smiley-manager.c		\
 	empathy-cell-renderer-text.c		\
 	empathy-spell.c				\
-	empathy-contact-menu.c			\
-	empathy-event-manager.c
+	empathy-contact-menu.c
 
 # do not distribute generated files
 nodist_libempathy_gtk_la_SOURCES =\
@@ -95,8 +94,7 @@
 	empathy-smiley-manager.h		\
 	empathy-cell-renderer-text.h		\
 	empathy-spell.h				\
-	empathy-contact-menu.h			\
-	empathy-event-manager.h
+	empathy-contact-menu.h
 
 libempathy_gtk_includedir = $(includedir)/libempathy-gtk/
 libempathy_gtk_include_HEADERS =		\

Modified: trunk/libempathy-gtk/empathy-contact-list-view.c
==============================================================================
--- trunk/libempathy-gtk/empathy-contact-list-view.c	(original)
+++ trunk/libempathy-gtk/empathy-contact-list-view.c	Tue Jul 15 14:00:50 2008
@@ -46,7 +46,6 @@
 #include "empathy-cell-renderer-expander.h"
 #include "empathy-cell-renderer-text.h"
 #include "empathy-cell-renderer-activatable.h"
-#include "empathy-event-manager.h"
 #include "empathy-ui-utils.h"
 #include "empathy-gtk-enum-types.h"
 #include "empathy-gtk-marshal.h"
@@ -54,9 +53,6 @@
 #define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
 #include <libempathy/empathy-debug.h>
 
-/* Flashing delay for icons (milliseconds). */
-#define FLASH_TIMEOUT 500
-
 /* Active users are those which have recently changed state
  * (e.g. online, offline or from normal to a busy state).
  */
@@ -68,9 +64,6 @@
 	EmpathyContactListFeatureFlags  list_features;
 	EmpathyContactFeatureFlags      contact_features;
 	GtkWidget                      *tooltip_widget;
-	EmpathyEventManager            *event_manager;
-	guint                           flash_timeout_id;
-	gboolean                        flash_on;
 } EmpathyContactListViewPriv;
 
 typedef struct {
@@ -121,157 +114,6 @@
 
 G_DEFINE_TYPE (EmpathyContactListView, empathy_contact_list_view, GTK_TYPE_TREE_VIEW);
 
-static void
-contact_list_view_flash_stop (EmpathyContactListView *view)
-{
-	EmpathyContactListViewPriv *priv = GET_PRIV (view);
-
-	if (priv->flash_timeout_id == 0) {
-		return;
-	}
-
-	DEBUG ("Stop flashing");
-	g_source_remove (priv->flash_timeout_id);
-	priv->flash_timeout_id = 0;
-	priv->flash_on = FALSE;
-}
-
-typedef struct {
-	EmpathyEvent *event;
-	gboolean      on;
-} FlashForeachData;
-
-static gboolean
-contact_list_view_flash_foreach (GtkTreeModel *model,
-				 GtkTreePath  *path,
-				 GtkTreeIter  *iter,
-				 gpointer      user_data)
-{
-	FlashForeachData *data = (FlashForeachData*) user_data;
-	EmpathyContact   *contact;
-	const gchar      *icon_name;
-	GtkTreePath      *parent_path = NULL;
-	GtkTreeIter       parent_iter;
-
-	/* To be used with gtk_tree_model_foreach, update the status icon
-	 * of the contact to show the event icon (on=TRUE) or the presence
-	 * (on=FALSE) */
- 	gtk_tree_model_get (model, iter,
-			    EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact,
-			    -1);
-
-	if (contact != data->event->contact) {
-		if (contact) {
-			g_object_unref (contact);
-		}
-		return FALSE;
-	}
-
-	if (data->on) {
-		icon_name = data->event->icon_name;
-	} else {
-		icon_name = empathy_icon_name_for_contact (contact);
-	}
-
-	gtk_tree_store_set (GTK_TREE_STORE (model), iter,
-			    EMPATHY_CONTACT_LIST_STORE_COL_ICON_STATUS, icon_name,
-			    -1);
-
-	/* To make sure the parent is shown correctly, we emit
-	 * the row-changed signal on the parent so it prompts
-	 * it to be refreshed by the filter func. 
-	 */
-	if (gtk_tree_model_iter_parent (model, &parent_iter, iter)) {
-		parent_path = gtk_tree_model_get_path (model, &parent_iter);
-	}
-	if (parent_path) {
-		gtk_tree_model_row_changed (model, parent_path, &parent_iter);
-		gtk_tree_path_free (parent_path);
-	}
-
-	g_object_unref (contact);
-
-	return FALSE;
-}
-
-static gboolean
-contact_list_view_flash_cb (EmpathyContactListView *view)
-{
-	EmpathyContactListViewPriv *priv = GET_PRIV (view);
-	GtkTreeModel               *model;
-	GSList                     *events, *l;
-	gboolean                    found_event = FALSE;
-	FlashForeachData            data;
-
-	priv->flash_on = !priv->flash_on;
-	data.on = priv->flash_on;
-	model = GTK_TREE_MODEL (priv->store);
-
-	events = empathy_event_manager_get_events (priv->event_manager);
-	for (l = events; l; l = l->next) {
-		data.event = l->data;
-		if (!data.event->contact) {
-			continue;
-		}
-
-		found_event = TRUE;
-		gtk_tree_model_foreach (model,
-					contact_list_view_flash_foreach,
-					&data);
-	}
-
-	if (!found_event) {
-		contact_list_view_flash_stop (view);
-	}
-
-	return TRUE;
-}
-
-static void
-contact_list_view_flash_start (EmpathyContactListView *view)
-{
-	EmpathyContactListViewPriv *priv = GET_PRIV (view);
-
-	if (priv->flash_timeout_id != 0) {
-		return;
-	}
-
-	DEBUG ("Start flashing");
-	priv->flash_timeout_id = g_timeout_add (FLASH_TIMEOUT,
-						(GSourceFunc) contact_list_view_flash_cb,
-						view);
-	contact_list_view_flash_cb (view);
-}
-
-static void
-contact_list_view_event_added_cb (EmpathyEventManager    *manager,
-				  EmpathyEvent           *event,
-				  EmpathyContactListView *view)
-{
-	if (event->contact) {
-		contact_list_view_flash_start (view);
-	}
-}
-
-static void
-contact_list_view_event_removed_cb (EmpathyEventManager    *manager,
-				    EmpathyEvent           *event,
-				    EmpathyContactListView *view)
-{
-	EmpathyContactListViewPriv *priv = GET_PRIV (view);
-	FlashForeachData            data;
-
-	if (!event->contact) {
-		return;
-	}
-
-	data.on = FALSE;
-	data.event = event;
-	gtk_tree_model_foreach (GTK_TREE_MODEL (priv->store),
-				contact_list_view_flash_foreach,
-				&data);
-}
-
 static gboolean
 contact_list_view_query_tooltip_cb (EmpathyContactListView *view,
 				    gint                    x,
@@ -684,27 +526,11 @@
 		return;
 	}
 
-	/* If the contact has an event, activate it */
-	if (priv->contact_features & EMPATHY_CONTACT_LIST_FEATURE_CONTACT_EVENTS) {
-		GSList *events, *l;
-
-		events = empathy_event_manager_get_events (priv->event_manager);
-		for (l = events; l; l = l->next) {
-			EmpathyEvent *event = l->data;
-
-			if (event->contact == contact) {
-				empathy_event_activate (event);
-				goto OUT;
-			}
-		}
-	}
-
 	/* There is no event for the contact, default action is starting a chat */
 	if (priv->contact_features & EMPATHY_CONTACT_FEATURE_CHAT) {
 		empathy_dispatcher_chat_with_contact (contact);
 	}
 
-OUT:
 	g_object_unref (contact);
 }
 
@@ -1130,40 +956,6 @@
 	/* Update has-tooltip */
 	has_tooltip = (features & EMPATHY_CONTACT_LIST_FEATURE_CONTACT_TOOLTIP) != 0;
 	gtk_widget_set_has_tooltip (GTK_WIDGET (view), has_tooltip);
-
-	/* Enable event handling if needed */
-	if (features & EMPATHY_CONTACT_LIST_FEATURE_CONTACT_EVENTS &&
-	    !priv->event_manager) {
-		GSList *l;
-
-		priv->event_manager = empathy_event_manager_new ();
-		g_signal_connect (priv->event_manager, "event-added",
-				  G_CALLBACK (contact_list_view_event_added_cb),
-				  view);
-		g_signal_connect (priv->event_manager, "event-removed",
-				  G_CALLBACK (contact_list_view_event_removed_cb),
-				  view);
-
-		l = empathy_event_manager_get_events (priv->event_manager);
-		while (l) {
-			contact_list_view_event_added_cb (priv->event_manager,
-							  l->data, view);
-			l = l->next;
-		}
-	}
-
-	/* Disable event handling if needed */
-	if (!(features & EMPATHY_CONTACT_LIST_FEATURE_CONTACT_EVENTS) &&
-	    priv->event_manager) {
-		g_signal_handlers_disconnect_by_func (priv->event_manager,
-				  		      contact_list_view_event_added_cb,
-				  		      view);
-		g_signal_handlers_disconnect_by_func (priv->event_manager,
-				  		      contact_list_view_event_removed_cb,
-				  		      view);
-		g_object_unref (priv->event_manager);
-		priv->event_manager = NULL;
-	}
 }
 
 static void
@@ -1177,16 +969,6 @@
 		g_object_unref (priv->store);
 	}
 
-	if (priv->event_manager) {
-		g_signal_handlers_disconnect_by_func (priv->event_manager,
-				  		      contact_list_view_event_added_cb,
-				  		      object);
-		g_signal_handlers_disconnect_by_func (priv->event_manager,
-				  		      contact_list_view_event_removed_cb,
-				  		      object);
-		g_object_unref (priv->event_manager);
-	}
-
 	G_OBJECT_CLASS (empathy_contact_list_view_parent_class)->finalize (object);
 }
 

Modified: trunk/libempathy-gtk/empathy-contact-list-view.h
==============================================================================
--- trunk/libempathy-gtk/empathy-contact-list-view.h	(original)
+++ trunk/libempathy-gtk/empathy-contact-list-view.h	Tue Jul 15 14:00:50 2008
@@ -54,8 +54,7 @@
 	EMPATHY_CONTACT_LIST_FEATURE_CONTACT_DROP = 1 << 4,
 	EMPATHY_CONTACT_LIST_FEATURE_CONTACT_DRAG = 1 << 5,
 	EMPATHY_CONTACT_LIST_FEATURE_CONTACT_TOOLTIP = 1 << 6,
-	EMPATHY_CONTACT_LIST_FEATURE_CONTACT_EVENTS = 1 << 7,
-	EMPATHY_CONTACT_LIST_FEATURE_ALL = (1 << 8) - 1,
+	EMPATHY_CONTACT_LIST_FEATURE_ALL = (1 << 7) - 1,
 } EmpathyContactListFeatureFlags;
 
 struct _EmpathyContactListView {

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Tue Jul 15 14:00:50 2008
@@ -23,6 +23,7 @@
 empathy_SOURCES =							\
 	empathy.c							\
 	bacon-message-connection.c bacon-message-connection.h		\
+	ephy-spinner.c ephy-spinner.h					\
 	empathy-chat-window.c empathy-chat-window.h			\
 	empathy-new-chatroom-dialog.c empathy-new-chatroom-dialog.h	\
 	empathy-status-icon.c empathy-status-icon.h			\
@@ -31,8 +32,8 @@
 	empathy-main-window.c empathy-main-window.h			\
 	empathy-preferences.c empathy-preferences.h			\
 	empathy-call-window.c empathy-call-window.h			\
-	ephy-spinner.c ephy-spinner.h					\
-	empathy-accounts-dialog.c empathy-accounts-dialog.h
+	empathy-accounts-dialog.c empathy-accounts-dialog.h		\
+	empathy-event-manager.c empathy-event-manager.h
 
 empathy_accounts_SOURCES = empathy-accounts.c				\
 	empathy-accounts-dialog.c empathy-accounts-dialog.h

Copied: trunk/src/empathy-event-manager.c (from r1252, /trunk/libempathy-gtk/empathy-event-manager.c)
==============================================================================
--- /trunk/libempathy-gtk/empathy-event-manager.c	(original)
+++ trunk/src/empathy-event-manager.c	Tue Jul 15 14:00:50 2008
@@ -31,10 +31,10 @@
 #include <libempathy/empathy-tp-chat.h>
 #include <libempathy/empathy-tp-group.h>
 #include <libempathy/empathy-utils.h>
+#include <libempathy-gtk/empathy-images.h>
+#include <libempathy-gtk/empathy-contact-dialogs.h>
 
 #include "empathy-event-manager.h"
-#include "empathy-images.h"
-#include "empathy-contact-dialogs.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_DISPATCHER
 #include <libempathy/empathy-debug.h>

Copied: trunk/src/empathy-event-manager.h (from r1252, /trunk/libempathy-gtk/empathy-event-manager.h)
==============================================================================

Modified: trunk/src/empathy-main-window.c
==============================================================================
--- trunk/src/empathy-main-window.c	(original)
+++ trunk/src/empathy-main-window.c	Tue Jul 15 14:00:50 2008
@@ -55,10 +55,14 @@
 #include "empathy-about-dialog.h"
 #include "empathy-new-chatroom-dialog.h"
 #include "empathy-chatrooms-window.h"
+#include "empathy-event-manager.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_OTHER
 #include <libempathy/empathy-debug.h>
 
+/* Flashing delay for icons (milliseconds). */
+#define FLASH_TIMEOUT 500
+
 /* Minimum width of roster window if something goes wrong. */
 #define MIN_WIDTH 50
 
@@ -73,6 +77,9 @@
 	EmpathyContactListStore *list_store;
 	MissionControl          *mc;
 	EmpathyChatroomManager  *chatroom_manager;
+	EmpathyEventManager     *event_manager;
+	guint                    flash_timeout_id;
+	gboolean                 flash_on;
 	gpointer                 token;
 
 	GtkWidget              *window;
@@ -172,6 +179,187 @@
 								const gchar              *key,
 								EmpathyMainWindow        *window);
 
+static void
+main_window_flash_stop (EmpathyMainWindow *window)
+{
+	if (window->flash_timeout_id == 0) {
+		return;
+	}
+
+	DEBUG ("Stop flashing");
+	g_source_remove (window->flash_timeout_id);
+	window->flash_timeout_id = 0;
+	window->flash_on = FALSE;
+}
+
+typedef struct {
+	EmpathyEvent *event;
+	gboolean      on;
+} FlashForeachData;
+
+static gboolean
+main_window_flash_foreach (GtkTreeModel *model,
+			   GtkTreePath  *path,
+			   GtkTreeIter  *iter,
+			   gpointer      user_data)
+{
+	FlashForeachData *data = (FlashForeachData*) user_data;
+	EmpathyContact   *contact;
+	const gchar      *icon_name;
+	GtkTreePath      *parent_path = NULL;
+	GtkTreeIter       parent_iter;
+
+	/* To be used with gtk_tree_model_foreach, update the status icon
+	 * of the contact to show the event icon (on=TRUE) or the presence
+	 * (on=FALSE) */
+ 	gtk_tree_model_get (model, iter,
+			    EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact,
+			    -1);
+
+	if (contact != data->event->contact) {
+		if (contact) {
+			g_object_unref (contact);
+		}
+		return FALSE;
+	}
+
+	if (data->on) {
+		icon_name = data->event->icon_name;
+	} else {
+		icon_name = empathy_icon_name_for_contact (contact);
+	}
+
+	gtk_tree_store_set (GTK_TREE_STORE (model), iter,
+			    EMPATHY_CONTACT_LIST_STORE_COL_ICON_STATUS, icon_name,
+			    -1);
+
+	/* To make sure the parent is shown correctly, we emit
+	 * the row-changed signal on the parent so it prompts
+	 * it to be refreshed by the filter func. 
+	 */
+	if (gtk_tree_model_iter_parent (model, &parent_iter, iter)) {
+		parent_path = gtk_tree_model_get_path (model, &parent_iter);
+	}
+	if (parent_path) {
+		gtk_tree_model_row_changed (model, parent_path, &parent_iter);
+		gtk_tree_path_free (parent_path);
+	}
+
+	g_object_unref (contact);
+
+	return FALSE;
+}
+
+static gboolean
+main_window_flash_cb (EmpathyMainWindow *window)
+{
+	GtkTreeModel     *model;
+	GSList           *events, *l;
+	gboolean          found_event = FALSE;
+	FlashForeachData  data;
+
+	window->flash_on = !window->flash_on;
+	data.on = window->flash_on;
+	model = GTK_TREE_MODEL (window->list_store);
+
+	events = empathy_event_manager_get_events (window->event_manager);
+	for (l = events; l; l = l->next) {
+		data.event = l->data;
+		if (!data.event->contact) {
+			continue;
+		}
+
+		found_event = TRUE;
+		gtk_tree_model_foreach (model,
+					main_window_flash_foreach,
+					&data);
+	}
+
+	if (!found_event) {
+		main_window_flash_stop (window);
+	}
+
+	return TRUE;
+}
+
+static void
+main_window_flash_start (EmpathyMainWindow *window)
+{
+
+	if (window->flash_timeout_id != 0) {
+		return;
+	}
+
+	DEBUG ("Start flashing");
+	window->flash_timeout_id = g_timeout_add (FLASH_TIMEOUT,
+						  (GSourceFunc) main_window_flash_cb,
+						  window);
+	main_window_flash_cb (window);
+}
+
+static void
+main_window_event_added_cb (EmpathyEventManager *manager,
+			    EmpathyEvent        *event,
+			    EmpathyMainWindow   *window)
+{
+	if (event->contact) {
+		main_window_flash_start (window);
+	}
+}
+
+static void
+main_window_event_removed_cb (EmpathyEventManager *manager,
+			      EmpathyEvent        *event,
+			      EmpathyMainWindow   *window)
+{
+	FlashForeachData data;
+
+	if (!event->contact) {
+		return;
+	}
+
+	data.on = FALSE;
+	data.event = event;
+	gtk_tree_model_foreach (GTK_TREE_MODEL (window->list_store),
+				main_window_flash_foreach,
+				&data);
+}
+
+static void
+main_window_row_activated_cb (EmpathyContactListView *view,
+			      GtkTreePath            *path,
+			      GtkTreeViewColumn      *col,
+			      EmpathyMainWindow      *window)
+{
+	EmpathyContact *contact;
+	GtkTreeModel   *model;
+	GtkTreeIter     iter;
+	GSList         *events, *l;
+
+	model = GTK_TREE_MODEL (window->list_store);
+	gtk_tree_model_get_iter (model, &iter, path);
+	gtk_tree_model_get (model, &iter,
+			    EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact,
+			    -1);
+
+	if (!contact) {
+		return;
+	}
+
+	/* If the contact has an event, activate it */
+	events = empathy_event_manager_get_events (window->event_manager);
+	for (l = events; l; l = l->next) {
+		EmpathyEvent *event = l->data;
+
+		if (event->contact == contact) {
+			empathy_event_activate (event);
+			break;
+		}
+	}
+
+	g_object_unref (contact);
+}
+
 GtkWidget *
 empathy_main_window_show (void)
 {
@@ -188,6 +376,7 @@
 	gboolean                  compact_contact_list;
 	gint                      x, y, w, h;
 	gchar                    *filename;
+	GSList                   *l;
 
 	if (window) {
 		empathy_window_present (GTK_WINDOW (window->window), TRUE);
@@ -298,6 +487,9 @@
 	gtk_widget_show (GTK_WIDGET (window->list_view));
 	gtk_container_add (GTK_CONTAINER (sw),
 			   GTK_WIDGET (window->list_view));
+	g_signal_connect (window->list_view, "row-activated",
+			  G_CALLBACK (main_window_row_activated_cb),
+			  window);
 
 	/* Load user-defined accelerators. */
 	main_window_accels_load ();
@@ -321,8 +513,24 @@
 		gtk_window_move (GTK_WINDOW (window->window), x, y);
 	}
 
+	/* Enable event handling */
+	window->event_manager = empathy_event_manager_new ();
+	g_signal_connect (window->event_manager, "event-added",
+			  G_CALLBACK (main_window_event_added_cb),
+			  window);
+	g_signal_connect (window->event_manager, "event-removed",
+			  G_CALLBACK (main_window_event_removed_cb),
+			  window);
+
+	l = empathy_event_manager_get_events (window->event_manager);
+	while (l) {
+		main_window_event_added_cb (window->event_manager,
+					    l->data, window);
+		l = l->next;
+	}
+
 	conf = empathy_conf_get ();
-	
+
 	/* Show offline ? */
 	empathy_conf_get_bool (conf,
 			      EMPATHY_PREFS_CONTACTS_SHOW_OFFLINE,
@@ -389,6 +597,14 @@
 	g_object_unref (window->list_store);
 	g_hash_table_destroy (window->errors);
 
+	g_signal_handlers_disconnect_by_func (window->event_manager,
+			  		      main_window_event_added_cb,
+			  		      window);
+	g_signal_handlers_disconnect_by_func (window->event_manager,
+			  		      main_window_event_removed_cb,
+			  		      window);
+	g_object_unref (window->event_manager);
+
 	g_free (window);
 }
 

Modified: trunk/src/empathy-status-icon.c
==============================================================================
--- trunk/src/empathy-status-icon.c	(original)
+++ trunk/src/empathy-status-icon.c	Tue Jul 15 14:00:50 2008
@@ -30,7 +30,6 @@
 #include <libempathy/empathy-utils.h>
 #include <libempathy/empathy-idle.h>
 
-#include <libempathy-gtk/empathy-event-manager.h>
 #include <libempathy-gtk/empathy-presence-chooser.h>
 #include <libempathy-gtk/empathy-conf.h>
 #include <libempathy-gtk/empathy-ui-utils.h>
@@ -40,6 +39,7 @@
 #include "empathy-accounts-dialog.h"
 #include "empathy-status-icon.h"
 #include "empathy-preferences.h"
+#include "empathy-event-manager.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_DISPATCHER
 #include <libempathy/empathy-debug.h>



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