File pane filter - checkbox for case sensitivity
authorColin Clark <colin.clark@cclark.uk>
Thu, 19 Sep 2019 11:16:09 +0000 (12:16 +0100)
committerColin Clark <colin.clark@cclark.uk>
Thu, 19 Sep 2019 11:16:09 +0000 (12:16 +0100)
The default for the filter is for case-insensitive.
The checkbox permits a case-sensitive filter.

doc/docbook/GuideMainWindowFilePane.xml
src/typedefs.h
src/view_file/view_file.c

index 2cb4794..0c10863 100644 (file)
@@ -71,8 +71,6 @@
       <para />\r
       For basic pattern matching "JPG" will match any filename containing those characters.\r
       <para />\r
-      To make a case-insensitive search, use "(?i)JPG"\r
-      <para />\r
       If you type a newline, the text will be saved in the dropdown box list. The last 10 items are saved.\r
       <para />\r
       To delete an item, select it from the drop-down list, click on the text box to select the text, and then press\r
@@ -81,6 +79,8 @@
       <keycap>Enter</keycap>\r
       .\r
     </para>\r
+    <para>By default filtering is case-insensitive. A checkbox labelled "Case" permits the filter to be made case-sensitive.\r
+    </para>\r
     <para>Additionally a drop-down box permits any of the file <link linkend="Filetypes">Classes</link> to be selected or deselected from the viewed list.</para>\r
     <para />\r
   </section>\r
index 77bde72..09f04c1 100644 (file)
@@ -877,6 +877,7 @@ struct _ViewFile
                GtkWidget *frame;
                gint count;
                gint last_selected;
+               gboolean case_sensitive;
        } file_filter;
 
        FileData *dir_fd;
index bb5eda2..ed5c5f0 100644 (file)
@@ -1060,6 +1060,14 @@ static GtkWidget *class_filter_menu (ViewFile *vf)
        return menu;
 }
 
+static void case_sensitive_cb(GtkWidget *widget, gpointer data)
+{
+       ViewFile *vf = data;
+
+       vf->file_filter.case_sensitive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+       vf_refresh(vf);
+}
+
 static GtkWidget *vf_file_filter_init(ViewFile *vf)
 {
        GtkWidget *frame = gtk_frame_new(NULL);
@@ -1069,6 +1077,7 @@ static GtkWidget *vf_file_filter_init(ViewFile *vf)
        GtkWidget *combo_entry;
        GtkWidget *menubar;
        GtkWidget *menuitem;
+       GtkWidget *case_sensitive;
 
        vf->file_filter.combo = gtk_combo_box_text_new_with_entry();
        combo_entry = gtk_bin_get_child(GTK_BIN(vf->file_filter.combo));
@@ -1100,6 +1109,12 @@ static GtkWidget *vf_file_filter_init(ViewFile *vf)
        gtk_container_add(GTK_CONTAINER(frame), hbox);
        gtk_widget_show(hbox);
 
+       case_sensitive = gtk_check_button_new_with_label("Case");
+       gtk_box_pack_start(GTK_BOX(hbox), case_sensitive, FALSE, FALSE, 0);
+       gtk_widget_set_tooltip_text(GTK_WIDGET(case_sensitive), _("Case sensitive"));
+       g_signal_connect(G_OBJECT(case_sensitive), "clicked", G_CALLBACK(case_sensitive_cb), vf);
+       gtk_widget_show(case_sensitive);
+
        menubar = gtk_menu_bar_new();
        gtk_box_pack_start(GTK_BOX(hbox), menubar, FALSE, TRUE, 0);
        gtk_widget_show(menubar);
@@ -1433,7 +1448,7 @@ GRegex *vf_file_filter_get_filter(ViewFile *vf)
 
        if (file_filter_text[0] != '\0')
                {
-               ret = g_regex_new(file_filter_text, 0, 0, &error);
+               ret = g_regex_new(file_filter_text, vf->file_filter.case_sensitive ? 0 : G_REGEX_CASELESS, 0, &error);
                if (error)
                        {
                        log_printf("Error: could not compile regular expression %s\n%s\n", file_filter_text, error->message);