[gtk+/places-sidebar] New signal drag-action-ask
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/places-sidebar] New signal drag-action-ask
- Date: Tue, 4 Dec 2012 19:09:34 +0000 (UTC)
commit f46b26d245d672e5b1d1954f970be91373822285
Author: Federico Mena Quintero <federico gnome org>
Date: Mon Dec 3 18:15:41 2012 -0600
New signal drag-action-ask
We'll ask the caller to present a popup menu (or whatever) with the possible drag actions.
Signed-off-by: Federico Mena Quintero <federico gnome org>
gtk/gtkmarshalers.list | 1 +
gtk/gtkplacessidebar.c | 68 ++++++++++++++++++++++++++----------------------
2 files changed, 38 insertions(+), 31 deletions(-)
---
diff --git a/gtk/gtkmarshalers.list b/gtk/gtkmarshalers.list
index 83423a7..e94fb15 100644
--- a/gtk/gtkmarshalers.list
+++ b/gtk/gtkmarshalers.list
@@ -122,3 +122,4 @@ VOID:VOID
OBJECT:OBJECT,INT,INT
VOID:POINTER,POINTER,POINTER,POINTER,STRING
VOID:OBJECT,STRING,POINTER,POINTER
+INT:INT
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c
index 267f55f..80cbf22 100644
--- a/gtk/gtkplacessidebar.c
+++ b/gtk/gtkplacessidebar.c
@@ -43,6 +43,10 @@
*
* * Nautilus needs to connect to "drag-action-requested", and call
* nautilus_drag_default_drop_action_for_icons().
+ *
+ * * Nautilus needs to connect to "drag-action-ask", and return the
+ * appropriate action after running a popup menu. It needs to call
+ * nautilus_drag_drop_action_ask().
*/
#include "config.h"
@@ -146,6 +150,8 @@ struct _GtkPlacesSidebarClass {
const char *uri,
GList *uri_list,
int *action);
+ GdkDragAction (* drag_action_ask) (GtkPlacesSidebar *sidebar,
+ GdkDragAction actions);
};
enum {
@@ -190,6 +196,7 @@ enum {
INITIATED_UNMOUNT,
SHOW_ERROR_MESSAGE,
DRAG_ACTION_REQUESTED,
+ DRAG_ACTION_ASK,
LAST_SIGNAL,
};
@@ -330,6 +337,20 @@ emit_drag_action_requested (GtkPlacesSidebar *sidebar,
action);
}
+static GdkDragAction
+emit_drag_action_ask (GtkPlacesSidebar *sidebar,
+ GdkDragAction actions)
+{
+ GdkDragAction ret_action;
+
+ ret_action = 0;
+
+ g_signal_emit (sidebar, places_sidebar_signals[DRAG_ACTION_ASK], 0,
+ actions,
+ &ret_action);
+ return ret_action;
+}
+
static gint
get_icon_size (GtkPlacesSidebar *sidebar)
{
@@ -1456,26 +1477,6 @@ drag_leave_callback (GtkTreeView *tree_view,
g_signal_stop_emission_by_name (tree_view, "drag-leave");
}
-static GList *
-uri_list_from_selection (GList *selection)
-{
-#if DO_NOT_COMPILE
- NautilusDragSelectionItem *item;
-#endif
- GList *ret;
- GList *l;
-
- ret = NULL;
-#if DO_NOT_COMPILE
- for (l = selection; l != NULL; l = l->next) {
- item = l->data;
- ret = g_list_prepend (ret, item->uri);
- }
-#endif
-
- return g_list_reverse (ret);
-}
-
/* Takes an array of URIs and turns it into a list of string URIs */
static GList *
build_uri_list (char **uris)
@@ -1613,21 +1614,17 @@ drag_data_received_callback (GtkWidget *widget,
break;
}
} else {
-#if DO_NOT_COMPILE
GdkDragAction real_action;
- GList *selection_list;
GList *uris;
char *drop_uri;
/* file transfer requested */
real_action = gdk_drag_context_get_selected_action (context);
- if (real_action == GDK_ACTION_ASK) {
- real_action =
- nautilus_drag_drop_action_ask (GTK_WIDGET (tree_view),
- gdk_drag_context_get_actions (context));
- }
+ if (real_action == GDK_ACTION_ASK)
+ real_action = emit_drag_action_ask (sidebar, gdk_drag_context_get_actions (context));
+#if DO_NOT_COMPILE
if (real_action > 0) {
model = gtk_tree_view_get_model (tree_view);
@@ -1638,13 +1635,11 @@ drag_data_received_callback (GtkWidget *widget,
switch (info) {
case TEXT_URI_LIST:
- selection_list = build_uri_list ((const gchar *) gtk_selection_data_get_data (selection_data));
- uris = uri_list_from_selection (selection_list);
+ uris = build_uri_list ((const gchar *) gtk_selection_data_get_data (selection_data));
nautilus_file_operations_copy_move (uris, NULL, drop_uri,
real_action, GTK_WIDGET (tree_view),
NULL, NULL);
- g_list_free_full (selection_list, g_free);
- g_list_free (uris);
+ g_list_free_full (uris, g_free);
success = TRUE;
break;
case GTK_TREE_MODEL_ROW:
@@ -3755,6 +3750,17 @@ gtk_places_sidebar_class_init (GtkPlacesSidebarClass *class)
G_TYPE_STRING,
G_TYPE_POINTER, /* FIXME: (GList *) is there something friendlier to language bindings? */
G_TYPE_POINTER /* FIXME: (inout int) is there something friendlier to language bindings? */);
+
+
+ places_sidebar_signals [DRAG_ACTION_ASK] =
+ g_signal_new (I_("drag-action-ask"),
+ G_OBJECT_CLASS_TYPE (gobject_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GtkPlacesSidebarClass, drag_action_ask),
+ NULL, NULL,
+ _gtk_marshal_INT__INT,
+ G_TYPE_INT, 1,
+ G_TYPE_INT);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]