Compare commits
	
		
			2 Commits
		
	
	
		
			00fa76cb69
			...
			cce2b6ba51
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| cce2b6ba51 | |||
| 43363ea4bf | 
							
								
								
									
										100
									
								
								fiv.c
									
									
									
									
									
								
							
							
						
						
									
										100
									
								
								fiv.c
									
									
									
									
									
								
							| @ -700,49 +700,28 @@ update_files_index(void) | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| load_directory_without_reload(const char *uri) | ||||
| change_directory_without_reload(const char *uri) | ||||
| { | ||||
| 	gchar *uri_duplicated = g_strdup(uri); | ||||
| 	if (g.directory_back && !strcmp(uri, g.directory_back->data)) { | ||||
| 		// We're going back in history.
 | ||||
| 	if (g.directory) { | ||||
| 			g.directory_forward = | ||||
| 				g_list_prepend(g.directory_forward, g.directory); | ||||
| 			g.directory = NULL; | ||||
| 		} | ||||
| 		// Note that this function can be passed g.directory directly.
 | ||||
| 		if (!strcmp(uri, g.directory)) | ||||
| 			return; | ||||
| 
 | ||||
| 		GList *link = g.directory_back; | ||||
| 		g.directory_back = g_list_remove_link(g.directory_back, link); | ||||
| 		g_list_free_full(link, g_free); | ||||
| 	} else if (g.directory_forward && !strcmp(uri, g.directory_forward->data)) { | ||||
| 		// We're going forward in history.
 | ||||
| 		if (g.directory) { | ||||
| 			g.directory_back = | ||||
| 				g_list_prepend(g.directory_back, g.directory); | ||||
| 			g.directory = NULL; | ||||
| 		} | ||||
| 
 | ||||
| 		GList *link = g.directory_forward; | ||||
| 		g.directory_forward = g_list_remove_link(g.directory_forward, link); | ||||
| 		g_list_free_full(link, g_free); | ||||
| 	} else if (g.directory && strcmp(uri, g.directory)) { | ||||
| 		// We're on a new subpath.
 | ||||
| 		g_list_free_full(g.directory_forward, g_free); | ||||
| 		g.directory_forward = NULL; | ||||
| 
 | ||||
| 		g.directory_back = g_list_prepend(g.directory_back, g.directory); | ||||
| 		g.directory = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	g_free(g.directory); | ||||
| 	g.directory = uri_duplicated; | ||||
| 	g.directory = g_strdup(uri); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| load_directory_without_switching(const char *uri) | ||||
| { | ||||
| 	if (uri) { | ||||
| 		load_directory_without_reload(uri); | ||||
| 		change_directory_without_reload(uri); | ||||
| 
 | ||||
| 		GtkAdjustment *vadjustment = gtk_scrolled_window_get_vadjustment( | ||||
| 			GTK_SCROLLED_WINDOW(g.browser_scroller)); | ||||
| @ -768,9 +747,6 @@ load_directory(const char *uri) | ||||
| { | ||||
| 	load_directory_without_switching(uri); | ||||
| 
 | ||||
| 	// XXX: When something outside the filtered entries is open, the index is
 | ||||
| 	// kept at -1, and browsing doesn't work. How to behave here?
 | ||||
| 	// Should we add it to the pointer array as an exception?
 | ||||
| 	if (uri) { | ||||
| 		switch_to_browser_noselect(); | ||||
| 
 | ||||
| @ -779,6 +755,46 @@ load_directory(const char *uri) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| go_back(void) | ||||
| { | ||||
| 	if (gtk_stack_get_visible_child(GTK_STACK(g.stack)) == g.view_box) { | ||||
| 		switch_to_browser_noselect(); | ||||
| 	} else if (g.directory_back) { | ||||
| 		if (g.directory) | ||||
| 			g.directory_forward = | ||||
| 				g_list_prepend(g.directory_forward, g.directory); | ||||
| 
 | ||||
| 		const gchar *uri = g.directory = g.directory_back->data; | ||||
| 
 | ||||
| 		GList *link = g.directory_back; | ||||
| 		g.directory_back = g_list_remove_link(g.directory_back, link); | ||||
| 		g_list_free(link); | ||||
| 
 | ||||
| 		load_directory(uri); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| go_forward(void) | ||||
| { | ||||
| 	if (g.directory_forward) { | ||||
| 		if (g.directory) | ||||
| 			g.directory_back = | ||||
| 				g_list_prepend(g.directory_back, g.directory); | ||||
| 
 | ||||
| 		const gchar *uri = g.directory = g.directory_forward->data; | ||||
| 
 | ||||
| 		GList *link = g.directory_forward; | ||||
| 		g.directory_forward = g_list_remove_link(g.directory_forward, link); | ||||
| 		g_list_free(link); | ||||
| 
 | ||||
| 		load_directory(uri); | ||||
| 	} else if (g.uri) { | ||||
| 		switch_to_view(); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| on_model_files_changed(FivIoModel *model, G_GNUC_UNUSED gpointer user_data) | ||||
| { | ||||
| @ -877,6 +893,10 @@ open_image(const char *uri) | ||||
| 		update_files_index(); | ||||
| 	g_free(parent); | ||||
| 
 | ||||
| 	// XXX: When something outside currently filtered entries is open,
 | ||||
| 	// g.files_index is kept at -1, and browsing doesn't work.
 | ||||
| 	// How to behave here?
 | ||||
| 
 | ||||
| 	switch_to_view(); | ||||
| } | ||||
| 
 | ||||
| @ -1399,16 +1419,10 @@ on_key_press(G_GNUC_UNUSED GtkWidget *widget, GdkEventKey *event, | ||||
| 	case GDK_MOD1_MASK: | ||||
| 		switch (event->keyval) { | ||||
| 		case GDK_KEY_Left: | ||||
| 			if (gtk_stack_get_visible_child(GTK_STACK(g.stack)) == g.view_box) | ||||
| 				switch_to_browser_noselect(); | ||||
| 			else if (g.directory_back) | ||||
| 				load_directory(g.directory_back->data); | ||||
| 			go_back(); | ||||
| 			return TRUE; | ||||
| 		case GDK_KEY_Right: | ||||
| 			if (g.directory_forward) | ||||
| 				load_directory(g.directory_forward->data); | ||||
| 			else if (g.uri) | ||||
| 				switch_to_view(); | ||||
| 			go_forward(); | ||||
| 			return TRUE; | ||||
| 		} | ||||
| 		break; | ||||
| @ -1570,7 +1584,7 @@ on_button_press_view(G_GNUC_UNUSED GtkWidget *widget, GdkEventButton *event) | ||||
| 	switch (event->button) { | ||||
| 	case 4:  // back (GdkWin32, GdkQuartz)
 | ||||
| 	case 8:  // back
 | ||||
| 		switch_to_browser_noselect(); | ||||
| 		go_back(); | ||||
| 		return TRUE; | ||||
| 	case GDK_BUTTON_PRIMARY: | ||||
| 		if (event->type == GDK_2BUTTON_PRESS) { | ||||
| @ -1592,15 +1606,11 @@ on_button_press_browser_paned( | ||||
| 	switch (event->button) { | ||||
| 	case 4:  // back (GdkWin32, GdkQuartz)
 | ||||
| 	case 8:  // back
 | ||||
| 		if (g.directory_back) | ||||
| 			load_directory(g.directory_back->data); | ||||
| 		go_back(); | ||||
| 		return TRUE; | ||||
| 	case 5:  // forward (GdkWin32, GdkQuartz)
 | ||||
| 	case 9:  // forward
 | ||||
| 		if (g.directory_forward) | ||||
| 			load_directory(g.directory_forward->data); | ||||
| 		else if (g.uri) | ||||
| 			switch_to_view(); | ||||
| 		go_forward(); | ||||
| 		return TRUE; | ||||
| 	default: | ||||
| 		return FALSE; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user