From: Xavier Claessens Date: Wed, 2 May 2007 14:06:37 +0000 (+0000) Subject: [darcs-to-svn @ Replace the launcher by the main program with tray icon] X-Git-Url: https://git.0d.be/?p=empathy.git;a=commitdiff_plain;h=1a6f06d4863f61b652f91f703b491bb6663d1c7a [darcs-to-svn @ Replace the launcher by the main program with tray icon] svn path=/trunk/; revision=25 --- diff --git a/Makefile.am b/Makefile.am index bf4cebf4..16116733 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = po profiles pixmaps libempathy libempathy-gtk launcher accounts contact-list chat +SUBDIRS = po profiles pixmaps libempathy libempathy-gtk launcher accounts contact-list chat src DISTCHECK_CONFIGURE_FLAGS = \ --disable-scrollkeeper diff --git a/README b/README index ab94d8f1..0bc5d305 100644 --- a/README +++ b/README @@ -4,12 +4,9 @@ How to use empathy ? $ ./autogen $ make && make install -2) Start the MC -$ empathy-launcher -This will start MC and connect all enabled accounts. If you start a private chat -or someone is saying something to you, empathy-chat will be started -automagicaly and display a chat UI for your conversation. - -3) To see the contact list and setting accounts -$ empathy-contact-list +2) Start empathy +$ empathy +This will start MC, connect all enabled accounts and add a GtkStatusIcon. If you +start a private chat or someone is saying something to you, empathy-chat will be +started automagicaly and display a chat UI for your conversation. diff --git a/configure.ac b/configure.ac index 42a16212..708b14b2 100644 --- a/configure.ac +++ b/configure.ac @@ -71,5 +71,6 @@ AC_OUTPUT([ accounts/Makefile contact-list/Makefile chat/Makefile + src/Makefile ]) diff --git a/launcher/Makefile.am b/launcher/Makefile.am deleted file mode 100644 index b0662539..00000000 --- a/launcher/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -INCLUDES = \ - -I$(top_srcdir) \ - $(EMPATHY_CFLAGS) \ - $(WARN_CFLAGS) - -bin_PROGRAMS = empathy-launcher -empathy_launcher_SOURCES = empathy-launcher.c -empathy_launcher_LDADD = \ - $(top_builddir)/libempathy/libempathy.la \ - $(EMPATHY_LIBS) - - diff --git a/launcher/empathy-launcher.c b/launcher/empathy-launcher.c deleted file mode 100644 index f6851f95..00000000 --- a/launcher/empathy-launcher.c +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- 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 - -#define DEBUG_DOMAIN "Launcher" - -static void error_cb (MissionControl *mc, - GError *error, - gpointer data); -static void service_ended_cb (MissionControl *mc, - gpointer user_data); -static void start_mission_control (MissionControl *mc); - - - - -static void -error_cb (MissionControl *mc, - GError *error, - gpointer data) -{ - if (error) { - gossip_debug (DEBUG_DOMAIN, "Error: %s", error->message); - } -} - -static void -service_ended_cb (MissionControl *mc, - gpointer user_data) -{ - gossip_debug (DEBUG_DOMAIN, "Mission Control stopped"); -} - -static void -account_enabled_cb (McAccountMonitor *monitor, - gchar *unique_name, - MissionControl *mc) -{ - gossip_debug (DEBUG_DOMAIN, "Account enabled: %s", unique_name); - start_mission_control (mc); -} - -static void -start_mission_control (MissionControl *mc) -{ - McPresence presence; - - presence = mission_control_get_presence_actual (mc, NULL); - - if (presence != MC_PRESENCE_UNSET && - presence != MC_PRESENCE_OFFLINE) { - /* MC is already running and online, nothing to do */ - return; - } - - gossip_debug (DEBUG_DOMAIN, "Starting Mission Control..."); - - /* FIXME: Save/Restore status message */ - mission_control_set_presence (mc, MC_PRESENCE_AVAILABLE, - NULL, - (McCallback) error_cb, - NULL); - - mission_control_connect_all_with_default_presence (mc, - (McCallback) error_cb, - NULL); -} - -int -main (int argc, char *argv[]) -{ - GMainLoop *main_loop; - MissionControl *mc; - McAccountMonitor *monitor; - - g_type_init (); - - main_loop = g_main_loop_new (NULL, FALSE); - monitor = mc_account_monitor_new (); - mc = mission_control_new (tp_get_bus ()); - - g_signal_connect (monitor, "account-enabled", - G_CALLBACK (account_enabled_cb), - mc); - g_signal_connect (mc, "ServiceEnded", - G_CALLBACK (service_ended_cb), - NULL); - - start_mission_control (mc); - - g_main_loop_run (main_loop); - - g_object_unref (monitor); - g_object_unref (mc); - - return 0; -} - diff --git a/libempathy-gtk/empathy-main-window.c b/libempathy-gtk/empathy-main-window.c index 77d5409f..f293f55c 100644 --- a/libempathy-gtk/empathy-main-window.c +++ b/libempathy-gtk/empathy-main-window.c @@ -44,7 +44,7 @@ #include "gossip-preferences.h" #include "gossip-accounts-dialog.h" -#define DEBUG_DOMAIN "EmpathyMainWindow" +#define DEBUG_DOMAIN "MainWindow" /* Minimum width of roster window if something goes wrong. */ #define MIN_WIDTH 50 diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 00000000..4fe517de --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,20 @@ +AM_CPPFLAGS = \ + -I$(top_srcdir) \ + -DPREFIX="\"$(prefix)"\" \ + -DSYSCONFDIR=\""$(sysconfdir)"\" \ + -DDATADIR=\""$(datadir)"\" \ + -DLIBDIR=\""$(libdir)"\" \ + $(EMPATHY_CFLAGS) \ + $(WARN_CFLAGS) + +bin_PROGRAMS = empathy + +empathy_SOURCES = \ + empathy-main.c + +empathy_LDADD = \ + $(top_builddir)/libempathy/libempathy.la \ + $(top_builddir)/libempathy-gtk/libempathy-gtk.la \ + $(EMPATHY_LIBS) + + diff --git a/src/empathy-main.c b/src/empathy-main.c new file mode 100644 index 00000000..15f4c504 --- /dev/null +++ b/src/empathy-main.c @@ -0,0 +1,185 @@ +/* -*- 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 + +#define DEBUG_DOMAIN "Empathy" + +static void error_cb (MissionControl *mc, + GError *error, + gpointer data); +static void service_ended_cb (MissionControl *mc, + gpointer user_data); +static void start_mission_control (MissionControl *mc); +static void destroy_cb (GtkWidget *window, + gpointer user_data); +static void icon_activate_cb (GtkStatusIcon *status_icon, + GtkWidget *window); + +static void +error_cb (MissionControl *mc, + GError *error, + gpointer data) +{ + if (error) { + gossip_debug (DEBUG_DOMAIN, "Error: %s", error->message); + } +} + +static void +service_ended_cb (MissionControl *mc, + gpointer user_data) +{ + gossip_debug (DEBUG_DOMAIN, "Mission Control stopped"); +} + +static void +account_enabled_cb (McAccountMonitor *monitor, + gchar *unique_name, + MissionControl *mc) +{ + gossip_debug (DEBUG_DOMAIN, "Account enabled: %s", unique_name); + start_mission_control (mc); +} + +static void +start_mission_control (MissionControl *mc) +{ + McPresence presence; + + presence = mission_control_get_presence_actual (mc, NULL); + + if (presence != MC_PRESENCE_UNSET && + presence != MC_PRESENCE_OFFLINE) { + /* MC is already running and online, nothing to do */ + return; + } + + gossip_debug (DEBUG_DOMAIN, "Starting Mission Control..."); + + /* FIXME: Save/Restore status message */ + mission_control_set_presence (mc, MC_PRESENCE_AVAILABLE, + NULL, + (McCallback) error_cb, + NULL); + + mission_control_connect_all_with_default_presence (mc, + (McCallback) error_cb, + NULL); +} + +static void +destroy_cb (GtkWidget *window, + gpointer user_data) +{ + gossip_stock_finalize (); + empathy_session_finalize (); + gtk_main_quit (); +} + +static void +icon_activate_cb (GtkStatusIcon *status_icon, + GtkWidget *window) +{ + if (GTK_WIDGET_VISIBLE (window)) { + gtk_widget_hide (window); + } else { + gtk_widget_show (window); + } +} + +int +main (int argc, char *argv[]) +{ + GList *accounts; + GtkStatusIcon *icon; + GtkWidget *window; + MissionControl *mc; + McAccountMonitor *monitor; + + gtk_init (&argc, &argv); + + /* FIXME: This is a horrible hack */ + gossip_stock_init (gtk_window_new (GTK_WINDOW_TOPLEVEL)); + + /* Setting up the main window */ + window = empathy_main_window_show (); + g_signal_connect (window, "destroy", + G_CALLBACK (destroy_cb), + NULL); + g_signal_connect (window, "delete-event", + G_CALLBACK (gtk_widget_hide_on_delete), + NULL); + + /* Setting up the tray icon */ + icon = gtk_status_icon_new_from_stock (GOSSIP_STOCK_AVAILABLE); + gtk_status_icon_set_tooltip (icon, "Empathy - click here to show/hide the main window"); + gtk_status_icon_set_visible (icon, TRUE); + g_signal_connect (icon, "activate", + G_CALLBACK (icon_activate_cb), + window); + + /* Show the accounts dialog if there is no enabled accounts */ + accounts = mc_accounts_list_by_enabled (TRUE); + if (accounts) { + mc_accounts_list_free (accounts); + } else { + gossip_accounts_dialog_show (); + } + + /* Setting up MC */ + monitor = mc_account_monitor_new (); + mc = mission_control_new (tp_get_bus ()); + g_signal_connect (monitor, "account-enabled", + G_CALLBACK (account_enabled_cb), + mc); + g_signal_connect (mc, "ServiceEnded", + G_CALLBACK (service_ended_cb), + NULL); + start_mission_control (mc); + + gtk_main (); + + g_object_unref (monitor); + g_object_unref (mc); + g_object_unref (icon); + + return EXIT_SUCCESS; +} +