2007-08-22 Armin Burgmeier <armin@openismus.com>
authorArmin Burgmeier <armin@openismus.com>
Wed, 22 Aug 2007 14:07:16 +0000 (14:07 +0000)
committerArmin Burgmeier <armin@openismus.com>
Wed, 22 Aug 2007 14:07:16 +0000 (14:07 +0000)
* src/widgets/modest-account-view.c: Fix for bora by using
MODEST_HAVE_HILDON0_WIDGETS instead of MODEST_HILDON_VERSION_0. The
latter seems not be used anymore.

* src/maemo/easysetup/modest-easysetup-provider-combo-box.c: Some
minor optimizations.

* src/maemo/modest-main-window.c: Update menu items when the default
account changes so that the current default account is always bolded.
This fixes projects.maemo.org bug NB#66173.

pmo-trunk-r3044

ChangeLog2
src/maemo/easysetup/modest-easysetup-provider-combo-box.c
src/maemo/modest-main-window.c
src/widgets/modest-account-view.c

index e57cb4c..39e56d9 100644 (file)
@@ -1,3 +1,16 @@
+2007-08-22 Armin Burgmeier  <armin@openismus.com>
+
+       * src/widgets/modest-account-view.c: Fix for bora by using
+       MODEST_HAVE_HILDON0_WIDGETS instead of MODEST_HILDON_VERSION_0. The
+       latter seems not be used anymore.
+
+       * src/maemo/easysetup/modest-easysetup-provider-combo-box.c: Some
+       minor optimizations.
+
+       * src/maemo/modest-main-window.c: Update menu items when the default
+       account changes so that the current default account is always bolded.
+       This fixes maemo.projects.org bug NB#66173.
+
 2007-08-17  Murray Cumming  <murrayc@murrayc.com>
 
        * src/dbus_api/modest-dbus-callbacks.c:
