[Goodies-commits] r3006 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Sun Aug 19 15:40:45 CEST 2007


Author: stephan
Date: 2007-08-19 13:40:45 +0000 (Sun, 19 Aug 2007)
New Revision: 3006

Modified:
   ristretto/trunk/src/main.c
   ristretto/trunk/src/navigator.c
   ristretto/trunk/src/navigator.h
   ristretto/trunk/src/picture_viewer.c
   ristretto/trunk/src/picture_viewer.h
   ristretto/trunk/src/thumbnail_viewer.c
   ristretto/trunk/src/thumbnail_viewer.h
Log:
Please do not mind the memory-leak, cached pictures are not cleaned up yet.
Stuff should work a bit better now.



Modified: ristretto/trunk/src/main.c
===================================================================
--- ristretto/trunk/src/main.c	2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/main.c	2007-08-19 13:40:45 UTC (rev 3006)
@@ -21,9 +21,9 @@
 
 #include <thunar-vfs/thunar-vfs.h>
 
+#include "navigator.h"
 #include "picture_viewer.h"
 #include "thumbnail_viewer.h"
-#include "navigator.h"
 
 static ThunarVfsMimeDatabase *mime_dbase = NULL;
 
@@ -102,45 +102,45 @@
     RsttoNavigator *navigator = NULL;
 
 
-	#ifdef ENABLE_NLS
-	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
- 	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- 	textdomain (GETTEXT_PACKAGE);
-	#endif
+    #ifdef ENABLE_NLS
+    bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+     bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+     textdomain (GETTEXT_PACKAGE);
+    #endif
 
-	gtk_init(&argc, &argv);
+    gtk_init(&argc, &argv);
 
-	thunar_vfs_init();
+    thunar_vfs_init();
 
-	mime_dbase = thunar_vfs_mime_database_get_default();
+    mime_dbase = thunar_vfs_mime_database_get_default();
 
-	gtk_window_set_default_icon_name("ristretto");
+    gtk_window_set_default_icon_name("ristretto");
 
-	GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
-	gtk_window_set_title(GTK_WINDOW(window), PACKAGE_STRING);
+    gtk_window_set_title(GTK_WINDOW(window), PACKAGE_STRING);
 
-	if(argc == 2)
+    if(argc == 2)
         path = thunar_vfs_path_new(argv[1], NULL);
 
 
-	g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
+    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
 
-	GtkWidget *viewer = rstto_picture_viewer_new();
-    navigator = rstto_navigator_new(RSTTO_PICTURE_VIEWER(viewer));
+    navigator = rstto_navigator_new();
+    GtkWidget *viewer = rstto_picture_viewer_new(navigator);
 
     g_signal_connect(window , "key-press-event", G_CALLBACK(cb_rstto_key_press_event) , navigator);
-	g_signal_connect(G_OBJECT(navigator), "file_changed", G_CALLBACK(cb_rstto_nav_file_changed), window);
+    g_signal_connect(G_OBJECT(navigator), "file_changed", G_CALLBACK(cb_rstto_nav_file_changed), window);
 
-	GtkWidget *s_window = gtk_scrolled_window_new(NULL,NULL);
-	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(s_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-	GtkWidget *main_vbox = gtk_vbox_new(0, FALSE);
-	main_hbox = gtk_hbox_new(0, FALSE);
+    GtkWidget *s_window = gtk_scrolled_window_new(NULL,NULL);
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(s_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+    GtkWidget *main_vbox = gtk_vbox_new(0, FALSE);
+    main_hbox = gtk_hbox_new(0, FALSE);
     main_vbox1 = gtk_vbox_new(0, FALSE);
     thumbnail_viewer = rstto_thumbnail_viewer_new(navigator);
     menu_bar = gtk_menu_bar_new();
-	image_tool_bar = gtk_toolbar_new();
-	app_tool_bar = gtk_toolbar_new();
+    image_tool_bar = gtk_toolbar_new();
+    app_tool_bar = gtk_toolbar_new();
     status_bar = gtk_statusbar_new();
 
     GtkWidget *menu_item_file = gtk_menu_item_new_with_mnemonic(_("_File"));
@@ -150,7 +150,7 @@
     GtkWidget *menu_item_quit = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
 
     GtkWidget *menu_file = gtk_menu_new();
-	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_file), menu_file);
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_file), menu_file);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), menu_item_open);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), menu_item_open_dir);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), menu_item_separator);
@@ -163,7 +163,7 @@
     GtkWidget *menu_item_flip_h = gtk_menu_item_new_with_mnemonic(_("Flip _Horizontally"));
 
     GtkWidget *menu_edit = gtk_menu_new();
-	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_edit), menu_edit);
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_edit), menu_edit);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), menu_item_rotate_left);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), menu_item_rotate_right);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), menu_item_flip_v);
@@ -174,12 +174,12 @@
     GtkWidget *menu_item_view_fs = gtk_image_menu_item_new_from_stock(GTK_STOCK_FULLSCREEN, NULL);
 
     GtkWidget *menu_view = gtk_menu_new();
-	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_view), menu_view);
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_view), menu_view);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), menu_item_tv);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), menu_item_view_fs);
 
     GtkWidget *menu_tv = gtk_menu_new();
-	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_tv), menu_tv);
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_tv), menu_tv);
     GtkWidget *menu_item_htv = gtk_radio_menu_item_new_with_mnemonic(NULL, _("Show Horizontally"));
     GtkWidget *menu_item_vtv = gtk_radio_menu_item_new_with_mnemonic_from_widget(GTK_RADIO_MENU_ITEM(menu_item_htv), _("Show Vertically"));
     GtkWidget *menu_item_ntv = gtk_radio_menu_item_new_with_mnemonic_from_widget(GTK_RADIO_MENU_ITEM(menu_item_htv), _("Hide"));
@@ -201,7 +201,7 @@
     menu_item_separator = gtk_separator_menu_item_new();
 
     GtkWidget *menu_go = gtk_menu_new();
-	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_go), menu_go);
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_go), menu_go);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_go), menu_item_first);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_go), menu_item_last);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_go), menu_item_forward);
@@ -214,7 +214,7 @@
     GtkWidget *menu_item_help_about = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, NULL);
 
     GtkWidget *menu_help = gtk_menu_new();
-	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_help), menu_help);
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_help), menu_help);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_help), menu_item_help_about);
 
 
@@ -224,211 +224,221 @@
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item_go);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item_help);
 
-	GtkToolItem *zoom_fit= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_FIT);
-	GtkToolItem *zoom_100= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_100);
-	GtkToolItem *zoom_out= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_OUT);
-	GtkToolItem *zoom_in = gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_IN);
-	GtkToolItem *forward = gtk_tool_button_new_from_stock(GTK_STOCK_GO_FORWARD);
-	GtkToolItem *previous = gtk_tool_button_new_from_stock(GTK_STOCK_GO_BACK);
-	GtkToolItem *open = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
-	GtkToolItem *spacer = gtk_tool_item_new();
-	GtkToolItem *separator = gtk_separator_tool_item_new();
+    GtkToolItem *zoom_fit= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_FIT);
+    GtkToolItem *zoom_100= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_100);
+    GtkToolItem *zoom_out= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_OUT);
+    GtkToolItem *zoom_in = gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_IN);
+    GtkToolItem *forward = gtk_tool_button_new_from_stock(GTK_STOCK_GO_FORWARD);
+    GtkToolItem *previous = gtk_tool_button_new_from_stock(GTK_STOCK_GO_BACK);
+    GtkToolItem *open = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
+    GtkToolItem *spacer = gtk_tool_item_new();
+    GtkToolItem *separator = gtk_separator_tool_item_new();
 
 
-	gtk_tool_item_set_expand(spacer, TRUE);
-	gtk_tool_item_set_homogeneous(spacer, FALSE);
+    gtk_tool_item_set_expand(spacer, TRUE);
+    gtk_tool_item_set_homogeneous(spacer, FALSE);
 
-	gtk_widget_set_size_request(window, 400, 300);
+    gtk_widget_set_size_request(window, 400, 300);
 
 
-	gtk_container_add(GTK_CONTAINER(s_window), viewer);
+    gtk_container_add(GTK_CONTAINER(s_window), viewer);
     gtk_toolbar_set_orientation(GTK_TOOLBAR(image_tool_bar), GTK_ORIENTATION_VERTICAL);
-	gtk_box_pack_start(GTK_BOX(main_hbox), image_tool_bar, FALSE, TRUE, 0);
-	gtk_box_pack_start(GTK_BOX(main_hbox), main_vbox1, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_hbox), image_tool_bar, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_hbox), main_vbox1, TRUE, TRUE, 0);
 
-	gtk_box_pack_start(GTK_BOX(main_vbox1), s_window, TRUE, TRUE, 0);
-	gtk_box_pack_start(GTK_BOX(main_vbox1), thumbnail_viewer, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_vbox1), s_window, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_vbox1), thumbnail_viewer, FALSE, TRUE, 0);
 
-	gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0);
-	gtk_box_pack_start(GTK_BOX(main_vbox), app_tool_bar, FALSE, TRUE, 0);
-	gtk_box_pack_start(GTK_BOX(main_vbox), main_hbox, TRUE, TRUE, 0);
-	gtk_box_pack_start(GTK_BOX(main_vbox), status_bar, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_vbox), app_tool_bar, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_vbox), main_hbox, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_vbox), status_bar, FALSE, TRUE, 0);
 
-	rstto_picture_viewer_fit_scale(RSTTO_PICTURE_VIEWER(viewer));
+    rstto_picture_viewer_fit_scale(RSTTO_PICTURE_VIEWER(viewer));
 
-	gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_fit, 0);
-	gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_100, 0);
-	gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_out, 0);
-	gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_in, 0);
-	//gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), spacer, 0);
-	gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), forward, 0);
-	gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), previous, 0);
-	gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), separator, 0);
-	gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), open, 0);
+    gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_fit, 0);
+    gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_100, 0);
+    gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_out, 0);
+    gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_in, 0);
+    //gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), spacer, 0);
+    gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), forward, 0);
+    gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), previous, 0);
+    gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), separator, 0);
+    gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), open, 0);
 
