aboutsummaryrefslogtreecommitdiff
path: root/src/folderview.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2010-06-30 09:31:55 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2010-06-30 09:31:55 +0000
commit12e521a8f84a27351e89844c628c4270ed4deec0 (patch)
tree9b3112782b8c6b43fc7c16daa7b54b3ca9ec6cdb /src/folderview.c
parent4a8036cd561af3db6578dba40e79c4e39940fbde (diff)
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
Diffstat (limited to 'src/folderview.c')
-rw-r--r--src/folderview.c49
1 files changed, 48 insertions, 1 deletions
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;
}