Enlightenment CVS committal

Author  : moom
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_x


Modified Files:
        Ecore_X.h ecore_x_events.c 


Log Message:
* [Ecore_X] "mouse up" events have now double/triple click flags, and 
those flags are feeded to the Evas


===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v
retrieving revision 1.170
retrieving revision 1.171
diff -u -3 -r1.170 -r1.171
--- Ecore_X.h   14 Jul 2006 09:37:11 -0000      1.170
+++ Ecore_X.h   25 Aug 2006 17:27:08 -0000      1.171
@@ -329,6 +329,8 @@
    Ecore_X_Window  win;
    Ecore_X_Window  event_win;
    Ecore_X_Time    time;
+   int     double_click : 1;
+   int     triple_click : 1;
 };
 
 struct _Ecore_X_Event_Mouse_Move
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -3 -r1.83 -r1.84
--- ecore_x_events.c    19 May 2006 14:23:04 -0000      1.83
+++ ecore_x_events.c    25 Aug 2006 17:27:08 -0000      1.84
@@ -27,6 +27,15 @@
 static void _ecore_x_event_free_key_down(void *data, void *ev);
 static void _ecore_x_event_free_key_up(void *data, void *ev);
 
+static Window _ecore_x_mouse_down_last_win = 0;
+static Window _ecore_x_mouse_down_last_last_win = 0;
+static Window _ecore_x_mouse_down_last_event_win = 0;
+static Window _ecore_x_mouse_down_last_last_event_win = 0;
+static Time _ecore_x_mouse_down_last_time = 0;
+static Time _ecore_x_mouse_down_last_last_time = 0;
+static int _ecore_x_mouse_up_count = 0;
+static int _ecore_x_mouse_down_did_triple = 0;
+
 EAPI void
 ecore_x_event_mask_set(Ecore_X_Window w, Ecore_X_Event_Mask mask)
 {
@@ -276,13 +285,6 @@
 void
 _ecore_x_event_handle_button_press(XEvent *xevent)
 {
-   static Window last_win = 0;
-   static Window last_last_win = 0;
-   static Window last_event_win = 0;
-   static Window last_last_event_win = 0;
-   static Time last_time = 0;
-   static Time last_last_time = 0;
-   int did_triple = 0;
    int i;
 
    if ((xevent->xbutton.button > 3) && (xevent->xbutton.button < 8))
@@ -381,6 +383,16 @@
          }
          {
             Ecore_X_Event_Mouse_Button_Down *e;
+             
+            if (_ecore_x_mouse_down_did_triple)
+              {
+                 _ecore_x_mouse_down_last_win = 0;
+                 _ecore_x_mouse_down_last_last_win = 0;
+                 _ecore_x_mouse_down_last_event_win = 0;
+                 _ecore_x_mouse_down_last_last_event_win = 0;
+                 _ecore_x_mouse_down_last_time = 0;
+                 _ecore_x_mouse_down_last_last_time = 0;
+              }
             
             e = calloc(1, sizeof(Ecore_X_Event_Mouse_Button_Down));
             if (!e) return;
@@ -396,22 +408,28 @@
             e->time = xevent->xbutton.time;
             if (e->win == e->event_win)
               {
-                 if (((int)(e->time - last_time) <= 
+                 if (((int)(e->time - _ecore_x_mouse_down_last_time) <= 
                       (int)(1000 * _ecore_x_double_click_time)) &&
-                     (e->win == last_win)
-                     && (e->event_win == last_event_win)
+                     (e->win == _ecore_x_mouse_down_last_win) &&
+                     (e->event_win == _ecore_x_mouse_down_last_event_win)
                      )
                    e->double_click = 1;
-                 if (((int)(e->time - last_last_time) <= 
+                 if (((int)(e->time - _ecore_x_mouse_down_last_last_time) <= 
                       (int)(2 * 1000 * _ecore_x_double_click_time)) &&
-                     (e->win == last_win) && (e->win == last_last_win)
-                     && (e->event_win == last_event_win) && (e->event_win == 
last_last_event_win)
+                     (e->win == _ecore_x_mouse_down_last_win) &&
+                      (e->win == _ecore_x_mouse_down_last_last_win) &&
+                     (e->event_win == _ecore_x_mouse_down_last_event_win) &&
+                      (e->event_win == _ecore_x_mouse_down_last_last_event_win)
                      )
                    {
-                      did_triple = 1;
-                      e->triple_click = 1;
+                        e->triple_click = 1;
+                      _ecore_x_mouse_down_did_triple = 1;
                    }
+                  else
+                    _ecore_x_mouse_down_did_triple = 0;
               }
+             if (!e->double_click && !e->triple_click)
+               _ecore_x_mouse_up_count = 0;
             _ecore_x_event_last_time = e->time;
             _ecore_x_event_last_win = e->win;
             _ecore_x_event_last_root_x = e->root.x;
@@ -441,26 +459,17 @@
               }
             if (e->win == e->event_win)
               {
-                 if (did_triple)
-                   {
-                      last_win = 0;
-                      last_last_win = 0;
-                      last_event_win = 0;
-                      last_last_event_win = 0;
-                      last_time = 0;
-                      last_last_time = 0;
-                   }
-                 else
+                 if (!_ecore_x_mouse_down_did_triple)
                    {
-                      last_last_win = last_win;
+                      _ecore_x_mouse_down_last_last_win = 
_ecore_x_mouse_down_last_win;
                       if (xevent->xbutton.subwindow)
-                        last_win = xevent->xbutton.subwindow;
+                        _ecore_x_mouse_down_last_win = 
xevent->xbutton.subwindow;
                       else
-                        last_win = xevent->xbutton.window;
-                      last_last_event_win = last_event_win;
-                      last_event_win = xevent->xbutton.window;
-                      last_last_time = last_time;
-                      last_time = xevent->xbutton.time;
+                        _ecore_x_mouse_down_last_win = xevent->xbutton.window;
+                      _ecore_x_mouse_down_last_last_event_win = 
_ecore_x_mouse_down_last_event_win;
+                      _ecore_x_mouse_down_last_event_win = 
xevent->xbutton.window;
+                      _ecore_x_mouse_down_last_last_time = 
_ecore_x_mouse_down_last_time;
+                      _ecore_x_mouse_down_last_time = xevent->xbutton.time;
                    }
               }
          }
@@ -508,6 +517,26 @@
             else e->win = xevent->xbutton.window;
             e->event_win = xevent->xbutton.window;
             e->time = xevent->xbutton.time;
+             _ecore_x_mouse_up_count++;
+            if (e->win == e->event_win)
+              {
+                 if ((_ecore_x_mouse_up_count >= 2) &&
+                      ((int)(e->time - _ecore_x_mouse_down_last_time) <= 
+                      (int)(1000 * _ecore_x_double_click_time)) &&
+                     (e->win == _ecore_x_mouse_down_last_win) &&
+                     (e->event_win == _ecore_x_mouse_down_last_event_win)
+                     )
+                   e->double_click = 1;
+                 if ((_ecore_x_mouse_up_count >= 3) &&
+                     ((int)(e->time - _ecore_x_mouse_down_last_last_time) <= 
+                      (int)(2 * 1000 * _ecore_x_double_click_time)) &&
+                     (e->win == _ecore_x_mouse_down_last_win) &&
+                      (e->win == _ecore_x_mouse_down_last_last_win) &&
+                     (e->event_win == _ecore_x_mouse_down_last_event_win) &&
+                      (e->event_win == _ecore_x_mouse_down_last_last_event_win)
+                     )
+                    e->triple_click = 1;
+              }
             _ecore_x_event_last_time = e->time;
             _ecore_x_event_last_win = e->win;
             _ecore_x_event_last_root_x = e->root.x;



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to