-	g_signal_connect(G_OBJECT(zoom_fit), "clicked", G_CALLBACK(cb_rstto_zoom_fit), viewer);
-	g_signal_connect(G_OBJECT(zoom_100), "clicked", G_CALLBACK(cb_rstto_zoom_100), viewer);
-	g_signal_connect(G_OBJECT(zoom_in), "clicked", G_CALLBACK(cb_rstto_zoom_in), viewer);
-	g_signal_connect(G_OBJECT(zoom_out), "clicked", G_CALLBACK(cb_rstto_zoom_out), viewer);
-	g_signal_connect(G_OBJECT(forward), "clicked", G_CALLBACK(cb_rstto_forward), navigator);
-	g_signal_connect(G_OBJECT(previous), "clicked", G_CALLBACK(cb_rstto_previous), navigator);
-	g_signal_connect(G_OBJECT(open), "clicked", G_CALLBACK(cb_rstto_open), navigator);
+    g_signal_connect(G_OBJECT(zoom_fit), "clicked", G_CALLBACK(cb_rstto_zoom_fit), viewer);
+    g_signal_connect(G_OBJECT(zoom_100), "clicked", G_CALLBACK(cb_rstto_zoom_100), viewer);
+    g_signal_connect(G_OBJECT(zoom_in), "clicked", G_CALLBACK(cb_rstto_zoom_in), viewer);
+    g_signal_connect(G_OBJECT(zoom_out), "clicked", G_CALLBACK(cb_rstto_zoom_out), viewer);
+    g_signal_connect(G_OBJECT(forward), "clicked", G_CALLBACK(cb_rstto_forward), navigator);
+    g_signal_connect(G_OBJECT(previous), "clicked", G_CALLBACK(cb_rstto_previous), navigator);
+    g_signal_connect(G_OBJECT(open), "clicked", G_CALLBACK(cb_rstto_open), navigator);
 
-	g_signal_connect(G_OBJECT(menu_item_quit), "activate", G_CALLBACK(gtk_main_quit), NULL);
-	g_signal_connect(G_OBJECT(menu_item_open), "activate", G_CALLBACK(cb_rstto_open), navigator);
-	g_signal_connect(G_OBJECT(menu_item_open_dir), "activate", G_CALLBACK(cb_rstto_open_dir), navigator);
-	g_signal_connect(G_OBJECT(menu_item_help_about), "activate", G_CALLBACK(cb_rstto_help_about), window);
+    g_signal_connect(G_OBJECT(menu_item_quit), "activate", G_CALLBACK(gtk_main_quit), NULL);
+    g_signal_connect(G_OBJECT(menu_item_open), "activate", G_CALLBACK(cb_rstto_open), navigator);
+    g_signal_connect(G_OBJECT(menu_item_open_dir), "activate", G_CALLBACK(cb_rstto_open_dir), navigator);
+    g_signal_connect(G_OBJECT(menu_item_help_about), "activate", G_CALLBACK(cb_rstto_help_about), window);
 
-	g_signal_connect(G_OBJECT(menu_item_forward), "activate", G_CALLBACK(cb_rstto_forward), navigator);
-	g_signal_connect(G_OBJECT(menu_item_back), "activate", G_CALLBACK(cb_rstto_previous), navigator);
-	g_signal_connect(G_OBJECT(menu_item_first), "activate", G_CALLBACK(cb_rstto_first), navigator);
-	g_signal_connect(G_OBJECT(menu_item_last), "activate", G_CALLBACK(cb_rstto_last), navigator);
+    g_signal_connect(G_OBJECT(menu_item_forward), "activate", G_CALLBACK(cb_rstto_forward), navigator);
+    g_signal_connect(G_OBJECT(menu_item_back), "activate", G_CALLBACK(cb_rstto_previous), navigator);
+    g_signal_connect(G_OBJECT(menu_item_first), "activate", G_CALLBACK(cb_rstto_first), navigator);
+    g_signal_connect(G_OBJECT(menu_item_last), "activate", G_CALLBACK(cb_rstto_last), navigator);
 
-	g_signal_connect(G_OBJECT(menu_item_rotate_left), "activate", G_CALLBACK(cb_rstto_rotate_ccw), navigator);
-	g_signal_connect(G_OBJECT(menu_item_rotate_right), "activate", G_CALLBACK(cb_rstto_rotate_cw), navigator);
-	g_signal_connect(G_OBJECT(menu_item_flip_v), "activate", G_CALLBACK(cb_rstto_flip_v), navigator);
-	g_signal_connect(G_OBJECT(menu_item_flip_h), "activate", G_CALLBACK(cb_rstto_flip_h), navigator);
+    g_signal_connect(G_OBJECT(menu_item_rotate_left), "activate", G_CALLBACK(cb_rstto_rotate_ccw), navigator);
+    g_signal_connect(G_OBJECT(menu_item_rotate_right), "activate", G_CALLBACK(cb_rstto_rotate_cw), navigator);
+    g_signal_connect(G_OBJECT(menu_item_flip_v), "activate", G_CALLBACK(cb_rstto_flip_v), navigator);
+    g_signal_connect(G_OBJECT(menu_item_flip_h), "activate", G_CALLBACK(cb_rstto_flip_h), navigator);
 
-	g_signal_connect(G_OBJECT(menu_item_vtv), "activate", G_CALLBACK(cb_rstto_show_tv_v), thumbnail_viewer);
-	g_signal_connect(G_OBJECT(menu_item_htv), "activate", G_CALLBACK(cb_rstto_show_tv_h), thumbnail_viewer);
-	g_signal_connect(G_OBJECT(menu_item_ntv), "activate", G_CALLBACK(cb_rstto_hide_tv), thumbnail_viewer);
+    g_signal_connect(G_OBJECT(menu_item_vtv), "activate", G_CALLBACK(cb_rstto_show_tv_v), thumbnail_viewer);
+    g_signal_connect(G_OBJECT(menu_item_htv), "activate", G_CALLBACK(cb_rstto_show_tv_h), thumbnail_viewer);
+    g_signal_connect(G_OBJECT(menu_item_ntv), "activate", G_CALLBACK(cb_rstto_hide_tv), thumbnail_viewer);
 
-	g_signal_connect(G_OBJECT(menu_item_play), "activate", G_CALLBACK(cb_rstto_toggle_play), navigator);
-	g_signal_connect(G_OBJECT(menu_item_pause), "activate", G_CALLBACK(cb_rstto_toggle_play), navigator);
-	g_signal_connect(G_OBJECT(menu_item_view_fs), "activate", G_CALLBACK(cb_rstto_toggle_fullscreen), window);
+    g_signal_connect(G_OBJECT(menu_item_play), "activate", G_CALLBACK(cb_rstto_toggle_play), navigator);
+    g_signal_connect(G_OBJECT(menu_item_pause), "activate", G_CALLBACK(cb_rstto_toggle_play), navigator);
+    g_signal_connect(G_OBJECT(menu_item_view_fs), "activate", G_CALLBACK(cb_rstto_toggle_fullscreen), window);
 
-	g_signal_connect(G_OBJECT(window), "window-state-event", G_CALLBACK(cb_rstto_fullscreen), viewer);
+    g_signal_connect(G_OBJECT(window), "window-state-event", G_CALLBACK(cb_rstto_fullscreen), viewer);
 
-	gtk_container_add(GTK_CONTAINER(window), main_vbox);
+    gtk_container_add(GTK_CONTAINER(window), main_vbox);
 
-	gtk_widget_show_all(window);
+    gtk_widget_show_all(window);
     gtk_widget_hide(menu_item_pause);
-	gtk_widget_show(viewer);
+    gtk_widget_show(viewer);
 
 
-	gtk_main();
-	return 0;
+    gtk_main();
+    return 0;
 }
 
 static void
 cb_rstto_zoom_fit(GtkToolItem *item, RsttoPictureViewer *viewer)
 {
-	rstto_picture_viewer_fit_scale(viewer);
+    rstto_picture_viewer_fit_scale(viewer);
 }
 
 static void
 cb_rstto_zoom_100(GtkToolItem *item, RsttoPictureViewer *viewer)
 {
-	rstto_picture_viewer_set_scale(viewer, 1);
+    rstto_picture_viewer_set_scale(viewer, 1);
 }
 
 static void
 cb_rstto_zoom_in(GtkToolItem *item, RsttoPictureViewer *viewer)
 {
-	gdouble scale = rstto_picture_viewer_get_scale(viewer);
-	rstto_picture_viewer_set_scale(viewer, scale*1.2);
+    gdouble scale = rstto_picture_viewer_get_scale(viewer);
+    rstto_picture_viewer_set_scale(viewer, scale*1.2);
 }
 
 static void
 cb_rstto_zoom_out(GtkToolItem *item, RsttoPictureViewer *viewer)
 {
-	gdouble scale = rstto_picture_viewer_get_scale(viewer);
-	rstto_picture_viewer_set_scale(viewer, scale/1.2);
+    gdouble scale = rstto_picture_viewer_get_scale(viewer);
+    rstto_picture_viewer_set_scale(viewer, scale/1.2);
 }
 
 static void
 cb_rstto_open(GtkToolItem *item, RsttoNavigator *navigator)
 {
-	GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(item));
+    GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(item));
 
-	GtkWidget *dialog = gtk_file_chooser_dialog_new(_("Open image"),
-	                                                GTK_WINDOW(window),
-	                                                GTK_FILE_CHOOSER_ACTION_OPEN,
-	                                                GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-	                                                GTK_STOCK_OPEN, GTK_RESPONSE_OK,
-	                                                NULL);
+    GtkWidget *dialog = gtk_file_chooser_dialog_new(_("Open image"),
+                                                    GTK_WINDOW(window),
+                                                    GTK_FILE_CHOOSER_ACTION_OPEN,
+                                                    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                                    GTK_STOCK_OPEN, GTK_RESPONSE_OK,
+                                                    NULL);
 
-	gint response = gtk_dialog_run(GTK_DIALOG(dialog));
-	if(response == GTK_RESPONSE_OK)
-	{
-		const gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+    gint response = gtk_dialog_run(GTK_DIALOG(dialog));
+    if(response == GTK_RESPONSE_OK)
+    {
+        const gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
 
-		ThunarVfsPath *path = thunar_vfs_path_new(filename, NULL);
+        ThunarVfsPath *path = thunar_vfs_path_new(filename, NULL);
+        if (path)
+        {
+            ThunarVfsInfo *info = thunar_vfs_info_new_for_path(path, NULL);
+            RsttoNavigatorEntry *entry = rstto_navigator_entry_new(info);
+            rstto_navigator_add (navigator, entry);
+            thunar_vfs_path_unref(path);
+        }
 
-        thunar_vfs_path_unref(path);
 
-	}
+    }
 
