Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h borders.c ewmh.c iconify.c 


Log Message:
Initial showing desktop support.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.327
retrieving revision 1.328
diff -u -3 -r1.327 -r1.328
--- E.h 11 Sep 2004 10:45:21 -0000      1.327
+++ E.h 19 Sep 2004 09:27:38 -0000      1.328
@@ -838,12 +838,6 @@
    char                floating;
    char                shapedone;
    char                fixedpos;
-#if 0                          /* ENABLE_GNOME - Not actually used */
-   int                 expanded_x;
-   int                 expanded_y;
-   int                 expanded_width;
-   int                 expanded_height;
-#endif
    char                ignorearrange;
    char                skiptask;
    char                skip_ext_pager;
@@ -873,6 +867,7 @@
    } strut;
    struct
    {
+      unsigned            donthide:1;  /* Don't hide on show desktop */
       unsigned            vroot:1;     /* Virtual root window */
       unsigned int        opacity;
    } props;
@@ -881,6 +876,7 @@
       unsigned            maximized_horz:1;
       unsigned            maximized_vert:1;
       unsigned            fullscreen:1;
+      unsigned            showingdesk:1;       /* Iconified by show desktop */
    } st;
    struct
    {
@@ -1718,6 +1714,8 @@
 int                 EwinIsOnScreen(EWin * ewin);
 int                 BorderWinpartIndex(EWin * ewin, Window win);
 
+void                EwinRememberPositionSet(EWin * ewin);
+void                EwinRememberPositionGet(EWin * ewin, int *px, int *py);
 void                EwinPropagateShapes(EWin * ewin);
 void                EwinChange(EWin * ewin, unsigned int flag);
 void                EwinChangesStart(EWin * ewin);
@@ -1725,6 +1723,7 @@
 
 void                EwinsEventsConfigure(int mode);
 void                EwinsSetFree(void);
+void                EwinsShowDesktop(int on);
 
 int                 BordersEventExpose(XEvent * ev);
 int                 BordersEventMouseDown(XEvent * ev);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/borders.c,v
retrieving revision 1.228
retrieving revision 1.229
diff -u -3 -r1.228 -r1.229
--- borders.c   11 Sep 2004 10:45:21 -0000      1.228
+++ borders.c   19 Sep 2004 09:27:38 -0000      1.229
@@ -365,7 +365,10 @@
 
    /* if is an afterstep/windowmaker dock app - dock it */
    if (Conf.dockapp_support && ewin->docked)
-      DockIt(ewin);
+     {
+       DockIt(ewin);
+       ewin->props.donthide = 1;
+     }
 
    /* if set for borderless then dont slide it in */
    if ((!ewin->client.mwm_decor_title) && (!ewin->client.mwm_decor_border))
@@ -3261,6 +3264,47 @@
    return -1;                  /* Not found */
 }
 
+/*
+ * Save current position in absolute viewport coordinates
+ */
+void
+EwinRememberPositionSet(EWin * ewin)
+{
+   int                 ax, ay;
+
+   ewin->req_x = ewin->x;
+   ewin->req_y = ewin->y;
+   if (!ewin->sticky)
+     {
+       ax = desks.desk[ewin->desktop].current_area_x;
+       ay = desks.desk[ewin->desktop].current_area_y;
+       ewin->req_x += ax * VRoot.w;
+       ewin->req_y += ay * VRoot.h;
+     }
+}
+
+/*
+ * Get saved position in relative viewport coordinates
+ */
+void
+EwinRememberPositionGet(EWin * ewin, int *px, int *py)
+{
+   int                 x, y, ax, ay;
+
+   x = ewin->req_x;
+   y = ewin->req_y;
+   if (!ewin->sticky)
+     {
+       ax = desks.desk[ewin->desktop].current_area_x;
+       ay = desks.desk[ewin->desktop].current_area_y;
+       x -= ax * VRoot.w;
+       y -= ay * VRoot.h;
+     }
+
+   *px = x;
+   *py = y;
+}
+
 void
 EwinPropagateShapes(EWin * ewin)
 {
@@ -3407,6 +3451,38 @@
      }
 }
 
+void
+EwinsShowDesktop(int on)
+{
+   EWin               *const *lst, *ewin;
+   int                 i, num;
+
+   lst = EwinListGetForDesktop(desks.current, &num);
+
+   for (i = 0; i < num; i++)
+     {
+       ewin = lst[i];
+
+       if (on)
+         {
+            if (ewin->internal || ewin->iconified || ewin->props.donthide ||
+                ewin->client.transient)
+               continue;
+
+            ewin->st.showingdesk = 1;
+            IconifyEwin(ewin);
+         }
+       else
+         {
+            if (!ewin->st.showingdesk)
+               continue;
+
+            DeIconifyEwin(ewin);
+         }
+     }
+   EWMH_SetShowingDesktop(on);
+}
+
 /*
  * Border event handlers
  */
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ewmh.c,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -3 -r1.58 -r1.59
--- ewmh.c      20 Aug 2004 21:13:56 -0000      1.58
+++ ewmh.c      19 Sep 2004 09:27:38 -0000      1.59
@@ -694,6 +694,7 @@
        ewin->skipfocus = 1;
        ewin->fixedpos = 1;
        EwinSetBorderByName(ewin, "BORDERLESS", 0);
