diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bookmarks/ephy-bookmark-action-group.c | 80 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmark-action.c | 24 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmark-action.h | 24 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmark-factory-action.c | 9 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks-editor.c | 38 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks-menu.c | 50 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks-ui.c | 101 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks-ui.h | 42 | ||||
-rw-r--r-- | src/bookmarks/ephy-open-tabs-action.c | 40 | ||||
-rw-r--r-- | src/bookmarks/ephy-open-tabs-action.h | 4 | ||||
-rw-r--r-- | src/bookmarks/ephy-topic-action-group.c | 90 | ||||
-rw-r--r-- | src/bookmarks/ephy-topic-action-group.h | 3 | ||||
-rw-r--r-- | src/bookmarks/ephy-topic-action.c | 10 | ||||
-rw-r--r-- | src/bookmarks/ephy-topic-action.h | 16 | ||||
-rw-r--r-- | src/bookmarks/ephy-topic-factory-action.c | 11 |
15 files changed, 278 insertions, 264 deletions
diff --git a/src/bookmarks/ephy-bookmark-action-group.c b/src/bookmarks/ephy-bookmark-action-group.c index 05630bd85..522d9bc0a 100644 --- a/src/bookmarks/ephy-bookmark-action-group.c +++ b/src/bookmarks/ephy-bookmark-action-group.c @@ -24,6 +24,7 @@ #include "ephy-bookmark-action-group.h" #include "ephy-bookmark-action.h" #include "ephy-bookmarks.h" +#include "ephy-bookmarks-ui.h" #include "ephy-link.h" #include "ephy-node.h" #include "ephy-node-common.h" @@ -36,68 +37,57 @@ static void smart_added_cb (EphyNode *parent, EphyNode *child, - GtkActionGroup *actions) + GtkActionGroup *action_group) { GtkAction *action; - char *name; - - name = ephy_bookmark_action_name (child); - g_return_if_fail (name); - action = gtk_action_group_get_action (actions, name); + char name[EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE]; + + EPHY_BOOKMARK_ACTION_NAME_PRINTF (name, child); + + action = gtk_action_group_get_action (action_group, name); - if (action) + if (action != NULL) { - ephy_bookmark_action_updated - (EPHY_BOOKMARK_ACTION (action)); + ephy_bookmark_action_updated ((EphyBookmarkAction *) action); } - - g_free (name); } - static void smart_removed_cb (EphyNode *parent, EphyNode *child, guint index, - GtkActionGroup *actions) + GtkActionGroup *action_group) { GtkAction *action; - char *name; - - name = ephy_bookmark_action_name (child); - g_return_if_fail (name); - action = gtk_action_group_get_action (actions, name); + char name[EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE]; + + EPHY_BOOKMARK_ACTION_NAME_PRINTF (name, child); + + action = gtk_action_group_get_action (action_group, name); - if (action) + if (action != NULL) { - ephy_bookmark_action_updated - (EPHY_BOOKMARK_ACTION (action)); + ephy_bookmark_action_updated ((EphyBookmarkAction *) action); } - - g_free (name); } static void node_changed_cb (EphyNode *parent, EphyNode *child, guint property_id, - GtkActionGroup *actions) + GtkActionGroup *action_group) { GtkAction *action; - char *name; - - name = ephy_bookmark_action_name (child); - g_assert (name != NULL); + char name[EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE]; - action = gtk_action_group_get_action (actions, name); + EPHY_BOOKMARK_ACTION_NAME_PRINTF (name, child); + + action = gtk_action_group_get_action (action_group, name); - if (action) + if (action != NULL) { - ephy_bookmark_action_updated - (EPHY_BOOKMARK_ACTION (action)); + ephy_bookmark_action_updated ((EphyBookmarkAction *) action); } - - g_free (name); } static void @@ -106,22 +96,22 @@ node_added_cb (EphyNode *parent, GtkActionGroup *action_group) { GtkAction *action; - char *name, *accel; - - name = ephy_bookmark_action_name (child); + char name[EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE]; + char accel[256]; + + EPHY_BOOKMARK_ACTION_NAME_PRINTF (name, child); + action = ephy_bookmark_action_new (child, name); - accel = g_strjoin ("/", "<Actions>", - gtk_action_group_get_name (action_group), - name, NULL); + + g_snprintf (accel, sizeof (accel), "<Actions>/%s/%s", + gtk_action_group_get_name (action_group), + name); gtk_action_set_accel_path (action, accel); gtk_action_group_add_action (action_group, action); g_object_unref (action); - g_free (accel); - g_free (name); + ephy_bookmark_action_updated ((EphyBookmarkAction *) action); - ephy_bookmark_action_updated (EPHY_BOOKMARK_ACTION (action)); - g_signal_connect_swapped (action, "open-link", G_CALLBACK (ephy_link_open), action_group); } @@ -139,7 +129,7 @@ node_removed_cb (EphyNode *parent, action = gtk_action_group_get_action (action_group, name); - if (action) + if (action != NULL) { gtk_action_group_remove_action (action_group, action); } diff --git a/src/bookmarks/ephy-bookmark-action.c b/src/bookmarks/ephy-bookmark-action.c index 9f4f6ea6d..4fc541e96 100644 --- a/src/bookmarks/ephy-bookmark-action.c +++ b/src/bookmarks/ephy-bookmark-action.c @@ -689,24 +689,14 @@ ephy_bookmark_action_get_type (void) return type; } -char * -ephy_bookmark_action_name (EphyNode *node) -{ - return g_strdup_printf("Bmk%u", ephy_node_get_id (node)); -} - GtkAction * -ephy_bookmark_action_new (EphyNode *node, char *name) +ephy_bookmark_action_new (EphyNode *node, + const char *name) { - GtkAction *action; - - if(!name) name = ephy_bookmark_action_name (node); - g_return_val_if_fail (name, NULL); - - action = GTK_ACTION (g_object_new (EPHY_TYPE_BOOKMARK_ACTION, - "name", name, - "bookmark", node, - NULL)); + g_assert (name != NULL); - return action; + return GTK_ACTION (g_object_new (EPHY_TYPE_BOOKMARK_ACTION, + "name", name, + "bookmark", node, + NULL)); } diff --git a/src/bookmarks/ephy-bookmark-action.h b/src/bookmarks/ephy-bookmark-action.h index ec77a353b..cb770f0b4 100644 --- a/src/bookmarks/ephy-bookmark-action.h +++ b/src/bookmarks/ephy-bookmark-action.h @@ -37,9 +37,6 @@ G_BEGIN_DECLS #define EPHY_IS_BOOKMARK_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EPHY_TYPE_BOOKMARK_ACTION)) #define EPHY_BOOKMARK_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EPHY_TYPE_BOOKMARK_ACTION, EphyBookmarkActionClass)) -#define EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE 32 /* >= strlen ("Bmk") + max size of gulong + 1 */ -#define EPHY_BOOKMARK_ACTION_NAME_PRINTF(buffer,node) (g_snprintf (buffer, sizeof (buffer), "Bmk%u", ephy_node_get_id (node))) - typedef struct _EphyBookmarkAction EphyBookmarkAction; typedef struct _EphyBookmarkActionPrivate EphyBookmarkActionPrivate; typedef struct _EphyBookmarkActionClass EphyBookmarkActionClass; @@ -58,22 +55,21 @@ struct _EphyBookmarkActionClass }; -GType ephy_bookmark_action_get_type (void); - -char * ephy_bookmark_action_name (EphyNode *node); - -GtkAction * ephy_bookmark_action_new (EphyNode *node, char *name); +GType ephy_bookmark_action_get_type (void); +GtkAction *ephy_bookmark_action_new (EphyNode *node, + const char *name); -void ephy_bookmark_action_set_bookmark (EphyBookmarkAction *action, EphyNode *node); +void ephy_bookmark_action_set_bookmark (EphyBookmarkAction *action, + EphyNode *node); -EphyNode * ephy_bookmark_action_get_bookmark (EphyBookmarkAction *action); +EphyNode *ephy_bookmark_action_get_bookmark (EphyBookmarkAction *action); -void ephy_bookmark_action_updated (EphyBookmarkAction *action); +void ephy_bookmark_action_updated (EphyBookmarkAction *action); -void ephy_bookmark_action_activate (EphyBookmarkAction *action, - GtkWidget *widget, - EphyLinkFlags flags); +void ephy_bookmark_action_activate (EphyBookmarkAction *action, + GtkWidget *widget, + EphyLinkFlags flags); G_END_DECLS diff --git a/src/bookmarks/ephy-bookmark-factory-action.c b/src/bookmarks/ephy-bookmark-factory-action.c index 2547c8b8f..43c4683a0 100644 --- a/src/bookmarks/ephy-bookmark-factory-action.c +++ b/src/bookmarks/ephy-bookmark-factory-action.c @@ -25,6 +25,7 @@ #include "ephy-bookmark-factory-action.h" #include "ephy-bookmark-action.h" +#include "ephy-bookmarks-ui.h" #include "ephy-node-common.h" #include "ephy-shell.h" #include "ephy-stock-icons.h" @@ -97,7 +98,8 @@ build_menu_for_topic (GtkWidget *placeholder, EggToolbarsModel *model, EphyNode GtkWidget *menu, *item; EphyNode *node; GPtrArray *children, *bookmarks; - const char *name, *action; + const char *name; + char action[EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE]; gint i, flags; children = ephy_node_get_children (topic); @@ -112,10 +114,11 @@ build_menu_for_topic (GtkWidget *placeholder, EggToolbarsModel *model, EphyNode { node = g_ptr_array_index (bookmarks, i); - action = ephy_bookmark_action_name (node); + EPHY_BOOKMARK_ACTION_NAME_PRINTF (action, node); + flags = egg_toolbars_model_get_name_flags (model, action); if (flags & EGG_TB_MODEL_NAME_USED) - continue; + continue; name = ephy_node_get_property_string (node, EPHY_NODE_BMK_PROP_TITLE); item = gtk_menu_item_new_with_label (name); diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c index c031a4cd0..1a2ac5f2b 100644 --- a/src/bookmarks/ephy-bookmarks-editor.c +++ b/src/bookmarks/ephy-bookmarks-editor.c @@ -434,7 +434,6 @@ cmd_toolbar (GtkAction *action, EphyNode *node; gboolean show; const char *tname; - char *name; gint flags, tpos; GList *selection; GList *l; @@ -455,18 +454,23 @@ cmd_toolbar (GtkAction *action, if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->priv->bm_view))) { + char name[EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE]; + selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->priv->bm_view)); node = selection->data; - name = ephy_bookmark_action_name (node); + + EPHY_BOOKMARK_ACTION_NAME_PRINTF (name, node); + flags = egg_toolbars_model_get_name_flags (model, name); show = ((flags & EGG_TB_MODEL_NAME_USED) == 0); - g_free (name); for (l = selection; l; l = l->next) { node = l->data; - name = ephy_bookmark_action_name (node); + + EPHY_BOOKMARK_ACTION_NAME_PRINTF (name, node); + flags = egg_toolbars_model_get_name_flags (model, name); if(show && ((flags & EGG_TB_MODEL_NAME_USED) == 0)) { @@ -476,25 +480,29 @@ cmd_toolbar (GtkAction *action, { egg_toolbars_model_delete_item (model, name); } - g_free (name); } g_list_free (selection); } else if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->priv->key_view))) { + char name[EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE]; + selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->priv->key_view)); node = selection->data; - name = ephy_topic_action_name (node); + + EPHY_TOPIC_ACTION_NAME_PRINTF (name, node); + flags = egg_toolbars_model_get_name_flags (model, name); show = ((flags & EGG_TB_MODEL_NAME_USED) == 0); - g_free (name); for (l = selection; l; l = l->next) { node = l->data; - name = ephy_topic_action_name (node); + + EPHY_TOPIC_ACTION_NAME_PRINTF (name, node); + flags = egg_toolbars_model_get_name_flags (model, name); if(show && ((flags & EGG_TB_MODEL_NAME_USED) == 0)) { @@ -504,7 +512,6 @@ cmd_toolbar (GtkAction *action, { egg_toolbars_model_delete_item (model, name); } - g_free (name); } g_list_free (selection); @@ -1250,7 +1257,6 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) GList *selected; GtkWidget *focus_widget; int num_bmk_selected; - char *name; LOG ("Update menu sensitivity"); @@ -1296,16 +1302,17 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) { EphyNode *node = selected->data; EphyNodePriority priority; + char name[EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE]; priority = ephy_node_get_property_int (node, EPHY_NODE_KEYWORD_PROP_PRIORITY); if (priority == -1) priority = EPHY_NODE_NORMAL_PRIORITY; key_normal = (priority == EPHY_NODE_NORMAL_PRIORITY); - name = ephy_topic_action_name (node); + EPHY_TOPIC_ACTION_NAME_PRINTF (name, node); + ontoolbar = ((egg_toolbars_model_get_name_flags (model, name) & EGG_TB_MODEL_NAME_USED) != 0); - g_free (name); g_list_free (selected); } @@ -1314,17 +1321,16 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) if (bmk_focus && selected) { EphyNode *node = selected->data; - guint id; + char name[EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE]; g_return_if_fail (node != NULL); - id = ephy_node_get_id (node); mutable = !ephy_node_get_property_boolean (node, EPHY_NODE_BMK_PROP_IMMUTABLE); - name = ephy_bookmark_action_name (node); + EPHY_BOOKMARK_ACTION_NAME_PRINTF (name, node); + ontoolbar = ((egg_toolbars_model_get_name_flags (model, name) & EGG_TB_MODEL_NAME_USED) != 0); - g_free (name); g_list_free (selected); } diff --git a/src/bookmarks/ephy-bookmarks-menu.c b/src/bookmarks/ephy-bookmarks-menu.c index bf1673925..db19cf01c 100644 --- a/src/bookmarks/ephy-bookmarks-menu.c +++ b/src/bookmarks/ephy-bookmarks-menu.c @@ -51,20 +51,23 @@ enum /* Construct a block of bookmark actions, postfixing the names with a topic id * to allow different. */ static void -append_bookmarks (GString *string, const GPtrArray *bookmarks, gint instance) +append_bookmarks (GString *string, + const GPtrArray *bookmarks, + int instance) { - char *name; + EphyNode *child; + char name[EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE]; + long i; for (i = 0; i < bookmarks->len; i++) { - name = ephy_bookmark_action_name (g_ptr_array_index (bookmarks, i)); - if (name) - { - g_string_append_printf (string, "<menuitem action=\"%s\" name=\"%s-%d\"/>", - name, name, instance); - g_free (name); - } + child = g_ptr_array_index (bookmarks, i); + + EPHY_BOOKMARK_ACTION_NAME_PRINTF (name, child); + + g_string_append_printf (string, "<menuitem action=\"%s\" name=\"%s-%d\"/>", + name, name, instance); } } @@ -86,7 +89,7 @@ append_menu (GString *string, const GPtrArray *topics, const GPtrArray *bookmark EphyNode *topic; gint size, total; gboolean separate = FALSE; - char *name; + char name[EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE]; /* Get the subtopics, uncovered bookmarks, and subtopic sizes. */ sizes = g_array_sized_new (FALSE, FALSE, sizeof(int), topics->len); @@ -133,17 +136,14 @@ append_menu (GString *string, const GPtrArray *topics, const GPtrArray *bookmark { topic = g_ptr_array_index (submenus, i); ephy_nodes_get_covered (topic, bookmarks, subset); - - name = ephy_topic_action_name (topic); - if (name) - { - g_string_append_printf (string, "<menu name=\"%s\" action=\"%s\">", - name, name); - append_menu (string, topics, subset, flags); - g_string_append (string, "</menu>"); - separate = TRUE; - g_free (name); - } + + EPHY_TOPIC_ACTION_NAME_PRINTF (name, topic); + + g_string_append_printf (string, "<menu name=\"%s\" action=\"%s\">", + name, name); + append_menu (string, topics, subset, flags); + g_string_append (string, "</menu>"); + separate = TRUE; } /* Build a list of bookmarks which don't appear in any subdivision yet. */ @@ -252,17 +252,17 @@ ephy_bookmarks_menu_build (GString *string, EphyNode *parent) /* Otherwise, build the menu with "Open in tabs". */ else { - char *name; + char name[EPHY_OPEN_TABS_ACTION_NAME_BUFFER_SIZE]; append_menu (string, topics, children, flags); g_ptr_array_free (topics, TRUE); if (children->len > 1) { - name = ephy_open_tabs_action_name (node); + EPHY_OPEN_TABS_ACTION_NAME_PRINTF (name, node); + g_string_append_printf - (string, "<separator/><menuitem action=\"%s\" name=\"OpenTabs\"/>", name); - g_free (name); + (string, "<separator/><menuitem action=\"%s\" name=\"OpenTabs\"/>", name); } } } diff --git a/src/bookmarks/ephy-bookmarks-ui.c b/src/bookmarks/ephy-bookmarks-ui.c index acf9a0b0c..e3a9f8ebc 100644 --- a/src/bookmarks/ephy-bookmarks-ui.c +++ b/src/bookmarks/ephy-bookmarks-ui.c @@ -256,7 +256,7 @@ ephy_bookmarks_ui_attach_window (EphyWindow *window) G_CONNECT_SWAPPED | G_CONNECT_AFTER); g_object_unref (actions); - actions = ephy_topic_group_new (topics, manager); + actions = ephy_topic_action_group_new (topics, manager); gtk_ui_manager_insert_action_group (manager, actions, -1); g_object_unref (actions); @@ -496,11 +496,14 @@ topic_has_data (EggToolbarsItemType *type, EphyNode *node, *topics; guint node_id; - if (sscanf (name, "OpenTopic%u", &node_id) != 1 && - sscanf (name, "Tpc%u", &node_id) != 1) return FALSE; + if (sscanf (name, "OpenTopic%u" /* FIXME!! */, &node_id) != 1 && + sscanf (name, EPHY_TOPIC_ACTION_NAME_FORMAT, &node_id) != 1) return FALSE; + node = ephy_bookmarks_get_from_id (eb, node_id); - if (!node) return FALSE; + if (node == NULL) return FALSE; + topics = ephy_bookmarks_get_keywords (eb); + return ephy_node_has_child (topics, node); } @@ -511,22 +514,26 @@ topic_get_data (EggToolbarsItemType *type, EphyNode *node; guint node_id; - if (sscanf (name, "OpenTopic%u", &node_id) != 1 && - sscanf (name, "Tpc%u", &node_id) != 1) return NULL; + if (sscanf (name, "OpenTopic%u" /* FIXME!! */, &node_id) != 1 && + sscanf (name, EPHY_TOPIC_ACTION_NAME_FORMAT, &node_id) != 1) return NULL; + node = ephy_bookmarks_get_from_id (eb, node_id); - if (!node) return NULL; + if (node == NULL) return NULL; + return ephy_bookmarks_get_topic_uri (eb, node); } static char * topic_get_name (EggToolbarsItemType *type, - const char *name) + const char *data) { - EphyNode *topic = ephy_bookmarks_find_keyword (eb, name, FALSE); + EphyNode *topic; + + topic = ephy_bookmarks_find_keyword (eb, data, FALSE); if (topic == NULL) return NULL; - return ephy_topic_action_name (topic); -} + return EPHY_TOPIC_ACTION_NAME_STRDUP_PRINTF (topic); +} static gboolean bookmark_has_data (EggToolbarsItemType *type, @@ -534,12 +541,13 @@ bookmark_has_data (EggToolbarsItemType *type, { EphyNode *node; guint node_id; - - if (sscanf (name, "OpenBmk%u", &node_id) != 1 && - sscanf (name, "Bmk%u", &node_id) != 1) return FALSE; + + if (sscanf (name, "OpenBmk%u" /* FIXME!! */, &node_id) != 1 && + sscanf (name, EPHY_BOOKMARK_ACTION_NAME_FORMAT, &node_id) != 1) return FALSE; + node = ephy_bookmarks_get_from_id (eb, node_id); - if (!node) return FALSE; - + if (node == NULL) return FALSE; + return (ephy_node_get_property_string (node, EPHY_NODE_BMK_PROP_LOCATION) != NULL); } @@ -549,12 +557,13 @@ bookmark_get_data (EggToolbarsItemType *type, { EphyNode *node; guint node_id; - - if (sscanf (name, "OpenBmk%u", &node_id) != 1 && - sscanf (name, "Bmk%u", &node_id) != 1) return NULL; + + if (sscanf (name, "OpenBmk%u" /* FIXME!! */, &node_id) != 1 && + sscanf (name, EPHY_BOOKMARK_ACTION_NAME_FORMAT, &node_id) != 1) return NULL; + node = ephy_bookmarks_get_from_id (eb, node_id); - if (!node) return NULL; - + if (node == NULL) return NULL; + return g_strdup (ephy_node_get_property_string (node, EPHY_NODE_BMK_PROP_LOCATION)); } @@ -566,17 +575,19 @@ bookmark_get_name (EggToolbarsItemType *type, gchar **netscape_url; netscape_url = g_strsplit (data, "\n", 2); - if (!netscape_url || !netscape_url[0]) + if (netscape_url == NULL || netscape_url[0] == '\0') { g_strfreev (netscape_url); + return NULL; } node = ephy_bookmarks_find_bookmark (eb, netscape_url[0]); g_strfreev (netscape_url); - if (!node) return NULL; - return ephy_bookmark_action_name (node); + if (node == NULL) return NULL; + + return EPHY_BOOKMARK_ACTION_NAME_STRDUP_PRINTF (node); } static char * @@ -587,49 +598,53 @@ bookmark_new_name (EggToolbarsItemType *type, gchar **netscape_url; netscape_url = g_strsplit (data, "\n", 2); - if (!netscape_url || !netscape_url[0]) + if (netscape_url == NULL || netscape_url[0] == '\0' || g_strv_length (netscape_url) < 2) { g_strfreev (netscape_url); + return NULL; } node = ephy_bookmarks_add (eb, netscape_url[1], netscape_url[0]); - g_strfreev (netscape_url); - return ephy_bookmark_action_name (node); + return EPHY_BOOKMARK_ACTION_NAME_STRDUP_PRINTF (node); } static void -toolbar_node_removed_cb (EphyNode *parent, EphyNode *child, guint index, EggToolbarsModel *model) +toolbar_node_removed_cb (EphyNode *parent, + EphyNode *child, + guint index, + EggToolbarsModel *model) { - gint i, j; - char *nid = NULL; + char name[EPHY_BOOKMARKS_UI_ACTION_NAME_BUFFER_SIZE]; const char *id; + int i, j; switch (ephy_node_get_id (parent)) { case BOOKMARKS_NODE_ID: - nid = ephy_bookmark_action_name (child); + EPHY_BOOKMARK_ACTION_NAME_PRINTF (name, child); break; case KEYWORDS_NODE_ID: - nid = ephy_topic_action_name (child); + EPHY_TOPIC_ACTION_NAME_PRINTF (name, child); break; default: return; } - for (i=egg_toolbars_model_n_toolbars(model)-1; i>=0; i--) - for (j=egg_toolbars_model_n_items(model, i)-1; j>=0; j--) - { - id = egg_toolbars_model_item_nth (model, i, j); - if (!strcmp (id, nid)) - { - egg_toolbars_model_remove_item (model, i, j); - } - } - - free (nid); + for (i = (int) egg_toolbars_model_n_toolbars(model) - 1; i >= 0; --i) + { + for (j = (int) egg_toolbars_model_n_items (model, i) - 1; j >= 0; --j) + { + id = egg_toolbars_model_item_nth (model, i, j); + + if (strcmp (id, name) == 0) + { + egg_toolbars_model_remove_item (model, i, j); + } + } + } } void diff --git a/src/bookmarks/ephy-bookmarks-ui.h b/src/bookmarks/ephy-bookmarks-ui.h index 5a2e33ee6..9feedae8b 100644 --- a/src/bookmarks/ephy-bookmarks-ui.h +++ b/src/bookmarks/ephy-bookmarks-ui.h @@ -26,16 +26,42 @@ #include <gtk/gtk.h> -void ephy_bookmarks_ui_attach_window (EphyWindow *window); -void ephy_bookmarks_ui_detach_window (EphyWindow *window); +G_BEGIN_DECLS -void ephy_bookmarks_ui_attach_toolbar_model (EggToolbarsModel *model); -void ephy_bookmarks_ui_detach_toolbar_model (EggToolbarsModel *model); +#define EPHY_BOOKMARKS_UI_ACTION_NAME_BUFFER_SIZE 32 -void ephy_bookmarks_ui_add_bookmark (GtkWindow *parent, - const char *location, - const char *title); +#define EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE EPHY_BOOKMARKS_UI_ACTION_NAME_BUFFER_SIZE +#define EPHY_BOOKMARK_ACTION_NAME_FORMAT "Bmk%u" +#define EPHY_BOOKMARK_ACTION_NAME_FORMAT_ARG(node) (ephy_node_get_id (node)) +#define EPHY_BOOKMARK_ACTION_NAME_PRINTF(buffer,node) (g_snprintf (buffer, sizeof (buffer), EPHY_BOOKMARK_ACTION_NAME_FORMAT, EPHY_BOOKMARK_ACTION_NAME_FORMAT_ARG (node))) +#define EPHY_BOOKMARK_ACTION_NAME_STRDUP_PRINTF(node) (g_strdup_printf (EPHY_BOOKMARK_ACTION_NAME_FORMAT, EPHY_BOOKMARK_ACTION_NAME_FORMAT_ARG (node))) -void ephy_bookmarks_ui_show_bookmark (EphyNode *bookmark); +#define EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE EPHY_BOOKMARKS_UI_ACTION_NAME_BUFFER_SIZE +#define EPHY_TOPIC_ACTION_NAME_FORMAT "Tp%u" +#define EPHY_TOPIC_ACTION_NAME_FORMAT_ARG(node) (ephy_node_get_id (node)) +#define EPHY_TOPIC_ACTION_NAME_PRINTF(buffer,node) (g_snprintf (buffer, sizeof (buffer), EPHY_TOPIC_ACTION_NAME_FORMAT, EPHY_TOPIC_ACTION_NAME_FORMAT_ARG (node))) +#define EPHY_TOPIC_ACTION_NAME_STRDUP_PRINTF(node) (g_strdup_printf (EPHY_TOPIC_ACTION_NAME_FORMAT, EPHY_TOPIC_ACTION_NAME_FORMAT_ARG (node))) + +#define EPHY_OPEN_TABS_ACTION_NAME_BUFFER_SIZE EPHY_BOOKMARKS_UI_ACTION_NAME_BUFFER_SIZE +#define EPHY_OPEN_TABS_ACTION_NAME_FORMAT "OpTb%u" +#define EPHY_OPEN_TABS_ACTION_NAME_FORMAT_ARG(node) (ephy_node_get_id (node)) +#define EPHY_OPEN_TABS_ACTION_NAME_PRINTF(buffer,node) (g_snprintf (buffer, sizeof (buffer), EPHY_OPEN_TABS_ACTION_NAME_FORMAT, EPHY_OPEN_TABS_ACTION_NAME_FORMAT_ARG (node))) +#define EPHY_OPEN_TABS_ACTION_NAME_STRDUP_PRINTF(node) (g_strdup_printf (EPHY_OPEN_TABS_ACTION_NAME_FORMAT, EPHY_OPEN_TABS_ACTION_NAME_FORMAT_ARG (node))) + +void ephy_bookmarks_ui_attach_window (EphyWindow *window); + +void ephy_bookmarks_ui_detach_window (EphyWindow *window); + +void ephy_bookmarks_ui_attach_toolbar_model (EggToolbarsModel *model); + +void ephy_bookmarks_ui_detach_toolbar_model (EggToolbarsModel *model); + +void ephy_bookmarks_ui_add_bookmark (GtkWindow *parent, + const char *location, + const char *title); + +void ephy_bookmarks_ui_show_bookmark (EphyNode *bookmark); + +G_END_DECLS #endif diff --git a/src/bookmarks/ephy-open-tabs-action.c b/src/bookmarks/ephy-open-tabs-action.c index eb0955446..7b54f5365 100644 --- a/src/bookmarks/ephy-open-tabs-action.c +++ b/src/bookmarks/ephy-open-tabs-action.c @@ -23,6 +23,7 @@ #include "ephy-open-tabs-action.h" #include "ephy-bookmarks.h" +#include "ephy-bookmarks-ui.h" #include "ephy-node-common.h" #include "ephy-link-action.h" #include "ephy-link.h" @@ -67,14 +68,14 @@ node_added_cb (EphyNode *parent, { GObject *action_object; GtkAction *action; - char *name, *accel; - - name = ephy_open_tabs_action_name (child); - g_assert (name != NULL); + char name[EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE]; + char accel[256]; + EPHY_TOPIC_ACTION_NAME_PRINTF (name, child); + /* FIXME !!!! */ action = gtk_action_new (name, _("Open in New _Tabs"), "Open this topic in tabs", NULL); - action_object = G_OBJECT (action); + action_object = (GObject *) action; g_object_set_data (action_object, "ephy-node", child); g_object_set_data (action_object, "ephy-link", EPHY_LINK (action_group)); @@ -82,17 +83,13 @@ node_added_cb (EphyNode *parent, g_signal_connect (action, "activate", G_CALLBACK (activate_cb), NULL); - accel = g_strjoin ("/", "<Actions>", - gtk_action_group_get_name (action_group), - name, - NULL); + g_snprintf (accel, sizeof (accel), "<Actions>/%s/%s", + gtk_action_group_get_name (action_group), + name); gtk_action_set_accel_path (action, accel); gtk_action_group_add_action (action_group, action); g_object_unref (action); - - g_free (accel); - g_free (name); } static void @@ -102,16 +99,15 @@ node_removed_cb (EphyNode *parent, GtkActionGroup *action_group) { GtkAction *action; - char *name; + char name[EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE]; - name = ephy_open_tabs_action_name (child); + EPHY_TOPIC_ACTION_NAME_PRINTF (name, child); + + action = gtk_action_group_get_action (action_group, name); - // FIXME can this really ever be NULL ?? - if (name) + if (action != NULL) { - action = gtk_action_group_get_action (action_group, name); - if (action) gtk_action_group_remove_action (action_group, action); - g_free (name); + gtk_action_group_remove_action (action_group, action); } } @@ -140,9 +136,3 @@ ephy_open_tabs_group_new (EphyNode *node) return action_group; } - -char * -ephy_open_tabs_action_name (EphyNode *node) -{ - return g_strdup_printf("OpTb%u", ephy_node_get_id (node)); -} diff --git a/src/bookmarks/ephy-open-tabs-action.h b/src/bookmarks/ephy-open-tabs-action.h index 5e67c94d7..31e8a48ec 100644 --- a/src/bookmarks/ephy-open-tabs-action.h +++ b/src/bookmarks/ephy-open-tabs-action.h @@ -25,8 +25,6 @@ #include "ephy-node.h" -char * ephy_open_tabs_action_name (EphyNode *node); - -GtkActionGroup * ephy_open_tabs_group_new (EphyNode *node); +GtkActionGroup *ephy_open_tabs_group_new (EphyNode *node); #endif diff --git a/src/bookmarks/ephy-topic-action-group.c b/src/bookmarks/ephy-topic-action-group.c index 29c0668ff..d94e2897f 100644 --- a/src/bookmarks/ephy-topic-action-group.c +++ b/src/bookmarks/ephy-topic-action-group.c @@ -25,102 +25,104 @@ #include "ephy-node.h" #include "ephy-node-common.h" #include "ephy-bookmarks.h" +#include "ephy-bookmarks-ui.h" #include "ephy-debug.h" #include <gtk/gtkaction.h> #include <gtk/gtkactiongroup.h> -#include <string.h> - static void node_changed_cb (EphyNode *parent, EphyNode *child, guint property_id, - GtkActionGroup *actions) + GtkActionGroup *action_group) { GtkAction *action; - char *name; - - name = ephy_topic_action_name (child); - g_return_if_fail (name != NULL); - action = gtk_action_group_get_action (actions, name); + char name[EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE]; + + EPHY_TOPIC_ACTION_NAME_PRINTF (name, child); + + action = gtk_action_group_get_action (action_group, name); if (property_id == EPHY_NODE_KEYWORD_PROP_NAME) { ephy_topic_action_updated (EPHY_TOPIC_ACTION (action)); } - - g_free (name); } static void node_added_cb (EphyNode *parent, EphyNode *child, - GtkActionGroup *actions) + GtkActionGroup *action_group) { GtkUIManager *manager; GtkAction *action; - char *name, *accel; - - manager = g_object_get_data ((GObject *)actions, "ui-manager"); - name = ephy_topic_action_name (child); + char name[EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE]; + char accel[256]; + + EPHY_TOPIC_ACTION_NAME_PRINTF (name, child); + + manager = g_object_get_data ((GObject *) action_group, "ui-manager"); + action = ephy_topic_action_new (child, manager, name); - accel = g_strjoin ("/", "<Actions>", - gtk_action_group_get_name (actions), - name, NULL); + + g_snprintf (accel, sizeof (accel), "<Actions>/%s/%s", + gtk_action_group_get_name (action_group), + name); gtk_action_set_accel_path (action, accel); - gtk_action_group_add_action (actions, action); + + gtk_action_group_add_action (action_group, action); g_object_unref (action); - g_free (accel); - g_free (name); - ephy_topic_action_updated (EPHY_TOPIC_ACTION (action)); + ephy_topic_action_updated ((EphyTopicAction *) action); } static void node_removed_cb (EphyNode *parent, EphyNode *child, guint index, - GtkActionGroup *actions) + GtkActionGroup *action_group) { GtkAction *action; - char *name; + char name[EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE]; + + EPHY_TOPIC_ACTION_NAME_PRINTF (name, child); - name = ephy_topic_action_name (child); - g_return_if_fail (name != NULL); - action = gtk_action_group_get_action (actions, name); + action = gtk_action_group_get_action (action_group, name); if (action) { - gtk_action_group_remove_action (actions, action); + gtk_action_group_remove_action (action_group, action); } - - g_free (name); } GtkActionGroup * -ephy_topic_group_new (EphyNode *node, - GtkUIManager *manager) +ephy_topic_action_group_new (EphyNode *node, + GtkUIManager *manager) { - GPtrArray *children = ephy_node_get_children (node); - GObject *actions = (GObject *) gtk_action_group_new ("TopicActions"); - gint i; + GPtrArray *children; + GtkActionGroup *action_group; + int i; - g_object_set_data (G_OBJECT (actions), "ui-manager", manager); + children = ephy_node_get_children (node); + action_group = gtk_action_group_new ("TpAc"); + + g_object_set_data ((GObject *) action_group, "ui-manager", manager); for (i = 0; i < children->len; i++) { - node_added_cb (node, g_ptr_array_index (children, i), (GtkActionGroup *)actions); + node_added_cb (node, g_ptr_array_index (children, i), + action_group); } ephy_node_signal_connect_object (node, EPHY_NODE_CHILD_ADDED, - (EphyNodeCallback)node_added_cb, - actions); + (EphyNodeCallback) node_added_cb, + (GObject *) action_group); ephy_node_signal_connect_object (node, EPHY_NODE_CHILD_REMOVED, - (EphyNodeCallback)node_removed_cb, - actions); + (EphyNodeCallback) node_removed_cb, + (GObject *) action_group); ephy_node_signal_connect_object (node, EPHY_NODE_CHILD_CHANGED, - (EphyNodeCallback)node_changed_cb, - actions); + (EphyNodeCallback) node_changed_cb, + (GObject *) action_group); - return GTK_ACTION_GROUP (actions); + return (GtkActionGroup *) action_group; } diff --git a/src/bookmarks/ephy-topic-action-group.h b/src/bookmarks/ephy-topic-action-group.h index a37fc4500..9c17b6714 100644 --- a/src/bookmarks/ephy-topic-action-group.h +++ b/src/bookmarks/ephy-topic-action-group.h @@ -29,7 +29,8 @@ G_BEGIN_DECLS -GtkActionGroup * ephy_topic_group_new (EphyNode *node, GtkUIManager *manager); +GtkActionGroup *ephy_topic_action_group_new (EphyNode *node, + GtkUIManager *manager); G_END_DECLS diff --git a/src/bookmarks/ephy-topic-action.c b/src/bookmarks/ephy-topic-action.c index 2ce6b5f7f..3923ef793 100644 --- a/src/bookmarks/ephy-topic-action.c +++ b/src/bookmarks/ephy-topic-action.c @@ -583,18 +583,12 @@ ephy_topic_action_get_type (void) return type; } -char * -ephy_topic_action_name (EphyNode *node) -{ - return g_strdup_printf("Tpc%u", ephy_node_get_id (node)); -} - GtkAction * ephy_topic_action_new (EphyNode *node, GtkUIManager *manager, - char *name) + const char *name) { - g_return_val_if_fail (name, NULL); + g_assert (name != NULL); return GTK_ACTION (g_object_new (EPHY_TYPE_TOPIC_ACTION, "name", name, diff --git a/src/bookmarks/ephy-topic-action.h b/src/bookmarks/ephy-topic-action.h index f6be79b4c..05c9accb7 100644 --- a/src/bookmarks/ephy-topic-action.h +++ b/src/bookmarks/ephy-topic-action.h @@ -55,18 +55,18 @@ struct _EphyTopicActionClass }; -GType ephy_topic_action_get_type (void); +GType ephy_topic_action_get_type (void); -char * ephy_topic_action_name (EphyNode *node); +GtkAction *ephy_topic_action_new (EphyNode *node, + GtkUIManager *manager, + const char *name); -GtkAction * ephy_topic_action_new (EphyNode *node, GtkUIManager *manager, char *name); +void ephy_topic_action_set_topic (EphyTopicAction *action, + EphyNode *node); +EphyNode *ephy_topic_action_get_topic (EphyTopicAction *action); -void ephy_topic_action_set_topic (EphyTopicAction *action, EphyNode *node); - -EphyNode * ephy_topic_action_get_topic (EphyTopicAction *action); - -void ephy_topic_action_updated (EphyTopicAction *action); +void ephy_topic_action_updated (EphyTopicAction *action); G_END_DECLS diff --git a/src/bookmarks/ephy-topic-factory-action.c b/src/bookmarks/ephy-topic-factory-action.c index 44e9e0dd9..cb202c65c 100644 --- a/src/bookmarks/ephy-topic-factory-action.c +++ b/src/bookmarks/ephy-topic-factory-action.c @@ -27,6 +27,7 @@ #include "ephy-topic-factory-action.h" #include "ephy-topic-action.h" +#include "ephy-bookmarks-ui.h" #include "ephy-shell.h" #include "ephy-stock-icons.h" #include "egg-editable-toolbar.h" @@ -141,8 +142,9 @@ build_menu (GtkWidget *placeholder, EggToolbarsModel *model) EphyBookmarks *eb; EphyNode *node; GPtrArray *children, *topics; - - const char *name, *action; + + const char *name; + char action[EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE]; gint i, priority = -1, ptmp, flags; /* Get a sorted list of topics. */ @@ -158,8 +160,9 @@ build_menu (GtkWidget *placeholder, EggToolbarsModel *model) for (i = 0; i < topics->len; i++) { node = g_ptr_array_index (topics, i); - - action = ephy_topic_action_name (node); + + EPHY_TOPIC_ACTION_NAME_PRINTF (action, node); + flags = egg_toolbars_model_get_name_flags (model, action); if (flags & EGG_TB_MODEL_NAME_USED) continue; |