-	gtk_widget_destroy(dialog);
+    gtk_widget_destroy(dialog);
 }
 
 static void
 cb_rstto_open_dir(GtkToolItem *item, RsttoNavigator *navigator)
 {
-	GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(item));
+    GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(item));
 
-	GtkWidget *dialog = gtk_file_chooser_dialog_new(_("Open folder"),
-	                                                GTK_WINDOW(window),
-	                                                GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
-	                                                GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-	                                                GTK_STOCK_OPEN, GTK_RESPONSE_OK,
-	                                                NULL);
+    GtkWidget *dialog = gtk_file_chooser_dialog_new(_("Open folder"),
+                                                    GTK_WINDOW(window),
+                                                    GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+                                                    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                                    GTK_STOCK_OPEN, GTK_RESPONSE_OK,
+                                                    NULL);
 
-	gint response = gtk_dialog_run(GTK_DIALOG(dialog));
-	if(response == GTK_RESPONSE_OK)
-	{
-		const gchar *dir_name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+    gint response = gtk_dialog_run(GTK_DIALOG(dialog));
+    if(response == GTK_RESPONSE_OK)
+    {
+        rstto_navigator_clear(navigator);
+        const gchar *dir_name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
         GDir *dir = g_dir_open(dir_name, 0, NULL);
         if (dir)
         {
             const gchar *filename = g_dir_read_name(dir);
             while (filename)
             {
-                ThunarVfsPath *path = thunar_vfs_path_new(filename, NULL);
+                gchar *path_name = g_strconcat(dir_name,  "/", filename, NULL);
+                ThunarVfsPath *path = thunar_vfs_path_new(path_name, NULL);
                 if (path)
                 {
                     ThunarVfsInfo *info = thunar_vfs_info_new_for_path(path, NULL);
                     RsttoNavigatorEntry *entry = rstto_navigator_entry_new(info);
                     rstto_navigator_add (navigator, entry);
+                    thunar_vfs_path_unref(path);
                 }
+                g_free(path_name);
                 filename = g_dir_read_name(dir);
             }
         }
 
-	}
+    }
 
-	gtk_widget_destroy(dialog);
+    gtk_widget_destroy(dialog);
 }
 
 static void
 cb_rstto_help_about(GtkToolItem *item, GtkWindow *window)
 {
-	const gchar *authors[] = {
-	  _("Developer:"),
-		"Stephan Arts <stephan at xfce.org>",
-		NULL};
+    const gchar *authors[] = {
+      _("Developer:"),
+        "Stephan Arts <stephan at xfce.org>",
+        NULL};
 
-	GtkWidget *about_dialog = gtk_about_dialog_new();
+    GtkWidget *about_dialog = gtk_about_dialog_new();
 
-	gtk_about_dialog_set_name((GtkAboutDialog *)about_dialog, PACKAGE_NAME);
-	gtk_about_dialog_set_version((GtkAboutDialog *)about_dialog, PACKAGE_VERSION);
+    gtk_about_dialog_set_name((GtkAboutDialog *)about_dialog, PACKAGE_NAME);
+    gtk_about_dialog_set_version((GtkAboutDialog *)about_dialog, PACKAGE_VERSION);
 
-	gtk_about_dialog_set_comments((GtkAboutDialog *)about_dialog, _("Ristretto is a fast and lightweight picture-viewer for the Xfce desktop environment."));
-	gtk_about_dialog_set_website((GtkAboutDialog *)about_dialog, "http://goodies.xfce.org/projects/applications/ristretto");
+    gtk_about_dialog_set_comments((GtkAboutDialog *)about_dialog, _("Ristretto is a fast and lightweight picture-viewer for the Xfce desktop environment."));
+    gtk_about_dialog_set_website((GtkAboutDialog *)about_dialog, "http://goodies.xfce.org/projects/applications/ristretto");
 
-	gtk_about_dialog_set_logo_icon_name((GtkAboutDialog *)about_dialog, "ristretto");
+    gtk_about_dialog_set_logo_icon_name((GtkAboutDialog *)about_dialog, "ristretto");
 
-	gtk_about_dialog_set_authors((GtkAboutDialog *)about_dialog, authors);
+    gtk_about_dialog_set_authors((GtkAboutDialog *)about_dialog, authors);
 
-	gtk_about_dialog_set_translator_credits((GtkAboutDialog *)about_dialog, _("translator-credits"));
+    gtk_about_dialog_set_translator_credits((GtkAboutDialog *)about_dialog, _("translator-credits"));
 
-	gtk_about_dialog_set_license((GtkAboutDialog *)about_dialog, xfce_get_license_text(XFCE_LICENSE_TEXT_GPL));
+    gtk_about_dialog_set_license((GtkAboutDialog *)about_dialog, xfce_get_license_text(XFCE_LICENSE_TEXT_GPL));
 
-	gtk_about_dialog_set_copyright((GtkAboutDialog *)about_dialog, "Copyright \302\251 2006-2007 Stephan Arts");
+    gtk_about_dialog_set_copyright((GtkAboutDialog *)about_dialog, "Copyright \302\251 2006-2007 Stephan Arts");
 
-	gtk_dialog_run(GTK_DIALOG(about_dialog));
+    gtk_dialog_run(GTK_DIALOG(about_dialog));
 
-	gtk_widget_destroy(about_dialog);
+    gtk_widget_destroy(about_dialog);
 }
 
 static void
@@ -562,7 +572,7 @@
     gtk_widget_ref(GTK_WIDGET(viewer));
     gtk_container_remove(GTK_CONTAINER(parent), GTK_WIDGET(viewer));
     rstto_thumbnail_viewer_set_orientation(viewer, GTK_ORIENTATION_VERTICAL);
-	gtk_box_pack_start(GTK_BOX(main_hbox), thumbnail_viewer, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_hbox), thumbnail_viewer, FALSE, TRUE, 0);
     gtk_widget_show(GTK_WIDGET(viewer));
 }
 

Modified: ristretto/trunk/src/navigator.c
===================================================================
--- ristretto/trunk/src/navigator.c	2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/navigator.c	2007-08-19 13:40:45 UTC (rev 3006)
@@ -21,7 +21,6 @@
 
 #include <thunar-vfs/thunar-vfs.h>
 
-#include "picture_viewer.h"
 #include "navigator.h"
 
 static void 
@@ -41,8 +40,8 @@
 
 enum
 {
-	RSTTO_NAVIGATOR_SIGNAL_FILE_CHANGED = 0,
-    RSTTO_NAVIGATOR_SIGNAL_COUNT	
+    RSTTO_NAVIGATOR_SIGNAL_FILE_CHANGED = 0,
+    RSTTO_NAVIGATOR_SIGNAL_COUNT    
 };
 
 struct _RsttoNavigatorEntry
@@ -51,7 +50,8 @@
     GdkPixbufRotation    rotation;
     gboolean             h_flipped;
     gboolean             v_flipped;
-    GdkPixbuf           *preview;
+    GdkPixbuf           *thumb;
+    GdkPixbuf           *pixbuf;
 };
 
 
@@ -60,33 +60,33 @@
 GType
 rstto_navigator_get_type ()
 {
-	static GType rstto_navigator_type = 0;
+    static GType rstto_navigator_type = 0;
 
-	if (!rstto_navigator_type)
-	{
-		static const GTypeInfo rstto_navigator_info = 
-		{
-			sizeof (RsttoNavigatorClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) rstto_navigator_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (RsttoNavigator),
-			0,
-			(GInstanceInitFunc) rstto_navigator_init,
-			NULL
-		};
+    if (!rstto_navigator_type)
+    {
+        static const GTypeInfo rstto_navigator_info = 
+        {
+            sizeof (RsttoNavigatorClass),
+            (GBaseInitFunc) NULL,
+            (GBaseFinalizeFunc) NULL,
+            (GClassInitFunc) rstto_navigator_class_init,
+            (GClassFinalizeFunc) NULL,
+            NULL,
+            sizeof (RsttoNavigator),
+            0,
+            (GInstanceInitFunc) rstto_navigator_init,
+            NULL
+        };
 
-		rstto_navigator_type = g_type_register_static (G_TYPE_OBJECT, "RsttoNavigator", &rstto_navigator_info, 0);
-	}
-	return rstto_navigator_type;
+        rstto_navigator_type = g_type_register_static (G_TYPE_OBJECT, "RsttoNavigator", &rstto_navigator_info, 0);
+    }
+    return rstto_navigator_type;
 }
 
 static void
-rstto_navigator_init(RsttoNavigator *viewer)
+rstto_navigator_init(RsttoNavigator *navigator)
 {
-    viewer->compare_func = (GCompareFunc)rstto_navigator_entry_name_compare_func;
+    navigator->compare_func = (GCompareFunc)rstto_navigator_entry_name_compare_func;
 }
 
 static void
@@ -94,26 +94,26 @@
 {
     GObjectClass *object_class = G_OBJECT_CLASS(nav_class);
 
-	parent_class = g_type_class_peek_parent(nav_class);
+    parent_class = g_type_class_peek_parent(nav_class);
 
-	object_class->dispose = rstto_navigator_dispose;
+    object_class->dispose = rstto_navigator_dispose;
 
-	rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_FILE_CHANGED] = g_signal_new("file_changed",
-			G_TYPE_FROM_CLASS(nav_class),
-			G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-			0,
-			NULL,
-			NULL,
-			g_cclosure_marshal_VOID__VOID,
-			G_TYPE_NONE,
-			0,
-			NULL);
+    rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_FILE_CHANGED] = g_signal_new("file_changed",
+            G_TYPE_FROM_CLASS(nav_class),
+            G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+            0,
+            NULL,
+            NULL,
+            g_cclosure_marshal_VOID__VOID,
+            G_TYPE_NONE,
+            0,
+            NULL);
 }
 
 static void
 rstto_navigator_dispose(GObject *object)
 {
-	RsttoNavigator *navigator = RSTTO_NAVIGATOR(object);
+    RsttoNavigator *navigator = RSTTO_NAVIGATOR(object);
 
     if(navigator->file_list)
     {
@@ -123,16 +123,15 @@
 }
 
 RsttoNavigator *
-rstto_navigator_new(RsttoPictureViewer *viewer)
+rstto_navigator_new()
 {
-	RsttoNavigator *navigator;
+    RsttoNavigator *navigator;
 
-	navigator = g_object_new(RSTTO_TYPE_NAVIGATOR, NULL);
+    navigator = g_object_new(RSTTO_TYPE_NAVIGATOR, NULL);
 
-    navigator->viewer = viewer;
     navigator->icon_theme = gtk_icon_theme_new();
 
-	return navigator;
+    return navigator;
 }
 
 static gint
@@ -241,9 +240,25 @@
 rstto_navigator_add (RsttoNavigator *navigator, RsttoNavigatorEntry *entry)
 {
     navigator->file_list = g_list_insert_sorted(navigator->file_list, entry, navigator->compare_func);
+    if (!navigator->file_iter)
+    {
+        navigator->file_iter = navigator->file_list;
+        g_signal_emit(G_OBJECT(navigator), rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_FILE_CHANGED], 0, NULL);
+    }
 }
 
 void