index d4fcdca..caf321f 100644 (file)
@@ -175,39 +175,34 @@ void easysetup_provider_combo_box_fill (EasysetupProviderComboBox *combobox, Mod
                while(iter_provider_names && *iter_provider_names && iter_provider_ids && *iter_provider_ids)
                {
                        const gchar* provider_name = *iter_provider_names;
-                       if(!provider_name)
-                               continue;
-                               
                        const gchar* provider_id = *iter_provider_ids;
-                       if(!provider_id)
-                               continue;
-                       
+
                        /* Prevent duplicate providers: */
                        if (g_slist_find_custom (provider_ids_used_already, 
                                provider_id, (GCompareFunc)strcmp) == NULL) {
                                /* printf("debug: provider_name=%s\n", provider_name); */
-                       
+
                                /* Add the row: */
                                GtkTreeIter iter;
                                gtk_list_store_append (liststore, &iter);
-                               
+
                                gtk_list_store_set(liststore, &iter, 
                                        MODEL_COL_ID, provider_id, 
                                        MODEL_COL_NAME, provider_name, -1);
-                               
-                               provider_ids_used_already = g_slist_append (
+
+                               provider_ids_used_already = g_slist_prepend (
                                        provider_ids_used_already, (gpointer)g_strdup (provider_id));
                        }
-                               
+
                        ++iter_provider_names;
-                       ++iter_provider_ids;    
+                       ++iter_provider_ids;
                }
-               
+
                /* Free the result of modest_presets_get_providers()
                 * as specified by its documentation: */
                g_strfreev (provider_names);
                g_strfreev (provider_ids);
-               
+
                iter_ids = g_slist_next (iter_ids);
        }
        
index 541ce8c..224d719 100644 (file)
@@ -96,6 +96,9 @@ static void restore_settings (ModestMainWindow *self,
 
 static void save_state (ModestWindow *self);
 
+static void
+update_menus (ModestMainWindow* self);
+
 static void modest_main_window_show_toolbar   (ModestWindow *window,
                                               gboolean show_toolbar);
 
@@ -109,10 +112,20 @@ static void on_queue_changed   (ModestMailOperationQueue *queue,
 
 static gboolean on_zoom_minus_plus_not_implemented (ModestWindow *window);
 
-static void account_number_changed            (TnyAccountStore *account_store, 
-/*                                            const gchar *account_name,  */
-                                              TnyAccount *account,
-                                              gpointer user_data);
+static void
+on_account_inserted (TnyAccountStore *accoust_store,
+                     TnyAccount *account,
+                     gpointer user_data);
+
+static void
+on_account_removed (TnyAccountStore *accoust_store,
+                    TnyAccount *account,
+                    gpointer user_data);
+
+static void
+on_account_changed (ModestAccountMgr* mgr,
+                    const gchar* account,
+                    gpointer user_data);
 
 static gboolean on_inner_widgets_key_pressed  (GtkWidget *widget,
                                               GdkEventKey *event,
@@ -451,166 +464,442 @@ save_state (ModestWindow *window)
                                   MODEST_CONF_FOLDER_VIEW_KEY);
 }
 
-static void
-wrap_in_scrolled_window (GtkWidget *win, GtkWidget *widget)
+static gint
+compare_display_names (ModestAccountData *a,
+                      ModestAccountData *b)
 {
-       if (!gtk_widget_set_scroll_adjustments (widget, NULL, NULL))
-               gtk_scrolled_window_add_with_viewport
-                       (GTK_SCROLLED_WINDOW(win), widget);
-       else
-               gtk_container_add (GTK_CONTAINER(win),
-                                  widget);
+       return strcmp (a->display_name, b->display_name);
 }
 
+static void
+update_menus (ModestMainWindow* self)
+{      
+       GSList *account_names, *iter, *accounts;
+       ModestMainWindowPrivate *priv;
+       ModestWindowPrivate *parent_priv;
+       ModestAccountMgr *mgr;
+       gint i, num_accounts;
+       GtkActionGroup *action_group;
+       GList *groups;
+       gchar *default_account;
+       GtkWidget *send_receive_button, *item;
+       GtkAction *send_receive_all = NULL;
 
-/* static gboolean */
-/* on_delete_event (GtkWidget *widget, GdkEvent  *event, ModestMainWindow *self) */
-/* { */
-/*     modest_window_save_state (MODEST_WINDOW(self)); */
-/*     return FALSE; */
-/* } */
+       priv = MODEST_MAIN_WINDOW_GET_PRIVATE (self);
+       parent_priv = MODEST_WINDOW_GET_PRIVATE (self);
 
-/* static void */
-/* on_sendqueue_error_happened (TnySendQueue *self, TnyHeader *header, TnyMsg *msg, GError *err, ModestMainWindow *user_data) */
-/* { */
-/*     if (err) { */
-/*             printf ("DEBUG: %s: err->code=%d, err->message=%s\n", __FUNCTION__, err->code, err->message); */
+       /* Get enabled account IDs */
+       mgr = modest_runtime_get_account_mgr ();
+       account_names = modest_account_mgr_account_names (mgr, TRUE);
+       iter = account_names;
+       accounts = NULL;
 
-/*             if (err->code == TNY_ACCOUNT_ERROR_TRY_CONNECT_USER_CANCEL) */
-/*                     /\* Don't show waste the user's time by showing him a dialog telling him */
-/*                      * that he has just cancelled something: *\/ */
-/*                     return; */
-/*     } */
+       while (iter) {
+               ModestAccountData *account_data = 
+                       modest_account_mgr_get_account_data (mgr, (gchar*) iter->data);
+               accounts = g_slist_prepend (accounts, account_data);
 
-/*     /\* Get the server name: *\/ */
-/*     const gchar* server_name = NULL; */
-       
-/*     TnyCamelTransportAccount* server_account = tny_camel_send_queue_get_transport_account ( */
-/*             TNY_CAMEL_SEND_QUEUE (self)); */
-/*     if (server_account) { */
-/*             server_name = tny_account_get_hostname (TNY_ACCOUNT (server_account)); */
-                       
-/*             g_object_unref (server_account); */
-/*             server_account = NULL; */
-/*     } */
-       
-/*     if (!server_name) */
-/*             server_name = _("Unknown Server");       */
+               iter = iter->next;
+       }
+       modest_account_mgr_free_account_names (account_names);
+       account_names = NULL;
 
-/*     /\* Show the appropriate message text for the GError: *\/ */
-/*     gchar *message = NULL; */
-/*     if (err) { */
-/*             switch (err->code) { */
-/*                     case TNY_TRANSPORT_ACCOUNT_ERROR_SEND_HOST_LOOKUP_FAILED: */
-/*                             message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name); */
-/*                             break; */
-/*                     case TNY_TRANSPORT_ACCOUNT_ERROR_SEND_SERVICE_UNAVAILABLE: */
-/*                             message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name); */
-/*                             break; */
-/*                     case TNY_TRANSPORT_ACCOUNT_ERROR_SEND_AUTHENTICATION_NOT_SUPPORTED: */
-/*                             /\* TODO: This logical ID seems more suitable for a wrong username or password than for a  */
-/*                              * wrong authentication method. The user is unlikely to guess at the real cause. */
-/*                              *\/ */
-/*                             message = g_strdup_printf (_("eemev_ni_ui_smtp_authentication_fail_error"), server_name); */
-/*                             break; */
-/*                     case TNY_TRANSPORT_ACCOUNT_ERROR_SEND: */
-/*                             /\* TODO: Tinymail is still sending this sometimes when it should  */
-/*                              * send TNY_ACCOUNT_ERROR_TRY_CONNECT_USER_CANCEL. *\/ */
-/*                     default: */
-/*                             message = g_strdup (_("emev_ib_ui_smtp_send_error")); */
-/*                             break; */
-/*             } */
-/*     } else { */
-/*             message = g_strdup (_("emev_ib_ui_smtp_send_error")); */
-/*     } */
-       
-/*     modest_maemo_show_information_note_and_forget (GTK_WINDOW (user_data), message); */
-/*     g_free (message); */
-       
-/*     /\* TODO: Offer to remove the message, to avoid messages in future? *\/ */
-/*     /\* */
-/*     TnyFolder *outbox = tny_send_queue_get_outbox (queue); */
-/*     tny_folder_remove_msg (outbox, header, NULL); */
-/*     tny_folder_sync (outbox, TRUE, NULL); */
-/*     g_object_unref (outbox); */
-/*     *\/ */
-/* } */
+       /* Order the list of accounts by its display name */
+       accounts = g_slist_sort (accounts, (GCompareFunc) compare_display_names);
+       num_accounts = g_slist_length (accounts);
 
-typedef struct {
-       TnySendQueue *queue;
-       guint signal;
-} QueueErrorSignal;
+       send_receive_all = gtk_ui_manager_get_action (parent_priv->ui_manager, 
+                                                     "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsSendReceiveAllMenu");
+       gtk_action_set_visible (send_receive_all, num_accounts > 1);
 
-static void
-modest_main_window_cleanup_queue_error_signals (ModestMainWindow *self)
-{
-       ModestMainWindowPrivate *priv = MODEST_MAIN_WINDOW_GET_PRIVATE (self);
+       /* Delete old send&receive popup items. We can not just do a
+          menu_detach because it does not work well with
+          tap_and_hold */
+       if (priv->accounts_popup)
+               gtk_container_foreach (GTK_CONTAINER (priv->accounts_popup), 
+                                      (GtkCallback) gtk_widget_destroy, NULL);
 
-       GList *oerrsignals = priv->queue_err_signals;
-       while (oerrsignals) {
-               QueueErrorSignal *esignal = (QueueErrorSignal *) oerrsignals->data;
-               g_signal_handler_disconnect (esignal->queue, esignal->signal);
-               g_slice_free (QueueErrorSignal, esignal);
-               oerrsignals = g_list_next (oerrsignals);
+       /* Delete old entries in the View menu. Do not free groups, it
+          belongs to Gtk+ */
+       groups = gtk_ui_manager_get_action_groups (parent_priv->ui_manager);
+       while (groups) {
+               if (!strcmp (MODEST_MAIN_WINDOW_ACTION_GROUP_ADDITIONS,
+                            gtk_action_group_get_name (GTK_ACTION_GROUP (groups->data)))) {
+                       gtk_ui_manager_remove_action_group (parent_priv->ui_manager, 
+                                                           GTK_ACTION_GROUP (groups->data));
+                       groups = NULL;
+                       /* Remove uis */
+                       if (priv->merge_ids) {
+                               for (i = 0; i < priv->merge_ids->len; i++)
+                                       gtk_ui_manager_remove_ui (parent_priv->ui_manager, priv->merge_ids->data[i]);
+                               g_byte_array_free (priv->merge_ids, TRUE);
+                       }
+                       /* We need to call this in order to ensure
+                          that the new actions are added in the right
+                          order (alphabetical */
+                       gtk_ui_manager_ensure_update (parent_priv->ui_manager);
+               } else 
+                       groups = g_list_next (groups);
        }
-       g_list_free (priv->queue_err_signals);
-       priv->queue_err_signals = NULL;
-}
+       priv->merge_ids = g_byte_array_sized_new (num_accounts);
 
-/* static void */
-/* on_account_store_connecting_finished (TnyAccountStore *store, ModestMainWindow *self) */
-/* { */
-/*     ModestMainWindowPrivate *priv = MODEST_MAIN_WINDOW_GET_PRIVATE (self); */
+       /* Get send receive button */
+       send_receive_button = gtk_ui_manager_get_widget (parent_priv->ui_manager,
+                                                         "/ToolBar/ToolbarSendReceive");
 
-/*     /\* When going online, do the equivalent of pressing the send/receive button,  */
-/*      * as per the specification: */
-/*      * (without the check for >0 accounts, though that is not specified): *\/ */
+       /* Create the menu */
+       if (num_accounts > 1) {
+               if (!priv->accounts_popup)
+                       priv->accounts_popup = gtk_menu_new ();
+               item = gtk_menu_item_new_with_label (_("mcen_me_toolbar_sendreceive_all"));
+               gtk_menu_shell_append (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
+               g_signal_connect (G_OBJECT (item), 
+                                 "activate", 
+                                 G_CALLBACK (on_send_receive_csm_activated),
+                                 NULL);
+               item = gtk_separator_menu_item_new ();
+               gtk_menu_shell_prepend (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
+       }
 
-/*     TnyDevice *device = tny_account_store_get_device (store); */
+       /* Create a new action group */
+       default_account = modest_account_mgr_get_default_account (mgr);
+       action_group = gtk_action_group_new (MODEST_MAIN_WINDOW_ACTION_GROUP_ADDITIONS);
+       for (i = 0; i < num_accounts; i++) {
+               gchar *display_name = NULL;
+               
+               ModestAccountData *account_data = (ModestAccountData *) g_slist_nth_data (accounts, i);
 
-/*     /\* modest_folder_view_update_model (MODEST_FOLDER_VIEW (priv->folder_view), store); *\/ */
-       
-/*     /\* Check that we are really online. */
-/*      * This signal should not be emitted when we are not connected,  */
-/*      * but it seems to happen sometimes: *\/ */
-/*      if (!tny_device_is_online (device)) */
-/*             return; */
-               
-/*     const gchar *iap_id = tny_maemo_conic_device_get_current_iap_id (TNY_MAEMO_CONIC_DEVICE (device)); */
-/*     printf ("DEBUG: %s: connection id=%s\n", __FUNCTION__, iap_id); */
-       
-/*     /\* Stop the existing send queues: *\/ */
-/*     modest_runtime_remove_all_send_queues (); */
-       
-/*     /\* Create the send queues again, using the appropriate transport accounts  */
-/*      * for this new connection. */
-/*      * This could be the first time that they are created if this is the first  */
-/*      * connection. *\/ */
-/*     /\* TODO: Does this really destroy the TnySendQueues and their threads */
-/*      * We do not want 2 TnySendQueues to exist with the same underlying  */
-/*      * outbox directory. *\/ */
+               /* Create display name. The UI specification specifies a different format string 
+                * to use for the default account, though both seem to be "%s", so 
+                * I don't see what the point is. murrayc. */
+               if (default_account && account_data->account_name && 
+                       !(strcmp (default_account, account_data->account_name) == 0)) {
+                       display_name = g_strdup_printf (_("mcen_me_toolbar_sendreceive_default"), 
+                                                       account_data->display_name);
+               }
+               else {
+                       display_name = g_strdup_printf (_("mcen_me_toolbar_sendreceive_mailbox_n"), 
+                                                       account_data->display_name);
+               }
 
-/*     modest_main_window_cleanup_queue_error_signals (self); */
+               /* Create action and add it to the action group. The
+                  action name must be the account name, this way we
+                  could know in the handlers the account to show */
+               if(account_data && account_data->account_name) {
+                       gchar* item_name, *refresh_action_name;
+                       guint8 merge_id = 0;
+                       GtkAction *view_account_action, *refresh_account_action;
 
-/*     GSList *account_names = modest_account_mgr_account_names ( */
-/*             modest_runtime_get_account_mgr(),  */
-/*             TRUE /\* enabled accounts only *\/); */
-/*     GSList *iter = account_names; */
-/*     while (iter) { */
-/*             const gchar *account_name = (const gchar*)(iter->data); */
-/*                     if (account_name) { */
-/*                     TnyTransportAccount *account = TNY_TRANSPORT_ACCOUNT ( */
-/*                             modest_tny_account_store_get_transport_account_for_open_connection */
-/*                                              (modest_runtime_get_account_store(), account_name)); */
-/*                     if (account) { */
-/*                             /\* Q: Is this the first location where the send-queues are requested? *\/ */
-/*                             QueueErrorSignal *esignal = g_slice_new (QueueErrorSignal); */
-/*                             printf ("debug: %s:\n  Transport account for %s: %s\n", __FUNCTION__, account_name,  */
-/*                                     tny_account_get_id(TNY_ACCOUNT(account))); */
-/*                             esignal->queue = TNY_SEND_QUEUE (modest_runtime_get_send_queue (account)); */
-/*                             esignal->signal = g_signal_connect (G_OBJECT (esignal->queue), "error-happened", */
-/*                                     G_CALLBACK (on_sendqueue_error_happened), self); */
-/*                             priv->queue_err_signals = g_list_prepend (priv->queue_err_signals, esignal); */
+                       view_account_action = gtk_action_new (account_data->account_name,
+                                                             display_name, NULL, NULL);
+                       gtk_action_group_add_action (action_group, view_account_action);
+
+                       /* Add ui from account data. We allow 2^9-1 account
+                          changes in a single execution because we're
+                          downcasting the guint to a guint8 in order to use a
+                          GByteArray. It should be enough. */
+                       item_name = g_strconcat (account_data->account_name, "Menu", NULL);
+                       merge_id = (guint8) gtk_ui_manager_new_merge_id (parent_priv->ui_manager);
+                       priv->merge_ids = g_byte_array_append (priv->merge_ids, &merge_id, 1);
+                       gtk_ui_manager_add_ui (parent_priv->ui_manager,
+                                              merge_id,
+                                              "/MenuBar/ViewMenu/ViewMenuAdditions",
+                                              item_name,
+                                              account_data->account_name,
+                                              GTK_UI_MANAGER_MENUITEM,
+                                              FALSE);
+
+                       /* Connect the action signal "activate" */
+                       g_signal_connect (G_OBJECT (view_account_action),
+                                         "activate",
+                                         G_CALLBACK (on_show_account_action_activated),
+                                         self);
+
+                       /* Create the items for the Tools->Send&Receive submenu */
+                       refresh_action_name = g_strconcat ("SendReceive", account_data->account_name, NULL);
+                       refresh_account_action = gtk_action_new ((const gchar*) refresh_action_name, 
+                                                                display_name, NULL, NULL);
+                       printf("DEBUG: %s: menu display_name=%s\n", __FUNCTION__, display_name);
+                       gtk_action_group_add_action (action_group, refresh_account_action);
+
+                       merge_id = (guint8) gtk_ui_manager_new_merge_id (parent_priv->ui_manager);
+                       priv->merge_ids = g_byte_array_append (priv->merge_ids, &merge_id, 1);
+                       gtk_ui_manager_add_ui (parent_priv->ui_manager, 
+                                              merge_id,
+                                              "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsMenuAdditions",
+                                              item_name,
+                                              refresh_action_name,
+                                              GTK_UI_MANAGER_MENUITEM,
+                                              FALSE);
+                       g_free (refresh_action_name);
+
+                       g_signal_connect_data (G_OBJECT (refresh_account_action), 
+                                              "activate", 
+                                              G_CALLBACK (on_refresh_account_action_activated), 
+                                              g_strdup (account_data->account_name),
+                                              (GClosureNotify) g_free,
+                                              0);
+
+                       /* Create item and add it to the send&receive
+                          CSM. If there is only one account then
+                          it'll be no menu */
+                       if (priv->accounts_popup) {
+                               GtkWidget *label = gtk_label_new(NULL);
+                               gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+                               if (default_account && (strcmp(account_data->account_name, default_account) == 0))
+                               {
+                                       gchar *escaped = g_markup_printf_escaped ("<b>%s</b>", display_name);
+                                       gtk_label_set_markup (GTK_LABEL (label), escaped);
+                                       g_free (escaped);
+                               }
+                               else
+                               {
+                                       gtk_label_set_text (GTK_LABEL (label), display_name);
+                               }
+
+                               item = gtk_menu_item_new ();
+                               gtk_container_add (GTK_CONTAINER (item), label);
+
+                               gtk_menu_shell_prepend (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
+                               g_signal_connect_data (G_OBJECT (item), 
+                                                      "activate", 
+                                                      G_CALLBACK (on_send_receive_csm_activated),
+                                                      g_strdup (account_data->account_name),
+                                                      (GClosureNotify) g_free,
+                                                      0);
+                       }
+                       g_free (item_name);
+               }
+
+               /* Frees */
+               g_free (display_name);
+       }
+
+       gtk_ui_manager_insert_action_group (parent_priv->ui_manager, action_group, 1);
+
+       /* We cannot do this in the loop above because this relies on the action
+        * group being inserted. This makes the default account appear in bold.
+        * I agree it is a rather ugly way, but I don't see another possibility. armin. */
+       for (i = 0; i < num_accounts; i++) {
+               ModestAccountData *account_data = (ModestAccountData *) g_slist_nth_data (accounts, i);
+
+               if(account_data->account_name && default_account &&
+                  strcmp (account_data->account_name, default_account) == 0) {
+                       gchar *item_name = g_strconcat (account_data->account_name, "Menu", NULL);
+
+                       gchar *path = g_strconcat ("/MenuBar/ViewMenu/ViewMenuAdditions/", item_name, NULL);
+                       GtkWidget *item = gtk_ui_manager_get_widget (parent_priv->ui_manager, path);
+                       g_free(path);
+
+                       if (item) {
+                               GtkWidget *child = gtk_bin_get_child (GTK_BIN (item));
+                               if (GTK_IS_LABEL (child)) {
+                                       const gchar *cur_name = gtk_label_get_text (GTK_LABEL (child));
+                                       gchar *bold_name = g_markup_printf_escaped("<b>%s</b>", cur_name);
+                                       gtk_label_set_markup (GTK_LABEL (child), bold_name);
+                                       g_free (bold_name);
+                               }
+                       }
+
+                       path = g_strconcat("/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsMenuAdditions/", item_name, NULL);
+                       item = gtk_ui_manager_get_widget (parent_priv->ui_manager, path);
+                       g_free (path);
+
+                       if (item) {
+                               GtkWidget *child = gtk_bin_get_child (GTK_BIN (item));
+                               if (GTK_IS_LABEL (child)) {
+                                       const gchar *cur_name = gtk_label_get_text (GTK_LABEL (child));
+                                       gchar *bold_name = g_markup_printf_escaped("<b>%s</b>", cur_name);
+                                       gtk_label_set_markup (GTK_LABEL (child), bold_name);
+                                       g_free (bold_name);
+                               }
+                       }
+
+                       g_free(item_name);
+               }
+
+               modest_account_mgr_free_account_data (mgr, account_data);
+       }
+
+       if (priv->accounts_popup) {
+               /* Mandatory in order to view the menu contents */
+               gtk_widget_show_all (priv->accounts_popup);
+
+               /* Setup tap_and_hold just if was not done before*/
+               if (!gtk_menu_get_attach_widget (GTK_MENU (priv->accounts_popup)))
+                       gtk_widget_tap_and_hold_setup (send_receive_button, priv->accounts_popup, NULL, 0);
+       }
+
+       /* Frees */
+       g_slist_free (accounts);
+       g_free (default_account);
+
+
+       /* Make sure that at least one account is viewed if there are any 
+        * accounts, for instance when adding the first account: */
+       set_at_least_one_account_visible (self);
+}
+
+static void
+wrap_in_scrolled_window (GtkWidget *win, GtkWidget *widget)
+{
+       if (!gtk_widget_set_scroll_adjustments (widget, NULL, NULL))
+               gtk_scrolled_window_add_with_viewport
+                       (GTK_SCROLLED_WINDOW(win), widget);
+       else
+               gtk_container_add (GTK_CONTAINER(win),
+                                  widget);
+}
+
+
+/* static gboolean */
+/* on_delete_event (GtkWidget *widget, GdkEvent  *event, ModestMainWindow *self) */
+/* { */
+/*     modest_window_save_state (MODEST_WINDOW(self)); */
+/*     return FALSE; */
+/* } */
+
+/* static void */
+/* on_sendqueue_error_happened (TnySendQueue *self, TnyHeader *header, TnyMsg *msg, GError *err, ModestMainWindow *user_data) */
+/* { */
+/*     if (err) { */
+/*             printf ("DEBUG: %s: err->code=%d, err->message=%s\n", __FUNCTION__, err->code, err->message); */
+
+/*             if (err->code == TNY_ACCOUNT_ERROR_TRY_CONNECT_USER_CANCEL) */
+/*                     /\* Don't show waste the user's time by showing him a dialog telling him */
+/*                      * that he has just cancelled something: *\/ */
+/*                     return; */
+/*     } */
+
+/*     /\* Get the server name: *\/ */
+/*     const gchar* server_name = NULL; */
+       
+/*     TnyCamelTransportAccount* server_account = tny_camel_send_queue_get_transport_account ( */
+/*             TNY_CAMEL_SEND_QUEUE (self)); */
+/*     if (server_account) { */
+/*             server_name = tny_account_get_hostname (TNY_ACCOUNT (server_account)); */
+                       
+/*             g_object_unref (server_account); */
+/*             server_account = NULL; */
+/*     } */
+       
+/*     if (!server_name) */
+/*             server_name = _("Unknown Server");       */
+
+/*     /\* Show the appropriate message text for the GError: *\/ */
+/*     gchar *message = NULL; */
+/*     if (err) { */
+/*             switch (err->code) { */
+/*                     case TNY_TRANSPORT_ACCOUNT_ERROR_SEND_HOST_LOOKUP_FAILED: */
+/*                             message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name); */
+/*                             break; */
+/*                     case TNY_TRANSPORT_ACCOUNT_ERROR_SEND_SERVICE_UNAVAILABLE: */
+/*                             message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name); */
+/*                             break; */
+/*                     case TNY_TRANSPORT_ACCOUNT_ERROR_SEND_AUTHENTICATION_NOT_SUPPORTED: */
+/*                             /\* TODO: This logical ID seems more suitable for a wrong username or password than for a  */
+/*                              * wrong authentication method. The user is unlikely to guess at the real cause. */
+/*                              *\/ */
+/*                             message = g_strdup_printf (_("eemev_ni_ui_smtp_authentication_fail_error"), server_name); */
+/*                             break; */
+/*                     case TNY_TRANSPORT_ACCOUNT_ERROR_SEND: */
+/*                             /\* TODO: Tinymail is still sending this sometimes when it should  */
+/*                              * send TNY_ACCOUNT_ERROR_TRY_CONNECT_USER_CANCEL. *\/ */
+/*                     default: */
+/*                             message = g_strdup (_("emev_ib_ui_smtp_send_error")); */
+/*                             break; */
+/*             } */
+/*     } else { */
+/*             message = g_strdup (_("emev_ib_ui_smtp_send_error")); */
+/*     } */
+       
+/*     modest_maemo_show_information_note_and_forget (GTK_WINDOW (user_data), message); */
+/*     g_free (message); */
+       
+/*     /\* TODO: Offer to remove the message, to avoid messages in future? *\/ */
+/*     /\* */
+/*     TnyFolder *outbox = tny_send_queue_get_outbox (queue); */
+/*     tny_folder_remove_msg (outbox, header, NULL); */
+/*     tny_folder_sync (outbox, TRUE, NULL); */
+/*     g_object_unref (outbox); */
+/*     *\/ */
+/* } */
+
+typedef struct {
+       TnySendQueue *queue;
+       guint signal;
+} QueueErrorSignal;
+
+static void
+modest_main_window_cleanup_queue_error_signals (ModestMainWindow *self)
+{
+       ModestMainWindowPrivate *priv = MODEST_MAIN_WINDOW_GET_PRIVATE (self);
+
+       GList *oerrsignals = priv->queue_err_signals;
+       while (oerrsignals) {
+               QueueErrorSignal *esignal = (QueueErrorSignal *) oerrsignals->data;
+               g_signal_handler_disconnect (esignal->queue, esignal->signal);
+               g_slice_free (QueueErrorSignal, esignal);
+               oerrsignals = g_list_next (oerrsignals);
+       }
+       g_list_free (priv->queue_err_signals);
+       priv->queue_err_signals = NULL;
+}
+
+/* static void */
+/* on_account_store_connecting_finished (TnyAccountStore *store, ModestMainWindow *self) */
+/* { */
+/*     ModestMainWindowPrivate *priv = MODEST_MAIN_WINDOW_GET_PRIVATE (self); */
+
+/*     /\* When going online, do the equivalent of pressing the send/receive button,  */
+/*      * as per the specification: */
+/*      * (without the check for >0 accounts, though that is not specified): *\/ */
+
+/*     TnyDevice *device = tny_account_store_get_device (store); */
+
+/*     /\* modest_folder_view_update_model (MODEST_FOLDER_VIEW (priv->folder_view), store); *\/ */
+       
+/*     /\* Check that we are really online. */
+/*      * This signal should not be emitted when we are not connected,  */
+/*      * but it seems to happen sometimes: *\/ */
+/*      if (!tny_device_is_online (device)) */
+/*             return; */
+               
+/*     const gchar *iap_id = tny_maemo_conic_device_get_current_iap_id (TNY_MAEMO_CONIC_DEVICE (device)); */
+/*     printf ("DEBUG: %s: connection id=%s\n", __FUNCTION__, iap_id); */
+       
+/*     /\* Stop the existing send queues: *\/ */
+/*     modest_runtime_remove_all_send_queues (); */
+       
+/*     /\* Create the send queues again, using the appropriate transport accounts  */
+/*      * for this new connection. */
+/*      * This could be the first time that they are created if this is the first  */
+/*      * connection. *\/ */
+/*     /\* TODO: Does this really destroy the TnySendQueues and their threads */
+/*      * We do not want 2 TnySendQueues to exist with the same underlying  */
+/*      * outbox directory. *\/ */
+
+/*     modest_main_window_cleanup_queue_error_signals (self); */
+
+/*     GSList *account_names = modest_account_mgr_account_names ( */
+/*             modest_runtime_get_account_mgr(),  */
+/*             TRUE /\* enabled accounts only *\/); */
+/*     GSList *iter = account_names; */
+/*     while (iter) { */
+/*             const gchar *account_name = (const gchar*)(iter->data); */
+/*                     if (account_name) { */
+/*                     TnyTransportAccount *account = TNY_TRANSPORT_ACCOUNT ( */
+/*                             modest_tny_account_store_get_transport_account_for_open_connection */
+/*                                              (modest_runtime_get_account_store(), account_name)); */
+/*                     if (account) { */
+/*                             /\* Q: Is this the first location where the send-queues are requested? *\/ */
+/*                             QueueErrorSignal *esignal = g_slice_new (QueueErrorSignal); */
+/*                             printf ("debug: %s:\n  Transport account for %s: %s\n", __FUNCTION__, account_name,  */
+/*                                     tny_account_get_id(TNY_ACCOUNT(account))); */
+/*                             esignal->queue = TNY_SEND_QUEUE (modest_runtime_get_send_queue (account)); */
+/*                             esignal->signal = g_signal_connect (G_OBJECT (esignal->queue), "error-happened", */
+/*                                     G_CALLBACK (on_sendqueue_error_happened), self); */
+/*                             priv->queue_err_signals = g_list_prepend (priv->queue_err_signals, esignal); */
 /*                     } */
 /*             } */
                
@@ -720,11 +1009,18 @@ connect_signals (ModestMainWindow *self)
        
        /* Track account changes. We need to refresh the toolbar */
        priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,G_OBJECT (modest_runtime_get_account_store ()),
-                                                      "account_inserted", G_CALLBACK (account_number_changed),
+                                                      "account_inserted", G_CALLBACK (on_account_inserted),
                                                       self);
        priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,G_OBJECT (modest_runtime_get_account_store ()),
-                                                      "account_removed", G_CALLBACK (account_number_changed),
+                                                      "account_removed", G_CALLBACK (on_account_removed),
                                                       self);
+
+       /* We need to refresh the send & receive menu to change the bold
+        * account when the default account changes. */
+       priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,G_OBJECT (modest_runtime_get_account_mgr ()),
+                                                      "account_changed", G_CALLBACK (on_account_changed),
+                                                      self);
+
        /* Account store */
        priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,G_OBJECT (modest_runtime_get_account_store()), 
                                                       "password_requested",
@@ -964,561 +1260,308 @@ modest_main_window_new (void)
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->contents_widget),
                                        GTK_POLICY_NEVER,
                                        GTK_POLICY_AUTOMATIC);
-       /* gtk_widget_show (priv->contents_widget); */
-
-       /* paned */
-       priv->main_paned = gtk_hpaned_new ();
-       gtk_paned_pack1 (GTK_PANED(priv->main_paned), folder_win, TRUE, TRUE);
-       gtk_paned_pack2 (GTK_PANED(priv->main_paned), priv->contents_widget, TRUE, TRUE);
-       gtk_tree_view_columns_autosize (GTK_TREE_VIEW(priv->header_view));
-
-       /* putting it all together... */
-       priv->main_vbox = gtk_vbox_new (FALSE, 6);
-       gtk_box_pack_start (GTK_BOX(priv->main_vbox), priv->main_paned, TRUE, TRUE,0);
-       gtk_widget_show (priv->main_vbox);
-       
-       gtk_container_add (GTK_CONTAINER(self), priv->main_vbox);
-       
-       HildonProgram *app = hildon_program_get_instance ();
-       hildon_program_add_window (app, HILDON_WINDOW (self));
-       
-       g_signal_connect (G_OBJECT(app), "notify::is-topmost",
-               G_CALLBACK (on_hildon_program_is_topmost_notify), self);
-
-       g_signal_connect (G_OBJECT(self), "show",
-                         G_CALLBACK (modest_main_window_on_show), folder_win);
-               
-       /* Set window icon */
-       window_icon = modest_platform_get_icon (MODEST_APP_ICON);
-       if (window_icon) {
-               gtk_window_set_icon (GTK_WINDOW (self), window_icon);
-               g_object_unref (window_icon);
-       }
-
-       /* Dont't restore settings here, 
-        * because it requires a gtk_widget_show(), 
-        * and we don't want to do that until later,
-        * so that the UI is not visible for non-menu D-Bus activation.
-        */
-       /* restore_settings (MODEST_MAIN_WINDOW(self), FALSE); */
-
-       return MODEST_WINDOW(self);
-}
-
-gboolean 
-modest_main_window_close_all (ModestMainWindow *self)
-{
-       GtkWidget *note;
-       GtkResponseType response;
-
-       /* Create the confirmation dialog MSG-NOT308 */
-       note = hildon_note_new_confirmation_add_buttons (GTK_WINDOW (self),
-                                                        _("emev_nc_close_windows"),
-                                                        _("mcen_bd_yes"), GTK_RESPONSE_YES,
-                                                        _("mcen_bd_no"), GTK_RESPONSE_NO,
-                                                        NULL);
-
-       response = gtk_dialog_run (GTK_DIALOG (note));
-       gtk_widget_destroy (GTK_WIDGET (note));
-
-       if (response == GTK_RESPONSE_YES)
-               return TRUE;
-       else
-               return FALSE;
-}
-
-
-void 
-modest_main_window_set_style (ModestMainWindow *self, 
-                             ModestMainWindowStyle style)
-{
-       ModestMainWindowPrivate *priv;
-       ModestWindowPrivate *parent_priv;
-       GtkAction *action;
-       gboolean active;
-
-       g_return_if_fail (MODEST_IS_MAIN_WINDOW (self));
-
-       priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-       parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
-
-       /* no change -> nothing to do */
-       if (priv->style == style)
-               return;
-
-       /* Get toggle button and update the state if needed. This will
-         happen only when the set_style is not invoked from the UI,
-         for example when it's called from widget memory */
-       action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToggleFolders");
-       active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
-       if ((active && style == MODEST_MAIN_WINDOW_STYLE_SIMPLE) ||
-          (!active && style == MODEST_MAIN_WINDOW_STYLE_SPLIT)) {
-              g_signal_handlers_block_by_func (action, modest_ui_actions_toggle_folders_view, self);
-              gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), !active);
-              g_signal_handlers_unblock_by_func (action, modest_ui_actions_toggle_folders_view, self);
-       }
-
-       priv->style = style;
-       switch (style) {
-       case MODEST_MAIN_WINDOW_STYLE_SIMPLE:
-               /* Remove main paned */
-               g_object_ref (priv->main_paned);
-               gtk_container_remove (GTK_CONTAINER (priv->main_vbox), priv->main_paned);
-
-               /* Reparent the contents widget to the main vbox */
-               gtk_widget_reparent (priv->contents_widget, priv->main_vbox);
-
-               if (modest_header_view_has_selected_headers (MODEST_HEADER_VIEW (priv->header_view))) {
-                       TnyList *selection = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (priv->header_view));
-                       TnyIterator *iterator = tny_list_create_iterator (selection);
-                       TnyHeader *header;
-                       tny_iterator_first (iterator);
-                       header = TNY_HEADER (tny_iterator_get_current (iterator));
-                       if (tny_header_get_subject (header))
-                               gtk_window_set_title (GTK_WINDOW(self), tny_header_get_subject (header));
-                       else
-                               gtk_window_set_title (GTK_WINDOW (self), _("mail_va_no_subject"));
-                       
-                       if (header)
-                               g_object_unref (header);
-
-                       g_object_unref (iterator);
-                       g_object_unref (selection);
-               }
-
-               break;
-       case MODEST_MAIN_WINDOW_STYLE_SPLIT:
-               /* Remove header view */
-               g_object_ref (priv->contents_widget);
-               gtk_container_remove (GTK_CONTAINER (priv->main_vbox), priv->contents_widget);
-
-               /* Reparent the main paned */
-               gtk_paned_add2 (GTK_PANED (priv->main_paned), priv->contents_widget);
-               gtk_container_add (GTK_CONTAINER (priv->main_vbox), priv->main_paned);
-
-               break;
-       default:
-               g_return_if_reached ();
-       }
-
-       /* Let header view grab the focus if it's being shown */
-       if (priv->contents_style == MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS)
-               gtk_widget_grab_focus (GTK_WIDGET (priv->header_view));
-       else 
-               gtk_widget_grab_focus (GTK_WIDGET (priv->contents_widget));
-
-       /* Show changes */
-       gtk_widget_show_all (GTK_WIDGET (priv->main_vbox));
-}
-
-ModestMainWindowStyle
-modest_main_window_get_style (ModestMainWindow *self)
-{
-       ModestMainWindowPrivate *priv;
-
-       g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (self), -1);
-
-       priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-       return priv->style;
-}
-
-
-
-static gboolean
-modest_main_window_window_state_event (GtkWidget *widget, GdkEventWindowState *event, gpointer userdata)
-{
-       if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
-               ModestWindowPrivate *parent_priv;
-               ModestWindowMgr *mgr;
-               gboolean is_fullscreen;
-               GtkAction *fs_toggle_action;
-               gboolean active;
-               
-               mgr = modest_runtime_get_window_mgr ();
-               
-               is_fullscreen = modest_window_mgr_get_fullscreen_mode (mgr);
-
-               parent_priv = MODEST_WINDOW_GET_PRIVATE (widget);
-               
-               fs_toggle_action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ViewMenu/ViewToggleFullscreenMenu");
-               active = (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (fs_toggle_action)))?1:0;
-               if (is_fullscreen != active) {
-                       gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (fs_toggle_action), is_fullscreen);
-               }
-       }
-
-       return FALSE;
-
-}
-
-static void
-set_homogeneous (GtkWidget *widget,
-                gpointer data)
-{
-       gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), TRUE);
-       gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), TRUE);
-}
-
-static void 
-modest_main_window_show_toolbar (ModestWindow *self,
-                                gboolean show_toolbar)
-{
-       ModestMainWindowPrivate *priv = NULL;
-       ModestWindowPrivate *parent_priv = NULL;        
-       GtkWidget *reply_button = NULL, *menu = NULL;
-       GtkWidget *placeholder = NULL;
-       gint insert_index;
-
-       g_return_if_fail (MODEST_IS_MAIN_WINDOW (self));
-       priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-       parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
-
-       /* Set optimized view status */
-       priv->optimized_view = !show_toolbar;
+       /* gtk_widget_show (priv->contents_widget); */
 
-       if (!parent_priv->toolbar) {
-               parent_priv->toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, 
-                                                                 "/ToolBar");
+       /* paned */
+       priv->main_paned = gtk_hpaned_new ();
+       gtk_paned_pack1 (GTK_PANED(priv->main_paned), folder_win, TRUE, TRUE);
+       gtk_paned_pack2 (GTK_PANED(priv->main_paned), priv->contents_widget, TRUE, TRUE);
+       gtk_tree_view_columns_autosize (GTK_TREE_VIEW(priv->header_view));
 
-               /* Set homogeneous toolbar */
-               gtk_container_foreach (GTK_CONTAINER (parent_priv->toolbar), 
-                                      set_homogeneous, NULL);
+       /* putting it all together... */
+       priv->main_vbox = gtk_vbox_new (FALSE, 6);
+       gtk_box_pack_start (GTK_BOX(priv->main_vbox), priv->main_paned, TRUE, TRUE,0);
+       gtk_widget_show (priv->main_vbox);
        
-               priv->progress_toolitem = GTK_WIDGET (gtk_tool_item_new ());
-               priv->cancel_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarCancel");
-               priv->refresh_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSendReceive");
-               priv->sort_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSort");
-               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
-               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
-               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
-               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
+       gtk_container_add (GTK_CONTAINER(self), priv->main_vbox);
+       
+       HildonProgram *app = hildon_program_get_instance ();
+       hildon_program_add_window (app, HILDON_WINDOW (self));
+       
+       g_signal_connect (G_OBJECT(app), "notify::is-topmost",
+               G_CALLBACK (on_hildon_program_is_topmost_notify), self);
 
-               /* Add ProgressBar (Transfer toolbar) */ 
-               priv->progress_bar = modest_progress_bar_widget_new ();
-               gtk_widget_set_no_show_all (priv->progress_bar, TRUE);
-               placeholder = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ProgressBarView");
-               insert_index = gtk_toolbar_get_item_index(GTK_TOOLBAR (parent_priv->toolbar), GTK_TOOL_ITEM(placeholder));
-               gtk_container_add (GTK_CONTAINER (priv->progress_toolitem), priv->progress_bar);
-               gtk_toolbar_insert(GTK_TOOLBAR(parent_priv->toolbar), GTK_TOOL_ITEM (priv->progress_toolitem), insert_index);
-               
-               /* Connect cancel 'clicked' signal to abort progress mode */
-               g_signal_connect(priv->cancel_toolitem, "clicked",
-                                G_CALLBACK(cancel_progressbar),
-                                self);
+       g_signal_connect (G_OBJECT(self), "show",
+                         G_CALLBACK (modest_main_window_on_show), folder_win);
                
-               /* Add it to the observers list */
-               priv->progress_widgets = g_slist_prepend(priv->progress_widgets, priv->progress_bar);
+       /* Set window icon */
+       window_icon = modest_platform_get_icon (MODEST_APP_ICON);
+       if (window_icon) {
+               gtk_window_set_icon (GTK_WINDOW (self), window_icon);
+               g_object_unref (window_icon);
+       }
 
-               /* Add to window */
-               hildon_window_add_toolbar (HILDON_WINDOW (self), 
-                                          GTK_TOOLBAR (parent_priv->toolbar));
+       /* Dont't restore settings here, 
+        * because it requires a gtk_widget_show(), 
+        * and we don't want to do that until later,
+        * so that the UI is not visible for non-menu D-Bus activation.
+        */
+       /* restore_settings (MODEST_MAIN_WINDOW(self), FALSE); */
 
-               /* Set reply button tap and hold menu */
-               reply_button = gtk_ui_manager_get_widget (parent_priv->ui_manager, 
-                                                         "/ToolBar/ToolbarMessageReply");
-               menu = gtk_ui_manager_get_widget (parent_priv->ui_manager,
-                                                 "/ToolbarReplyCSM");
-               gtk_widget_tap_and_hold_setup (GTK_WIDGET (reply_button), menu, NULL, 0);
+       return MODEST_WINDOW(self);
+}
 
