diff options
Diffstat (limited to 'lib/widgets')
-rw-r--r-- | lib/widgets/Makefile.am | 4 | ||||
-rwxr-xr-x | lib/widgets/ephy-editable-toolbar.c | 1171 | ||||
-rwxr-xr-x | lib/widgets/ephy-editable-toolbar.h | 75 | ||||
-rwxr-xr-x | lib/widgets/ephy-toolbars-group.c | 656 | ||||
-rwxr-xr-x | lib/widgets/ephy-toolbars-group.h | 111 |
5 files changed, 0 insertions, 2017 deletions
diff --git a/lib/widgets/Makefile.am b/lib/widgets/Makefile.am index 4d53e385b..23aad4b01 100644 --- a/lib/widgets/Makefile.am +++ b/lib/widgets/Makefile.am @@ -13,8 +13,6 @@ INCLUDES = \ noinst_LTLIBRARIES = libephywidgets.la libephywidgets_la_SOURCES = \ - ephy-toolbars-group.c \ - ephy-toolbars-group.h \ eggtreemodelfilter.c \ eggtreemodelfilter.h \ eggtreemultidnd.c \ @@ -23,8 +21,6 @@ libephywidgets_la_SOURCES = \ ephy-arrow-toolbutton.h \ ephy-autocompletion-window.c \ ephy-autocompletion-window.h \ - ephy-editable-toolbar.c \ - ephy-editable-toolbar.h \ ephy-ellipsizing-label.c \ ephy-ellipsizing-label.h \ ephy-location-entry.c \ diff --git a/lib/widgets/ephy-editable-toolbar.c b/lib/widgets/ephy-editable-toolbar.c deleted file mode 100755 index e65015d3a..000000000 --- a/lib/widgets/ephy-editable-toolbar.c +++ /dev/null @@ -1,1171 +0,0 @@ -/* - * Copyright (C) 2000 Marco Pesenti Gritti - * (C) 2001, 2002 Jorn Baayen - * - * 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 - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include "ephy-editable-toolbar.h" -#include "ephy-toolbars-group.h" -#include "ephy-debug.h" -#include "ephy-dnd.h" -#include "ephy-file-helpers.h" -#include "eggtoolitem.h" -#include "eggtoolbar.h" -#include "eggseparatortoolitem.h" - -#include <libgnome/gnome-i18n.h> -#include <string.h> - -enum -{ - X_TOOLBAR_ITEM -}; - -static GtkTargetEntry dest_drag_types [] = -{ - { "application/x-toolbar-item", 0, X_TOOLBAR_ITEM }, - /* FIXME generic way to add types */ - { EPHY_DND_URL_TYPE, 0, 2 }, - { EPHY_DND_TOPIC_TYPE, 0, 2 } -}; -static int n_dest_drag_types = G_N_ELEMENTS (dest_drag_types); - -static GtkTargetEntry source_drag_types [] = -{ - { "application/x-toolbar-item", 0, X_TOOLBAR_ITEM }, -}; - -static int n_source_drag_types = G_N_ELEMENTS (source_drag_types); - -enum -{ - RESPONSE_ADD_TOOLBAR -}; - -static void ephy_editable_toolbar_class_init (EphyEditableToolbarClass *klass); -static void ephy_editable_toolbar_init (EphyEditableToolbar *t); -static void ephy_editable_toolbar_finalize (GObject *object); -static void do_merge (EphyEditableToolbar *t); -static void setup_editor (EphyEditableToolbar *etoolbar, - GtkWidget *window); -static void update_editor_sheet (EphyEditableToolbar *etoolbar); - -static void ephy_editable_toolbar_remove_cb (EggAction *action, EphyEditableToolbar *etoolbar); -static void ephy_editable_toolbar_edit_cb (EggAction *action, EphyEditableToolbar *etoolbar); - -static EggActionGroupEntry ephy_toolbar_popups [] = { - /* Toplevel */ - { "FakeToplevel", (""), NULL, NULL, NULL, NULL, NULL }, - - /* Popups */ - { "RemoveToolbarPopup", N_("_Remove Toolbar"), GTK_STOCK_REMOVE, NULL, - NULL, G_CALLBACK (ephy_editable_toolbar_remove_cb), NULL }, - { "EditToolbarPopup", N_("_Edit Toolbars..."), GTK_STOCK_PREFERENCES, NULL, - NULL, G_CALLBACK (ephy_editable_toolbar_edit_cb), NULL }, -}; - -static guint ephy_toolbar_popups_n_entries = G_N_ELEMENTS (ephy_toolbar_popups); - -enum -{ - PROP_0, - PROP_TOOLBARS_GROUP, - PROP_MENU_MERGE -}; - -static GObjectClass *parent_class = NULL; - -struct EphyEditableToolbarPrivate -{ - EggMenuMerge *merge; - - GtkWidget *editor; - GtkWidget *table; - GtkWidget *scrolled_window; - - GtkWidget *last_toolbar; - - guint ui_id; - - gboolean toolbars_dirty; - gboolean editor_sheet_dirty; - gboolean edit_mode; - - EphyToolbarsGroup *group; - - EggMenuMerge *popup_merge; - EggActionGroup *popup_action_group; - - GList *actions_list; -}; - -typedef struct { - EphyEditableToolbar *etoolbar; - EphyToolbarsToolbar *t; -} ContextMenuData; - -GType -ephy_editable_toolbar_get_type (void) -{ - static GType ephy_editable_toolbar_type = 0; - - if (ephy_editable_toolbar_type == 0) - { - static const GTypeInfo our_info = - { - sizeof (EphyEditableToolbarClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) ephy_editable_toolbar_class_init, - NULL, - NULL, /* class_data */ - sizeof (EphyEditableToolbar), - 0, /* n_preallocs */ - (GInstanceInitFunc) ephy_editable_toolbar_init - }; - - ephy_editable_toolbar_type = g_type_register_static (G_TYPE_OBJECT, - "EphyEditableToolbar", - &our_info, 0); - } - - return ephy_editable_toolbar_type; -} - -static void -update_popup_menu (EphyEditableToolbar *t) -{ - EggAction *action; - - action = egg_action_group_get_action (t->priv->popup_action_group, - "EditToolbarPopup"); - g_object_set (G_OBJECT (action), "visible", - !t->priv->edit_mode, NULL); - - action = egg_action_group_get_action (t->priv->popup_action_group, - "RemoveToolbarPopup"); - g_object_set (G_OBJECT (action), "visible", - t->priv->edit_mode, NULL); -} - -static EggAction * -find_action (EphyEditableToolbar *t, const char *name) -{ - GList *l = t->priv->merge->action_groups; - EggAction *action = NULL; - - g_return_val_if_fail (IS_EPHY_EDITABLE_TOOLBAR (t), NULL); - g_return_val_if_fail (name != NULL, NULL); - - for (; l != NULL; l = l->next) - { - EggAction *tmp; - - tmp = egg_action_group_get_action - (EGG_ACTION_GROUP (l->data), name); - if (tmp) action = tmp; - } - - return action; -} - -static char * -impl_get_action_name (EphyEditableToolbar *etoolbar, - const char *drag_type, - const char *data) -{ - return NULL; -} - -static EggAction * -impl_get_action (EphyEditableToolbar *etoolbar, - const char *name) -{ - EggAction *action; - - g_return_val_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar), NULL); - - action = find_action (etoolbar, name); - - return action; -} - -static gboolean -ui_update (gpointer data) -{ - EphyEditableToolbar *etoolbar = EPHY_EDITABLE_TOOLBAR (data); - - g_return_val_if_fail (etoolbar != NULL, FALSE); - - if (etoolbar->priv->toolbars_dirty) - { - LOG ("Update ui: toolbars") - do_merge (etoolbar); - etoolbar->priv->toolbars_dirty = FALSE; - } - - if (etoolbar->priv->editor_sheet_dirty) - { - LOG ("Update ui: editor sheet") - update_editor_sheet (etoolbar); - etoolbar->priv->editor_sheet_dirty = FALSE; - } - - return FALSE; -} - -static void -queue_ui_update (EphyEditableToolbar *etoolbar) -{ - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - g_idle_add (ui_update, etoolbar); -} - -static void -drag_data_received_cb (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - GtkSelectionData *selection_data, - guint info, - guint time_, - EphyEditableToolbar *etoolbar) -{ - EphyToolbarsToolbar *toolbar; - const char *type = NULL; - GdkAtom target; - EggAction *action = NULL; - int pos; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - LOG ("Drag data received %s", selection_data->data) - - toolbar = (EphyToolbarsToolbar *)g_object_get_data (G_OBJECT (widget), "toolbar_data"); - pos = egg_toolbar_get_drop_index (EGG_TOOLBAR (widget), x, y); - - /* HACK placeholder are implemented as separators */ - pos = pos/3 + 1; - - target = gtk_drag_dest_find_target (widget, context, NULL); - if (target == gdk_atom_intern (EPHY_DND_URL_TYPE, FALSE)) - { - type = EPHY_DND_URL_TYPE; - } - else if (target == gdk_atom_intern (EPHY_DND_TOPIC_TYPE, FALSE)) - { - type = EPHY_DND_TOPIC_TYPE; - } - - if (type) - { - char *name; - - name = ephy_editable_toolbar_get_action_name - (etoolbar, type, selection_data->data); - if (name != NULL) - { - action = ephy_editable_toolbar_get_action (etoolbar, name); - g_free (name); - } - } - else - { - action = ephy_editable_toolbar_get_action (etoolbar, selection_data->data); - } - - if (action) - { - ephy_toolbars_group_add_item (etoolbar->priv->group, toolbar, pos, - action->name); - etoolbar->priv->toolbars_dirty = TRUE; - } - else if (strcmp (selection_data->data, "separator") == 0) - { - ephy_toolbars_group_add_item (etoolbar->priv->group, toolbar, pos, - "separator"); - etoolbar->priv->toolbars_dirty = TRUE; - } - - queue_ui_update (etoolbar); -} - -static void -drag_data_delete_cb (GtkWidget *widget, - GdkDragContext *context, - EphyEditableToolbar *etoolbar) -{ - EphyToolbarsItem *node; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - node = (EphyToolbarsItem *)g_object_get_data (G_OBJECT (widget), "item_data"); - g_return_if_fail (node != NULL); - ephy_toolbars_group_remove_item (etoolbar->priv->group, node); - - etoolbar->priv->toolbars_dirty = TRUE; - queue_ui_update (etoolbar); -} - -static void -drag_data_get_cb (GtkWidget *widget, - GdkDragContext *context, - GtkSelectionData *selection_data, - guint info, - guint32 time, - EphyEditableToolbar *etoolbar) -{ - EggAction *action; - const char *target; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - action = EGG_ACTION (g_object_get_data (G_OBJECT (widget), "egg-action")); - - if (action) - { - LOG ("Drag data get %s", action->name); - target = action->name; - } - else - { - LOG ("Drag data get %s", separator); - target = "separator"; - } - - gtk_selection_data_set (selection_data, - selection_data->target, - 8, target, strlen (target)); -} - -static void -toolbar_drag_data_delete_cb (GtkWidget *widget, - GdkDragContext *context, - EphyEditableToolbar *etoolbar) -{ - EphyToolbarsToolbar *t; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - t = (EphyToolbarsToolbar *)g_object_get_data (G_OBJECT (widget), - "toolbar_drag_data"); - g_return_if_fail (t != NULL); - - ephy_toolbars_group_remove_toolbar (etoolbar->priv->group, t); - - etoolbar->priv->toolbars_dirty = TRUE; - queue_ui_update (etoolbar); -} - -static void -toolbar_drag_data_get_cb (GtkWidget *widget, - GdkDragContext *context, - GtkSelectionData *selection_data, - guint info, - guint32 time, - EphyEditableToolbar *etoolbar) -{ - EphyToolbarsToolbar *t; - char *target; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - t = (EphyToolbarsToolbar *)g_object_get_data (G_OBJECT (widget), - "toolbar_drag_data"); - - target = t->id; - LOG ("Drag data get %s", t->id); - - gtk_selection_data_set (selection_data, - selection_data->target, - 8, target, strlen (target)); -} - -static void -ephy_editable_toolbar_remove_cb (EggAction *action, - EphyEditableToolbar *etoolbar) -{ - EphyToolbarsToolbar *t; - - t = g_object_get_data (G_OBJECT (etoolbar), "popup_toolbar"); - - ephy_toolbars_group_remove_toolbar (etoolbar->priv->group, t); -} - -static void -ephy_editable_toolbar_edit_cb (EggAction *action, - EphyEditableToolbar *etoolbar) -{ - ephy_editable_toolbar_edit (etoolbar, NULL); -} - -static GtkWidget * -get_item_widget (EphyEditableToolbar *t, gpointer data) -{ - GtkWidget *widget; - char *path; - - path = ephy_toolbars_group_get_path (t->priv->group, data); - g_return_val_if_fail (path != NULL, NULL); - - widget = egg_menu_merge_get_widget (t->priv->merge, path); - g_free (path); - - return widget; -} - -static void -connect_item_drag_source (EphyToolbarsItem *item, EphyEditableToolbar *etoolbar) -{ - GtkWidget *toolitem; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - g_return_if_fail (item != NULL); - - toolitem = get_item_widget (etoolbar, item); - - if (!g_object_get_data (G_OBJECT (toolitem), "drag_source_set")) - { - g_object_set_data (G_OBJECT (toolitem), "drag_source_set", - GINT_TO_POINTER (TRUE)); - - egg_tool_item_set_use_drag_window (EGG_TOOL_ITEM (toolitem), TRUE); - - g_object_set_data (G_OBJECT (toolitem), "item_data", item); - - gtk_drag_source_set (toolitem, GDK_BUTTON1_MASK, - source_drag_types, n_source_drag_types, - GDK_ACTION_MOVE); - g_signal_connect (toolitem, "drag_data_get", - G_CALLBACK (drag_data_get_cb), - etoolbar); - g_signal_connect (toolitem, "drag_data_delete", - G_CALLBACK (drag_data_delete_cb), - etoolbar); - } -} - -static void -disconnect_item_drag_source (EphyToolbarsItem *item, EphyEditableToolbar *etoolbar) -{ - GtkWidget *toolitem; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - g_return_if_fail (item != NULL); - - toolitem = get_item_widget (etoolbar, item); - - if (g_object_get_data (G_OBJECT (toolitem), "drag_source_set")) - { - g_object_set_data (G_OBJECT (toolitem), "drag_source_set", - GINT_TO_POINTER (FALSE)); - - egg_tool_item_set_use_drag_window (EGG_TOOL_ITEM (toolitem), FALSE); - - g_signal_handlers_disconnect_by_func (toolitem, - G_CALLBACK (drag_data_get_cb), - etoolbar); - g_signal_handlers_disconnect_by_func (toolitem, - G_CALLBACK (drag_data_delete_cb), - etoolbar); - } -} - -static void -connect_toolbar_drag_source (EphyToolbarsToolbar *t, - EphyEditableToolbar *etoolbar) -{ - GtkWidget *tb; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - g_return_if_fail (t != NULL); - - tb = get_item_widget (etoolbar, t); - - g_return_if_fail (tb != NULL); - - if (!g_object_get_data (G_OBJECT (tb), "drag_source_set")) - { - g_object_set_data (G_OBJECT (tb), "drag_source_set", - GINT_TO_POINTER (TRUE)); - - g_object_set_data (G_OBJECT (tb), "toolbar_drag_data", t); - - g_signal_connect (tb, "drag_data_get", - G_CALLBACK (toolbar_drag_data_get_cb), - etoolbar); - g_signal_connect (tb, "drag_data_delete", - G_CALLBACK (toolbar_drag_data_delete_cb), - etoolbar); - } -} - -static void -disconnect_toolbar_drag_source (EphyToolbarsToolbar *t, - EphyEditableToolbar *etoolbar) -{ - GtkWidget *tb; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - g_return_if_fail (t != NULL); - - tb = get_item_widget (etoolbar, t); - - g_return_if_fail (tb != NULL); - - if (g_object_get_data (G_OBJECT (tb), "drag_source_set")) - { - g_object_set_data (G_OBJECT (tb), "drag_source_set", - GINT_TO_POINTER (FALSE)); - - g_signal_handlers_disconnect_by_func (tb, - G_CALLBACK (toolbar_drag_data_get_cb), - etoolbar); - g_signal_handlers_disconnect_by_func (tb, - G_CALLBACK (toolbar_drag_data_delete_cb), - etoolbar); - } -} - -static void -popup_toolbar_context_menu (EggToolbar *toolbar, ContextMenuData *data) -{ - GtkWidget *widget; - - widget = egg_menu_merge_get_widget (data->etoolbar->priv->popup_merge, - "/popups/EphyToolbarPopup"); - - g_object_set_data (G_OBJECT (data->etoolbar), - "popup_toolbar", data->t); - - g_return_if_fail (widget != NULL); - - gtk_menu_popup (GTK_MENU (widget), NULL, NULL, NULL, NULL, 2, - gtk_get_current_event_time ()); -} - -static void -setup_toolbar (EphyToolbarsToolbar *toolbar, EphyEditableToolbar *etoolbar) -{ - GtkWidget *widget; - ContextMenuData *data; - int signal_id; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - g_return_if_fail (toolbar != NULL); - - widget = get_item_widget (etoolbar, toolbar); - g_object_set_data (G_OBJECT (widget), "toolbar_data", toolbar); - - if (!g_object_get_data (G_OBJECT (widget), "drag_dest_set")) - { - LOG ("Setup drag dest for toolbar %s", toolbar->id) - g_object_set_data (G_OBJECT (widget), "drag_dest_set", - GINT_TO_POINTER (TRUE)); - gtk_drag_dest_set (widget, GTK_DEST_DEFAULT_ALL, - dest_drag_types, n_dest_drag_types, - GDK_ACTION_MOVE | GDK_ACTION_COPY); - g_signal_connect (widget, "drag_data_received", - G_CALLBACK (drag_data_received_cb), - etoolbar); - } - - if (!g_object_get_data (G_OBJECT (widget), "popup_signal_id")) - { - data = g_new0 (ContextMenuData, 1); - data->etoolbar = etoolbar; - data->t = toolbar; - - signal_id = g_signal_connect_data (widget, - "popup_context_menu", - G_CALLBACK (popup_toolbar_context_menu), - data, (GClosureNotify)g_free, 0); - - g_object_set_data (G_OBJECT (widget), "popup_signal_id", - GINT_TO_POINTER (signal_id)); - } - - etoolbar->priv->last_toolbar = widget; -} - -static void -ensure_toolbar_min_size (EphyToolbarsToolbar *toolbar, EphyEditableToolbar *t) -{ - GtkWidget *widget; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (t)); - g_return_if_fail (toolbar != NULL); - - widget = get_item_widget (t, toolbar); - - if (EGG_TOOLBAR (widget)->num_children == 0) - { - gtk_widget_set_size_request (widget, -1, 20); - } - else - { - gtk_widget_set_size_request (widget, -1, -1); - } -} - -static void -do_merge (EphyEditableToolbar *t) -{ - char *str; - guint ui_id; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (t)); - - str = ephy_toolbars_group_to_string (t->priv->group); - g_return_if_fail (str != NULL); - - LOG ("Merge UI\n%s", str) - - ui_id = egg_menu_merge_add_ui_from_string - (t->priv->merge, str, -1, NULL); - - if (t->priv->ui_id != 0) - { - LOG ("Remove old toolbar") - - egg_menu_merge_remove_ui (t->priv->merge, - t->priv->ui_id); - } - - t->priv->ui_id = ui_id; - - egg_menu_merge_ensure_update (t->priv->merge); - - ephy_toolbars_group_foreach_toolbar (t->priv->group, - (EphyToolbarsGroupForeachToolbarFunc) - setup_toolbar, t); - - if (t->priv->edit_mode) - { - ephy_toolbars_group_foreach_item (t->priv->group, - (EphyToolbarsGroupForeachItemFunc) - connect_item_drag_source, t); - - ephy_toolbars_group_foreach_toolbar (t->priv->group, - (EphyToolbarsGroupForeachToolbarFunc) - connect_toolbar_drag_source, t); - } - - ephy_toolbars_group_foreach_toolbar (t->priv->group, - (EphyToolbarsGroupForeachToolbarFunc) - ensure_toolbar_min_size, t); - - g_free (str); -} - -static void -ensure_action (EphyToolbarsItem *item, EphyEditableToolbar *t) -{ - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (t)); - g_return_if_fail (item != NULL); - - ephy_editable_toolbar_get_action (t, item->action); -} - -static void -group_changed_cb (EphyToolbarsGroup *group, EphyEditableToolbar *t) -{ - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (group)); - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (t)); - - t->priv->toolbars_dirty = TRUE; - - ephy_toolbars_group_foreach_item (t->priv->group, - (EphyToolbarsGroupForeachItemFunc) - ensure_action, t); - - queue_ui_update (t); -} - -static void -ephy_editable_toolbar_set_group (EphyEditableToolbar *t, EphyToolbarsGroup *group) -{ - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (group)); - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (t)); - - t->priv->group = group; - - g_signal_connect_object (group, "changed", - G_CALLBACK (group_changed_cb), - t, 0); -} - -static void -ephy_editable_toolbar_set_merge (EphyEditableToolbar *t, EggMenuMerge *merge) -{ - g_return_if_fail (EGG_IS_MENU_MERGE (merge)); - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (t)); - - t->priv->merge = merge; - - LOG ("Got MenuMerge") - - ephy_toolbars_group_foreach_item (t->priv->group, - (EphyToolbarsGroupForeachItemFunc) - ensure_action, t); - - do_merge (t); -} - -static void -ephy_editable_toolbar_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - EphyEditableToolbar *t = EPHY_EDITABLE_TOOLBAR (object); - - switch (prop_id) - { - case PROP_MENU_MERGE: - ephy_editable_toolbar_set_merge (t, g_value_get_object (value)); - break; - case PROP_TOOLBARS_GROUP: - ephy_editable_toolbar_set_group (t, g_value_get_object (value)); - break; - } -} - -static void -ephy_editable_toolbar_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - EphyEditableToolbar *t = EPHY_EDITABLE_TOOLBAR (object); - - switch (prop_id) - { - case PROP_MENU_MERGE: - g_value_set_object (value, t->priv->merge); - break; - case PROP_TOOLBARS_GROUP: - g_value_set_object (value, t->priv->group); - break; - } -} - -static void -ephy_editable_toolbar_class_init (EphyEditableToolbarClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - - object_class->finalize = ephy_editable_toolbar_finalize; - object_class->set_property = ephy_editable_toolbar_set_property; - object_class->get_property = ephy_editable_toolbar_get_property; - - klass->get_action = impl_get_action; - klass->get_action_name = impl_get_action_name; - - g_object_class_install_property (object_class, - PROP_MENU_MERGE, - g_param_spec_object ("MenuMerge", - "MenuMerge", - "Menu merge", - EGG_TYPE_MENU_MERGE, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_TOOLBARS_GROUP, - g_param_spec_object ("ToolbarsGroup", - "ToolbarsGroup", - "Toolbars Group", - EPHY_TOOLBARS_GROUP_TYPE, - G_PARAM_READWRITE)); -} - -static void -ephy_editable_toolbar_init (EphyEditableToolbar *t) -{ - int i; - - t->priv = g_new0 (EphyEditableToolbarPrivate, 1); - - t->priv->merge = NULL; - t->priv->editor = NULL; - t->priv->ui_id = 0; - t->priv->toolbars_dirty = FALSE; - t->priv->editor_sheet_dirty = FALSE; - t->priv->edit_mode = FALSE; - t->priv->actions_list = NULL; - - for (i = 0; i < ephy_toolbar_popups_n_entries; i++) - { - ephy_toolbar_popups[i].user_data = t; - } - - t->priv->popup_merge = egg_menu_merge_new (); - - t->priv->popup_action_group = egg_action_group_new ("ToolbarPopupActions"); - egg_action_group_add_actions (t->priv->popup_action_group, - ephy_toolbar_popups, - ephy_toolbar_popups_n_entries); - egg_menu_merge_insert_action_group (t->priv->popup_merge, - t->priv->popup_action_group, 0); - egg_menu_merge_add_ui_from_file (t->priv->popup_merge, - ephy_file ("epiphany-toolbar-popup-ui.xml"), - NULL); - - update_popup_menu (t); -} - -static void -ephy_editable_toolbar_finalize (GObject *object) -{ - EphyEditableToolbar *t = EPHY_EDITABLE_TOOLBAR (object); - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (object)); - - if (t->priv->editor) - { - gtk_widget_destroy (t->priv->editor); - } - - g_object_unref (t->priv->popup_action_group); - egg_menu_merge_remove_action_group (t->priv->popup_merge, - t->priv->popup_action_group); - g_object_unref (t->priv->popup_merge); - - g_free (t->priv); - - LOG ("EphyEditableToolbar finalized") - - G_OBJECT_CLASS (parent_class)->finalize (object); -} - -EphyEditableToolbar * -ephy_editable_toolbar_new (EggMenuMerge *merge) -{ - EphyEditableToolbar *t; - - t = EPHY_EDITABLE_TOOLBAR (g_object_new (EPHY_EDITABLE_TOOLBAR_TYPE, - "MenuMerge", merge, - NULL)); - - g_return_val_if_fail (t->priv != NULL, NULL); - - return t; -} - -static void -hide_editor (EphyEditableToolbar *etoolbar) -{ - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - gtk_widget_hide (GTK_WIDGET (etoolbar->priv->editor)); -} - -static void -editor_drag_data_received_cb (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - GtkSelectionData *selection_data, - guint info, - guint time_, - EphyEditableToolbar *etoolbar) -{ - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - etoolbar->priv->editor_sheet_dirty = TRUE; - queue_ui_update (etoolbar); -} - -static void -editor_drag_data_delete_cb (GtkWidget *widget, - GdkDragContext *context, - EphyEditableToolbar *etoolbar) -{ - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - etoolbar->priv->editor_sheet_dirty = TRUE; - queue_ui_update (etoolbar); -} - -static void -editor_close (EphyEditableToolbar *etoolbar) -{ - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - etoolbar->priv->edit_mode = FALSE; - ephy_toolbars_group_foreach_item (etoolbar->priv->group, - (EphyToolbarsGroupForeachItemFunc) - disconnect_item_drag_source, - etoolbar); - ephy_toolbars_group_foreach_toolbar (etoolbar->priv->group, - (EphyToolbarsGroupForeachToolbarFunc) - disconnect_toolbar_drag_source, - etoolbar); - - update_popup_menu (etoolbar); - hide_editor (etoolbar); -} - -static void -editor_add_toolbar (EphyEditableToolbar *etoolbar) -{ - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - ephy_toolbars_group_add_toolbar (etoolbar->priv->group); - - etoolbar->priv->toolbars_dirty = TRUE; - queue_ui_update (etoolbar); -} - -static void -dialog_response_cb (GtkDialog *dialog, gint response_id, - EphyEditableToolbar *etoolbar) -{ - switch (response_id) - { - case RESPONSE_ADD_TOOLBAR: - editor_add_toolbar (etoolbar); - break; - case GTK_RESPONSE_CLOSE: - editor_close (etoolbar); - break; - } -} - -static void -setup_editor (EphyEditableToolbar *etoolbar, GtkWidget *window) -{ - GtkWidget *editor; - GtkWidget *scrolled_window; - GtkWidget *vbox; - GtkWidget *label_hbox; - GtkWidget *image; - GtkWidget *label; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - editor = gtk_dialog_new (), - gtk_dialog_set_has_separator (GTK_DIALOG (editor), FALSE); - gtk_widget_set_size_request (GTK_WIDGET (editor), 500, 330); - gtk_window_set_transient_for (GTK_WINDOW (editor), GTK_WINDOW (window)); - gtk_window_set_title (GTK_WINDOW (editor), "Toolbar editor"); - etoolbar->priv->editor = editor; - - vbox = gtk_vbox_new (FALSE, 12); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editor)->vbox), vbox); - scrolled_window = gtk_scrolled_window_new (NULL, NULL); - etoolbar->priv->scrolled_window = scrolled_window; - gtk_widget_show (scrolled_window); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0); - label_hbox = gtk_hbox_new (FALSE, 6); - gtk_widget_show (label_hbox); - gtk_box_pack_start (GTK_BOX (vbox), label_hbox, FALSE, FALSE, 0); - image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG); - gtk_widget_show (image); - gtk_box_pack_start (GTK_BOX (label_hbox), image, FALSE, FALSE, 0); - label = gtk_label_new (_("Drag an item onto the toolbars above to add it, " - "from the toolbars in the items table to remove it.")); - gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (label_hbox), label, FALSE, TRUE, 0); - - gtk_dialog_add_button (GTK_DIALOG (editor), - _("Add Toolbar"), - RESPONSE_ADD_TOOLBAR); - gtk_dialog_add_button (GTK_DIALOG (editor), - GTK_STOCK_CLOSE, - GTK_RESPONSE_CLOSE); - - g_signal_connect (editor, "response", - G_CALLBACK (dialog_response_cb), - etoolbar); - - update_editor_sheet (etoolbar); -} - -static void -add_to_list (EphyToolbarsItem *item, GList **l) -{ - g_return_if_fail (item != NULL); - - *l = g_list_append (*l, item); -} - -static void -update_editor_sheet (EphyEditableToolbar *etoolbar) -{ - GList *l; - GList *to_drag = NULL; - int x, y, height, width; - GtkWidget *table; - GtkWidget *viewport; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - viewport = GTK_BIN (etoolbar->priv->scrolled_window)->child; - if (viewport) - { - table = GTK_BIN (viewport)->child; - gtk_container_remove (GTK_CONTAINER (viewport), table); - } - table = gtk_table_new (0, 0, TRUE); - etoolbar->priv->table = table; - gtk_container_set_border_width (GTK_CONTAINER (table), 12); - gtk_widget_show (table); - gtk_scrolled_window_add_with_viewport - (GTK_SCROLLED_WINDOW (etoolbar->priv->scrolled_window), table); - gtk_drag_dest_set (table, GTK_DEST_DEFAULT_ALL, - dest_drag_types, n_dest_drag_types, GDK_ACTION_MOVE); - g_signal_connect (table, "drag_data_received", - G_CALLBACK (editor_drag_data_received_cb), - etoolbar); - - ephy_toolbars_group_foreach_available (etoolbar->priv->group, - (EphyToolbarsGroupForeachItemFunc) - add_to_list, &to_drag); - - x = y = 0; - width = 4; - height = (g_list_length (to_drag) - 1) / width + 1; - gtk_table_resize (GTK_TABLE (etoolbar->priv->table), height, width); - - for (l = to_drag; l != NULL; l = l->next) - { - GtkWidget *event_box; - GtkWidget *vbox; - GtkWidget *icon; - GtkWidget *label; - EphyToolbarsItem *node = (EphyToolbarsItem *) (l->data); - EggAction *action; - - action = ephy_editable_toolbar_get_action - (etoolbar, node->action); - g_return_if_fail (action != NULL); - - event_box = gtk_event_box_new (); - gtk_widget_show (event_box); - gtk_drag_source_set (event_box, - GDK_BUTTON1_MASK, - source_drag_types, 1, - GDK_ACTION_MOVE); - g_signal_connect (event_box, "drag_data_get", - G_CALLBACK (drag_data_get_cb), - etoolbar); - g_signal_connect (event_box, "drag_data_delete", - G_CALLBACK (editor_drag_data_delete_cb), - etoolbar); - - g_object_set_data (G_OBJECT (event_box), "egg-action", action); - - vbox = gtk_vbox_new (0, FALSE); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (event_box), vbox); - - icon = gtk_image_new_from_stock - (action->stock_id ? action->stock_id : GTK_STOCK_DND, - GTK_ICON_SIZE_LARGE_TOOLBAR); - gtk_widget_show (icon); - gtk_box_pack_start (GTK_BOX (vbox), icon, FALSE, TRUE, 0); - - label = gtk_label_new_with_mnemonic (action->label); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0); - - gtk_table_attach_defaults (GTK_TABLE (etoolbar->priv->table), - event_box, x, x + 1, y, y + 1); - - x ++; - if (x >= width) - { - x = 0; - y++; - } - } - - g_list_free (to_drag); -} - -static void -show_editor (EphyEditableToolbar *etoolbar) -{ - GtkWidget *editor = etoolbar->priv->editor; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - g_return_if_fail (editor != NULL); - - gtk_widget_show (GTK_WIDGET (editor)); -} - -static void -set_action_sensitive (EphyToolbarsItem *item, EphyEditableToolbar *etoolbar) -{ - EggAction *action; - - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - g_return_if_fail (item != NULL); - - if (!item->separator) - { - action = find_action (etoolbar, item->action); - g_object_set (action, "sensitive", TRUE, NULL); - } -} - -void -ephy_editable_toolbar_edit (EphyEditableToolbar *etoolbar, GtkWidget *window) -{ - g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); - - etoolbar->priv->edit_mode = TRUE; - ephy_toolbars_group_foreach_item (etoolbar->priv->group, - (EphyToolbarsGroupForeachItemFunc) - connect_item_drag_source, etoolbar); - ephy_toolbars_group_foreach_item (etoolbar->priv->group, - (EphyToolbarsGroupForeachItemFunc) - set_action_sensitive, etoolbar); - ephy_toolbars_group_foreach_toolbar (etoolbar->priv->group, - (EphyToolbarsGroupForeachToolbarFunc) - connect_toolbar_drag_source, etoolbar); - - update_popup_menu (etoolbar); - - setup_editor (etoolbar, window); - show_editor (etoolbar); -} - -char * -ephy_editable_toolbar_get_action_name (EphyEditableToolbar *etoolbar, - const char *drag_type, - const char *data) -{ - EphyEditableToolbarClass *klass = EPHY_EDITABLE_TOOLBAR_GET_CLASS (etoolbar); - return klass->get_action_name (etoolbar, drag_type, data); -} - -EggAction * -ephy_editable_toolbar_get_action (EphyEditableToolbar *etoolbar, - const char *name) -{ - EphyEditableToolbarClass *klass = EPHY_EDITABLE_TOOLBAR_GET_CLASS (etoolbar); - return klass->get_action (etoolbar, name); -} diff --git a/lib/widgets/ephy-editable-toolbar.h b/lib/widgets/ephy-editable-toolbar.h deleted file mode 100755 index 68e6f39b5..000000000 --- a/lib/widgets/ephy-editable-toolbar.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 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 - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef EPHY_EDITABLE_TOOLBAR_H -#define EPHY_EDITABLE_TOOLBAR_H - -#include <glib-object.h> -#include <glib.h> -#include "egg-menu-merge.h" - -G_BEGIN_DECLS - -typedef struct EphyEditableToolbarClass EphyEditableToolbarClass; - -#define EPHY_EDITABLE_TOOLBAR_TYPE (ephy_editable_toolbar_get_type ()) -#define EPHY_EDITABLE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EPHY_EDITABLE_TOOLBAR_TYPE, EphyEditableToolbar)) -#define EPHY_EDITABLE_TOOLBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EPHY_EDITABLE_TOOLBAR_TYPE, EphyEditableToolbarClass)) -#define IS_EPHY_EDITABLE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EPHY_EDITABLE_TOOLBAR_TYPE)) -#define IS_EPHY_EDITABLE_TOOLBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EPHY_EDITABLE_TOOLBAR_TYPE)) -#define EPHY_EDITABLE_TOOLBAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EPHY_EDITABLE_TOOLBAR_TYPE, EphyEditableToolbarClass)) - - -typedef struct EphyEditableToolbar EphyEditableToolbar; -typedef struct EphyEditableToolbarPrivate EphyEditableToolbarPrivate; - -struct EphyEditableToolbar -{ - GObject parent_object; - EphyEditableToolbarPrivate *priv; -}; - -struct EphyEditableToolbarClass -{ - GObjectClass parent_class; - - char * (* get_action_name) (EphyEditableToolbar *etoolbar, - const char *drag_type, - const char *data); - EggAction * (* get_action) (EphyEditableToolbar *etoolbar, - const char *name); -}; - -GType ephy_editable_toolbar_get_type (void); - -EphyEditableToolbar *ephy_editable_toolbar_new (EggMenuMerge *merge); - -void ephy_editable_toolbar_edit (EphyEditableToolbar *etoolbar, - GtkWidget *window); - -char *ephy_editable_toolbar_get_action_name (EphyEditableToolbar *etoolbar, - const char *drag_type, - const char *data); - -EggAction *ephy_editable_toolbar_get_action (EphyEditableToolbar *etoolbar, - const char *name); - - -G_END_DECLS - -#endif diff --git a/lib/widgets/ephy-toolbars-group.c b/lib/widgets/ephy-toolbars-group.c deleted file mode 100755 index 9a1d47528..000000000 --- a/lib/widgets/ephy-toolbars-group.c +++ /dev/null @@ -1,656 +0,0 @@ -/* - * Copyright (C) 2002 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 - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include "ephy-toolbars-group.h" -#include "ephy-debug.h" - -#include <libgnome/gnome-i18n.h> -#include <string.h> - -static void ephy_toolbars_group_class_init (EphyToolbarsGroupClass *klass); -static void ephy_toolbars_group_init (EphyToolbarsGroup *t); -static void ephy_toolbars_group_finalize (GObject *object); - -enum -{ - CHANGED, - LAST_SIGNAL -}; - -static guint ephy_toolbars_group_signals[LAST_SIGNAL] = { 0 }; - -static GObjectClass *parent_class = NULL; - -struct EphyToolbarsGroupPrivate -{ - GNode *available_actions; - GNode *toolbars; - char *defaults; - char *user; -}; - -GType -ephy_toolbars_group_get_type (void) -{ - static GType ephy_toolbars_group_type = 0; - - if (ephy_toolbars_group_type == 0) - { - static const GTypeInfo our_info = - { - sizeof (EphyToolbarsGroupClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) ephy_toolbars_group_class_init, - NULL, - NULL, /* class_data */ - sizeof (EphyToolbarsGroup), - 0, /* n_preallocs */ - (GInstanceInitFunc) ephy_toolbars_group_init - }; - - ephy_toolbars_group_type = g_type_register_static (G_TYPE_OBJECT, - "EphyToolbarsGroup", - &our_info, 0); - } - - return ephy_toolbars_group_type; - -} - -static xmlDocPtr -ephy_toolbars_group_to_xml (EphyToolbarsGroup *t) -{ - GNode *l1, *l2, *tl; - xmlDocPtr doc; - - g_return_val_if_fail (IS_EPHY_TOOLBARS_GROUP (t), NULL); - - tl = t->priv->toolbars; - - xmlIndentTreeOutput = TRUE; - doc = xmlNewDoc ("1.0"); - doc->children = xmlNewDocNode (doc, NULL, "toolbars", NULL); - - for (l1 = tl->children; l1 != NULL; l1 = l1->next) - { - xmlNodePtr tnode; - - tnode = xmlNewChild (doc->children, NULL, "toolbar", NULL); - - for (l2 = l1->children; l2 != NULL; l2 = l2->next) - { - xmlNodePtr node; - EphyToolbarsItem *item = l2->data; - - if (item->separator) - { - node = xmlNewChild (tnode, NULL, "separator", NULL); - } - else - { - node = xmlNewChild (tnode, NULL, "toolitem", NULL); - xmlSetProp (node, "verb", item->action); - } - } - } - - return doc; -} - -static void -toolbars_group_save (EphyToolbarsGroup *t) -{ - xmlDocPtr doc; - - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (t)); - - doc = ephy_toolbars_group_to_xml (t); - xmlSaveFormatFile (t->priv->user, doc, 1); - xmlFreeDoc (doc); -} - -static EphyToolbarsToolbar * -toolbars_toolbar_new (void) -{ - EphyToolbarsToolbar *toolbar; - static int id = 0; - - toolbar = g_new0 (EphyToolbarsToolbar, 1); - toolbar->id = g_strdup_printf ("Toolbar%d", id); - - id++; - - return toolbar; -} - -static EphyToolbarsItem * -toolbars_item_new (const char *action, gboolean separator) -{ - EphyToolbarsItem *item; - static int id = 0; - - g_return_val_if_fail (action != NULL, NULL); - - item = g_new0 (EphyToolbarsItem, 1); - item->action = g_strdup (action); - item->separator = separator; - item->id = g_strdup_printf ("TI%d", id); - - id++; - - return item; -} - -static void -free_toolbar_node (EphyToolbarsToolbar *toolbar) -{ - g_return_if_fail (toolbar != NULL); - - g_free (toolbar->id); - g_free (toolbar); -} - -static void -free_item_node (EphyToolbarsItem *item) -{ - g_return_if_fail (item != NULL); - - g_free (item->action); - g_free (item->id); - g_free (item); -} - -static void -add_action (EphyToolbarsGroup *t, - GNode *parent, - int pos, - const char *name) -{ - EphyToolbarsItem *item; - GNode *node; - gboolean separator; - - LOG ("Add action, name %s", name) - - separator = (strcmp (name, "separator") == 0); - item = toolbars_item_new (name, separator); - item->parent = parent->data; - node = g_node_new (item); - - g_node_insert (parent, pos, node); -} - -void -ephy_toolbars_group_add_item (EphyToolbarsGroup *t, - EphyToolbarsToolbar *parent, - int pos, - const char *name) -{ - GNode *parent_node; - - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (t)); - g_return_if_fail (parent != NULL); - g_return_if_fail (name != NULL); - - parent_node = g_node_find (t->priv->toolbars, G_IN_ORDER, G_TRAVERSE_ALL, parent); - - add_action (t, parent_node, pos, name); - - toolbars_group_save (t); - - g_signal_emit (G_OBJECT (t), ephy_toolbars_group_signals[CHANGED], 0); -} - -static void -parse_item_list (EphyToolbarsGroup *t, - xmlNodePtr child, - GNode *parent) -{ - while (child) - { - if (xmlStrEqual (child->name, "toolitem")) - { - xmlChar *verb; - - verb = xmlGetProp (child, "verb"); - add_action (t, parent, -1, verb); - - xmlFree (verb); - } - else if (xmlStrEqual (child->name, "separator")) - { - add_action (t, parent, -1, "separator"); - } - - child = child->next; - } -} - -static GNode * -add_toolbar (EphyToolbarsGroup *t) -{ - EphyToolbarsToolbar *toolbar; - GNode *node; - - toolbar = toolbars_toolbar_new (); - node = g_node_new (toolbar); - g_node_append (t->priv->toolbars, node); - - return node; -} - -EphyToolbarsToolbar * -ephy_toolbars_group_add_toolbar (EphyToolbarsGroup *t) -{ - GNode *node; - - g_return_val_if_fail (IS_EPHY_TOOLBARS_GROUP (t), NULL); - - node = add_toolbar (t); - g_return_val_if_fail (node != NULL, NULL); - - toolbars_group_save (t); - - g_signal_emit (G_OBJECT (t), ephy_toolbars_group_signals[CHANGED], 0); - - return node->data; -} - -static void -parse_toolbars (EphyToolbarsGroup *t, - xmlNodePtr child) -{ - while (child) - { - if (xmlStrEqual (child->name, "toolbar")) - { - GNode *node; - - node = add_toolbar (t); - parse_item_list (t, child->children, node); - } - - child = child->next; - } -} - -static void -load_defaults (EphyToolbarsGroup *t) -{ - xmlDocPtr doc; - xmlNodePtr child; - xmlNodePtr root; - const char *xml_filepath; - - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (t)); - - LOG ("Load default toolbar info") - - xml_filepath = t->priv->defaults; - - doc = xmlParseFile (xml_filepath); - root = xmlDocGetRootElement (doc); - - child = root->children; - while (child) - { - if (xmlStrEqual (child->name, "available")) - { - t->priv->available_actions = g_node_new (NULL); - parse_item_list (t, child->children, - t->priv->available_actions); - } - else if (xmlStrEqual (child->name, "default") && - t->priv->toolbars == NULL) - { - t->priv->toolbars = g_node_new (NULL); - parse_toolbars (t, child->children); - } - - child = child->next; - } - - xmlFreeDoc (doc); -} - -static void -load_toolbar (EphyToolbarsGroup *t) -{ - xmlDocPtr doc; - xmlNodePtr root; - const char *xml_filepath = t->priv->user; - - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (t)); - - LOG ("Load custom toolbar") - - if (!g_file_test (xml_filepath, G_FILE_TEST_EXISTS)) return; - - doc = xmlParseFile (xml_filepath); - root = xmlDocGetRootElement (doc); - - t->priv->toolbars = g_node_new (NULL); - parse_toolbars (t, root->children); - - xmlFreeDoc (doc); -} - -char * -ephy_toolbars_group_to_string (EphyToolbarsGroup *t) -{ - GString *s; - GNode *l1, *l2, *tl; - char *result; - int k = 0; - - g_return_val_if_fail (IS_EPHY_TOOLBARS_GROUP (t), NULL); - - tl = t->priv->toolbars; - - g_return_val_if_fail (tl != NULL, NULL); - - s = g_string_new (NULL); - g_string_append (s, "<Root>"); - for (l1 = tl->children; l1 != NULL; l1 = l1->next) - { - int i = 0; - EphyToolbarsToolbar *toolbar = l1->data; - - g_string_append_printf - (s, "<dockitem name=\"%s\">\n", toolbar->id); - - for (l2 = l1->children; l2 != NULL; l2 = l2->next) - { - EphyToolbarsItem *item = l2->data; - - if (item->separator) - { - g_string_append_printf - (s, "<placeholder name=\"PlaceHolder%d-%d\">" - "<separator name=\"%s\"/>" - "</placeholder>\n", i, k, item->id); - } - else - { - g_string_append_printf - (s, "<placeholder name=\"PlaceHolder%d-%d\">" - "<toolitem name=\"%s\" verb=\"%s\"/>" - "</placeholder>\n", - i, k, item->id, item->action); - } - i++; - } - - g_string_append (s, "</dockitem>\n"); - - k++; - } - g_string_append (s, "</Root>"); - - result = g_string_free (s, FALSE); - - return result; -} - -static void -ephy_toolbars_group_class_init (EphyToolbarsGroupClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - - object_class->finalize = ephy_toolbars_group_finalize; - - ephy_toolbars_group_signals[CHANGED] = - g_signal_new ("changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EphyToolbarsGroupClass, changed), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); - -} - -static void -ephy_toolbars_group_init (EphyToolbarsGroup *t) -{ - t->priv = g_new0 (EphyToolbarsGroupPrivate, 1); - - t->priv->available_actions = NULL; - t->priv->toolbars = NULL; - t->priv->user = NULL; - t->priv->defaults = NULL; -} - -static void -ephy_toolbars_group_finalize (GObject *object) -{ - EphyToolbarsGroup *t = EPHY_TOOLBARS_GROUP (object); - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (object)); - - g_node_children_foreach (t->priv->available_actions, G_IN_ORDER, - (GNodeForeachFunc)free_item_node, NULL); - ephy_toolbars_group_foreach_toolbar - (t, (EphyToolbarsGroupForeachToolbarFunc)free_toolbar_node, NULL); - ephy_toolbars_group_foreach_item - (t, (EphyToolbarsGroupForeachItemFunc)free_item_node, NULL); - g_node_destroy (t->priv->available_actions); - g_node_destroy (t->priv->toolbars); - - g_free (t->priv->user); - g_free (t->priv->defaults); - - g_free (t->priv); - - LOG ("EphyToolbarsGroup finalized") - - G_OBJECT_CLASS (parent_class)->finalize (object); -} - -EphyToolbarsGroup * -ephy_toolbars_group_new (void) -{ - EphyToolbarsGroup *t; - - t = EPHY_TOOLBARS_GROUP (g_object_new (EPHY_TOOLBARS_GROUP_TYPE, - NULL)); - - g_return_val_if_fail (t->priv != NULL, NULL); - - return t; -} - -void -ephy_toolbars_group_remove_toolbar (EphyToolbarsGroup *t, - EphyToolbarsToolbar *toolbar) -{ - GNode *node; - - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (t)); - g_return_if_fail (toolbar != NULL); - - node = g_node_find (t->priv->toolbars, G_IN_ORDER, G_TRAVERSE_ALL, toolbar); - g_return_if_fail (node != NULL); - free_toolbar_node (node->data); - g_node_destroy (node); - - toolbars_group_save (t); - - g_signal_emit (G_OBJECT (t), ephy_toolbars_group_signals[CHANGED], 0); -} - -void -ephy_toolbars_group_remove_item (EphyToolbarsGroup *t, - EphyToolbarsItem *item) -{ - GNode *node; - GNode *toolbar; - - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (t)); - g_return_if_fail (item != NULL); - - node = g_node_find (t->priv->toolbars, G_IN_ORDER, G_TRAVERSE_ALL, item); - g_return_if_fail (node != NULL); - toolbar = node->parent; - free_item_node (node->data); - g_node_destroy (node); - - if (g_node_n_children (toolbar) == 0) - { - free_toolbar_node (toolbar->data); - g_node_destroy (toolbar); - } - - toolbars_group_save (t); - - g_signal_emit (G_OBJECT (t), ephy_toolbars_group_signals[CHANGED], 0); -} - -void -ephy_toolbars_group_set_source (EphyToolbarsGroup *group, - const char *defaults, - const char *user) -{ - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (group)); - g_return_if_fail (defaults != NULL); - g_return_if_fail (user != NULL); - - group->priv->defaults = g_strdup (defaults); - group->priv->user = g_strdup (user); - - load_toolbar (group); - load_defaults (group); -} - -static gboolean -is_item_in_toolbars (EphyToolbarsGroup *group, const char *action) -{ - GNode *l1, *l2; - - g_return_val_if_fail (IS_EPHY_TOOLBARS_GROUP (group), FALSE); - g_return_val_if_fail (action != NULL, FALSE); - - for (l1 = group->priv->toolbars->children; l1 != NULL; l1 = l1->next) - { - for (l2 = l1->children; l2 != NULL; l2 = l2->next) - { - EphyToolbarsItem *item; - - item = (EphyToolbarsItem *) l2->data; - if (strcmp (action, item->action) == 0) return TRUE; - } - } - - return FALSE; -} - -void -ephy_toolbars_group_foreach_available (EphyToolbarsGroup *group, - EphyToolbarsGroupForeachItemFunc func, - gpointer data) -{ - GNode *l1; - - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (group)); - - for (l1 = group->priv->available_actions->children; l1 != NULL; l1 = l1->next) - { - EphyToolbarsItem *item; - - item = (EphyToolbarsItem *)l1->data; - - if (!is_item_in_toolbars (group, item->action)) - { - func (item, data); - } - } -} - -void -ephy_toolbars_group_foreach_toolbar (EphyToolbarsGroup *group, - EphyToolbarsGroupForeachToolbarFunc func, - gpointer data) -{ - GNode *l1; - - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (group)); - - for (l1 = group->priv->toolbars->children; l1 != NULL; l1 = l1->next) - { - func (l1->data, data); - } -} - -void -ephy_toolbars_group_foreach_item (EphyToolbarsGroup *group, - EphyToolbarsGroupForeachItemFunc func, - gpointer data) -{ - GNode *l1, *l2; - - g_return_if_fail (IS_EPHY_TOOLBARS_GROUP (group)); - - for (l1 = group->priv->toolbars->children; l1 != NULL; l1 = l1->next) - { - for (l2 = l1->children; l2 != NULL; l2 = l2->next) - { - func (l2->data, data); - } - } -} - -char * -ephy_toolbars_group_get_path (EphyToolbarsGroup *t, - gpointer item) -{ - GNode *node; - char *path = NULL; - EphyToolbarsItem *titem; - EphyToolbarsToolbar *toolbar; - - g_return_val_if_fail (IS_EPHY_TOOLBARS_GROUP (t), NULL); - - node = g_node_find (t->priv->toolbars, G_IN_ORDER, G_TRAVERSE_ALL, item); - g_return_val_if_fail (node != NULL, NULL); - titem = (EphyToolbarsItem *)node->data; - toolbar = (EphyToolbarsToolbar *)node->data; - - switch (g_node_depth (node)) - { - case 2: - path = g_strdup_printf ("/%s", toolbar->id); - break; - case 3: - path = g_strdup_printf - ("/Toolbar%d/PlaceHolder%d-%d/%s", - g_node_child_position (node->parent->parent, node->parent), - g_node_child_position (node->parent, node), - g_node_child_position (node->parent->parent, node->parent), - titem->id); - break; - default: - g_assert_not_reached (); - } - - return path; -} diff --git a/lib/widgets/ephy-toolbars-group.h b/lib/widgets/ephy-toolbars-group.h deleted file mode 100755 index 1d1c12a7d..000000000 --- a/lib/widgets/ephy-toolbars-group.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 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 - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef EPHY_TOOLBARS_GROUP_H -#define EPHY_TOOLBARS_GROUP_H - -#include <gtk/gtkwidget.h> -#include <libxml/parser.h> - -G_BEGIN_DECLS - -typedef struct EphyToolbarsGroupClass EphyToolbarsGroupClass; - -#define EPHY_TOOLBARS_GROUP_TYPE (ephy_toolbars_group_get_type ()) -#define EPHY_TOOLBARS_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EPHY_TOOLBARS_GROUP_TYPE, EphyToolbarsGroup)) -#define EPHY_TOOLBARS_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EPHY_TOOLBARS_GROUP_TYPE, EphyToolbarsGroupClass)) -#define IS_EPHY_TOOLBARS_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EPHY_TOOLBARS_GROUP_TYPE)) -#define IS_EPHY_TOOLBARS_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EPHY_TOOLBARS_GROUP_TYPE)) -#define EPHY_TOOLBARS_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EPHY_TOOLBARS_GROUP_TYPE, EphyToolbarsGroupClass)) - - -typedef struct EphyToolbarsGroup EphyToolbarsGroup; -typedef struct EphyToolbarsGroupPrivate EphyToolbarsGroupPrivate; - -typedef struct -{ - char *id; -} EphyToolbarsToolbar; - -typedef struct -{ - char *id; - gboolean separator; - char *action; - EphyToolbarsToolbar *parent; -} EphyToolbarsItem; - -typedef void (* EphyToolbarsGroupForeachToolbarFunc) (EphyToolbarsToolbar *toolbar, - gpointer data); -typedef void (* EphyToolbarsGroupForeachItemFunc) (EphyToolbarsItem *item, - gpointer data); - -struct EphyToolbarsGroup -{ - GObject parent_object; - EphyToolbarsGroupPrivate *priv; -}; - -struct EphyToolbarsGroupClass -{ - GObjectClass parent_class; - - void (* changed) (EphyToolbarsGroup *group); -}; - -GType ephy_toolbars_group_get_type (void); - -EphyToolbarsGroup *ephy_toolbars_group_new (void); - -void ephy_toolbars_group_set_source (EphyToolbarsGroup *group, - const char *defaults, - const char *user); - -EphyToolbarsToolbar *ephy_toolbars_group_add_toolbar (EphyToolbarsGroup *t); - -void ephy_toolbars_group_add_item (EphyToolbarsGroup *t, - EphyToolbarsToolbar *parent, - int pos, - const char *name); - -void ephy_toolbars_group_remove_toolbar (EphyToolbarsGroup *t, - EphyToolbarsToolbar *toolbar); - -void ephy_toolbars_group_remove_item (EphyToolbarsGroup *t, - EphyToolbarsItem *item); - -void ephy_toolbars_group_foreach_available (EphyToolbarsGroup *group, - EphyToolbarsGroupForeachItemFunc func, - gpointer data); - -void ephy_toolbars_group_foreach_toolbar (EphyToolbarsGroup *group, - EphyToolbarsGroupForeachToolbarFunc func, - gpointer data); - -void ephy_toolbars_group_foreach_item (EphyToolbarsGroup *group, - EphyToolbarsGroupForeachItemFunc func, - gpointer data); - -char *ephy_toolbars_group_to_string (EphyToolbarsGroup *t); - -char *ephy_toolbars_group_get_path (EphyToolbarsGroup *t, - gpointer item); - -G_END_DECLS - -#endif |