Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h buttons.c desktops.c dialog.c edge.c events.c ewins.c 
        iconify.c ipc.c magwin.c menus.c moveresize.c pager.c 


Log Message:
Fix incorrect tracking of pointer motion when dragging window (noted by Jon 
Foster).

===================================================================
RCS file: /cvs/e/e16/e/src/E.h,v
retrieving revision 1.597
retrieving revision 1.598
diff -u -3 -r1.597 -r1.598
--- E.h 22 Sep 2007 10:21:17 -0000      1.597
+++ E.h 21 Dec 2007 22:04:52 -0000      1.598
@@ -458,8 +458,9 @@
    struct
    {
       Time                time;
-      int                 x, y;
-      int                 px, py;
+      int                 cx, cy;      /* Any detected pointer movement */
+      int                 mx, my;      /* Motion event */
+      int                 px, py;      /* Previous motion event */
       Time                last_btime;
       Window              last_bpress;
       Window              last_bpress2;
===================================================================
RCS file: /cvs/e/e16/e/src/buttons.c,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -3 -r1.106 -r1.107
--- buttons.c   10 Sep 2007 20:26:53 -0000      1.106
+++ buttons.c   21 Dec 2007 22:04:54 -0000      1.107
@@ -421,8 +421,8 @@
    GrabPointerSet(EoGetWin(b), ECSR_GRAB, 0);
    Mode.mode = MODE_BUTTONDRAG;
    Mode_buttons.move_pending = 1;
-   Mode_buttons.start_x = Mode.events.x;
-   Mode_buttons.start_y = Mode.events.y;
+   Mode_buttons.start_x = Mode.events.cx;
+   Mode_buttons.start_y = Mode.events.cy;
 }
 
 static void
