Merge lp:~aauzi/midori/fix-1179200-3 into lp:midori

Proposed by André Auzi
Status: Merged
Approved by: Cris Dywan
Approved revision: 6322
Merged at revision: 6379
Proposed branch: lp:~aauzi/midori/fix-1179200-3
Merge into: lp:midori
Diff against target: 359 lines (+104/-78)
5 files modified
midori/midori-array.c (+28/-11)
midori/midori-bookmarks.c (+0/-18)
midori/midori-browser.c (+67/-36)
panels/midori-bookmarks.c (+9/-8)
panels/midori-bookmarks.h (+0/-5)
To merge this branch: bzr merge lp:~aauzi/midori/fix-1179200-3
Reviewer Review Type Date Requested Status
Cris Dywan Approve
Review via email: mp+178523@code.launchpad.net

Commit message

Allow bookmark bar update on additions resulting from imports

Description of the change

Third step for merge of fix-1179200

Here, the bookmark bar is updated by callback after katze_array_add_item.
Import is reworked a step further to use katze_array_add_item instead of direct db insert

Note: there's no need to restart midori to see imported bookmarks in the bookmark bar.

To post a comment you must log in.
Revision history for this message
Cris Dywan (kalikiana) wrote :

I might like to see the idle kept out of the browser itself, but the approach is good and I like moving away from directly working with the db.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'midori/midori-array.c'
2--- midori/midori-array.c 2013-05-30 21:57:04 +0000
3+++ midori/midori-array.c 2013-08-05 09:36:27 +0000
4@@ -97,15 +97,15 @@
5 if (katze_str_equal ((gchar*)cur->name, "title"))
6 {
7 gchar* value = g_strstrip ((gchar*)xmlNodeGetContent (cur));
8+ katze_item_set_name (KATZE_ITEM (array), value);
9+ xmlFree (value);
10+ }
11+ else if (katze_str_equal ((gchar*)cur->name, "desc"))
12+ {
13+ gchar* value = g_strstrip ((gchar*)xmlNodeGetContent (cur));
14 katze_item_set_text (KATZE_ITEM (array), value);
15 xmlFree (value);
16 }
17- else if (katze_str_equal ((gchar*)cur->name, "desc"))
18- {
19- gchar* value = g_strstrip ((gchar*)xmlNodeGetContent (cur));
20- katze_item_set_name (KATZE_ITEM (array), value);
21- xmlFree (value);
22- }
23 else if (katze_str_equal ((gchar*)cur->name, "info"))
24 katze_xbel_parse_info ((KatzeItem*)array, cur);
25 else if (katze_str_equal ((gchar*)cur->name, "folder"))
26@@ -1069,6 +1069,17 @@
27 item = katze_item_new ();
28 for (i = 0; i < cols; i++)
29 katze_item_set_value_from_column (stmt, i, item);
30+
31+ if (KATZE_ITEM_IS_FOLDER (item))
32+ {
33+ g_object_unref (item);
34+
35+ item = KATZE_ITEM (katze_array_new (KATZE_TYPE_ITEM));
36+
37+ for (i = 0; i < cols; i++)
38+ katze_item_set_value_from_column (stmt, i, item);
39+ }
40+
41 katze_array_add_item (array, item);
42 }
43
44@@ -1157,12 +1168,18 @@
45 if (KATZE_ITEM_IS_FOLDER (item))
46 {
47 gchar* parentid = g_strdup_printf ("%" G_GINT64_FORMAT,
48- katze_item_get_meta_integer (item, "id"));
49+ katze_item_get_meta_integer (item, "id"));
50 KatzeArray* subarray = midori_array_query_recursive (bookmarks,
51- fields, "parentid=%q", parentid, TRUE);
52- katze_item_set_name (KATZE_ITEM (subarray), katze_item_get_name (item));
53- katze_array_add_item (array, subarray);
54-
55+ fields, "parentid=%q", parentid, TRUE);
56+ KatzeItem* subitem;
57+ GList* sublist;
58+
59+ KATZE_ARRAY_FOREACH_ITEM_L (subitem, subarray, sublist)
60+ {
61+ katze_array_add_item (KATZE_ARRAY (item), subitem);
62+ }
63+
64+ g_object_unref (subarray);
65 g_free (parentid);
66 }
67 }
68
69=== modified file 'midori/midori-bookmarks.c'
70--- midori/midori-bookmarks.c 2013-07-03 19:42:45 +0000
71+++ midori/midori-bookmarks.c 2013-08-05 09:36:27 +0000
72@@ -310,24 +310,6 @@
73 }
74
75 void
76-midori_bookmarks_import (const gchar* filename,
77- sqlite3* db)
78-{
79- KatzeArray* bookmarks;
80- GError* error = NULL;
81-
82- bookmarks = katze_array_new (KATZE_TYPE_ARRAY);
83-
84- if (!midori_array_from_file (bookmarks, filename, "xbel", &error))
85- {
86- g_warning (_("The bookmarks couldn't be saved. %s"), error->message);
87- g_error_free (error);
88- return;
89- }
90- midori_bookmarks_import_array_db (db, bookmarks, 0);
91-}
92-
93-void
94 midori_bookmarks_on_quit (KatzeArray* array)
95 {
96 g_return_if_fail (KATZE_IS_ARRAY (array));
97
98=== modified file 'midori/midori-browser.c'
99--- midori/midori-browser.c 2013-08-02 12:00:42 +0000
100+++ midori/midori-browser.c 2013-08-05 09:36:27 +0000
101@@ -97,6 +97,8 @@
102 gboolean show_statusbar;
103 guint maximum_history_age;
104 guint last_web_search;
105+
106+ gboolean bookmarkbar_populate;
107 };
108
109 G_DEFINE_TYPE (MidoriBrowser, midori_browser, GTK_TYPE_WINDOW)
110@@ -163,9 +165,9 @@
111 GParamSpec* pspec);
112
113 void
114-midori_bookmarks_import_array_db (sqlite3* db,
115- KatzeArray* array,
116- gint64 parentid);
117+midori_bookmarks_import_array (KatzeArray* bookmarks,
118+ KatzeArray* array,
119+ gint64 parentid);
120
121 gboolean
122 midori_bookmarks_update_item_db (sqlite3* db,
123@@ -177,6 +179,8 @@
124
125 static void
126 midori_bookmarkbar_populate (MidoriBrowser* browser);
127+static void
128+midori_bookmarkbar_populate_idle (MidoriBrowser* browser);
129
130 static void
131 midori_bookmarkbar_clear (GtkWidget* toolbar);
132@@ -1229,16 +1233,20 @@
133 if (new_bookmark)
134 katze_array_add_item (browser->bookmarks, bookmark);
135 else
136+ {
137 midori_bookmarks_update_item_db (db, bookmark);
138- midori_browser_update_history (bookmark, "bookmark", new_bookmark ? "create" : "modify");
139-
140- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_toolbar)))
141- if (!gtk_widget_get_visible (browser->bookmarkbar))
142- _action_set_active (browser, "Bookmarkbar", TRUE);
143+ midori_browser_update_history (bookmark, "bookmark", "modify");
144+
145+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_toolbar)))
146+ if (!gtk_widget_get_visible (browser->bookmarkbar))
147+ _action_set_active (browser, "Bookmarkbar", TRUE);
148+ if (gtk_widget_get_visible (browser->bookmarkbar))
149+ midori_bookmarkbar_populate (browser);
150+ }
151+
152 return_status = TRUE;
153 }
154- if (gtk_widget_get_visible (browser->bookmarkbar))
155- midori_bookmarkbar_populate (browser);
156+
157 gtk_widget_destroy (dialog);
158 return return_status;
159 }
160@@ -4516,7 +4524,6 @@
161 gchar* path = NULL;
162 gint64 selected;
163 GError* error;
164- sqlite3* db = g_object_get_data (G_OBJECT (browser->bookmarks), "db");
165
166 if (gtk_combo_box_get_active_iter (combobox, &iter))
167 gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, 2, &path, -1);
168@@ -4544,8 +4551,8 @@
169 if (error)
170 g_error_free (error);
171 }
172- midori_bookmarks_import_array_db (db, bookmarks, selected);
173- katze_array_update (browser->bookmarks);
174+ midori_bookmarks_import_array (browser->bookmarks, bookmarks, selected);
175+
176 g_object_unref (bookmarks);
177 g_free (path);
178 }
179@@ -5988,6 +5995,21 @@
180 }
181 }
182
183+static gboolean
184+midori_browser_idle (gpointer data)
185+{
186+ MidoriBrowser* browser = MIDORI_BROWSER (data);
187+
188+ if (browser->bookmarkbar_populate)
189+ {
190+ midori_bookmarkbar_populate_idle (browser);
191+
192+ browser->bookmarkbar_populate = FALSE;
193+ }
194+
195+ return FALSE;
196+}
197+
198 static void
199 midori_browser_init (MidoriBrowser* browser)
200 {
201@@ -6447,6 +6469,8 @@
202 katze_object_assign (browser->history, NULL);
203 katze_object_assign (browser->dial, NULL);
204
205+ g_idle_remove_by_data (browser);
206+
207 G_OBJECT_CLASS (midori_browser_parent_class)->finalize (object);
208 }
209
210@@ -6982,6 +7006,18 @@
211 }
212
213 static void
214+midori_bookmarkbar_add_item_cb (KatzeArray* bookmarks,
215+ KatzeItem* item,
216+ MidoriBrowser* browser)
217+{
218+ if (gtk_widget_get_visible (browser->bookmarkbar))
219+ midori_bookmarkbar_populate (browser);
220+ else if (katze_item_get_meta_boolean (item, "toolbar"))
221+ _action_set_active (browser, "Bookmarkbar", TRUE);
222+ midori_browser_update_history (item, "bookmark", "created");
223+}
224+
225+static void
226 midori_bookmarkbar_remove_item_cb (KatzeArray* bookmarks,
227 KatzeItem* item,
228 MidoriBrowser* browser)
229@@ -6994,6 +7030,16 @@
230 static void
231 midori_bookmarkbar_populate (MidoriBrowser* browser)
232 {
233+ if (browser->bookmarkbar_populate)
234+ return;
235+
236+ g_idle_add (midori_browser_idle, browser);
237+ browser->bookmarkbar_populate = TRUE;
238+}
239+
240+static void
241+midori_bookmarkbar_populate_idle (MidoriBrowser* browser)
242+{
243 KatzeArray* array;
244 KatzeItem* item;
245
246@@ -7014,29 +7060,7 @@
247
248 KATZE_ARRAY_FOREACH_ITEM (item, array)
249 {
250- if (KATZE_ITEM_IS_BOOKMARK (item))
251- midori_bookmarkbar_insert_item (browser->bookmarkbar, item);
252- else
253- {
254- gint64 id = katze_item_get_meta_integer (item, "id");
255- gchar* parentid = g_strdup_printf ("%" G_GINT64_FORMAT, id);
256- KatzeArray* subfolder = midori_array_query (browser->bookmarks,
257- "id, parentid, title, uri, desc, app, toolbar, pos_panel, pos_bar", "parentid = %q",
258- parentid);
259-
260- katze_item_set_name (KATZE_ITEM (subfolder), katze_item_get_name (item));
261- katze_item_set_meta_integer (KATZE_ITEM (subfolder), "id", id);
262- katze_item_set_meta_integer (KATZE_ITEM (subfolder), "toolbar", 1);
263- katze_item_set_meta_integer (KATZE_ITEM (subfolder), "parentid",
264- katze_item_get_meta_integer (item, "parentid"));
265- katze_item_set_uri (KATZE_ITEM (subfolder), NULL);
266- katze_item_set_meta_string (KATZE_ITEM (subfolder), "desc",
267- katze_item_get_meta_string (KATZE_ITEM (item), "desc"));
268- katze_item_set_meta_integer (KATZE_ITEM (subfolder), "app",
269- katze_item_get_meta_boolean (KATZE_ITEM (item), "app"));
270- midori_bookmarkbar_insert_item (browser->bookmarkbar, KATZE_ITEM (subfolder));
271- g_free (parentid);
272- }
273+ midori_bookmarkbar_insert_item (browser->bookmarkbar, item);
274 }
275 _action_set_sensitive (browser, "BookmarkAdd", TRUE);
276 _action_set_sensitive (browser, "BookmarkFolderAdd", TRUE);
277@@ -7071,8 +7095,13 @@
278 MidoriWebSettings* settings;
279
280 if (browser->bookmarks != NULL)
281+ {
282+ g_signal_handlers_disconnect_by_func (browser->bookmarks,
283+ midori_bookmarkbar_add_item_cb, browser);
284 g_signal_handlers_disconnect_by_func (browser->bookmarks,
285 midori_bookmarkbar_remove_item_cb, browser);
286+ }
287+
288 settings = midori_browser_get_settings (browser);
289 g_signal_handlers_disconnect_by_func (settings,
290 midori_browser_show_bookmarkbar_notify_value_cb, browser);
291@@ -7101,6 +7130,8 @@
292 g_signal_connect (settings, "notify::show-bookmarkbar",
293 G_CALLBACK (midori_browser_show_bookmarkbar_notify_value_cb), browser);
294 g_object_notify (G_OBJECT (settings), "show-bookmarkbar");
295+ g_signal_connect_after (bookmarks, "add-item",
296+ G_CALLBACK (midori_bookmarkbar_add_item_cb), browser);
297 g_signal_connect_after (bookmarks, "remove-item",
298 G_CALLBACK (midori_bookmarkbar_remove_item_cb), browser);
299 }
300
301=== modified file 'panels/midori-bookmarks.c'
302--- panels/midori-bookmarks.c 2013-07-01 20:20:53 +0000
303+++ panels/midori-bookmarks.c 2013-08-05 09:36:27 +0000
304@@ -161,22 +161,23 @@
305 }
306
307 void
308-midori_bookmarks_import_array_db (sqlite3* db,
309- KatzeArray* array,
310- gint64 parentid)
311+midori_bookmarks_import_array (KatzeArray* bookmarks,
312+ KatzeArray* array,
313+ gint64 parentid)
314 {
315 GList* list;
316 KatzeItem* item;
317- gint64 id;
318
319- if (!db)
320+ if (!bookmarks)
321 return;
322
323 KATZE_ARRAY_FOREACH_ITEM_L (item, array, list)
324 {
325- id = midori_bookmarks_insert_item_db (db, item, parentid);
326+ Katze_item_set_meta_integer (item, "parentid", parentid);
327+ katze_array_add_item (bookmarks, item);
328 if (KATZE_IS_ARRAY (item))
329- midori_bookmarks_import_array_db (db, KATZE_ARRAY (item), id);
330+ midori_bookmarks_import_array (bookmarks, KATZE_ARRAY (item),
331+ katze_item_get_meta_integer(item, "id"));
332 }
333 g_list_free (list);
334 }
335@@ -391,7 +392,7 @@
336
337 static void
338 midori_bookmarks_add_clicked_cb (GtkWidget* toolitem,
339- MidoriBookmarks* bookmarks)
340+ MidoriBookmarks* bookmarks)
341 {
342 MidoriBrowser* browser = midori_browser_get_for_widget (toolitem);
343 GtkTreeView* treeview = GTK_TREE_VIEW (bookmarks->treeview);
344
345=== modified file 'panels/midori-bookmarks.h'
346--- panels/midori-bookmarks.h 2012-11-25 11:26:03 +0000
347+++ panels/midori-bookmarks.h 2013-08-05 09:36:27 +0000
348@@ -42,11 +42,6 @@
349 KatzeItem* item,
350 gint64 parentid);
351
352-void
353-midori_bookmarks_import_array_db (sqlite3* db,
354- KatzeArray* array,
355- gint64 parentid);
356-
357 gboolean
358 midori_bookmarks_update_item_db (sqlite3* db,
359 KatzeItem* item);

Subscribers

People subscribed via source and target branches

to all changes: