raster pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=014d2638c3514c18e21adc4bc725e2ea983b9d05

commit 014d2638c3514c18e21adc4bc725e2ea983b9d05
Author: Thiep Ha <thie...@gmail.com>
Date:   Wed Jun 11 14:19:27 2014 +0900

    dnd: rotate dragwin if main window is rotated when draging
    
    Summary:
    During drag, dragwin should be rotated when main window is rotated.
    
    @fix
    
    Reviewers: raster, JackDanielZ, woohyun
    
    Reviewed By: raster
    
    Differential Revision: https://phab.enlightenment.org/D976
---
 src/lib/elm_cnp.c | 36 +++++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

diff --git a/src/lib/elm_cnp.c b/src/lib/elm_cnp.c
index c82cb1f..fa9a662 100644
--- a/src/lib/elm_cnp.c
+++ b/src/lib/elm_cnp.c
@@ -1744,6 +1744,14 @@ _x11_dnd_status(void *data EINA_UNUSED, int etype 
EINA_UNUSED, void *ev)
    return EINA_TRUE;
 }
 
+static void
+_x11_win_rotation_changed_cb(void *data, Evas_Object *obj, void *event_info 
EINA_UNUSED)
+{
+   Evas_Object *win = data;
+   int rot = elm_win_rotation_get(obj);
+   elm_win_rotation_set(win, rot);
+}
+
 static Eina_Bool
 _x11_drag_mouse_up(void *data, int etype EINA_UNUSED, void *event)
 {
@@ -1776,6 +1784,17 @@ _x11_drag_mouse_up(void *data, int etype EINA_UNUSED, 
void *event)
         if (dragdonecb) dragdonecb(dragdonedata, dragwidget);
         if (dragwin)
           {
+             if (dragwidget)
+               {
+                  if (elm_widget_is(dragwidget))
+                    {
+                       Evas_Object *win = elm_widget_top_get(dragwidget);
+                       if (win && eo_isa(win, ELM_WIN_CLASS))
+                         evas_object_smart_callback_del_full(win, 
"rotation,changed",
+                                                  
_x11_win_rotation_changed_cb, dragwin);
+                    }
+               }
+
              if (!doaccept)
                {  /* Commit animation when drag cancelled */
                   /* Record final position of dragwin, then do animation */
@@ -2246,7 +2265,12 @@ _x11_elm_drag_start(Evas_Object *obj, Elm_Sel_Format 
format, const char *data,
      {
         Evas_Object *win = elm_widget_top_get(obj);
         if (win && eo_isa(win, ELM_WIN_CLASS))
-          elm_win_rotation_set(dragwin, elm_win_rotation_get(win));
+          {
+             elm_win_rotation_set(dragwin, elm_win_rotation_get(win));
+             evas_object_smart_callback_add(win, "rotation,changed",
+                                            _x11_win_rotation_changed_cb,
+                                            dragwin);
+          }
      }
 
    if (createicon)
@@ -4442,6 +4466,16 @@ elm_drag_cancel(Evas_Object *obj)
         ELM_SAFE_FREE(handler_status, ecore_event_handler_del);
         ecore_x_dnd_abort(xwin);
      }
+   if (dragwidget)
+     {
+        if (elm_widget_is(dragwidget))
+          {
+             Evas_Object *win = elm_widget_top_get(dragwidget);
+             if (win && eo_isa(win, ELM_WIN_CLASS))
+               evas_object_smart_callback_del_full(win, "rotation,changed",
+                                              _x11_win_rotation_changed_cb, 
dragwin);
+          }
+     }
 #endif
 #ifdef HAVE_ELEMENTARY_WAYLAND
 /* Have to complete here.

-- 


Reply via email to