From bb465d15f0c6c963556801cca5164f6d9071437b Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Sun, 11 Nov 2007 14:42:34 +0000 Subject: [PATCH] Move chats to its own process. 2007-11-11 Xavier Claessens * 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. svn path=/trunk/; revision=429 --- ChangeLog | 9 ++ libempathy-gtk/empathy-chat.c | 3 - src/Makefile.am | 5 +- src/empathy-call-chandler.c | 16 +++ src/empathy-chat-chandler.c | 135 ++++++++++++++++++++++++++ src/empathy.c | 75 +------------- src/org.gnome.Empathy.Chat.service.in | 2 +- 7 files changed, 168 insertions(+), 77 deletions(-) create mode 100644 src/empathy-chat-chandler.c diff --git a/ChangeLog b/ChangeLog index ce861c24..de1f761b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-11-11 Xavier Claessens + + * 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 * src/org.gnome.Empathy.Call.service.in: diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index 944bc10b..edff73a3 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 21bd6324..ede2b2a0 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 bb88747f..8833bcbc 100644 --- a/src/empathy-call-chandler.c +++ b/src/empathy-call-chandler.c @@ -18,10 +18,16 @@ * Authors: Elliot Fairweather */ +#include + #include +#include +#include #include +#include + #include #include @@ -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 00000000..c178f7b7 --- /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 + */ + +#include + +#include + +#include +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#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 e23795f7..fef01b80 100644 --- a/src/empathy.c +++ b/src/empathy.c @@ -31,32 +31,21 @@ #include #include -#include -#include #include #include #include -#include -#include -#include -#include -#include -#include -#include #include #include +#include +#include + #include #include #include -#include -#include #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) @@ -99,56 +88,6 @@ account_enabled_cb (McAccountMonitor *monitor, start_mission_control (idle); } -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) { @@ -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 071c96e9..89031f3d 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 -- 2.39.2