aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
Diffstat (limited to 'mail')
-rw-r--r--mail/em-folder-tree.c14
-rw-r--r--mail/em-folder-tree.h1
-rw-r--r--mail/mail-component.c20
3 files changed, 34 insertions, 1 deletions
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c
index 31144935f9..1702713104 100644
--- a/mail/em-folder-tree.c
+++ b/mail/em-folder-tree.c
@@ -115,6 +115,7 @@ struct _EMFolderTreePrivate {
enum {
FOLDER_ACTIVATED, /* aka double-clicked or user hit enter */
FOLDER_SELECTED,
+ HIDDEN_KEY_EVENT,
LAST_SIGNAL
};
@@ -239,6 +240,15 @@ em_folder_tree_class_init (EMFolderTreeClass *klass)
G_TYPE_NONE, 2,
G_TYPE_STRING,
G_TYPE_STRING);
+
+ signals[HIDDEN_KEY_EVENT] =
+ g_signal_new ("hidden-key-event",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EMFolderTreeClass, hidden_key_event),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOXED,
+ G_TYPE_NONE, 1, GDK_TYPE_EVENT);
}
static gboolean
@@ -2285,7 +2295,9 @@ emft_tree_button_press (GtkTreeView *treeview, GdkEventButton *event, EMFolderTr
static gboolean
emft_tree_user_event (GtkTreeView *treeview, GdkEvent *e, EMFolderTree *emft)
{
- if (e && e->type == GDK_KEY_PRESS && e->key.keyval == GDK_space) {
+ if (e && e->type == GDK_KEY_PRESS && (e->key.keyval == GDK_space || e->key.keyval == '.' || e->key.keyval == ',' || e->key.keyval == '[' || e->key.keyval == ']')) {
+ g_signal_emit (emft, signals [HIDDEN_KEY_EVENT], 0, e);
+
return TRUE;
}
if (!emft->priv->do_multiselect)
diff --git a/mail/em-folder-tree.h b/mail/em-folder-tree.h
index ba02ff1e59..e8b607151c 100644
--- a/mail/em-folder-tree.h
+++ b/mail/em-folder-tree.h
@@ -62,6 +62,7 @@ struct _EMFolderTreeClass {
/* signals */
void (* folder_activated) (EMFolderTree *emft, const gchar *full_name, const gchar *uri);
void (* folder_selected) (EMFolderTree *emft, const gchar *full_name, const gchar *uri, guint32 flags);
+ void (* hidden_key_event) (EMFolderTree *emft, GdkEvent *event);
};
GType em_folder_tree_get_type (void);
diff --git a/mail/mail-component.c b/mail/mail-component.c
index 4b788b3178..c54a76abef 100644
--- a/mail/mail-component.c
+++ b/mail/mail-component.c
@@ -414,6 +414,25 @@ folder_selected_cb (EMFolderTree *emft, const gchar *path, const gchar *uri, gui
}
}
+static void
+tree_hidden_key_event_cb (EMFolderTree *emft, GdkEvent *event, EMFolderView *view)
+{
+ if (event && event->type == GDK_KEY_PRESS && view && view->list) {
+ switch (event->key.keyval) {
+ case '[':
+ case ',':
+ gtk_widget_grab_focus ((GtkWidget *) view->list);
+ message_list_select (view->list, MESSAGE_LIST_SELECT_PREVIOUS|MESSAGE_LIST_SELECT_WRAP, 0, CAMEL_MESSAGE_SEEN);
+ break;
+ case ']':
+ case '.':
+ gtk_widget_grab_focus ((GtkWidget *) view->list);
+ message_list_select (view->list, MESSAGE_LIST_SELECT_NEXT|MESSAGE_LIST_SELECT_WRAP, 0, CAMEL_MESSAGE_SEEN);
+ break;
+ }
+ }
+}
+
static gint
check_autosave(gpointer data)
{
@@ -786,6 +805,7 @@ impl_createView (PortableServer_Servant servant,
g_signal_connect (component_view->view_control, "activate", G_CALLBACK (view_control_activate_cb), view_widget);
g_signal_connect (tree_widget, "folder-selected", G_CALLBACK (folder_selected_cb), view_widget);
+ g_signal_connect (tree_widget, "hidden-key-event", G_CALLBACK (tree_hidden_key_event_cb), view_widget);
g_signal_connect((EMFolderBrowser *)view_widget, "account_search_cleared", G_CALLBACK (enable_folder_tree), tree_widget);
g_signal_connect(((EMFolderBrowser *)view_widget), "account_search_activated", G_CALLBACK (disable_folder_tree), tree_widget);