Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h borders.c evhandlers.c icccm.c session.c snaps.c 


Log Message:
Get the window placement right, I hope.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.289
retrieving revision 1.290
diff -u -3 -r1.289 -r1.290
--- E.h 27 Jun 2004 10:42:52 -0000      1.289
+++ E.h 27 Jun 2004 15:59:32 -0000      1.290
@@ -1737,6 +1737,7 @@
 #define EWIN_CHANGE_DESKTOP     (1<<3)
 #define EWIN_CHANGE_LAYER       (1<<4)
 
+void                EwinGetPosition(EWin * ewin, int *px, int *py);
 void                EwinRefresh(EWin * ewin);
 void                EwinUpdateAfterMoveResize(EWin * ewin, int resize);
 void                EwinFixPosition(EWin * ewin);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/borders.c,v
retrieving revision 1.197
retrieving revision 1.198
diff -u -3 -r1.197 -r1.198
--- borders.c   26 Jun 2004 18:24:39 -0000      1.197
+++ borders.c   27 Jun 2004 15:59:32 -0000      1.198
@@ -485,8 +485,8 @@
      }
 
    /* if it hasn't been placed yet.... find a spot for it */
-   x = 0;
-   y = 0;
+   x = ewin->x;
+   y = ewin->y;
    if ((!ewin->client.already_placed) && (!manplace))
      {
 
@@ -536,53 +536,6 @@
             ArrangeEwinXY(ewin, &x, &y);
          }                     /* (Conf.manual_placement_mouse_pointer) */
      }                         /* ((!ewin->client.already_placed) && (!manplace)) */
-   else
-     {
-       x = ewin->x;
-       y = ewin->y;
-       switch (ewin->client.grav)
-         {
-         case NorthWestGravity:
-            x += (ewin->client.bw * 2);
-            y += (ewin->client.bw * 2);
-            break;
-         case NorthGravity:
-            y += (ewin->client.bw * 2);
-            break;
-         case NorthEastGravity:
-            y += (ewin->client.bw * 2);
-            if (ewin->border)
-               x -= ewin->border->border.left + (ewin->client.bw * 2);
-            break;
-         case EastGravity:
-            if (ewin->border)
-               x -= ewin->border->border.left + (ewin->client.bw * 2);
-            break;
-         case SouthEastGravity:
-            if (ewin->border)
-              {
-                 x -= ewin->border->border.left + (ewin->client.bw * 2);
-                 y -= ewin->border->border.top + (ewin->client.bw * 2);
-              }
-            break;
-         case SouthGravity:
-            if (ewin->border)
-               y -= ewin->border->border.top + (ewin->client.bw * 2);
-            break;
-         case SouthWestGravity:
-            x += (ewin->client.bw * 2);
-            if (ewin->border)
-               y -= ewin->border->border.top + (ewin->client.bw * 2);
-            break;
-         case WestGravity:
-            x += (ewin->client.bw * 2);
-            break;
-         case CenterGravity:
-            break;
-         default:
-            break;
-         }
-     }
 
    /* if the window asked to be iconified at the start */
    if (ewin->client.start_iconified)
@@ -1149,11 +1102,82 @@
    EDBUG_RETURN_;
 }
 
