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

Stephan Arts stephan at xfce.org
Tue Jul 24 12:30:04 CEST 2007


Author: stephan
Date: 2007-07-24 10:30:04 +0000 (Tue, 24 Jul 2007)
New Revision: 2924

Modified:
   ristretto/trunk/src/main.c
   ristretto/trunk/src/picture_viewer.c
   ristretto/trunk/src/picture_viewer.h
Log:
Moved the navigation-code to the picture-viewer.
(Might be better to place that inside a separate navigator-widget though)



Modified: ristretto/trunk/src/main.c
===================================================================
--- ristretto/trunk/src/main.c	2007-07-23 21:53:08 UTC (rev 2923)
+++ ristretto/trunk/src/main.c	2007-07-24 10:30:04 UTC (rev 2924)
@@ -23,9 +23,6 @@
 #include "picture_viewer.h"
 
 static ThunarVfsMimeDatabase *mime_dbase = NULL;
-static ThunarVfsPath *working_dir = NULL;
-static GList *file_list = NULL;
-static GList *file_iter = NULL;
 
 static gboolean playing = FALSE;
 
@@ -53,12 +50,8 @@
 
 int main(int argc, char **argv)
 {
-	GdkPixbuf *pixbuf = NULL;
-    GtkWidget *dialog = NULL;
-    GError *error = NULL;
-    gchar *dir_name = NULL;
+    ThunarVfsPath *path = NULL;
 
-
 	#ifdef ENABLE_NLS
 	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
  	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
@@ -75,65 +68,9 @@
 	gtk_window_set_title(GTK_WINDOW(window), PACKAGE_STRING);
 
 	if(argc == 2)
-	{
-        ThunarVfsPath *path = thunar_vfs_path_new(argv[1], NULL);
-        ThunarVfsInfo *info = thunar_vfs_info_new_for_path(path, NULL);
+        path = thunar_vfs_path_new(argv[1], NULL);
 
-        if(info)
-        {
-            g_debug("%s\n", thunar_vfs_mime_info_get_name(info->mime_info));
-            g_debug("%s\n", thunar_vfs_mime_info_get_comment(info->mime_info));
-            if(strcmp(thunar_vfs_mime_info_get_name(info->mime_info), "inode/directory"))
-            {
-                working_dir = thunar_vfs_path_get_parent(path);
-            }
-            else
-            {
-                working_dir = path;
-            }
-        }
-        else
-        {
-            working_dir = path;
-        }
-        thunar_vfs_path_ref(working_dir);
 
-        dir_name = thunar_vfs_path_dup_string(working_dir);
-
-        GDir *dir = g_dir_open(dir_name, 0, NULL);
-        const gchar *filename = g_dir_read_name(dir);
-        while(filename)
-        {
-            ThunarVfsMimeInfo *mime_info = thunar_vfs_mime_database_get_info_for_name(mime_dbase, filename);
-            if(!strcmp(thunar_vfs_mime_info_get_media(mime_info), "image"))
-            {
-                file_list = g_list_prepend(file_list, thunar_vfs_path_relative(working_dir, filename));
-                if(thunar_vfs_path_equal(path, file_list->data))
-                {
-                    pixbuf = gdk_pixbuf_new_from_file(argv[1], &error);
-                    file_iter = file_list;
-                }
-            }
-            thunar_vfs_mime_info_unref(mime_info);
-            filename = g_dir_read_name(dir);
-        }
-        g_free(dir_name);
-        if(error)
-        {
-            dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(window),
-                                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                            GTK_MESSAGE_ERROR,
-                                            GTK_BUTTONS_OK,
-                                            "<b>Error:</b>\n%s",
-                                            error->message);
-        }
-        if(!file_iter)
-            file_list = file_list;
-	}
-	else
-		pixbuf = NULL;
-
-
 	g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
 
 	GtkWidget *viewer = rstto_picture_viewer_new();
@@ -157,11 +94,8 @@
 	gtk_tool_item_set_expand(spacer, TRUE);
 	gtk_tool_item_set_homogeneous(spacer, FALSE);
 
