Reimplement bookmarkbar with sqlite
This commit is contained in:
parent
2ec272eb96
commit
3eea7c933d
1 changed files with 144 additions and 0 deletions
|
@ -6630,10 +6630,149 @@ midori_browser_settings_notify (MidoriWebSettings* web_settings,
|
||||||
g_value_unset (&value);
|
g_value_unset (&value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
midori_bookmarkbar_item_button_press_event_cb (GtkWidget* toolitem,
|
||||||
|
GdkEventButton* event,
|
||||||
|
MidoriBrowser* browser)
|
||||||
|
{
|
||||||
|
KatzeItem* item;
|
||||||
|
gint n;
|
||||||
|
|
||||||
|
item = (KatzeItem*)g_object_get_data (G_OBJECT (toolitem), "KatzeItem");
|
||||||
|
if (event->button == 2)
|
||||||
|
{
|
||||||
|
if (katze_item_get_uri (item))
|
||||||
|
{
|
||||||
|
n = midori_browser_add_uri (browser, katze_item_get_uri (item));
|
||||||
|
_midori_browser_set_current_page_smartly (browser, n);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* FIXME: This is a folder and we need to popup a menu */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event->button == 3)
|
||||||
|
{
|
||||||
|
midori_browser_bookmark_popup (toolitem, NULL, item, browser);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
midori_bookmarkbar_insert_item (GtkWidget* toolbar,
|
||||||
|
KatzeItem* item)
|
||||||
|
{
|
||||||
|
GtkToolItem* toolitem;
|
||||||
|
|
||||||
|
MidoriBrowser* browser = midori_browser_get_for_widget (toolbar);
|
||||||
|
|
||||||
|
toolitem = katze_array_action_create_tool_item_for (
|
||||||
|
KATZE_ARRAY_ACTION (_action_by_name (browser, "Bookmarks")), item);
|
||||||
|
g_object_set_data (G_OBJECT (toolitem), "KatzeItem", item);
|
||||||
|
|
||||||
|
if (KATZE_IS_ITEM (item))
|
||||||
|
{
|
||||||
|
GtkWidget* child = gtk_bin_get_child (GTK_BIN (toolitem));
|
||||||
|
g_object_set_data (G_OBJECT (child), "KatzeItem", item);
|
||||||
|
}
|
||||||
|
else /* Separator */
|
||||||
|
gtk_tool_item_set_use_drag_window (toolitem, TRUE);
|
||||||
|
|
||||||
|
g_signal_connect (toolitem, "button-press-event",
|
||||||
|
G_CALLBACK (midori_bookmarkbar_item_button_press_event_cb),
|
||||||
|
browser);
|
||||||
|
gtk_widget_show (GTK_WIDGET (toolitem));
|
||||||
|
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
midori_bookmarkbar_populate (MidoriBrowser* browser)
|
||||||
|
{
|
||||||
|
sqlite3* db;
|
||||||
|
gint result;
|
||||||
|
const gchar* sqlcmd;
|
||||||
|
sqlite3_stmt* statement;
|
||||||
|
|
||||||
|
/* FIXME: We need to insert copy of a homepage. */
|
||||||
|
gtk_toolbar_insert (GTK_TOOLBAR (browser->bookmarkbar), browser->homepage, -1);
|
||||||
|
|
||||||
|
db = g_object_get_data (G_OBJECT (browser->bookmarks), "db");
|
||||||
|
if (!db)
|
||||||
|
return;
|
||||||
|
|
||||||
|
sqlcmd = "SELECT uri, title, app FROM bookmarks WHERE "
|
||||||
|
" toolbar = 1 ORDER BY type ASC";
|
||||||
|
result = sqlite3_prepare_v2 (db, sqlcmd, -1, &statement, NULL);
|
||||||
|
if (result != SQLITE_OK)
|
||||||
|
{
|
||||||
|
_action_set_sensitive (browser, "BookmarkAdd", FALSE);
|
||||||
|
_action_set_sensitive (browser, "BookmarkFolderAdd", FALSE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((result = sqlite3_step (statement)) == SQLITE_ROW)
|
||||||
|
{
|
||||||
|
gint app;
|
||||||
|
KatzeItem* item;
|
||||||
|
const unsigned char* uri;
|
||||||
|
const unsigned char* title;
|
||||||
|
|
||||||
|
uri = sqlite3_column_text (statement, 0);
|
||||||
|
title = sqlite3_column_text (statement, 1);
|
||||||
|
app = sqlite3_column_int64 (statement, 2);
|
||||||
|
|
||||||
|
item = katze_item_new ();
|
||||||
|
katze_item_set_name (item, (gchar*)title);
|
||||||
|
if (uri)
|
||||||
|
{
|
||||||
|
katze_item_set_uri (item, (gchar*)uri);
|
||||||
|
katze_item_set_meta_integer (item, "app", app);
|
||||||
|
}
|
||||||
|
midori_bookmarkbar_insert_item (browser->bookmarkbar, item);
|
||||||
|
}
|
||||||
|
_action_set_sensitive (browser, "BookmarkAdd", TRUE);
|
||||||
|
_action_set_sensitive (browser, "BookmarkFolderAdd", TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
midori_bookmarkbar_clear (GtkWidget* toolbar)
|
||||||
|
{
|
||||||
|
GList* children = gtk_container_get_children (GTK_CONTAINER (toolbar));
|
||||||
|
while (children != NULL)
|
||||||
|
{
|
||||||
|
gtk_widget_destroy (children->data);
|
||||||
|
children = g_list_next (children);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
midori_browser_show_bookmarkbar_notify_value_cb (MidoriWebSettings* settings,
|
||||||
|
GParamSpec* pspec,
|
||||||
|
MidoriBrowser* browser)
|
||||||
|
{
|
||||||
|
gboolean show_bookmarkbar;
|
||||||
|
|
||||||
|
g_object_get (browser->settings, "show-bookmarkbar",
|
||||||
|
&show_bookmarkbar, NULL);
|
||||||
|
|
||||||
|
if (!show_bookmarkbar)
|
||||||
|
midori_bookmarkbar_clear (browser->bookmarkbar);
|
||||||
|
else
|
||||||
|
midori_bookmarkbar_populate (browser);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
midori_browser_set_bookmarks (MidoriBrowser* browser,
|
midori_browser_set_bookmarks (MidoriBrowser* browser,
|
||||||
KatzeArray* bookmarks)
|
KatzeArray* bookmarks)
|
||||||
{
|
{
|
||||||
|
MidoriWebSettings* settings;
|
||||||
|
|
||||||
|
if (!bookmarks)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!browser->bookmarks)
|
if (!browser->bookmarks)
|
||||||
{
|
{
|
||||||
g_object_ref (bookmarks);
|
g_object_ref (bookmarks);
|
||||||
|
@ -6642,6 +6781,11 @@ midori_browser_set_bookmarks (MidoriBrowser* browser,
|
||||||
|
|
||||||
g_object_set (_action_by_name (browser, "Bookmarks"), "array",
|
g_object_set (_action_by_name (browser, "Bookmarks"), "array",
|
||||||
browser->bookmarks, NULL);
|
browser->bookmarks, NULL);
|
||||||
|
|
||||||
|
settings = midori_browser_get_settings (browser);
|
||||||
|
g_signal_connect (settings, "notify::show-bookmarkbar",
|
||||||
|
G_CALLBACK (midori_browser_show_bookmarkbar_notify_value_cb), browser);
|
||||||
|
g_object_notify (G_OBJECT (settings), "show-bookmarkbar");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in a new issue