diff options
author | Srinivasa Ragavan <sragavan@gnome.org> | 2010-08-12 13:30:03 +0800 |
---|---|---|
committer | Srinivasa Ragavan <sragavan@gnome.org> | 2010-08-12 13:35:47 +0800 |
commit | a6c40f7e8f52c44446d8e9b6ba8cbd6a7cfc3911 (patch) | |
tree | 1591085b776bbfff8063818d5f44397109384203 /mail/e-mail-reader.c | |
parent | 7dbd643c722a1c7b0ca1c95b571aab3bb7b7ff60 (diff) | |
download | gsoc2013-evolution-a6c40f7e8f52c44446d8e9b6ba8cbd6a7cfc3911.tar.gz gsoc2013-evolution-a6c40f7e8f52c44446d8e9b6ba8cbd6a7cfc3911.tar.zst gsoc2013-evolution-a6c40f7e8f52c44446d8e9b6ba8cbd6a7cfc3911.zip |
Add keybindings to tab.
Control Up - Go to parent folder.
Control Shift Up/Down - prev/next tab
Control Shift w - close tab.
Diffstat (limited to 'mail/e-mail-reader.c')
-rw-r--r-- | mail/e-mail-reader.c | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 63cbba1cf5..0cb67ce3b1 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -93,6 +93,10 @@ enum { FOLDER_LOADED, SHOW_SEARCH_BAR, UPDATE_ACTIONS, + SHOW_FOLDER, + SHOW_PREVTAB, + SHOW_NEXTTAB, + CLOSE_TAB, LAST_SIGNAL }; @@ -671,6 +675,34 @@ exit: } static void +action_mail_folder_cb (GtkAction *action, + EMailReader *reader) +{ + g_signal_emit (reader, signals[SHOW_FOLDER], 0); +} + +static void +action_mail_nexttab_cb (GtkAction *action, + EMailReader *reader) +{ + g_signal_emit (reader, signals[SHOW_NEXTTAB], 0); +} + +static void +action_mail_prevtab_cb (GtkAction *action, + EMailReader *reader) +{ + g_signal_emit (reader, signals[SHOW_PREVTAB], 0); +} + +static void +action_mail_closetab_cb (GtkAction *action, + EMailReader *reader) +{ + g_signal_emit (reader, signals[CLOSE_TAB], 0); +} + +static void action_mail_next_cb (GtkAction *action, EMailReader *reader) { @@ -1614,6 +1646,34 @@ static GtkActionEntry mail_reader_entries[] = { N_("Move selected messages to another folder"), G_CALLBACK (action_mail_move_cb) }, + { "mail-goto-folder", + NULL, + N_("_Switch to Folder"), + "<Control>Up", + N_("Display the parent folder"), + G_CALLBACK (action_mail_folder_cb) }, + + { "mail-goto-nexttab", + NULL, + N_("Switch to _next tab"), + "<Shift><Control>Down", + N_("Switch to the next tab"), + G_CALLBACK (action_mail_nexttab_cb) }, + + { "mail-goto-prevtab", + NULL, + N_("Switch to _previous tab"), + "<Shift><Control>Up", + N_("Switch to the previous tab"), + G_CALLBACK (action_mail_prevtab_cb) }, + + { "mail-close-tab", + NULL, + N_("Cl_ose current tab"), + "<Shift><Control>w", + N_("Close current tab"), + G_CALLBACK (action_mail_closetab_cb) }, + { "mail-next", GTK_STOCK_GO_FORWARD, N_("_Next Message"), @@ -2338,6 +2398,12 @@ mail_reader_get_folder_uri (EMailReader *reader) return MESSAGE_LIST (message_list)->folder_uri; } +static gboolean +mail_reader_get_enable_show_folder (EMailReader *reader) +{ + return FALSE; +} + static void mail_reader_set_folder (EMailReader *reader, CamelFolder *folder, @@ -2401,6 +2467,7 @@ mail_reader_update_actions (EMailReader *reader, GtkAction *action; const gchar *action_name; gboolean sensitive; + EMailReaderPrivate *priv; /* Be descriptive. */ gboolean any_messages_selected; @@ -2421,6 +2488,8 @@ mail_reader_update_actions (EMailReader *reader, gboolean selection_is_mailing_list; gboolean single_message_selected; + priv = E_MAIL_READER_GET_PRIVATE (reader); + shell_backend = e_mail_reader_get_shell_backend (reader); shell = e_shell_backend_get_shell (shell_backend); shell_settings = e_shell_get_shell_settings (shell); @@ -2619,6 +2688,26 @@ mail_reader_update_actions (EMailReader *reader, action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); + action_name = "mail-goto-folder"; + action = e_mail_reader_get_action (reader, action_name); + g_object_set (action, "visible", e_mail_reader_get_enable_show_folder (reader), NULL); + gtk_action_set_sensitive (action, e_mail_reader_get_enable_show_folder (reader)); + + action_name = "mail-goto-nexttab"; + action = e_mail_reader_get_action (reader, action_name); + g_object_set (action, "visible", FALSE, NULL); + gtk_action_set_sensitive (action, TRUE); + + action_name = "mail-goto-prevtab"; + action = e_mail_reader_get_action (reader, action_name); + g_object_set (action, "visible", FALSE, NULL); + gtk_action_set_sensitive (action, TRUE); + + action_name = "mail-close-tab"; + action = e_mail_reader_get_action (reader, action_name); + g_object_set (action, "visible", FALSE, NULL); + gtk_action_set_sensitive (action, TRUE); + action_name = "mail-move"; sensitive = any_messages_selected; action = e_mail_reader_get_action (reader, action_name); @@ -2768,6 +2857,7 @@ mail_reader_class_init (EMailReaderIface *iface) iface->get_selected_uids = mail_reader_get_selected_uids; iface->get_folder = mail_reader_get_folder; iface->get_folder_uri = mail_reader_get_folder_uri; + iface->enable_show_folder = mail_reader_get_enable_show_folder; iface->set_folder = mail_reader_set_folder; iface->set_message = mail_reader_set_message; iface->open_selected_mail = e_mail_reader_open_selected; @@ -2807,6 +2897,42 @@ mail_reader_class_init (EMailReaderIface *iface) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + signals[SHOW_FOLDER] = g_signal_new ( + "show-folder", + G_OBJECT_CLASS_TYPE (iface), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[SHOW_NEXTTAB] = g_signal_new ( + "show-next-tab", + G_OBJECT_CLASS_TYPE (iface), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[SHOW_PREVTAB] = g_signal_new ( + "show-previous-tab", + G_OBJECT_CLASS_TYPE (iface), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[CLOSE_TAB] = g_signal_new ( + "close-tab", + G_OBJECT_CLASS_TYPE (iface), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + signals[UPDATE_ACTIONS] = g_signal_new ( "update-actions", G_OBJECT_CLASS_TYPE (iface), @@ -2953,6 +3079,26 @@ e_mail_reader_init (EMailReader *reader) action = e_mail_reader_get_action (reader, action_name); g_object_set (action, "is-important", TRUE, NULL); + action_name = "mail-goto-folder"; + action = e_mail_reader_get_action (reader, action_name); + g_object_set (action, "visible", FALSE, NULL); + gtk_action_set_sensitive (action, e_mail_reader_get_enable_show_folder (reader)); + + action_name = "mail-goto-nexttab"; + action = e_mail_reader_get_action (reader, action_name); + g_object_set (action, "visible", FALSE, NULL); + gtk_action_set_sensitive (action, TRUE); + + action_name = "mail-goto-prevtab"; + action = e_mail_reader_get_action (reader, action_name); + g_object_set (action, "visible", FALSE, NULL); + gtk_action_set_sensitive (action, TRUE); + + action_name = "mail-close-tab"; + action = e_mail_reader_get_action (reader, action_name); + g_object_set (action, "visible", FALSE, NULL); + gtk_action_set_sensitive (action, TRUE); + action_name = "mail-next"; action = e_mail_reader_get_action (reader, action_name); g_object_set (action, "short-label", _("Next"), NULL); @@ -3566,3 +3712,41 @@ e_mail_reader_show_search_bar (EMailReader *reader) g_signal_emit (reader, signals[SHOW_SEARCH_BAR], 0); } + +void +e_mail_reader_enable_show_folder (EMailReader *reader) +{ + GtkAction *action; + const gchar *action_name; + EMailReaderPrivate *priv; + CamelFolder *folder; + char *label; + + g_return_if_fail (E_IS_MAIL_READER (reader)); + + priv = E_MAIL_READER_GET_PRIVATE (reader); + folder = e_mail_reader_get_folder (reader); + + label = g_strdup_printf (_("Folder '%s'"), camel_folder_get_full_name(folder)); + + action_name = "mail-goto-folder"; + action = e_mail_reader_get_action (reader, action_name); + g_object_set (action, "visible", TRUE, + "label", label, NULL); + gtk_action_set_sensitive (action, e_mail_reader_get_enable_show_folder (reader)); + + g_free (label); +} + +gboolean +e_mail_reader_get_enable_show_folder (EMailReader *reader) +{ + EMailReaderIface *iface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), FALSE); + + iface = E_MAIL_READER_GET_IFACE (reader); + g_return_val_if_fail (iface->enable_show_folder != NULL, FALSE); + + return iface->enable_show_folder (reader); +} |