-	rstto_picture_viewer_set_pixbuf(RSTTO_PICTURE_VIEWER(viewer), pixbuf);
+	rstto_picture_viewer_set_path(RSTTO_PICTURE_VIEWER(viewer), path);
 
-	if(pixbuf)
-		g_object_unref(pixbuf);
-
 	gtk_widget_set_size_request(window, 300, 200);
 
 
@@ -197,11 +131,6 @@
 	gtk_widget_show_all(window);
 	gtk_widget_show(viewer);
 
-    if(dialog)
-    {
-        gtk_dialog_run(GTK_DIALOG(dialog));
-        gtk_widget_destroy(dialog);
-    }
 
 	gtk_main();
 	return 0;
@@ -236,7 +165,6 @@
 static void
 cb_rstto_open(GtkToolItem *item, RsttoPictureViewer *viewer)
 {
-	GdkPixbuf *pixbuf = NULL;
 	GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(item));
 
 	GtkWidget *dialog = gtk_file_chooser_dialog_new(_("Open image"),
@@ -252,39 +180,9 @@
 		const gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
 
 		ThunarVfsPath *path = thunar_vfs_path_new(filename, NULL);
-		if(working_dir)
-			thunar_vfs_path_unref(working_dir);
-		working_dir = thunar_vfs_path_get_parent(path);
-		thunar_vfs_path_ref(working_dir);
-		thunar_vfs_path_unref(path);
 
-		g_list_foreach(file_list, (GFunc)thunar_vfs_path_unref, NULL);
-		g_list_free(file_list);
-		file_list = file_iter = NULL;
+		rstto_picture_viewer_set_path(RSTTO_PICTURE_VIEWER(viewer), path);
 
-		gchar *dir_name = thunar_vfs_path_dup_string(working_dir);
-
-		GDir *dir = g_dir_open(dir_name, 0, NULL);
-		const gchar *_filename = g_dir_read_name(dir);
-		while(_filename)
-		{
-			ThunarVfsMimeInfo *mime_info = thunar_vfs_mime_database_get_info_for_name(mime_dbase, _filename);
-			if(!strcmp(thunar_vfs_mime_info_get_media(mime_info), "image"))
-			{
-				file_list = g_list_prepend(file_list, thunar_vfs_path_relative(working_dir, _filename));
-				if(!strcmp(thunar_vfs_path_get_name(THUNAR_VFS_PATH(file_list->data)), _filename))
-					file_iter = file_list;
-			}
-			thunar_vfs_mime_info_unref(mime_info);
-			_filename = g_dir_read_name(dir);
-		}
-		g_free(dir_name);
-
-		pixbuf = gdk_pixbuf_new_from_file(filename , NULL);
-
-		rstto_picture_viewer_set_pixbuf(RSTTO_PICTURE_VIEWER(viewer), pixbuf);
-
-		g_object_unref(pixbuf);
 	}
 
 	gtk_widget_destroy(dialog);