-               /* Set send & receive button tap and hold menu */
-               account_number_changed (TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()),
-                                  NULL, self);
-       }
+gboolean 
+modest_main_window_close_all (ModestMainWindow *self)
+{
+       GtkWidget *note;
+       GtkResponseType response;
 
-       if (show_toolbar) {
-               /* Quick hack: this prevents toolbar icons "dance" when progress bar show status is changed */ 
-               /* TODO: resize mode migth be GTK_RESIZE_QUEUE, in order to avoid unneccesary shows */
-               gtk_container_set_resize_mode (GTK_CONTAINER(parent_priv->toolbar), GTK_RESIZE_IMMEDIATE);
+       /* Create the confirmation dialog MSG-NOT308 */
+       note = hildon_note_new_confirmation_add_buttons (GTK_WINDOW (self),
+                                                        _("emev_nc_close_windows"),
+                                                        _("mcen_bd_yes"), GTK_RESPONSE_YES,
+                                                        _("mcen_bd_no"), GTK_RESPONSE_NO,
+                                                        NULL);
 
-               gtk_widget_show (GTK_WIDGET (parent_priv->toolbar));
-               set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_NORMAL);
-       } else
-               gtk_widget_hide (GTK_WIDGET (parent_priv->toolbar));
+       response = gtk_dialog_run (GTK_DIALOG (note));
+       gtk_widget_destroy (GTK_WIDGET (note));
 
