[Xfce4-commits] <midori:master> Move loading and saving into search action
Christian Dywan
noreply at xfce.org
Thu Nov 22 02:02:01 CET 2012
Updating branch refs/heads/master
to b8fc0f8d26f38ab3718735bfc3d30f039dd715db (commit)
from 841a84aff3d751cecd3c51198cd719e36676d765 (commit)
commit b8fc0f8d26f38ab3718735bfc3d30f039dd715db
Author: Christian Dywan <christian at twotoasts.de>
Date: Thu Nov 22 01:25:41 2012 +0100
Move loading and saving into search action
midori/main.c | 161 ++----------------------------------------
midori/midori-searchaction.c | 156 ++++++++++++++++++++++++++++++++++++++++
midori/midori-searchaction.h | 17 +++++
3 files changed, 179 insertions(+), 155 deletions(-)
diff --git a/midori/main.c b/midori/main.c
index 6a4c542..77d06f0 100644
--- a/midori/main.c
+++ b/midori/main.c
@@ -21,6 +21,7 @@
#include "midori-panel.h"
#include "midori-platform.h"
#include "midori-preferences.h"
+#include "midori-searchaction.h"
#include <midori/midori-core.h>
#include <config.h>
@@ -287,119 +288,6 @@ settings_save_to_file (MidoriWebSettings* settings,
return saved;
}
-static KatzeArray*
-search_engines_new_from_file (const gchar* filename,
- GError** error)
-{
- KatzeArray* search_engines;
- GKeyFile* key_file;
- gchar** engines;
- guint i, j, n_properties;
- KatzeItem* item;
- GParamSpec** pspecs;
- const gchar* property;
- gchar* value;
-
- search_engines = katze_array_new (KATZE_TYPE_ITEM);
- key_file = g_key_file_new ();
- g_key_file_load_from_file (key_file, filename,
- G_KEY_FILE_KEEP_COMMENTS, error);
- engines = g_key_file_get_groups (key_file, NULL);
- pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (search_engines),
- &n_properties);
- for (i = 0; engines[i] != NULL; i++)
- {
- item = katze_item_new ();
- for (j = 0; j < n_properties; j++)
- {
- if (!G_IS_PARAM_SPEC_STRING (pspecs[j]))
- continue;
- property = g_param_spec_get_name (pspecs[j]);
- value = g_key_file_get_string (key_file, engines[i],
- property, NULL);
- g_object_set (item, property, value, NULL);
- g_free (value);
- }
- katze_array_add_item (search_engines, item);
- }
- g_free (pspecs);
- g_strfreev (engines);
- g_key_file_free (key_file);
- return search_engines;
-}
-
-static KatzeArray*
-search_engines_new_from_folder (GString* error_messages)
-{
- gchar* config_file = midori_paths_get_config_filename_for_reading ("search");
- GError* error = NULL;
- KatzeArray* search_engines;
-
- search_engines = search_engines_new_from_file (config_file, &error);
- /* We ignore for instance empty files */
- if (error && (error->code == G_KEY_FILE_ERROR_PARSE
- || error->code == G_FILE_ERROR_NOENT))
- {
- g_error_free (error);
- error = NULL;
- }
- if (!error && katze_array_is_empty (search_engines))
- {
- katze_assign (config_file,
- midori_paths_get_preset_filename (NULL, "search"));
- katze_object_assign (search_engines,
- search_engines_new_from_file (config_file, NULL));
- }
- else if (error)
- {
- if (error->code != G_FILE_ERROR_NOENT && error_messages)
- g_string_append_printf (error_messages,
- _("The search engines couldn't be loaded. %s\n"),
- error->message);
- g_error_free (error);
- }
- g_free (config_file);
- return search_engines;
-}
-
-static gboolean
-search_engines_save_to_file (KatzeArray* search_engines,
- const gchar* filename,
- GError** error)
-{
- GKeyFile* key_file;
- guint j, n_properties;
- KatzeItem* item;
- const gchar* name;
- GParamSpec** pspecs;
- const gchar* property;
- gchar* value;
- gboolean saved;
-
- key_file = g_key_file_new ();
- pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (search_engines),
- &n_properties);
- KATZE_ARRAY_FOREACH_ITEM (item, search_engines)
- {
- name = katze_item_get_name (item);
- for (j = 0; j < n_properties; j++)
- {
- if (!G_IS_PARAM_SPEC_STRING (pspecs[j]))
- continue;
- property = g_param_spec_get_name (pspecs[j]);
- g_object_get (item, property, &value, NULL);
- if (value)
- g_key_file_set_string (key_file, name, property, value);
- g_free (value);
- }
- }
- g_free (pspecs);
- saved = sokoke_key_file_save_to_file (key_file, filename, error);
- g_key_file_free (key_file);
-
- return saved;
-}
-
static void
midori_history_clear_cb (KatzeArray* array,
sqlite3* db)
@@ -542,31 +430,6 @@ accel_map_changed_cb (GtkAccelMap* accel_map,
}
static void
-midori_search_engines_modify_cb (KatzeArray* array,
- gpointer item,
- KatzeArray* search_engines)
-{
- gchar* config_file = midori_paths_get_config_filename_for_writing ("search");
- GError* error = NULL;
- if (!search_engines_save_to_file (search_engines, config_file, &error))
- {
- g_warning (_("The search engines couldn't be saved. %s"),
- error->message);
- g_error_free (error);
- }
- g_free (config_file);
-}
-
-static void
-midori_search_engines_move_item_cb (KatzeArray* array,
- gpointer item,
- gint position,
- KatzeArray* search_engines)
-{
- midori_search_engines_modify_cb (array, item, search_engines);
-}
-
-static void
midori_trash_add_item_no_save_cb (KatzeArray* trash,
GObject* item)
{
@@ -1997,7 +1860,7 @@ main (int argc,
{
settings = settings_and_accels_new (&extensions);
g_strfreev (extensions);
- search_engines = search_engines_new_from_folder (NULL);
+ search_engines = midori_search_engines_new_from_folder (NULL);
g_object_set (browser, "search-engines", search_engines, NULL);
g_object_unref (search_engines);
}
@@ -2212,7 +2075,7 @@ main (int argc,
midori_startup_timer ("Config and accels read: \t%f");
/* Load search engines */
- search_engines = search_engines_new_from_folder (error_messages);
+ search_engines = midori_search_engines_new_from_folder (error_messages);
/* Pick first search engine as default if not set */
g_object_get (settings, "location-entry-search", &uri, NULL);
if (!(uri && *uri) && !katze_array_is_empty (search_engines))
@@ -2349,21 +2212,9 @@ main (int argc,
}
}
- if (1)
- {
- g_signal_connect_after (search_engines, "add-item",
- G_CALLBACK (midori_search_engines_modify_cb), search_engines);
- g_signal_connect_after (search_engines, "remove-item",
- G_CALLBACK (midori_search_engines_modify_cb), search_engines);
- if (!katze_array_is_empty (search_engines))
- {
- KATZE_ARRAY_FOREACH_ITEM (item, search_engines)
- g_signal_connect_after (item, "notify",
- G_CALLBACK (midori_search_engines_modify_cb), search_engines);
- g_signal_connect_after (search_engines, "move-item",
- G_CALLBACK (midori_search_engines_move_item_cb), search_engines);
- }
- }
+ katze_assign (config_file, g_build_filename (config, "search", NULL));
+ midori_search_engines_set_filename (search_engines, config_file);
+
g_signal_connect_after (trash, "add-item",
G_CALLBACK (midori_trash_add_item_cb), NULL);
g_signal_connect_after (trash, "remove-item",
diff --git a/midori/midori-searchaction.c b/midori/midori-searchaction.c
index 0def72b..5aadec4 100644
--- a/midori/midori-searchaction.c
+++ b/midori/midori-searchaction.c
@@ -1592,3 +1592,159 @@ midori_search_action_get_dialog (MidoriSearchAction* search_action)
search_action->dialog = dialog;
return dialog;
}
+
+KatzeArray*
+midori_search_engines_new_from_file (const gchar* filename,
+ GError** error)
+{
+ KatzeArray* search_engines;
+ GKeyFile* key_file;
+ gchar** engines;
+ guint i, j, n_properties;
+ KatzeItem* item;
+ GParamSpec** pspecs;
+ const gchar* property;
+ gchar* value;
+
+ search_engines = katze_array_new (KATZE_TYPE_ITEM);
+ key_file = g_key_file_new ();
+ g_key_file_load_from_file (key_file, filename,
+ G_KEY_FILE_KEEP_COMMENTS, error);
+ engines = g_key_file_get_groups (key_file, NULL);
+ pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (search_engines),
+ &n_properties);
+ for (i = 0; engines[i] != NULL; i++)
+ {
+ item = katze_item_new ();
+ for (j = 0; j < n_properties; j++)
+ {
+ if (!G_IS_PARAM_SPEC_STRING (pspecs[j]))
+ continue;
+ property = g_param_spec_get_name (pspecs[j]);
+ value = g_key_file_get_string (key_file, engines[i], property, NULL);
+ g_object_set (item, property, value, NULL);
+ g_free (value);
+ }
+ katze_array_add_item (search_engines, item);
+ }
+ g_free (pspecs);
+ g_strfreev (engines);
+ g_key_file_free (key_file);
+ return search_engines;
+}
+
+KatzeArray*
+midori_search_engines_new_from_folder (GString* error_messages)
+{
+ gchar* config_file = midori_paths_get_config_filename_for_reading ("search");
+ GError* error = NULL;
+ KatzeArray* search_engines = midori_search_engines_new_from_file (config_file, &error);
+ /* We ignore for instance empty files */
+ if (error && (error->code == G_KEY_FILE_ERROR_PARSE
+ || error->code == G_FILE_ERROR_NOENT))
+ {
+ g_error_free (error);
+ error = NULL;
+ }
+ if (!error && katze_array_is_empty (search_engines))
+ {
+ katze_assign (config_file,
+ midori_paths_get_preset_filename (NULL, "search"));
+ katze_object_assign (search_engines,
+ midori_search_engines_new_from_file (config_file, NULL));
+ }
+ else if (error)
+ {
+ if (error->code != G_FILE_ERROR_NOENT && error_messages)
+ g_string_append_printf (error_messages,
+ _("The search engines couldn't be loaded. %s\n"),
+ error->message);
+ g_error_free (error);
+ }
+ g_free (config_file);
+ return search_engines;
+}
+
+gboolean
+midori_search_engines_save_to_file (KatzeArray* search_engines,
+ const gchar* filename,
+ GError** error)
+{
+ GKeyFile* key_file;
+ guint j, n_properties;
+ KatzeItem* item;
+ const gchar* name;
+ GParamSpec** pspecs;
+ const gchar* property;
+ gchar* value;
+ gboolean saved;
+
+ key_file = g_key_file_new ();
+ pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (search_engines),
+ &n_properties);
+ KATZE_ARRAY_FOREACH_ITEM (item, search_engines)
+ {
+ name = katze_item_get_name (item);
+ for (j = 0; j < n_properties; j++)
+ {
+ if (!G_IS_PARAM_SPEC_STRING (pspecs[j]))
+ continue;
+ property = g_param_spec_get_name (pspecs[j]);
+ g_object_get (item, property, &value, NULL);
+ if (value)
+ g_key_file_set_string (key_file, name, property, value);
+ g_free (value);
+ }
+ }
+ g_free (pspecs);
+ saved = sokoke_key_file_save_to_file (key_file, filename, error);
+ g_key_file_free (key_file);
+
+ return saved;
+}
+
+static void
+midori_search_engines_modify_cb (KatzeArray* array,
+ gpointer item,
+ KatzeArray* search_engines)
+{
+ gchar* config_file = g_object_get_data (G_OBJECT (search_engines), "search-engines-filename");
+ GError* error = NULL;
+ if (!midori_search_engines_save_to_file (search_engines, config_file, &error))
+ {
+ g_warning (_("The search engines couldn't be saved. %s"),
+ error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+midori_search_engines_move_item_cb (KatzeArray* array,
+ gpointer item,
+ gint position,
+ KatzeArray* search_engines)
+{
+ midori_search_engines_modify_cb (array, item, search_engines);
+}
+
+void
+midori_search_engines_set_filename (KatzeArray* search_engines,
+ const gchar* filename)
+{
+ g_object_set_data_full (G_OBJECT (search_engines), "search-engines-filename",
+ g_strdup (filename), (GDestroyNotify)g_free);
+ g_signal_connect_after (search_engines, "add-item",
+ G_CALLBACK (midori_search_engines_modify_cb), search_engines);
+ g_signal_connect_after (search_engines, "remove-item",
+ G_CALLBACK (midori_search_engines_modify_cb), search_engines);
+ if (!katze_array_is_empty (search_engines))
+ {
+ KatzeItem* item;
+ KATZE_ARRAY_FOREACH_ITEM (item, search_engines)
+ g_signal_connect_after (item, "notify",
+ G_CALLBACK (midori_search_engines_modify_cb), search_engines);
+ g_signal_connect_after (search_engines, "move-item",
+ G_CALLBACK (midori_search_engines_move_item_cb), search_engines);
+ }
+}
+
diff --git a/midori/midori-searchaction.h b/midori/midori-searchaction.h
index 1f1d220..d7f20e6 100644
--- a/midori/midori-searchaction.h
+++ b/midori/midori-searchaction.h
@@ -82,6 +82,23 @@ KatzeItem*
midori_search_action_get_engine_for_form (WebKitWebView* web_view,
PangoEllipsizeMode ellipsize);
+KatzeArray*
+midori_search_engines_new_from_file (const gchar* filename,
+ GError** error);
+
+
+KatzeArray*
+midori_search_engines_new_from_folder (GString* error_messages);
+
+gboolean
+midori_search_engines_save_to_file (KatzeArray* search_engines,
+ const gchar* filename,
+ GError** error);
+
+void
+midori_search_engines_set_filename (KatzeArray* search_engines,
+ const gchar* filename);
+
G_END_DECLS
#endif /* __MIDORI_SEARCH_ACTION_H__ */
More information about the Xfce4-commits
mailing list