]> git.0d.be Git - empathy.git/blobdiff - src/empathy-main-window.c
Merge branch 'undo-close-tab'
[empathy.git] / src / empathy-main-window.c
index a1544fa6db400530017d218ec22dd5d1f23ac08d..031e23d07f9ae0d39f0cef7c8308fd8df124e56d 100644 (file)
@@ -1,7 +1,7 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 /*
  * Copyright (C) 2002-2007 Imendio AB
- * Copyright (C) 2007-2008 Collabora Ltd.
+ * Copyright (C) 2007-2010 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
@@ -65,6 +65,7 @@
 #include "empathy-chatrooms-window.h"
 #include "empathy-event-manager.h"
 #include "empathy-ft-manager.h"
+#include "empathy-migrate-butterfly-logs.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_OTHER
 #include <libempathy/empathy-debug.h>
@@ -121,6 +122,9 @@ typedef struct {
 
        /* Actions that are enabled when there are connected accounts */
        GList                  *actions_connected;
+
+       /* The idle event source to migrate butterfly's logs */
+       guint butterfly_log_migration_contact_added_id;
 } EmpathyMainWindow;
 
 static EmpathyMainWindow *main_window = NULL;
@@ -360,7 +364,7 @@ main_window_error_edit_clicked_cb (GtkButton *button,
        account = g_object_get_data (G_OBJECT (button), "account");
 
        empathy_accounts_dialog_show_application (
-                       gtk_widget_get_screen (GTK_WIDGET (button)), NULL, NULL,
+                       gtk_widget_get_screen (GTK_WIDGET (button)),
                        account, FALSE, FALSE);
 
        main_window_remove_error (window, account);
@@ -422,6 +426,7 @@ main_window_error_display (EmpathyMainWindow *window,
        label = gtk_label_new (str);
        gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
        gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
+       gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
        gtk_widget_show (label);
        g_free (str);
 
@@ -654,6 +659,7 @@ main_window_destroy_cb (GtkWidget         *widget,
                                              window);
        g_object_unref (window->event_manager);
        g_object_unref (window->ui_manager);
+       g_object_unref (window->chatroom_manager);
 
        g_free (window);
 }
@@ -1082,7 +1088,7 @@ main_window_edit_accounts_cb (GtkAction         *action,
                              EmpathyMainWindow *window)
 {
        empathy_accounts_dialog_show_application (gdk_screen_get_default (),
-                       NULL, NULL, NULL, FALSE, FALSE);
+                       NULL, FALSE, FALSE);
 }
 
 static void
@@ -1110,7 +1116,35 @@ static void
 main_window_help_debug_cb (GtkAction         *action,
                           EmpathyMainWindow *window)
 {
-       empathy_debug_window_new (NULL);
+       GdkScreen *screen = gdk_screen_get_default ();
+       GError *error = NULL;
+       gchar *argv[2] = { NULL, };
+       gint i = 0;
+       gchar *path;
+
+       g_return_if_fail (GDK_IS_SCREEN (screen));
+
+       /* Try to run from source directory if possible */
+       path = g_build_filename (g_getenv ("EMPATHY_SRCDIR"), "src",
+                       "empathy-debugger", NULL);
+
+       if (!g_file_test (path, G_FILE_TEST_EXISTS)) {
+               g_free (path);
+               path = g_build_filename (BIN_DIR, "empathy-debugger", NULL);
+       }
+
+       argv[i++] = path;
+
+       gdk_spawn_on_screen (screen, NULL, argv, NULL,
+                       G_SPAWN_SEARCH_PATH,
+                       NULL, NULL, NULL, &error);
+
+       if (error) {
+               g_warning ("Failed to open debug window: %s", error->message);
+               g_error_free (error);
+       }
+
+       g_free (path);
 }
 
 static void
@@ -1132,7 +1166,7 @@ main_window_throbber_button_press_event_cb (GtkWidget         *throbber_ebox,
 
        empathy_accounts_dialog_show_application (
                        gtk_widget_get_screen (GTK_WIDGET (throbber_ebox)),
-                       NULL, NULL, NULL, FALSE, FALSE);
+                       NULL, FALSE, FALSE);
 
        return FALSE;
 }
@@ -1262,6 +1296,18 @@ account_manager_prepared_cb (GObject *source_object,
        g_list_free (accounts);
 }
 
+static void
+main_window_contact_added_cb (EmpathyContactMonitor    *monitor,
+                             EmpathyContact            *contact,
+                             EmpathyMainWindow         *window)
+{
+       if (!empathy_migrate_butterfly_logs (contact)) {
+               g_signal_handler_disconnect (monitor,
+                                            window->butterfly_log_migration_contact_added_id);
+               window->butterfly_log_migration_contact_added_id = 0;
+       }
+}
+
 GtkWidget *
 empathy_main_window_show (void)
 {
@@ -1280,7 +1326,7 @@ empathy_main_window_show (void)
        GSList                   *l;
 
        if (main_window) {
-               empathy_window_present (GTK_WINDOW (main_window->window), TRUE);
+               empathy_window_present (GTK_WINDOW (main_window->window));
                return main_window->window;
        }
 
@@ -1411,6 +1457,8 @@ empathy_main_window_show (void)
                                                           EMPATHY_CONTACT_FEATURE_ALL);
        g_signal_connect (monitor, "contact-presence-changed",
                          G_CALLBACK (main_window_contact_presence_changed_cb), window);
+       window->butterfly_log_migration_contact_added_id =  g_signal_connect (monitor, "contact-added",
+                         G_CALLBACK (main_window_contact_added_cb), window);
        g_object_unref (list_iface);
 
        gtk_widget_show (GTK_WIDGET (window->list_view));