]> spindle.queued.net Git - midori/commitdiff
Introduce WebItem, first step of refactoring web search
authorChristian Dywan <christian@twotoasts.de>
Mon, 9 Jun 2008 01:17:01 +0000 (03:17 +0200)
committerChristian Dywan <christian@twotoasts.de>
Mon, 9 Jun 2008 01:17:01 +0000 (03:17 +0200)
midori/Makefile.am
midori/midori-trash.c
midori/midori-webitem.c [new file with mode: 0644]
midori/midori-webitem.h [new file with mode: 0644]
midori/search.c
midori/search.h
midori/sokoke.c
midori/webSearch.c

index 5f72dc2ff9aef61b14136e8c683efd7c42f45b47..61146edcc096bc6ae2155b1a58290a13edcaeff7 100644 (file)
@@ -18,6 +18,7 @@ bin_PROGRAMS = \
 
 midori_SOURCES = \
     main.c               main.h               \
+    midori-item.c        midori-item.h        \
     midori-app.c         midori-app.h         \
     midori-browser.c     midori-browser.h     \
     midori-panel.c       midori-panel.h       \
index 10dce2c82306485d93ef813b8c93a5ad9e00fe4e..b546e1218d4aa8fb99198290c61c1148623365da 100644 (file)
@@ -62,7 +62,7 @@ midori_trash_class_init (MidoriTrashClass* class)
 {
     signals[INSERTED] = g_signal_new (
         "inserted",
-        G_TYPE_FROM_CLASS(class),
+        G_TYPE_FROM_CLASS (class),
         (GSignalFlags)(G_SIGNAL_RUN_LAST),
         G_STRUCT_OFFSET (MidoriTrashClass, inserted),
         0,
@@ -73,7 +73,7 @@ midori_trash_class_init (MidoriTrashClass* class)
 
     signals[REMOVED] = g_signal_new (
         "removed",
-        G_TYPE_FROM_CLASS(class),
+        G_TYPE_FROM_CLASS (class),
         (GSignalFlags)(G_SIGNAL_RUN_LAST),
         G_STRUCT_OFFSET (MidoriTrashClass, removed),
         0,
@@ -93,7 +93,7 @@ midori_trash_class_init (MidoriTrashClass* class)
                                      PROP_LIMIT,
                                      g_param_spec_uint (
                                      "limit",
-                                     "Limit",
+                                     _("Limit"),
                                      _("The maximum number of items"),
                                      0, G_MAXUINT, 10,
                                      flags));
diff --git a/midori/midori-webitem.c b/midori/midori-webitem.c
new file mode 100644 (file)
index 0000000..bf74aff
--- /dev/null
@@ -0,0 +1,367 @@
+/*
+ Copyright (C) 2008 Christian Dywan <christian@twotoasts.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ See the file COPYING for the full license text.
+*/
+
+#include "midori-webitem.h"
+
+#include <glib/gi18n.h>
+#include <katze/katze.h>
+
+struct _MidoriWebItem
+{
+    GObject parent_instance;
+
+    gchar* name;
+    gchar* description;
+    gchar* uri;
+    gchar* icon;
+    gchar* token;
+};
+
+G_DEFINE_TYPE (MidoriWebItem, midori_web_item, G_TYPE_OBJECT)
+
+enum
+{
+    PROP_0,
+
+    PROP_NAME,
+    PROP_DESCRIPTION,
+    PROP_URI,
+    PROP_ICON,
+    PROP_TOKEN
+};
+
+static void
+midori_web_item_finalize (GObject* object);
+
+static void
+midori_web_item_set_property (GObject*      object,
+                              guint         prop_id,
+                              const GValue* value,
+                              GParamSpec*   pspec);
+
+static void
+midori_web_item_get_property (GObject*    object,
+                              guint       prop_id,
+                              GValue*     value,
+                              GParamSpec* pspec);
+
+static void
+midori_web_item_class_init (MidoriWebItemClass* class)
+{
+    GObjectClass* gobject_class = G_OBJECT_CLASS (class);
+    gobject_class->finalize = midori_web_item_finalize;
+    gobject_class->set_property = midori_web_item_set_property;
+    gobject_class->get_property = midori_web_item_get_property;
+
+    GParamFlags flags = G_PARAM_READWRITE | G_PARAM_CONSTRUCT;
+
+    g_object_class_install_property (gobject_class,
+                                     PROP_NAME,
+                                     g_param_spec_string (
+                                     "name",
+                                     _("Name"),
+                                     _("The name of the web item"),
+                                     NULL,
+                                     flags));
+
+    g_object_class_install_property (gobject_class,
+                                     PROP_DESCRIPTION,
+                                     g_param_spec_string (
+                                     "description",
+                                     _("Description"),
+                                     _("The description of the web item"),
+                                     NULL,
+                                     flags));
+
+    g_object_class_install_property (gobject_class,
+                                     PROP_URI,
+                                     g_param_spec_string (
+                                     "uri",
+                                     _("URI"),
+                                     _("The URI of the web item"),
+                                     NULL,
+                                     flags));
+
+    g_object_class_install_property (gobject_class,
+                                     PROP_ICON,
+                                     g_param_spec_string (
+                                     "icon",
+                                     _("Icon"),
+                                     _("The icon of the web item"),
+                                     NULL,
+                                     flags));
+
+    g_object_class_install_property (gobject_class,
+                                     PROP_TOKEN,
+                                     g_param_spec_string (
+                                     "token",
+                                     _("Token"),
+                                     _("The token of the web item"),
+                                     NULL,
+                                     flags));
+}
+
+
+
+static void
+midori_web_item_init (MidoriWebItem* web_item)
+{
+    // Nothing to do here
+}
+
+static void
+midori_web_item_finalize (GObject* object)
+{
+    G_OBJECT_CLASS (midori_web_item_parent_class)->finalize (object);
+}
+
+static void
+midori_web_item_set_property (GObject*      object,
+                              guint         prop_id,
+                              const GValue* value,
+                              GParamSpec*   pspec)
+{
+    MidoriWebItem* web_item = MIDORI_WEB_ITEM (object);
+
+    switch (prop_id)
+    {
+    case PROP_NAME:
+        web_item->name = g_value_dup_string (value);
+        break;
+    case PROP_DESCRIPTION:
+        web_item->description = g_value_dup_string (value);
+        break;
+    case PROP_URI:
+        web_item->uri = g_value_dup_string (value);
+        break;
+    case PROP_ICON:
+        web_item->icon = g_value_dup_string (value);
+        break;
+    case PROP_TOKEN:
+        web_item->token = g_value_dup_string (value);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+        break;
+    }
+}
+
+static void
+midori_web_item_get_property (GObject*    object,
+                              guint       prop_id,
+                              GValue*     value,
+                              GParamSpec* pspec)
+{
+    MidoriWebItem* web_item = MIDORI_WEB_ITEM (object);
+
+    switch (prop_id)
+    {
+    case PROP_NAME:
+        g_value_set_string (value, web_item->name);
+        break;
+    case PROP_DESCRIPTION:
+        g_value_set_string (value, web_item->description);
+        break;
+    case PROP_URI:
+        g_value_set_string (value, web_item->uri);
+        break;
+    case PROP_ICON:
+        g_value_set_string (value, web_item->icon);
+        break;
+    case PROP_TOKEN:
+        g_value_set_string (value, web_item->token);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+        break;
+    }
+}
+
+/**
+ * midori_web_item_new:
+ *
+ * Creates a new #MidoriWebItem.
+ *
+ * Return value: a new #MidoriWebItem
+ **/
+MidoriWebItem*
+midori_web_item_new (void)
+{
+    MidoriWebItem* web_item = g_object_new (MIDORI_TYPE_WEB_ITEM,
+                                            NULL);
+
+    return web_item;
+}
+
+/**
+ * midori_web_item_get_name:
+ * @web_item: a #MidoriWebItem
+ *
+ * Retrieves the name of @web_item.
+ *
+ * Return value: the name of the web item
+ **/
+const gchar*
+midori_web_item_get_name (MidoriWebItem* web_item)
+{
+    g_return_val_if_fail (MIDORI_IS_WEB_ITEM (web_item), NULL);
+
+    return web_item->name;
+}
+
+/**
+ * midori_web_item_set_name:
+ * @web_item: a #MidoriWebItem
+ * @name: a string
+ *
+ * Sets the name of @web_item.
+ **/
+void
+midori_web_item_set_name (MidoriWebItem* web_item,
+                          const gchar*   name)
+{
+    g_return_if_fail (MIDORI_IS_WEB_ITEM (web_item));
+
+    katze_assign (web_item->name, g_strdup (name));
+    g_object_notify (G_OBJECT (web_item), "name");
+}
+
+/**
+ * midori_web_item_get_description:
+ * @web_item: a #MidoriWebItem
+ *
+ * Retrieves the description of @web_item.
+ *
+ * Return value: the description of the web item
+ **/
+const gchar*
+midori_web_item_get_description (MidoriWebItem* web_item)
+{
+    g_return_val_if_fail (MIDORI_IS_WEB_ITEM (web_item), NULL);
+
+    return web_item->description;
+}
+
+/**
+ * midori_web_item_set_description:
+ * @web_item: a #MidoriWebItem
+ * @description: a string
+ *
+ * Sets the description of @web_item.
+ **/
+void
+midori_web_item_set_description (MidoriWebItem* web_item,
+                                 const gchar*   description)
+{
+    g_return_if_fail (MIDORI_IS_WEB_ITEM (web_item));
+
+    katze_assign (web_item->description, g_strdup (description));
+    g_object_notify (G_OBJECT (web_item), "description");
+}
+
+/**
+ * midori_web_item_get_uri:
+ * @web_item: a #MidoriWebItem
+ *
+ * Retrieves the URI of @web_item.
+ *
+ * Return value: the URI of the web item
+ **/
+const gchar*
+midori_web_item_get_uri (MidoriWebItem* web_item)
+{
+    g_return_val_if_fail (MIDORI_IS_WEB_ITEM (web_item), NULL);
+
+    return web_item->uri;
+}
+
+/**
+ * midori_web_item_set_uri:
+ * @web_item: a #MidoriWebItem
+ * @uri: a string
+ *
+ * Sets the URI of @web_item.
+ **/
+void
+midori_web_item_set_uri (MidoriWebItem* web_item,
+                         const gchar*   uri)
+{
+    g_return_if_fail (MIDORI_IS_WEB_ITEM (web_item));
+
+    katze_assign (web_item->uri, g_strdup (uri));
+    g_object_notify (G_OBJECT (web_item), "uri");
+}
+
+/**
+ * midori_web_item_get_icon:
+ * @web_item: a #MidoriWebItem
+ *
+ * Retrieves the icon of @web_item.
+ *
+ * Return value: the icon of the web item
+ **/
+const gchar*
+midori_web_item_get_icon (MidoriWebItem* web_item)
+{
+    g_return_val_if_fail (MIDORI_IS_WEB_ITEM (web_item), NULL);
+
+    return web_item->icon;
+}
+
+/**
+ * midori_web_item_set_icon:
+ * @web_item: a #MidoriWebItem
+ * @icon: a string
+ *
+ * Sets the icon of @web_item.
+ **/
+void
+midori_web_item_set_icon (MidoriWebItem* web_item,
+                          const gchar*   icon)
+{
+    g_return_if_fail (MIDORI_IS_WEB_ITEM (web_item));
+
+    katze_assign (web_item->icon, g_strdup (icon));
+    g_object_notify (G_OBJECT (web_item), "icon");
+}
+
+/**
+ * midori_web_item_get_token:
+ * @web_item: a #MidoriWebItem
+ *
+ * Retrieves the token of @web_item.
+ *
+ * Return value: the token of the web item
+ **/
+const gchar*
+midori_web_item_get_token (MidoriWebItem* web_item)
+{
+    g_return_val_if_fail (MIDORI_IS_WEB_ITEM (web_item), NULL);
+
+    return web_item->token;
+}
+
+/**
+ * midori_web_item_set_token:
+ * @web_item: a #MidoriWebItem
+ * @token: a string
+ *
+ * Sets the token of @web_item.
+ **/
+void
+midori_web_item_set_token (MidoriWebItem* web_item,
+                          const gchar*   token)
+{
+    g_return_if_fail (MIDORI_IS_WEB_ITEM (web_item));
+
+    katze_assign (web_item->token, g_strdup (token));
+    g_object_notify (G_OBJECT (web_item), "token");
+}
diff --git a/midori/midori-webitem.h b/midori/midori-webitem.h
new file mode 100644 (file)
index 0000000..c1276ab
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ Copyright (C) 2008 Christian Dywan <christian@twotoasts.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ See the file COPYING for the full license text.
+*/
+
+#ifndef __MIDORI_WEB_ITEM_H__
+#define __MIDORI_WEB_ITEM_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define MIDORI_TYPE_WEB_ITEM \
+    (midori_web_item_get_type ())
+#define MIDORI_WEB_ITEM(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIDORI_TYPE_WEB_ITEM, MidoriWebItem))
+#define MIDORI_WEB_ITEM_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST ((klass), MIDORI_TYPE_WEB_ITEM, MidoriWebItemClass))
+#define MIDORI_IS_WEB_ITEM(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIDORI_TYPE_WEB_ITEM))
+#define MIDORI_IS_WEB_ITEM_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE ((klass), MIDORI_TYPE_WEB_ITEM))
+#define MIDORI_WEB_ITEM_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS ((obj), MIDORI_TYPE_WEB_ITEM, MidoriWebItemClass))
+
+typedef struct _MidoriWebItem                MidoriWebItem;
+typedef struct _MidoriWebItemClass           MidoriWebItemClass;
+
+struct _MidoriWebItemClass
+{
+    GObjectClass parent_class;
+};
+
+GType
+midori_web_item_get_type               (void);
+
+MidoriWebItem*
+midori_web_item_new                    (void);
+
+const gchar*
+midori_web_item_get_name               (MidoriWebItem*  web_item);
+
+void
+midori_web_item_set_name               (MidoriWebItem*  web_item,
+                                        const gchar*    name);
+
+const gchar*
+midori_web_item_get_description        (MidoriWebItem*  web_item);
+
+void
+midori_web_item_set_description        (MidoriWebItem*  web_item,
+                                        const gchar*    description);
+
+const gchar*
+midori_web_item_get_uri                (MidoriWebItem*  web_item);
+
+void
+midori_web_item_set_uri                (MidoriWebItem*  web_item,
+                                        const gchar*    uri);
+
+const gchar*
+midori_web_item_get_icon               (MidoriWebItem*  web_item);
+
+void
+midori_web_item_set_icon               (MidoriWebItem*  web_item,
+                                        const gchar*    icon);
+
+const gchar*
+midori_web_item_get_token              (MidoriWebItem*  web_item);
+
+void
+midori_web_item_set_token              (MidoriWebItem*  web_item,
+                                        const gchar*    token);
+
+G_END_DECLS
+
+#endif /* __MIDORI_WEB_ITEM_H__ */
index 26afcb5eac1ea5add8a08af3fa79c9f4f19c45ad..1577b9c8ef4b1397810fb66290777f8158661cec 100644 (file)
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
+ Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
 
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
 
 #include "search.h"
 
-#include "sokoke.h"
-#include <katze/katze.h>
+#include "midori-webitem.h"
 
-#include <stdio.h>
-#include <string.h>
+#include "sokoke.h"
 
 GList* search_engines_new(void)
 {
@@ -24,7 +22,7 @@ GList* search_engines_new(void)
 
 void search_engines_free(GList* searchEngines)
 {
-    g_list_foreach(searchEngines, (GFunc)search_engine_free, NULL);
+    g_list_foreach(searchEngines, (GFunc)g_object_unref, NULL);
     g_list_free(searchEngines);
 }
 
@@ -40,14 +38,19 @@ gboolean search_engines_from_file(GList** searchEngines, const gchar* filename
     guint i;
     for(i = 0; engines[i] != NULL; i++)
     {
-        SearchEngine* engine = search_engine_new();
-        search_engine_set_short_name(engine, engines[i]);
-        engine->description = g_key_file_get_string(keyFile, engines[i], "description", NULL);
-        engine->url = g_key_file_get_string(keyFile, engines[i], "url", NULL);
-        engine->inputEncoding = g_key_file_get_string(keyFile, engines[i], "input-encoding", NULL);
-        engine->icon = g_key_file_get_string(keyFile, engines[i], "icon", NULL);
-        engine->keyword = g_key_file_get_string(keyFile, engines[i], "keyword", NULL);
-        *searchEngines = g_list_prepend(*searchEngines, engine);
+        MidoriWebItem* web_item = midori_web_item_new ();
+        guint j, n_properties;
+        GParamSpec** pspecs = g_object_class_list_properties (
+            G_OBJECT_GET_CLASS (web_item), &n_properties);
+        for (j = 0; j < n_properties; j++)
+        {
+            const gchar* property = g_param_spec_get_name (pspecs[j]);
+            gchar* value = g_key_file_get_string (keyFile, engines[i],
+                                                  property, NULL);
+            g_object_set (web_item, property, value, NULL);
+            g_free (value);
+        }
+        *searchEngines = g_list_prepend(*searchEngines, web_item);
     }
     *searchEngines = g_list_reverse(*searchEngines);
     g_strfreev(engines);
@@ -71,129 +74,22 @@ gboolean search_engines_to_file(GList* searchEngines, const gchar* filename
     guint i;
     for(i = 0; i < n; i++)
     {
-        SearchEngine* engine = (SearchEngine*)g_list_nth_data(searchEngines, i);
-        const gchar* name = search_engine_get_short_name(engine);
-        key_file_set_string(keyFile, name, "description", engine->description);
-        key_file_set_string(keyFile, name, "url", engine->url);
-        key_file_set_string(keyFile, name, "input-encoding", engine->inputEncoding);
-        key_file_set_string(keyFile, name, "icon", engine->icon);
-        key_file_set_string(keyFile, name, "keyword", engine->keyword);
+        MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data(searchEngines, i);
+        const gchar* name = midori_web_item_get_name (web_item);
+        guint j, n_properties;
+        GParamSpec** pspecs = g_object_class_list_properties (
+            G_OBJECT_GET_CLASS (web_item), &n_properties);
+        for (j = 0; j < n_properties; j++)
+        {
+            const gchar* property = g_param_spec_get_name (pspecs[j]);
+            gchar* value;
+            g_object_get (web_item, property, &value, NULL);
+            key_file_set_string (keyFile, name, property, value);
+            g_free (value);
+        }
     }
     gboolean bSaved = sokoke_key_file_save_to_file(keyFile, filename, error);
     g_key_file_free(keyFile);
 
     return bSaved;
 }
-
-SearchEngine* search_engine_new()
-{
-    SearchEngine* engine = g_new0(SearchEngine, 1);
-    engine->shortName = g_strdup("");
-    return engine;
-}
-
-void search_engine_free(SearchEngine* engine)
-{
-    g_return_if_fail(engine);
-    g_free(engine->shortName);
-    g_free(engine->description);
-    g_free(engine->url);
-    g_free(engine->inputEncoding);
-    g_free(engine->icon);
-    g_free(engine->keyword);
-    g_free(engine);
-}
-
-SearchEngine* search_engine_copy(SearchEngine* engine)
-{
-    g_return_val_if_fail(engine, NULL);
-    SearchEngine* copy = search_engine_new();
-    search_engine_set_short_name(copy, engine->shortName);
-    search_engine_set_description(copy, engine->description);
-    search_engine_set_url(copy, engine->url);
-    search_engine_set_input_encoding(copy, engine->inputEncoding);
-    search_engine_set_icon(copy, engine->icon);
-    search_engine_set_keyword(copy, engine->keyword);
-    return engine;
-}
-
-GType search_engine_get_type()
-{
-    static GType type = 0;
-    if(!type)
-        type = g_pointer_type_register_static("search_engine");
-    return type;
-}
-
-G_CONST_RETURN gchar* search_engine_get_short_name(SearchEngine* engine)
-{
-    g_return_val_if_fail(engine, NULL);
-    return engine->shortName;
-}
-
-G_CONST_RETURN gchar* search_engine_get_description(SearchEngine* engine)
-{
-    g_return_val_if_fail(engine, NULL);
-    return engine->description;
-}
-
-G_CONST_RETURN gchar* search_engine_get_url(SearchEngine* engine)
-{
-    g_return_val_if_fail(engine, NULL);
-    return engine->url;
-}
-
-G_CONST_RETURN gchar* search_engine_get_input_encoding(SearchEngine* engine)
-{
-    g_return_val_if_fail(engine, NULL);
-    return engine->inputEncoding;
-}
-
-G_CONST_RETURN gchar* search_engine_get_icon(SearchEngine* engine)
-{
-    g_return_val_if_fail(engine, NULL);
-    return engine->icon;
-}
-
-G_CONST_RETURN gchar* search_engine_get_keyword(SearchEngine* engine)
-{
-    g_return_val_if_fail(engine, NULL);
-    return engine->keyword;
-}
-
-void search_engine_set_short_name(SearchEngine* engine, const gchar* shortName)
-{
-    g_return_if_fail(engine);
-    g_return_if_fail(shortName);
-    katze_assign(engine->shortName, g_strdup(shortName));
-}
-
-void search_engine_set_description(SearchEngine* engine, const gchar* description)
-{
-    g_return_if_fail(engine);
-    katze_assign(engine->description, g_strdup(description));
-}
-
-void search_engine_set_url(SearchEngine* engine, const gchar* url)
-{
-    g_return_if_fail(engine);
-    katze_assign(engine->url, g_strdup(url));
-}
-
-void search_engine_set_input_encoding(SearchEngine* engine, const gchar* inputEncoding)
-{
-    g_return_if_fail(engine);
-    katze_assign(engine->inputEncoding, g_strdup(inputEncoding));
-}
-
-void search_engine_set_icon(SearchEngine* engine, const gchar* icon)
-{
-    g_return_if_fail(engine);
-    katze_assign(engine->icon, g_strdup(icon));
-}
-
-void search_engine_set_keyword(SearchEngine* engine, const gchar* keyword)
-{
-    g_return_if_fail(engine);
-    katze_assign(engine->keyword, g_strdup(keyword));
-}
index c8aa70936780222a41e6b39ed359176782e8a9ba..7ca92912e898947e4425fe37e523a44da4e726d3 100644 (file)
 #include <glib.h>
 #include <glib-object.h>
 
-// Note: This structure is entirely private.
-typedef struct
-{
-    gchar* shortName;
-    gchar* description;
-    gchar* url;
-    gchar* inputEncoding;
-    gchar* icon;
-    gchar* keyword;
-} SearchEngine;
-
 GList*
 search_engines_new(void);
 
@@ -38,54 +27,4 @@ search_engines_from_file(GList**, const gchar*, GError**);
 gboolean
 search_engines_to_file(GList*, const gchar*, GError**);
 
-SearchEngine*
-search_engine_new(void);
-
-void
-search_engine_free(SearchEngine*);
-
-SearchEngine*
-search_engine_copy(SearchEngine*);
-
-GType
-search_engine_get_type();
-
-#define G_TYPE_SEARCH_ENGINE search_engine_get_type()
-
-G_CONST_RETURN gchar*
-search_engine_get_short_name(SearchEngine*);
-
-G_CONST_RETURN gchar*
-search_engine_get_description(SearchEngine*);
-
-G_CONST_RETURN gchar*
-search_engine_get_url(SearchEngine*);
-
-G_CONST_RETURN gchar*
-search_engine_get_input_encoding(SearchEngine*);
-
-G_CONST_RETURN gchar*
-search_engine_get_icon(SearchEngine*);
-
-G_CONST_RETURN gchar*
-search_engine_get_keyword(SearchEngine*);
-
-void
-search_engine_set_short_name(SearchEngine*, const gchar*);
-
-void
-search_engine_set_description(SearchEngine*, const gchar*);
-
-void
-search_engine_set_url(SearchEngine*, const gchar*);
-
-void
-search_engine_set_input_encoding(SearchEngine*, const gchar*);
-
-void
-search_engine_set_icon(SearchEngine*, const gchar*);
-
-void
-search_engine_set_keyword(SearchEngine*, const gchar*);
-
 #endif /* !__SEARCH_H__ */
index 20dc48e098673823d907d83f4ee8ce105f66c4af..6130ffa00a0d587a191964c553ca360098fd2934 100644 (file)
@@ -11,7 +11,7 @@
 
 #include "sokoke.h"
 
-#include "search.h"
+#include "midori-webitem.h"
 
 #include "config.h"
 #include "main.h"
@@ -57,11 +57,10 @@ sokoke_magic_uri (const gchar* uri, const gchar* default_search_uri)
             guint i;
             for (i = 0; i < n; i++)
             {
-                SearchEngine* search_engine = (SearchEngine*)g_list_nth_data (
+                MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data (
                     searchEngines, i);
-                if (!strcmp (search_engine_get_keyword (search_engine),
-                                                        parts[0]))
-                    search_uri = search_engine->url;
+                if (!strcmp (midori_web_item_get_token (web_item), parts[0]))
+                    search_uri = midori_web_item_get_uri (web_item);
             }
         if (search_uri)
             search = g_strdup_printf (search_uri, parts[1]);
index 000c66ed3c34f9ad41802e5bcd7c3efca5c06893..427608df14ff79cfe5f4ad7c28cb708267be5424 100644 (file)
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
+ Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
 
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
@@ -16,6 +16,8 @@
 #include "main.h"
 #include "sokoke.h"
 
+#include "midori-webitem.h"
+
 #include <string.h>
 #include <gdk/gdkkeysyms.h>
 #include <glib/gi18n.h>
@@ -66,14 +68,14 @@ void update_searchEngine(guint index, GtkWidget* search)
         // Reset in case the index is out of range
         if(index >= n)
             index = 0;
-        SearchEngine* engine = (SearchEngine*)g_list_nth_data(searchEngines, index);
-        GdkPixbuf* pixbuf = load_web_icon(search_engine_get_icon(engine)
-         , GTK_ICON_SIZE_MENU, search);
+        MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data (searchEngines, index);
+        GdkPixbuf* pixbuf = load_web_icon (midori_web_item_get_icon (web_item),
+                                           GTK_ICON_SIZE_MENU, search);
         sexy_icon_entry_set_icon(SEXY_ICON_ENTRY(search)
          , SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE(gtk_image_new_from_pixbuf(pixbuf)));
         g_object_unref(pixbuf);
-        sokoke_entry_set_default_text(GTK_ENTRY(search)
-         , search_engine_get_short_name(engine));
+        sokoke_entry_set_default_text (GTK_ENTRY (search),
+                                       midori_web_item_get_name (web_item));
         // config->searchEngine = index;
     }
 }
@@ -95,11 +97,11 @@ void on_webSearch_icon_released(GtkWidget* widget, SexyIconEntryPosition* pos
         guint i;
         for(i = 0; i < n; i++)
         {
-            SearchEngine* engine = (SearchEngine*)g_list_nth_data(searchEngines, i);
-            menuitem = gtk_image_menu_item_new_with_label(
-             search_engine_get_short_name(engine));
-            GdkPixbuf* pixbuf = load_web_icon(search_engine_get_icon(engine)
-             , GTK_ICON_SIZE_MENU, menuitem);
+            MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data (searchEngines, i);
+            menuitem = gtk_image_menu_item_new_with_label (
+                midori_web_item_get_name (web_item));
+            GdkPixbuf* pixbuf = load_web_icon (midori_web_item_get_icon (web_item),
+                                               GTK_ICON_SIZE_MENU, menuitem);
             GtkWidget* icon = gtk_image_new_from_pixbuf(pixbuf);
             gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), icon);
             g_object_unref(pixbuf);
@@ -134,12 +136,12 @@ static void on_webSearch_engines_render_icon(GtkTreeViewColumn* column
  , GtkCellRenderer* renderer, GtkTreeModel* model, GtkTreeIter* iter
  , GtkWidget* treeview)
 {
-    SearchEngine* searchEngine;
-    gtk_tree_model_get(model, iter, ENGINES_COL_ENGINE, &searchEngine, -1);
+    MidoriWebItem* web_item;
+    gtk_tree_model_get(model, iter, ENGINES_COL_ENGINE, &web_item, -1);
 
     // TODO: Would it be better to not do this on every redraw?
-    const gchar* icon = search_engine_get_icon(searchEngine);
-    if(icon)
+    const gchar* icon = midori_web_item_get_icon (web_item);
+    if (icon)
     {
         GdkPixbuf* pixbuf = load_web_icon(icon, GTK_ICON_SIZE_DND, treeview);
         g_object_set(renderer, "pixbuf", pixbuf, NULL);
@@ -154,10 +156,10 @@ static void on_webSearch_engines_render_text(GtkTreeViewColumn* column
  , GtkCellRenderer* renderer, GtkTreeModel* model, GtkTreeIter* iter
  , GtkWidget* treeview)
 {
-    SearchEngine* searchEngine;
-    gtk_tree_model_get(model, iter, ENGINES_COL_ENGINE, &searchEngine, -1);
-    const gchar* name = search_engine_get_short_name(searchEngine);
-    const gchar* description = search_engine_get_description(searchEngine);
+    MidoriWebItem* web_item;
+    gtk_tree_model_get(model, iter, ENGINES_COL_ENGINE, &web_item, -1);
+    const gchar* name = midori_web_item_get_name (web_item);
+    const gchar* description = midori_web_item_get_description (web_item);
     gchar* markup = g_markup_printf_escaped("<b>%s</b>\n%s", name, description);
     g_object_set(renderer, "markup", markup, NULL);
     g_free(markup);
@@ -196,12 +198,12 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
     gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 5);
     GtkSizeGroup* sizegroup =  gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
-    SearchEngine* searchEngine;
+    MidoriWebItem* web_item;
     GtkTreeModel* liststore;
     GtkTreeIter iter;
     if(newEngine)
     {
-        searchEngine = search_engine_new();
+        web_item = midori_web_item_new ();
         gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog)
          , GTK_RESPONSE_ACCEPT, FALSE);
     }
@@ -209,7 +211,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
     {
         GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(webSearch->treeview));
         gtk_tree_selection_get_selected(selection, &liststore, &iter);
-        gtk_tree_model_get(liststore, &iter, ENGINES_COL_ENGINE, &searchEngine, -1);
+        gtk_tree_model_get(liststore, &iter, ENGINES_COL_ENGINE, &web_item, -1);
     }
 
     GtkWidget* hbox = gtk_hbox_new(FALSE, 8);
@@ -223,7 +225,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
     gtk_entry_set_activates_default(GTK_ENTRY(entry_shortName), TRUE);
     if(!newEngine)
         gtk_entry_set_text(GTK_ENTRY(entry_shortName)
-         , search_engine_get_short_name(searchEngine));
+         , STR_NON_NULL (midori_web_item_get_name (web_item)));
     gtk_box_pack_start(GTK_BOX(hbox), entry_shortName, TRUE, TRUE, 0);
     gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
     gtk_widget_show_all(hbox);
@@ -237,7 +239,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
     gtk_entry_set_activates_default(GTK_ENTRY(entry_description), TRUE);
     if(!newEngine)
         gtk_entry_set_text(GTK_ENTRY(entry_description)
-         , STR_NON_NULL(search_engine_get_description(searchEngine)));
+         , STR_NON_NULL (midori_web_item_get_description (web_item)));
     gtk_box_pack_start(GTK_BOX(hbox), entry_description, TRUE, TRUE, 0);
     gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
     gtk_widget_show_all(hbox);
