From 12e521a8f84a27351e89844c628c4270ed4deec0 Mon Sep 17 00:00:00 2001 From: hiro Date: Wed, 30 Jun 2010 09:31:55 +0000 Subject: move up/collapse/expand row with left/right key (like Windows Explorer). git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@2592 ee746299-78ed-0310-b773-934348b2243d --- src/folderview.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) (limited to 'src/folderview.c') diff --git a/src/folderview.c b/src/folderview.c index d71bd2cd..f0c3ea26 100644 --- a/src/folderview.c +++ b/src/folderview.c @@ -1862,6 +1862,8 @@ static gboolean folderview_key_pressed(GtkWidget *widget, GdkEventKey *event, FolderView *folderview) { GtkTreePath *opened = NULL, *selected = NULL; + GtkAdjustment *adj; + gboolean moved; if (!event) return FALSE; @@ -1877,7 +1879,6 @@ static gboolean folderview_key_pressed(GtkWidget *widget, GdkEventKey *event, folderview->selected); } return TRUE; - break; case GDK_space: case GDK_KP_Space: if (folderview->selected) { @@ -1899,6 +1900,52 @@ static gboolean folderview_key_pressed(GtkWidget *widget, GdkEventKey *event, return TRUE; } break; + case GDK_Left: + case GDK_KP_Left: + if ((event->state & + (GDK_SHIFT_MASK|GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) + return FALSE; + adj = gtk_scrolled_window_get_hadjustment + (GTK_SCROLLED_WINDOW(folderview->scrolledwin)); + if (adj->lower != adj->value) + return FALSE; + if (folderview->selected) { + selected = gtk_tree_row_reference_get_path + (folderview->selected); + if (selected) { + if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(folderview->treeview), selected)) { + gtk_tree_view_collapse_row(GTK_TREE_VIEW(folderview->treeview), selected); + gtk_tree_path_free(selected); + return TRUE; + } + gtk_tree_path_free(selected); + } + } + g_signal_emit_by_name(G_OBJECT(folderview->treeview), + "select-cursor-parent", &moved); + return TRUE; + case GDK_Right: + case GDK_KP_Right: + if ((event->state & + (GDK_SHIFT_MASK|GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) + return FALSE; + adj = gtk_scrolled_window_get_hadjustment + (GTK_SCROLLED_WINDOW(folderview->scrolledwin)); + if (adj->upper - adj->page_size != adj->value) + return FALSE; + if (folderview->selected) { + selected = gtk_tree_row_reference_get_path + (folderview->selected); + if (selected) { + if (!gtk_tree_view_row_expanded(GTK_TREE_VIEW(folderview->treeview), selected)) { + gtk_tree_view_expand_row(GTK_TREE_VIEW(folderview->treeview), selected, FALSE); + gtk_tree_path_free(selected); + return TRUE; + } + gtk_tree_path_free(selected); + } + } + break; default: break; } -- cgit v1.2.3