2007-06-05 Murray Cumming <murrayc@murrayc.com>modest/trunk] > more ChangeLog2
[modest] / src / maemo / modest-main-window.c
index cc2cff8..a717865 100644 (file)
@@ -190,9 +190,23 @@ static const GtkActionEntry modest_folder_view_action_entries [] = {
        { "FolderViewCSMPasteMsgs", NULL, N_("mcen_me_inbox_paste"), NULL, NULL, NULL },
        { "FolderViewCSMDeleteFolder", NULL, N_("mcen_me_inbox_delete"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_delete_folder) },
        { "FolderViewCSMSearchMessages", NULL, N_("mcen_me_inbox_search"), NULL, NULL, NULL },
-       { "FolderViewCSMHelp", NULL, N_("mcen_me_inbox_help"), NULL, NULL, NULL },
+       { "FolderViewCSMHelp", NULL, N_("mcen_me_inbox_help"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_help) },
 };
 
+static const GtkActionEntry modest_header_view_action_entries [] = {
+
+       /* Header View CSM actions */
+       { "HeaderViewCSMOpen",          NULL,  N_("mcen_me_inbox_open"),        NULL,       NULL, G_CALLBACK (modest_ui_actions_on_new_folder) },
+       { "HeaderViewCSMReply",         NULL,  N_("mcen_me_inbox_reply"),       NULL,      NULL, G_CALLBACK (modest_ui_actions_on_reply) },
+       { "HeaderViewCSMReplyAll",      NULL,  N_("mcen_me_inbox_replytoall"),  NULL,      NULL, G_CALLBACK (modest_ui_actions_on_reply_all) },
+       { "HeaderViewCSMForward",       NULL,  N_("mcen_me_inbox_forward"),     NULL,      NULL, G_CALLBACK (modest_ui_actions_on_forward) },
+       { "HeaderViewCSMCut",           NULL,  N_("mcen_me_inbox_cut"),         "<CTRL>X", NULL, G_CALLBACK (modest_ui_actions_on_cut) },
+       { "HeaderViewCSMCopy",          NULL,  N_("mcen_me_inbox_copy"),        "<CTRL>C", NULL, G_CALLBACK (modest_ui_actions_on_copy) },
+       { "HeaderViewCSMPaste",         NULL,  N_("mcen_me_inbox_paste"),       "<CTRL>V", NULL, G_CALLBACK (modest_ui_actions_on_paste) },
+       { "HeaderViewCSMDelete",        NULL,  N_("mcen_me_inbox_delete"),      NULL,      NULL, G_CALLBACK (modest_ui_actions_on_delete) },
+       { "HeaderViewCSMCancelSending", NULL,  N_("mcen_me_outbox_cancelsend"), NULL,      NULL, NULL },
+       { "HeaderViewCSMHelp",          NULL,  N_("mcen_me_inbox_help"),        NULL,      NULL, G_CALLBACK (modest_ui_actions_on_help) },
+};
 
 static const GtkToggleActionEntry modest_main_window_toggle_action_entries [] = {
        { "ToolbarToggleView", MODEST_STOCK_SPLIT_VIEW, N_("gqn_toolb_rss_fldonoff"), "<CTRL>t", NULL, G_CALLBACK (modest_ui_actions_toggle_folders_view), FALSE },
@@ -324,15 +338,19 @@ restore_settings (ModestMainWindow *self)
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
 
        conf = modest_runtime_get_conf ();
-       
+
        modest_widget_memory_restore (conf, G_OBJECT(self),
                                      MODEST_CONF_MAIN_WINDOW_KEY);
        modest_widget_memory_restore (conf, G_OBJECT(priv->header_view),
                                      MODEST_CONF_HEADER_VIEW_KEY);
-       modest_widget_memory_restore (conf, G_OBJECT(priv->main_paned),
-                                     MODEST_CONF_MAIN_PANED_KEY);
        modest_widget_memory_restore (conf, G_OBJECT(priv->folder_view),
                                      MODEST_CONF_FOLDER_VIEW_KEY);
+       modest_widget_memory_restore (conf, G_OBJECT(priv->main_paned),
+                                     MODEST_CONF_MAIN_PANED_KEY);
+
+       /* We need to force a redraw here in order to get the right
+          position of the horizontal paned separator */
+       gtk_widget_show (GTK_WIDGET (self));
 }
 
 
