[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