aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ecore/src/lib/ecore_evas/ecore_evas_x.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ecore/src/lib/ecore_evas/ecore_evas_x.c')
-rw-r--r--libraries/ecore/src/lib/ecore_evas/ecore_evas_x.c53
1 files changed, 42 insertions, 11 deletions
diff --git a/libraries/ecore/src/lib/ecore_evas/ecore_evas_x.c b/libraries/ecore/src/lib/ecore_evas/ecore_evas_x.c
index d9ccd6e..7d3af12 100644
--- a/libraries/ecore/src/lib/ecore_evas/ecore_evas_x.c
+++ b/libraries/ecore/src/lib/ecore_evas/ecore_evas_x.c
@@ -1,4 +1,13 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#include <stdlib.h>
1#include <string.h> 6#include <string.h>
7
8#include <Eina.h>
9#include <Ecore.h>
10
2#include "ecore_evas_private.h" 11#include "ecore_evas_private.h"
3#include "Ecore_Evas.h" 12#include "Ecore_Evas.h"
4 13
@@ -731,10 +740,14 @@ _ecore_evas_x_event_mouse_in(void *data __UNUSED__, int type __UNUSED__, void *e
731 // (e->mode == ECORE_X_EVENT_MODE_UNGRAB)) 740 // (e->mode == ECORE_X_EVENT_MODE_UNGRAB))
732 // return 0; 741 // return 0;
733 /* if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0; */ 742 /* if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0; */
734 if (ee->func.fn_mouse_in) ee->func.fn_mouse_in(ee); 743 if (!ee->in)
735 ecore_event_evas_modifier_lock_update(ee->evas, e->modifiers); 744 {
736 evas_event_feed_mouse_in(ee->evas, e->time, NULL); 745 if (ee->func.fn_mouse_in) ee->func.fn_mouse_in(ee);
737 _ecore_evas_mouse_move_process(ee, e->x, e->y, e->time); 746 ecore_event_evas_modifier_lock_update(ee->evas, e->modifiers);
747 evas_event_feed_mouse_in(ee->evas, e->time, NULL);
748 _ecore_evas_mouse_move_process(ee, e->x, e->y, e->time);
749 ee->in = EINA_TRUE;
750 }
738 return ECORE_CALLBACK_PASS_ON; 751 return ECORE_CALLBACK_PASS_ON;
739} 752}
740 753
@@ -783,13 +796,23 @@ _ecore_evas_x_event_mouse_out(void *data __UNUSED__, int type __UNUSED__, void *
783 // (e->mode == ECORE_X_EVENT_MODE_UNGRAB)) 796 // (e->mode == ECORE_X_EVENT_MODE_UNGRAB))
784 // return 0; 797 // return 0;
785 /* if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0; */ 798 /* if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0; */
786 ecore_event_evas_modifier_lock_update(ee->evas, e->modifiers); 799// printf("OUT: ee->in=%i, e->mode=%i, e->detail=%i, dount_count=%i\n",
787 _ecore_evas_mouse_move_process(ee, e->x, e->y, e->time); 800// ee->in, e->mode, e->detail, evas_event_down_count_get(ee->evas));
788 if (e->mode == ECORE_X_EVENT_MODE_GRAB) 801 if (ee->in)
789 evas_event_feed_mouse_cancel(ee->evas, e->time, NULL); 802 {
790 evas_event_feed_mouse_out(ee->evas, e->time, NULL); 803 if ((evas_event_down_count_get(ee->evas) > 0) &&
791 if (ee->func.fn_mouse_out) ee->func.fn_mouse_out(ee); 804 (!((e->mode == ECORE_X_EVENT_MODE_GRAB) &&
792 if (ee->prop.cursor.object) evas_object_hide(ee->prop.cursor.object); 805 (e->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR))))
806 return ECORE_CALLBACK_PASS_ON;
807 ecore_event_evas_modifier_lock_update(ee->evas, e->modifiers);
808 _ecore_evas_mouse_move_process(ee, e->x, e->y, e->time);
809 if (e->mode == ECORE_X_EVENT_MODE_GRAB)
810 evas_event_feed_mouse_cancel(ee->evas, e->time, NULL);
811 evas_event_feed_mouse_out(ee->evas, e->time, NULL);
812 if (ee->func.fn_mouse_out) ee->func.fn_mouse_out(ee);
813 if (ee->prop.cursor.object) evas_object_hide(ee->prop.cursor.object);
814 ee->in = EINA_FALSE;
815 }
793 return ECORE_CALLBACK_PASS_ON; 816 return ECORE_CALLBACK_PASS_ON;
794} 817}
795 818
@@ -1023,6 +1046,14 @@ _ecore_evas_x_event_window_hide(void *data __UNUSED__, int type __UNUSED__, void
1023 ee = ecore_event_window_match(e->win); 1046 ee = ecore_event_window_match(e->win);
1024 if (!ee) return ECORE_CALLBACK_PASS_ON; /* pass on event */ 1047 if (!ee) return ECORE_CALLBACK_PASS_ON; /* pass on event */
1025 if (e->win != ee->prop.window) return ECORE_CALLBACK_PASS_ON; 1048 if (e->win != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
1049 if (ee->in)
1050 {
1051 evas_event_feed_mouse_cancel(ee->evas, e->time, NULL);
1052 evas_event_feed_mouse_out(ee->evas, e->time, NULL);
1053 if (ee->func.fn_mouse_out) ee->func.fn_mouse_out(ee);
1054 if (ee->prop.cursor.object) evas_object_hide(ee->prop.cursor.object);
1055 ee->in = EINA_FALSE;
1056 }
1026 if (!ee->visible) return ECORE_CALLBACK_PASS_ON; 1057 if (!ee->visible) return ECORE_CALLBACK_PASS_ON;
1027// if (!ee->visible) return ECORE_CALLBACK_DONE; 1058// if (!ee->visible) return ECORE_CALLBACK_DONE;
1028// printf("HIDE EVENT %p\n", ee); 1059// printf("HIDE EVENT %p\n", ee);