Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        dialog.c 


Log Message:
Dialog sliders - Don't callback on mouse down, fix klicking on knob.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/dialog.c,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -3 -r1.124 -r1.125
--- dialog.c    2 Aug 2005 16:50:36 -0000       1.124
+++ dialog.c    10 Aug 2005 15:20:26 -0000      1.125
@@ -25,6 +25,8 @@
 #include "ewins.h"
 #include "xwin.h"
 
+#define DEBUG_DIALOGS 0
+
 typedef struct
 {
    char                horizontal;
@@ -1482,6 +1484,11 @@
       d->yu2 = y;
 
    dialog_update_pending = 1;
+
+#if DEBUG_DIALOGS
+   Eprintf("DialogDrawItems t=%d u=%d - %d,%d -> %d,%d\n", di->type, 
di->update,
+          d->xu1, d->yu1, d->xu2, d->yu2);
+#endif
 }
 
 static void
@@ -1496,7 +1503,7 @@
        di->x + di->w <= d->xu1 || di->y + di->h <= d->yu1)
       goto done;
 
-#if 0
+#if DEBUG_DIALOGS
    Eprintf("DialogDrawItem t=%d u=%d - %d,%d -> %d,%d\n", di->type, di->update,
           d->xu1, d->yu1, d->xu2, d->yu2);
 #endif
@@ -2144,6 +2151,7 @@
 {
    Window              win = ev->xbutton.window;
    DItem              *di;
+   int                 x, y, wheel_jump;
 
    di = DialogFindDItem(d, win);
    if (!di)
@@ -2157,47 +2165,32 @@
        break;
 
      case DITEM_SLIDER:
-       if ((ev->xbutton.button == 2) ||
-           (ev->xbutton.button == 4) || (ev->xbutton.button == 5))
-         {
-            int                 wheel_jump = di->item.slider.jump / 2;
+#if 0                          /* Do any themes have this? */
+       if (win == di->item.slider.border_win)
+          break;
+#endif
 
-            if (!wheel_jump)
-               wheel_jump++;
-            if (ev->xbutton.button == 5)
-              {
-                 di->item.slider.val -= wheel_jump;
-                 if (di->item.slider.val < di->item.slider.lower)
-                    di->item.slider.val = di->item.slider.lower;
-              }
-            else if (ev->xbutton.button == 4)
-              {
-                 di->item.slider.val += wheel_jump;
-                 if (di->item.slider.val > di->item.slider.upper)
-                    di->item.slider.val = di->item.slider.upper;
-              }
-            else
+       if (win == di->item.slider.knob_win)
+         {
+            if (ev->xbutton.button >= 1 && ev->xbutton.button <= 3)
               {
+                 di->item.slider.in_drag = 1;
                  if (di->item.slider.horizontal)
-                   {
-                      di->item.slider.val = ev->xbutton.x *
-                         (di->item.slider.upper - di->item.slider.lower) /
-                         di->w;
-                   }
+                    di->item.slider.wanted_val = di->item.slider.knob_x;
                  else
-                   {
-                      di->item.slider.val = ((di->h - ev->xbutton.y) *
-                                             (di->item.slider.upper -
-                                              di->item.slider.lower) / di->h);
-                   }
+                    di->item.slider.wanted_val = di->item.slider.knob_y;
+                 break;
               }
-            if (di->item.slider.val_ptr)
-               *di->item.slider.val_ptr = di->item.slider.val;
-            if (di->func)
-               (di->func) (d, di->val, di->data);
          }
-       else if (win == di->item.slider.base_win)
+
+       /* Coords -> item.slider.base_win */
+       ETranslateCoordinates(win, di->item.slider.base_win,
+                             ev->xbutton.x, ev->xbutton.y, &x, &y, NULL);
+
+       switch (ev->xbutton.button)
          {
+         case 1:
+         case 3:
             if (di->item.slider.horizontal)
               {
                  if (ev->xbutton.x >
@@ -2214,23 +2207,44 @@
                  else
                     di->item.slider.val += di->item.slider.jump;
               }
-            if (di->item.slider.val < di->item.slider.lower)
-               di->item.slider.val = di->item.slider.lower;
-            if (di->item.slider.val > di->item.slider.upper)
-               di->item.slider.val = di->item.slider.upper;
-            if (di->item.slider.val_ptr)
-               *di->item.slider.val_ptr = di->item.slider.val;
-            if (di->func)
-               (di->func) (d, di->val, di->data);
-         }
-       else if (win == di->item.slider.knob_win)
-         {
-            di->item.slider.in_drag = 1;
+            break;
+
+         case 2:
             if (di->item.slider.horizontal)
-               di->item.slider.wanted_val = di->item.slider.knob_x;
+               di->item.slider.val = x *
+                  (di->item.slider.upper - di->item.slider.lower) / di->w;
             else
-               di->item.slider.wanted_val = di->item.slider.knob_y;
+               di->item.slider.val = ((di->h - y) *
+                                      (di->item.slider.upper -
+                                       di->item.slider.lower) / di->h);
+            break;
+
+         case 4:
+         case 5:
+            wheel_jump = di->item.slider.jump / 2;
+            if (!wheel_jump)
+               wheel_jump++;
+
+            if (ev->xbutton.button == 5)
+              {
+                 di->item.slider.val -= wheel_jump;
+              }
+            else if (ev->xbutton.button == 4)
+              {
+                 di->item.slider.val += wheel_jump;
+              }
+            break;
          }
+       if (di->item.slider.val < di->item.slider.lower)
+          di->item.slider.val = di->item.slider.lower;
+       if (di->item.slider.val > di->item.slider.upper)
+          di->item.slider.val = di->item.slider.upper;
+       if (di->item.slider.val_ptr)
+          *di->item.slider.val_ptr = di->item.slider.val;
+#if 0                          /* Remove? */
+       if (di->func)
+          (di->func) (d, di->val, di->data);
+#endif
        break;
      }
 
@@ -2285,6 +2299,7 @@
        if (di->item.radio_button.val_ptr)
           *di->item.radio_button.val_ptr = di->item.radio_button.val;
        break;
+
      case DITEM_SLIDER:
        if (win == di->item.slider.knob_win)
           di->item.slider.in_drag = 0;




-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to