static void search_cb(GtkWidget *button, PidginLogViewer *lv) { const char *search_term = gtk_entry_get_text(GTK_ENTRY(lv->entry)); GList *logs; if (!(*search_term)) { /* reset the tree */ gtk_tree_store_clear(lv->treestore); populate_log_tree(lv); g_free(lv->search); lv->search = NULL; gtk_imhtml_search_clear(GTK_IMHTML(lv->imhtml)); select_first_log(lv); return; } if (lv->search != NULL && !strcmp(lv->search, search_term)) { /* Searching for the same term acts as "Find Next" */ gtk_imhtml_search_find(GTK_IMHTML(lv->imhtml), lv->search); return; } pidgin_set_cursor(lv->window, GDK_WATCH); g_free(lv->search); lv->search = g_strdup(search_term); gtk_tree_store_clear(lv->treestore); gtk_imhtml_clear(GTK_IMHTML(lv->imhtml)); for (logs = lv->logs; logs != NULL; logs = logs->next) { char *read = purple_log_read((PurpleLog*)logs->data, NULL); if (read && *read && purple_strcasestr(read, search_term)) { GtkTreeIter iter; PurpleLog *log = logs->data; gtk_tree_store_append (lv->treestore, &iter, NULL); gtk_tree_store_set(lv->treestore, &iter, 0, log_get_date(log), 1, log, -1); } g_free(read); } select_first_log(lv); pidgin_clear_cursor(lv->window); }
static void do_find_cb(GtkWidget *widget, gint response, struct _find *f) { switch (response) { case GTK_RESPONSE_OK: gtk_imhtml_search_find(GTK_IMHTML(f->window->text), gtk_entry_get_text(GTK_ENTRY(f->entry))); break; case GTK_RESPONSE_DELETE_EVENT: case GTK_RESPONSE_CLOSE: gtk_imhtml_search_clear(GTK_IMHTML(f->window->text)); gtk_widget_destroy(f->window->find); f->window->find = NULL; g_free(f); break; } }
static gboolean search_find_cb(gpointer data) { PidginLogViewer *viewer = data; gtk_imhtml_search_find(GTK_IMHTML(viewer->imhtml), viewer->search); return FALSE; }