aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--lib/ephy-dnd.c5
-rw-r--r--lib/ephy-dnd.h4
-rwxr-xr-xlib/widgets/ephy-editable-toolbar.c35
-rwxr-xr-xsrc/toolbar.c7
5 files changed, 42 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog
index 8ec581e13..ead24c9cd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2003-01-30 Marco Pesenti Gritti <marco@it.gnome.org>
+
+ * lib/ephy-dnd.c: (ephy_dnd_url_drag_source_set),
+ (ephy_dnd_enable_model_drag_source):
+ * lib/ephy-dnd.h:
+ * lib/widgets/ephy-editable-toolbar.c: (item_node_new),
+ (add_action), (parse_item_list), (toolbar_list_to_xml),
+ (drag_data_received_cb), (setup_toolbar_drag):
+ * src/toolbar.c: (toolbar_get_action):
+
+ Fix bookmarks/smart bookmarks add to the toolbars.
+
2003-01-29 Marco Pesenti Gritti <marco@it.gnome.org>
* lib/ephy-bonobo-extensions.c: (ephy_bonobo_clear_path),
diff --git a/lib/ephy-dnd.c b/lib/ephy-dnd.c
index b70fa284a..03fa83544 100644
--- a/lib/ephy-dnd.c
+++ b/lib/ephy-dnd.c
@@ -27,6 +27,7 @@ static GtkTargetEntry url_drag_types [] =
{ EPHY_DND_TEXT_TYPE, 0, EPHY_DND_TEXT },
{ EPHY_DND_URL_TYPE, 0, EPHY_DND_URL }
};
+static int n_url_drag_types = G_N_ELEMENTS (url_drag_types);
/* Encode a "_NETSCAPE_URL_" selection.
* As far as I can tell, Netscape is expecting a single
@@ -94,7 +95,7 @@ ephy_dnd_url_drag_source_set (GtkWidget *widget)
gtk_drag_source_set (widget,
GDK_BUTTON1_MASK,
url_drag_types,
- G_N_ELEMENTS (url_drag_types),
+ n_url_drag_types,
GDK_ACTION_COPY);
}
@@ -103,7 +104,7 @@ ephy_dnd_enable_model_drag_source (GtkWidget *treeview)
{
gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (treeview),
GDK_BUTTON1_MASK,
- url_drag_types, G_N_ELEMENTS (url_drag_types),
+ url_drag_types, n_url_drag_types,
GDK_ACTION_COPY);
}
diff --git a/lib/ephy-dnd.h b/lib/ephy-dnd.h
index 87b6008d9..7d5281128 100644
--- a/lib/ephy-dnd.h
+++ b/lib/ephy-dnd.h
@@ -31,14 +31,12 @@ G_BEGIN_DECLS
#define EPHY_DND_URI_LIST_TYPE "text/uri-list"
#define EPHY_DND_TEXT_TYPE "text/plain"
#define EPHY_DND_URL_TYPE "_NETSCAPE_URL"
-#define EPHY_DND_EPHY_URL_TYPE "EPHY_URL"
-#define EPHY_DND_EPHY_BOOKMARK_TYPE "EPHY_BOOKMARK"
/* Standard Drag & Drop types. */
typedef enum {
EPHY_DND_URI_LIST,
- EPHY_DND_URL,
EPHY_DND_TEXT,
+ EPHY_DND_URL
} EphyIconDndTargetType;
typedef void (* EphyDragEachSelectedItemDataGet) (const char *url,
diff --git a/lib/widgets/ephy-editable-toolbar.c b/lib/widgets/ephy-editable-toolbar.c
index f6b6f8f7f..b082d6c31 100755
--- a/lib/widgets/ephy-editable-toolbar.c
+++ b/lib/widgets/ephy-editable-toolbar.c
@@ -44,9 +44,7 @@ static GtkTargetEntry dest_drag_types [] =
static GtkTargetEntry source_drag_types [] =
{
- { "EPHY_TOOLBAR_BUTTON", 0, 0 },
- /* FIXME generic way to add types */
- { EPHY_DND_URL_TYPE, 0, EPHY_DND_URL }
+ { "EPHY_TOOLBAR_BUTTON", 0, 0 }
};
static void ephy_editable_toolbar_class_init (EphyEditableToolbarClass *klass);
@@ -90,6 +88,7 @@ typedef struct
{
gboolean separator;
EggAction *action;
+ char *type;
} ItemNode;
GType
@@ -133,13 +132,14 @@ toolbar_node_new (void)
}
static ItemNode *
-item_node_new (EggAction *action, gboolean separator)
+item_node_new (EggAction *action, const char *type, gboolean separator)
{
ItemNode *item;
item = g_new0 (ItemNode, 1);
item->action = action;
item->separator = separator;
+ item->type = type ? g_strdup (type) : NULL;
return item;
}
@@ -220,7 +220,7 @@ add_action (EphyEditableToolbar *t,
action = ephy_editable_toolbar_get_action (t, type, name);
}
- item = item_node_new (action, separator);
+ item = item_node_new (action, type, separator);
node = g_node_new (item);
g_node_insert_before (parent, sibling, node);
@@ -236,11 +236,14 @@ parse_item_list (EphyEditableToolbar *t,
if (xmlStrEqual (child->name, "toolitem"))
{
xmlChar *verb;
+ xmlChar *type;
verb = xmlGetProp (child, "verb");
- add_action (t, parent, NULL, NULL, verb);
+ type = xmlGetProp (child, "type");
+ add_action (t, parent, NULL, type, verb);
xmlFree (verb);
+ xmlFree (type);
}
else if (xmlStrEqual (child->name, "separator"))
{
@@ -364,6 +367,10 @@ toolbar_list_to_xml (EphyEditableToolbar *t, GNode *tl)
{
node = xmlNewChild (tnode, NULL, "toolitem", NULL);
xmlSetProp (node, "verb", item->action->name);
+ if (item->type)
+ {
+ xmlSetProp (node, "type", item->type);
+ }
}
}
}
@@ -454,6 +461,8 @@ drag_data_received_cb (GtkWidget *widget,
GNode *toolbar;
GNode *parent;
GNode *sibling;
+ const char *type = NULL;
+ GdkAtom target;
toolbar = (GNode *)g_object_get_data (G_OBJECT (widget), "toolbar_node");
@@ -468,7 +477,13 @@ drag_data_received_cb (GtkWidget *widget,
parent = toolbar;
}
- add_action (etoolbar, parent, sibling, NULL, selection_data->data);
+ target = gtk_drag_dest_find_target (widget, context, NULL);
+ if (target == gdk_atom_intern (EPHY_DND_URL_TYPE, FALSE))
+ {
+ type = EPHY_DND_URL_TYPE;
+ }
+
+ add_action (etoolbar, parent, sibling, type, selection_data->data);
queue_ui_update (etoolbar);
}
@@ -529,7 +544,8 @@ setup_toolbar_drag (EphyEditableToolbar *etoolbar, GNode *toolbars)
g_object_set_data (G_OBJECT (toolbar), "drag_dest_set",
GINT_TO_POINTER (TRUE));
gtk_drag_dest_set (toolbar, GTK_DEST_DEFAULT_ALL,
- dest_drag_types, 2, GDK_ACTION_MOVE);
+ dest_drag_types, 2,
+ GDK_ACTION_MOVE | GDK_ACTION_COPY);
g_signal_connect (toolbar, "drag_data_received",
G_CALLBACK (drag_data_received_cb),
etoolbar);
@@ -563,7 +579,8 @@ setup_toolbar_drag (EphyEditableToolbar *etoolbar, GNode *toolbars)
g_object_set_data (G_OBJECT (toolitem), "drag_dest_set",
GINT_TO_POINTER (TRUE));
gtk_drag_dest_set (toolitem, GTK_DEST_DEFAULT_ALL,
- dest_drag_types, 2, GDK_ACTION_MOVE);
+ dest_drag_types, 2,
+ GDK_ACTION_COPY | GDK_ACTION_MOVE);
g_signal_connect (toolitem, "drag_data_received",
G_CALLBACK (drag_data_received_cb),
etoolbar);
diff --git a/src/toolbar.c b/src/toolbar.c
index 29ae4665f..826adc596 100755
--- a/src/toolbar.c
+++ b/src/toolbar.c
@@ -129,14 +129,7 @@ toolbar_get_action (EphyEditableToolbar *etoolbar,
snprintf (action_name, 255, "GoBookmarkId%ld", id);
action = ephy_bookmark_action_new (name, id);
- }
- else if (g_str_has_prefix (name, "GoBookmarkId"))
- {
- ephy_str_to_int (name + strlen ("GoBookmarkId"), &id);
- }
- if (action)
- {
g_signal_connect (action, "go_location",
G_CALLBACK (go_location_cb), t->priv->window);
egg_action_group_add_action (t->priv->action_group, action);