diff --git a/midori/Makefile.am b/midori/Makefile.am index 5f72dc2f..61146edc 100644 --- a/midori/Makefile.am +++ b/midori/Makefile.am @@ -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 \ diff --git a/midori/midori-trash.c b/midori/midori-trash.c index 10dce2c8..b546e121 100644 --- a/midori/midori-trash.c +++ b/midori/midori-trash.c @@ -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 index 00000000..bf74aff3 --- /dev/null +++ b/midori/midori-webitem.c @@ -0,0 +1,367 @@ +/* + Copyright (C) 2008 Christian Dywan + + 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 +#include + +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 index 00000000..c1276ab3 --- /dev/null +++ b/midori/midori-webitem.h @@ -0,0 +1,83 @@ +/* + Copyright (C) 2008 Christian Dywan + + 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 + +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__ */ diff --git a/midori/search.c b/midori/search.c index 26afcb5e..1577b9c8 100644 --- a/midori/search.c +++ b/midori/search.c @@ -1,5 +1,5 @@ /* - Copyright (C) 2007 Christian Dywan + Copyright (C) 2007-2008 Christian Dywan This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -11,11 +11,9 @@ #include "search.h" -#include "sokoke.h" -#include +#include "midori-webitem.h" -#include -#include +#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)); -} diff --git a/midori/search.h b/midori/search.h index c8aa7093..7ca92912 100644 --- a/midori/search.h +++ b/midori/search.h @@ -15,17 +15,6 @@ #include #include -// 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__ */ diff --git a/midori/sokoke.c b/midori/sokoke.c index 20dc48e0..6130ffa0 100644 --- a/midori/sokoke.c +++ b/midori/sokoke.c @@ -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]); diff --git a/midori/webSearch.c b/midori/webSearch.c index 000c66ed..427608df 100644 --- a/midori/webSearch.c +++ b/midori/webSearch.c @@ -1,5 +1,5 @@ /* - Copyright (C) 2007 Christian Dywan + Copyright (C) 2007-2008 Christian Dywan 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 #include #include @@ -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("%s\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;