diff options
-rw-r--r-- | ChangeLog | 37 | ||||
-rwxr-xr-x | lib/egg/egg-editable-toolbar.c | 80 | ||||
-rwxr-xr-x | lib/egg/egg-editable-toolbar.h | 12 | ||||
-rwxr-xr-x | lib/egg/egg-toolbar-editor.c | 55 | ||||
-rwxr-xr-x | lib/egg/egg-toolbar-editor.h | 14 | ||||
-rwxr-xr-x | lib/egg/egg-toolbars-model.c | 37 | ||||
-rwxr-xr-x | lib/egg/egg-toolbars-model.h | 12 | ||||
-rwxr-xr-x | src/ephy-toolbars-model.c | 97 | ||||
-rwxr-xr-x | src/ephy-toolbars-model.h | 6 | ||||
-rwxr-xr-x | src/toolbar.c | 43 |
10 files changed, 196 insertions, 197 deletions
@@ -1,3 +1,40 @@ +2003-12-27 Christian Persch <chpe@cvs.gnome.org> + + * lib/egg/egg-editable-toolbar.c: (find_action), + (drag_data_delete_cb), (drag_data_get_cb), + (egg_editable_toolbar_set_model), (egg_editable_toolbar_set_merge), + (egg_editable_toolbar_class_init), (egg_editable_toolbar_init), + (egg_editable_toolbar_finalize), (egg_editable_toolbar_new): + * lib/egg/egg-editable-toolbar.h: + * lib/egg/egg-toolbar-editor.c: (find_action), + (egg_toolbar_editor_set_merge), (egg_toolbar_editor_set_model), + (egg_toolbar_editor_class_init), (egg_toolbar_editor_finalize), + (egg_toolbar_editor_new), (editor_drag_data_received_cb), + (editor_drag_data_delete_cb), (update_editor_sheet), + (setup_editor), (egg_toolbar_editor_init): + * lib/egg/egg-toolbar-editor.h: + * lib/egg/egg-toolbars-model.c: (egg_toolbars_model_to_xml), + (egg_toolbars_model_save), (egg_toolbars_model_add_separator), + (impl_add_item), (egg_toolbars_model_add_toolbar), + (egg_toolbars_model_load), (egg_toolbars_model_class_init), + (egg_toolbars_model_init), (egg_toolbars_model_finalize), + (egg_toolbars_model_new), (egg_toolbars_model_remove_toolbar), + (egg_toolbars_model_remove_item): + * lib/egg/egg-toolbars-model.h: + + Brought type macros in line with the rest of libegg; and use + gobject instance private data. + + * src/ephy-toolbars-model.c: (ephy_toolbars_model_get_type), + (update_toolbar_removeable_flag), + (ephy_toolbars_model_set_bookmarks), (toolbar_added), + (toolbar_removed), (ephy_toolbars_model_new), + (ephy_toolbars_model_has_bookmark): + * src/ephy-toolbars-model.h: + * src/toolbar.c: (toolbar_get_type), (init_normal_mode): + + Fix crasher bug #129991. + 2003-12-26 Christian Persch <chpe@cvs.gnome.org> * src/prefs-dialog.c: (prefs_dialog_finalize), diff --git a/lib/egg/egg-editable-toolbar.c b/lib/egg/egg-editable-toolbar.c index aef7aac60..746affc42 100755 --- a/lib/egg/egg-editable-toolbar.c +++ b/lib/egg/egg-editable-toolbar.c @@ -68,6 +68,8 @@ static guint egg_editable_toolbar_signals[LAST_SIGNAL] = { 0 }; static GObjectClass *parent_class = NULL; +#define EGG_EDITABLE_TOOLBAR_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbarPrivate)) + struct EggEditableToolbarPrivate { GtkUIManager *merge; @@ -174,7 +176,7 @@ find_action (EggEditableToolbar *t, l = gtk_ui_manager_get_action_groups (t->priv->merge); - g_return_val_if_fail (IS_EGG_EDITABLE_TOOLBAR (t), NULL); + g_return_val_if_fail (EGG_IS_EDITABLE_TOOLBAR (t), NULL); g_return_val_if_fail (name != NULL, NULL); for (; l != NULL; l = l->next) @@ -196,7 +198,7 @@ drag_data_delete_cb (GtkWidget *widget, { int pos, toolbar_pos; - g_return_if_fail (IS_EGG_EDITABLE_TOOLBAR (etoolbar)); + g_return_if_fail (EGG_IS_EDITABLE_TOOLBAR (etoolbar)); pos = gtk_toolbar_get_item_index (GTK_TOOLBAR (widget->parent), GTK_TOOL_ITEM (widget)); @@ -233,7 +235,7 @@ drag_data_get_cb (GtkWidget *widget, GtkAction *action; const char *target; - g_return_if_fail (IS_EGG_EDITABLE_TOOLBAR (etoolbar)); + g_return_if_fail (EGG_IS_EDITABLE_TOOLBAR (etoolbar)); action = GTK_ACTION (g_object_get_data (G_OBJECT (widget), "gtk-action")); @@ -896,12 +898,28 @@ static void egg_editable_toolbar_set_model (EggEditableToolbar *t, EggToolbarsModel *model) { - g_return_if_fail (IS_EGG_TOOLBARS_MODEL (model)); - g_return_if_fail (IS_EGG_EDITABLE_TOOLBAR (t)); + g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model)); + g_return_if_fail (EGG_IS_EDITABLE_TOOLBAR (t)); if (t->priv->model == model) return; - t->priv->model = model; + if (t->priv->model) + { + g_signal_handlers_disconnect_by_func + (t->priv->model, G_CALLBACK (item_added_cb), t); + g_signal_handlers_disconnect_by_func + (t->priv->model, G_CALLBACK (item_removed_cb), t); + g_signal_handlers_disconnect_by_func + (t->priv->model, G_CALLBACK (toolbar_added_cb), t); + g_signal_handlers_disconnect_by_func + (t->priv->model, G_CALLBACK (toolbar_removed_cb), t); + g_signal_handlers_disconnect_by_func + (t->priv->model, G_CALLBACK (toolbar_changed_cb), t); + + g_object_unref (t->priv->model); + } + + t->priv->model = g_object_ref (model); toolbars_clean (t); egg_editable_toolbar_construct (t); @@ -923,16 +941,20 @@ egg_editable_toolbar_set_merge (EggEditableToolbar *t, GtkUIManager *merge) { g_return_if_fail (GTK_IS_UI_MANAGER (merge)); - g_return_if_fail (IS_EGG_EDITABLE_TOOLBAR (t)); + g_return_if_fail (EGG_IS_EDITABLE_TOOLBAR (t)); + + if (t->priv->merge == merge) return; - if (t->priv->merge != merge) + if (t->priv->merge) { - t->priv->merge = merge; + g_object_unref (t->priv->merge); + } - if (t->priv->model != NULL) - { - egg_editable_toolbar_construct (t); - } + t->priv->merge = g_object_ref (merge); + + if (t->priv->model != NULL) + { + egg_editable_toolbar_construct (t); } } @@ -1005,14 +1027,16 @@ egg_editable_toolbar_class_init (EggEditableToolbarClass *klass) g_param_spec_object ("ToolbarsModel", "ToolbarsModel", "Toolbars Model", - EGG_TOOLBARS_MODEL_TYPE, + EGG_TYPE_TOOLBARS_MODEL, G_PARAM_READWRITE)); + + g_type_class_add_private (object_class, sizeof (EggEditableToolbarPrivate)); } static void egg_editable_toolbar_init (EggEditableToolbar *t) { - t->priv = g_new0 (EggEditableToolbarPrivate, 1); + t->priv = EGG_EDITABLE_TOOLBAR_GET_PRIVATE (t); t->priv->merge = NULL; t->priv->edit_mode = FALSE; @@ -1023,15 +1047,20 @@ egg_editable_toolbar_finalize (GObject *object) { EggEditableToolbar *t = EGG_EDITABLE_TOOLBAR (object); - g_return_if_fail (object != NULL); - g_return_if_fail (IS_EGG_EDITABLE_TOOLBAR (object)); - if (t->priv->fixed_toolbar) { g_object_unref (t->priv->fixed_toolbar); } - g_free (t->priv); + if (t->priv->merge) + { + g_object_unref (t->priv->merge); + } + + if (t->priv->model) + { + g_object_unref (t->priv->model); + } G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -1040,15 +1069,10 @@ GtkWidget * egg_editable_toolbar_new (GtkUIManager *merge, EggToolbarsModel *model) { - EggEditableToolbar *t; - - t = EGG_EDITABLE_TOOLBAR (g_object_new (EGG_EDITABLE_TOOLBAR_TYPE, - "ToolbarsModel", model, - "MenuMerge", merge, NULL)); - - g_return_val_if_fail (t->priv != NULL, NULL); - - return GTK_WIDGET (t); + return GTK_WIDGET (g_object_new (EGG_TYPE_EDITABLE_TOOLBAR, + "ToolbarsModel", model, + "MenuMerge", merge, + NULL)); } void diff --git a/lib/egg/egg-editable-toolbar.h b/lib/egg/egg-editable-toolbar.h index 96c7935cd..3915878ff 100755 --- a/lib/egg/egg-editable-toolbar.h +++ b/lib/egg/egg-editable-toolbar.h @@ -30,12 +30,12 @@ G_BEGIN_DECLS typedef struct EggEditableToolbarClass EggEditableToolbarClass; -#define EGG_EDITABLE_TOOLBAR_TYPE (egg_editable_toolbar_get_type ()) -#define EGG_EDITABLE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_EDITABLE_TOOLBAR_TYPE, EggEditableToolbar)) -#define EGG_EDITABLE_TOOLBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_EDITABLE_TOOLBAR_TYPE, EggEditableToolbarClass)) -#define IS_EGG_EDITABLE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_EDITABLE_TOOLBAR_TYPE)) -#define IS_EGG_EDITABLE_TOOLBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_EDITABLE_TOOLBAR_TYPE)) -#define EGG_EDITABLE_TOOLBAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_EDITABLE_TOOLBAR_TYPE, EggEditableToolbarClass)) +#define EGG_TYPE_EDITABLE_TOOLBAR (egg_editable_toolbar_get_type ()) +#define EGG_EDITABLE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbar)) +#define EGG_EDITABLE_TOOLBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbarClass)) +#define EGG_IS_EDITABLE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_EDITABLE_TOOLBAR)) +#define EGG_IS_EDITABLE_TOOLBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_EDITABLE_TOOLBAR)) +#define EGG_EDITABLE_TOOLBAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbarClass)) typedef struct EggEditableToolbar EggEditableToolbar; diff --git a/lib/egg/egg-toolbar-editor.c b/lib/egg/egg-toolbar-editor.c index 297251481..a317ff458 100755 --- a/lib/egg/egg-toolbar-editor.c +++ b/lib/egg/egg-toolbar-editor.c @@ -55,6 +55,8 @@ enum static GObjectClass *parent_class = NULL; +#define EGG_TOOLBAR_EDITOR_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditorPrivate)) + struct EggToolbarEditorPrivate { GtkUIManager *merge; @@ -133,7 +135,7 @@ find_action (EggToolbarEditor *t, l = gtk_ui_manager_get_action_groups (t->priv->merge); - g_return_val_if_fail (IS_EGG_TOOLBAR_EDITOR (t), NULL); + g_return_val_if_fail (EGG_IS_TOOLBAR_EDITOR (t), NULL); g_return_val_if_fail (name != NULL, NULL); for (; l != NULL; l = l->next) @@ -153,18 +155,18 @@ egg_toolbar_editor_set_merge (EggToolbarEditor *t, GtkUIManager *merge) { g_return_if_fail (GTK_IS_UI_MANAGER (merge)); - g_return_if_fail (IS_EGG_TOOLBAR_EDITOR (t)); + g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (t)); - t->priv->merge = merge; + t->priv->merge = g_object_ref (merge); } static void egg_toolbar_editor_set_model (EggToolbarEditor *t, EggToolbarsModel *model) { - g_return_if_fail (IS_EGG_TOOLBAR_EDITOR (t)); + g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (t)); - t->priv->model = model; + t->priv->model = g_object_ref (model); } static void @@ -228,19 +230,26 @@ egg_toolbar_editor_class_init (EggToolbarEditorClass *klass) g_param_spec_object ("ToolbarsModel", "ToolbarsModel", "Toolbars Model", - EGG_TOOLBARS_MODEL_TYPE, + EGG_TYPE_TOOLBARS_MODEL, G_PARAM_READWRITE)); + + g_type_class_add_private (object_class, sizeof (EggToolbarEditorPrivate)); } static void egg_toolbar_editor_finalize (GObject *object) { - EggToolbarEditor *t = EGG_TOOLBAR_EDITOR (object); + EggToolbarEditor *editor = EGG_TOOLBAR_EDITOR (object); - g_return_if_fail (object != NULL); - g_return_if_fail (IS_EGG_TOOLBAR_EDITOR (object)); + if (editor->priv->merge) + { + g_object_unref (editor->priv->merge); + } - g_free (t->priv); + if (editor->priv->model) + { + g_object_unref (editor->priv->model); + } G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -249,16 +258,10 @@ GtkWidget * egg_toolbar_editor_new (GtkUIManager *merge, EggToolbarsModel *model) { - EggToolbarEditor *t; - - t = EGG_TOOLBAR_EDITOR (g_object_new (EGG_TOOLBAR_EDITOR_TYPE, - "MenuMerge", merge, - "ToolbarsModel", model, - NULL)); - - g_return_val_if_fail (t->priv != NULL, NULL); - - return GTK_WIDGET (t); + return GTK_WIDGET (g_object_new (EGG_TYPE_TOOLBAR_EDITOR, + "MenuMerge", merge, + "ToolbarsModel", model, + NULL)); } static void @@ -287,7 +290,7 @@ editor_drag_data_received_cb (GtkWidget *widget, { GtkAction *action; - g_return_if_fail (IS_EGG_TOOLBAR_EDITOR (editor)); + g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (editor)); g_return_if_fail (selection_data != NULL); action = find_action (editor, (const char *)selection_data->data); @@ -309,7 +312,7 @@ editor_drag_data_delete_cb (GtkWidget *widget, EggToolbarEditor *editor) { GtkAction *action; - g_return_if_fail (IS_EGG_TOOLBAR_EDITOR (editor)); + g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (editor)); action = GTK_ACTION (g_object_get_data (G_OBJECT (widget), "egg-action")); if (action) @@ -470,7 +473,7 @@ update_editor_sheet (EggToolbarEditor *editor) GtkWidget *item; GtkWidget *icon; - g_return_if_fail (IS_EGG_TOOLBAR_EDITOR (editor)); + g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (editor)); viewport = GTK_BIN (editor->priv->scrolled_window)->child; if (viewport) @@ -543,7 +546,7 @@ setup_editor (EggToolbarEditor *editor) GtkWidget *image; GtkWidget *label; - g_return_if_fail (IS_EGG_TOOLBAR_EDITOR (editor)); + g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (editor)); gtk_container_set_border_width (GTK_CONTAINER (editor), 12); scrolled_window = gtk_scrolled_window_new (NULL, NULL); @@ -569,7 +572,7 @@ setup_editor (EggToolbarEditor *editor) static void egg_toolbar_editor_init (EggToolbarEditor *t) { - t->priv = g_new0 (EggToolbarEditorPrivate, 1); + t->priv = EGG_TOOLBAR_EDITOR_GET_PRIVATE (t); t->priv->merge = NULL; t->priv->default_actions_list = NULL; @@ -578,7 +581,7 @@ egg_toolbar_editor_init (EggToolbarEditor *t) setup_editor (t); } -static void +void egg_toolbar_editor_add_action (EggToolbarEditor *editor, const char *action_name) { diff --git a/lib/egg/egg-toolbar-editor.h b/lib/egg/egg-toolbar-editor.h index 5999f45c8..671dfa26e 100755 --- a/lib/egg/egg-toolbar-editor.h +++ b/lib/egg/egg-toolbar-editor.h @@ -28,12 +28,12 @@ G_BEGIN_DECLS typedef struct EggToolbarEditorClass EggToolbarEditorClass; -#define EGG_TOOLBAR_EDITOR_TYPE (egg_toolbar_editor_get_type ()) -#define EGG_TOOLBAR_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TOOLBAR_EDITOR_TYPE, EggToolbarEditor)) -#define EGG_TOOLBAR_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TOOLBAR_EDITOR_TYPE, EggToolbarEditorClass)) -#define IS_EGG_TOOLBAR_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TOOLBAR_EDITOR_TYPE)) -#define IS_EGG_TOOLBAR_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TOOLBAR_EDITOR_TYPE)) -#define EGG_TOOLBAR_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TOOLBAR_EDITOR_TYPE, EggToolbarEditorClass)) +#define EGG_TYPE_TOOLBAR_EDITOR (egg_toolbar_editor_get_type ()) +#define EGG_TOOLBAR_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditor)) +#define EGG_TOOLBAR_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditorClass)) +#define EGG_IS_TOOLBAR_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TOOLBAR_EDITOR)) +#define EGG_IS_TOOLBAR_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TOOLBAR_EDITOR)) +#define EGG_TOOLBAR_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditorClass)) typedef struct EggToolbarEditor EggToolbarEditor; @@ -56,6 +56,8 @@ struct EggToolbarEditorClass GType egg_toolbar_editor_get_type (void); GtkWidget *egg_toolbar_editor_new (GtkUIManager *merge, EggToolbarsModel *model); +void egg_toolbar_editor_add_action (EggToolbarEditor *editor, + const char *action_name); void egg_toolbar_editor_load_actions (EggToolbarEditor *editor, const char *xml_file); diff --git a/lib/egg/egg-toolbars-model.c b/lib/egg/egg-toolbars-model.c index ff0fa3315..8e44d9365 100755 --- a/lib/egg/egg-toolbars-model.c +++ b/lib/egg/egg-toolbars-model.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2002 Marco Pesenti Gritti + * Copyright (C) 2002-2003 Marco Pesenti Gritti * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -55,6 +55,8 @@ static guint egg_toolbars_model_signals[LAST_SIGNAL] = { 0 }; static GObjectClass *parent_class = NULL; +#define EGG_TOOLBARS_MODEL_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModelPrivate)) + struct EggToolbarsModelPrivate { GNode *toolbars; @@ -94,7 +96,7 @@ egg_toolbars_model_to_xml (EggToolbarsModel *t) GNode *l1, *l2, *tl; xmlDocPtr doc; - g_return_val_if_fail (IS_EGG_TOOLBARS_MODEL (t), NULL); + g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (t), NULL); tl = t->priv->toolbars; @@ -199,7 +201,7 @@ egg_toolbars_model_save (EggToolbarsModel *t, xmlDocPtr doc; xmlNodePtr root; - g_return_if_fail (IS_EGG_TOOLBARS_MODEL (t)); + g_return_if_fail (EGG_IS_TOOLBARS_MODEL (t)); doc = egg_toolbars_model_to_xml (t); root = xmlDocGetRootElement (doc); @@ -301,7 +303,7 @@ egg_toolbars_model_add_separator (EggToolbarsModel *t, EggToolbarsItem *item; int real_position; - g_return_if_fail (IS_EGG_TOOLBARS_MODEL (t)); + g_return_if_fail (EGG_IS_TOOLBARS_MODEL (t)); parent_node = g_node_nth_child (t->priv->toolbars, toolbar_position); item = toolbars_item_new ("separator", "separator", TRUE); @@ -326,7 +328,7 @@ impl_add_item (EggToolbarsModel *t, EggToolbarsItem *item; int real_position; - g_return_val_if_fail (IS_EGG_TOOLBARS_MODEL (t), FALSE); + g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (t), FALSE); g_return_val_if_fail (id != NULL, FALSE); g_return_val_if_fail (type != NULL, FALSE); @@ -388,7 +390,7 @@ egg_toolbars_model_add_toolbar (EggToolbarsModel *t, GNode *node; int real_position; - g_return_val_if_fail (IS_EGG_TOOLBARS_MODEL (t), -1); + g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (t), -1); node = g_node_new (toolbars_toolbar_new (name)); g_node_insert (t->priv->toolbars, position, node); @@ -438,7 +440,7 @@ egg_toolbars_model_load (EggToolbarsModel *t, xmlDocPtr doc; xmlNodePtr root; - g_return_val_if_fail (IS_EGG_TOOLBARS_MODEL (t), FALSE); + g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (t), FALSE); doc = xmlParseFile (xml_file); if (doc == NULL) @@ -543,12 +545,14 @@ egg_toolbars_model_class_init (EggToolbarsModelClass *klass) G_STRUCT_OFFSET (EggToolbarsModelClass, toolbar_changed), NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); + + g_type_class_add_private (object_class, sizeof (EggToolbarsModelPrivate)); } static void egg_toolbars_model_init (EggToolbarsModel *t) { - t->priv = g_new0 (EggToolbarsModelPrivate, 1); + t->priv =EGG_TOOLBARS_MODEL_GET_PRIVATE (t); t->priv->toolbars = NULL; } @@ -558,27 +562,16 @@ egg_toolbars_model_finalize (GObject *object) { EggToolbarsModel *t = EGG_TOOLBARS_MODEL (object); - g_return_if_fail (object != NULL); - g_return_if_fail (IS_EGG_TOOLBARS_MODEL (object)); - /* FIXME free nodes */ g_node_destroy (t->priv->toolbars); - g_free (t->priv); - G_OBJECT_CLASS (parent_class)->finalize (object); } EggToolbarsModel * egg_toolbars_model_new (void) { - EggToolbarsModel *t; - - t = EGG_TOOLBARS_MODEL (g_object_new (EGG_TOOLBARS_MODEL_TYPE, NULL)); - - g_return_val_if_fail (t->priv != NULL, NULL); - - return t; + return EGG_TOOLBARS_MODEL (g_object_new (EGG_TYPE_TOOLBARS_MODEL, NULL)); } void @@ -588,7 +581,7 @@ egg_toolbars_model_remove_toolbar (EggToolbarsModel *t, GNode *node; EggTbModelFlags flags; - g_return_if_fail (IS_EGG_TOOLBARS_MODEL (t)); + g_return_if_fail (EGG_IS_TOOLBARS_MODEL (t)); flags = egg_toolbars_model_get_flags (t, position); @@ -612,7 +605,7 @@ egg_toolbars_model_remove_item (EggToolbarsModel *t, { GNode *node, *toolbar; - g_return_if_fail (IS_EGG_TOOLBARS_MODEL (t)); + g_return_if_fail (EGG_IS_TOOLBARS_MODEL (t)); toolbar = g_node_nth_child (t->priv->toolbars, toolbar_position); g_return_if_fail (toolbar != NULL); diff --git a/lib/egg/egg-toolbars-model.h b/lib/egg/egg-toolbars-model.h index 6ad28b9d7..9e1f01a50 100755 --- a/lib/egg/egg-toolbars-model.h +++ b/lib/egg/egg-toolbars-model.h @@ -27,12 +27,12 @@ G_BEGIN_DECLS typedef struct EggToolbarsModelClass EggToolbarsModelClass; -#define EGG_TOOLBARS_MODEL_TYPE (egg_toolbars_model_get_type ()) -#define EGG_TOOLBARS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TOOLBARS_MODEL_TYPE, EggToolbarsModel)) -#define EGG_TOOLBARS_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TOOLBARS_MODEL_TYPE, EggToolbarsModelClass)) -#define IS_EGG_TOOLBARS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TOOLBARS_MODEL_TYPE)) -#define IS_EGG_TOOLBARS_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TOOLBARS_MODEL_TYPE)) -#define EGG_TOOLBARS_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TOOLBARS_MODEL_TYPE, EggToolbarsModelClass)) +#define EGG_TYPE_TOOLBARS_MODEL (egg_toolbars_model_get_type ()) +#define EGG_TOOLBARS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModel)) +#define EGG_TOOLBARS_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModelClass)) +#define EGG_IS_TOOLBARS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TOOLBARS_MODEL)) +#define EGG_IS_TOOLBARS_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TOOLBARS_MODEL)) +#define EGG_TOOLBARS_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModelClass)) typedef struct EggToolbarsModel EggToolbarsModel; typedef struct EggToolbarsModelPrivate EggToolbarsModelPrivate; diff --git a/src/ephy-toolbars-model.c b/src/ephy-toolbars-model.c index f43acfb83..c022b9ba8 100755 --- a/src/ephy-toolbars-model.c +++ b/src/ephy-toolbars-model.c @@ -68,9 +68,9 @@ struct EphyToolbarsModelPrivate GType ephy_toolbars_model_get_type (void) { - static GType ephy_toolbars_model_type = 0; + static GType type = 0; - if (ephy_toolbars_model_type == 0) + if (type == 0) { static const GTypeInfo our_info = { sizeof (EphyToolbarsModelClass), @@ -84,12 +84,12 @@ ephy_toolbars_model_get_type (void) (GInstanceInitFunc) ephy_toolbars_model_init }; - ephy_toolbars_model_type = g_type_register_static (EGG_TOOLBARS_MODEL_TYPE, - "EphyToolbarsModel", - &our_info, 0); + type = g_type_register_static (EGG_TYPE_TOOLBARS_MODEL, + "EphyToolbarsModel", + &our_info, 0); } - return ephy_toolbars_model_type; + return type; } char * @@ -320,13 +320,40 @@ connect_item (EphyToolbarsModel *model, } static void +update_toolbar_removeable_flag (EggToolbarsModel *model) +{ + int i, n_toolbars; + int flag = 0; + + n_toolbars = egg_toolbars_model_n_toolbars (model); + + /* If there is only one toolbar and the bookmarks bar */ + if (n_toolbars <= 2) + { + flag = EGG_TB_MODEL_NOT_REMOVABLE; + } + + for (i = 0; i < n_toolbars; i++) + { + const char *t_name; + + t_name = egg_toolbars_model_toolbar_nth (model, i); + g_return_if_fail (t_name != NULL); + + if (!(strcmp (t_name, "BookmarksBar") == 0)) + { + egg_toolbars_model_set_flags (model, flag, i); + } + } +} + +static void ephy_toolbars_model_set_bookmarks (EphyToolbarsModel *model, EphyBookmarks *bookmarks) { EggToolbarsModel *egg_model = EGG_TOOLBARS_MODEL (model); gboolean success = FALSE; - model->priv->bookmarks = bookmarks; - g_object_ref (model->priv->bookmarks); + model->priv->bookmarks = g_object_ref (bookmarks); model->priv->loading = TRUE; @@ -451,12 +478,14 @@ static void toolbar_added (EphyToolbarsModel *model, int position) { save_changes (model); + update_toolbar_removeable_flag (EGG_TOOLBARS_MODEL (model)); } static void toolbar_removed (EphyToolbarsModel *model, int position) { save_changes (model); + update_toolbar_removeable_flag (EGG_TOOLBARS_MODEL (model)); } static void @@ -493,15 +522,9 @@ ephy_toolbars_model_finalize (GObject *object) EphyToolbarsModel * ephy_toolbars_model_new (EphyBookmarks *bookmarks) { - EphyToolbarsModel *t; - - t = EPHY_TOOLBARS_MODEL (g_object_new (EPHY_TYPE_TOOLBARS_MODEL, - "bookmarks", bookmarks, - NULL)); - - g_return_val_if_fail (t->priv != NULL, NULL); - - return t; + return EPHY_TOOLBARS_MODEL (g_object_new (EPHY_TYPE_TOOLBARS_MODEL, + "bookmarks", bookmarks, + NULL)); } static int @@ -583,43 +606,3 @@ ephy_toolbars_model_has_bookmark (EphyToolbarsModel *model, return found; } - -void -ephy_toolbars_model_set_flag (EphyToolbarsModel *model, - EggTbModelFlags flags) -{ - EggToolbarsModel *t = EGG_TOOLBARS_MODEL (model); - int i, n_toolbars; - - n_toolbars = egg_toolbars_model_n_toolbars - (EGG_TOOLBARS_MODEL (model)); - - for (i = 0; i < n_toolbars; i++) - { - EggTbModelFlags old_flags; - - old_flags = egg_toolbars_model_get_flags (t, i); - - egg_toolbars_model_set_flags (t, old_flags | flags, i); - } -} - -void -ephy_toolbars_model_unset_flag (EphyToolbarsModel *model, - EggTbModelFlags flags) -{ - EggToolbarsModel *t = EGG_TOOLBARS_MODEL (model); - int i, n_toolbars; - - n_toolbars = egg_toolbars_model_n_toolbars - (EGG_TOOLBARS_MODEL (model)); - - for (i = 0; i < n_toolbars; i++) - { - EggTbModelFlags old_flags; - - old_flags = egg_toolbars_model_get_flags (t, i); - - egg_toolbars_model_set_flags (t, old_flags ^ flags, i); - } -} diff --git a/src/ephy-toolbars-model.h b/src/ephy-toolbars-model.h index bc20da6f6..dd0a412ae 100755 --- a/src/ephy-toolbars-model.h +++ b/src/ephy-toolbars-model.h @@ -68,12 +68,6 @@ char *ephy_toolbars_model_get_action_name (EphyToolbarsModel *model EphyNode *ephy_toolbars_model_get_node (EphyToolbarsModel *model, const char *action_name); -void ephy_toolbars_model_set_flag (EphyToolbarsModel *model, - EggTbModelFlags flags); - -void ephy_toolbars_model_unset_flag (EphyToolbarsModel *model, - EggTbModelFlags flags); - G_END_DECLS #endif diff --git a/src/toolbar.c b/src/toolbar.c index dae06f522..bf5596c24 100755 --- a/src/toolbar.c +++ b/src/toolbar.c @@ -20,7 +20,7 @@ */ #ifdef HAVE_CONFIG_H -#include <config.h> +#include "config.h" #endif #include "toolbar.h" @@ -116,7 +116,7 @@ toolbar_get_type (void) (GInstanceInitFunc) toolbar_init }; - toolbar_type = g_type_register_static (EGG_EDITABLE_TOOLBAR_TYPE, + toolbar_type = g_type_register_static (EGG_TYPE_EDITABLE_TOOLBAR, "Toolbar", &our_info, 0); } @@ -454,50 +454,13 @@ init_bookmarks_toolbar (Toolbar *t) } static void -update_toolbar_remove_flag (EphyToolbarsModel *model, gpointer data) -{ - int i, n_toolbars; - int not_removable = 0; - - n_toolbars = egg_toolbars_model_n_toolbars - (EGG_TOOLBARS_MODEL (model)); - - /* If there is only one toolbar and the bookmarks bar */ - if (n_toolbars <= 2) - { - not_removable = EGG_TB_MODEL_NOT_REMOVABLE; - } - - for (i = 0; i < n_toolbars; i++) - { - const char *t_name; - - t_name = egg_toolbars_model_toolbar_nth - (EGG_TOOLBARS_MODEL (model), i); - g_return_if_fail (t_name != NULL); - - if (!(strcmp (t_name, "BookmarksBar") == 0)) - { - egg_toolbars_model_set_flags - (EGG_TOOLBARS_MODEL (model), - not_removable, i); - } - } -} - -static void init_normal_mode (Toolbar *t) { EphyToolbarsModel *model; model = EPHY_TOOLBARS_MODEL (ephy_shell_get_toolbars_model (ephy_shell, FALSE)); - g_signal_connect (EGG_TOOLBARS_MODEL (model), "toolbar_added", - G_CALLBACK (update_toolbar_remove_flag), - NULL); - g_signal_connect (EGG_TOOLBARS_MODEL (model), "toolbar_removed", - G_CALLBACK (update_toolbar_remove_flag), - NULL); + g_object_set (G_OBJECT (t), "ToolbarsModel", model, NULL); |