From 1a6f06d4863f61b652f91f703b491bb6663d1c7a Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Wed, 2 May 2007 14:06:37 +0000 Subject: [PATCH] [darcs-to-svn @ Replace the launcher by the main program with tray icon] svn path=/trunk/; revision=25 --- Makefile.am | 2 +- README | 13 ++- configure.ac | 1 + launcher/Makefile.am | 12 --- libempathy-gtk/empathy-main-window.c | 2 +- src/Makefile.am | 20 +++++ .../empathy-launcher.c => src/empathy-main.c | 81 ++++++++++++++++--- 7 files changed, 98 insertions(+), 33 deletions(-) delete mode 100644 launcher/Makefile.am create mode 100644 src/Makefile.am rename launcher/empathy-launcher.c => src/empathy-main.c (61%) 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/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/launcher/empathy-launcher.c b/src/empathy-main.c similarity index 61% rename from launcher/empathy-launcher.c rename to src/empathy-main.c index f6851f95..15f4c504 100644 --- a/launcher/empathy-launcher.c +++ b/src/empathy-main.c @@ -21,16 +21,25 @@ */ #include + #include + #include +#include #include + +#include #include #include +#include #include +#include +#include +#include -#define DEBUG_DOMAIN "Launcher" +#define DEBUG_DOMAIN "Empathy" static void error_cb (MissionControl *mc, GError *error, @@ -38,9 +47,10 @@ static void error_cb (MissionControl *mc, 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, @@ -94,33 +104,82 @@ start_mission_control (MissionControl *mc) 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[]) { - GMainLoop *main_loop; + GList *accounts; + GtkStatusIcon *icon; + GtkWidget *window; MissionControl *mc; McAccountMonitor *monitor; - g_type_init (); + 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 (); + } - main_loop = g_main_loop_new (NULL, FALSE); + /* 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); - g_main_loop_run (main_loop); + gtk_main (); g_object_unref (monitor); g_object_unref (mc); + g_object_unref (icon); - return 0; + return EXIT_SUCCESS; } -- 2.39.2