+       ewin->props.donthide = 1;
      }
    else if (atom == _NET_WM_WINDOW_TYPE_DOCK)
      {
@@ -702,6 +703,7 @@
        ewin->skipfocus = 1;
        ewin->sticky = 1;
        ewin->never_use_area = 1;
+       ewin->props.donthide = 1;
      }
    else if (atom == _NET_WM_WINDOW_TYPE_UTILITY)
      {
@@ -710,6 +712,7 @@
        ewin->skipwinlist = 1;
        ewin->skipfocus = 1;
        ewin->never_use_area = 1;
+       ewin->props.donthide = 1;
      }
 #if 0                          /* Not used by E (yet?) */
    else if (atom == _NET_WM_WINDOW_TYPE_TOOLBAR)
@@ -864,9 +867,7 @@
      }
    else if (event->message_type == _NET_SHOWING_DESKTOP)
      {
-       Eprintf("EWMH_ProcessClientMessage: _NET_SHOWING_DESKTOP: %ld\n",
-               event->data.l[0]);
-       EWMH_SetShowingDesktop(event->data.l[0]);
+       EwinsShowDesktop(event->data.l[0]);
        goto done;
      }
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/iconify.c,v
retrieving revision 1.118
retrieving revision 1.119
diff -u -3 -r1.118 -r1.119
--- iconify.c   31 Aug 2004 17:24:40 -0000      1.118
+++ iconify.c   19 Sep 2004 09:27:38 -0000      1.119
@@ -227,16 +227,16 @@
 
    if (ib)
      {
-       if (ib->animate)
+       if (ib->animate && !ewin->st.showingdesk)
           IB_Animate(1, ewin, ib->ewin);
        UpdateAppIcon(ewin, ib->icon_mode);
        IconboxAddEwin(ib, ewin);
      }
 
    HideEwin(ewin);
-   /* Save position at which the window was iconified in req_x/y */
-   ewin->req_x = ewin->x;
-   ewin->req_y = ewin->y;
+
+   /* Save position at which the window was iconified */
+   EwinRememberPositionSet(ewin);
 
    if (was_shaded != ewin->shaded)
       EwinInstantShade(ewin, 0);
@@ -253,8 +253,7 @@
 
        HideEwin(e);
        e->iconified = 4;
-       e->req_x = e->x;
-       e->req_y = e->y;
+       EwinRememberPositionSet(e);
      }
    if (lst)
       Efree(lst);
@@ -282,7 +281,7 @@
    EWin              **lst, *e;
    int                 i, num;
    Iconbox            *ib;
-   int                 x, y, dx, dy;
+   int                 x, y, ox, oy, dx, dy;
 
    EDBUG(6, "DeIconifyEwin");
 
@@ -295,27 +294,31 @@
 
    RemoveMiniIcon(ewin);
 
-   x = ewin->req_x;
-   y = ewin->req_y;
-
-   /* If we iconified an offscreen window, get it back on screen */
-   if (x + ewin->w <= 4 || x > VRoot.w - 4 ||
-       y + ewin->h <= 4 || y > VRoot.h - 4)
-     {
-       dx = ewin->w / 2;
-       dy = ewin->h / 2;
-       x = (ewin->x + dx) % VRoot.w;
-       if (x < 0)
-          x += VRoot.w;
-       x -= dx;
-       y = (ewin->y + dy) % VRoot.h;
-       if (y < 0)
-          y += VRoot.h;
-       y -= dy;
+   EwinRememberPositionGet(ewin, &ox, &oy);
+   x = ox;
+   y = oy;
+
+   if (!ewin->st.showingdesk)
+     {
+       /* If we iconified an offscreen window, get it back on screen */
+       if (x + ewin->w <= 4 || x > VRoot.w - 4 ||
+           y + ewin->h <= 4 || y > VRoot.h - 4)
+         {
+            dx = ewin->w / 2;
+            dy = ewin->h / 2;
+            x = (ewin->x + dx) % VRoot.w;
+            if (x < 0)
+               x += VRoot.w;
+            x -= dx;
+            y = (ewin->y + dy) % VRoot.h;
+            if (y < 0)
+               y += VRoot.h;
+            y -= dy;
+         }
      }
 
-   dx = x - ewin->req_x;
-   dy = y - ewin->req_y;
+   dx = x - ox;
+   dy = y - oy;
 
    if (ewin->sticky)
       MoveEwin(ewin, x, y);
@@ -326,9 +329,11 @@
    ewin->iconified = 0;
 
    ib = SelectIconboxForEwin(ewin);
-   if (ib && ib->animate)
+   if (ib && ib->animate && !ewin->st.showingdesk)
       IB_Animate(0, ewin, ib->ewin);
 
+   ewin->st.showingdesk = 0;
+
    RaiseEwin(ewin);
    ShowEwin(ewin);
    ICCCM_DeIconify(ewin);
@@ -340,10 +345,11 @@
        if (e->iconified != 4)
           continue;
 
+       EwinRememberPositionGet(e, &ox, &oy);
        if (e->sticky)
-          MoveEwin(e, e->req_x + dx, e->req_y + dy);
+          MoveEwin(e, ox + dx, oy + dy);
        else
-          MoveEwinToDesktopAt(e, desks.current, e->req_x + dx, e->req_y + dy);
+          MoveEwinToDesktopAt(e, desks.current, ox + dx, oy + dy);
 
        RaiseEwin(e);
        ShowEwin(e);




-------------------------------------------------------
This SF.Net email is sponsored by: YOU BE THE JUDGE. Be one of 170
Project Admins to receive an Apple iPod Mini FREE for your judgement on
who ports your project to Linux PPC the best. Sponsored by IBM.
Deadline: Sept. 24. Go here: http://sf.net/ppc_contest.php
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to