From 205db6de7654b5a11083e07e7f79c32300f74253 Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Thu, 5 Aug 1999 16:16:47 +0000 Subject: [PATCH] r45: Added 'Show Hidden' feature. Added log window for stderr of filer and child processes. --- ROX-Filer/src/filer.c | 6 +++++- ROX-Filer/src/filer.h | 1 + ROX-Filer/src/main.c | 37 +++++++++++++++++++++++++++++++++++++ ROX-Filer/src/menu.c | 13 +++++++++++-- 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/ROX-Filer/src/filer.c b/ROX-Filer/src/filer.c index 33ee5529..887fd383 100644 --- a/ROX-Filer/src/filer.c +++ b/ROX-Filer/src/filer.c @@ -175,9 +175,12 @@ static void add_item(FilerWindow *filer_window, char *leafname) int base_type; GString *path; - /* Ignore dot files (should be an option) */ if (leafname[0] == '.') + { + if (filer_window->show_hidden == FALSE || leafname[1] == '\0' + || (leafname[1] == '.' && leafname[2] == '\0')) return; + } item = g_malloc(sizeof(FileItem)); item->leafname = g_strdup(leafname); @@ -670,6 +673,7 @@ void filer_opendir(char *path, gboolean panel, Side panel_side) filer_window = g_malloc(sizeof(FilerWindow)); filer_window->path = pathdup(path); filer_window->dir = NULL; /* Not scanning */ + filer_window->show_hidden = FALSE; filer_window->panel = panel; filer_window->panel_side = panel_side; filer_window->temp_item_selected = FALSE; diff --git a/ROX-Filer/src/filer.h b/ROX-Filer/src/filer.h index b2a51b9b..e1d03fff 100644 --- a/ROX-Filer/src/filer.h +++ b/ROX-Filer/src/filer.h @@ -37,6 +37,7 @@ struct _FilerWindow Collection *collection; gboolean panel; gboolean temp_item_selected; + gboolean show_hidden; Side panel_side; time_t m_time; /* m-time at last scan */ diff --git a/ROX-Filer/src/main.c b/ROX-Filer/src/main.c index 38b6f527..2c3232ee 100644 --- a/ROX-Filer/src/main.c +++ b/ROX-Filer/src/main.c @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include @@ -55,8 +57,38 @@ static void child_died(int signum) } while (1); } +#define BUFLEN 40 +void stderr_cb(gpointer data, gint source, GdkInputCondition condition) +{ + char buf[BUFLEN]; + static GtkWidget *log = NULL; + static GtkWidget *window = NULL; + ssize_t len; + + if (!window) + { + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), "ROX-Filer error log"); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_default_size(GTK_WINDOW(window), 600, 300); + gtk_signal_connect_object(GTK_OBJECT(window), "delete_event", + gtk_widget_hide, GTK_OBJECT(window)); + log = gtk_text_new(NULL, NULL); + gtk_container_add(GTK_CONTAINER(window), log); + } + + if (!GTK_WIDGET_MAPPED(window)) + gtk_widget_show_all(window); + + len = read(source, buf, BUFLEN); + if (len > 0) + gtk_text_insert(GTK_TEXT(log), NULL, NULL, NULL, buf, len); +} + int main(int argc, char **argv) { + int stderr_pipe[2]; + gtk_init(&argc, &argv); choices_init("ROX-Filer"); @@ -108,6 +140,11 @@ int main(int argc, char **argv) } } + pipe(stderr_pipe); + dup2(stderr_pipe[1], STDERR_FILENO); + gdk_input_add(stderr_pipe[0], GDK_INPUT_READ, stderr_cb, NULL); + fcntl(STDERR_FILENO, F_SETFD, 0); + gtk_main(); return EXIT_SUCCESS; diff --git a/ROX-Filer/src/menu.c b/ROX-Filer/src/menu.c index 737c0e99..60897fd8 100644 --- a/ROX-Filer/src/menu.c +++ b/ROX-Filer/src/menu.c @@ -44,6 +44,7 @@ static void menu_closed(GtkWidget *widget); static void items_sensitive(GtkWidget *menu, int from, int n, gboolean state); static char *load_xterm_here(char *data); +static void hidden(gpointer data, guint action, GtkWidget *widget); static void refresh(gpointer data, guint action, GtkWidget *widget); static void rename_item(gpointer data, guint action, GtkWidget *widget); @@ -80,7 +81,7 @@ static GtkItemFactoryEntry filer_menu_def[] = { {"/Display/Sort by Size", NULL, NULL, 0, "/Display/Sort by Name"}, {"/Display/Sort by Owner", NULL, NULL, 0, "/Display/Sort by Name"}, {"/Display/Separator", NULL, NULL, 0, ""}, -{"/Display/Show Hidden", C_"H", NULL, 0, ""}, +{"/Display/Show Hidden", C_"H", hidden, 0, ""}, {"/Display/Refresh", C_"L", refresh, 0, NULL}, {"/File", NULL, NULL, 0, ""}, {"/File/Copy...", NULL, NULL, 0, NULL}, @@ -114,7 +115,7 @@ static GtkItemFactoryEntry panel_menu_def[] = { {"/Display/Sort by Size", NULL, NULL, 0, "/Display/Sort by Name"}, {"/Display/Sort by Owner", NULL, NULL, 0, "/Display/Sort by Name"}, {"/Display/Separator", NULL, NULL, 0, ""}, -{"/Display/Show Hidden", NULL, NULL, 0, ""}, +{"/Display/Show Hidden", NULL, hidden, 0, ""}, {"/Display/Refresh", NULL, refresh, 0, NULL}, {"/File", NULL, NULL, 0, ""}, {"/File/Help", NULL, help, 0, NULL}, @@ -382,6 +383,14 @@ static void menu_closed(GtkWidget *widget) /* Actions */ +static void hidden(gpointer data, guint action, GtkWidget *widget) +{ + g_return_if_fail(window_with_focus != NULL); + + window_with_focus->show_hidden = !window_with_focus->show_hidden; + scan_dir(window_with_focus); +} + static void refresh(gpointer data, guint action, GtkWidget *widget) { g_return_if_fail(window_with_focus != NULL); -- 2.11.4.GIT