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));