[Xfce4-commits] <midori:master> Use new style API for global user stylesheets
Christian Dywan
noreply at xfce.org
Wed Oct 26 23:14:03 CEST 2011
Updating branch refs/heads/master
to 4854e2e2d7b5c654a0f37dda558e34cb1c12a496 (commit)
from 968c9675924d8d84fc9b2e74e06d0edfa315728a (commit)
commit 4854e2e2d7b5c654a0f37dda558e34cb1c12a496
Author: Christian Dywan <christian at twotoasts.de>
Date: Wed Oct 26 21:20:11 2011 +0200
Use new style API for global user stylesheets
extensions/addons.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 56 insertions(+), 1 deletions(-)
diff --git a/extensions/addons.c b/extensions/addons.c
index 8709e82..ee1a15f 100644
--- a/extensions/addons.c
+++ b/extensions/addons.c
@@ -1076,6 +1076,7 @@ css_metadata_from_file (const gchar* filename,
static gboolean
addons_get_element_content (gchar* file_path,
AddonsKind kind,
+ gboolean has_metadata,
gchar** content)
{
gchar* file_content;
@@ -1156,6 +1157,8 @@ addons_get_element_content (gchar* file_path,
g_string_append_c (content_chunks, file_content[i]);
}
+ if (has_metadata)
+ {
*content = g_strdup_printf (
"window.addEventListener ('DOMContentLoaded',"
"function () {"
@@ -1169,6 +1172,12 @@ addons_get_element_content (gchar* file_path,
"}, true);",
content_chunks->str);
g_string_free (content_chunks, TRUE);
+ }
+ else
+ {
+ *content = content_chunks->str;
+ g_string_free (content_chunks, FALSE);
+ }
}
g_free (file_content);
if (*content)
@@ -1252,7 +1261,7 @@ addons_update_elements (MidoriExtension* extension,
katze_assign (element->displayname, name);
if (!element->broken)
- if (!addons_get_element_content (fullpath, kind,
+ if (!addons_get_element_content (fullpath, kind, FALSE,
&(element->script_content)))
element->broken = TRUE;
@@ -1268,6 +1277,7 @@ addons_update_elements (MidoriExtension* extension,
if (!element->broken)
if (!addons_get_element_content (fullpath, kind,
+ element->includes || element->excludes,
&(element->script_content)))
element->broken = TRUE;
@@ -1550,6 +1560,41 @@ addons_browser_destroy (MidoriBrowser* browser,
gtk_widget_destroy (styles);
}
+static char*
+addons_generate_global_stylesheet (MidoriExtension* extension)
+{
+ GSList* styles;
+ struct AddonElement* style;
+ struct AddonsList* styles_list;
+ GString* style_string = g_string_new ("");
+
+ styles_list = g_object_get_data (G_OBJECT (extension), "styles-list");
+ styles = styles_list->elements;
+ while (styles != NULL)
+ {
+ style = styles->data;
+ if (style->enabled &&
+ !(style->includes || style->excludes || style->broken))
+ {
+ style_string = g_string_append (style_string, style->script_content);
+ }
+ styles = g_slist_next (styles);
+ }
+
+ return g_string_free (style_string, FALSE);
+}
+
+static void
+addons_apply_global_stylesheet (MidoriExtension* extension)
+{
+ MidoriApp* app = midori_extension_get_app (extension);
+ MidoriWebSettings* settings = katze_object_get_object (app, "settings");
+ gchar* data = addons_generate_global_stylesheet (extension);
+ midori_web_settings_add_style (settings, "addons", data);
+ g_free (data);
+ g_object_unref (settings);
+}
+
GtkWidget*
addons_new (AddonsKind kind, MidoriExtension* extension)
{
@@ -1572,6 +1617,10 @@ addons_new (AddonsKind kind, MidoriExtension* extension)
GTK_TREE_MODEL (liststore));
gtk_widget_queue_draw (GTK_WIDGET (ADDONS(addons)->treeview));
+ if (kind == ADDONS_USER_STYLES)
+ g_signal_connect_swapped (liststore, "row-changed",
+ G_CALLBACK (addons_apply_global_stylesheet), extension);
+
return addons;
}
@@ -1672,12 +1721,14 @@ static void
addons_deactivate_cb (MidoriExtension* extension,
MidoriApp* app)
{
+ MidoriWebSettings* settings = katze_object_get_object (app, "settings");
KatzeArray* browsers;
MidoriBrowser* browser;
GSource* source;
addons_disable_monitors (extension);
addons_save_settings (NULL, extension);
+ midori_web_settings_remove_style (settings, "addons");
browsers = katze_object_get_object (app, "browsers");
KATZE_ARRAY_FOREACH_ITEM (browser, browsers)
@@ -1695,6 +1746,7 @@ addons_deactivate_cb (MidoriExtension* extension,
extension, addons_deactivate_cb, app);
g_object_unref (browsers);
+ g_object_unref (settings);
}
static gboolean
@@ -1781,6 +1833,7 @@ static void
addons_activate_cb (MidoriExtension* extension,
MidoriApp* app)
{
+ MidoriWebSettings* settings = katze_object_get_object (app, "settings");
KatzeArray* browsers;
MidoriBrowser* browser;
@@ -1789,10 +1842,12 @@ addons_activate_cb (MidoriExtension* extension,
addons_monitor_directories (extension, ADDONS_USER_STYLES);
addons_update_elements (extension, ADDONS_USER_SCRIPTS);
addons_monitor_directories (extension, ADDONS_USER_SCRIPTS);
+ midori_web_settings_remove_style (settings, "addons");
KATZE_ARRAY_FOREACH_ITEM (browser, browsers)
addons_app_add_browser_cb (app, browser, extension);
g_object_unref (browsers);
+ g_object_unref (settings);
g_signal_connect (app, "add-browser",
G_CALLBACK (addons_app_add_browser_cb), extension);
More information about the Xfce4-commits
mailing list