+rstto_navigator_clear (RsttoNavigator *navigator)
+{
+    if(navigator->file_list)
+    {
+        g_list_foreach(navigator->file_list, (GFunc)rstto_navigator_entry_free, NULL);
+        navigator->file_list = NULL;
+        navigator->file_iter = NULL;
+    }
+}
+
+void
 rstto_navigator_set_file (RsttoNavigator *navigator, gint n)
 {
     navigator->file_iter = g_list_nth(navigator->file_list, n);
@@ -323,3 +338,36 @@
     g_free(nav_entry);
 }
 
+GdkPixbuf *
+rstto_navigator_entry_get_thumb(RsttoNavigatorEntry *entry, gint size)
+{
+    if(entry->thumb)    
+    {
+        if(gdk_pixbuf_get_width(entry->thumb) != size || gdk_pixbuf_get_height(entry->thumb) != size)
+        {
+            g_object_unref(entry->thumb);
+            gchar *filename = thunar_vfs_path_dup_string(entry->info->path);
+            entry->thumb = gdk_pixbuf_new_from_file_at_size(filename, size, size, NULL);
+            g_free(filename);
+        }
+    }
+    else
+    {
+        gchar *filename = thunar_vfs_path_dup_string(entry->info->path);
+        entry->thumb = gdk_pixbuf_new_from_file_at_size(filename, size, size, NULL);
+        g_free(filename);
+    }
+    return entry->thumb;
+}
+
+GdkPixbuf *
+rstto_navigator_entry_get_pixbuf(RsttoNavigatorEntry *entry)
+{
+    if(!entry->pixbuf)
+    {
+        gchar *filename = thunar_vfs_path_dup_string(entry->info->path);
+        entry->pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
+        g_free(filename);
+    }
+    return entry->pixbuf;
+}

Modified: ristretto/trunk/src/navigator.h
===================================================================
--- ristretto/trunk/src/navigator.h	2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/navigator.h	2007-08-19 13:40:45 UTC (rev 3006)
@@ -23,21 +23,21 @@
 
 #define RSTTO_NAVIGATOR(obj)( \
         G_TYPE_CHECK_INSTANCE_CAST ((obj), \
-				RSTTO_TYPE_NAVIGATOR, \
-				RsttoNavigator))
+                RSTTO_TYPE_NAVIGATOR, \
+                RsttoNavigator))
 
 #define RSTTO_IS_NAVIGATOR(obj)( \
         G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
-				RSTTO_TYPE_NAVIGATOR))
+                RSTTO_TYPE_NAVIGATOR))
 
 #define RSTTO_NAVIGATOR_CLASS(klass)( \
         G_TYPE_CHECK_CLASS_CAST ((klass), \
-				RSTTO_TYPE_NAVIGATOR, \
-				RsttoNavigatorClass))
+                RSTTO_TYPE_NAVIGATOR, \
+                RsttoNavigatorClass))
 
 #define RSTTO_IS_NAVIGATOR_CLASS(klass)( \
         G_TYPE_CHECK_CLASS_TYPE ((klass), \
-				RSTTO_TYPE_NAVIGATOR()))
+                RSTTO_TYPE_NAVIGATOR()))
 
 typedef struct _RsttoNavigatorEntry RsttoNavigatorEntry;
 