+       if (response == GTK_RESPONSE_YES)
+               return TRUE;
+       else
+               return FALSE;
 }
 
-static gint
-compare_display_names (ModestAccountData *a,
-                      ModestAccountData *b)
-{
-       return strcmp (a->display_name, b->display_name);
-}
 
-static void 
-account_number_changed (TnyAccountStore *account_store, 
-/*                     const gchar *account_name, */
-                       TnyAccount *account,
-                       gpointer user_data)
-{      
-       GSList *account_names, *iter, *accounts;
-       ModestMainWindow *self;
+void 
+modest_main_window_set_style (ModestMainWindow *self, 
+                             ModestMainWindowStyle style)
+{
        ModestMainWindowPrivate *priv;
        ModestWindowPrivate *parent_priv;
-       ModestAccountMgr *mgr;
-       gint i, num_accounts;                                   
-       GtkActionGroup *action_group;
-       GList *groups;
-       gchar *default_account;
-       GtkWidget *send_receive_button, *item;
-       GtkAction *send_receive_all = NULL;
-               
-       g_return_if_fail (MODEST_IS_MAIN_WINDOW (user_data));
-/*     g_return_if_fail (TNY_IS_ACCOUNT (account)); */
-
-       self = MODEST_MAIN_WINDOW (user_data);
-       priv = MODEST_MAIN_WINDOW_GET_PRIVATE (self);
-       parent_priv = MODEST_WINDOW_GET_PRIVATE (self);
-
-       /* Get enabled account IDs */
-       mgr = modest_runtime_get_account_mgr ();
-       account_names = modest_account_mgr_account_names (mgr, TRUE);
-       iter = account_names;
-       accounts = NULL;
+       GtkAction *action;
+       gboolean active;
 
-       while (iter) {
-               ModestAccountData *account_data = 
-                       modest_account_mgr_get_account_data (mgr, (gchar*) iter->data);
-               accounts = g_slist_prepend (accounts, account_data);
+       g_return_if_fail (MODEST_IS_MAIN_WINDOW (self));
 
-               iter = iter->next;
-       }
-       modest_account_mgr_free_account_names (account_names);
-       account_names = NULL;
+       priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+       parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
 
-       /* Order the list of accounts by its display name */
-       accounts = g_slist_sort (accounts, (GCompareFunc) compare_display_names);
-       num_accounts = g_slist_length (accounts);
+       /* no change -> nothing to do */
+       if (priv->style == style)
+               return;
 
-       send_receive_all = gtk_ui_manager_get_action (parent_priv->ui_manager, 
-                                                     "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsSendReceiveAllMenu");
-       gtk_action_set_visible (send_receive_all, num_accounts > 1);
+       /* Get toggle button and update the state if needed. This will
+         happen only when the set_style is not invoked from the UI,
+         for example when it's called from widget memory */
+       action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToggleFolders");
+       active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+       if ((active && style == MODEST_MAIN_WINDOW_STYLE_SIMPLE) ||
+          (!active && style == MODEST_MAIN_WINDOW_STYLE_SPLIT)) {
+              g_signal_handlers_block_by_func (action, modest_ui_actions_toggle_folders_view, self);
+              gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), !active);
+              g_signal_handlers_unblock_by_func (action, modest_ui_actions_toggle_folders_view, self);
+       }
 
