]> spindle.queued.net Git - midori/commitdiff
Introduce and use midori_view_new_with_item
authorChristian Dywan <christian@twotoasts.de>
Wed, 7 Dec 2011 20:27:38 +0000 (21:27 +0100)
committerChristian Dywan <christian@twotoasts.de>
Wed, 7 Dec 2011 20:27:38 +0000 (21:27 +0100)
katze/katze-item.c
midori/midori-browser.c
midori/midori-view.c
midori/midori-view.h

index e56bc47bce30f7c6cdf98a23051e1e4ac8c187a0..1d3a3ee72cac43ee2e5bfd4384168f846b275d68 100644 (file)
@@ -707,6 +707,8 @@ katze_item_set_parent (KatzeItem* item,
  * Note that subclass specific features will only
  * be preserved if the class implements it.
  *
+ * Since 0.4.3 meta data is copied.
+ *
  * Return value: a new #KatzeItem
  *
  * Since: 0.1.3
@@ -715,6 +717,9 @@ KatzeItem*
 katze_item_copy (KatzeItem* item)
 {
     KatzeItem* copy;
+    GHashTableIter iter;
+    const gchar* key;
+    const gchar* value;
     KatzeItemClass* class;
 
     g_return_val_if_fail (KATZE_IS_ITEM (item), NULL);
@@ -727,6 +732,15 @@ katze_item_copy (KatzeItem* item)
         "added", item->added,
         "parent", item->parent,
         NULL);
+
+    g_hash_table_iter_init (&iter, item->metadata);
+    while (g_hash_table_iter_next (&iter, (void*)&key, (void*)&value))
+    {
+        if (g_str_has_prefix (key, "midori:"))
+            key = &key[7];
+        g_hash_table_insert (copy->metadata, g_strdup (key), g_strdup (value));
+    }
+
     class = KATZE_ITEM_GET_CLASS (item);
     return class->copy ? class->copy (copy) : copy;
 }
index 0b6d5e3f638925042f271ecb563df13655d8cb12..fa96a55a6447f4cd5850d6f63c1a0604741dd2da 100644 (file)
@@ -3418,12 +3418,10 @@ _action_source_view_activate (GtkAction*     action,
         source_uri = g_filename_to_uri (filename, NULL, NULL);
         g_free (filename);
 
-        source = midori_view_new (NULL);
-        midori_view_set_settings (MIDORI_VIEW (source), browser->settings);
+        source = midori_view_new_with_title (NULL, browser->settings, FALSE);
         source_view = midori_view_get_web_view (MIDORI_VIEW (source));
         webkit_web_view_set_view_source_mode (WEBKIT_WEB_VIEW (source_view), TRUE);
         webkit_web_view_load_uri (WEBKIT_WEB_VIEW (source_view), source_uri);
-        gtk_widget_show (source);
         midori_browser_add_tab (browser, source);
     }
     else
