Fix bug 3895: Port from libnm-util/libnm-glib to libnm
[claws.git] / src / main.c
index ed7bf5c0c96c2b5602979f31692202117ead0067..c9590a7754147c7fa6f50047719e506a6f0b71b0 100644 (file)
 static gboolean went_offline_nm;
 #endif
 
-#if !defined(NM_CHECK_VERSION)
-#define NM_CHECK_VERSION(x,y,z) 0
-#endif
 
 #ifdef HAVE_DBUS_GLIB
 static DBusGProxy *awn_proxy = NULL;
@@ -393,8 +390,8 @@ static gboolean migrate_old_config(const gchar *old_cfg_dir, const gchar *new_cf
                        G_CALLBACK(chk_update_val), &backup);
 
        if (alertpanel_full(_("Migration of configuration"), message,
-                       GTK_STOCK_NO, "+" GTK_STOCK_YES, NULL, FALSE,
-                       keep_backup_chk, ALERT_QUESTION, G_ALERTDEFAULT) != G_ALERTALTERNATE) {
+                       GTK_STOCK_NO, GTK_STOCK_YES, NULL, ALERTFOCUS_SECOND, FALSE,
+                       keep_backup_chk, ALERT_QUESTION) != G_ALERTALTERNATE) {
                return FALSE;
        }
        
@@ -864,17 +861,17 @@ static void main_dump_features_list(gboolean show_debug_only)
 }
 
 #ifdef HAVE_DBUS_GLIB
-static guint dbus_item_hook_id = -1;
-static guint dbus_folder_hook_id = -1;
+static gulong dbus_item_hook_id = HOOK_NONE;
+static gulong dbus_folder_hook_id = HOOK_NONE;
 
 static void uninstall_dbus_status_handler(void)
 {
        if(awn_proxy)
                g_object_unref(awn_proxy);
        awn_proxy = NULL;
-       if (dbus_item_hook_id != -1)
+       if (dbus_item_hook_id != HOOK_NONE)
                hooks_unregister_hook(FOLDER_ITEM_UPDATE_HOOKLIST, dbus_item_hook_id);
-       if (dbus_folder_hook_id != -1)
+       if (dbus_folder_hook_id != HOOK_NONE)
                hooks_unregister_hook(FOLDER_UPDATE_HOOKLIST, dbus_folder_hook_id);
 }
 
@@ -948,14 +945,14 @@ static void install_dbus_status_handler(void)
                        "/com/google/code/Awn",
                        "com.google.code.Awn");
        dbus_item_hook_id = hooks_register_hook (FOLDER_ITEM_UPDATE_HOOKLIST, dbus_status_update_item_hook, NULL);
