diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | libempathy-gtk/empathy-chat.c | 3 | ||||
-rw-r--r-- | src/Makefile.am | 5 | ||||
-rw-r--r-- | src/empathy-call-chandler.c | 16 | ||||
-rw-r--r-- | src/empathy-chat-chandler.c | 135 | ||||
-rw-r--r-- | src/empathy.c | 75 | ||||
-rw-r--r-- | src/org.gnome.Empathy.Chat.service.in | 2 |
7 files changed, 168 insertions, 77 deletions
@@ -1,3 +1,12 @@ +2007-11-11 Xavier Claessens <xclaesse@gmail.com> + + * libempathy-gtk/empathy-chat.c: + * src/empathy-call-chandler.c: + * src/org.gnome.Empathy.Chat.service.in: + * src/empathy-chat-chandler.c: + * src/empathy.c: + * src/Makefile.am: Move chats to its own process. + 2007-11-07 Xavier Claessens <xclaesse@gmail.com> * src/org.gnome.Empathy.Call.service.in: diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index 944bc10b5..edff73a3e 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -63,7 +63,6 @@ #define COMPOSING_STOP_TIMEOUT 5 struct _EmpathyChatPriv { - EmpathyContactManager *manager; EmpathyLogManager *log_manager; EmpathyTpChat *tp_chat; EmpathyChatWindow *window; @@ -234,7 +233,6 @@ empathy_chat_init (EmpathyChat *chat) priv = GET_PRIV (chat); - priv->manager = empathy_contact_manager_new (); priv->log_manager = empathy_log_manager_new (); priv->default_window_height = -1; priv->vscroll_visible = FALSE; @@ -299,7 +297,6 @@ chat_finalize (GObject *object) chat_composing_remove_timeout (chat); g_object_unref (chat->account); - g_object_unref (priv->manager); g_object_unref (priv->log_manager); if (priv->tp_chat) { diff --git a/src/Makefile.am b/src/Makefile.am index 21bd63248..ede2b2a01 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -17,12 +17,15 @@ LDADD = \ bin_PROGRAMS = \ empathy \ empathy-accounts + libexec_PROGRAMS = \ - empathy-call-chandler + empathy-call-chandler \ + empathy-chat-chandler empathy_SOURCES = empathy.c empathy_accounts_SOURCES = empathy-accounts.c empathy_call_chandler_SOURCES = empathy-call-chandler.c +empathy_chat_chandler_SOURCES = empathy-chat-chandler.c # Dbus service files servicedir = $(datadir)/dbus-1/services diff --git a/src/empathy-call-chandler.c b/src/empathy-call-chandler.c index bb88747f4..8833bcbcc 100644 --- a/src/empathy-call-chandler.c +++ b/src/empathy-call-chandler.c @@ -18,10 +18,16 @@ * Authors: Elliot Fairweather <elliot.fairweather@collabora.co.uk> */ +#include <config.h> + #include <stdlib.h> +#include <glib.h> +#include <glib/gi18n.h> #include <gtk/gtk.h> +#include <libgnomevfs/gnome-vfs.h> + #include <libmissioncontrol/mission-control.h> #include <libempathy/empathy-chandler.h> @@ -59,8 +65,18 @@ main (int argc, char *argv[]) EmpathyChandler *chandler; MissionControl *mc; + empathy_debug_set_log_file_from_env (); + + bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + textdomain (GETTEXT_PACKAGE); + gtk_init (&argc, &argv); + gtk_window_set_default_icon_name ("empathy"); + gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (), + PKGDATADIR G_DIR_SEPARATOR_S "icons"); + mc = empathy_mission_control_new (); chandler = empathy_chandler_new (BUS_NAME, OBJECT_PATH); g_signal_connect (chandler, "new-channel", diff --git a/src/empathy-chat-chandler.c b/src/empathy-chat-chandler.c new file mode 100644 index 000000000..c178f7b72 --- /dev/null +++ b/src/empathy-chat-chandler.c @@ -0,0 +1,135 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 2007 Collabora Ltd. + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Authors: Xavier Claessens <xclaesse@gmail.com> + */ + +#include <config.h> + +#include <stdlib.h> + +#include <glib.h> +#include <glib/gi18n.h> +#include <gtk/gtk.h> + +#include <libgnomevfs/gnome-vfs.h> + +#include <libmissioncontrol/mission-control.h> + +#include <libempathy/empathy-chandler.h> +#include <libempathy/empathy-utils.h> +#include <libempathy/empathy-tp-chat.h> +#include <libempathy/empathy-tp-chatroom.h> +#include <libempathy/empathy-debug.h> + +#include <libempathy-gtk/empathy-chat.h> +#include <libempathy-gtk/empathy-private-chat.h> +#include <libempathy-gtk/empathy-group-chat.h> +#include <libempathy-gtk/empathy-chat-window.h> + +#define DEBUG_DOMAIN "EmpathyChat" + +#define BUS_NAME "org.gnome.Empathy.Chat" +#define OBJECT_PATH "/org/freedesktop/Telepathy/ChannelHandler" + +static void +chat_chandler_new_channel_cb (EmpathyChandler *chandler, + TpConn *tp_conn, + TpChan *tp_chan, + MissionControl *mc) +{ + McAccount *account; + EmpathyChat *chat; + gchar *id; + + account = mission_control_get_account_for_connection (mc, tp_conn, NULL); + id = empathy_inspect_channel (account, tp_chan); + chat = empathy_chat_window_find_chat (account, id); + g_free (id); + + if (chat) { + /* The chat already exists */ + if (!empathy_chat_is_connected (chat)) { + EmpathyTpChat *tp_chat; + + /* The chat died, give him the new text channel */ + if (empathy_chat_is_group_chat (chat)) { + tp_chat = EMPATHY_TP_CHAT (empathy_tp_chatroom_new (account, tp_chan)); + } else { + tp_chat = empathy_tp_chat_new (account, tp_chan); + } + empathy_chat_set_tp_chat (chat, tp_chat); + g_object_unref (tp_chat); + } + empathy_chat_present (chat); + + g_object_unref (account); + return; + } + + if (tp_chan->handle_type == TP_HANDLE_TYPE_CONTACT) { + /* We have a new private chat channel */ + chat = EMPATHY_CHAT (empathy_private_chat_new (account, tp_chan)); + } + else if (tp_chan->handle_type == TP_HANDLE_TYPE_ROOM) { + /* We have a new group chat channel */ + chat = EMPATHY_CHAT (empathy_group_chat_new (account, tp_chan)); + } + + empathy_chat_present (EMPATHY_CHAT (chat)); + + g_object_unref (chat); + g_object_unref (account); +} + +int +main (int argc, char *argv[]) +{ + EmpathyChandler *chandler; + MissionControl *mc; + + empathy_debug_set_log_file_from_env (); + + bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + textdomain (GETTEXT_PACKAGE); + + gtk_init (&argc, &argv); + + gtk_window_set_default_icon_name ("empathy"); + gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (), + PKGDATADIR G_DIR_SEPARATOR_S "icons"); + gnome_vfs_init (); + + mc = empathy_mission_control_new (); + chandler = empathy_chandler_new (BUS_NAME, OBJECT_PATH); + g_signal_connect (chandler, "new-channel", + G_CALLBACK (chat_chandler_new_channel_cb), + mc); + + empathy_debug (DEBUG_DOMAIN, "Ready to handle new text channels"); + + gtk_main (); + + g_object_unref (chandler); + g_object_unref (mc); + + return EXIT_SUCCESS; +} + diff --git a/src/empathy.c b/src/empathy.c index e23795f72..fef01b808 100644 --- a/src/empathy.c +++ b/src/empathy.c @@ -31,32 +31,21 @@ #include <libebook/e-book.h> #include <libgnomevfs/gnome-vfs.h> -#include <libtelepathy/tp-conn.h> -#include <libtelepathy/tp-chan.h> #include <libmissioncontrol/mc-account.h> #include <libmissioncontrol/mc-account-monitor.h> #include <libmissioncontrol/mission-control.h> -#include <libempathy/empathy-debug.h> -#include <libempathy/empathy-utils.h> -#include <libempathy/empathy-presence.h> -#include <libempathy/empathy-contact.h> -#include <libempathy/empathy-chandler.h> -#include <libempathy/empathy-tp-chat.h> -#include <libempathy/empathy-tp-chatroom.h> #include <libempathy/empathy-idle.h> #include <libempathy/empathy-conf.h> +#include <libempathy/empathy-utils.h> +#include <libempathy/empathy-debug.h> + #include <libempathy-gtk/empathy-preferences.h> #include <libempathy-gtk/empathy-main-window.h> #include <libempathy-gtk/empathy-status-icon.h> -#include <libempathy-gtk/empathy-private-chat.h> -#include <libempathy-gtk/empathy-group-chat.h> #define DEBUG_DOMAIN "EmpathyMain" -#define BUS_NAME "org.gnome.Empathy.Chat" -#define OBJECT_PATH "/org/freedesktop/Telepathy/ChannelHandler" - static void service_ended_cb (MissionControl *mc, gpointer user_data) @@ -100,56 +89,6 @@ account_enabled_cb (McAccountMonitor *monitor, } static void -new_channel_cb (EmpathyChandler *chandler, - TpConn *tp_conn, - TpChan *tp_chan, - MissionControl *mc) -{ - McAccount *account; - EmpathyChat *chat; - gchar *id; - - account = mission_control_get_account_for_connection (mc, tp_conn, NULL); - id = empathy_inspect_channel (account, tp_chan); - chat = empathy_chat_window_find_chat (account, id); - g_free (id); - - if (chat) { - /* The chat already exists */ - if (!empathy_chat_is_connected (chat)) { - EmpathyTpChat *tp_chat; - - /* The chat died, give him the new text channel */ - if (empathy_chat_is_group_chat (chat)) { - tp_chat = EMPATHY_TP_CHAT (empathy_tp_chatroom_new (account, tp_chan)); - } else { - tp_chat = empathy_tp_chat_new (account, tp_chan); - } - empathy_chat_set_tp_chat (chat, tp_chat); - g_object_unref (tp_chat); - } - empathy_chat_present (chat); - - g_object_unref (account); - return; - } - - if (tp_chan->handle_type == TP_HANDLE_TYPE_CONTACT) { - /* We have a new private chat channel */ - chat = EMPATHY_CHAT (empathy_private_chat_new (account, tp_chan)); - } - else if (tp_chan->handle_type == TP_HANDLE_TYPE_ROOM) { - /* We have a new group chat channel */ - chat = EMPATHY_CHAT (empathy_group_chat_new (account, tp_chan)); - } - - empathy_chat_present (EMPATHY_CHAT (chat)); - - g_object_unref (chat); - g_object_unref (account); -} - -static void create_salut_account (void) { McProfile *profile; @@ -263,7 +202,6 @@ main (int argc, char *argv[]) MissionControl *mc; McAccountMonitor *monitor; EmpathyIdle *idle; - EmpathyChandler *chandler; gboolean no_connect = FALSE; GError *error = NULL; GOptionEntry options[] = { @@ -318,17 +256,10 @@ main (int argc, char *argv[]) window = empathy_main_window_show (); icon = empathy_status_icon_new (GTK_WINDOW (window)); - /* Setting up channel handler */ - chandler = empathy_chandler_new (BUS_NAME, OBJECT_PATH); - g_signal_connect (chandler, "new-channel", - G_CALLBACK (new_channel_cb), - mc); - gtk_main (); empathy_idle_set_state (idle, MC_PRESENCE_OFFLINE); - g_object_unref (chandler); g_object_unref (monitor); g_object_unref (mc); g_object_unref (idle); diff --git a/src/org.gnome.Empathy.Chat.service.in b/src/org.gnome.Empathy.Chat.service.in index 071c96e96..89031f3dc 100644 --- a/src/org.gnome.Empathy.Chat.service.in +++ b/src/org.gnome.Empathy.Chat.service.in @@ -1,3 +1,3 @@ [D-BUS Service] Name=org.gnome.Empathy.Chat -Exec=@bindir@/empathy +Exec=@libexecdir@/empathy-chat-chandler |