Use the correct completion model and no static

Since the model was a static variable and only set when the
popup was created, we ended up using an obsolete model in
case multiple windows were opened and closed.

As a small optimization we don't need to retrieve the database
pointer except when compiling the statement initially.
This commit is contained in:
Alexander Butenko 2010-02-19 18:55:16 +01:00 committed by Christian Dywan
parent 20602673fe
commit e94edca766

View file

@ -335,10 +335,8 @@ static gboolean
midori_location_action_popup_timeout_cb (gpointer data) midori_location_action_popup_timeout_cb (gpointer data)
{ {
MidoriLocationAction* action = data; MidoriLocationAction* action = data;
static GtkTreeModel* model = NULL;
GtkTreeViewColumn* column; GtkTreeViewColumn* column;
GtkListStore* store; GtkListStore* store;
sqlite3* db;
gint result; gint result;
static sqlite3_stmt* stmt; static sqlite3_stmt* stmt;
const gchar* sqlcmd; const gchar* sqlcmd;
@ -353,9 +351,10 @@ midori_location_action_popup_timeout_cb (gpointer data)
return FALSE; return FALSE;
} }
db = g_object_get_data (G_OBJECT (action->history), "db");
if (!stmt) if (!stmt)
{ {
sqlite3* db;
db = g_object_get_data (G_OBJECT (action->history), "db");
sqlcmd = "SELECT uri, title FROM history WHERE uri LIKE ? OR title LIKE ?" sqlcmd = "SELECT uri, title FROM history WHERE uri LIKE ? OR title LIKE ?"
" GROUP BY uri ORDER BY count() DESC LIMIT ?"; " GROUP BY uri ORDER BY count() DESC LIMIT ?";
sqlite3_prepare_v2 (db, sqlcmd, -1, &stmt, NULL); sqlite3_prepare_v2 (db, sqlcmd, -1, &stmt, NULL);
@ -367,7 +366,7 @@ midori_location_action_popup_timeout_cb (gpointer data)
result = sqlite3_step (stmt); result = sqlite3_step (stmt);
if (result != SQLITE_ROW && !action->search_engines) if (result != SQLITE_ROW && !action->search_engines)
{ {
g_print (_("Failed to select from history: %s\n"), sqlite3_errmsg (db)); g_print (_("Failed to select from history\n"));
sqlite3_reset (stmt); sqlite3_reset (stmt);
sqlite3_clear_bindings (stmt); sqlite3_clear_bindings (stmt);
midori_location_action_popdown_completion (action); midori_location_action_popdown_completion (action);
@ -376,6 +375,7 @@ midori_location_action_popup_timeout_cb (gpointer data)
if (G_UNLIKELY (!action->popup)) if (G_UNLIKELY (!action->popup))
{ {
GtkTreeModel* model = NULL;
GtkWidget* popup; GtkWidget* popup;
GtkWidget* scrolled; GtkWidget* scrolled;
GtkWidget* treeview; GtkWidget* treeview;
@ -425,7 +425,7 @@ midori_location_action_popup_timeout_cb (gpointer data)
G_CALLBACK (gtk_widget_destroyed), &action->popup); G_CALLBACK (gtk_widget_destroyed), &action->popup);
} }
store = GTK_LIST_STORE (model); store = GTK_LIST_STORE (action->completion_model);
gtk_list_store_clear (store); gtk_list_store_clear (store);
matches = searches = 0; matches = searches = 0;
@ -1147,7 +1147,6 @@ midori_location_action_entry_popup_cb (GtkComboBox* combo_box,
{ {
#if HAVE_SQLITE #if HAVE_SQLITE
GtkListStore* store; GtkListStore* store;
sqlite3* db;
gint result; gint result;
const gchar* sqlcmd; const gchar* sqlcmd;
static sqlite3_stmt* stmt; static sqlite3_stmt* stmt;
@ -1156,9 +1155,10 @@ midori_location_action_entry_popup_cb (GtkComboBox* combo_box,
store = GTK_LIST_STORE (gtk_combo_box_get_model (combo_box)); store = GTK_LIST_STORE (gtk_combo_box_get_model (combo_box));
gtk_list_store_clear (store); gtk_list_store_clear (store);
db = g_object_get_data (G_OBJECT (location_action->history), "db");
if (!stmt) if (!stmt)
{ {
sqlite3* db;
db = g_object_get_data (G_OBJECT (location_action->history), "db");
sqlcmd = "SELECT uri, title FROM history" sqlcmd = "SELECT uri, title FROM history"
" GROUP BY uri ORDER BY count() DESC LIMIT ?"; " GROUP BY uri ORDER BY count() DESC LIMIT ?";
sqlite3_prepare_v2 (db, sqlcmd, -1, &stmt, NULL); sqlite3_prepare_v2 (db, sqlcmd, -1, &stmt, NULL);
@ -1168,8 +1168,7 @@ midori_location_action_entry_popup_cb (GtkComboBox* combo_box,
result = sqlite3_step (stmt); result = sqlite3_step (stmt);
if (result != SQLITE_ROW) if (result != SQLITE_ROW)
{ {
g_print (_("Failed to execute database statement: %s\n"), g_print (_("Failed to execute database statement\n"));
sqlite3_errmsg (db));
sqlite3_reset (stmt); sqlite3_reset (stmt);
sqlite3_clear_bindings (stmt); sqlite3_clear_bindings (stmt);
return; return;