[Goodies-commits] r3982 - ristretto/trunk/src
Stephan Arts
stephan at xfce.org
Sat Feb 23 12:15:06 CET 2008
Author: stephan
Date: 2008-02-23 11:15:06 +0000 (Sat, 23 Feb 2008)
New Revision: 3982
Modified:
ristretto/trunk/src/main.c
ristretto/trunk/src/main_window.c
ristretto/trunk/src/navigator.c
ristretto/trunk/src/navigator.h
ristretto/trunk/src/picture_viewer.c
Log:
Remove code-duplication (Bug #3866)
Modified: ristretto/trunk/src/main.c
===================================================================
--- ristretto/trunk/src/main.c 2008-02-22 20:06:16 UTC (rev 3981)
+++ ristretto/trunk/src/main.c 2008-02-23 11:15:06 UTC (rev 3982)
@@ -271,67 +271,32 @@
{
for (n = 1; n < argc; ++n)
{
- ThunarVfsPath *path;
- if (g_path_is_absolute(argv[n]))
- path = thunar_vfs_path_new(argv[n], NULL);
+ if (g_path_is_absolute(argv[1]))
+ {
+ path_dir = g_strdup(argv[1]);
+ }
else
{
gchar *base_dir = g_get_current_dir();
- path_dir = g_build_path("/", base_dir, argv[n], NULL);
- path = thunar_vfs_path_new(path_dir, NULL);
+ path_dir = g_build_path("/", base_dir, argv[1], NULL);
g_free(base_dir);
}
-
- if (path)
+ if(g_file_test(path_dir, G_FILE_TEST_EXISTS))
{
- ThunarVfsInfo *info = thunar_vfs_info_new_for_path(path, NULL);
- if(info)
+ if(g_file_test(path_dir, G_FILE_TEST_IS_DIR))
{
- if(strcmp(thunar_vfs_mime_info_get_name(info->mime_info), "inode/directory"))
- {
- gchar *file_media = thunar_vfs_mime_info_get_media(info->mime_info);
- if(!strcmp(file_media, "image"))
- {
- RsttoNavigatorEntry *entry = rstto_navigator_entry_new(navigator, info);
- rstto_navigator_add (navigator, entry, TRUE);
- }
- }
- else
- {
- GDir *dir = g_dir_open(argv[n], 0, NULL);
- const gchar *filename = g_dir_read_name(dir);
- rstto_navigator_set_monitor_handle_for_dir(navigator, info->path);
-
- while (filename)
- {
- gchar *path_name = g_strconcat(argv[n], "/", filename, NULL);
- ThunarVfsPath *file_path = thunar_vfs_path_new(path_name, NULL);
- if (file_path)
- {
- 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"))
- {
- RsttoNavigatorEntry *entry = rstto_navigator_entry_new(navigator, file_info);
- rstto_navigator_add (navigator, entry, FALSE);
- }
- g_free(file_media);
- thunar_vfs_path_unref(file_path);
- }
- g_free(path_name);
- filename = g_dir_read_name(dir);
- }
- g_dir_close(dir);
- }
-
- gchar *uri = thunar_vfs_path_dup_uri(info->path);
- gtk_recent_manager_add_item(recent_manager, uri);
- g_free(uri);
+ rstto_navigator_open_folder (navigator, path_dir, TRUE, NULL);
}
+ else
+ {
+ rstto_navigator_open_file (navigator, path_dir, TRUE, NULL);
+ }
}
+
+ g_free(path_dir);
}
rstto_navigator_jump_first(navigator);
}
@@ -339,10 +304,8 @@
{
if (argc == 2)
{
- ThunarVfsPath *path;
if (g_path_is_absolute(argv[1]))
{
- path = thunar_vfs_path_new(argv[1], NULL);
path_dir = g_strdup(argv[1]);
}
else
@@ -350,104 +313,23 @@
gchar *base_dir = g_get_current_dir();
path_dir = g_build_path("/", base_dir, argv[1], NULL);
- path = thunar_vfs_path_new(path_dir, NULL);
g_free(base_dir);
}
-
- if (path)
+ if(g_file_test(path_dir, G_FILE_TEST_EXISTS))
{
- ThunarVfsInfo *info = thunar_vfs_info_new_for_path(path, NULL);
- if(info)
+ if(g_file_test(path_dir, G_FILE_TEST_IS_DIR))
{
- if(strcmp(thunar_vfs_mime_info_get_name(info->mime_info), "inode/directory"))
- {
- gchar* media = thunar_vfs_mime_info_get_media(info->mime_info);
- if(!strcmp(media, "image"))
- {
- ThunarVfsPath *_path = thunar_vfs_path_get_parent(path);
- thunar_vfs_path_unref(path);
- path = _path;
-
- gchar *path_string = thunar_vfs_path_dup_string(path);
-
- GDir *dir = g_dir_open(path_string, 0, NULL);
- const gchar *filename = g_dir_read_name(dir);
- while (filename)
- {
- gchar *path_name = g_strconcat(path_string, "/", filename, NULL);
- ThunarVfsPath *file_path = thunar_vfs_path_new(path_name, NULL);
- if (file_path)
- {
- 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"))
- {
- RsttoNavigatorEntry *entry = rstto_navigator_entry_new(navigator, file_info);
- gint i = rstto_navigator_add (navigator, entry, FALSE);
- if (path_dir == NULL)
- {
- if (!strcmp(path_name, argv[1]))
- {
- rstto_navigator_set_file_nr(navigator, i);
- }
- }
- else
- {
- if (!strcmp(path_name, path_dir))
- {
- rstto_navigator_set_file_nr(navigator, i);
- }
-
- }
- }
- g_free(file_media);
- thunar_vfs_path_unref(file_path);
- }
- g_free(path_name);
- filename = g_dir_read_name(dir);
- }
- g_dir_close(dir);
- g_free(path_string);
- }
- g_free(media);
- }
- else
- {
- GDir *dir = g_dir_open(argv[1], 0, NULL);
- const gchar *filename = g_dir_read_name(dir);
-
- rstto_navigator_set_monitor_handle_for_dir(navigator, info->path);
- while (filename)
- {
- gchar *path_name = g_strconcat(path_dir, "/", filename, NULL);
- ThunarVfsPath *file_path = thunar_vfs_path_new(path_name, NULL);
- if (file_path)
- {
- 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"))
- {
- RsttoNavigatorEntry *entry = rstto_navigator_entry_new(navigator, file_info);
- rstto_navigator_add (navigator, entry, FALSE);
- }
- g_free(file_media);
- thunar_vfs_path_unref(file_path);
- }
- g_free(path_name);
- filename = g_dir_read_name(dir);
- }
- rstto_navigator_jump_first(navigator);
- g_dir_close(dir);
- }
- gchar *uri = thunar_vfs_path_dup_uri(info->path);
- gtk_recent_manager_add_item(recent_manager, uri);
- g_free(uri);
+ rstto_navigator_open_folder (navigator, path_dir, TRUE, NULL);
}
- thunar_vfs_path_unref(path);
+ else
+ {
+ rstto_navigator_open_file (navigator, path_dir, TRUE, NULL);
+ }
}
+ g_free(path_dir);
}
}
Modified: ristretto/trunk/src/main_window.c
===================================================================
--- ristretto/trunk/src/main_window.c 2008-02-22 20:06:16 UTC (rev 3981)
+++ ristretto/trunk/src/main_window.c 2008-02-23 11:15:06 UTC (rev 3982)
@@ -302,11 +302,11 @@
gtk_window_set_title(GTK_WINDOW(window), PACKAGE_STRING);
gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
- window->priv->navigator = rstto_navigator_new();
+ window->priv->manager = gtk_recent_manager_get_default();
+ window->priv->navigator = rstto_navigator_new(window->priv->manager);
window->priv->thumbnail_viewer = rstto_thumbnail_bar_new(window->priv->navigator);
window->priv->picture_viewer = rstto_picture_viewer_new(window->priv->navigator);
- window->priv->manager = gtk_recent_manager_get_default();
/* Set up default settings */
window->priv->settings.thumbnail_viewer_orientation = GTK_ORIENTATION_HORIZONTAL;
@@ -1414,25 +1414,8 @@
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);
- if (path)
+ if (!rstto_navigator_open_file(window->priv->navigator, filename, FALSE, NULL))
{
- ThunarVfsInfo *info = thunar_vfs_info_new_for_path(path, NULL);
- gchar *file_media = thunar_vfs_mime_info_get_media(info->mime_info);
- if(!strcmp(file_media, "image"))
- {
- RsttoNavigatorEntry *entry = rstto_navigator_entry_new(window->priv->navigator, info);
- rstto_navigator_add (window->priv->navigator, entry, TRUE);
- gchar *uri = thunar_vfs_path_dup_uri(info->path);
- gtk_recent_manager_add_item(window->priv->manager, uri);
- g_free(uri);
- }
- g_free(file_media);
- thunar_vfs_path_unref(path);
- }
- else
- {
gtk_widget_destroy(dialog);
dialog = gtk_message_dialog_new(GTK_WINDOW(window),
GTK_DIALOG_MODAL,
@@ -1458,47 +1441,8 @@
gint response = gtk_dialog_run(GTK_DIALOG(dialog));
if(response == GTK_RESPONSE_OK)
{
- rstto_navigator_clear(window->priv->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)
- {
- ThunarVfsPath *dir_path = thunar_vfs_path_new(dir_name, NULL);
- if (dir_path)
- {
- rstto_navigator_set_monitor_handle_for_dir(window->priv->navigator, dir_path);
- thunar_vfs_path_unref(dir_path);
- dir_path = NULL;
- }
-
- const gchar *filename = g_dir_read_name(dir);
- while (filename)
- {
- 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);
- gchar *file_media = thunar_vfs_mime_info_get_media(info->mime_info);
- if(!strcmp(file_media, "image"))
- {
- RsttoNavigatorEntry *entry = rstto_navigator_entry_new(window->priv->navigator, info);
- rstto_navigator_add (window->priv->navigator, entry, FALSE);
- }
- g_free(file_media);
- thunar_vfs_path_unref(path);
- }
- g_free(path_name);
- filename = g_dir_read_name(dir);
- while (gtk_events_pending())
- gtk_main_iteration ();
- }
- rstto_navigator_jump_first(window->priv->navigator);
- gchar *uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
- gtk_recent_manager_add_item(window->priv->manager, uri);
- g_free(uri);
- g_dir_close(dir);
- }
+ rstto_navigator_open_folder(window->priv->navigator, dir_name, TRUE, NULL);
}
gtk_widget_destroy(dialog);
}
@@ -1507,54 +1451,22 @@
cb_rstto_main_window_open_recent(GtkRecentChooser *chooser, RsttoMainWindow *window)
{
gchar *uri = gtk_recent_chooser_get_current_uri(chooser);
- ThunarVfsPath *path = thunar_vfs_path_new(uri, NULL);
- if (path)
+ ThunarVfsPath *vfs_path = thunar_vfs_path_new(uri, NULL);
+ if (vfs_path)
{
- ThunarVfsInfo *info = thunar_vfs_info_new_for_path(path, NULL);
- if(info)
+ gchar *path = thunar_vfs_path_dup_string(vfs_path);
+ if(g_file_test(path, G_FILE_TEST_EXISTS))
{
- if(strcmp(thunar_vfs_mime_info_get_name(info->mime_info), "inode/directory"))
+ if(g_file_test(path, G_FILE_TEST_IS_DIR))
{
- RsttoNavigatorEntry *entry = rstto_navigator_entry_new(window->priv->navigator, info);
- rstto_navigator_add (window->priv->navigator, entry, TRUE);
+ rstto_navigator_open_folder(window->priv->navigator, path, TRUE, NULL);
}
else
{
- rstto_navigator_clear(window->priv->navigator);
- gchar *dir_path = thunar_vfs_path_dup_string(info->path);
- GDir *dir = g_dir_open(dir_path, 0, NULL);
- rstto_navigator_set_monitor_handle_for_dir(window->priv->navigator, info->path);
-
- const gchar *filename = g_dir_read_name(dir);
- while (filename)
- {
- gchar *path_name = g_strconcat(dir_path, "/", filename, NULL);
- ThunarVfsPath *file_path = thunar_vfs_path_new(path_name, NULL);
- if (file_path)
- {
- 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"))
- {
- RsttoNavigatorEntry *entry = rstto_navigator_entry_new(window->priv->navigator, file_info);
- rstto_navigator_add (window->priv->navigator, entry, FALSE);
- }
- g_free(file_media);
- thunar_vfs_path_unref(file_path);
- }
- g_free(path_name);
- filename = g_dir_read_name(dir);
- while (gtk_events_pending())
- gtk_main_iteration ();
- }
- rstto_navigator_jump_first(window->priv->navigator);
- g_free(dir_path);
+ rstto_navigator_open_file(window->priv->navigator, path, FALSE, NULL);
}
- gchar *uri = thunar_vfs_path_dup_uri(info->path);
- gtk_recent_manager_add_item(window->priv->manager, uri);
- g_free(uri);
}
- thunar_vfs_path_unref(path);
+ thunar_vfs_path_unref(vfs_path);
}
}
Modified: ristretto/trunk/src/navigator.c
===================================================================
--- ristretto/trunk/src/navigator.c 2008-02-22 20:06:16 UTC (rev 3981)
+++ ristretto/trunk/src/navigator.c 2008-02-23 11:15:06 UTC (rev 3982)
@@ -229,11 +229,12 @@
}
RsttoNavigator *
-rstto_navigator_new()
+rstto_navigator_new(GtkRecentManager *manager)
{
RsttoNavigator *navigator;
navigator = g_object_new(RSTTO_TYPE_NAVIGATOR, NULL);
+ navigator->manager = manager;
return navigator;
}
@@ -1367,3 +1368,159 @@
else
return FALSE;
}
+
+gboolean
+rstto_navigator_open_file(RsttoNavigator *navigator, const gchar *path, gboolean open_folder, GError **error)
+{
+ ThunarVfsInfo *vfs_info = NULL;
+ ThunarVfsPath *vfs_path = thunar_vfs_path_new(path, error);
+ gchar *file_media = NULL;
+ gchar *file_uri = NULL;
+
+
+ if (vfs_path == NULL)
+ {
+ return FALSE;
+ }
+
+ vfs_info = thunar_vfs_info_new_for_path(vfs_path, error);
+ if (vfs_info == NULL)
+ {
+ thunar_vfs_path_unref(vfs_path);
+ return FALSE;
+ }
+
+ if(!strcmp(thunar_vfs_mime_info_get_name(vfs_info->mime_info),
+ "inode/directory"))
+ {
+ g_set_error(error,
+ g_quark_from_static_string(
+ "Path refers to folder"),
+ G_FILE_ERROR_ISDIR,
+ "Path refers to directory\n"
+ "Use rstto_navigator_open_folder instead.");
+ return FALSE;
+ }
+
+ file_media = thunar_vfs_mime_info_get_media(vfs_info->mime_info);
+ if(!strcmp(file_media, "image"))
+ {
+ if (open_folder == TRUE)
+ {
+ ThunarVfsPath *parent_vfs_path = thunar_vfs_path_get_parent(vfs_path);
+ gchar *parent_path = thunar_vfs_path_dup_string(parent_vfs_path);
+
+ if(rstto_navigator_open_folder(navigator, parent_path, FALSE, error) == FALSE)
+ {
+ g_free(parent_path);
+ thunar_vfs_path_unref(parent_vfs_path);
+ return FALSE;
+ }
+
+ g_free(parent_path);
+ thunar_vfs_path_unref(parent_vfs_path);
+
+ GList *iter = g_list_find_custom(navigator->file_list, vfs_path, (GCompareFunc)cb_rstto_navigator_entry_path_compare_func);
+ if (iter != NULL)
+ {
+ rstto_navigator_entry_select((RsttoNavigatorEntry*)iter->data);
+ }
+ }
+ else
+ {
+ RsttoNavigatorEntry *entry = rstto_navigator_entry_new(navigator, vfs_info);
+ rstto_navigator_add (navigator, entry, TRUE);
+ }
+ }
+
+ file_uri = thunar_vfs_path_dup_uri(vfs_path);
+ gtk_recent_manager_add_item(navigator->manager, file_uri);
+ g_free(file_uri);
+
+ g_free(file_media);
+}
+
+gboolean
+rstto_navigator_open_folder(RsttoNavigator *navigator, const gchar *path, gboolean clear, GError **error)
+{
+ ThunarVfsInfo *vfs_info = NULL;
+ ThunarVfsPath *vfs_path = thunar_vfs_path_new(path, error);
+ GDir *dir = NULL;
+ gchar *dir_path = NULL;
+ gchar *dir_uri = NULL;
+
+
+ if (vfs_path == NULL)
+ {
+ return FALSE;
+ }
+
+ vfs_info = thunar_vfs_info_new_for_path(vfs_path, error);
+ if (vfs_info == NULL)
+ {
+ thunar_vfs_path_unref(vfs_path);
+ return FALSE;
+ }
+
+ if(strcmp(thunar_vfs_mime_info_get_name(vfs_info->mime_info),
+ "inode/directory"))
+ {
+ g_set_error(error,
+ g_quark_from_static_string(
+ "Path does not refer to folder"),
+ G_FILE_ERROR_ISDIR,
+ "Path does not refer to directory\n"
+ "Use rstto_navigator_open_file instead.");
+ return FALSE;
+ }
+
+ dir_path = thunar_vfs_path_dup_string(vfs_path);
+ dir = g_dir_open(dir_path, 0, NULL);
+
+ dir_uri = thunar_vfs_path_dup_uri(vfs_path);
+
+ gtk_recent_manager_add_item(navigator->manager, dir_uri);
+
+
+ {
+ if (clear == TRUE)
+ {
+ rstto_navigator_clear(navigator);
+ }
+ const gchar *filename = g_dir_read_name(dir);
+ ThunarVfsPath *file_vfs_path = NULL;
+ ThunarVfsInfo *file_vfs_info = NULL;
+ gchar *file_media;
+ gchar *path_name;
+
+ while (filename)
+ {
+ path_name = g_strconcat(dir_path, "/", filename, NULL);
+ file_vfs_path = thunar_vfs_path_new(path_name, NULL);
+
+ if (file_vfs_path)
+ {
+ file_vfs_info = thunar_vfs_info_new_for_path(file_vfs_path, NULL);
+ file_media = thunar_vfs_mime_info_get_media(file_vfs_info->mime_info);
+
+ if(!strcmp(file_media, "image"))
+ {
+ RsttoNavigatorEntry *entry = rstto_navigator_entry_new(navigator, file_vfs_info);
+ rstto_navigator_add (navigator, entry, FALSE);
+ }
+
+ g_free(file_media);
+ thunar_vfs_path_unref(file_vfs_path);
+ while (gtk_events_pending())
+ {
+ gtk_main_iteration();
+ }
+ }
+ g_free(path_name);
+ filename = g_dir_read_name(dir);
+ }
+ rstto_navigator_jump_first(navigator);
+ }
+
+ g_free(dir_uri);
+}
Modified: ristretto/trunk/src/navigator.h
===================================================================
--- ristretto/trunk/src/navigator.h 2008-02-22 20:06:16 UTC (rev 3981)
+++ ristretto/trunk/src/navigator.h 2008-02-23 11:15:06 UTC (rev 3982)
@@ -46,6 +46,7 @@
struct _RsttoNavigator
{
GObject parent;
+ GtkRecentManager *manager;
ThunarVfsMonitor *monitor;
ThunarVfsMonitorHandle *monitor_handle;
@@ -75,7 +76,7 @@
GType rstto_navigator_get_type ();
RsttoNavigator *
-rstto_navigator_new ();
+rstto_navigator_new (GtkRecentManager *recent_manager);
void rstto_navigator_jump_first (RsttoNavigator *navigator);
void rstto_navigator_jump_forward (RsttoNavigator *navigator);
@@ -160,6 +161,11 @@
gboolean
rstto_navigator_entry_is_selected(RsttoNavigatorEntry *entry);
+gboolean
+rstto_navigator_open_file(RsttoNavigator *navigator, const gchar *path, gboolean open_folder, GError **error);
+gboolean
+rstto_navigator_open_folder(RsttoNavigator *navigator, const gchar *path, gboolean clear, GError **error);
+
G_END_DECLS
#endif /* __RISTRETTO_NAVIGATOR_H__ */
Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c 2008-02-22 20:06:16 UTC (rev 3981)
+++ ristretto/trunk/src/picture_viewer.c 2008-02-23 11:15:06 UTC (rev 3982)
@@ -1221,7 +1221,7 @@
guint info,
guint time)
{
- RsttoPictureViewer *picture_viewer = widget;
+ RsttoPictureViewer *picture_viewer = RSTTO_PICTURE_VIEWER(widget);
gchar **array = gtk_selection_data_get_uris (selection_data);
context->action = GDK_ACTION_PRIVATE;
@@ -1235,22 +1235,17 @@
while(*_array)
{
- ThunarVfsPath *path = thunar_vfs_path_new(*_array, NULL);
- ThunarVfsInfo *info = thunar_vfs_info_new_for_path(path, NULL);
- gchar *file_media = thunar_vfs_mime_info_get_media(info->mime_info);
- if(!strcmp(file_media, "image"))
+ if (g_file_test(*_array, G_FILE_TEST_EXISTS))
{
- RsttoNavigatorEntry *entry = rstto_navigator_entry_new(picture_viewer->priv->navigator, info);
- rstto_navigator_add (picture_viewer->priv->navigator, entry, TRUE);
- gchar *uri = thunar_vfs_path_dup_uri(info->path);
- g_free(uri);
+ if (g_file_test(*_array, G_FILE_TEST_IS_DIR))
+ {
+ rstto_navigator_open_folder(picture_viewer->priv->navigator, *_array, FALSE, NULL);
+ }
+ else
+ {
+ rstto_navigator_open_file(picture_viewer->priv->navigator, *_array, FALSE, NULL);
+ }
}
- else
- {
-
- }
- g_free(file_media);
- thunar_vfs_path_unref(path);
_array++;
}
More information about the Goodies-commits
mailing list