From: Hyoyoung Chang <hyoyoung@gmail.com>
authordiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 3 Jan 2012 04:44:48 +0000 (04:44 +0000)
committerdiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 3 Jan 2012 04:44:48 +0000 (04:44 +0000)
Subject: [E-devel] [patch] elm_cnp_helper - bugfix duplicated drag objs
Date: Tue, 3 Jan 2012 13:41:09 +0900

Dear all.

Currently, dragging is only supported in elm_photo.
Normally it works well but in overlapped region, elm_photo makes
multiple drag events.
However multiple objs dragging isn't supported by elm_cnp_helper(also
in xdnd specs)
It better to block multiple dragging events.

Also I fixed dragdonecb's data argument position.

Thank you.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@66773 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_cnp_helper.c
src/lib/elm_photo.c

index 23cc42f..5b7e0f7 100644 (file)
@@ -1563,7 +1563,7 @@ _drag_mouse_up(void *un __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *
    ecore_x_dnd_aware_set(xwin, EINA_FALSE);
    if (dragdonecb)
      {
-        dragdonecb(dragdonecb,selections[ELM_SEL_TYPE_XDND].widget);
+        dragdonecb(dragdonedata, selections[ELM_SEL_TYPE_XDND].widget);
         dragdonecb = NULL;
      }
    if (dragwin)
@@ -1599,9 +1599,15 @@ elm_drag_start(Evas_Object *obj, Elm_Sel_Format format, const char *data, void (
 
    cnp_debug("starting drag...\n");
 
-   ecore_x_dnd_type_set(xwin, "text/uri-list", 1);
+   if (dragwin)
+     {
+        cnp_debug("another obj is dragging...\n");
+        return EINA_FALSE;
+     }
+
+   ecore_x_dnd_type_set(xwin, "text/uri-list", EINA_TRUE);
    sel = selections + ELM_SEL_TYPE_XDND;
-   sel->active = 1;
+   sel->active = EINA_TRUE;
    sel->widget = obj;
    sel->format = format;
    sel->selbuf = data ? strdup(data) : NULL;
@@ -1618,12 +1624,12 @@ elm_drag_start(Evas_Object *obj, Elm_Sel_Format format, const char *data, void (
                                             _dnd_status, NULL);
 
    dragwin = elm_win_add(NULL, "Elm Drag Object", ELM_WIN_UTILITY);
-   elm_win_override_set(dragwin, 1);
+   elm_win_override_set(dragwin, EINA_TRUE);
 
    /* FIXME: Images only */
    icon = elm_icon_add(dragwin);
    elm_icon_file_set(icon, data + 7, NULL); /* 7!? "file://" */
-   elm_win_resize_object_add(dragwin,icon);
+   elm_win_resize_object_add(dragwin, icon);
    evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
index f54e7a1..f76ae43 100644 (file)
@@ -189,13 +189,14 @@ _longpress(void *objv)
         /* FIXME: Deal with relative paths */
         buf = malloc(strlen(file) + strlen("file://") + 1);
         sprintf(buf, "%s%s","file://",file);
-        elm_drag_start(objv, ELM_SEL_FORMAT_IMAGE,
-                       buf, _drag_done_cb, NULL);
+        if (elm_drag_start(objv, ELM_SEL_FORMAT_IMAGE,
+                           buf, _drag_done_cb, NULL))
+          {
+             elm_object_scroll_freeze_push(objv);
+             evas_object_smart_callback_call(objv, SIG_DRAG_START, NULL);
+          }
         free(buf);
      }
-   elm_object_scroll_freeze_push(objv);
-
-   evas_object_smart_callback_call(objv, SIG_DRAG_START, NULL);
 
    return 0; /* Don't call again */
 }