Re: Does gtk2 provide a case 'in'-sensitive text search via 'gtk_text_iter_..._search'?




 In GTK3 you would have everything that you need. The gtk_text_iter_forward_search() function can use 
GTK_TEXT_SEARCH_CASE_INSENSITIVE. I don't see that in GTK2.

Another thought. The GTK Source View can find words and highlight them for you. You might want to check that 
out also. It has some search settings that might be what you are trying to do.

https://developer.gnome.org/gtksourceview/stable/GtkSourceSearchSettings.html

For GTK2? I think you might have to test some pointer code out to do this. Maybe something like the following 
for a rough idea. I would strongly recommend going with GTK3 though.


//gcc -Wall textview2.c -o textview2 `pkg-config --cflags --libs gtk+-2.0`

#include <gtk/gtk.h>

static void button_clicked(GtkWidget *button, gpointer *data)
  {
    GtkTextIter start;
    gchar *search_string=g_strdup(gtk_entry_get_text(GTK_ENTRY(data[1])));
    gchar *p=search_string;
    glong count=g_utf8_strlen(search_string, -1);
    glong counter=0;
    gchar temp_string[count+1];
    temp_string[count]='\0';

    gtk_text_buffer_get_start_iter(GTK_TEXT_BUFFER(data[0]), &start);
    do
      {
        
if(g_unichar_toupper(g_utf8_get_char(p))==gtk_text_iter_get_char(&start)||g_unichar_tolower(g_utf8_get_char(p))==gtk_text_iter_get_char(&start))
          {
            temp_string[counter]=gtk_text_iter_get_char(&start);
            counter++;
            p++;
            if(counter>=count)
              {
                g_print("%s\n", temp_string);
                counter=0;
                p=search_string;
              }
          }
        else
          {
            if(counter>0)
              {
                counter=0;
                p=search_string;
              }
          }
      }while(gtk_text_iter_forward_char(&start));

    g_free(search_string);
    
  }
int main(int argc, char *argv[])
  {
    gtk_init(&argc, &argv);

    GtkWidget *window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Textview");
    gtk_window_set_default_size(GTK_WINDOW(window), 400, 400);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_container_set_border_width(GTK_CONTAINER(window), 20);
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    GtkWidget *textview=gtk_text_view_new();
    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview), GTK_WRAP_WORD);
    gtk_widget_set_size_request(textview, 400, 300);
    GtkTextBuffer *buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
    gtk_text_buffer_set_text(buffer, "SEArch Add some words to Search search SearCH SEaRch search search 
Search and a few extra s ss sssr Sea Sear.", -1);

    GtkWidget *entry=gtk_entry_new();
    gtk_entry_set_text(GTK_ENTRY(entry), "search");

    GtkWidget *button=gtk_button_new_with_label("Search");
    gpointer test[]={buffer, entry};
    g_signal_connect(button, "clicked", G_CALLBACK(button_clicked), test);

    GtkWidget *table=gtk_table_new(3, 1, FALSE);
    gtk_table_attach(GTK_TABLE(table), textview, 0, 1, 0, 1, GTK_EXPAND, GTK_EXPAND, 0, 0);
    gtk_table_attach(GTK_TABLE(table), entry, 0, 1, 1, 2, GTK_EXPAND, GTK_SHRINK, 0, 0);
    gtk_table_attach(GTK_TABLE(table), button, 0, 1, 2, 3, GTK_EXPAND, GTK_SHRINK, 0, 0);

    gtk_container_add(GTK_CONTAINER(window), table);

    gtk_widget_show_all(window);
    
    gtk_main();

    return 0;
  }


 




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]