@@ -384,6 +402,13 @@ on_account_store_connecting_finished (TnyAccountStore *store, ModestMainWindow *
         * (without the check for >0 accounts, though that is not specified): */
 
        TnyDevice *device = tny_account_store_get_device (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);
        
@@ -429,9 +454,19 @@ _folder_view_csm_menu_activated (GtkWidget *widget, gpointer user_data)
        g_return_if_fail (MODEST_IS_MAIN_WINDOW (user_data));
 
        /* Update dimmed */     
-       modest_window_check_dimming_rules (MODEST_WINDOW (user_data));  
+       modest_window_check_dimming_rules_group (MODEST_WINDOW (user_data), "ModestMenuDimmingRules");  
 }
 
+static void
+_header_view_csm_menu_activated (GtkWidget *widget, gpointer user_data)
+{
+       g_return_if_fail (MODEST_IS_MAIN_WINDOW (user_data));
+
+       /* Update visibility */
+
+       /* Update dimmed */     
+       modest_window_check_dimming_rules_group (MODEST_WINDOW (user_data), "ModestMenuDimmingRules");  
+}
 
 static void
 connect_signals (ModestMainWindow *self)
@@ -451,6 +486,7 @@ connect_signals (ModestMainWindow *self)
        g_signal_connect (G_OBJECT(priv->folder_view), "folder-display-name-changed",
                          G_CALLBACK(modest_ui_actions_on_folder_display_name_changed), self);
 
+       /* Folder view CSM */
        menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/FolderViewCSM");
        gtk_widget_tap_and_hold_setup (GTK_WIDGET (priv->folder_view), menu, NULL, 0);
        g_signal_connect (G_OBJECT(priv->folder_view), "tap-and-hold",
@@ -468,6 +504,13 @@ connect_signals (ModestMainWindow *self)
        g_signal_connect (G_OBJECT(priv->header_view), "key-press-event",
                          G_CALLBACK(on_inner_widgets_key_pressed), self);
 
+       /* Header view CSM */
+       menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/HeaderViewCSM");
+       gtk_widget_tap_and_hold_setup (GTK_WIDGET (priv->header_view), menu, NULL, 0);
+       g_signal_connect (G_OBJECT(priv->header_view), "tap-and-hold",
+                         G_CALLBACK(_header_view_csm_menu_activated),
+                         self);
+       
        /* window */
        g_signal_connect (G_OBJECT(self), "delete-event", G_CALLBACK(on_delete_event), self);
        g_signal_connect (G_OBJECT (self), "window-state-event",
@@ -559,7 +602,8 @@ modest_main_window_new (void)
        ModestMainWindowPrivate *priv = NULL;
        ModestWindowPrivate *parent_priv = NULL;
        GtkWidget *folder_win = NULL;
-       ModestDimmingRulesGroup *rules_group = NULL;
+       ModestDimmingRulesGroup *menu_rules_group = NULL;
+       ModestDimmingRulesGroup *toolbar_rules_group = NULL;
        GtkActionGroup *action_group = NULL;
        GError *error = NULL;
        TnyFolderStoreQuery *query = NULL;
@@ -577,7 +621,8 @@ modest_main_window_new (void)
        action_group = gtk_action_group_new ("ModestMainWindowActions");
        gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
 
-       rules_group = modest_dimming_rules_group_new ("ModestCommonDimmingRules");
+       menu_rules_group = modest_dimming_rules_group_new ("ModestMenuDimmingRules");
+       toolbar_rules_group = modest_dimming_rules_group_new ("ModestToolbarDimmingRules");
 
        /* Add common actions */
        gtk_action_group_add_actions (action_group,
@@ -590,6 +635,11 @@ modest_main_window_new (void)
                                      G_N_ELEMENTS (modest_folder_view_action_entries),
                                      self);
 
+       gtk_action_group_add_actions (action_group,
+                                     modest_header_view_action_entries,
+                                     G_N_ELEMENTS (modest_header_view_action_entries),
+                                     self);
+
        gtk_action_group_add_toggle_actions (action_group,
                                             modest_toggle_action_entries,
                                             G_N_ELEMENTS (modest_toggle_action_entries),
@@ -613,14 +663,20 @@ modest_main_window_new (void)
        }
 
        /* Add common dimming rules */
-       modest_dimming_rules_group_add_rules (rules_group, 
-                                             modest_dimming_entries,
-                                             G_N_ELEMENTS (modest_dimming_entries),
+       modest_dimming_rules_group_add_rules (menu_rules_group, 
+                                             modest_main_window_menu_dimming_entries,
+                                             G_N_ELEMENTS (modest_main_window_menu_dimming_entries),
+                                             self);
+       modest_dimming_rules_group_add_rules (toolbar_rules_group, 
+                                             modest_main_window_toolbar_dimming_entries,
+                                             G_N_ELEMENTS (modest_main_window_toolbar_dimming_entries),
                                              self);
 
        /* Insert dimming rules group for this window */
-       modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, rules_group);                                                     
-       g_object_unref (rules_group);
+       modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, menu_rules_group);
+       modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, toolbar_rules_group);
+       g_object_unref (menu_rules_group);
+       g_object_unref (toolbar_rules_group);
        
        /* Add accelerators */
        gtk_window_add_accel_group (GTK_WINDOW (self), 
@@ -675,9 +731,8 @@ modest_main_window_new (void)
 
        /* paned */
        priv->main_paned = gtk_hpaned_new ();
-       gtk_paned_add1 (GTK_PANED(priv->main_paned), folder_win);
-       gtk_paned_add2 (GTK_PANED(priv->main_paned), priv->contents_widget);
-       gtk_widget_show (GTK_WIDGET(priv->header_view));
+       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... */
@@ -685,7 +740,6 @@ modest_main_window_new (void)
        gtk_box_pack_start (GTK_BOX(priv->main_vbox), priv->main_paned, TRUE, TRUE,0);
 
        gtk_container_add (GTK_CONTAINER(self), priv->main_vbox);
-       restore_settings (MODEST_MAIN_WINDOW(self));
 
        /* Set window icon */
        window_icon = modest_platform_get_icon (MODEST_APP_ICON);
@@ -727,6 +781,9 @@ modest_main_window_new (void)
         * hibernation:  */
        modest_osso_load_state();
 
+       /* Restore window & widget settings */
+       restore_settings (MODEST_MAIN_WINDOW(self));
+
        return MODEST_WINDOW(self);
 }
 