@@ -46,7 +46,6 @@
 struct _RsttoNavigator
 {
     GObject             parent;
-    RsttoPictureViewer *viewer;
     GtkIconTheme       *icon_theme;
     ThunarVfsPath      *path;
     GList              *file_list;
@@ -65,7 +64,7 @@
 GType      rstto_navigator_get_type ();
 
 RsttoNavigator *
-rstto_navigator_new (RsttoPictureViewer *viewer);
+rstto_navigator_new ();
 
 void       rstto_navigator_jump_first (RsttoNavigator *navigator);
 void       rstto_navigator_jump_forward (RsttoNavigator *navigator);
@@ -89,6 +88,8 @@
 void
 rstto_navigator_set_file (RsttoNavigator *navigator, gint n);
 void
+rstto_navigator_clear (RsttoNavigator *navigator);
+void
 rstto_navigator_set_entry_rotation (RsttoNavigator *navigator, RsttoNavigatorEntry *entry, GdkPixbufRotation rotation);
 
 RsttoNavigatorEntry *
@@ -96,7 +97,7 @@
 void
 rstto_navigator_entry_free(RsttoNavigatorEntry *nav_entry);
 GdkPixbuf *
-rstto_navigator_entry_get_thumbnail (RsttoNavigatorEntry *entry);
+rstto_navigator_entry_get_pixbuf (RsttoNavigatorEntry *entry);
 ThunarVfsInfo *
 rstto_navigator_entry_get_info (RsttoNavigatorEntry *entry);
 GdkPixbufRotation
@@ -105,6 +106,8 @@
 rstto_navigator_entry_get_flip (RsttoNavigatorEntry *entry, gboolean horizontal);
 void
 rstto_navigator_flip_entry(RsttoNavigator *navigator, RsttoNavigatorEntry *entry, gboolean horizontal);
+GdkPixbuf *
+rstto_navigator_entry_get_thumb(RsttoNavigatorEntry *entry, gint max_size);
 
 G_END_DECLS
 

Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/picture_viewer.c	2007-08-19 13:40:45 UTC (rev 3006)
@@ -18,17 +18,20 @@
 #include <gtk/gtk.h>
 #include <gtk/gtkmarshal.h>
 #include <string.h>
+#include <thunar-vfs/thunar-vfs.h>
 
+#include "navigator.h"
 #include "picture_viewer.h"
 
 struct _RsttoPictureViewerPriv
 {
-	GdkPixbuf        *src_pixbuf;
-	GdkPixbuf        *dst_pixbuf; /* The pixbuf which ends up on screen */
-	gdouble           scale;
-	gboolean          scale_fts; /* Scale image to fit to screen */
-	void             (*cb_value_changed)(GtkAdjustment *, RsttoPictureViewer *);
+    GdkPixbuf        *src_pixbuf;
+    GdkPixbuf        *dst_pixbuf; /* The pixbuf which ends up on screen */
+    gdouble           scale;
+    gboolean          scale_fts; /* Scale image to fit to screen */
+    void             (*cb_value_changed)(GtkAdjustment *, RsttoPictureViewer *);
     gboolean          show_border;
+    RsttoNavigator   *navigator;
 };
 
 static void
@@ -50,6 +53,9 @@
 rstto_picture_viewer_expose(GtkWidget *, GdkEventExpose *);
 
 static void
+cb_rstto_picture_viewer_nav_file_changed(RsttoNavigator *nav, RsttoPictureViewer *viewer);
+
+static void
 rstto_picture_viewer_paint(GtkWidget *widget);
 static void
 rstto_picture_viewer_refresh(RsttoPictureViewer *viewer);
@@ -66,27 +72,27 @@
 GType
 rstto_picture_viewer_get_type ()
 {
-	static GType rstto_picture_viewer_type = 0;
+    static GType rstto_picture_viewer_type = 0;
 
-	if (!rstto_picture_viewer_type)
-	{
-		static const GTypeInfo rstto_picture_viewer_info = 
-		{
-			sizeof (RsttoPictureViewerClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) rstto_picture_viewer_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (RsttoPictureViewer),
-			0,
-			(GInstanceInitFunc) rstto_picture_viewer_init,
-			NULL
-		};
+    if (!rstto_picture_viewer_type)
+    {
+        static const GTypeInfo rstto_picture_viewer_info = 
+        {
+            sizeof (RsttoPictureViewerClass),
+            (GBaseInitFunc) NULL,
+            (GBaseFinalizeFunc) NULL,
+            (GClassInitFunc) rstto_picture_viewer_class_init,
+            (GClassFinalizeFunc) NULL,
+            NULL,
+            sizeof (RsttoPictureViewer),
+            0,
+            (GInstanceInitFunc) rstto_picture_viewer_init,
+            NULL
+        };
 
-		rstto_picture_viewer_type = g_type_register_static (GTK_TYPE_WIDGET, "RsttoPictureViewer", &rstto_picture_viewer_info, 0);
-	}
-	return rstto_picture_viewer_type;
+        rstto_picture_viewer_type = g_type_register_static (GTK_TYPE_WIDGET, "RsttoPictureViewer", &rstto_picture_viewer_info, 0);
+    }
+    return rstto_picture_viewer_type;
 }
 
 static void
@@ -107,94 +113,94 @@
 static void
 rstto_picture_viewer_class_init(RsttoPictureViewerClass *viewer_class)
 {
-	GtkWidgetClass *widget_class;
-	GtkObjectClass *object_class;
+    GtkWidgetClass *widget_class;
+    GtkObjectClass *object_class;
 
-	widget_class = (GtkWidgetClass*)viewer_class;
-	object_class = (GtkObjectClass*)viewer_class;
+    widget_class = (GtkWidgetClass*)viewer_class;
+    object_class = (GtkObjectClass*)viewer_class;
 
-	parent_class = g_type_class_peek_parent(viewer_class);
+    parent_class = g_type_class_peek_parent(viewer_class);
 
-	viewer_class->set_scroll_adjustments = rstto_picture_viewer_set_scroll_adjustments;
+    viewer_class->set_scroll_adjustments = rstto_picture_viewer_set_scroll_adjustments;
 
-	widget_class->realize = rstto_picture_viewer_realize;
-	widget_class->unrealize = rstto_picture_viewer_unrealize;
-	widget_class->expose_event = rstto_picture_viewer_expose;
+    widget_class->realize = rstto_picture_viewer_realize;
+    widget_class->unrealize = rstto_picture_viewer_unrealize;
+    widget_class->expose_event = rstto_picture_viewer_expose;
 
-	widget_class->size_request = rstto_picture_viewer_size_request;
-	widget_class->size_allocate = rstto_picture_viewer_size_allocate;
+    widget_class->size_request = rstto_picture_viewer_size_request;
+    widget_class->size_allocate = rstto_picture_viewer_size_allocate;
 
-	object_class->destroy = rstto_picture_viewer_destroy;
+    object_class->destroy = rstto_picture_viewer_destroy;
 
 
-	widget_class->set_scroll_adjustments_signal =
-	              g_signal_new ("set_scroll_adjustments",
-	                            G_TYPE_FROM_CLASS (object_class),
-	                            G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-	                            G_STRUCT_OFFSET (RsttoPictureViewerClass, set_scroll_adjustments),
-	                            NULL, NULL,
-	                            gtk_marshal_VOID__POINTER_POINTER,
-	                            G_TYPE_NONE, 2,
-	                            GTK_TYPE_ADJUSTMENT,
-	                            GTK_TYPE_ADJUSTMENT);
+    widget_class->set_scroll_adjustments_signal =
+                  g_signal_new ("set_scroll_adjustments",
+                                G_TYPE_FROM_CLASS (object_class),
+                                G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+                                G_STRUCT_OFFSET (RsttoPictureViewerClass, set_scroll_adjustments),
+                                NULL, NULL,
+                                gtk_marshal_VOID__POINTER_POINTER,
+                                G_TYPE_NONE, 2,
+                                GTK_TYPE_ADJUSTMENT,
+                                GTK_TYPE_ADJUSTMENT);
 
 }
 
 static void
 rstto_picture_viewer_size_request(GtkWidget *widget, GtkRequisition *requisition)
 {
-	requisition->width = 100;
-	requisition->height= 500;
+    requisition->width = 100;
+    requisition->height= 500;
 }
 
 static void
 rstto_picture_viewer_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
 {
-	RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER(widget);
-	gint border_width =  0;
+    RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER(widget);
+    gint border_width =  0;
     widget->allocation = *allocation;
 
-	if (GTK_WIDGET_REALIZED (widget))
-	{
- 		gdk_window_move_resize (widget->window,
-			allocation->x + border_width,
-			allocation->y + border_width,
-			allocation->width - border_width * 2,
-			allocation->height - border_width * 2);
-	}
+    if (GTK_WIDGET_REALIZED (widget))
+    {
+         gdk_window_move_resize (widget->window,
+            allocation->x + border_width,
+            allocation->y + border_width,
+            allocation->width - border_width * 2,
+            allocation->height - border_width * 2);
+    }
 
-	rstto_picture_viewer_refresh(viewer);
+    rstto_picture_viewer_refresh(viewer);
 }
 
 static void
 rstto_picture_viewer_realize(GtkWidget *widget)
 {
-	g_return_if_fail (widget != NULL);
-	g_return_if_fail (RSTTO_IS_PICTURE_VIEWER(widget));
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (RSTTO_IS_PICTURE_VIEWER(widget));
 
-	GdkWindowAttr attributes;
-	gint attributes_mask;
+    GdkWindowAttr attributes;
+    gint attributes_mask;
 
-	GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+    GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
 
-	attributes.x = widget->allocation.x;
-	attributes.y = widget->allocation.y;
-	attributes.width = widget->allocation.width;
-	attributes.height = widget->allocation.height;
-	attributes.wclass = GDK_INPUT_OUTPUT;
-	attributes.window_type = GDK_WINDOW_CHILD;
-	attributes.event_mask = gtk_widget_get_events (widget) | 
-	GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
-	attributes.visual = gtk_widget_get_visual (widget);
-	attributes.colormap = gtk_widget_get_colormap (widget);
+    attributes.x = widget->allocation.x;
+    attributes.y = widget->allocation.y;
+    attributes.width = widget->allocation.width;
+    attributes.height = widget->allocation.height;
+    attributes.wclass = GDK_INPUT_OUTPUT;
+    attributes.window_type = GDK_WINDOW_CHILD;
+    attributes.event_mask = gtk_widget_get_events (widget) | 
+    GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
+    attributes.visual = gtk_widget_get_visual (widget);
+    attributes.colormap = gtk_widget_get_colormap (widget);
 
-	attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-	widget->window = gdk_window_new (gtk_widget_get_parent_window(widget), &attributes, attributes_mask);
+    attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+    widget->window = gdk_window_new (gtk_widget_get_parent_window(widget), &attributes, attributes_mask);
 
   widget->style = gtk_style_attach (widget->style, widget->window);
-	gdk_window_set_user_data (widget->window, widget);
+    gdk_window_set_user_data (widget->window, widget);
 
-	gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
+    gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
 }
 
 static void
@@ -205,10 +211,10 @@
 static gboolean
 rstto_picture_viewer_expose(GtkWidget *widget, GdkEventExpose *event)
 {
-	rstto_picture_viewer_refresh(RSTTO_PICTURE_VIEWER(widget));
-	rstto_picture_viewer_paint(widget);
+    rstto_picture_viewer_refresh(RSTTO_PICTURE_VIEWER(widget));
+    rstto_picture_viewer_paint(widget);
 
-	return FALSE;
+    return FALSE;
 }
 
 static void
@@ -216,28 +222,28 @@
 {
     RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER(widget);
     GdkPixbuf *pixbuf = viewer->priv->dst_pixbuf;
-	GdkColor color;
-	GdkColor line_color;
+    GdkColor color;
+    GdkColor line_color;
 
-	color.pixel = 0x0;
-	line_color.pixel = 0x0;
+    color.pixel = 0x0;
+    line_color.pixel = 0x0;
 
     gint i, a, height, width;
 
-	/* required for transparent pixbufs... add double buffering to fix flickering*/
-	if(GTK_WIDGET_REALIZED(widget))
-	{		  
-		GdkPixmap *buffer = gdk_pixmap_new(NULL, widget->allocation.width, widget->allocation.height, gdk_drawable_get_depth(widget->window));
-		GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(buffer));
+    /* required for transparent pixbufs... add double buffering to fix flickering*/
+    if(GTK_WIDGET_REALIZED(widget))
+    {          
+        GdkPixmap *buffer = gdk_pixmap_new(NULL, widget->allocation.width, widget->allocation.height, gdk_drawable_get_depth(widget->window));
+        GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(buffer));
 
-		gdk_gc_set_foreground(gc, &color);
-		gdk_draw_rectangle(GDK_DRAWABLE(buffer), gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
-		if(pixbuf)
-		{
-			gint x1 = (widget->allocation.width-gdk_pixbuf_get_width(pixbuf))<0?0:(widget->allocation.width-gdk_pixbuf_get_width(pixbuf))/2;
-			gint y1 = (widget->allocation.height-gdk_pixbuf_get_height(pixbuf))<0?0:(widget->allocation.height-gdk_pixbuf_get_height(pixbuf))/2;
-			gint x2 = gdk_pixbuf_get_width(pixbuf);
-			gint y2 = gdk_pixbuf_get_height(pixbuf);
+        gdk_gc_set_foreground(gc, &color);
+        gdk_draw_rectangle(GDK_DRAWABLE(buffer), gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
+        if(pixbuf)
+        {
+            gint x1 = (widget->allocation.width-gdk_pixbuf_get_width(pixbuf))<0?0:(widget->allocation.width-gdk_pixbuf_get_width(pixbuf))/2;
+            gint y1 = (widget->allocation.height-gdk_pixbuf_get_height(pixbuf))<0?0:(widget->allocation.height-gdk_pixbuf_get_height(pixbuf))/2;
+            gint x2 = gdk_pixbuf_get_width(pixbuf);
+            gint y2 = gdk_pixbuf_get_height(pixbuf);
             
             /* We only need to paint a checkered background if the image is transparent */
             if(gdk_pixbuf_get_has_alpha(pixbuf))
@@ -278,17 +284,17 @@
                     }
                 }
             }
-			gdk_draw_pixbuf(GDK_DRAWABLE(buffer), 
-			                NULL, 
-			                pixbuf,
-			                0,
-			                0,
-							x1,
-							y1,
-							x2, 
-							y2,
-			                GDK_RGB_DITHER_NONE,
-			                0,0);
+            gdk_draw_pixbuf(GDK_DRAWABLE(buffer), 
+                            NULL, 
+                            pixbuf,
+                            0,
+                            0,
+                            x1,
+                            y1,
+                            x2, 
+                            y2,
+                            GDK_RGB_DITHER_NONE,
+                            0,0);
             if(viewer->priv->show_border)
             {
                 gdk_gc_set_foreground(gc, &line_color);
@@ -298,18 +304,18 @@
                 gdk_draw_line(GDK_DRAWABLE(buffer), gc, x1+x2, y1, x1+x2, y1+y2);
             }
 
-		}
-		gdk_draw_drawable(GDK_DRAWABLE(widget->window), 
-		                gdk_gc_new(widget->window), 
-		                buffer,
-		                0,
-		                0,
-						0,
-						0,
-						widget->allocation.width,
-						widget->allocation.height);
-		g_object_unref(buffer);
-	}
+        }
+        gdk_draw_drawable(GDK_DRAWABLE(widget->window), 
+                        gdk_gc_new(widget->window), 
+                        buffer,
+                        0,
+                        0,
+                        0,
+                        0,
+                        widget->allocation.width,
+                        widget->allocation.height);
+        g_object_unref(buffer);
+    }
 }
 
 static void