@@ -293,61 +191,13 @@
 static void
 cb_rstto_forward(GtkToolItem *item, RsttoPictureViewer *viewer)
 {
-	GdkPixbuf *pixbuf = NULL;
-    GError *error = NULL;
-
-	if(file_iter)
-		file_iter = g_list_next(file_iter);
-	if(!file_iter)
-		file_iter = file_list;
-
-	while(!pixbuf && file_iter)
-	{
-		gchar *filename = thunar_vfs_path_dup_string(file_iter->data);
-
-		pixbuf = gdk_pixbuf_new_from_file(filename , &error);
-        if(!pixbuf)
-        {
-            g_debug("%s\n", error->message);
-            GList *_file_iter = g_list_next(file_iter);
-
-            thunar_vfs_path_unref(file_iter->data);
-            file_list = g_list_remove(file_list, file_iter->data);
-            if(_file_iter)
-                file_iter = _file_iter;
-            else
-		        file_iter = file_list;
-        }
-
-		rstto_picture_viewer_set_pixbuf(RSTTO_PICTURE_VIEWER(viewer), pixbuf);
-
-		if(pixbuf)
-			g_object_unref(pixbuf);
-		g_free(filename);
-	}
+    rstto_picture_viewer_forward(viewer);
 }
 
 static void
 cb_rstto_previous(GtkToolItem *item, RsttoPictureViewer *viewer)
 {
-	GdkPixbuf *pixbuf;
-	if(file_iter)
-		file_iter = g_list_previous(file_iter);
-	if(!file_iter)
-		file_iter = g_list_last(file_list);
-
-	if(file_iter)
-	{
-		gchar *filename = thunar_vfs_path_dup_string(file_iter->data);
-
-		pixbuf = gdk_pixbuf_new_from_file(filename , NULL);
-
-		rstto_picture_viewer_set_pixbuf(RSTTO_PICTURE_VIEWER(viewer), pixbuf);
-
-		if(pixbuf)
-			g_object_unref(pixbuf);
-		g_free(filename);
-	}
+    rstto_picture_viewer_reverse(viewer);
 }
 
 static void

Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2007-07-23 21:53:08 UTC (rev 2923)
+++ ristretto/trunk/src/picture_viewer.c	2007-07-24 10:30:04 UTC (rev 2924)
@@ -17,7 +17,10 @@
 #include <config.h>
 #include <gtk/gtk.h>
 #include <gtk/gtkmarshal.h>
+#include <string.h>
 
+#include <thunar-vfs/thunar-vfs.h>
+
 #include "picture_viewer.h"
 
 static void
@@ -39,6 +42,8 @@
 rstto_picture_viewer_expose(GtkWidget *, GdkEventExpose *);
 
 static void
+rstto_picture_viewer_set_pixbuf(RsttoPictureViewer *viewer, GdkPixbuf *pixbuf);
+static void
 rstto_picture_viewer_paint(GtkWidget *widget);
 static void
 rstto_picture_viewer_refresh(RsttoPictureViewer *viewer);
@@ -362,7 +367,7 @@
 	return viewer->scale;
 }
 
-void
+static void
 rstto_picture_viewer_set_pixbuf(RsttoPictureViewer *viewer, GdkPixbuf *pixbuf)
 {
 	if(viewer->src_pixbuf)
@@ -444,3 +449,125 @@
 	}
 
 }
