aboutsummaryrefslogtreecommitdiff
path: root/fastiv.c
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2021-11-22 20:36:41 +0100
committerPřemysl Eric Janouch <p@janouch.name>2021-11-22 20:37:16 +0100
commit047e49051b0824e621f04de6f420b559e1fe135c (patch)
treeeb06ff6b0ba63acfee1254fafd3a5864ad8173ba /fastiv.c
parent4ed6aa6ad73367124b2fc98c44aeeb1d96da7cbf (diff)
downloadfiv-047e49051b0824e621f04de6f420b559e1fe135c.tar.gz
fiv-047e49051b0824e621f04de6f420b559e1fe135c.tar.xz
fiv-047e49051b0824e621f04de6f420b559e1fe135c.zip
Register for opening directories
Diffstat (limited to 'fastiv.c')
-rw-r--r--fastiv.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/fastiv.c b/fastiv.c
index 99570ad..880d91f 100644
--- a/fastiv.c
+++ b/fastiv.c
@@ -321,18 +321,25 @@ on_item_activated(G_GNUC_UNUSED FastivBrowser *browser, const char *path,
}
static gboolean
-open_any_path(const char *path)
+open_any_path(const char *path, gboolean force_browser)
{
GStatBuf st;
gchar *canonical = g_canonicalize_filename(path, g.directory);
gboolean success = !g_stat(canonical, &st);
- if (!success)
+ if (!success) {
show_error_dialog(g_error_new(G_FILE_ERROR,
g_file_error_from_errno(errno), "%s: %s", path, g_strerror(errno)));
- else if (S_ISDIR(st.st_mode))
+ } else if (S_ISDIR(st.st_mode)) {
load_directory(canonical);
- else
+ } else if (force_browser) {
+ // GNOME, e.g., invokes this as a hint to focus the particular file,
+ // which we can't currently do yet.
+ gchar *directory = g_path_get_dirname(canonical);
+ load_directory(directory);
+ g_free(directory);
+ } else {
open(canonical);
+ }
g_free(canonical);
return success;
}
@@ -346,7 +353,7 @@ on_open_location(G_GNUC_UNUSED GtkPlacesSidebar *sidebar, GFile *location,
if (flags & GTK_PLACES_OPEN_NEW_WINDOW)
spawn_path(path);
else
- open_any_path(path);
+ open_any_path(path, FALSE);
g_free(path);
}
}
@@ -520,7 +527,8 @@ on_button_press_browser(G_GNUC_UNUSED GtkWidget *widget, GdkEventButton *event)
int
main(int argc, char *argv[])
{
- gboolean show_version = FALSE, show_supported_media_types = FALSE;
+ gboolean show_version = FALSE, show_supported_media_types = FALSE,
+ browse = FALSE;
gchar **path_args = NULL;
const GOptionEntry options[] = {
{G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &path_args,
@@ -528,6 +536,9 @@ main(int argc, char *argv[])
{"list-supported-media-types", 0, G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE, &show_supported_media_types,
"Output supported media types and exit", NULL},
+ {"browse", 0, G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE, &browse,
+ "Start in filesystem browsing mode", NULL},
{"version", 'V', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE,
&show_version, "Output version information and exit", NULL},
{},
@@ -699,8 +710,8 @@ main(int argc, char *argv[])
g.files = g_ptr_array_new_full(16, g_free);
g.directory = g_get_current_dir();
- if (!path_arg || !open_any_path(path_arg))
- open_any_path(g.directory);
+ if (!path_arg || !open_any_path(path_arg, browse))
+ open_any_path(g.directory, FALSE);
// Try to get half of the screen vertically, in 4:3 aspect ratio.
//