-       /* Delete old send&receive popup items. We can not just do a
-          menu_detach because it does not work well with
-          tap_and_hold */
-       if (priv->accounts_popup)
-               gtk_container_foreach (GTK_CONTAINER (priv->accounts_popup), 
-                                      (GtkCallback) gtk_widget_destroy, NULL);
+       priv->style = style;
+       switch (style) {
+       case MODEST_MAIN_WINDOW_STYLE_SIMPLE:
+               /* Remove main paned */
+               g_object_ref (priv->main_paned);
+               gtk_container_remove (GTK_CONTAINER (priv->main_vbox), priv->main_paned);
 
-       /* Delete old entries in the View menu. Do not free groups, it
-          belongs to Gtk+ */
-       groups = gtk_ui_manager_get_action_groups (parent_priv->ui_manager);
-       while (groups) {
-               if (!strcmp (MODEST_MAIN_WINDOW_ACTION_GROUP_ADDITIONS,
-                            gtk_action_group_get_name (GTK_ACTION_GROUP (groups->data)))) {
-                       gtk_ui_manager_remove_action_group (parent_priv->ui_manager, 
-                                                           GTK_ACTION_GROUP (groups->data));
-                       groups = NULL;
-                       /* Remove uis */
-                       if (priv->merge_ids) {
-                               for (i = 0; i < priv->merge_ids->len; i++)
-                                       gtk_ui_manager_remove_ui (parent_priv->ui_manager, priv->merge_ids->data[i]);
-                               g_byte_array_free (priv->merge_ids, TRUE);
-                       }
-                       /* We need to call this in order to ensure
-                          that the new actions are added in the right
-                          order (alphabetical */
-                       gtk_ui_manager_ensure_update (parent_priv->ui_manager);
-               } else 
-                       groups = g_list_next (groups);
-       }
-       priv->merge_ids = g_byte_array_sized_new (num_accounts);
+               /* Reparent the contents widget to the main vbox */
+               gtk_widget_reparent (priv->contents_widget, priv->main_vbox);
 
-       /* Get send receive button */
-       send_receive_button = gtk_ui_manager_get_widget (parent_priv->ui_manager,
-                                                         "/ToolBar/ToolbarSendReceive");
+               if (modest_header_view_has_selected_headers (MODEST_HEADER_VIEW (priv->header_view))) {
+                       TnyList *selection = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (priv->header_view));
+                       TnyIterator *iterator = tny_list_create_iterator (selection);
+                       TnyHeader *header;
+                       tny_iterator_first (iterator);
+                       header = TNY_HEADER (tny_iterator_get_current (iterator));
+                       if (tny_header_get_subject (header))
+                               gtk_window_set_title (GTK_WINDOW(self), tny_header_get_subject (header));
+                       else
+                               gtk_window_set_title (GTK_WINDOW (self), _("mail_va_no_subject"));
+                       
+                       if (header)
+                               g_object_unref (header);
 
-       /* Create the menu */
-       if (num_accounts > 1) {
-               if (!priv->accounts_popup)
-                       priv->accounts_popup = gtk_menu_new ();
-               item = gtk_menu_item_new_with_label (_("mcen_me_toolbar_sendreceive_all"));
-               gtk_menu_shell_append (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
-               g_signal_connect (G_OBJECT (item), 
-                                 "activate", 
-                                 G_CALLBACK (on_send_receive_csm_activated),
-                                 NULL);
-               item = gtk_separator_menu_item_new ();
-               gtk_menu_shell_prepend (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
-       }
+                       g_object_unref (iterator);
+                       g_object_unref (selection);
+               }
 
-       /* Create a new action group */
-       default_account = modest_account_mgr_get_default_account (mgr);
-       action_group = gtk_action_group_new (MODEST_MAIN_WINDOW_ACTION_GROUP_ADDITIONS);
-       for (i = 0; i < num_accounts; i++) {
-               gchar *display_name = NULL;
-               
-               ModestAccountData *account_data = (ModestAccountData *) g_slist_nth_data (accounts, i);
+               break;
+       case MODEST_MAIN_WINDOW_STYLE_SPLIT:
+               /* Remove header view */
+               g_object_ref (priv->contents_widget);
+               gtk_container_remove (GTK_CONTAINER (priv->main_vbox), priv->contents_widget);
 
-               /* Create display name. The UI specification specifies a different format string 
-                * to use for the default account, though both seem to be "%s", so 
-                * I don't see what the point is. murrayc. */
-               if (default_account && account_data->account_name && 
-                       !(strcmp (default_account, account_data->account_name) == 0)) {
-                       display_name = g_strdup_printf (_("mcen_me_toolbar_sendreceive_default"), 
-                                                       account_data->display_name);
-               }
-               else {
-                       display_name = g_strdup_printf (_("mcen_me_toolbar_sendreceive_mailbox_n"), 
-                                                       account_data->display_name);
-               }
+               /* Reparent the main paned */
+               gtk_paned_add2 (GTK_PANED (priv->main_paned), priv->contents_widget);
+               gtk_container_add (GTK_CONTAINER (priv->main_vbox), priv->main_paned);
 
-               /* Create action and add it to the action group. The
-                  action name must be the account name, this way we
-                  could know in the handlers the account to show */
-               if(account_data && account_data->account_name) {
-                       gchar* item_name, *refresh_action_name;
-                       guint8 merge_id = 0;
-                       GtkAction *view_account_action, *refresh_account_action;
+               break;
+       default:
+               g_return_if_reached ();
+       }
 
-                       view_account_action = gtk_action_new (account_data->account_name,
-                                                             display_name, NULL, NULL);
-                       gtk_action_group_add_action (action_group, view_account_action);
+       /* Let header view grab the focus if it's being shown */
+       if (priv->contents_style == MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS)
+               gtk_widget_grab_focus (GTK_WIDGET (priv->header_view));
+       else 
+               gtk_widget_grab_focus (GTK_WIDGET (priv->contents_widget));
 
-                       /* Add ui from account data. We allow 2^9-1 account
-                          changes in a single execution because we're
-                          downcasting the guint to a guint8 in order to use a
-                          GByteArray. It should be enough. */
-                       item_name = g_strconcat (account_data->account_name, "Menu", NULL);
-                       merge_id = (guint8) gtk_ui_manager_new_merge_id (parent_priv->ui_manager);
-                       priv->merge_ids = g_byte_array_append (priv->merge_ids, &merge_id, 1);
-                       gtk_ui_manager_add_ui (parent_priv->ui_manager,
-                                              merge_id,
-                                              "/MenuBar/ViewMenu/ViewMenuAdditions",
-                                              item_name,
-                                              account_data->account_name,
-                                              GTK_UI_MANAGER_MENUITEM,
-                                              FALSE);
+       /* Show changes */
+       gtk_widget_show_all (GTK_WIDGET (priv->main_vbox));
+}
 
-                       /* Connect the action signal "activate" */
-                       g_signal_connect (G_OBJECT (view_account_action),
-                                         "activate",
-                                         G_CALLBACK (on_show_account_action_activated),
-                                         self);
+ModestMainWindowStyle
+modest_main_window_get_style (ModestMainWindow *self)
+{
+       ModestMainWindowPrivate *priv;
 
-                       /* Create the items for the Tools->Send&Receive submenu */
-                       refresh_action_name = g_strconcat ("SendReceive", account_data->account_name, NULL);
-                       refresh_account_action = gtk_action_new ((const gchar*) refresh_action_name, 
-                                                                display_name, NULL, NULL);
-                       printf("DEBUG: %s: menu display_name=%s\n", __FUNCTION__, display_name);
-                       gtk_action_group_add_action (action_group, refresh_account_action);
+       g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (self), -1);
 
-                       merge_id = (guint8) gtk_ui_manager_new_merge_id (parent_priv->ui_manager);
-                       priv->merge_ids = g_byte_array_append (priv->merge_ids, &merge_id, 1);
-                       gtk_ui_manager_add_ui (parent_priv->ui_manager, 
-                                              merge_id,
-                                              "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsMenuAdditions",
-                                              item_name,
-                                              refresh_action_name,
-                                              GTK_UI_MANAGER_MENUITEM,
-                                              FALSE);
-                       g_free (refresh_action_name);
+       priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+       return priv->style;
+}
 
-                       g_signal_connect_data (G_OBJECT (refresh_account_action), 
-                                              "activate", 
-                                              G_CALLBACK (on_refresh_account_action_activated), 
-                                              g_strdup (account_data->account_name),
-                                              (GClosureNotify) g_free,
-                                              0);
 
-                       /* Create item and add it to the send&receive
-                          CSM. If there is only one account then
-                          it'll be no menu */
-                       if (priv->accounts_popup) {
-                               GtkWidget *label = gtk_label_new(NULL);
-                               gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-                               if (default_account && (strcmp(account_data->account_name, default_account) == 0))
-                               {
-                                       gchar *escaped = g_markup_printf_escaped ("<b>%s</b>", display_name);
-                                       gtk_label_set_markup (GTK_LABEL (label), escaped);
-                                       g_free (escaped);
-                               }
-                               else
-                               {
-                                       gtk_label_set_text (GTK_LABEL (label), display_name);
-                               }
 
-                               item = gtk_menu_item_new ();
-                               gtk_container_add (GTK_CONTAINER (item), label);
+static gboolean
+modest_main_window_window_state_event (GtkWidget *widget, GdkEventWindowState *event, gpointer userdata)
+{
+       if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
+               ModestWindowPrivate *parent_priv;
+               ModestWindowMgr *mgr;
+               gboolean is_fullscreen;
+               GtkAction *fs_toggle_action;
+               gboolean active;
+               
+               mgr = modest_runtime_get_window_mgr ();
+               
+               is_fullscreen = modest_window_mgr_get_fullscreen_mode (mgr);
 
-                               gtk_menu_shell_prepend (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
-                               g_signal_connect_data (G_OBJECT (item), 
-                                                      "activate", 
-                                                      G_CALLBACK (on_send_receive_csm_activated),
-                                                      g_strdup (account_data->account_name),
-                                                      (GClosureNotify) g_free,
-                                                      0);
-                       }
-                       g_free (item_name);
+               parent_priv = MODEST_WINDOW_GET_PRIVATE (widget);
+               
+               fs_toggle_action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ViewMenu/ViewToggleFullscreenMenu");
+               active = (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (fs_toggle_action)))?1:0;
+               if (is_fullscreen != active) {
+                       gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (fs_toggle_action), is_fullscreen);
                }
-
-               /* Frees */
-               g_free (display_name);
        }
 