@@ -321,30 +327,30 @@
 static void
 rstto_picture_viewer_set_scroll_adjustments(RsttoPictureViewer *viewer, GtkAdjustment *hadjustment, GtkAdjustment *vadjustment)
 {
-	if(viewer->hadjustment)
-	{
-		g_signal_handlers_disconnect_by_func(viewer->hadjustment, viewer->priv->cb_value_changed, viewer);
-		g_object_unref(viewer->hadjustment);
-	}
-	if(viewer->vadjustment)
-	{
-		g_signal_handlers_disconnect_by_func(viewer->vadjustment, viewer->priv->cb_value_changed, viewer);
-		g_object_unref(viewer->vadjustment);
-	}
+    if(viewer->hadjustment)
+    {
+        g_signal_handlers_disconnect_by_func(viewer->hadjustment, viewer->priv->cb_value_changed, viewer);
+        g_object_unref(viewer->hadjustment);
+    }
+    if(viewer->vadjustment)
+    {
+        g_signal_handlers_disconnect_by_func(viewer->vadjustment, viewer->priv->cb_value_changed, viewer);
+        g_object_unref(viewer->vadjustment);
+    }
 
-	viewer->hadjustment = hadjustment;
-	viewer->vadjustment = vadjustment;
+    viewer->hadjustment = hadjustment;
+    viewer->vadjustment = vadjustment;
 
-	if(viewer->hadjustment)
-	{
-		g_signal_connect(G_OBJECT(viewer->hadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
-		g_object_ref(viewer->hadjustment);
-	}
-	if(viewer->vadjustment)
-	{
-		g_signal_connect(G_OBJECT(viewer->vadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
-		g_object_ref(viewer->vadjustment);
-	}
+    if(viewer->hadjustment)
+    {
+        g_signal_connect(G_OBJECT(viewer->hadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
+        g_object_ref(viewer->hadjustment);
+    }
+    if(viewer->vadjustment)
+    {
+        g_signal_connect(G_OBJECT(viewer->vadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
+        g_object_ref(viewer->vadjustment);
+    }
 }
 
 static void
@@ -379,24 +385,26 @@
 }
 
 GtkWidget *
-rstto_picture_viewer_new()
+rstto_picture_viewer_new(RsttoNavigator *navigator)
 {
-	GtkWidget *widget;
+    GtkWidget *widget;
 
-	widget = g_object_new(RSTTO_TYPE_PICTURE_VIEWER, NULL);
+    widget = g_object_new(RSTTO_TYPE_PICTURE_VIEWER, NULL);
+    RSTTO_PICTURE_VIEWER(widget)->priv->navigator = navigator;
+    g_signal_connect(G_OBJECT(navigator), "file_changed", G_CALLBACK(cb_rstto_picture_viewer_nav_file_changed), widget);
 
-	return widget;
+    return widget;
 }
 
 void
 rstto_picture_viewer_set_scale(RsttoPictureViewer *viewer, gdouble scale)
 {
-	g_return_if_fail(scale > 0);
+    g_return_if_fail(scale > 0);
     viewer->priv->scale_fts = FALSE;
-	viewer->priv->scale = scale;
+    viewer->priv->scale = scale;
 
-	rstto_picture_viewer_refresh(viewer);
-	rstto_picture_viewer_paint(GTK_WIDGET(viewer));
+    rstto_picture_viewer_refresh(viewer);
+    rstto_picture_viewer_paint(GTK_WIDGET(viewer));
 
 }
 
@@ -405,40 +413,40 @@
 {
     viewer->priv->scale_fts = TRUE;
 
-	rstto_picture_viewer_refresh(viewer);
-	rstto_picture_viewer_paint(GTK_WIDGET(viewer));
+    rstto_picture_viewer_refresh(viewer);
+    rstto_picture_viewer_paint(GTK_WIDGET(viewer));
 
-	return viewer->priv->scale;
+    return viewer->priv->scale;
 }
 
 gdouble
 rstto_picture_viewer_get_scale(RsttoPictureViewer *viewer)
 {
-	return viewer->priv->scale;
+    return viewer->priv->scale;
 }
 
 void
 rstto_picture_viewer_set_pixbuf(RsttoPictureViewer *viewer, GdkPixbuf *pixbuf)
 {
-	if(viewer->priv->src_pixbuf)
-		g_object_unref(viewer->priv->src_pixbuf);
+    if(viewer->priv->src_pixbuf)
+        g_object_unref(viewer->priv->src_pixbuf);
 
-	viewer->priv->src_pixbuf = pixbuf;
+    viewer->priv->src_pixbuf = pixbuf;
 
-	if(viewer->priv->src_pixbuf)
-	{
-		g_object_ref(viewer->priv->src_pixbuf);
-		rstto_picture_viewer_refresh(viewer);
-		rstto_picture_viewer_paint(GTK_WIDGET(viewer));
-	}
+    if(viewer->priv->src_pixbuf)
+    {
+        g_object_ref(viewer->priv->src_pixbuf);
+        rstto_picture_viewer_refresh(viewer);
+        rstto_picture_viewer_paint(GTK_WIDGET(viewer));
+    }
 }
 
 static void
 rstto_picture_viewer_refresh(RsttoPictureViewer *viewer)
 {
-	GtkWidget *widget = GTK_WIDGET(viewer);
-	if(viewer->priv->src_pixbuf)
-	{
+    GtkWidget *widget = GTK_WIDGET(viewer);
+    if(viewer->priv->src_pixbuf)
+    {
 
         if(viewer->priv->scale_fts)
         {
@@ -451,67 +459,76 @@
             else
                 viewer->priv->scale = v_scale;
         }
-		if(GTK_WIDGET_REALIZED(widget))
-		{
-			gdouble width = (gdouble)gdk_pixbuf_get_width(viewer->priv->src_pixbuf);
-			gdouble height = (gdouble)gdk_pixbuf_get_height(viewer->priv->src_pixbuf);
-			
-			if(viewer->hadjustment)
-			{
-				viewer->hadjustment->page_size = widget->allocation.width;
-				viewer->hadjustment->upper = width * viewer->priv->scale;
-				viewer->hadjustment->lower = 0;
-				viewer->hadjustment->step_increment = 1;
-				viewer->hadjustment->page_increment = 100;
-			}
-			if(viewer->vadjustment)
-			{
-				viewer->vadjustment->page_size = widget->allocation.height;
-				viewer->vadjustment->upper = height * viewer->priv->scale;
-				viewer->vadjustment->lower = 0;
-				viewer->vadjustment->step_increment = 1;
-				viewer->vadjustment->page_increment = 100;
-			}
+        if(GTK_WIDGET_REALIZED(widget))
+        {
+            gdouble width = (gdouble)gdk_pixbuf_get_width(viewer->priv->src_pixbuf);
+            gdouble height = (gdouble)gdk_pixbuf_get_height(viewer->priv->src_pixbuf);
+            
+            if(viewer->hadjustment)
+            {
+                viewer->hadjustment->page_size = widget->allocation.width;
+                viewer->hadjustment->upper = width * viewer->priv->scale;
+                viewer->hadjustment->lower = 0;
+                viewer->hadjustment->step_increment = 1;
+                viewer->hadjustment->page_increment = 100;
+            }
+            if(viewer->vadjustment)
+            {
+                viewer->vadjustment->page_size = widget->allocation.height;
+                viewer->vadjustment->upper = height * viewer->priv->scale;
+                viewer->vadjustment->lower = 0;
+                viewer->vadjustment->step_increment = 1;
+                viewer->vadjustment->page_increment = 100;
+            }
 
-			if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
-			{
-				viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
-				gtk_adjustment_value_changed(viewer->vadjustment);
-			}
-			if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
-			{
-				viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
-				gtk_adjustment_value_changed(viewer->hadjustment);
-			}
+            if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
+            {
+                viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
+                gtk_adjustment_value_changed(viewer->vadjustment);
+            }
+            if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
+            {
+                viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
+                gtk_adjustment_value_changed(viewer->hadjustment);
+            }
 
 
-			GdkPixbuf *tmp_pixbuf = NULL;
-			tmp_pixbuf = gdk_pixbuf_new_subpixbuf(viewer->priv->src_pixbuf,
-												  viewer->hadjustment->value / viewer->priv->scale >= 0?
+            GdkPixbuf *tmp_pixbuf = NULL;
+            tmp_pixbuf = gdk_pixbuf_new_subpixbuf(viewer->priv->src_pixbuf,
+                                                  viewer->hadjustment->value / viewer->priv->scale >= 0?
                                                         viewer->hadjustment->value / viewer->priv->scale : 0,
-												  viewer->vadjustment->value / viewer->priv->scale >= 0?
+                                                  viewer->vadjustment->value / viewer->priv->scale >= 0?
                                                         viewer->vadjustment->value / viewer->priv->scale : 0,
-												  ((widget->allocation.width/viewer->priv->scale)) < width?
+                                                  ((widget->allocation.width/viewer->priv->scale)) < width?
                                                         widget->allocation.width/viewer->priv->scale:width,
-												  ((widget->allocation.height/viewer->priv->scale))< height?
+                                                  ((widget->allocation.height/viewer->priv->scale))< height?
                                                         widget->allocation.height/viewer->priv->scale:height);
 
-			if(viewer->priv->dst_pixbuf)
-			{
-				g_object_unref(viewer->priv->dst_pixbuf);
-				viewer->priv->dst_pixbuf = NULL;
-			}
-			viewer->priv->dst_pixbuf = gdk_pixbuf_scale_simple(tmp_pixbuf, gdk_pixbuf_get_width(tmp_pixbuf)*viewer->priv->scale, gdk_pixbuf_get_height(tmp_pixbuf)*viewer->priv->scale, GDK_INTERP_BILINEAR);
+            if(viewer->priv->dst_pixbuf)
+            {
+                g_object_unref(viewer->priv->dst_pixbuf);
+                viewer->priv->dst_pixbuf = NULL;
+            }
+            viewer->priv->dst_pixbuf = gdk_pixbuf_scale_simple(tmp_pixbuf, gdk_pixbuf_get_width(tmp_pixbuf)*viewer->priv->scale, gdk_pixbuf_get_height(tmp_pixbuf)*viewer->priv->scale, GDK_INTERP_BILINEAR);
 
-			if(tmp_pixbuf)
-			{
-				g_object_unref(tmp_pixbuf);
-				tmp_pixbuf = NULL;
-			}
+            if(tmp_pixbuf)
+            {
+                g_object_unref(tmp_pixbuf);
+                tmp_pixbuf = NULL;
+            }
 
-			gtk_adjustment_changed(viewer->hadjustment);
-			gtk_adjustment_changed(viewer->vadjustment);
-		}
-	}
+            gtk_adjustment_changed(viewer->hadjustment);
+            gtk_adjustment_changed(viewer->vadjustment);
+        }
+    }
 
 }
+
+static void
+cb_rstto_picture_viewer_nav_file_changed(RsttoNavigator *nav, RsttoPictureViewer *viewer)
+{
+    RsttoNavigatorEntry *entry = rstto_navigator_get_file(nav);
+    GdkPixbuf *pixbuf = rstto_navigator_entry_get_pixbuf(entry);
+    
+    rstto_picture_viewer_set_pixbuf(viewer, pixbuf);   
+}

Modified: ristretto/trunk/src/picture_viewer.h
===================================================================
--- ristretto/trunk/src/picture_viewer.h	2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/picture_viewer.h	2007-08-19 13:40:45 UTC (rev 3006)
@@ -23,21 +23,21 @@
 
 #define RSTTO_PICTURE_VIEWER(obj)( \
         G_TYPE_CHECK_INSTANCE_CAST ((obj), \
-				RSTTO_TYPE_PICTURE_VIEWER, \
-				RsttoPictureViewer))
+                RSTTO_TYPE_PICTURE_VIEWER, \
+                RsttoPictureViewer))
 
 #define RSTTO_IS_PICTURE_VIEWER(obj)( \
         G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
-				RSTTO_TYPE_PICTURE_VIEWER))
+                RSTTO_TYPE_PICTURE_VIEWER))
 
 #define RSTTO_PICTURE_VIEWER_CLASS(klass)( \
         G_TYPE_CHECK_CLASS_CAST ((klass), \
-				RSTTO_TYPE_PICTURE_VIEWER, \
-				RsttoPictureViewerClass))
+                RSTTO_TYPE_PICTURE_VIEWER, \
+                RsttoPictureViewerClass))
 
 #define RSTTO_IS_PICTURE_VIEWER_CLASS(klass)( \
         G_TYPE_CHECK_CLASS_TYPE ((klass), \
-				RSTTO_TYPE_PICTURE_VIEWER()))
+                RSTTO_TYPE_PICTURE_VIEWER()))
 
 typedef struct _RsttoPictureViewerPriv RsttoPictureViewerPriv;
 
