From 4762eaa1e60191e483051a7f9f35b041d5f839b8 Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Tue, 7 Dec 1999 12:37:27 +0000 Subject: [PATCH] r127: The Show Hidden menu item now shows the true state for each window/panel. Filer windows can have a toolbar along the top (with Up and Home for now). --- ROX-Filer/src/filer.c | 105 ++++++++++++++++++++++++++++++++++++++++++++---- ROX-Filer/src/menu.c | 25 +++++++++++- ROX-Filer/src/pixmaps.c | 73 ++++++++++++++------------------- ROX-Filer/src/pixmaps.h | 11 +++-- 4 files changed, 160 insertions(+), 54 deletions(-) diff --git a/ROX-Filer/src/filer.c b/ROX-Filer/src/filer.c index be4e483b..011d63b2 100644 --- a/ROX-Filer/src/filer.c +++ b/ROX-Filer/src/filer.c @@ -62,6 +62,7 @@ static void update_options(); static void set_options(); static void save_options(); static char *filer_ro_bindings(char *data); +static char *filer_toolbar(char *data); static OptionsSection options = { @@ -71,6 +72,8 @@ static OptionsSection options = set_options, save_options }; +static gboolean o_toolbar = TRUE; +static GtkWidget *toggle_toolbar; static gboolean o_ro_bindings = FALSE; static GtkWidget *toggle_ro_bindings; @@ -100,6 +103,11 @@ static void add_view(FilerWindow *filer_window); static void remove_view(FilerWindow *filer_window); static void free_item(FileItem *item); static gboolean remove_deleted(gpointer item_data, gpointer data); +static void toolbar_up_clicked(GtkWidget *widget, FilerWindow *filer_window); +static void toolbar_home_clicked(GtkWidget *widget, FilerWindow *filer_window); +static void add_button(GtkContainer *box, int pixmap, + GtkSignalFunc cb, gpointer data); +static GtkWidget *create_toolbar(FilerWindow *filer_window); static GdkAtom xa_string; enum @@ -116,6 +124,7 @@ void filer_init() options_sections = g_slist_prepend(options_sections, &options); option_register("filer_ro_bindings", filer_ro_bindings); + option_register("filer_toolbar", filer_toolbar); } @@ -916,6 +925,19 @@ static gint key_press_event(GtkWidget *widget, return FALSE; } +static void toolbar_home_clicked(GtkWidget *widget, FilerWindow *filer_window) +{ + remove_view(filer_window); + filer_window->path = pathdup(getenv("HOME")); + add_view(filer_window); + scan_dir(filer_window); +} + +static void toolbar_up_clicked(GtkWidget *widget, FilerWindow *filer_window) +{ + change_to_parent(filer_window); +} + void change_to_parent(FilerWindow *filer_window) { remove_view(filer_window); @@ -1068,16 +1090,35 @@ void filer_opendir(char *path, gboolean panel, Side panel_side) } else { + hbox = gtk_hbox_new(FALSE, 0); + gtk_signal_connect(GTK_OBJECT(filer_window->window), "key_press_event", GTK_SIGNAL_FUNC(key_press_event), filer_window); gtk_window_set_default_size(GTK_WINDOW(filer_window->window), - 400, 200); + 400, + o_toolbar ? 220 : 200); - hbox = gtk_hbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(filer_window->window), hbox); - - gtk_box_pack_start(GTK_BOX(hbox), collection, TRUE, TRUE, 0); + gtk_container_add(GTK_CONTAINER(filer_window->window), + hbox); + if (o_toolbar) + { + GtkWidget *vbox, *toolbar; + + + vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), vbox, + TRUE, TRUE, 0); + toolbar = create_toolbar(filer_window); + gtk_box_pack_start(GTK_BOX(vbox), toolbar, + FALSE, TRUE, 0); + + gtk_box_pack_start(GTK_BOX(vbox), collection, + TRUE, TRUE, 0); + } + else + gtk_box_pack_start(GTK_BOX(hbox), collection, + TRUE, TRUE, 0); scrollbar = gtk_vscrollbar_new(COLLECTION(collection)->vadj); gtk_box_pack_start(GTK_BOX(hbox), scrollbar, FALSE, TRUE, 0); @@ -1088,12 +1129,47 @@ void filer_opendir(char *path, gboolean panel, Side panel_side) gtk_widget_show_all(filer_window->window); number_of_windows++; - load_default_pixmaps(collection->window); - add_view(filer_window); scan_dir(filer_window); } +static GtkWidget *create_toolbar(FilerWindow *filer_window) +{ + GtkWidget *frame, *box; + + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT); + + box = gtk_hbutton_box_new(); + gtk_button_box_set_child_size_default(16, 16); + gtk_hbutton_box_set_spacing_default(2); + gtk_button_box_set_layout(GTK_BUTTON_BOX(box), GTK_BUTTONBOX_START); + gtk_container_add(GTK_CONTAINER(frame), box); + add_button(GTK_CONTAINER(box), TOOLBAR_UP_ICON, + GTK_SIGNAL_FUNC(toolbar_up_clicked), + filer_window); + add_button(GTK_CONTAINER(box), TOOLBAR_HOME_ICON, + GTK_SIGNAL_FUNC(toolbar_home_clicked), + filer_window); + + return frame; +} + +static void add_button(GtkContainer *box, int pixmap, + GtkSignalFunc cb, gpointer data) +{ + GtkWidget *button, *icon; + + button = gtk_button_new(); + GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS); + gtk_container_add(box, button); + + icon = gtk_pixmap_new(default_pixmap[pixmap].pixmap, + default_pixmap[pixmap].mask); + gtk_container_add(GTK_CONTAINER(button), icon); + gtk_signal_connect(GTK_OBJECT(button), "clicked", cb, data); +} + /* Build up some option widgets to go in the options dialog, but don't * fill them in yet. */ @@ -1108,6 +1184,10 @@ static GtkWidget *create_options() gtk_check_button_new_with_label("Use RISC OS mouse bindings"); gtk_box_pack_start(GTK_BOX(vbox), toggle_ro_bindings, FALSE, TRUE, 0); + toggle_toolbar = + gtk_check_button_new_with_label("Show toolbar on new windows"); + gtk_box_pack_start(GTK_BOX(vbox), toggle_toolbar, FALSE, TRUE, 0); + return vbox; } @@ -1116,6 +1196,8 @@ static void update_options() { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle_ro_bindings), o_ro_bindings); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle_toolbar), + o_toolbar); } /* Set current values by reading the states of the widgets in the options box */ @@ -1123,11 +1205,14 @@ static void set_options() { o_ro_bindings = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(toggle_ro_bindings)); + o_toolbar = gtk_toggle_button_get_active( + GTK_TOGGLE_BUTTON(toggle_toolbar)); } static void save_options() { option_write("filer_ro_bindings", o_ro_bindings ? "1" : "0"); + option_write("filer_toolbar", o_toolbar ? "1" : "0"); } static char *filer_ro_bindings(char *data) @@ -1136,3 +1221,9 @@ static char *filer_ro_bindings(char *data) return NULL; } + +static char *filer_toolbar(char *data) +{ + o_toolbar = atoi(data) != 0; + return NULL; +} diff --git a/ROX-Filer/src/menu.c b/ROX-Filer/src/menu.c index f775001b..21d1876c 100644 --- a/ROX-Filer/src/menu.c +++ b/ROX-Filer/src/menu.c @@ -110,9 +110,11 @@ static OptionsSection options = static GtkWidget *filer_menu; /* The popup filer menu */ static GtkWidget *filer_file_item; /* The File '' label */ static GtkWidget *filer_file_menu; /* The File '' menu */ +static GtkWidget *filer_hidden_menu; /* The Show Hidden item */ static GtkWidget *panel_menu; /* The popup panel menu */ static GtkWidget *panel_file_item; /* The File '' label */ static GtkWidget *panel_file_menu; /* The File '' menu */ +static GtkWidget *panel_hidden_menu; /* The Show Hidden item */ static gint screen_width, screen_height; @@ -199,6 +201,8 @@ void menu_init() filer_menu = gtk_item_factory_get_widget(item_factory, ""); filer_file_menu = gtk_item_factory_get_widget(item_factory, "/File"); + filer_hidden_menu = gtk_item_factory_get_widget(item_factory, + "/Display/Show Hidden"); items = gtk_container_children(GTK_CONTAINER(filer_menu)); filer_file_item = GTK_BIN(g_list_nth(items, 1)->data)->child; g_list_free(items); @@ -214,6 +218,8 @@ void menu_init() panel_menu = gtk_item_factory_get_widget(item_factory, ""); panel_file_menu = gtk_item_factory_get_widget(item_factory, "/File"); + panel_hidden_menu = gtk_item_factory_get_widget(item_factory, + "/Display/Show Hidden"); items = gtk_container_children(GTK_CONTAINER(panel_menu)); panel_file_item = GTK_BIN(g_list_nth(items, 1)->data)->child; g_list_free(items); @@ -374,11 +380,19 @@ void show_filer_menu(FilerWindow *filer_window, GdkEventButton *event, { file_label = panel_file_item; file_menu = panel_file_menu; + + gtk_check_menu_item_set_active( + GTK_CHECK_MENU_ITEM(panel_hidden_menu), + filer_window->show_hidden); } else { file_label = filer_file_item; file_menu = filer_file_menu; + + gtk_check_menu_item_set_active( + GTK_CHECK_MENU_ITEM(filer_hidden_menu), + filer_window->show_hidden); } buffer = g_string_new(NULL); @@ -440,9 +454,18 @@ static void not_yet(gpointer data, guint action, GtkWidget *widget) static void hidden(gpointer data, guint action, GtkWidget *widget) { + gboolean new; + GtkWidget *item; + g_return_if_fail(window_with_focus != NULL); - window_with_focus->show_hidden = !window_with_focus->show_hidden; + item = window_with_focus->panel ? panel_hidden_menu : filer_hidden_menu; + new = GTK_CHECK_MENU_ITEM(item)->active; + + if (window_with_focus->show_hidden == new) + return; + + window_with_focus->show_hidden = new; update_dir(window_with_focus); } diff --git a/ROX-Filer/src/pixmaps.c b/ROX-Filer/src/pixmaps.c index ccf8e27c..03c83bbb 100644 --- a/ROX-Filer/src/pixmaps.c +++ b/ROX-Filer/src/pixmaps.c @@ -62,6 +62,7 @@ MaskedPixmap default_pixmap[LAST_DEFAULT_PIXMAP]; /* Static prototypes */ +static void load_default_pixmaps(void); static MaskedPixmap *load(char *pathname, gpointer data); static void ref(MaskedPixmap *mp, gpointer data); static void unref(MaskedPixmap *mp, gpointer data); @@ -80,6 +81,8 @@ void pixmaps_init(void) NULL); gtk_timeout_add(10000, purge, NULL); + + load_default_pixmaps(); } /* Try to load the pixmap from the given path, allocate a MaskedPixmap @@ -97,16 +100,18 @@ MaskedPixmap *load_pixmap_from(GtkWidget *window, char *path) return masked_pixmap; } -void load_pixmap(GdkWindow *window, char *name, MaskedPixmap *image) +void load_pixmap(char *name, MaskedPixmap *image) { - image->pixmap = gdk_pixmap_create_from_xpm(window, - &image->mask, - 0, - make_path(getenv("APP_DIR"), name)->str); + image->pixmap = gdk_pixmap_colormap_create_from_xpm(NULL, + gtk_widget_get_default_colormap(), + &image->mask, + 0, + make_path(getenv("APP_DIR"), name)->str); if (!image->pixmap) { - image->pixmap= gdk_pixmap_create_from_xpm_d(window, + image->pixmap= gdk_pixmap_colormap_create_from_xpm_d(NULL, + gtk_widget_get_default_colormap(), &image->mask, NULL, bad_xpm); } @@ -114,44 +119,26 @@ void load_pixmap(GdkWindow *window, char *name, MaskedPixmap *image) } /* Load all the standard pixmaps */ -void load_default_pixmaps(GdkWindow *window) +static void load_default_pixmaps(void) { - static gboolean loaded = FALSE; - - if (loaded) - return; - - load_pixmap(window, "pixmaps/error.xpm", - default_pixmap + TYPE_ERROR); - load_pixmap(window, "pixmaps/unknown.xpm", - default_pixmap + TYPE_UNKNOWN); - load_pixmap(window, "pixmaps/symlink.xpm", - default_pixmap + TYPE_SYMLINK); - load_pixmap(window, "pixmaps/file.xpm", - default_pixmap + TYPE_FILE); - load_pixmap(window, "pixmaps/directory.xpm", - default_pixmap + TYPE_DIRECTORY); - load_pixmap(window, "pixmaps/char.xpm", - default_pixmap + TYPE_CHAR_DEVICE); - load_pixmap(window, "pixmaps/block.xpm", - default_pixmap + TYPE_BLOCK_DEVICE); - load_pixmap(window, "pixmaps/pipe.xpm", - default_pixmap + TYPE_PIPE); - load_pixmap(window, "pixmaps/socket.xpm", - default_pixmap + TYPE_SOCKET); - - load_pixmap(window, "pixmaps/mount.xpm", - default_pixmap + TYPE_UNMOUNTED); - load_pixmap(window, "pixmaps/mounted.xpm", - default_pixmap + TYPE_MOUNTED); - load_pixmap(window, "pixmaps/multiple.xpm", - default_pixmap + TYPE_MULTIPLE); - load_pixmap(window, "pixmaps/exec.xpm", - default_pixmap + TYPE_EXEC_FILE); - load_pixmap(window, "pixmaps/application.xpm", - default_pixmap + TYPE_APPDIR); - - loaded = TRUE; + load_pixmap("pixmaps/error.xpm", default_pixmap + TYPE_ERROR); + load_pixmap("pixmaps/unknown.xpm", default_pixmap + TYPE_UNKNOWN); + load_pixmap("pixmaps/symlink.xpm", default_pixmap + TYPE_SYMLINK); + load_pixmap("pixmaps/file.xpm", default_pixmap + TYPE_FILE); + load_pixmap("pixmaps/directory.xpm", default_pixmap + TYPE_DIRECTORY); + load_pixmap("pixmaps/char.xpm", default_pixmap + TYPE_CHAR_DEVICE); + load_pixmap("pixmaps/block.xpm", default_pixmap + TYPE_BLOCK_DEVICE); + load_pixmap("pixmaps/pipe.xpm", default_pixmap + TYPE_PIPE); + load_pixmap("pixmaps/socket.xpm", default_pixmap + TYPE_SOCKET); + + load_pixmap("pixmaps/mount.xpm", default_pixmap + TYPE_UNMOUNTED); + load_pixmap("pixmaps/mounted.xpm", default_pixmap + TYPE_MOUNTED); + load_pixmap("pixmaps/multiple.xpm", default_pixmap + TYPE_MULTIPLE); + load_pixmap("pixmaps/exec.xpm", default_pixmap + TYPE_EXEC_FILE); + load_pixmap("pixmaps/application.xpm", default_pixmap + TYPE_APPDIR); + + load_pixmap("pixmaps/up.xpm", default_pixmap + TOOLBAR_UP_ICON); + load_pixmap("pixmaps/home.xpm", default_pixmap + TOOLBAR_HOME_ICON); } void pixmap_ref(MaskedPixmap *mp) diff --git a/ROX-Filer/src/pixmaps.h b/ROX-Filer/src/pixmaps.h index 765f8e27..ecb8fb07 100644 --- a/ROX-Filer/src/pixmaps.h +++ b/ROX-Filer/src/pixmaps.h @@ -29,7 +29,13 @@ enum TYPE_EXEC_FILE, TYPE_MULTIPLE, TYPE_APPDIR, - LAST_DEFAULT_PIXMAP, + + /* Toolbar */ + TOOLBAR_UP_ICON, + TOOLBAR_HOME_ICON, + + /* End of list */ + LAST_DEFAULT_PIXMAP }; @@ -47,8 +53,7 @@ extern MaskedPixmap default_pixmap[LAST_DEFAULT_PIXMAP]; void pixmaps_init(void); -void load_default_pixmaps(GdkWindow *window); -void load_pixmap(GdkWindow *window, char *name, MaskedPixmap *image); +void load_pixmap(char *name, MaskedPixmap *image); MaskedPixmap *load_pixmap_from(GtkWidget *window, char *path); void pixmap_ref(MaskedPixmap *mp); void pixmap_unref(MaskedPixmap *mp); -- 2.11.4.GIT