Enlightenment CVS committal

Author  : jethomas
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src/lib


Modified Files:
        ewl_embed.c 


Log Message:
Some improvements on mouse cursor settings.  Only change if child has 
non-default, and then go back to first non-default on mouse out.

===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_embed.c,v
retrieving revision 1.140
retrieving revision 1.141
diff -u -3 -r1.140 -r1.141
--- ewl_embed.c 12 Jan 2008 05:45:14 -0000      1.140
+++ ewl_embed.c 16 Jan 2008 21:55:00 -0000      1.141
@@ -700,6 +700,7 @@
 ewl_embed_mouse_move_feed(Ewl_Embed *embed, int x, int y, unsigned int mods)
 {
        Ewl_Object *check;
+       Ewl_Widget *temp;
        Ewl_Widget *widget = NULL;
        Ewl_Event_Mouse_Move ev;
 
@@ -732,23 +733,41 @@
        else
                widget = embed->last.mouse_in;
 
+
+       /* Cycle through all parents of the widget to see if any have
+        * a non-default cursor
+        */
+       temp = EWL_WIDGET(check);
+       check = NULL;
+       while (temp)
+       {
+               if (ewl_attach_get(temp, EWL_ATTACH_TYPE_MOUSE_ARGB_CURSOR) ||
+                               ewl_attach_get(temp, 
EWL_ATTACH_TYPE_MOUSE_CURSOR))
+               {
+                       check = EWL_OBJECT(temp);
+                       break;
+               }
+
+               temp = temp->parent;
+       }
+
+       /* Set the cursor to first parent if possible */
+       if (check)
+               ewl_embed_mouse_cursor_set(EWL_WIDGET(check));
+       else if (embed->last.mouse_in && embed->last.mouse_in->parent)
+               ewl_embed_mouse_cursor_set(embed->last.mouse_in->parent);
+
        /*
         * Defocus all widgets up to the level of a shared parent of
         * old and newly focused widgets.
         */
+       check = EWL_OBJECT(embed->last.mouse_in);
        while (check && (widget != EWL_WIDGET(check))
                        && !ewl_widget_parent_of(EWL_WIDGET(check), widget)) {
 
                ewl_object_state_remove(check, EWL_FLAG_STATE_MOUSE_IN);
                ewl_callback_call(EWL_WIDGET(check), EWL_CALLBACK_MOUSE_OUT);
                check = EWL_OBJECT(EWL_WIDGET(check)->parent);
-
-               /* We set the cursor to the parent of the now moused_out widget
-                * because if we only run this loop once then a custom cursor 
will
-                * be shown on mouse_out
-                */
-               if (check)
-                       ewl_embed_mouse_cursor_set(EWL_WIDGET(check));
        }
 
        /*
@@ -765,7 +784,13 @@
                         */
                        if (!(ewl_object_state_has(check,
                                                EWL_FLAG_STATE_MOUSE_IN))) {
-                               ewl_embed_mouse_cursor_set(EWL_WIDGET(check));
+
+                               /* Only set the cursor different if it is 
non-default */
+                               if (ewl_attach_get(EWL_WIDGET(check),
+                                                       
EWL_ATTACH_TYPE_MOUSE_ARGB_CURSOR) ||
+                                               
ewl_attach_get(EWL_WIDGET(check),
+                                                       
EWL_ATTACH_TYPE_MOUSE_CURSOR))
+                                       
ewl_embed_mouse_cursor_set(EWL_WIDGET(check));
 
                                ewl_object_state_add(check,
                                                EWL_FLAG_STATE_MOUSE_IN);



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to