Mercurial > hg > forks > geeqie
comparison src/layout_util.c @ 2817:e6f95baec8b5
Fix #624: Filter files by shell or regular expression pattern
https://github.com/BestImageViewer/geeqie/issues/624
An option on Select/Show File Filter (or the toolbar) to provide regular
expression file-filtering of the currently displayed folder.
author | Colin Clark <colin.clark@cclark.uk> |
---|---|
date | Wed, 15 Aug 2018 19:43:06 +0100 |
parents | e9e8e8b2afce |
children | f1c975235feb |
comparison
equal
deleted
inserted
replaced
2816:e993f52f08a2 | 2817:e6f95baec8b5 |
---|---|
115 if (gtk_widget_event(lw->path_entry, (GdkEvent *)event)) | 115 if (gtk_widget_event(lw->path_entry, (GdkEvent *)event)) |
116 { | 116 { |
117 return TRUE; | 117 return TRUE; |
118 } | 118 } |
119 } | 119 } |
120 | |
121 if (lw->vf->file_filter_combo && gtk_widget_has_focus(gtk_bin_get_child(GTK_BIN(lw->vf->file_filter_combo)))) | |
122 { | |
123 if (gtk_widget_event(gtk_bin_get_child(GTK_BIN(lw->vf->file_filter_combo)), (GdkEvent *)event)) | |
124 { | |
125 return TRUE; | |
126 } | |
127 } | |
128 | |
120 if (lw->vd && lw->options.dir_view_type == DIRVIEW_TREE && gtk_widget_has_focus(lw->vd->view) && | 129 if (lw->vd && lw->options.dir_view_type == DIRVIEW_TREE && gtk_widget_has_focus(lw->vd->view) && |
121 !layout_key_match(event->keyval) && | 130 !layout_key_match(event->keyval) && |
122 gtk_widget_event(lw->vd->view, (GdkEvent *)event)) | 131 gtk_widget_event(lw->vd->view, (GdkEvent *)event)) |
123 { | 132 { |
124 return TRUE; | 133 return TRUE; |
1383 static void layout_menu_invert_selection_cb(GtkAction *action, gpointer data) | 1392 static void layout_menu_invert_selection_cb(GtkAction *action, gpointer data) |
1384 { | 1393 { |
1385 LayoutWindow *lw = data; | 1394 LayoutWindow *lw = data; |
1386 | 1395 |
1387 layout_select_invert(lw); | 1396 layout_select_invert(lw); |
1397 } | |
1398 | |
1399 static void layout_menu_file_filter_cb(GtkToggleAction *action, gpointer data) | |
1400 { | |
1401 LayoutWindow *lw = data; | |
1402 | |
1403 layout_file_filter_set(lw, gtk_toggle_action_get_active(action)); | |
1388 } | 1404 } |
1389 | 1405 |
1390 static void layout_menu_marks_cb(GtkToggleAction *action, gpointer data) | 1406 static void layout_menu_marks_cb(GtkToggleAction *action, gpointer data) |
1391 { | 1407 { |
1392 LayoutWindow *lw = data; | 1408 LayoutWindow *lw = data; |
1938 }; | 1954 }; |
1939 | 1955 |
1940 static GtkToggleActionEntry menu_toggle_entries[] = { | 1956 static GtkToggleActionEntry menu_toggle_entries[] = { |
1941 { "Thumbnails", PIXBUF_INLINE_ICON_THUMB,N_("Show _Thumbnails"), "T", N_("Show Thumbnails"), CB(layout_menu_thumb_cb), FALSE }, | 1957 { "Thumbnails", PIXBUF_INLINE_ICON_THUMB,N_("Show _Thumbnails"), "T", N_("Show Thumbnails"), CB(layout_menu_thumb_cb), FALSE }, |
1942 { "ShowMarks", PIXBUF_INLINE_ICON_MARKS, N_("Show _Marks"), "M", N_("Show Marks"), CB(layout_menu_marks_cb), FALSE }, | 1958 { "ShowMarks", PIXBUF_INLINE_ICON_MARKS, N_("Show _Marks"), "M", N_("Show Marks"), CB(layout_menu_marks_cb), FALSE }, |
1959 { "ShowFileFilter", PIXBUF_INLINE_ICON_FILE_FILTER, N_("Show File Filter"), NULL, N_("Show File Filter"), CB(layout_menu_file_filter_cb), FALSE }, | |
1943 { "ShowInfoPixel", GTK_STOCK_COLOR_PICKER, N_("Pi_xel Info"), NULL, N_("Show Pixel Info"), CB(layout_menu_info_pixel_cb), FALSE }, | 1960 { "ShowInfoPixel", GTK_STOCK_COLOR_PICKER, N_("Pi_xel Info"), NULL, N_("Show Pixel Info"), CB(layout_menu_info_pixel_cb), FALSE }, |
1944 { "FloatTools", PIXBUF_INLINE_ICON_FLOAT,N_("_Float file list"), "L", N_("Float file list"), CB(layout_menu_float_cb), FALSE }, | 1961 { "FloatTools", PIXBUF_INLINE_ICON_FLOAT,N_("_Float file list"), "L", N_("Float file list"), CB(layout_menu_float_cb), FALSE }, |
1945 { "HideToolbar", NULL, N_("Hide tool_bar"), NULL, N_("Hide toolbar"), CB(layout_menu_toolbar_cb), FALSE }, | 1962 { "HideToolbar", NULL, N_("Hide tool_bar"), NULL, N_("Hide toolbar"), CB(layout_menu_toolbar_cb), FALSE }, |
1946 { "SBar", PIXBUF_INLINE_ICON_INFO, N_("_Info sidebar"), "<control>K", N_("Info sidebar"), CB(layout_menu_bar_cb), FALSE }, | 1963 { "SBar", PIXBUF_INLINE_ICON_INFO, N_("_Info sidebar"), "<control>K", N_("Info sidebar"), CB(layout_menu_bar_cb), FALSE }, |
1947 { "SBarSort", PIXBUF_INLINE_ICON_SORT, N_("Sort _manager"), "<shift>S", N_("Sort manager"), CB(layout_menu_bar_sort_cb), FALSE }, | 1964 { "SBarSort", PIXBUF_INLINE_ICON_SORT, N_("Sort _manager"), "<shift>S", N_("Sort manager"), CB(layout_menu_bar_sort_cb), FALSE }, |
2051 " <menu action='SelectMenu'>" | 2068 " <menu action='SelectMenu'>" |
2052 " <menuitem action='SelectAll'/>" | 2069 " <menuitem action='SelectAll'/>" |
2053 " <menuitem action='SelectNone'/>" | 2070 " <menuitem action='SelectNone'/>" |
2054 " <menuitem action='SelectInvert'/>" | 2071 " <menuitem action='SelectInvert'/>" |
2055 " <menuitem action='RectangularSelection'/>" | 2072 " <menuitem action='RectangularSelection'/>" |
2073 " <menuitem action='ShowFileFilter'/>" | |
2056 " <placeholder name='SelectSection'/>" | 2074 " <placeholder name='SelectSection'/>" |
2057 " <separator/>" | 2075 " <separator/>" |
2058 " <menuitem action='CopyPath'/>" | 2076 " <menuitem action='CopyPath'/>" |
2059 " <menuitem action='CopyPathUnquoted'/>" | 2077 " <menuitem action='CopyPathUnquoted'/>" |
2060 " <placeholder name='ClipboardSection'/>" | 2078 " <placeholder name='ClipboardSection'/>" |
3002 | 3020 |
3003 action = gtk_action_group_get_action(lw->action_group, "Grayscale"); | 3021 action = gtk_action_group_get_action(lw->action_group, "Grayscale"); |
3004 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), layout_image_get_desaturate(lw)); | 3022 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), layout_image_get_desaturate(lw)); |
3005 } | 3023 } |
3006 | 3024 |
3025 void layout_util_sync_file_filter(LayoutWindow *lw) | |
3026 { | |
3027 GtkAction *action; | |
3028 | |
3029 if (!lw->action_group) return; | |
3030 | |
3031 action = gtk_action_group_get_action(lw->action_group, "ShowFileFilter"); | |
3032 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.show_file_filter); | |
3033 } | |
3034 | |
3007 void layout_util_sync_marks(LayoutWindow *lw) | 3035 void layout_util_sync_marks(LayoutWindow *lw) |
3008 { | 3036 { |
3009 GtkAction *action; | 3037 GtkAction *action; |
3010 | 3038 |
3011 if (!lw->action_group) return; | 3039 if (!lw->action_group) return; |
3075 action = gtk_action_group_get_action(lw->action_group, "DrawRectangle"); | 3103 action = gtk_action_group_get_action(lw->action_group, "DrawRectangle"); |
3076 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), options->draw_rectangle); | 3104 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), options->draw_rectangle); |
3077 | 3105 |
3078 action = gtk_action_group_get_action(lw->action_group, "RectangularSelection"); | 3106 action = gtk_action_group_get_action(lw->action_group, "RectangularSelection"); |
3079 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), options->collections.rectangular_selection); | 3107 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), options->collections.rectangular_selection); |
3108 | |
3109 action = gtk_action_group_get_action(lw->action_group, "ShowFileFilter"); | |
3110 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.show_file_filter); | |
3080 | 3111 |
3081 if (osd_flags & OSD_SHOW_HISTOGRAM) | 3112 if (osd_flags & OSD_SHOW_HISTOGRAM) |
3082 { | 3113 { |
3083 action = gtk_action_group_get_action(lw->action_group, "HistogramChanR"); | 3114 action = gtk_action_group_get_action(lw->action_group, "HistogramChanR"); |
3084 gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), image_osd_histogram_get_channel(lw->image)); | 3115 gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), image_osd_histogram_get_channel(lw->image)); |