@@ -45,27 +45,27 @@
 
 struct _RsttoPictureViewer
 {
-	GtkWidget         parent;
+    GtkWidget         parent;
     RsttoPictureViewerPriv *priv;
 
-	GtkAdjustment    *vadjustment;
-	GtkAdjustment    *hadjustment;
+    GtkAdjustment    *vadjustment;
+    GtkAdjustment    *hadjustment;
 };
 
 typedef struct _RsttoPictureViewerClass RsttoPictureViewerClass;
 
 struct _RsttoPictureViewerClass
 {
-	GtkWidgetClass  parent_class;
+    GtkWidgetClass  parent_class;
 
   void (* set_scroll_adjustments) (RsttoPictureViewer *viewer,
-	      GtkAdjustment     *hadjustment,
-	      GtkAdjustment     *vadjustment);
+          GtkAdjustment     *hadjustment,
+          GtkAdjustment     *vadjustment);
 };
 
 GType      rstto_picture_viewer_get_type();
 
-GtkWidget *rstto_picture_viewer_new();
+GtkWidget *rstto_picture_viewer_new(RsttoNavigator *navigator);
 void       rstto_picture_viewer_set_scale(RsttoPictureViewer *viewer, gdouble scale);
 gdouble    rstto_picture_viewer_get_scale(RsttoPictureViewer *viewer);
 gdouble    rstto_picture_viewer_fit_scale(RsttoPictureViewer *viewer);

Modified: ristretto/trunk/src/thumbnail_viewer.c
===================================================================
--- ristretto/trunk/src/thumbnail_viewer.c	2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/thumbnail_viewer.c	2007-08-19 13:40:45 UTC (rev 3006)
@@ -24,26 +24,10 @@
 #include <pango/pango.h>
 #include <pango/pangoxft.h>
 
-#include "picture_viewer.h"
 #include "navigator.h"
+#include "picture_viewer.h"
 #include "thumbnail_viewer.h"
 
-typedef struct _RsttoThumbnailViewerCache RsttoThumbnailViewerCache;
-
-struct _RsttoThumbnailViewerCache
-{
-    gint begin;
-    gint end;
-    GSList *pixmaps; 
-};
-
-static gboolean
-rstto_thumbnail_viewer_cache_add (RsttoThumbnailViewerCache *cache, GdkPixbuf *pixbuf, gint nr);
-static gboolean
-rstto_thumbnail_viewer_cache_remove (RsttoThumbnailViewerCache *cache, gint nr);
-static GdkPixbuf *
-rstto_thumbnail_viewer_cache_get_pixbuf (RsttoThumbnailViewerCache *cache, gint nr);
-
 struct _RsttoThumbnailViewerPriv
 {
     GtkOrientation  orientation;
@@ -51,7 +35,6 @@
     gint dimension;
     gint offset;
     gboolean auto_center;
-    RsttoThumbnailViewerCache *cache;
 };
 
 static void
@@ -83,27 +66,27 @@
 GType
 rstto_thumbnail_viewer_get_type ()
 {
-	static GType rstto_thumbnail_viewer_type = 0;
+    static GType rstto_thumbnail_viewer_type = 0;
 
-	if (!rstto_thumbnail_viewer_type)
-	{
-		static const GTypeInfo rstto_thumbnail_viewer_info = 
-		{
-			sizeof (RsttoThumbnailViewerClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) rstto_thumbnail_viewer_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (RsttoThumbnailViewer),
-			0,
-			(GInstanceInitFunc) rstto_thumbnail_viewer_init,
-			NULL
-		};
+    if (!rstto_thumbnail_viewer_type)
+    {
+        static const GTypeInfo rstto_thumbnail_viewer_info = 
+        {
+            sizeof (RsttoThumbnailViewerClass),
+            (GBaseInitFunc) NULL,
+            (GBaseFinalizeFunc) NULL,
+            (GClassInitFunc) rstto_thumbnail_viewer_class_init,
+            (GClassFinalizeFunc) NULL,
+            NULL,
+            sizeof (RsttoThumbnailViewer),
+            0,
+            (GInstanceInitFunc) rstto_thumbnail_viewer_init,
+            NULL
+        };
 
-		rstto_thumbnail_viewer_type = g_type_register_static (GTK_TYPE_WIDGET, "RsttoThumbnailViewer", &rstto_thumbnail_viewer_info, 0);
-	}
-	return rstto_thumbnail_viewer_type;
+        rstto_thumbnail_viewer_type = g_type_register_static (GTK_TYPE_WIDGET, "RsttoThumbnailViewer", &rstto_thumbnail_viewer_info, 0);
+    }
+    return rstto_thumbnail_viewer_type;
 }
 
 
@@ -111,11 +94,7 @@
 rstto_thumbnail_viewer_init(RsttoThumbnailViewer *viewer)
 {
     viewer->priv = g_new0(RsttoThumbnailViewerPriv, 1);
-    viewer->priv->cache = g_new0(RsttoThumbnailViewerCache, 1);
 
-    viewer->priv->cache->begin = -1;
-    viewer->priv->cache->end   = -1;
-
     viewer->priv->auto_center = TRUE;
 
     gtk_widget_set_redraw_on_allocate(GTK_WIDGET(viewer), TRUE);
@@ -129,21 +108,21 @@
 static void
 rstto_thumbnail_viewer_class_init(RsttoThumbnailViewerClass *viewer_class)
 {
-	GtkWidgetClass *widget_class;
-	GtkObjectClass *object_class;
+    GtkWidgetClass *widget_class;
+    GtkObjectClass *object_class;
 
-	widget_class = (GtkWidgetClass*)viewer_class;
-	object_class = (GtkObjectClass*)viewer_class;
+    widget_class = (GtkWidgetClass*)viewer_class;
+    object_class = (GtkObjectClass*)viewer_class;
 
-	parent_class = g_type_class_peek_parent(viewer_class);
+    parent_class = g_type_class_peek_parent(viewer_class);
 
-	widget_class->realize = rstto_thumbnail_viewer_realize;
-	widget_class->expose_event = rstto_thumbnail_viewer_expose;
+    widget_class->realize = rstto_thumbnail_viewer_realize;
+    widget_class->expose_event = rstto_thumbnail_viewer_expose;
 
-	widget_class->size_request = rstto_thumbnail_viewer_size_request;
-	widget_class->size_allocate = rstto_thumbnail_viewer_size_allocate;
+    widget_class->size_request = rstto_thumbnail_viewer_size_request;
+    widget_class->size_allocate = rstto_thumbnail_viewer_size_allocate;
 
-	object_class->destroy = rstto_thumbnail_viewer_destroy;
+    object_class->destroy = rstto_thumbnail_viewer_destroy;
 }
 
 static void
@@ -165,7 +144,7 @@
 rstto_thumbnail_viewer_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
 {
     RsttoThumbnailViewer *viewer = RSTTO_THUMBNAIL_VIEWER(widget);
-	gint border_width =  0;
+    gint border_width =  0;
     widget->allocation = *allocation;
 
     switch(viewer->priv->orientation)
@@ -179,46 +158,46 @@
     }
 
 
-	if (GTK_WIDGET_REALIZED (widget))
-	{
- 		gdk_window_move_resize (widget->window,
-			allocation->x + border_width,
-			allocation->y + border_width,
-			allocation->width - border_width * 2,
-			allocation->height - border_width * 2);
+    if (GTK_WIDGET_REALIZED (widget))
+    {
+         gdk_window_move_resize (widget->window,
+            allocation->x + border_width,
+            allocation->y + border_width,
+            allocation->width - border_width * 2,
+            allocation->height - border_width * 2);
 
-	}
+    }
 }
 
 static void
 rstto_thumbnail_viewer_realize(GtkWidget *widget)
 {
-	g_return_if_fail (widget != NULL);
-	g_return_if_fail (RSTTO_IS_THUMBNAIL_VIEWER(widget));
+    g_return_if_fail (widget != NULL);
+    g_return_if_fail (RSTTO_IS_THUMBNAIL_VIEWER(widget));
 
-	GdkWindowAttr attributes;
-	gint attributes_mask;
+    GdkWindowAttr attributes;
+    gint attributes_mask;
 
-	GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+    GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
 
-	attributes.x = widget->allocation.x;
-	attributes.y = widget->allocation.y;
-	attributes.width = widget->allocation.width;
-	attributes.height = widget->allocation.height;
-	attributes.wclass = GDK_INPUT_OUTPUT;
-	attributes.window_type = GDK_WINDOW_CHILD;
-	attributes.event_mask = gtk_widget_get_events (widget) | 
-	GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
-	attributes.visual = gtk_widget_get_visual (widget);
-	attributes.colormap = gtk_widget_get_colormap (widget);
+    attributes.x = widget->allocation.x;
+    attributes.y = widget->allocation.y;
+    attributes.width = widget->allocation.width;
+    attributes.height = widget->allocation.height;
+    attributes.wclass = GDK_INPUT_OUTPUT;
+    attributes.window_type = GDK_WINDOW_CHILD;
+    attributes.event_mask = gtk_widget_get_events (widget) | 
+    GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
+    attributes.visual = gtk_widget_get_visual (widget);
+    attributes.colormap = gtk_widget_get_colormap (widget);
 
-	attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-	widget->window = gdk_window_new (gtk_widget_get_parent_window(widget), &attributes, attributes_mask);
+    attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+    widget->window = gdk_window_new (gtk_widget_get_parent_window(widget), &attributes, attributes_mask);
 
     widget->style = gtk_style_attach (widget->style, widget->window);
-	gdk_window_set_user_data (widget->window, widget);
+    gdk_window_set_user_data (widget->window, widget);
 
-	gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
+    gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
 }
 
 static gboolean
