aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am2
-rw-r--r--README13
-rw-r--r--configure.ac1
-rw-r--r--launcher/Makefile.am12
-rw-r--r--libempathy-gtk/empathy-main-window.c2
-rw-r--r--src/Makefile.am20
-rw-r--r--src/empathy-main.c (renamed from launcher/empathy-launcher.c)81
7 files changed, 98 insertions, 33 deletions
diff --git a/Makefile.am b/Makefile.am
index bf4cebf43..161167337 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 ab94d8f1b..0bc5d3056 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 42a162120..708b14b28 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 b0662539d..000000000
--- 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 77d5409f8..f293f55c3 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 000000000..4fe517deb
--- /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
index f6851f95c..15f4c504f 100644
--- a/launcher/empathy-launcher.c
+++ b/src/empathy-main.c
@@ -21,16 +21,25 @@
*/
#include <config.h>
+
#include <stdlib.h>
+
#include <glib.h>
+#include <gtk/gtk.h>
#include <libtelepathy/tp-helpers.h>
+
+#include <libmissioncontrol/mc-account.h>
#include <libmissioncontrol/mc-account-monitor.h>
#include <libmissioncontrol/mission-control.h>
+#include <libempathy/empathy-session.h>
#include <libempathy/gossip-debug.h>
+#include <libempathy-gtk/empathy-main-window.h>
+#include <libempathy-gtk/gossip-stock.h>
+#include <libempathy-gtk/gossip-accounts-dialog.h>
-#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;
}