@@ -434,7 +434,7 @@
 
    if (!Mode_buttons.move_pending)
      {
-       dsk = DesktopAt(Mode.events.x, Mode.events.y);
+       dsk = DesktopAt(Mode.events.mx, Mode.events.my);
        ButtonMoveToDesktop(b, dsk);
        dsk = EoGetDesk(b);
        ButtonMoveRelative(b, -EoGetX(dsk), -EoGetY(dsk));
@@ -558,15 +558,15 @@
    if (Mode.mode != MODE_BUTTONDRAG)
       return;
 
-   dx = Mode.events.x - Mode.events.px;
-   dy = Mode.events.y - Mode.events.py;
+   dx = Mode.events.mx - Mode.events.px;
+   dy = Mode.events.my - Mode.events.py;
 
    if (Mode_buttons.move_pending)
      {
        int                 x, y;
 
-       x = Mode.events.x - Mode_buttons.start_x;
-       y = Mode.events.y - Mode_buttons.start_y;
+       x = Mode.events.mx - Mode_buttons.start_x;
+       y = Mode.events.my - Mode_buttons.start_y;
        if (x < 0)
           x = -x;
        if (y < 0)
===================================================================
RCS file: /cvs/e/e16/e/src/desktops.c,v
retrieving revision 1.272
retrieving revision 1.273
diff -u -3 -r1.272 -r1.273
--- desktops.c  18 Nov 2007 09:47:45 -0000      1.272
+++ desktops.c  21 Dec 2007 22:04:54 -0000      1.273
@@ -1747,8 +1747,8 @@
 
    dsk = _DeskGet(desk);
 
-   desks.drag_x0 = Mode.events.x - EoGetX(dsk);
-   desks.drag_y0 = Mode.events.y - EoGetY(dsk);
+   desks.drag_x0 = Mode.events.cx - EoGetX(dsk);
+   desks.drag_y0 = Mode.events.cy - EoGetY(dsk);
 
    Mode.mode = MODE_DESKDRAG;
 }
@@ -1764,8 +1764,8 @@
 {
    int                 x, y;
 
-   x = Mode.events.x - desks.drag_x0;
-   y = Mode.events.y - desks.drag_y0;
+   x = Mode.events.mx - desks.drag_x0;
+   y = Mode.events.my - desks.drag_y0;
 
    switch (Conf.desks.dragdir)
      {
@@ -1967,7 +1967,7 @@
 
      case MotionNotify:
        /* Motion over desk buttons doesn't go here - We probably don't care 
much. */
-       DesksSetCurrent(DesktopAt(Mode.events.x, Mode.events.y));
+       DesksSetCurrent(DesktopAt(Mode.events.mx, Mode.events.my));
        TooltipsSetPending(1, DeskGetAclass, dsk);
        break;
 
===================================================================
RCS file: /cvs/e/e16/e/src/dialog.c,v
retrieving revision 1.192
retrieving revision 1.193
diff -u -3 -r1.192 -r1.193
--- dialog.c    15 Dec 2007 17:10:47 -0000      1.192
+++ dialog.c    21 Dec 2007 22:04:54 -0000      1.193
@@ -2183,8 +2183,8 @@
           break;
        if (ev->xmotion.window == WinGetXwin(di->item.slider.knob_win))
          {
-            dx = Mode.events.x - Mode.events.px;
-            dy = Mode.events.y - Mode.events.py;
+            dx = Mode.events.mx - Mode.events.px;
+            dy = Mode.events.my - Mode.events.py;
             if (di->item.slider.horizontal)
               {
                  di->item.slider.wanted_val += dx;
===================================================================
RCS file: /cvs/e/e16/e/src/edge.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -3 -r1.36 -r1.37
--- edge.c      18 Nov 2007 09:47:46 -0000      1.36
+++ edge.c      21 Dec 2007 22:04:54 -0000      1.37
@@ -90,14 +90,14 @@
       dx = 0;
    if (ah == 1)
       dy = 0;
-   Mode.events.px = Mode.events.x;
-   Mode.events.py = Mode.events.y;
-   Mode.events.x += dx;
-   Mode.events.y += dy;
-   EXWarpPointer(VRoot.xwin, Mode.events.x, Mode.events.y);
+   Mode.events.px = Mode.events.mx;
+   Mode.events.py = Mode.events.my;
+   Mode.events.mx += dx;
+   Mode.events.my += dy;
+   EXWarpPointer(VRoot.xwin, Mode.events.mx, Mode.events.my);
    DeskCurrentMoveAreaBy(dax, day);
-   Mode.events.px = Mode.events.x;
-   Mode.events.py = Mode.events.y;
+   Mode.events.px = Mode.events.mx;
+   Mode.events.py = Mode.events.my;
 }
 
 static void
===================================================================
RCS file: /cvs/e/e16/e/src/events.c,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -3 -r1.143 -r1.144
--- events.c    2 Dec 2007 18:39:16 -0000       1.143
+++ events.c    21 Dec 2007 22:04:54 -0000      1.144
@@ -268,13 +268,13 @@
 
    if (Mode.wm.window)
      {
-       XTranslateCoordinates(disp, rwin, VRoot.xwin,
-                             rx, ry, &Mode.events.x, &Mode.events.y, &child);
+       XTranslateCoordinates(disp, rwin, VRoot.xwin, rx, ry,
+                             &Mode.events.cx, &Mode.events.cy, &child);
      }
    else
      {
-       Mode.events.x = rx;
-       Mode.events.y = ry;
+       Mode.events.cx = rx;
+       Mode.events.cy = ry;
      }
 }
 
@@ -321,9 +321,11 @@
 
      case MotionNotify:
        Mode.events.time = ev->xmotion.time;
-       Mode.events.px = Mode.events.x;
-       Mode.events.py = Mode.events.y;
+       Mode.events.px = Mode.events.mx;
+       Mode.events.py = Mode.events.my;
        ModeGetXY(ev->xmotion.root, ev->xmotion.x_root, ev->xmotion.y_root);
+       Mode.events.mx = Mode.events.cx;
+       Mode.events.my = Mode.events.cy;
        Mode.events.on_screen = ev->xmotion.same_screen;
        break;
 
@@ -890,7 +892,9 @@
                ev->xbutton.subwindow, ev->xbutton.state, ev->xbutton.button);
        break;
      case MotionNotify:
-       Eprintf("%s sub=%#lx\n", buf, ev->xcrossing.subwindow);
+       Eprintf("%s sub=%#lx x,y=%d,%d rx,ry=%d,%d\n", buf,
+               ev->xmotion.subwindow, ev->xmotion.x, ev->xmotion.y,
+               ev->xmotion.x_root, ev->xmotion.y_root);
        break;
      case EnterNotify:
      case LeaveNotify:
===================================================================
RCS file: /cvs/e/e16/e/src/ewins.c,v
retrieving revision 1.209
retrieving revision 1.210
diff -u -3 -r1.209 -r1.210
--- ewins.c     4 Dec 2007 21:13:25 -0000       1.209
+++ ewins.c     21 Dec 2007 22:04:54 -0000      1.210
@@ -508,7 +508,7 @@
    int                 i, num;
    Desk               *dsk;
 
-   dsk = DesktopAt(Mode.events.x, Mode.events.y);
+   dsk = DesktopAt(Mode.events.cx, Mode.events.cy);
    EQueryPointer(EoGetWin(dsk), &px, &py, NULL, NULL);
 
    lst = EwinListGetForDesk(&num, dsk);
@@ -862,8 +862,8 @@
             DeskGoto(dsk);
 
             EQueryPointer(NULL, &rx, &ry, NULL, NULL);
-            Mode.events.x = rx;
-            Mode.events.y = ry;
+            Mode.events.cx = rx;
+            Mode.events.cy = ry;
 
             /* try to center the window on the mouse pointer */
             newWinX = rx;
@@ -923,11 +923,11 @@
        DeskGoto(dsk);
 
        EQueryPointer(NULL, &rx, &ry, NULL, NULL);
-       Mode.events.x = rx;
-       Mode.events.y = ry;
+       Mode.events.cx = rx;
+       Mode.events.cy = ry;
        ewin->state.placed = 1;
-       x = Mode.events.x + 1;
-       y = Mode.events.y + 1;
+       x = Mode.events.cx + 1;
+       y = Mode.events.cy + 1;
        EwinMoveToDesktopAt(ewin, dsk, x, y);
        EwinMove(ewin, x, y);
        EwinShow(ewin);
===================================================================
RCS file: /cvs/e/e16/e/src/iconify.c,v
retrieving revision 1.225
retrieving revision 1.226
diff -u -3 -r1.225 -r1.226
--- iconify.c   7 Apr 2007 16:18:53 -0000       1.225
+++ iconify.c   21 Dec 2007 22:04:54 -0000      1.226
@@ -574,7 +574,7 @@
 
        name = EwinGetIconName(ewin);
        if (name)
-          TooltipShow(tt, name, NULL, Mode.events.x, Mode.events.y);
+          TooltipShow(tt, name, NULL, Mode.events.cx, Mode.events.cy);
        break;
 
      case LeaveNotify:
===================================================================
RCS file: /cvs/e/e16/e/src/ipc.c,v
retrieving revision 1.304
retrieving revision 1.305
diff -u -3 -r1.304 -r1.305
--- ipc.c       28 Nov 2007 19:28:54 -0000      1.304
+++ ipc.c       21 Dec 2007 22:04:54 -0000      1.305
@@ -1360,10 +1360,10 @@
      {
        int                 j;
 
-       ev.x = Mode.events.x;
-       ev.y = Mode.events.y;
-       ev.x_root = Mode.events.x;
-       ev.y_root = Mode.events.y;
+       ev.x = Mode.events.cx;
+       ev.y = Mode.events.cy;
+       ev.x_root = Mode.events.cx;
+       ev.y_root = Mode.events.cy;
        for (j = 0; j < (int)(sizeof(ks) / sizeof(struct _keyset)); j++)
          {
             if (strncmp(ks[j].ch, &(s[i]), strlen(ks[j].ch)))
===================================================================
RCS file: /cvs/e/e16/e/src/magwin.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- magwin.c    19 May 2007 18:44:39 -0000      1.5
+++ magwin.c    21 Dec 2007 22:04:55 -0000      1.6
@@ -318,8 +318,8 @@
      case MotionNotify:
        if (mw->grabbing)
          {
-            mw->cx = Mode.events.x;
-            mw->cy = Mode.events.y;
+            mw->cx = Mode.events.mx;
+            mw->cy = Mode.events.my;
             mw->update = 1;
          }
        else
===================================================================
RCS file: /cvs/e/e16/e/src/menus.c,v
retrieving revision 1.291
retrieving revision 1.292
diff -u -3 -r1.291 -r1.292
--- menus.c     19 Dec 2007 21:00:47 -0000      1.291
+++ menus.c     21 Dec 2007 22:04:55 -0000      1.292
@@ -1342,26 +1342,27 @@
        int                 my_width, my_height, x_org, y_org, head_num = 0;
 
        head_num =
-          ScreenGetGeometry(Mode.events.x, Mode.events.y, &x_org, &y_org,
+          ScreenGetGeometry(Mode.events.mx, Mode.events.my, &x_org, &y_org,
                             &my_width, &my_height);
 
-       if (Mode.events.x > ((x_org + my_width) - (menu_scroll_dist + 1)))
+       if (Mode.events.mx > ((x_org + my_width) - (menu_scroll_dist + 1)))
          {
-            xdist = -(menu_scroll_dist + (Mode.events.x - (x_org + my_width)));
+            xdist =
+               -(menu_scroll_dist + (Mode.events.mx - (x_org + my_width)));
          }
-       else if (Mode.events.x < (menu_scroll_dist + x_org))
+       else if (Mode.events.mx < (menu_scroll_dist + x_org))
          {
-            xdist = x_org + menu_scroll_dist - (Mode.events.x);
+            xdist = x_org + menu_scroll_dist - (Mode.events.mx);
          }
 
-       if (Mode.events.y > (VRoot.h - (menu_scroll_dist + 1)))
+       if (Mode.events.my > (VRoot.h - (menu_scroll_dist + 1)))
          {
             ydist =
-               -(menu_scroll_dist + (Mode.events.y - (y_org + my_height)));
+               -(menu_scroll_dist + (Mode.events.my - (y_org + my_height)));
          }
-       else if (Mode.events.y < (menu_scroll_dist + y_org))
+       else if (Mode.events.my < (menu_scroll_dist + y_org))
          {
-            ydist = y_org + menu_scroll_dist - (Mode.events.y);
+            ydist = y_org + menu_scroll_dist - (Mode.events.my);
          }
 
        /* That's a hack to avoid unwanted events:
===================================================================
RCS file: /cvs/e/e16/e/src/moveresize.c,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -3 -r1.82 -r1.83
--- moveresize.c        5 Sep 2007 19:12:56 -0000       1.82
+++ moveresize.c        21 Dec 2007 22:04:55 -0000      1.83
@@ -95,8 +95,8 @@
    Mode.mode = MODE_MOVE_PENDING;
    Mode.constrained = constrained;
 
-   Mode_mr.win_x = Mode.events.x - (EoGetX(ewin) + EoGetX(EoGetDesk(ewin)));
-   Mode_mr.win_y = Mode.events.y - (EoGetY(ewin) + EoGetY(EoGetDesk(ewin)));
+   Mode_mr.win_x = Mode.events.cx - (EoGetX(ewin) + EoGetX(EoGetDesk(ewin)));
+   Mode_mr.win_y = Mode.events.cy - (EoGetY(ewin) + EoGetY(EoGetDesk(ewin)));
 
    EwinRaise(ewin);
    gwins = ListWinGroupMembersForEwin(ewin, GROUP_ACTION_MOVE, nogroup
@@ -159,7 +159,7 @@
      }
    Mode.mode = MODE_NONE;
 
-   d2 = DesktopAt(Mode.events.x, Mode.events.y);
+   d2 = DesktopAt(Mode.events.mx, Mode.events.my);
 
    for (i = 0; i < num; i++)
      {
@@ -253,8 +253,10 @@
    if (Mode_mr.grab_server)
       EGrabServer();
 
-   dx = Mode.events.x - Mode_mr.win_x - EoGetX(EoGetDesk(ewin)) - 
ewin->shape_x;
-   dy = Mode.events.y - Mode_mr.win_y - EoGetY(EoGetDesk(ewin)) - 
ewin->shape_y;
+   dx =
+      Mode.events.mx - Mode_mr.win_x - EoGetX(EoGetDesk(ewin)) - ewin->shape_x;
+   dy =
+      Mode.events.my - Mode_mr.win_y - EoGetY(EoGetDesk(ewin)) - ewin->shape_y;
 
    /* Redraw any windows that were in "move mode" */
    lst = ListWinGroupMembersForEwin(ewin, GROUP_ACTION_MOVE,
@@ -316,8 +318,8 @@
      default:
      case MODE_RESIZE:
        Mode.mode = hv;
-       x = Mode.events.x - EoGetX(ewin);
-       y = Mode.events.y - EoGetY(ewin);
+       x = Mode.events.cx - EoGetX(ewin);
+       y = Mode.events.cy - EoGetY(ewin);
        w = EoGetW(ewin) >> 1;
        h = EoGetH(ewin) >> 1;
        ww = EoGetW(ewin) / 6;
@@ -376,7 +378,7 @@
 
      case MODE_RESIZE_H:
        Mode.mode = hv;
-       x = Mode.events.x - EoGetX(ewin);
+       x = Mode.events.cx - EoGetX(ewin);
        w = EoGetW(ewin) >> 1;
        if (x < w)
           Mode_mr.resize_detail = RD(1, 0);
@@ -387,7 +389,7 @@
 
      case MODE_RESIZE_V:
        Mode.mode = hv;
-       y = Mode.events.y - EoGetY(ewin);
+       y = Mode.events.cy - EoGetY(ewin);
        h = EoGetH(ewin) >> 1;
        if (y < h)
           Mode_mr.resize_detail = RD(0, 1);
@@ -397,8 +399,8 @@
        break;
      }
 
-   Mode_mr.start_x = Mode.events.x;
-   Mode_mr.start_y = Mode.events.y;
+   Mode_mr.start_x = Mode.events.cx;
+   Mode_mr.start_y = Mode.events.cy;
    Mode_mr.win_x = EoGetX(ewin);
    Mode_mr.win_y = EoGetY(ewin);
    Mode_mr.win_w = ewin->client.w;
@@ -475,7 +477,7 @@
    if (!ewin)
       return;
 
-   EdgeCheckMotion(Mode.events.x, Mode.events.y);
+   EdgeCheckMotion(Mode.events.mx, Mode.events.my);
 
    gwins = ListWinGroupMembersForEwin(ewin, GROUP_ACTION_MOVE,
                                      Mode_mr.nogroup || Mode.move.swap, &num);
@@ -502,8 +504,8 @@
        Mode.mode = MODE_MOVE;
      }
 
-   dx = Mode.events.x - Mode.events.px;
-   dy = Mode.events.y - Mode.events.py;
+   dx = Mode.events.mx - Mode.events.px;
+   dy = Mode.events.my - Mode.events.py;
 
    jumpx = 0;
    jumpy = 0;
@@ -649,18 +651,17 @@
                  /* check for sufficient overlap and avoid flickering */
                  if (((ewin1->shape_x >= ewin2->shape_x &&
                        ewin1->shape_x <= ewin2->shape_x +
-                       EoGetW(ewin2) / 2 && Mode.events.x <= Mode.events.px) ||
+                       EoGetW(ewin2) / 2 && Mode.events.mx <=
+                       Mode.events.px) ||
                       (ewin1->shape_x <= ewin2->shape_x &&
                        ewin1->shape_x + EoGetW(ewin1) / 2 >=
-                       ewin2->shape_x &&
-                       Mode.events.x >= Mode.events.px)) &&
-                     ((ewin1->shape_y >= ewin2->shape_y
-                       && ewin1->shape_y <=
-                       ewin2->shape_y + EoGetH(ewin2) / 2
-                       && Mode.events.y <= Mode.events.py)
-                      || (EoGetY(ewin1) <= EoGetY(ewin2)
-                          && ewin1->shape_y + EoGetH(ewin1) / 2 >=
-                          ewin2->shape_y && Mode.events.y >= Mode.events.py)))
+                       ewin2->shape_x && Mode.events.mx >= Mode.events.px)) &&
+                     ((ewin1->shape_y >= ewin2->shape_y &&
+                       ewin1->shape_y <= ewin2->shape_y + EoGetH(ewin2) / 2 &&
+                       Mode.events.my <= Mode.events.py) ||
+                      (EoGetY(ewin1) <= EoGetY(ewin2) &&
+                       ewin1->shape_y + EoGetH(ewin1) / 2 >=
+                       ewin2->shape_y && Mode.events.my >= Mode.events.py)))
                    {
                       int                 tmp_swapcoord_x;
                       int                 tmp_swapcoord_y;
@@ -701,12 +702,12 @@
      default:
        break;
      case 1:                   /* Left */
-       w = Mode_mr.win_w - (Mode.events.x - Mode_mr.start_x);
+       w = Mode_mr.win_w - (Mode.events.mx - Mode_mr.start_x);
        ICCCM_SizeMatch(ewin, w, h, &w, &h);
        x = Mode_mr.win_x + (Mode_mr.win_w - w);
        break;
      case 2:                   /* Right */
-       w = Mode_mr.win_w + (Mode.events.x - Mode_mr.start_x);
+       w = Mode_mr.win_w + (Mode.events.mx - Mode_mr.start_x);
        ICCCM_SizeMatch(ewin, w, h, &w, &h);
        break;
      }