-       gtk_ui_manager_insert_action_group (parent_priv->ui_manager, action_group, 1);
+       return FALSE;
 
-       /* We cannot do this in the loop above because this relies on the action
-        * group being inserted. This makes the default account appear in bold.
-        * I agree it is a rather ugly way, but I don't see another possibility. armin. */
-       for (i = 0; i < num_accounts; i++) {
-               ModestAccountData *account_data = (ModestAccountData *) g_slist_nth_data (accounts, i);
+}
 
-               if(account_data->account_name && default_account &&
-                  strcmp (account_data->account_name, default_account) == 0) {
-                       gchar *item_name = g_strconcat (account_data->account_name, "Menu", NULL);
+static void
+set_homogeneous (GtkWidget *widget,
+                gpointer data)
+{
+       gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), TRUE);
+       gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), TRUE);
+}
 
-                       gchar *path = g_strconcat ("/MenuBar/ViewMenu/ViewMenuAdditions/", item_name, NULL);
-                       GtkWidget *item = gtk_ui_manager_get_widget (parent_priv->ui_manager, path);
-                       g_free(path);
+static void 
+modest_main_window_show_toolbar (ModestWindow *self,
+                                gboolean show_toolbar)
+{
+       ModestMainWindowPrivate *priv = NULL;
+       ModestWindowPrivate *parent_priv = NULL;        
+       GtkWidget *reply_button = NULL, *menu = NULL;
+       GtkWidget *placeholder = NULL;
+       gint insert_index;
 
-                       if (item) {
-                               GtkWidget *child = gtk_bin_get_child (GTK_BIN (item));
-                               if (GTK_IS_LABEL (child)) {
-                                       const gchar *cur_name = gtk_label_get_text (GTK_LABEL (child));
-                                       gchar *bold_name = g_markup_printf_escaped("<b>%s</b>", cur_name);
-                                       gtk_label_set_markup (GTK_LABEL (child), bold_name);
-                                       g_free (bold_name);
-                               }
-                       }
+       g_return_if_fail (MODEST_IS_MAIN_WINDOW (self));
+       priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+       parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
 
-                       path = g_strconcat("/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsMenuAdditions/", item_name, NULL);
-                       item = gtk_ui_manager_get_widget (parent_priv->ui_manager, path);
-                       g_free (path);
+       /* Set optimized view status */
+       priv->optimized_view = !show_toolbar;
 
-                       if (item) {
-                               GtkWidget *child = gtk_bin_get_child (GTK_BIN (item));
-                               if (GTK_IS_LABEL (child)) {
-                                       const gchar *cur_name = gtk_label_get_text (GTK_LABEL (child));
-                                       gchar *bold_name = g_markup_printf_escaped("<b>%s</b>", cur_name);
-                                       gtk_label_set_markup (GTK_LABEL (child), bold_name);
-                                       g_free (bold_name);
-                               }
-                       }
+       if (!parent_priv->toolbar) {
+               parent_priv->toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, 
+                                                                 "/ToolBar");
 
-                       g_free(item_name);
-               }
+               /* Set homogeneous toolbar */
+               gtk_container_foreach (GTK_CONTAINER (parent_priv->toolbar), 
+                                      set_homogeneous, NULL);
+       
+               priv->progress_toolitem = GTK_WIDGET (gtk_tool_item_new ());
+               priv->cancel_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarCancel");
+               priv->refresh_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSendReceive");
+               priv->sort_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSort");
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
 
-               modest_account_mgr_free_account_data (mgr, account_data);
-       }
+               /* Add ProgressBar (Transfer toolbar) */ 
+               priv->progress_bar = modest_progress_bar_widget_new ();
+               gtk_widget_set_no_show_all (priv->progress_bar, TRUE);
+               placeholder = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ProgressBarView");
+               insert_index = gtk_toolbar_get_item_index(GTK_TOOLBAR (parent_priv->toolbar), GTK_TOOL_ITEM(placeholder));
+               gtk_container_add (GTK_CONTAINER (priv->progress_toolitem), priv->progress_bar);
+               gtk_toolbar_insert(GTK_TOOLBAR(parent_priv->toolbar), GTK_TOOL_ITEM (priv->progress_toolitem), insert_index);
+               
+               /* Connect cancel 'clicked' signal to abort progress mode */
+               g_signal_connect(priv->cancel_toolitem, "clicked",
+                                G_CALLBACK(cancel_progressbar),
+                                self);
+               
+               /* Add it to the observers list */
+               priv->progress_widgets = g_slist_prepend(priv->progress_widgets, priv->progress_bar);
 
-       if (priv->accounts_popup) {
-               /* Mandatory in order to view the menu contents */
-               gtk_widget_show_all (priv->accounts_popup);
+               /* Add to window */
+               hildon_window_add_toolbar (HILDON_WINDOW (self), 
+                                          GTK_TOOLBAR (parent_priv->toolbar));
 
-               /* Setup tap_and_hold just if was not done before*/
-               if (!gtk_menu_get_attach_widget (GTK_MENU (priv->accounts_popup)))
-                       gtk_widget_tap_and_hold_setup (send_receive_button, priv->accounts_popup, NULL, 0);
+               /* Set reply button tap and hold menu */
+               reply_button = gtk_ui_manager_get_widget (parent_priv->ui_manager, 
+                                                         "/ToolBar/ToolbarMessageReply");
+               menu = gtk_ui_manager_get_widget (parent_priv->ui_manager,
+                                                 "/ToolbarReplyCSM");
+               gtk_widget_tap_and_hold_setup (GTK_WIDGET (reply_button), menu, NULL, 0);
+
+               /* Set send & receive button tap and hold menu */
+               update_menus (MODEST_MAIN_WINDOW (self));
        }
 
