diff options
Diffstat (limited to 'embed')
-rw-r--r-- | embed/mozilla/EphyUtils.cpp | 16 | ||||
-rw-r--r-- | embed/mozilla/EphyUtils.h | 4 | ||||
-rw-r--r-- | embed/mozilla/mozilla-embed-single.cpp | 74 | ||||
-rw-r--r-- | embed/mozilla/mozilla-notifiers.cpp | 7 |
4 files changed, 76 insertions, 25 deletions
diff --git a/embed/mozilla/EphyUtils.cpp b/embed/mozilla/EphyUtils.cpp index 24e674591..a043b7e66 100644 --- a/embed/mozilla/EphyUtils.cpp +++ b/embed/mozilla/EphyUtils.cpp @@ -30,6 +30,7 @@ #include <nsIIOService.h> #include <nsIURI.h> +#include <nsIFile.h> #include <nsIDOMWindow.h> #include <nsIServiceManager.h> #undef MOZILLA_INTERNAL_API @@ -75,14 +76,23 @@ EphyUtils::NewURI (nsIURI **result, nsIURI *baseURI) { nsresult rv; - nsCOMPtr<nsIIOService> ioService; rv = EphyUtils::GetIOService (getter_AddRefs (ioService)); NS_ENSURE_SUCCESS (rv, rv); - rv = ioService->NewURI (spec, charset, baseURI, result); + return ioService->NewURI (spec, charset, baseURI, result); +} - return rv; +nsresult +EphyUtils::NewFileURI (nsIURI **result, + nsIFile *spec) +{ + nsresult rv; + nsCOMPtr<nsIIOService> ioService; + rv = EphyUtils::GetIOService (getter_AddRefs (ioService)); + NS_ENSURE_SUCCESS (rv, rv); + + return ioService->NewFileURI (spec, result); } GtkWidget * diff --git a/embed/mozilla/EphyUtils.h b/embed/mozilla/EphyUtils.h index 368e1e59f..a9357a3ba 100644 --- a/embed/mozilla/EphyUtils.h +++ b/embed/mozilla/EphyUtils.h @@ -30,6 +30,7 @@ class nsIDOMWindow; class nsIIOService; class nsIPrintSettings; class nsIURI; +class nsIFile; struct _EmbedPrintInfo; namespace EphyUtils @@ -46,6 +47,9 @@ namespace EphyUtils const char *charset = nsnull, nsIURI *baseURI = nsnull); + nsresult NewFileURI (nsIURI **result, + nsIFile *spec); + GtkWidget *FindEmbed (nsIDOMWindow *aDOMWindow); GtkWidget *FindGtkParent (nsIDOMWindow *aDOMWindow); diff --git a/embed/mozilla/mozilla-embed-single.cpp b/embed/mozilla/mozilla-embed-single.cpp index 21b9d7462..0c7d04e0a 100644 --- a/embed/mozilla/mozilla-embed-single.cpp +++ b/embed/mozilla/mozilla-embed-single.cpp @@ -70,6 +70,7 @@ #include <nsCPasswordManager.h> #include <nsIPermission.h> #include <nsIPermissionManager.h> +#include <nsIFile.h> #include <nsILocalFile.h> #include <nsIURI.h> @@ -138,7 +139,7 @@ struct MozillaEmbedSinglePrivate guint nm_callback_id; #endif #ifdef HAVE_GECKO_1_8 - char *user_css_uri; + char *user_css_file; guint user_css_enabled_notifier_id; EphyFileMonitor *user_css_file_monitor; guint user_css_enabled : 1; @@ -610,15 +611,31 @@ user_css_register (MozillaEmbedSingle *single) MozillaEmbedSinglePrivate *priv = single->priv; nsresult rv; + nsCOMPtr<nsILocalFile> file; + rv = NS_NewNativeLocalFile (nsDependentCString (priv->user_css_file), + PR_TRUE, getter_AddRefs (file)); + NS_ENSURE_SUCCESS (rv, ); + + PRBool exists = PR_FALSE; + rv = file->Exists (&exists); + if (NS_FAILED (rv) || !exists) return; + nsCOMPtr<nsIURI> uri; - rv = EphyUtils::NewURI (getter_AddRefs (uri), - nsDependentCString (priv->user_css_uri)); + rv = EphyUtils::NewFileURI (getter_AddRefs (uri), file); NS_ENSURE_SUCCESS (rv, ); nsCOMPtr<nsIStyleSheetService> service (do_GetService ("@mozilla.org/content/style-sheet-service;1", &rv)); NS_ENSURE_SUCCESS (rv, ); + PRBool isRegistered = PR_FALSE; + rv = service->SheetRegistered (uri, nsIStyleSheetService::USER_SHEET, + &isRegistered); + if (NS_SUCCEEDED (rv) && isRegistered) + { + rv = service->UnregisterSheet (uri, nsIStyleSheetService::USER_SHEET); + } + rv = service->LoadAndRegisterSheet (uri, nsIStyleSheetService::AGENT_SHEET); if (NS_FAILED (rv)) { @@ -632,9 +649,13 @@ user_css_unregister (MozillaEmbedSingle *single) MozillaEmbedSinglePrivate *priv = single->priv; nsresult rv; + nsCOMPtr<nsILocalFile> file; + rv = NS_NewNativeLocalFile (nsDependentCString (priv->user_css_file), + PR_TRUE, getter_AddRefs (file)); + NS_ENSURE_SUCCESS (rv, ); + nsCOMPtr<nsIURI> uri; - rv = EphyUtils::NewURI (getter_AddRefs (uri), - nsDependentCString (priv->user_css_uri)); + rv = EphyUtils::NewFileURI (getter_AddRefs (uri), file); NS_ENSURE_SUCCESS (rv, ); nsCOMPtr<nsIStyleSheetService> service @@ -657,12 +678,19 @@ user_css_unregister (MozillaEmbedSingle *single) static void user_css_file_monitor_func (EphyFileMonitor *, const char *, + GnomeVFSMonitorEventType event_type, MozillaEmbedSingle *single) { LOG ("Reregistering the user style sheet"); - user_css_unregister (single); - user_css_register (single); + if (event_type == GNOME_VFS_MONITOR_EVENT_DELETED) + { + user_css_unregister (single); + } + else + { + user_css_register (single); + } } static void @@ -683,16 +711,21 @@ user_css_enabled_notify (GConfClient *client, if (enabled) { + char *uri; + user_css_register (single); + uri = gnome_vfs_get_uri_from_local_path (priv->user_css_file); + g_assert (priv->user_css_file_monitor == NULL); priv->user_css_file_monitor = - ephy_file_monitor_add (priv->user_css_uri, - GNOME_VFS_MONITOR_FILE, - USER_CSS_LOAD_DELAY, - (EphyFileMonitorFunc) user_css_file_monitor_func, - NULL, - single); + ephy_file_monitor_add (uri, + GNOME_VFS_MONITOR_FILE, + USER_CSS_LOAD_DELAY, + (EphyFileMonitorFunc) user_css_file_monitor_func, + NULL, + single); + g_free (uri); } else { @@ -710,13 +743,10 @@ static void mozilla_stylesheet_init (MozillaEmbedSingle *single) { MozillaEmbedSinglePrivate *priv = single->priv; - char *user_css_file; - user_css_file = g_build_filename (ephy_dot_dir (), - USER_STYLESHEET_FILENAME, - NULL); - priv->user_css_uri = gnome_vfs_get_uri_from_local_path (user_css_file); - g_free (user_css_file); + priv->user_css_file = g_build_filename (ephy_dot_dir (), + USER_STYLESHEET_FILENAME, + NULL); user_css_enabled_notify (NULL, 0, NULL, single); priv->user_css_enabled_notifier_id = @@ -743,10 +773,10 @@ mozilla_stylesheet_shutdown (MozillaEmbedSingle *single) priv->user_css_file_monitor = NULL; } - if (priv->user_css_uri != NULL) + if (priv->user_css_file != NULL) { - g_free (priv->user_css_uri); - priv->user_css_uri = NULL; + g_free (priv->user_css_file); + priv->user_css_file = NULL; } } diff --git a/embed/mozilla/mozilla-notifiers.cpp b/embed/mozilla/mozilla-notifiers.cpp index 711d401eb..0166bd980 100644 --- a/embed/mozilla/mozilla-notifiers.cpp +++ b/embed/mozilla/mozilla-notifiers.cpp @@ -921,6 +921,8 @@ mozilla_font_notifiers_init (void) const EphyFontsLanguageInfo *font_languages; guint n_font_languages, i; + eel_gconf_monitor_add ("/desktop/gnome/interface"); + font_languages = ephy_font_languages (); n_font_languages = ephy_font_n_languages (); @@ -1071,6 +1073,8 @@ mozilla_font_notifiers_init (void) static void mozilla_font_notifiers_shutdown (void) { + eel_gconf_monitor_remove ("/desktop/gnome/interface"); + eel_gconf_notification_remove (desktop_font_data[0].cnxn_id); eel_gconf_notification_remove (desktop_font_data[1].cnxn_id); eel_gconf_notification_remove (minimum_font_size_data->cnxn_id); @@ -1083,6 +1087,9 @@ mozilla_font_notifiers_shutdown (void) g_strfreev (desktop_font_data[1].font_name_prefs); g_strfreev (desktop_font_data[1].font_size_prefs); g_strfreev (minimum_font_size_data->prefs); + + g_free (desktop_font_data); + g_free (minimum_font_size_data); } extern "C" gboolean |