@@ -251,7 +253,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
     gtk_entry_set_activates_default(GTK_ENTRY(entry_url), TRUE);
     if(!newEngine)
         gtk_entry_set_text(GTK_ENTRY(entry_url)
-         , STR_NON_NULL(search_engine_get_url(searchEngine)));
+         , STR_NON_NULL (midori_web_item_get_uri (web_item)));
     gtk_box_pack_start(GTK_BOX(hbox), entry_url, TRUE, TRUE, 0);
     gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
     gtk_widget_show_all(hbox);
@@ -265,7 +267,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
     gtk_entry_set_activates_default(GTK_ENTRY(entry_icon), TRUE);
     if(!newEngine)
         gtk_entry_set_text(GTK_ENTRY(entry_icon)
-         , STR_NON_NULL(search_engine_get_icon(searchEngine)));
+         , STR_NON_NULL (midori_web_item_get_icon (web_item)));
     gtk_box_pack_start(GTK_BOX(hbox), entry_icon, TRUE, TRUE, 0);
     gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
     gtk_widget_show_all(hbox);
@@ -279,7 +281,7 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
     gtk_entry_set_activates_default(GTK_ENTRY(entry_keyword), TRUE);
     if(!newEngine)
         gtk_entry_set_text(GTK_ENTRY(entry_keyword)
-         , STR_NON_NULL(search_engine_get_keyword(searchEngine)));
+         , STR_NON_NULL(midori_web_item_get_token (web_item)));
     gtk_box_pack_start(GTK_BOX(hbox), entry_keyword, TRUE, TRUE, 0);
     gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
     gtk_widget_show_all(hbox);