+
+void
+rstto_picture_viewer_set_path(RsttoPictureViewer *viewer, ThunarVfsPath *path)
+{
+    if(path)
+    {
+        ThunarVfsInfo *info = thunar_vfs_info_new_for_path(path, NULL);
+
+        if(strcmp(thunar_vfs_mime_info_get_name(info->mime_info), "inode/directory"))
+        {
+            viewer->working_path = thunar_vfs_path_get_parent(path);
+        }
+        else
+        {
+            thunar_vfs_path_ref(path);
+            viewer->working_path = path;
+        }
+
+        gchar *dir_name = thunar_vfs_path_dup_string(viewer->working_path);
+
+        GDir *dir = g_dir_open(dir_name, 0, NULL);
+        const gchar *filename = g_dir_read_name(dir);
+        while(filename)
+        {
+            ThunarVfsPath *file_path = thunar_vfs_path_relative(viewer->working_path, filename);
+            ThunarVfsInfo *file_info = thunar_vfs_info_new_for_path(file_path, NULL);
+            gchar *file_media = thunar_vfs_mime_info_get_media(file_info->mime_info);
+            if(!strcmp(file_media, "image"))
+            {
+                viewer->file_list = g_list_prepend(viewer->file_list, file_info);
+
+                if(thunar_vfs_path_equal(path, file_path))
+                {
+                    viewer->file_iter = viewer->file_list;
+                }
+            }
+            if(file_media)
+                g_free(file_media);
+            thunar_vfs_path_unref(file_path);
+            filename = g_dir_read_name(dir);
+        }
+        g_free(dir_name);
+        if(!viewer->file_iter)
+        {
+            viewer->file_iter = viewer->file_list;
+        }
+    }
+    else
+    {
+        thunar_vfs_path_unref(viewer->working_path);
+        viewer->working_path = NULL;
+
+        g_list_foreach(viewer->file_list, (GFunc)thunar_vfs_info_unref, NULL);
+        viewer->file_list = NULL;
+        viewer->file_iter = NULL;
+    }
+}
+
+void
+rstto_picture_viewer_forward (RsttoPictureViewer *viewer)
+{
+    GdkPixbuf *pixbuf = NULL;
+    if(viewer->file_iter)
+        viewer->file_iter = g_list_next(viewer->file_iter);
+    if(!viewer->file_iter)
+        viewer->file_iter = g_list_first(viewer->file_list);
+
+    while(!pixbuf && viewer->file_iter)
+    {
+        gchar *filename = thunar_vfs_path_dup_string(((ThunarVfsInfo *)viewer->file_iter->data)->path);
+        pixbuf = gdk_pixbuf_new_from_file(filename , NULL);
+        if(!pixbuf)
+        {
+            GList *_file_iter = g_list_next(viewer->file_iter);
+            thunar_vfs_info_unref(viewer->file_iter->data);
+            viewer->file_list = g_list_remove(viewer->file_list, viewer->file_iter->data);
+            if(_file_iter)
+                viewer->file_iter = _file_iter;
+            else
+                viewer->file_iter = viewer->file_list;
+        }
+        if(pixbuf)
+        {
+            rstto_picture_viewer_set_pixbuf(RSTTO_PICTURE_VIEWER(viewer), pixbuf);
+            g_object_unref(pixbuf);
+        }
+        g_free(filename);
+    }
+}
+
+void
+rstto_picture_viewer_reverse (RsttoPictureViewer *viewer)
+{
+    GdkPixbuf *pixbuf = NULL;
+
+    if(viewer->file_iter)
+        viewer->file_iter = g_list_previous(viewer->file_iter);
+    if(!viewer->file_iter)
+        viewer->file_iter = g_list_last(viewer->file_list);
+
+    while(!pixbuf && viewer->file_iter)
+    {
+        gchar *filename = thunar_vfs_path_dup_string(((ThunarVfsInfo *)viewer->file_iter->data)->path);
+        pixbuf = gdk_pixbuf_new_from_file(filename , NULL);
+        if(!pixbuf)
+        {
+            GList *_file_iter = g_list_previous(viewer->file_iter);
+            thunar_vfs_info_unref(viewer->file_iter->data);
+            viewer->file_list = g_list_remove(viewer->file_list, viewer->file_iter->data);
+            if(_file_iter)
+                viewer->file_iter = _file_iter;
+            else
+                viewer->file_iter = g_list_last(viewer->file_list);
+        }
+        if(pixbuf)
+        {
+            rstto_picture_viewer_set_pixbuf(RSTTO_PICTURE_VIEWER(viewer), pixbuf);
+            g_object_unref(pixbuf);
+        }
+        g_free(filename);
+    }
+}

Modified: ristretto/trunk/src/picture_viewer.h
===================================================================
--- ristretto/trunk/src/picture_viewer.h	2007-07-23 21:53:08 UTC (rev 2923)
+++ ristretto/trunk/src/picture_viewer.h	2007-07-24 10:30:04 UTC (rev 2924)
@@ -52,6 +52,9 @@
 	GtkAdjustment    *hadjustment;
 	gdouble           scale;
 	gboolean          scale_fts; /* Scale image to fit to screen */
+    ThunarVfsPath    *working_path;
+    GList            *file_list;
+    GList            *file_iter;
 	void             (*cb_value_changed)(GtkAdjustment *, RsttoPictureViewer *);
 };
 
@@ -69,11 +72,13 @@
 GType      rstto_picture_viewer_get_type();
 
 GtkWidget *rstto_picture_viewer_new();
-void       rstto_picture_viewer_set_pixbuf(RsttoPictureViewer *viewer, GdkPixbuf *pixbuf);
+void       rstto_picture_viewer_set_path(RsttoPictureViewer *viewer, ThunarVfsPath *path);
 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);
 
+void rstto_picture_viewer_forward (RsttoPictureViewer *viewer);
+void rstto_picture_viewer_reverse (RsttoPictureViewer *viewer);
 
 G_END_DECLS
 




More information about the Goodies-commits mailing list