Re-implement 'Recently visited pages' based on sqlite
This commit is contained in:
parent
302e751f8c
commit
10591640d1
1 changed files with 76 additions and 18 deletions
|
@ -210,6 +210,12 @@ midori_search_action_get_icon (KatzeItem* item,
|
||||||
static void
|
static void
|
||||||
_midori_browser_find_done (MidoriBrowser* browser);
|
_midori_browser_find_done (MidoriBrowser* browser);
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_action_menus_activate_item_alt (GtkAction* action,
|
||||||
|
KatzeItem* item,
|
||||||
|
guint button,
|
||||||
|
MidoriBrowser* browser);
|
||||||
|
|
||||||
#define _action_by_name(brwsr, nme) \
|
#define _action_by_name(brwsr, nme) \
|
||||||
gtk_action_group_get_action (brwsr->action_group, nme)
|
gtk_action_group_get_action (brwsr->action_group, nme)
|
||||||
#define _action_set_sensitive(brwsr, nme, snstv) \
|
#define _action_set_sensitive(brwsr, nme, snstv) \
|
||||||
|
@ -2873,23 +2879,86 @@ _action_trash_activate_item_alt (GtkAction* action,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
midori_browser_menu_item_activate_cb (GtkWidget* menuitem,
|
||||||
|
MidoriBrowser* browser)
|
||||||
|
{
|
||||||
|
KatzeItem* item = g_object_get_data (G_OBJECT (menuitem), "KatzeItem");
|
||||||
|
midori_browser_set_current_uri (browser, katze_item_get_uri (item));
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
midori_browser_menu_item_button_press_cb (GtkWidget* menuitem,
|
||||||
|
GdkEventButton* event,
|
||||||
|
MidoriBrowser* browser)
|
||||||
|
{
|
||||||
|
KatzeItem* item = g_object_get_data (G_OBJECT (menuitem), "KatzeItem");
|
||||||
|
return _action_menus_activate_item_alt (NULL, item, event->button, browser);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_action_history_populate_popup (GtkAction* action,
|
_action_history_populate_popup (GtkAction* action,
|
||||||
GtkMenu* menu,
|
GtkMenu* menu,
|
||||||
MidoriBrowser* browser)
|
MidoriBrowser* browser)
|
||||||
{
|
{
|
||||||
GList* children = gtk_container_get_children (GTK_CONTAINER (menu));
|
#if HAVE_SQLITE
|
||||||
guint i = 0;
|
sqlite3* db;
|
||||||
GtkWidget* menuitem;
|
sqlite3_stmt* statement;
|
||||||
|
gint result;
|
||||||
|
const gchar* sqlcmd;
|
||||||
|
|
||||||
while ((menuitem = g_list_nth_data (children, i++)))
|
db = g_object_get_data (G_OBJECT (browser->history), "db");
|
||||||
|
sqlcmd = "SELECT uri, title, date FROM history "
|
||||||
|
"GROUP BY uri ORDER BY date ASC LIMIT 10";
|
||||||
|
result = sqlite3_prepare_v2 (db, sqlcmd, -1, &statement, NULL);
|
||||||
|
if (result != SQLITE_OK)
|
||||||
{
|
{
|
||||||
|
g_print (_("Failed to execute database statement: %s\n"),
|
||||||
|
sqlite3_errmsg (db));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((result = sqlite3_step (statement)) == SQLITE_ROW)
|
||||||
|
{
|
||||||
|
const unsigned char* uri;
|
||||||
|
const unsigned char* title;
|
||||||
|
KatzeItem* item;
|
||||||
|
GtkWidget* menuitem;
|
||||||
|
GdkPixbuf* icon;
|
||||||
|
GtkWidget* image;
|
||||||
|
|
||||||
|
uri = sqlite3_column_text (statement, 0);
|
||||||
|
title = sqlite3_column_text (statement, 1);
|
||||||
|
|
||||||
|
item = katze_item_new ();
|
||||||
|
katze_item_set_uri (item, (gchar*)uri);
|
||||||
|
katze_item_set_name (item, (gchar*)title);
|
||||||
|
|
||||||
|
menuitem = katze_image_menu_item_new_ellipsized ((gchar*)title);
|
||||||
|
icon = katze_load_cached_icon ((gchar*)uri, GTK_WIDGET (browser));
|
||||||
|
image = gtk_image_new_from_pixbuf (icon);
|
||||||
|
g_object_unref (icon);
|
||||||
|
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
|
||||||
|
#if GTK_CHECK_VERSION (2, 16, 0)
|
||||||
|
gtk_image_menu_item_set_always_show_image (
|
||||||
|
GTK_IMAGE_MENU_ITEM (menuitem), TRUE);
|
||||||
|
#endif
|
||||||
|
g_object_set_data_full (G_OBJECT (menuitem), "KatzeItem",
|
||||||
|
item, (GDestroyNotify)g_object_unref);
|
||||||
|
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
|
||||||
|
gtk_widget_show (menuitem);
|
||||||
|
|
||||||
|
g_signal_connect (menuitem, "activate",
|
||||||
|
G_CALLBACK (midori_browser_menu_item_activate_cb), browser);
|
||||||
|
g_signal_connect (menuitem, "button-press-event",
|
||||||
|
G_CALLBACK (midori_browser_menu_item_button_press_cb), browser);
|
||||||
g_signal_connect (menuitem, "select",
|
g_signal_connect (menuitem, "select",
|
||||||
G_CALLBACK (midori_browser_menu_item_select_cb), browser);
|
G_CALLBACK (midori_browser_menu_item_select_cb), browser);
|
||||||
g_signal_connect (menuitem, "deselect",
|
g_signal_connect (menuitem, "deselect",
|
||||||
G_CALLBACK (midori_browser_menu_item_deselect_cb), browser);
|
G_CALLBACK (midori_browser_menu_item_deselect_cb), browser);
|
||||||
}
|
}
|
||||||
g_list_free (children);
|
sqlite3_finalize (statement);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -5697,8 +5766,6 @@ midori_browser_history_clear_cb (KatzeArray* history,
|
||||||
MidoriBrowser* browser)
|
MidoriBrowser* browser)
|
||||||
{
|
{
|
||||||
GtkAction* location_action = _action_by_name (browser, "Location");
|
GtkAction* location_action = _action_by_name (browser, "Location");
|
||||||
g_object_set (_action_by_name (browser, "RecentlyVisited"),
|
|
||||||
"array", NULL, NULL);
|
|
||||||
midori_location_action_clear (MIDORI_LOCATION_ACTION (location_action));
|
midori_location_action_clear (MIDORI_LOCATION_ACTION (location_action));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5706,7 +5773,6 @@ static void
|
||||||
midori_browser_set_history (MidoriBrowser* browser,
|
midori_browser_set_history (MidoriBrowser* browser,
|
||||||
KatzeArray* history)
|
KatzeArray* history)
|
||||||
{
|
{
|
||||||
KatzeItem* recently_visited;
|
|
||||||
time_t now;
|
time_t now;
|
||||||
gint64 day;
|
gint64 day;
|
||||||
|
|
||||||
|
@ -5720,19 +5786,11 @@ midori_browser_set_history (MidoriBrowser* browser,
|
||||||
if (history)
|
if (history)
|
||||||
g_object_ref (history);
|
g_object_ref (history);
|
||||||
katze_object_assign (browser->history, history);
|
katze_object_assign (browser->history, history);
|
||||||
|
g_object_set (_action_by_name (browser, "RecentlyVisited"),
|
||||||
|
"array", history, NULL);
|
||||||
|
|
||||||
midori_browser_history_clear_cb (history, browser);
|
midori_browser_history_clear_cb (history, browser);
|
||||||
|
|
||||||
if (history && ((recently_visited = katze_array_get_nth_item (history,
|
|
||||||
katze_array_get_length (KATZE_ARRAY (history)) - 1))))
|
|
||||||
g_object_set (_action_by_name (browser, "RecentlyVisited"),
|
|
||||||
"array", recently_visited, "reversed", TRUE,
|
|
||||||
NULL);
|
|
||||||
else
|
|
||||||
g_object_set (_action_by_name (browser, "RecentlyVisited"),
|
|
||||||
"array", NULL, "reversed", FALSE,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if (!history)
|
if (!history)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue