Re: Does gtk2 provide a case 'in'-sensitive text search via 'gtk_text_iter_..._search'?
- From: cecashon aol com
- To: drankinatty suddenlinkmail com, gtk-app-devel-list gnome org
- Subject: Re: Does gtk2 provide a case 'in'-sensitive text search via 'gtk_text_iter_..._search'?
- Date: Thu, 19 Jan 2017 17:15:24 -0500
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]