@@ -1191,7 +1248,7 @@ set_alignment (GtkWidget *widget,
 }
 
 static GtkWidget *
-create_details_widget (TnyFolderStore *folder_store)
+create_details_widget (TnyAccount *account)
 {
        GtkWidget *vbox;
        gchar *label;
@@ -1200,7 +1257,7 @@ create_details_widget (TnyFolderStore *folder_store)
 
        /* Account description: */
        
-       if (modest_tny_folder_store_is_virtual_local_folders (folder_store)) {
+       if (modest_tny_account_is_virtual_local_folders (account)) {
                /* Local folders: */
        
                /* Get device name */
@@ -1213,9 +1270,7 @@ create_details_widget (TnyFolderStore *folder_store)
                gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new (label), FALSE, FALSE, 0);
                g_free (device_name);
                g_free (label);
-       } else if (TNY_IS_ACCOUNT (folder_store)) {
-               TnyAccount *account = TNY_ACCOUNT(folder_store);
-               
+       } else {
                if(!strcmp (tny_account_get_id (account), MODEST_MMC_ACCOUNT_ID)) {
                        gtk_box_pack_start (GTK_BOX (vbox), 
                                gtk_label_new (tny_account_get_name (account)), 
@@ -1240,7 +1295,7 @@ create_details_widget (TnyFolderStore *folder_store)
        }
 
        /* Message count */
-       
+       TnyFolderStore *folder_store = TNY_FOLDER_STORE (account);
        label = g_strdup_printf ("%s: %d", _("mcen_fi_rootfolder_messages"), 
                                 modest_tny_folder_store_get_message_count (folder_store));
        gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new (label), FALSE, FALSE, 0);
@@ -1253,7 +1308,7 @@ create_details_widget (TnyFolderStore *folder_store)
        g_free (label);
 
        /* Size / Date */
-       if (modest_tny_folder_store_is_virtual_local_folders (folder_store)) {
+       if (modest_tny_account_is_virtual_local_folders (account)) {
                /* FIXME: format size */
                label = g_strdup_printf ("%s: %d", _("mcen_fi_rootfolder_size"), 
                                         modest_tny_folder_store_get_local_size (folder_store));
@@ -1329,11 +1384,13 @@ modest_main_window_set_contents_style (ModestMainWindow *self,
                /* TODO: show here account details */
                TnyFolderStore *selected_folderstore = 
                        modest_folder_view_get_selected (priv->folder_view);
-                       
-               priv->details_widget = create_details_widget (selected_folderstore);
+               if (TNY_IS_ACCOUNT (selected_folderstore)) {    
+                       priv->details_widget = create_details_widget (
+                               TNY_ACCOUNT (selected_folderstore));
 
-               wrap_in_scrolled_window (priv->contents_widget, 
-                                priv->details_widget);
+                       wrap_in_scrolled_window (priv->contents_widget, 
+                                        priv->details_widget);
+               }
                break;
        }
        default: