diff src/filelist.c @ 3:c0e337a01cb7

0.8.0
author gqview
date Thu, 13 Apr 2000 12:55:19 +0000
parents b3e0e515fabf
children d907d608745f
line wrap: on
line diff
--- a/src/filelist.c	Thu Apr 13 12:53:03 2000 +0000
+++ b/src/filelist.c	Thu Apr 13 12:55:19 2000 +0000
@@ -1,6 +1,6 @@
 /*
  * GQview image viewer
- * (C)1999 John Ellis
+ * (C)2000 John Ellis
  *
  * Author: John Ellis
  *
@@ -124,7 +124,7 @@
 		{
 		gchar *buf = g_strdup(custom_filter);
 		gchar *pos_ptr_b;
-		gchar *pos_ptr_e = custom_filter;
+		gchar *pos_ptr_e = buf;
 		while(pos_ptr_e[0] != '\0')
 			{
 			pos_ptr_b = pos_ptr_e;
@@ -336,8 +336,17 @@
 
 void file_next_image()
 {
-	gint current = find_file_in_list(image_get_path());
-	gint total = file_count();
+	gint current;
+	gint total;
+
+	if (slideshow_is_running())
+		{
+		slideshow_next();
+		return;
+		}
+
+	current = find_file_in_list(image_get_path());
+	total = file_count();
 
 	if (current >= 0)
 		{
@@ -354,7 +363,15 @@
 
 void file_prev_image()
 {
-	gint current = find_file_in_list(image_get_path());
+	gint current;
+
+	if (slideshow_is_running())
+		{
+		slideshow_prev();
+		return;
+		}
+
+	current = find_file_in_list(image_get_path());
 
 	if (current >= 0)
 		{
@@ -705,6 +722,54 @@
  *-----------------------------------------------------------------------------
  */
 
+void path_entry_tab_cb(gchar *newdir, gpointer data)
+{
+	gchar *new_path;
+	gchar *buf;
+	gint found = FALSE;
+
+	new_path = g_strdup(newdir);
+	parse_out_relatives(new_path);
+	buf = remove_level_from_path(new_path);
+
+	if (buf && current_path && strcmp(buf, current_path) == 0)
+		{
+		GList *work;
+		gchar *part;
+
+		part = filename_from_path(new_path);
+		work = file_list;
+
+		while(part && work)
+			{
+			gchar *name = work->data;
+			work = work->next;
+
+			if (strncmp(part, name, strlen(part)) == 0)
+				{
+				gint row = g_list_index(file_list, name);
+				if (!gtk_clist_row_is_visible(GTK_CLIST(file_clist), row) != GTK_VISIBILITY_FULL)
+					{
+					gtk_clist_moveto(GTK_CLIST(file_clist), row, -1, 0.5, 0.0);
+					}
+				found = TRUE;
+				break;
+				}
+			}
+		}
+
+	if (!found && new_path && current_path &&
+	    strcmp(new_path, current_path) != 0 && isdir(new_path))
+		{
+		filelist_change_to(new_path);
+		/* we are doing tab completion, add '/' back */
+		gtk_entry_append_text(GTK_ENTRY(path_entry), "/");
+		}
+
+	g_free(buf);
+	g_free(new_path);
+}
+
 void path_entry_cb(gchar *newdir, gpointer data)
 {
 	gchar *new_path = g_strdup(newdir);