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


 


_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to