@@ -716,12 +717,12 @@
      default:
        break;
      case 1:                   /* Top */
-       h = Mode_mr.win_h - (Mode.events.y - Mode_mr.start_y);
+       h = Mode_mr.win_h - (Mode.events.my - Mode_mr.start_y);
        ICCCM_SizeMatch(ewin, w, h, &w, &h);
        y = Mode_mr.win_y + (Mode_mr.win_h - h);
        break;
      case 2:                   /* Bottom */
-       h = Mode_mr.win_h + (Mode.events.y - Mode_mr.start_y);
+       h = Mode_mr.win_h + (Mode.events.my - Mode_mr.start_y);
        ICCCM_SizeMatch(ewin, w, h, &w, &h);
        break;
      }
===================================================================
RCS file: /cvs/e/e16/e/src/pager.c,v
retrieving revision 1.250
retrieving revision 1.251
diff -u -3 -r1.250 -r1.251
--- pager.c     28 Nov 2007 19:23:06 -0000      1.250
+++ pager.c     21 Dec 2007 22:04:55 -0000      1.251
@@ -1094,8 +1094,8 @@
    if (tt)
      {
        if (ewin)
-          TooltipShow(tt, EwinGetIconName(ewin), NULL, Mode.events.x,
-                      Mode.events.y);
+          TooltipShow(tt, EwinGetIconName(ewin), NULL, Mode.events.cx,
+                      Mode.events.cy);
        else
           TooltipHide(tt);
      }