@@ -7053,27 +7051,15 @@ midori_browser_add_item (MidoriBrowser* browser,
                          KatzeItem*     item)
 {
     const gchar* uri;
-    const gchar* title;
     GtkWidget* view;
     gint page;
-    KatzeItem* proxy_item;
-    GList* keys;
 
     g_return_val_if_fail (MIDORI_IS_BROWSER (browser), -1);
     g_return_val_if_fail (KATZE_IS_ITEM (item), -1);
 
     uri = katze_item_get_uri (item);
-    if (!uri)
-        uri = "about:blank";
-    title = katze_item_get_name (item);
-    view = midori_view_new_with_title (title, browser->settings,
+    view = midori_view_new_with_item (item, browser->settings,
         g_object_get_data (G_OBJECT (item), "midori-view-append") ? TRUE : FALSE);
-
-    proxy_item = midori_view_get_proxy_item (MIDORI_VIEW (view));
-
-    if (katze_item_get_meta_boolean (item, "dont-write-history"))
-        katze_item_set_meta_integer (proxy_item, "dont-write-history", 1);
-
     page = midori_browser_add_tab (browser, view);
 
     /* Blank pages should not be delayed */
@@ -7088,16 +7074,6 @@ midori_browser_add_item (MidoriBrowser* browser,
     else
         midori_view_set_uri (MIDORI_VIEW (view), uri);
 
-    proxy_item = midori_view_get_proxy_item (MIDORI_VIEW (view));
-    if ((keys = katze_item_get_meta_keys (item)))
-    {
-        guint i = 0;
-        const gchar* key;
-        while ((key = g_list_nth_data (keys, i++)))
-            katze_item_set_meta_string (proxy_item, key,
-                katze_item_get_meta_string (item, key));
-        g_list_free (keys);
-    }
     return page;
 }
 
index fd3b56afc14700d6cba215c5128a58a7760e501d..f25ce479af347ef262eaefd286620047d93fe4df 100644 (file)
@@ -3251,7 +3251,6 @@ _midori_view_set_settings (MidoriView*        view,
 
 /**
  * midori_view_new_with_title:
- * @uri: an URI string, or %NULL
  * @title: a title, or %NULL
  * @settings: a #MidoriWebSettings, or %NULL
  * @append: if %TRUE, the view should be appended
@@ -3268,11 +3267,35 @@ midori_view_new_with_title (const gchar*       title,
                             MidoriWebSettings* settings,
                             gboolean           append)
 {
-    MidoriView* view = g_object_new (MIDORI_TYPE_VIEW, "title", title, NULL);
+    KatzeItem* item = katze_item_new ();
+    item->name = g_strdup (title);
+    return midori_view_new_with_item (item, settings, append);
+}
+
+/**
+ * midori_view_new_with_item:
+ * @item: a #KatzeItem, or %NULL
+ * @settings: a #MidoriWebSettings, or %NULL
+ * @append: if %TRUE, the view should be appended
+ *
+ * Creates a new view from an item that is visible by default.
+ *
+ * Return value: a new #MidoriView
+ *
+ * Since: 0.4.3
+ **/
+GtkWidget*
+midori_view_new_with_item (KatzeItem*         item,
+                           MidoriWebSettings* settings,
+                           gboolean           append)
+{
+    MidoriView* view = g_object_new (MIDORI_TYPE_VIEW, NULL);
     if (settings)
         _midori_view_set_settings (view, settings);
     if (append)
         g_object_set_data (G_OBJECT (view), "midori-view-append", (void*)1);
+    if (item)
+        katze_object_assign (view->item, katze_item_copy (item));
     gtk_widget_show ((GtkWidget*)view);
     return (GtkWidget*)view;
 }
@@ -3808,12 +3831,9 @@ midori_view_set_uri (MidoriView*  view,
         g_warning ("Calling %s() before adding the view to a browser. This "
                    "breaks extensions that monitor page loading.", G_STRFUNC);
 
-    /* Treat "about:blank" and "" equally, see midori_view_is_blank(). */
-    if (!uri || !strcmp (uri, "about:blank")) uri = "";
-
     if (g_getenv ("MIDORI_UNARMED") == NULL)
     {
-        if (!strcmp (uri, ""))
+        if (!uri || !strcmp (uri, "") || !strcmp (uri, "about:blank"))
         {
             #ifdef G_ENABLE_DEBUG
             GTimer* timer = NULL;
@@ -4074,8 +4094,6 @@ midori_view_get_display_uri (MidoriView* view)
  * as a title. Most of the time this will be the title
  * or the current URI.
  *
- * An empty page is represented as "about:blank".
- *
  * You can assume that the string is not %NULL.
  *
  * Return value: a title string
@@ -4841,7 +4859,7 @@ midori_view_reload (MidoriView* view,
 {
     g_return_if_fail (MIDORI_IS_VIEW (view));
 
-    if (!(view->uri && *view->uri && strncmp (view->uri, "about:", 6)))
+    if (midori_uri_is_blank (view->uri))
     {
         gchar* uri = g_strdup (view->uri);
         midori_view_set_uri (view, uri);
index bdf21885c0b6791c320f41bb15c4fbacd45728f8..9b10d7b0eff379332d27a9ebddd47aa2b4e76102 100644 (file)
@@ -78,6 +78,11 @@ midori_view_new_with_title             (const gchar*       title,
                                         MidoriWebSettings* settings,
                                         gboolean           append);
 
+GtkWidget*
+midori_view_new_with_item              (KatzeItem*         item,
+                                        MidoriWebSettings* settings,
+                                        gboolean           append);
+
 void
 midori_view_set_settings               (MidoriView*        view,
                                         MidoriWebSettings* settings);