-       /* Frees */
-       g_slist_free (accounts);
-       g_free (default_account);
+       if (show_toolbar) {
+               /* Quick hack: this prevents toolbar icons "dance" when progress bar show status is changed */ 
+               /* TODO: resize mode migth be GTK_RESIZE_QUEUE, in order to avoid unneccesary shows */
+               gtk_container_set_resize_mode (GTK_CONTAINER(parent_priv->toolbar), GTK_RESIZE_IMMEDIATE);
 
+               gtk_widget_show (GTK_WIDGET (parent_priv->toolbar));
+               set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_NORMAL);
+       } else
+               gtk_widget_hide (GTK_WIDGET (parent_priv->toolbar));
 
-       /* Make sure that at least one account is viewed if there are any 
-        * accounts, for instance when adding the first account: */
-       set_at_least_one_account_visible (self);
+}
+
+static void
+on_account_inserted (TnyAccountStore *accoust_store,
+                     TnyAccount *account,
+                     gpointer user_data)
+{
+       update_menus (MODEST_MAIN_WINDOW (user_data));
+}
+
+static void
+on_account_changed (ModestAccountMgr* mgr,
+                    const gchar* account,
+                    gpointer user_data)
+{
+       gchar *default_account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
+
+       /* Actually, we only want to know when another account has become
+        * the default account, but there is no default_account_changed
+        * signal in ModestAccountMgr. */
+       if(strcmp(account, default_account) == 0)
+               update_menus (MODEST_MAIN_WINDOW (user_data));
+
+       g_free (default_account);
+}
+
+static void
+on_account_removed (TnyAccountStore *accoust_store,
+                     TnyAccount *account,
+                     gpointer user_data)
+{
+       update_menus (MODEST_MAIN_WINDOW (user_data));
 }
 
 /* 
index 488eb2a..7a828fb 100644 (file)
@@ -256,9 +256,9 @@ update_account_view (ModestAccountMgr *account_mgr, ModestAccountView *view)
 
 static void
 on_account_busy_changed(ModestAccountMgr *account_mgr, 
-                       const gchar *account_name,
-                       gboolean busy, 
-                       ModestAccountView *self)
+                        const gchar *account_name,
+                        gboolean busy, 
+                        ModestAccountView *self)
 {
        GtkListStore *model = GTK_LIST_STORE(gtk_tree_view_get_model (GTK_TREE_VIEW(self)));
        GtkTreeIter iter;
@@ -485,10 +485,11 @@ init_view (ModestAccountView *self)
         *
         * djcb: indeed, they have been removed for post-bora, i added the ifdefs...
                 */
-#ifdef MODEST_HILDON_VERSION_0 
+#ifdef MODEST_HAVE_HILDON0_WIDGETS
        g_object_set(G_OBJECT(self), "allow-checkbox-mode", FALSE, NULL);
        g_object_set(G_OBJECT(toggle_renderer), "checkbox-mode", FALSE, NULL);
-#endif /*MODEST_HILDON_VERSION_0 */
+#endif /* MODEST_HAVE_HILDON0_WIDGETS */
+
        g_signal_connect (G_OBJECT(toggle_renderer), "toggled", G_CALLBACK(on_account_default_toggled),
                          self);