+/*
+ * Derive frame window position from client window and border properties
+ */
+void
+EwinGetPosition(EWin * ewin, int *px, int *py)
+{
+   int                 x, y, bw, frame_lr, frame_tb;
+
+   x = ewin->client.x;
+   y = ewin->client.y;
+   bw = ewin->client.bw;
+   frame_lr = ewin->border->border.left + ewin->border->border.right;
+   frame_tb = ewin->border->border.top + ewin->border->border.bottom;
+
+   switch (ewin->client.grav)
+     {
+     case NorthWestGravity:
+     case SouthWestGravity:
+     case WestGravity:
+       x -= bw;
+       break;
+     case NorthEastGravity:
+     case EastGravity:
+     case SouthEastGravity:
+       x -= frame_lr / 2;
+       break;
+     case NorthGravity:
+     case CenterGravity:
+     case SouthGravity:
+       x -= frame_lr - bw;
+       break;
+     default:
+       break;
+     }
+
+   switch (ewin->client.grav)
+     {
+     case NorthWestGravity:
+     case NorthGravity:
+     case NorthEastGravity:
+       y -= bw;
+       break;
+     case WestGravity:
+     case CenterGravity:
+     case EastGravity:
+       y -= frame_tb / 2;
+       break;
+     case SouthWestGravity:
+     case SouthGravity:
+     case SouthEastGravity:
+       y -= frame_tb - bw;
+       break;
+     default:
+       break;
+     }
+
+   *px = x;
+   *py = y;
+}
+
+/*
+ * Derive frame window geometry from client window properties
+ */
 static void
 EwinGetGeometry(EWin * ewin)
 {
-   ewin->shape_x = ewin->x = ewin->client.x - ewin->border->border.left;
-   ewin->shape_y = ewin->y = ewin->client.y - ewin->border->border.top;
+   int                 x, y;
+
+   EwinGetPosition(ewin, &x, &y);
+
+   ewin->client.x = x + ewin->border->border.left;
+   ewin->client.y = y + ewin->border->border.top;
+
+   ewin->shape_x = ewin->x = x;
+   ewin->shape_y = ewin->y = y;
+
    ewin->w = ewin->client.w +
       ewin->border->border.left + ewin->border->border.right;
    ewin->h = ewin->client.h +
@@ -3432,8 +3456,7 @@
 
        /* This makes E determine the client window stacking at exit */
        EReparentWindow(disp, ewin->client.win, VRoot.win,
-                       ewin->x + ewin->border->border.left,
-                       ewin->y + ewin->border->border.top);
+                       ewin->client.x, ewin->client.y);
      }
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/evhandlers.c,v
retrieving revision 1.166
retrieving revision 1.167
diff -u -3 -r1.166 -r1.167
--- evhandlers.c        19 May 2004 21:41:03 -0000      1.166
+++ evhandlers.c        27 Jun 2004 15:59:32 -0000      1.167
@@ -779,8 +779,8 @@
    ewin = FindItem(NULL, win, LIST_FINDBY_ID, LIST_TYPE_EWIN);
    if (ewin)
      {
-       x = ewin->x + ewin->border->border.left;
-       y = ewin->y + ewin->border->border.top;
+       x = ewin->x;
+       y = ewin->y;
        w = ewin->client.w;
        h = ewin->client.h;
        winrel = 0;
@@ -831,9 +831,16 @@
        if (h > ewin->client.height.max)
           ewin->client.height.max = h;
 
+       if (ev->xconfigurerequest.value_mask & (CWX | CWY))
+         {
+            /* Correct position taking gravity into account */
+            ewin->client.x = x;
+            ewin->client.y = y;
+            EwinGetPosition(ewin, &x, &y);
+         }
+
        Mode.move.check = 0;    /* Don't restrict client requests */
-       MoveResizeEwin(ewin, x - ewin->border->border.left,
-                      y - ewin->border->border.top, w, h);
+       MoveResizeEwin(ewin, x, y, w, h);
        Mode.move.check = 1;
        if (Mode.mode == MODE_MOVE_PENDING || Mode.mode == MODE_MOVE)
           ICCCM_Configure(ewin);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/icccm.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -3 -r1.69 -r1.70
--- icccm.c     18 Jun 2004 20:12:09 -0000      1.69
+++ icccm.c     27 Jun 2004 15:59:32 -0000      1.70
@@ -390,7 +390,10 @@
    EDBUG(6, "ICCCM_Adopt");
 
    if (!ewin->internal)
-      XSetWindowBorderWidth(disp, win, 0);
+     {
+       XSetWindowBorderWidth(disp, win, 0);
+       ewin->client.bw = 0;
+     }
    EReparentWindow(disp, win, ewin->win_container, 0, 0);
    c[0] = (ewin->client.start_iconified) ? IconicState : NormalState;
    XChangeProperty(disp, win, E_XA_WM_STATE, E_XA_WM_STATE, 32, PropModeReplace,
@@ -1067,8 +1070,8 @@
       aa = XInternAtom(disp, "ENL_INTERNAL_DATA_BORDER", False);
    c[0] = ewin->desktop;
    c[1] = ewin->sticky;
-   c[2] = ewin->client.x;
-   c[3] = ewin->client.y;
+   c[2] = ewin->x;
+   c[3] = ewin->y;
    c[4] = ewin->iconified;
    if (ewin->iconified)
       ICCCM_DeIconify(ewin);
@@ -1179,6 +1182,7 @@
        ewin->sticky = c[1];
        ewin->client.x = c[2];
        ewin->client.y = c[3];
+       ewin->client.grav = NorthWestGravity;
        ewin->iconified = c[4];
        ewin->shaded = c[5];
        if (ewin->sticky)
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/session.c,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -3 -r1.73 -r1.74
--- session.c   19 Jun 2004 21:31:40 -0000      1.73
+++ session.c   27 Jun 2004 15:59:32 -0000      1.74
@@ -236,7 +236,7 @@
                  y = desks.desk[ewin->desktop].current_area_y * VRoot.h;
               }
             fprintf(f, "[CLIENT] %i %i %i %i %i %i %i %i %i\n",
-                    ewin->client.x + x, ewin->client.y + y, ewin->client.w,
+                    ewin->x + x, ewin->y + y, ewin->client.w,
                     ewin->client.h, ewin->desktop, ewin->iconified,
                     ewin->shaded, ewin->sticky, ewin->layer);
             if (ewin->session_id)
@@ -412,6 +412,7 @@
                     (desks.desk[ewin->desktop].current_area_x * VRoot.w);
                  ewin->client.y = matches[i].y -
                     (desks.desk[ewin->desktop].current_area_y * VRoot.h);
+                 ewin->client.grav = NorthWestGravity;
                  ewin->client.w = matches[i].w;
                  ewin->client.h = matches[i].h;
                  EMoveResizeWindow(disp, ewin->client.win, ewin->client.x,
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/snaps.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -3 -r1.69 -r1.70
--- snaps.c     18 Jun 2004 20:12:10 -0000      1.69
+++ snaps.c     27 Jun 2004 15:59:32 -0000      1.70
@@ -629,8 +629,8 @@
    if (!sn)
       return;
    sn->use_xy = 1;
-   sn->x = ewin->client.x;
-   sn->y = ewin->client.y;
+   sn->x = ewin->x;
+   sn->y = ewin->y;
    sn->area_x = ewin->area_x;
    sn->area_y = ewin->area_y;
    if (!ewin->sticky)
@@ -1173,6 +1173,7 @@
        ewin->client.already_placed = 1;
        ewin->client.x = sn->x;
        ewin->client.y = sn->y;
+       ewin->client.grav = NorthWestGravity;
        ewin->area_x = sn->area_x;
        ewin->area_y = sn->area_y;
        if (!ewin->sticky)




-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to