aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--src/ephy-shell.c53
-rwxr-xr-xsrc/ephy-toolbars-model.c80
3 files changed, 82 insertions, 63 deletions
diff --git a/ChangeLog b/ChangeLog
index 736b5de1b..c79a2907b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2005-02-09 Christian Persch <chpe@cvs.gnome.org>
+ * src/ephy-shell.c: (ephy_shell_finalize),
+ (ephy_shell_get_toolbars_model):
+ * src/ephy-toolbars-model.c: (update_flags),
+ (update_flags_and_save_changes), (get_toolbar_style),
+ (toolbar_style_notifier), (ephy_toolbars_model_init),
+ (ephy_toolbars_model_finalize):
+
+ Move style notifier to ephy-toolbars-model, and also apply
+ the flags to newly added toolbars.
+
+2005-02-09 Christian Persch <chpe@cvs.gnome.org>
+
* embed/mozilla/MozDownload.cpp:
Implement nsIWebProgressListener. Fixes bug #165328.
diff --git a/src/ephy-shell.c b/src/ephy-shell.c
index 62e6f5692..c510adbf4 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -40,7 +40,6 @@
#include "ephy-session.h"
#include "downloader-view.h"
#include "egg-toolbars-model.h"
-#include "eggtypebuiltins.h"
#include "ephy-toolbars-model.h"
#include "ephy-toolbar.h"
#include "ephy-automation.h"
@@ -73,7 +72,6 @@ struct _EphyShellPrivate
EphySession *session;
EphyBookmarks *bookmarks;
EggToolbarsModel *toolbars_model;
- guint toolbar_style_notifier_id;
EggToolbarsModel *fs_toolbars_model;
EphyExtensionsManager *extensions_manager;
GObject *dbus_service;
@@ -547,11 +545,6 @@ ephy_shell_finalize (GObject *object)
LOG ("Unref toolbars model");
if (shell->priv->toolbars_model)
- if (shell->priv->toolbar_style_notifier_id != 0)
- {
- eel_gconf_notification_remove (shell->priv->toolbar_style_notifier_id);
- }
- if (shell->priv->toolbars_model)
{
g_object_unref (shell->priv->toolbars_model);
}
@@ -813,46 +806,6 @@ ephy_shell_get_bookmarks (EphyShell *shell)
return shell->priv->bookmarks;
}
-static void
-toolbar_style_notifier (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- EphyShell *shell)
-{
- EggToolbarsModel *model = shell->priv->toolbars_model;
- GFlagsClass *flags_class;
- const GFlagsValue *value;
- EggTbModelFlags flags, new_flags = 0;
- char *pref;
- int i, n_toolbars;
-
- g_return_if_fail (model != NULL);
-
- pref = eel_gconf_get_string (CONF_INTERFACE_TOOLBAR_STYLE);
- if (pref != NULL)
- {
- flags_class = g_type_class_ref (EGG_TYPE_TB_MODEL_FLAGS);
- value = g_flags_get_value_by_nick (flags_class, pref);
- if (value != NULL)
- {
- new_flags = value->value;
- }
- g_type_class_unref (flags_class);
- }
- new_flags &= EGG_TB_MODEL_STYLES_MASK;
-
- n_toolbars = egg_toolbars_model_n_toolbars (model);
- for (i = 0; i < n_toolbars; i++)
- {
- flags = egg_toolbars_model_get_flags (model, i);
- flags &= ~EGG_TB_MODEL_STYLES_MASK;
- flags |= new_flags;
- egg_toolbars_model_set_flags (model, i, new_flags);
- }
-
- g_free (pref);
-}
-
GObject *
ephy_shell_get_toolbars_model (EphyShell *shell, gboolean fullscreen)
{
@@ -895,12 +848,6 @@ ephy_shell_get_toolbars_model (EphyShell *shell, gboolean fullscreen)
/* ok, now we can load the model */
ephy_toolbars_model_load
(EPHY_TOOLBARS_MODEL (shell->priv->toolbars_model));
-
- toolbar_style_notifier (NULL, 0, NULL, shell);
- shell->priv->toolbar_style_notifier_id = eel_gconf_notification_add
- (CONF_INTERFACE_TOOLBAR_STYLE,
- (GConfClientNotifyFunc) toolbar_style_notifier, shell);
-
}
return G_OBJECT (shell->priv->toolbars_model);
diff --git a/src/ephy-toolbars-model.c b/src/ephy-toolbars-model.c
index 785974877..b36c0cc1b 100755
--- a/src/ephy-toolbars-model.c
+++ b/src/ephy-toolbars-model.c
@@ -23,6 +23,9 @@
#include "ephy-toolbars-model.h"
#include "ephy-file-helpers.h"
+#include "ephy-prefs.h"
+#include "eel-gconf-extensions.h"
+#include "eggtypebuiltins.h"
#include "ephy-debug.h"
#include <string.h>
@@ -35,7 +38,9 @@
struct _EphyToolbarsModelPrivate
{
char *xml_file;
+ EggTbModelFlags style;
guint timeout;
+ guint style_notifier_id;
};
static void ephy_toolbars_model_class_init (EphyToolbarsModelClass *klass);
@@ -97,7 +102,7 @@ save_changes (EphyToolbarsModel *model)
}
static void
-update_flags_and_save_changes (EphyToolbarsModel *model)
+update_flags (EphyToolbarsModel *model)
{
EggToolbarsModel *eggmodel = EGG_TOOLBARS_MODEL (model);
int i, n_toolbars;
@@ -119,11 +124,17 @@ update_flags_and_save_changes (EphyToolbarsModel *model)
g_return_if_fail (t_name != NULL);
flags = egg_toolbars_model_get_flags (eggmodel, i);
- flags &= ~EGG_TB_MODEL_NOT_REMOVABLE;
+ flags &= ~(EGG_TB_MODEL_NOT_REMOVABLE | EGG_TB_MODEL_STYLES_MASK);
flags |= flag;
+ flags |= model->priv->style;
egg_toolbars_model_set_flags (eggmodel, i, flags);
}
+}
+static void
+update_flags_and_save_changes (EphyToolbarsModel *model)
+{
+ update_flags (model);
save_changes (model);
}
@@ -150,6 +161,43 @@ get_toolbar_pos (EggToolbarsModel *model,
return -1;
}
+static EggTbModelFlags
+get_toolbar_style (void)
+{
+ GFlagsClass *flags_class;
+ const GFlagsValue *value;
+ EggTbModelFlags flags = 0;
+ char *pref;
+
+ pref = eel_gconf_get_string (CONF_INTERFACE_TOOLBAR_STYLE);
+ if (pref != NULL)
+ {
+ flags_class = g_type_class_ref (EGG_TYPE_TB_MODEL_FLAGS);
+ value = g_flags_get_value_by_nick (flags_class, pref);
+ if (value != NULL)
+ {
+ flags = value->value;
+ }
+ g_type_class_unref (flags_class);
+ }
+ flags &= EGG_TB_MODEL_STYLES_MASK;
+
+ g_free (pref);
+
+ return flags;
+}
+
+static void
+toolbar_style_notifier (GConfClient *client,
+ guint cnxn_id,
+ GConfEntry *entry,
+ EphyToolbarsModel *model)
+{
+ model->priv->style = get_toolbar_style ();
+
+ update_flags (model);
+}
+
void
ephy_toolbars_model_load (EphyToolbarsModel *model)
{
@@ -203,12 +251,19 @@ ephy_toolbars_model_load (EphyToolbarsModel *model)
static void
ephy_toolbars_model_init (EphyToolbarsModel *model)
{
- model->priv = EPHY_TOOLBARS_MODEL_GET_PRIVATE (model);
+ EphyToolbarsModelPrivate *priv;
+
+ priv = model->priv = EPHY_TOOLBARS_MODEL_GET_PRIVATE (model);
- model->priv->xml_file = g_build_filename (ephy_dot_dir (),
- EPHY_TOOLBARS_XML_FILE,
- NULL);
+ priv->xml_file = g_build_filename (ephy_dot_dir (),
+ EPHY_TOOLBARS_XML_FILE,
+ NULL);
+ priv->style = get_toolbar_style ();
+ priv->style_notifier_id = eel_gconf_notification_add
+ (CONF_INTERFACE_TOOLBAR_STYLE,
+ (GConfClientNotifyFunc) toolbar_style_notifier, model);
+
g_signal_connect_after (model, "item_added",
G_CALLBACK (save_changes), NULL);
g_signal_connect_after (model, "item_removed",
@@ -233,14 +288,19 @@ static void
ephy_toolbars_model_finalize (GObject *object)
{
EphyToolbarsModel *model = EPHY_TOOLBARS_MODEL (object);
+ EphyToolbarsModelPrivate *priv = model->priv;
+
+ if (priv->style_notifier_id != 0)
+ {
+ eel_gconf_notification_remove (priv->style_notifier_id);
+ }
- if (model->priv->timeout != 0)
+ if (priv->timeout != 0)
{
- g_source_remove (model->priv->timeout);
- model->priv->timeout = 0;
+ g_source_remove (priv->timeout);
}
- g_free (model->priv->xml_file);
+ g_free (priv->xml_file);
G_OBJECT_CLASS (parent_class)->finalize (object);
}