@@ -1377,8 +1377,8 @@
    Hiwin              *phi = hiwin;
 
    /* Delta in pager coords */
-   dx = Mode.events.x - Mode.events.px;
-   dy = Mode.events.y - Mode.events.py;
+   dx = Mode.events.mx - Mode.events.px;
+   dy = Mode.events.my - Mode.events.py;
 
    if (dx == 0 && dy == 0)
       return;
@@ -1485,8 +1485,8 @@
    if (!ewin)
       goto done;
 
-   in_vroot = (Mode.events.x >= 0 && Mode.events.x < VRoot.w &&
-              Mode.events.y >= 0 && Mode.events.y < VRoot.h);
+   in_vroot = (Mode.events.cx >= 0 && Mode.events.cx < VRoot.w &&
+              Mode.events.cy >= 0 && Mode.events.cy < VRoot.h);
 
    if (button == Conf_pagers.win_button)
      {
@@ -1528,8 +1528,8 @@
          {
             /* Pointer is not in pager or iconbox */
             /* Move window(s) to pointer location */
-            x = Mode.events.x - EoGetW(ewin) / 2;
-            y = Mode.events.y - EoGetH(ewin) / 2;
+            x = Mode.events.cx - EoGetW(ewin) / 2;
+            y = Mode.events.cy - EoGetH(ewin) / 2;
             EwinGroupMove(ewin, DesksGetCurrent(), x, y);
          }
      }



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
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