From a799932f9c97b6f9b56452d52aa5468387e94f8e Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Sun, 13 Feb 2000 12:51:57 +0000 Subject: [PATCH] r190: Items are unselected after being dragged somewhere. Removed support for left and right panels and made filer_opendir a bit neater. Show Hidden now has an indicator again; this one should work! --- ROX-Filer/Help/TODO | 7 ------- ROX-Filer/src/dnd.c | 6 ++++-- ROX-Filer/src/filer.c | 30 +++++++++-------------------- ROX-Filer/src/filer.h | 7 +++---- ROX-Filer/src/main.c | 23 ++++++++--------------- ROX-Filer/src/menu.c | 52 +++++++++++++++++++++++++++++++++------------------ 6 files changed, 58 insertions(+), 67 deletions(-) diff --git a/ROX-Filer/Help/TODO b/ROX-Filer/Help/TODO index ed1d51f9..7383cfd8 100644 --- a/ROX-Filer/Help/TODO +++ b/ROX-Filer/Help/TODO @@ -8,13 +8,9 @@ someone sends patches!). BUGS -Fix the Display menu so the indicators always show the current options. - Copy/Rename/Link - use exec() instead of system() like the action windows do. (prevents problems with shell special characters). -Left/Right panels don't size correctly. Remove them altogether? - GNOME toolbar doesn't work properly when detached. Is this a GTK+ problem? Cursor should be displayed shaded when the collection widget doesn't have @@ -25,9 +21,6 @@ MISSING FEATURES Permissions/Touch/Find -Options for controlling the behaviour of filer action windows (eg force -deletion of write-protected files). - Open new windows with the same options as their parent and/or default values in the Options dialog. diff --git a/ROX-Filer/src/dnd.c b/ROX-Filer/src/dnd.c index 505c5f4e..fd79caa7 100644 --- a/ROX-Filer/src/dnd.c +++ b/ROX-Filer/src/dnd.c @@ -476,6 +476,8 @@ void drag_data_get(GtkWidget *widget, if (delete_once_sent) g_free(to_send); + + collection_clear_selection(filer_window->collection); } /* DRAGGING TO US */ @@ -593,7 +595,7 @@ static gboolean drag_motion(GtkWidget *widget, if (gtk_drag_get_source_widget(context) == widget) return FALSE; /* Not within a single widget! */ - if (filer_window->panel == FALSE) + if (filer_window->panel_type == PANEL_NO) { if (access(filer_window->path, W_OK)) return FALSE; /* We can't write here */ @@ -649,7 +651,7 @@ static gboolean drag_drop(GtkWidget *widget, dest_path = g_dataset_get_data(context, "drop_dest_path"); if (dest_path == NULL) { - if (filer_window->panel) + if (filer_window->panel_type) error = "Bad drop on panel"; else { diff --git a/ROX-Filer/src/filer.c b/ROX-Filer/src/filer.c index c57c20dc..e73554c3 100644 --- a/ROX-Filer/src/filer.c +++ b/ROX-Filer/src/filer.c @@ -980,11 +980,11 @@ static void follow_symlink(FilerWindow *filer_window, char *path, else new_dir = "/"; - if (filer_window->panel || !same_window) + if (filer_window->panel_type || !same_window) { FilerWindow *new; - new = filer_opendir(new_dir, FALSE, BOTTOM); + new = filer_opendir(new_dir, PANEL_NO); set_autoselect(new, slash + 1); } else @@ -998,9 +998,9 @@ void filer_openitem(FilerWindow *filer_window, int item_number, OpenFlags flags) gboolean shift = (flags & OPEN_SHIFT) != 0; gboolean close_mini = flags & OPEN_FROM_MINI; gboolean same_window = (flags & OPEN_SAME_WINDOW) != 0 - && !filer_window->panel; + && !filer_window->panel_type; gboolean close_window = (flags & OPEN_CLOSE_WINDOW) != 0 - && !filer_window->panel; + && !filer_window->panel_type; GtkWidget *widget; char *full_path; DirItem *item = (DirItem *) @@ -1058,7 +1058,7 @@ void filer_openitem(FilerWindow *filer_window, int item_number, OpenFlags flags) close_mini = FALSE; } else - filer_opendir(full_path, FALSE, BOTTOM); + filer_opendir(full_path, PANEL_NO); break; case TYPE_FILE: if ((item->flags & ITEM_FLAG_EXEC_FILE) && !shift) @@ -1355,7 +1355,7 @@ void filer_style_set(FilerWindow *filer_window, DisplayStyle style) shrink_width(filer_window); } -FilerWindow *filer_opendir(char *path, gboolean panel, Side panel_side) +FilerWindow *filer_opendir(char *path, PanelType panel_type) { GtkWidget *hbox, *scrollbar, *collection; FilerWindow *filer_window; @@ -1386,8 +1386,7 @@ FilerWindow *filer_opendir(char *path, gboolean panel, Side panel_side) } filer_window->show_hidden = FALSE; - filer_window->panel = panel; - filer_window->panel_side = panel_side; + filer_window->panel_type = panel_type; filer_window->temp_item_selected = FALSE; filer_window->sort_fn = sort_by_type; filer_window->flags = (FilerFlags) 0; @@ -1436,7 +1435,7 @@ FilerWindow *filer_opendir(char *path, gboolean panel, Side panel_side) filer_style_set(filer_window, LARGE_ICONS); drag_set_dest(collection); - if (panel) + if (panel_type) { int swidth, sheight, iwidth, iheight; GtkWidget *frame, *win = filer_window->window; @@ -1453,26 +1452,15 @@ FilerWindow *filer_opendir(char *path, gboolean panel, Side panel_side) iwidth = filer_window->collection->item_width; iheight = filer_window->collection->item_height; - if (panel_side == TOP || panel_side == BOTTOM) { int height = iheight + PANEL_BORDER; - int y = panel_side == TOP + int y = panel_type == PANEL_TOP ? -PANEL_BORDER : sheight - height - PANEL_BORDER; gtk_widget_set_usize(collection, swidth, height); gtk_widget_set_uposition(win, 0, y); } - else - { - int width = iwidth + PANEL_BORDER; - int x = panel_side == LEFT - ? -PANEL_BORDER - : swidth - width - PANEL_BORDER; - - gtk_widget_set_usize(collection, width, sheight); - gtk_widget_set_uposition(win, x, 0); - } frame = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT); diff --git a/ROX-Filer/src/filer.h b/ROX-Filer/src/filer.h index f4546c1f..1d7ba835 100644 --- a/ROX-Filer/src/filer.h +++ b/ROX-Filer/src/filer.h @@ -17,7 +17,7 @@ #include "dir.h" typedef struct _FilerWindow FilerWindow; -typedef enum {LEFT, RIGHT, TOP, BOTTOM} Side; +typedef enum {PANEL_NO, PANEL_TOP, PANEL_BOTTOM} PanelType; typedef enum {UNKNOWN_STYLE, LARGE_ICONS, SMALL_ICONS, FULL_INFO} DisplayStyle; typedef enum @@ -41,11 +41,10 @@ struct _FilerWindow GtkWidget *window; char *path; /* pathname */ Collection *collection; - gboolean panel; gboolean temp_item_selected; gboolean show_hidden; FilerFlags flags; - Side panel_side; + PanelType panel_type; time_t m_time; /* m-time at last scan */ int (*sort_fn)(const void *a, const void *b); DisplayStyle display_style; @@ -64,7 +63,7 @@ extern GHashTable *child_to_filer; /* Prototypes */ void filer_init(); -FilerWindow *filer_opendir(char *path, gboolean panel, Side panel_side); +FilerWindow *filer_opendir(char *path, PanelType panel_type); void update_dir(FilerWindow *filer_window, gboolean warning); void scan_dir(FilerWindow *filer_window); int selected_item_number(Collection *collection); diff --git a/ROX-Filer/src/main.c b/ROX-Filer/src/main.c index ab6caba7..c466f231 100644 --- a/ROX-Filer/src/main.c +++ b/ROX-Filer/src/main.c @@ -77,6 +77,8 @@ gid_t *supplemental_groups = NULL; "you must use the short versions instead.\n\n" #endif +#define SHORT_OPS "t:b:ohv" + #define HELP "Usage: ROX-Filer/AppRun [OPTION]... [DIR]...\n" \ "Open filer windows showing each directory listed, or $HOME \n" \ "if no directories are given.\n\n" \ @@ -84,8 +86,6 @@ gid_t *supplemental_groups = NULL; " -v, --version display the version information and exit\n" \ " -t, --top [DIR] open DIR as a top-edge panel\n" \ " -b, --bottom [DIR] open DIR as a bottom-edge panel\n" \ - " -l, --left [DIR] open DIR as a left-edge panel\n" \ - " -r, --right [DIR] open DIR as a right-edge panel\n" \ " -o, --override override window manager control of panels\n" \ "\n" SHORT_ONLY_WARNING \ "Report bugs to .\n" @@ -95,8 +95,6 @@ static struct option long_opts[] = { {"top", 1, NULL, 't'}, {"bottom", 1, NULL, 'b'}, - {"left", 1, NULL, 'l'}, - {"right", 1, NULL, 'r'}, {"override", 0, NULL, 'o'}, {"help", 0, NULL, 'h'}, {"version", 0, NULL, 'v'}, @@ -167,10 +165,10 @@ int main(int argc, char **argv) int c; #ifdef HAVE_GETOPT_LONG int long_index; - c = getopt_long(argc, argv, "t:b:l:r:ohv", + c = getopt_long(argc, argv, SHORT_OPS, long_opts, &long_index); #else - c = getopt(argc, argv, "t:b:l:r:ohv"); + c = getopt(argc, argv, SHORT_OPS); #endif if (c == EOF) @@ -189,8 +187,6 @@ int main(int argc, char **argv) return EXIT_SUCCESS; case 't': case 'b': - case 'l': - case 'r': panel_sides = g_list_prepend(panel_sides, (gpointer) c); panel_dirs = g_list_prepend(panel_dirs, @@ -247,7 +243,7 @@ int main(int argc, char **argv) } if (optind == argc && !panel_dirs) - filer_opendir(getenv("HOME"), FALSE, BOTTOM); + filer_opendir(getenv("HOME"), PANEL_NO); else { int i = optind; @@ -258,11 +254,8 @@ int main(int argc, char **argv) { int c = (int) side->data; - filer_opendir((char *) dir->data, TRUE, - c == 't' ? TOP : - c == 'b' ? BOTTOM : - c == 'l' ? LEFT : - RIGHT); + filer_opendir((char *) dir->data, + c == 't' ? PANEL_TOP : PANEL_BOTTOM); dir = dir->next; side = side->next; } @@ -271,7 +264,7 @@ int main(int argc, char **argv) g_list_free(side); while (i < argc) - filer_opendir(argv[i++], FALSE, BOTTOM); + filer_opendir(argv[i++], PANEL_NO); } pipe(stderr_pipe); diff --git a/ROX-Filer/src/menu.c b/ROX-Filer/src/menu.c index 1f50c7c6..21af547d 100644 --- a/ROX-Filer/src/menu.c +++ b/ROX-Filer/src/menu.c @@ -57,6 +57,8 @@ GtkAccelGroup *panel_keys; static GtkWidget *popup_menu = NULL; /* Currently open menu */ +static gint updating_menu = 0; /* Non-zero => ignore activations */ + /* Options */ static GtkWidget *xterm_here_entry; static char *xterm_here_value; @@ -146,7 +148,7 @@ static GtkItemFactoryEntry filer_menu_def[] = { {"/Display/Sort by Date", NULL, sort_date, 0, NULL}, {"/Display/Sort by Size", NULL, sort_size, 0, NULL}, {"/Display/Separator", NULL, NULL, 0, ""}, -{"/Display/Show Hidden", C_"H", hidden, 0, NULL}, +{"/Display/Show Hidden", C_"H", hidden, 0, ""}, {"/Display/Refresh", C_"L", refresh, 0, NULL}, {"/File", NULL, NULL, 0, ""}, {"/File/Copy...", NULL, copy_item, 0, NULL}, @@ -188,7 +190,7 @@ static GtkItemFactoryEntry panel_menu_def[] = { {"/Display/Sort by Date", NULL, sort_date, 0, NULL}, {"/Display/Sort by Size", NULL, sort_size, 0, NULL}, {"/Display/Separator", NULL, NULL, 0, ""}, -{"/Display/Show Hidden", NULL, hidden, 0, NULL}, +{"/Display/Show Hidden", NULL, hidden, 0, ""}, {"/Display/Refresh", NULL, refresh, 0, NULL}, {"/File", NULL, NULL, 0, ""}, {"/File/Help", NULL, help, 0, NULL}, @@ -383,24 +385,27 @@ void show_filer_menu(FilerWindow *filer_window, GdkEventButton *event, GtkWidget *file_label, *file_menu; DirItem *file_item; int pos[2]; + + updating_menu++; pos[0] = event->x_root; pos[1] = event->y_root; window_with_focus = filer_window; - if (filer_window->panel) + switch (filer_window->panel_type) { - switch (filer_window->panel_side) - { - case TOP: pos[1] = -2; break; - case BOTTOM: pos[1] = -1; break; - case LEFT: pos[0] = -2; break; - case RIGHT: pos[0] = -1; break; - } + case PANEL_TOP: + pos[1] = -2; + break; + case PANEL_BOTTOM: + pos[1] = -1; + break; + default: + break; } - if (filer_window->panel) + if (filer_window->panel_type) collection_clear_selection(filer_window->collection); /* ??? */ if (filer_window->collection->number_selected == 0 && item >= 0) @@ -411,15 +416,21 @@ void show_filer_menu(FilerWindow *filer_window, GdkEventButton *event, else filer_window->temp_item_selected = FALSE; - if (filer_window->panel) + if (filer_window->panel_type) { 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); @@ -447,13 +458,15 @@ void show_filer_menu(FilerWindow *filer_window, GdkEventButton *event, g_string_free(buffer, TRUE); - if (filer_window->panel) + if (filer_window->panel_type) popup_menu = panel_menu; else popup_menu = (event->state & GDK_CONTROL_MASK) ? filer_file_menu : filer_menu; + updating_menu--; + gtk_menu_popup(GTK_MENU(popup_menu), NULL, NULL, position_menu, (gpointer) pos, event->button, event->time); } @@ -543,6 +556,9 @@ static void sort_size(gpointer data, guint action, GtkWidget *widget) static void hidden(gpointer data, guint action, GtkWidget *widget) { + if (updating_menu) + return; + g_return_if_fail(window_with_focus != NULL); filer_set_hidden(window_with_focus, !window_with_focus->show_hidden); @@ -1002,7 +1018,7 @@ static void app_show_help(char *path) "Shift while you open it). Most applications provide " "their own help here, but this one doesn't."); else - filer_opendir(help_dir, FALSE, BOTTOM); + filer_opendir(help_dir, PANEL_NO); } static void help(gpointer data, guint action, GtkWidget *widget) @@ -1140,7 +1156,7 @@ static void open_parent(gpointer data, guint action, GtkWidget *widget) g_return_if_fail(window_with_focus != NULL); filer_opendir(make_path(window_with_focus->path, "/..")->str, - FALSE, BOTTOM); + PANEL_NO); } static void open_parent_same(gpointer data, guint action, GtkWidget *widget) @@ -1154,7 +1170,7 @@ static void new_window(gpointer data, guint action, GtkWidget *widget) { g_return_if_fail(window_with_focus != NULL); - filer_opendir(window_with_focus->path, FALSE, BOTTOM); + filer_opendir(window_with_focus->path, PANEL_NO); } static void close_window(gpointer data, guint action, GtkWidget *widget) @@ -1175,14 +1191,14 @@ static void rox_help(gpointer data, guint action, GtkWidget *widget) { g_return_if_fail(window_with_focus != NULL); - filer_opendir(make_path(getenv("APP_DIR"), "Help")->str, FALSE, BOTTOM); + filer_opendir(make_path(getenv("APP_DIR"), "Help")->str, PANEL_NO); } static void open_as_dir(gpointer data, guint action, GtkWidget *widget) { g_return_if_fail(window_with_focus != NULL); - filer_opendir(window_with_focus->path, FALSE, BOTTOM); + filer_opendir(window_with_focus->path, PANEL_NO); } static void close_panel(gpointer data, guint action, GtkWidget *widget) -- 2.11.4.GIT