-       if (dbus_item_hook_id == -1) {
+       if (dbus_item_hook_id == HOOK_NONE) {
                g_warning("Failed to register folder item update hook");
                uninstall_dbus_status_handler();
                return;
        }
 
        dbus_folder_hook_id = hooks_register_hook (FOLDER_UPDATE_HOOKLIST, dbus_status_update_folder_hook, NULL);
-       if (dbus_folder_hook_id == -1) {
+       if (dbus_folder_hook_id == HOOK_NONE) {
                g_warning("Failed to register folder update hook");
                uninstall_dbus_status_handler();
                return;
@@ -987,12 +984,13 @@ int main(int argc, char *argv[])
        FolderView *folderview;
        GdkPixbuf *icon;
        gboolean crash_file_present = FALSE;
-       gint num_folder_class = 0;
+       guint num_folder_class = 0;
        gboolean asked_for_migration = FALSE;
        gboolean start_done = TRUE;
        GSList *plug_list = NULL;
        gboolean never_ran = FALSE;
        gboolean mainwin_shown = FALSE;
+       gint ret;
 
        START_TIMING("startup");
 
@@ -1106,17 +1104,10 @@ int main(int argc, char *argv[])
                        "/org/freedesktop/NetworkManager",
                        "org.freedesktop.NetworkManager");
                if (nm_proxy) {
-#if NM_CHECK_VERSION(0,8,992)
                        dbus_g_proxy_add_signal(nm_proxy, "StateChanged", G_TYPE_UINT, G_TYPE_INVALID);
                        dbus_g_proxy_connect_signal(nm_proxy, "StateChanged",
                                G_CALLBACK(networkmanager_state_change_cb),
                                NULL,NULL);
-#else
-                       dbus_g_proxy_add_signal(nm_proxy, "StateChange", G_TYPE_UINT, G_TYPE_INVALID);
-                       dbus_g_proxy_connect_signal(nm_proxy, "StateChange",
-                               G_CALLBACK(networkmanager_state_change_cb),
-                               NULL,NULL);
-#endif
                }
 #endif
                install_dbus_status_handler();
@@ -1330,10 +1321,8 @@ int main(int argc, char *argv[])
        folderview_freeze(mainwin->folderview);
        folder_item_update_freeze();
 
-       passwd_store_read_config();
-
-       if (prefs_update_config_version_password_store() < 0) {
-               debug_print("Password store configuration file version upgrade failed, exiting\n");
+       if ((ret = passwd_store_read_config()) < 0) {
+               debug_print("Password store configuration file version upgrade failed (%d), exiting\n", ret);
 #ifdef G_OS_WIN32
                win32_close_log();
 #endif
@@ -1358,12 +1347,23 @@ int main(int argc, char *argv[])
 #endif 
        /* If we can't read a folder list or don't have accounts,
         * it means the configuration's not done. Either this is
-        * a brand new install, either a failed/refused migration.
-        * So we'll start the wizard.
+        * a brand new install, a failed/refused migration,
+        * or a failed config_version upgrade.
         */
-       if (folder_read_list() < 0) {
+       if ((ret = folder_read_list()) < 0) {
+               debug_print("Folderlist read failed (%d)\n", ret);
                prefs_destroy_cache();
                
+               if (ret == -2) {
+                       /* config_version update failed in folder_read_list(). We
+                        * do not want to run the wizard, just exit. */
+                       debug_print("Folderlist version upgrade failed, exiting\n");
+#ifdef G_OS_WIN32
+                       win32_close_log();
+#endif
+                       exit(203);
+               }
+
                /* if run_wizard returns FALSE it's because it's
                 * been cancelled. We can't do much but exit.
                 * however, if the user was asked for a migration,
@@ -2086,8 +2086,7 @@ static void initial_processing(FolderItem *item, gpointer data)
                              : _("top level folder"));
        g_free(buf);
 
-       
-       if (item->prefs->enable_processing) {
+       if (folder_item_parent(item) != NULL && item->prefs->enable_processing) {
                item->processing_pending = TRUE;
                folder_item_apply_processing(item);
                item->processing_pending = FALSE;
@@ -2168,7 +2167,7 @@ void app_will_exit(GtkWidget *widget, gpointer data)
        if (prefs_common.warn_queued_on_exit && procmsg_have_queued_mails_fast()) {
                if (alertpanel(_("Queued messages"),
                               _("Some unsent messages are queued. Exit now?"),
-                              GTK_STOCK_CANCEL, GTK_STOCK_OK, NULL)
+                              GTK_STOCK_CANCEL, GTK_STOCK_OK, NULL, ALERTFOCUS_FIRST)
                    != G_ALERTALTERNATE) {
                        main_window_popup(mainwin);
                        sc_exiting = FALSE;
@@ -2980,14 +2979,9 @@ gboolean networkmanager_is_online(GError **error)
                g_propagate_error(error, tmp_error);
                return TRUE;
        }
-#if NM_CHECK_VERSION(0,8,992)
        return (state == NM_STATE_CONNECTED_LOCAL ||
                state == NM_STATE_CONNECTED_SITE ||
                state == NM_STATE_CONNECTED_GLOBAL ||
                state == NM_STATE_UNKNOWN);
-#else
-       return (state == NM_STATE_CONNECTED ||
-               state == NM_STATE_UNKNOWN);
-#endif
 }
 #endif