static gint search_window_key_pressed(GtkWidget * widget, GdkEventKey * kevent) { switch (kevent->keyval) { case GDK_Escape: close_button_clicked(NULL, NULL); return TRUE; break; case GDK_Return: case GDK_KP_Enter: search_button_clicked(NULL, NULL); return TRUE; break; } return FALSE; }
static gint search_button_clicked(GtkWidget * widget, gpointer data) { int valid; const char * key_string = gtk_entry_get_text(GTK_ENTRY(searchkey_entry)); char key[MAXLEN]; GPatternSpec * pattern; int i; GtkTreeIter list_iter; GtkTreeIter sfac_iter; GList * node = NULL; get_toggle_buttons_state(); clear_search_store(); valid = 0; for (i = 0; key_string[i] != '\0'; i++) { if ((key_string[i] != '?') && (key_string[i] != '*')) { valid = 1; break; } } if (!valid) { return TRUE; } if (!casesens) { key_string = g_utf8_strup(key_string, -1); } if (exactonly) { strcpy(key, key_string); } else { snprintf(key, MAXLEN-1, "*%s*", key_string); } pattern = g_pattern_spec_new(key); for (node = playlists; node; node = node->next) { playlist_t * pl = (playlist_t *)node->data; i = 0; while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(pl->store), &list_iter, NULL, i++)) { if (gtk_tree_model_iter_has_child(GTK_TREE_MODEL(pl->store), &list_iter)) { int j = 0; GtkTreeIter iter; search_foreach(pl, pattern, &list_iter, 1/*album node*/); while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(pl->store), &iter, &list_iter, j++)) { search_foreach(pl, pattern, &iter, 0/*track node*/); } } else { search_foreach(pl, pattern, &list_iter, 0/*track node*/); } } } g_pattern_spec_free(pattern); if (selectfc) { if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(search_store), &sfac_iter) == TRUE) gtk_tree_selection_select_iter(search_select, &sfac_iter); close_button_clicked(NULL, NULL); } return TRUE; }
static void minimize_button_clicked(Button* b) { close_button_clicked(b); }