@@ -226,31 +205,31 @@
 {
     RsttoThumbnailViewer *viewer = RSTTO_THUMBNAIL_VIEWER(widget);
 
-	if (GTK_WIDGET_REALIZED (viewer))
-	{
+    if (GTK_WIDGET_REALIZED (viewer))
+    {
         rstto_thumbnail_viewer_paint(viewer);
     }
 
-	return FALSE;
+    return FALSE;
 }
 
 static void
 rstto_thumbnail_viewer_paint(RsttoThumbnailViewer *viewer)
 {
     GtkWidget *widget = GTK_WIDGET(viewer);
-	GdkColor color;
+    GdkColor color;
 
     RsttoNavigatorEntry *current_entry = rstto_navigator_get_file(viewer->priv->navigator);
 
     color.pixel = 0xffffffff;
-	GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(widget->window));
-	GdkGC *gc_bg_normal = gdk_gc_new(GDK_DRAWABLE(widget->window));
-	GdkGC *gc_bg_selected = gdk_gc_new(GDK_DRAWABLE(widget->window));
+    GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(widget->window));
+    GdkGC *gc_bg_normal = gdk_gc_new(GDK_DRAWABLE(widget->window));
+    GdkGC *gc_bg_selected = gdk_gc_new(GDK_DRAWABLE(widget->window));
 
-	gdk_gc_set_foreground(gc, &color);
-	gdk_gc_set_foreground(gc_bg_selected,
+    gdk_gc_set_foreground(gc, &color);
+    gdk_gc_set_foreground(gc_bg_selected,
                         &(widget->style->bg[GTK_STATE_SELECTED]));
-	gdk_gc_set_foreground(gc_bg_normal,
+    gdk_gc_set_foreground(gc_bg_normal,
                         &(widget->style->bg[GTK_STATE_NORMAL]));
     
     gint i;
@@ -287,29 +266,12 @@
     }
     GdkPixmap *pixmap = NULL;
 
-    /* Cleanup_cache */
-    for (i = viewer->priv->cache->begin; i < begin; i++)
-    {
-        rstto_thumbnail_viewer_cache_remove(viewer->priv->cache, i);
-    }
-    for (i = end; i < viewer->priv->cache->end; i++)
-    {
-        rstto_thumbnail_viewer_cache_remove(viewer->priv->cache, i);
-    }
-
     for(i = begin; i <= end; ++i)
     { 
         RsttoNavigatorEntry *entry = rstto_navigator_get_nth_file(viewer->priv->navigator, i);
         if (entry)
         {
-            ThunarVfsInfo *info = rstto_navigator_entry_get_info(entry);
-            gchar *filename = thunar_vfs_path_dup_string(info->path);
-            GdkPixbuf *pixbuf = rstto_thumbnail_viewer_cache_get_pixbuf(viewer->priv->cache, i);
-            if(!pixbuf)
-            {
-                pixbuf = gdk_pixbuf_new_from_file_at_size(filename, viewer->priv->dimension - 8, viewer->priv->dimension - 8, NULL);
-                rstto_thumbnail_viewer_cache_add(viewer->priv->cache, pixbuf, i);
-            }
+            GdkPixbuf *pixbuf = rstto_navigator_entry_get_thumb(entry, viewer->priv->dimension - 8);
             pixmap = gdk_pixmap_new(widget->window, viewer->priv->dimension, viewer->priv->dimension, -1);
 
             gdk_draw_rectangle(GDK_DRAWABLE(pixmap),
@@ -452,23 +414,23 @@
 GtkWidget *
 rstto_thumbnail_viewer_new(RsttoNavigator *navigator)
 {
-	RsttoThumbnailViewer *viewer;
+    RsttoThumbnailViewer *viewer;
 
-	viewer = g_object_new(RSTTO_TYPE_THUMBNAIL_VIEWER, NULL);
+    viewer = g_object_new(RSTTO_TYPE_THUMBNAIL_VIEWER, NULL);
 
     viewer->priv->navigator = navigator;
 
-	g_signal_connect(G_OBJECT(navigator), "file_changed", G_CALLBACK(cb_rstto_thumbnailer_nav_file_changed), viewer);
+    g_signal_connect(G_OBJECT(navigator), "file_changed", G_CALLBACK(cb_rstto_thumbnailer_nav_file_changed), viewer);
 
-	return (GtkWidget *)viewer;
+    return (GtkWidget *)viewer;
 }
 
 static void
 cb_rstto_thumbnailer_nav_file_changed(RsttoNavigator *nav, RsttoThumbnailViewer *viewer)
 {
     GtkWidget *widget = GTK_WIDGET(viewer);
-	if (GTK_WIDGET_REALIZED (viewer))
-	{
+    if (GTK_WIDGET_REALIZED (viewer))
+    {
         if(viewer->priv->auto_center)
         {
             gint nr = rstto_navigator_get_position(nav);
@@ -572,69 +534,3 @@
 {
     return viewer->priv->orientation;
 }
-
-static gboolean
-rstto_thumbnail_viewer_cache_add (RsttoThumbnailViewerCache *cache, GdkPixbuf *pixbuf, gint nr)
-{
-    if (cache->begin == -1)
-    {
-        cache->begin = nr;
-        cache->end = nr;
-        
-        cache->pixmaps = g_slist_prepend(cache->pixmaps, pixbuf);
-        return TRUE;
-    }   
-    else
-    {
-        if (nr == cache->begin-1)
-        {
-            cache->pixmaps = g_slist_prepend(cache->pixmaps, pixbuf);
-            cache->begin--;
-            return TRUE;
-        }
-        if (nr == cache->end+1)
-        {
-            cache->pixmaps = g_slist_append(cache->pixmaps, pixbuf);
-            cache->end++;
-            return TRUE;
-        }
-    }
-    g_print("aargh: %d\n", nr);
-    return FALSE;
-}
-
-static gboolean
-rstto_thumbnail_viewer_cache_remove (RsttoThumbnailViewerCache *cache, gint nr)
-{
-    g_return_val_if_fail(nr >= 0, FALSE);
-    if (nr == cache->begin)
-    {
-        g_object_unref(cache->pixmaps->data);
-        cache->pixmaps = g_slist_delete_link(cache->pixmaps, cache->pixmaps);
-        cache->begin++;
-    }
-    else
-    {
-        if (nr == cache->end)
-        {
-            GSList *element = g_slist_last(cache->pixmaps);
-            g_object_unref(cache->pixmaps->data);
-            cache->pixmaps = g_slist_delete_link(cache->pixmaps, element);
-            cache->end--;
-        }
-    }
-    if (!g_slist_length(cache->pixmaps))
-    {
-        cache->begin = -1;
-        cache->end = -1;
-    }
-    return TRUE;   
-}
-
-static GdkPixbuf *
-rstto_thumbnail_viewer_cache_get_pixbuf (RsttoThumbnailViewerCache *cache, gint nr)
-{
-    if ((nr >= cache->begin) && (nr <= cache->end))
-        return g_slist_nth_data(cache->pixmaps, nr - cache->begin);
-    return NULL;
-}

Modified: ristretto/trunk/src/thumbnail_viewer.h
===================================================================
--- ristretto/trunk/src/thumbnail_viewer.h	2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/thumbnail_viewer.h	2007-08-19 13:40:45 UTC (rev 3006)
@@ -23,21 +23,21 @@
 
 #define RSTTO_THUMBNAIL_VIEWER(obj)( \
         G_TYPE_CHECK_INSTANCE_CAST ((obj), \
-				RSTTO_TYPE_THUMBNAIL_VIEWER, \
-				RsttoThumbnailViewer))
+                RSTTO_TYPE_THUMBNAIL_VIEWER, \
+                RsttoThumbnailViewer))
 
 #define RSTTO_IS_THUMBNAIL_VIEWER(obj)( \
         G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
-				RSTTO_TYPE_THUMBNAIL_VIEWER))
+                RSTTO_TYPE_THUMBNAIL_VIEWER))
 
 #define RSTTO_THUMBNAIL_VIEWER_CLASS(klass)( \
         G_TYPE_CHECK_CLASS_CAST ((klass), \
-				RSTTO_TYPE_THUMBNAIL_VIEWER, \
-				RsttoThumbnailViewerClass))
+                RSTTO_TYPE_THUMBNAIL_VIEWER, \
+                RsttoThumbnailViewerClass))
 
 #define RSTTO_IS_THUMBNAIL_VIEWER_CLASS(klass)( \
         G_TYPE_CHECK_CLASS_TYPE ((klass), \
-				RSTTO_TYPE_THUMBNAIL_VIEWER()))
+                RSTTO_TYPE_THUMBNAIL_VIEWER()))
 
 typedef struct _RsttoThumbnailViewerPriv RsttoThumbnailViewerPriv;
 
@@ -45,7 +45,7 @@
 
 struct _RsttoThumbnailViewer
 {
-	GtkWidget         parent;
+    GtkWidget         parent;
     RsttoThumbnailViewerPriv *priv;
 };
 
@@ -53,7 +53,7 @@
 
 struct _RsttoThumbnailViewerClass
 {
-	GtkWidgetClass  parent_class;
+    GtkWidgetClass  parent_class;
 };
 
 GType      rstto_thumbnail_viewer_get_type();




More information about the Goodies-commits mailing list