@@ -287,27 +289,27 @@ static void webSearch_editEngine_dialog_new(gboolean newEngine, CWebSearch* webS
     gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
     if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
     {
-        search_engine_set_short_name(searchEngine
+        midori_web_item_set_name (web_item
          , gtk_entry_get_text(GTK_ENTRY(entry_shortName)));
-        search_engine_set_description(searchEngine
+        midori_web_item_set_description (web_item
          , gtk_entry_get_text(GTK_ENTRY(entry_description)));
-        search_engine_set_url(searchEngine
+        midori_web_item_set_uri (web_item
          , gtk_entry_get_text(GTK_ENTRY(entry_url)));
         /*search_engine_set_input_encoding(searchEngine
          , gtk_entry_get_text(GTK_ENTRY(entry_inputEncoding)));*/
-        search_engine_set_icon(searchEngine
+        midori_web_item_set_icon (web_item
          , gtk_entry_get_text(GTK_ENTRY(entry_icon)));
-        search_engine_set_keyword(searchEngine
+        midori_web_item_set_token (web_item
          , gtk_entry_get_text(GTK_ENTRY(entry_keyword)));
 
         if(newEngine)
         {
-            searchEngines = g_list_append(searchEngines, searchEngine);
+            searchEngines = g_list_append(searchEngines, web_item);
             liststore = gtk_tree_view_get_model(GTK_TREE_VIEW(webSearch->treeview));
             gtk_list_store_append(GTK_LIST_STORE(liststore), &iter);
         }
         gtk_list_store_set(GTK_LIST_STORE(liststore), &iter
-             , ENGINES_COL_ENGINE, searchEngine, -1);
+             , ENGINES_COL_ENGINE, web_item, -1);
         webSearch_toggle_edit_buttons(TRUE, webSearch);
     }
     gtk_widget_destroy(dialog);
@@ -329,11 +331,11 @@ static void on_webSearch_remove(GtkWidget* widget, CWebSearch* webSearch)
     GtkTreeModel* liststore;
     GtkTreeIter iter;
     gtk_tree_selection_get_selected(selection, &liststore, &iter);
-    SearchEngine* searchEngine;
-    gtk_tree_model_get(liststore, &iter, ENGINES_COL_ENGINE, &searchEngine, -1);
+    MidoriWebItem* web_item;
+    gtk_tree_model_get(liststore, &iter, ENGINES_COL_ENGINE, &web_item, -1);
     gtk_list_store_remove(GTK_LIST_STORE(liststore), &iter);
-    search_engine_free(searchEngine);
-    searchEngines = g_list_remove(searchEngines, searchEngine);
+    g_object_unref (web_item);
+    searchEngines = g_list_remove (searchEngines, web_item);
     //update_searchEngine(config->searchEngine, webSearch->browser);
     webSearch_toggle_edit_buttons(g_list_nth(searchEngines, 0) != NULL, webSearch);
     // FIXME: we want to allow undo of some kind
@@ -370,7 +372,7 @@ GtkWidget* webSearch_manageSearchEngines_dialog_new(MidoriBrowser* browser)
     GtkTreeViewColumn* column;
     GtkCellRenderer* renderer_text; GtkCellRenderer* renderer_pixbuf;
     GtkListStore* liststore = gtk_list_store_new(ENGINES_COL_N
-     , G_TYPE_SEARCH_ENGINE);
+     , MIDORI_TYPE_WEB_ITEM);
     GtkWidget* treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
     gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
     column = gtk_tree_view_column_new();
@@ -393,9 +395,9 @@ GtkWidget* webSearch_manageSearchEngines_dialog_new(MidoriBrowser* browser)
     guint i;
     for(i = 0; i < n; i++)
     {
-        SearchEngine* searchEngine = (SearchEngine*)g_list_nth_data(searchEngines, i);
+        MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data (searchEngines, i);
         gtk_list_store_insert_with_values(GTK_LIST_STORE(liststore), NULL, i
-         , ENGINES_COL_ENGINE, searchEngine, -1);
+         , ENGINES_COL_ENGINE, web_item, -1);
     }
     g_object_unref(liststore);
     CWebSearch* webSearch = g_new0(CWebSearch, 1);
@@ -459,10 +461,10 @@ gboolean on_webSearch_scroll(GtkWidget* webView, GdkEventScroll* event, MidoriBr
 void on_webSearch_activate(GtkWidget* widget, MidoriBrowser* browser)
 {
     const gchar* keywords = gtk_entry_get_text(GTK_ENTRY(widget));
-    gchar* url;
-    SearchEngine* searchEngine = (SearchEngine*)g_list_nth_data(searchEngines, 0/*config->searchEngine*/);
-    if(searchEngine)
-        url = searchEngine->url;
+    const gchar* url;
+    MidoriWebItem* web_item = (MidoriWebItem*)g_list_nth_data (searchEngines, 0/*config->searchEngine*/);
+    if (web_item)
+        url = midori_web_item_get_uri (web_item);
     else // The location search is our fallback
      url = "";//config->locationSearch;
     gchar* search;