X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-main-window.c;h=614fe61cfa859b014c436b5d29a09507cc56cbbc;hp=ba1fbd1dad8b912cf96d4f0df4d23f53aa1bcd8d;hb=de2d9a7e88e25c2b3128cdc69a27c334cb9635ea;hpb=047ccd61b7e2ae0654459614084fcbdb613785ca diff --git a/src/maemo/modest-main-window.c b/src/maemo/modest-main-window.c index ba1fbd1..614fe61 100644 --- a/src/maemo/modest-main-window.c +++ b/src/maemo/modest-main-window.c @@ -53,6 +53,7 @@ #include "modest-tny-account.h" #include "modest-tny-folder.h" #include "modest-conf.h" +#include #include #include "modest-tny-platform-factory.h" #include "modest-tny-msg.h" @@ -65,12 +66,6 @@ #include "modest-text-utils.h" #include "modest-signal-mgr.h" -#ifdef MODEST_HAVE_HILDON0_WIDGETS -#include -#else -#include -#endif /*MODEST_HAVE_HILDON0_WIDGETS*/ - #define MODEST_MAIN_WINDOW_ACTION_GROUP_ADDITIONS "ModestMainWindowActionAdditions" #define XALIGN 0.5 @@ -111,15 +106,17 @@ static void on_queue_changed (ModestMailOperationQueue *queue, static gboolean on_zoom_minus_plus_not_implemented (ModestWindow *window); -static void -on_account_inserted (TnyAccountStore *accoust_store, - 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_removed (TnyAccountStore *accoust_store, + TnyAccount *account, + gpointer user_data); + +static void on_account_changed (TnyAccountStore *account_store, + TnyAccount *account, + gpointer user_data); static void on_default_account_changed (ModestAccountMgr* mgr, gpointer user_data); @@ -369,10 +366,9 @@ modest_main_window_finalize (GObject *obj) /* Sanity check: shouldn't be needed, the window mgr should call this function before */ - modest_main_window_disconnect_signals (MODEST_WINDOW (obj)); - + modest_main_window_disconnect_signals (MODEST_WINDOW (obj)); modest_main_window_cleanup_queue_error_signals ((ModestMainWindow *) obj); - + g_slist_free (priv->progress_widgets); g_byte_array_free (priv->merge_ids, TRUE); @@ -396,7 +392,7 @@ modest_main_window_finalize (GObject *obj) g_source_remove (priv->restore_paned_timeout); priv->restore_paned_timeout = 0; } - + G_OBJECT_CLASS(parent_class)->finalize (obj); } @@ -497,10 +493,11 @@ save_state (ModestWindow *window) } static gint -compare_display_names (ModestAccountData *a, - ModestAccountData *b) +compare_display_names (ModestAccountSettings *a, + ModestAccountSettings *b) { - return strcmp (a->display_name, b->display_name); + return strcmp (modest_account_settings_get_display_name (a), + modest_account_settings_get_display_name (b)); } static void @@ -528,9 +525,9 @@ update_menus (ModestMainWindow* self) accounts = NULL; while (iter) { - ModestAccountData *account_data = - modest_account_mgr_get_account_data (mgr, (gchar*) iter->data); - accounts = g_slist_prepend (accounts, account_data); + ModestAccountSettings *settings = + modest_account_mgr_load_account_settings (mgr, (gchar*) iter->data); + accounts = g_slist_prepend (accounts, settings); iter = iter->next; } @@ -543,7 +540,7 @@ update_menus (ModestMainWindow* self) 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); + gtk_action_set_visible (send_receive_all, num_accounts > 0); /* Delete old send&receive popup items. We can not just do a menu_detach because it does not work well with @@ -605,40 +602,42 @@ update_menus (ModestMainWindow* self) radio_group = NULL; for (i = 0; i < num_accounts; i++) { gchar *display_name = NULL; - ModestAccountData *account_data = (ModestAccountData *) g_slist_nth_data (accounts, i); + const gchar *account_name; + ModestAccountSettings *settings = (ModestAccountSettings *) g_slist_nth_data (accounts, i); - if (!account_data) { + if (!settings) { g_warning ("%s: BUG: account_data == NULL", __FUNCTION__); continue; } + account_name = modest_account_settings_get_account_name (settings); - if (default_account && account_data->account_name && - !(strcmp (default_account, account_data->account_name) == 0)) { + if (default_account && account_name && + !(strcmp (default_account, account_name) == 0)) { display_name = g_strdup_printf (_("mcen_me_toolbar_sendreceive_default"), - account_data->display_name); + modest_account_settings_get_display_name (settings)); } else { display_name = g_strdup_printf (_("mcen_me_toolbar_sendreceive_mailbox_n"), - account_data->display_name); + modest_account_settings_get_display_name (settings)); } /* 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) { + if (settings && account_name) { gchar* item_name, *refresh_action_name; guint8 merge_id = 0; GtkAction *view_account_action, *refresh_account_action; - view_account_action = GTK_ACTION (gtk_radio_action_new (account_data->account_name, + view_account_action = GTK_ACTION (gtk_radio_action_new (account_name, display_name, NULL, NULL, 0)); gtk_action_group_add_action (priv->view_additions_group, view_account_action); gtk_radio_action_set_group (GTK_RADIO_ACTION (view_account_action), radio_group); radio_group = gtk_radio_action_get_group (GTK_RADIO_ACTION (view_account_action)); if (active_account_name) { - if (active_account_name && account_data->account_name && - (strcmp (active_account_name, account_data->account_name) == 0)) { - gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (view_account_action), TRUE); + if (active_account_name && account_name && + (strcmp (active_account_name, account_name) == 0)) { + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (view_account_action), TRUE); } } @@ -646,14 +645,14 @@ update_menus (ModestMainWindow* self) 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); + item_name = g_strconcat (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, + account_name, GTK_UI_MANAGER_MENUITEM, FALSE); @@ -664,7 +663,7 @@ update_menus (ModestMainWindow* self) self); /* Create the items for the Tools->Send&Receive submenu */ - refresh_action_name = g_strconcat ("SendReceive", account_data->account_name, NULL); + refresh_action_name = g_strconcat ("SendReceive", account_name, NULL); refresh_account_action = gtk_action_new ((const gchar*) refresh_action_name, display_name, NULL, NULL); gtk_action_group_add_action (priv->view_additions_group, refresh_account_action); @@ -683,7 +682,7 @@ update_menus (ModestMainWindow* self) g_signal_connect_data (G_OBJECT (refresh_account_action), "activate", G_CALLBACK (on_refresh_account_action_activated), - g_strdup (account_data->account_name), + g_strdup (account_name), (GClosureNotify) g_free, 0); @@ -693,7 +692,7 @@ update_menus (ModestMainWindow* self) 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)) + if (default_account && (strcmp(account_name, default_account) == 0)) { gchar *escaped = g_markup_printf_escaped ("%s", display_name); gtk_label_set_markup (GTK_LABEL (label), escaped); @@ -711,7 +710,7 @@ update_menus (ModestMainWindow* self) g_signal_connect_data (G_OBJECT (item), "activate", G_CALLBACK (on_send_receive_csm_activated), - g_strdup (account_data->account_name), + g_strdup (account_name), (GClosureNotify) g_free, 0); } @@ -728,11 +727,14 @@ update_menus (ModestMainWindow* self) * 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); + ModestAccountSettings *settings = (ModestAccountSettings *) g_slist_nth_data (accounts, i); + const gchar *account_name; - 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); + account_name = modest_account_settings_get_account_name (settings); + + if(account_name && default_account && + strcmp (account_name, default_account) == 0) { + gchar *item_name = g_strconcat (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); @@ -747,7 +749,7 @@ update_menus (ModestMainWindow* self) 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); @@ -765,7 +767,7 @@ update_menus (ModestMainWindow* self) g_free(item_name); } - modest_account_mgr_free_account_data (mgr, account_data); + g_object_unref (settings); } if (priv->accounts_popup) { @@ -970,6 +972,13 @@ connect_signals (ModestMainWindow *self) /* Account store */ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers, + G_OBJECT (modest_runtime_get_account_store ()), + "account_changed", + G_CALLBACK (on_account_changed), + self); + + priv->sighandlers = + modest_signal_mgr_connect (priv->sighandlers, G_OBJECT (modest_runtime_get_account_store()), "password_requested", G_CALLBACK (modest_ui_actions_on_password_requested), @@ -1066,7 +1075,7 @@ modest_main_window_on_show (GtkWidget *self, gpointer user_data) accounts = modest_account_mgr_account_names (modest_runtime_get_account_mgr (), TRUE); send_receive_all = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsSendReceiveAllMenu"); - gtk_action_set_visible (send_receive_all, g_slist_length (accounts) > 1); + gtk_action_set_visible (send_receive_all, g_slist_length (accounts) > 0); modest_account_mgr_free_account_names (accounts); update_menus (MODEST_MAIN_WINDOW (self)); } @@ -1083,6 +1092,7 @@ modest_main_window_new (void) ModestDimmingRulesGroup *toolbar_rules_group = NULL; GtkActionGroup *action_group = NULL; GError *error = NULL; + HildonProgram *app; ModestConf *conf = NULL; GtkAction *action = NULL; GdkPixbuf *window_icon; @@ -1159,7 +1169,7 @@ modest_main_window_new (void) gtk_ui_manager_get_accel_group (parent_priv->ui_manager)); /* Menubar. Update the state of some toggles */ - parent_priv->menubar = modest_maemo_utils_menubar_to_menu (parent_priv->ui_manager); + parent_priv->menubar = modest_maemo_utils_get_manager_menubar_as_menu (parent_priv->ui_manager, "/MenuBar"); conf = modest_runtime_get_conf (); action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ViewMenu/ViewShowToolbarMainMenu/ViewShowToolbarNormalScreenMenu"); @@ -1218,7 +1228,7 @@ modest_main_window_new (void) gtk_container_add (GTK_CONTAINER(self), priv->main_vbox); - HildonProgram *app = hildon_program_get_instance (); + app = hildon_program_get_instance (); hildon_program_add_window (app, HILDON_WINDOW (self)); g_signal_connect (G_OBJECT(app), "notify::is-topmost", @@ -1228,7 +1238,7 @@ modest_main_window_new (void) G_CALLBACK (modest_main_window_on_show), folder_win); /* Set window icon */ - window_icon = modest_platform_get_icon (MODEST_APP_ICON); + window_icon = modest_platform_get_icon (MODEST_APP_ICON, MODEST_ICON_SIZE_BIG); if (window_icon) { gtk_window_set_icon (GTK_WINDOW (self), window_icon); g_object_unref (window_icon); @@ -1431,7 +1441,10 @@ modest_main_window_show_toolbar (ModestWindow *self, 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); + if (modest_main_window_transfer_mode_enabled (MODEST_MAIN_WINDOW(self))) + set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_TRANSFER); + else + set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_NORMAL); } else { gtk_widget_hide (GTK_WIDGET (parent_priv->toolbar)); @@ -1448,7 +1461,7 @@ modest_main_window_show_toolbar (ModestWindow *self, action_name = "/MenuBar/ViewMenu/ViewShowToolbarMainMenu/ViewShowToolbarNormalScreenMenu"; action = gtk_ui_manager_get_action (parent_priv->ui_manager, action_name); - modest_maemo_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), + modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), show_toolbar); } @@ -1475,6 +1488,22 @@ on_account_removed (TnyAccountStore *accoust_store, update_menus (MODEST_MAIN_WINDOW (user_data)); } +static void +on_account_changed (TnyAccountStore *account_store, + TnyAccount *account, + gpointer user_data) +{ + ModestMainWindow *win = MODEST_MAIN_WINDOW (user_data); + + /* We need to refresh the details widget because it could have changed */ + if (modest_main_window_get_contents_style(win) == MODEST_MAIN_WINDOW_CONTENTS_STYLE_DETAILS) { + modest_main_window_set_contents_style (win, MODEST_MAIN_WINDOW_CONTENTS_STYLE_DETAILS); + } + + /* Update the menus as well, the account name could be changed */ + update_menus (MODEST_MAIN_WINDOW (user_data)); +} + /* * This function manages the key events used to navigate between * header and folder views (when the window is in split view) @@ -1612,6 +1641,7 @@ create_details_widget (GtkWidget *styled_widget, TnyAccount *account) (const gchar *) gray_color_markup); label_w = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label_w), label); + gtk_label_set_ellipsize (GTK_LABEL (label_w), PANGO_ELLIPSIZE_END); gtk_box_pack_start (GTK_BOX (vbox), label_w, FALSE, FALSE, 0); g_free (device_name); g_free (label); @@ -1639,6 +1669,7 @@ create_details_widget (GtkWidget *styled_widget, TnyAccount *account) label_w = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label_w), label); + gtk_label_set_ellipsize (GTK_LABEL (label_w), PANGO_ELLIPSIZE_END); gtk_box_pack_start (GTK_BOX (vbox), label_w, FALSE, FALSE, 0); g_string_free (proto, TRUE); g_free (label); @@ -1652,6 +1683,7 @@ create_details_widget (GtkWidget *styled_widget, TnyAccount *account) modest_tny_folder_store_get_message_count (folder_store)); label_w = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label_w), label); + gtk_label_set_ellipsize (GTK_LABEL (label_w), PANGO_ELLIPSIZE_END); gtk_box_pack_start (GTK_BOX (vbox), label_w, FALSE, FALSE, 0); g_free (label); @@ -1662,6 +1694,7 @@ create_details_widget (GtkWidget *styled_widget, TnyAccount *account) modest_tny_folder_store_get_folder_count (folder_store)); label_w = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label_w), label); + gtk_label_set_ellipsize (GTK_LABEL (label_w), PANGO_ELLIPSIZE_END); gtk_box_pack_start (GTK_BOX (vbox), label_w, FALSE, FALSE, 0); g_free (label); @@ -1679,6 +1712,7 @@ create_details_widget (GtkWidget *styled_widget, TnyAccount *account) label_w = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label_w), label); + gtk_label_set_ellipsize (GTK_LABEL (label_w), PANGO_ELLIPSIZE_END); gtk_box_pack_start (GTK_BOX (vbox), label_w, FALSE, FALSE, 0); g_free (label); } else if (TNY_IS_ACCOUNT(folder_store)) { @@ -1699,6 +1733,7 @@ create_details_widget (GtkWidget *styled_widget, TnyAccount *account) gray_color_markup, _("mcen_ti_lastupdated"), last_updated_string); label_w = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label_w), label); + gtk_label_set_ellipsize (GTK_LABEL (label_w), PANGO_ELLIPSIZE_END); gtk_box_pack_start (GTK_BOX (vbox), label_w, FALSE, FALSE, 0); g_free (label); } @@ -2016,12 +2051,12 @@ set_toolbar_mode (ModestMainWindow *self, gtk_action_set_visible (refresh_action, FALSE); if (cancel_action) gtk_action_set_visible (cancel_action, TRUE); + if (priv->progress_bar) + gtk_widget_show (priv->progress_bar); if (priv->progress_toolitem) { gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE); gtk_widget_show (priv->progress_toolitem); } - if (priv->progress_bar) - gtk_widget_show (priv->progress_bar); /* Show toolbar if it's hiden (optimized view ) */ if (priv->optimized_view) @@ -2242,20 +2277,30 @@ set_account_visible(ModestMainWindow *self, const gchar *acc_name) { ModestMainWindowPrivate *priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); GtkAction *action; + ModestAccountMgr *mgr; + ModestAccountSettings *settings; + ModestServerAccountSettings *store_settings = NULL; /* Get account data */ - ModestAccountMgr *mgr = modest_runtime_get_account_mgr (); - ModestAccountData *acc_data = modest_account_mgr_get_account_data (mgr, acc_name); + mgr = modest_runtime_get_account_mgr (); + settings = modest_account_mgr_load_account_settings (mgr, acc_name); + if (settings) + store_settings = modest_account_settings_get_store_settings (settings); /* Set the new visible & active account */ - if (acc_data && acc_data->store_account) { - modest_folder_view_set_account_id_of_visible_server_account (priv->folder_view, - acc_data->store_account->account_name); - modest_window_set_active_account (MODEST_WINDOW (self), acc_data->account_name); - action = gtk_action_group_get_action (priv->view_additions_group, acc_data->account_name); + if (settings && (modest_server_account_settings_get_account_name (store_settings)!= NULL)) { + const gchar *account_name; + + account_name = modest_account_settings_get_account_name (settings); + + modest_folder_view_set_account_id_of_visible_server_account + (priv->folder_view, + modest_server_account_settings_get_account_name (store_settings)); + modest_window_set_active_account (MODEST_WINDOW (self), account_name); + action = gtk_action_group_get_action (priv->view_additions_group, account_name); if (action != NULL) { if (!gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) { - modest_maemo_toggle_action_set_active_block_notify ( + modest_utils_toggle_action_set_active_block_notify ( GTK_TOGGLE_ACTION (action), TRUE); } @@ -2266,8 +2311,10 @@ set_account_visible(ModestMainWindow *self, const gchar *acc_name) /* Free */ - if (acc_data) - modest_account_mgr_free_account_data (mgr, acc_data); + if (settings) { + g_object_unref (store_settings); + g_object_unref (settings); + } } /* Make sure that at least one account is "viewed": */