Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h backgrounds.c desktops.c ecompmgr.c hints.c main.c 
        mod-misc.c 


Log Message:
Preparations for composite manager changes.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.399
retrieving revision 1.400
diff -u -3 -r1.399 -r1.400
--- E.h 28 Mar 2005 18:20:27 -0000      1.399
+++ E.h 30 Mar 2005 22:50:50 -0000      1.400
@@ -549,6 +549,22 @@
 #define EoGetShadow(eo)         0
 #endif
 
+typedef struct
+{
+   EObj                o;
+   int                 num;
+   char                viewable;
+   char                dirty_stack;
+   Background         *bg;
+   Button             *tag;
+   int                 current_area_x;
+   int                 current_area_y;
+   long                event_mask;
+#if USE_COMPOSITE
+   void               *cmhook;
+#endif
+} Desk;
+
 typedef struct _constraints
 {
    int                 min, max;
@@ -1357,6 +1373,7 @@
 void                ECsrApply(int which, Window win);
 
 /* desktops.c */
+Desk               *DeskGet(int desk);
 Window              DeskGetWin(int desk);
 int                 DeskGetX(int desk);
 int                 DeskGetY(int desk);
@@ -1377,6 +1394,7 @@
                                  int speed);
 void                DeskRefresh(int num);
 void                DesksRefresh(void);
+void                DeskAssignBg(int desk, Background * bg);
 void                DeskSetBg(int desk, Background * bg, int refresh);
 int                 DesktopAt(int x, int y);
 void                DeskGoto(int num);
@@ -1824,8 +1842,8 @@
 
 void                EHintsSetInfo(const EWin * ewin);
 int                 EHintsGetInfo(EWin * ewin);
-void                EHintsSetMainInfo(void);
-void                EHintsGetMainInfo(void);
+void                EHintsSetDeskInfo(void);
+void                EHintsGetDeskInfo(void);
 void                EHintsSetInfoOnAll(void);
 
 /* icccm.c */
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/backgrounds.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- backgrounds.c       20 Mar 2005 23:28:59 -0000      1.22
+++ backgrounds.c       30 Mar 2005 22:51:01 -0000      1.23
@@ -402,37 +402,19 @@
 }
 
 static void
-BgFindImageSize(BgPart * bgp, int rw, int rh, int *pw, int *ph, int setbg)
+BgFindImageSize(BgPart * bgp, int rw, int rh, int *pw, int *ph)
 {
    int                 w, h;
 
    if (bgp->xperc > 0)
-     {
-       w = (rw * bgp->xperc) >> 10;
-     }
+      w = (rw * bgp->xperc) >> 10;
    else
-     {
-       if (!setbg)
-          w = (imlib_image_get_width() * rw) / VRoot.w;
-       else
-          w = imlib_image_get_width();
-     }
+      w = (imlib_image_get_width() * rw) / VRoot.w;
 
    if (bgp->yperc > 0)
-     {
-       h = (rh * bgp->yperc) >> 10;
-     }
+      h = (rh * bgp->yperc) >> 10;
    else
-     {
-       if (!setbg)
-         {
-            h = (imlib_image_get_height() * rh) / VRoot.h;
-         }
-       else
-         {
-            h = imlib_image_get_height();
-         }
-     }
+      h = (imlib_image_get_height() * rh) / VRoot.h;
 
    if (w <= 0)
       w = 1;
@@ -559,7 +541,7 @@
          {
             imlib_context_set_image(bg->bg.im);
 
-            BgFindImageSize(&(bg->bg), rw, rh, &w, &h, setbg);
+            BgFindImageSize(&(bg->bg), rw, rh, &w, &h);
             x = ((rw - w) * bg->bg.xjust) >> 10;
             y = ((rh - h) * bg->bg.yjust) >> 10;
 
@@ -607,7 +589,7 @@
 
             imlib_context_set_image(bg->top.im);
 
-            BgFindImageSize(&(bg->top), rw, rh, &ww, &hh, setbg);
+            BgFindImageSize(&(bg->top), rw, rh, &ww, &hh);
             x = ((rw - ww) * bg->top.xjust) >> 10;
             y = ((rh - hh) * bg->top.yjust) >> 10;
 
@@ -1023,7 +1005,7 @@
                               bg = BackgroundCreate(name, &xclr, bg1, i1, i2,
                                                     i3, i4, i5, i6, bg2, j1,
                                                     j2, j3, j4, j5);
-                           DeskSetBg(atoi(s2), bg, 0);
+                           DeskAssignBg(atoi(s2), bg);
                         }
                    }
               }
@@ -1035,7 +1017,7 @@
                           (Conf.backgrounds.user))
                         {
                            if (bg)
-                              DeskSetBg(atoi(s2), bg, 0);
+                              DeskAssignBg(atoi(s2), bg);
                         }
                    }
               }
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v
retrieving revision 1.134
retrieving revision 1.135
diff -u -3 -r1.134 -r1.135
--- desktops.c  25 Mar 2005 18:11:52 -0000      1.134
+++ desktops.c  30 Mar 2005 22:51:01 -0000      1.135
@@ -29,19 +29,6 @@
    EnterWindowMask | LeaveWindowMask | PointerMotionMask | ButtonMotionMask | \
    SubstructureNotifyMask | SubstructureRedirectMask | PropertyChangeMask)
 
-typedef struct
-{
-   EObj                o;
-   int                 num;
-   char                viewable;
-   char                dirty_stack;
-   Background         *bg;
-   Button             *tag;
-   int                 current_area_x;
-   int                 current_area_y;
-   long                event_mask;
-} Desk;
-
 #define ENLIGHTENMENT_CONF_NUM_DESKTOPS 32
 
 typedef struct _desktops
@@ -50,6 +37,7 @@
    int                 previous;
    Desk               *desk[ENLIGHTENMENT_CONF_NUM_DESKTOPS];
    int                 order[ENLIGHTENMENT_CONF_NUM_DESKTOPS];
+   Background         *bg[ENLIGHTENMENT_CONF_NUM_DESKTOPS];
 }
 Desktops;
 
@@ -375,8 +363,37 @@
    ESelectInput(EoGetWin(d), event_mask);
 }
 
+static void
+DeskConfigure(Desk * d)
+{
+   Background        **lst, *bg;
+   int                 num;
+   unsigned int        rnd;
+
+   DeskControlsCreate(d);
+   DeskControlsShow(d);
+
+   bg = desks.bg[d->num];
+   if (bg)
+      bg = FindItem((char *)bg, 0, LIST_FINDBY_POINTER, LIST_TYPE_BACKGROUND);
+   if (!bg)
+     {
+       lst = (Background **) ListItemType(&num, LIST_TYPE_BACKGROUND);
+       if (lst)
+         {
+            rnd = rand();
+            rnd %= num;
+            bg = lst[rnd];
+            Efree(lst);
+         }
+     }
+   DeskSetBg(d->num, bg, 0);
+
+   ModulesSignal(ESIGNAL_DESK_ADDED, (void *)(d->num));
+}
+
 static Desk        *
-DeskCreate(int desk, int add_controls)
+DeskCreate(int desk, int configure)
 {
    Desk               *d;
    Window              win;
@@ -410,50 +427,34 @@
      }
    EventCallbackRegister(win, 0, DesktopHandleEvents, d);
 
-   if (add_controls)
-     {
-       DeskControlsCreate(d);
-       DeskControlsShow(d);
-     }
-
-   {
-      Background        **lst;
-      int                 num;
-      unsigned int        rnd;
-
-      lst = (Background **) ListItemType(&num, LIST_TYPE_BACKGROUND);
-      if (lst)
-       {
-          rnd = rand();
-          rnd %= num;
-          DeskSetBg(desk, lst[rnd], 0);
-          Efree(lst);
-       }
-   }
-
    HintsSetRootHints(EoGetWin(d));
 
    /* Set the _XROOT... atoms so apps will find them even before the bg is set 
*/
    HintsSetRootInfo(EoGetWin(d), None, 0);
 
+   if (configure)
+      DeskConfigure(d);
+
    return d;
 }
 
 static void
-DeskDestroy(int desk)
+DeskDestroy(Desk * d)
 {
-   Desk               *d;
    Button            **blst;
    int                 num, i;
 
-   d = _DeskGet(desk);
+   if (d->num <= 0)
+      return;
+
+   ModulesSignal(ESIGNAL_DESK_REMOVED, (void *)(d->num));
 
    EventCallbackUnregister(EoGetWin(d), 0, DesktopHandleEvents, d);
 
    blst = (Button **) ListItemTypeID(&num, LIST_TYPE_BUTTON, 1);
    for (i = 0; i < num; i++)
      {
-       if (ButtonGetDesk(blst[i]) == desk)
+       if (ButtonGetDesk(blst[i]) == d->num)
           ButtonDestroy(blst[i]);
      }
    if (blst)
@@ -462,7 +463,7 @@
    blst = (Button **) ListItemTypeID(&num, LIST_TYPE_BUTTON, 2);
    for (i = 0; i < num; i++)
      {
-       if (ButtonGetDesk(blst[i]) == desk)
+       if (ButtonGetDesk(blst[i]) == d->num)
           ButtonDestroy(blst[i]);
      }
    if (blst)
@@ -471,13 +472,12 @@
    if (d->bg)
       BackgroundDecRefcount(d->bg);
 
-   if (desk > 0)
-      EobjListStackDel(&d->o);
+   EobjListStackDel(&d->o);
 
    EDestroyWindow(EoGetWin(d));
 
+   desks.desk[d->num] = NULL;
    Efree(d);
-   desks.desk[desk] = NULL;
 }
 
 static void
@@ -500,6 +500,15 @@
    DeskControlsShow(d);
 }
 
+Desk               *
+DeskGet(int desk)
+{
+   if (desk < 0 || desk >= Conf.desks.num)
+      return NULL;
+
+   return _DeskGet(desk);
+}
+
 Window
 DeskGetWin(int desk)
 {
@@ -600,19 +609,6 @@
    desks.current = desk;
 }
 
-static void
-DesksInit(void)
-{
-   int                 i;
-
-   desks.previous = -1;
-
-   for (i = 0; i < Conf.desks.num; i++)
-      DeskCreate(i, 0);
-
-   HintsSetDesktopConfig();
-}
-
 void
 DesksResize(int w, int h)
 {
@@ -636,7 +632,7 @@
 static void
 ChangeNumberOfDesktops(int quantity)
 {
-   int                 pnum, i, num;
+   int                 i, num;
    EWin               *const *lst;
 
    if (quantity >= ENLIGHTENMENT_CONF_NUM_DESKTOPS)
@@ -645,36 +641,33 @@
    if (quantity <= 0 || quantity == Conf.desks.num)
       return;
 
-   pnum = Conf.desks.num;
-
    for (i = quantity; i < Conf.desks.num; i++)
       DeskLower(i);
 
-   Conf.desks.num = quantity;
-
-   if (Conf.desks.num > pnum)
+   if (quantity > Conf.desks.num)
      {
-       for (i = pnum; i < Conf.desks.num; i++)
+       while (Conf.desks.num < quantity)
          {
-            DeskCreate(i, 1);
-            ModulesSignal(ESIGNAL_DESK_ADDED, (void *)i);
+            Conf.desks.num++;
+            DeskCreate(Conf.desks.num - 1, 1);
          }
      }
-   else if (Conf.desks.num < pnum)
+   else if (quantity < Conf.desks.num)
      {
        lst = EwinListGetAll(&num);
        for (i = 0; i < num; i++)
          {
-            if (EoGetDesk(lst[i]) >= Conf.desks.num)
-               MoveEwinToDesktop(lst[i], Conf.desks.num - 1);
+            if (EoGetDesk(lst[i]) >= quantity)
+               MoveEwinToDesktop(lst[i], quantity - 1);
          }
 
-       for (i = Conf.desks.num; i < pnum; i++)
+       while (Conf.desks.num > quantity)
          {
-            DeskDestroy(i);
-            ModulesSignal(ESIGNAL_DESK_REMOVED, (void *)i);
+            DeskDestroy(_DeskGet(Conf.desks.num - 1));
+            Conf.desks.num--;
          }
      }
+
    if (DesksGetCurrent() >= Conf.desks.num)
       DeskGoto(Conf.desks.num - 1);
 
@@ -893,6 +886,15 @@
 }
 
 void
+DeskAssignBg(int desk, Background * bg)
+{
+   if (desk < 0 || desk >= ENLIGHTENMENT_CONF_NUM_DESKTOPS)
+      return;
+
+   desks.bg[desk] = bg;
+}
+
+void
 DeskSetBg(int desk, Background * bg, int refresh)
 {
    Desk               *d;
@@ -1624,6 +1626,37 @@
 }
 #endif
 
+static void
+DesksInit(void)
+{
+   int                 i;
+
+   memset(&desks, 0, sizeof(desks));
+
+   desks.previous = -1;
+
+   for (i = 0; i < Conf.desks.num; i++)
+      DeskCreate(i, 0);
+
+   SetAreaSize(Conf.desks.areas_nx, Conf.desks.areas_ny);
+
+   /* Retreive stuff from last time we were loaded if we're restarting */
+   EHintsGetDeskInfo();
+
+   HintsSetDesktopConfig();
+}
+
+static void
+DesksConfigure(void)
+{
+   int                 i;
+
+   for (i = 0; i < Conf.desks.num; i++)
+      DeskConfigure(_DeskGet(i));
+
+   UncoverDesktop(0);
+}
+
 /*
  * Desktops Module
  */
@@ -1638,13 +1671,7 @@
        break;
 
      case ESIGNAL_CONFIGURE:
-       SetAreaSize(Conf.desks.areas_nx, Conf.desks.areas_ny);
-
-       UncoverDesktop(0);
-
-       /* toss down the dragbar and related */
-       DesksControlsCreate();
-       DesksControlsShow();
+       DesksConfigure();
        break;
 
      case ESIGNAL_START:
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ecompmgr.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- ecompmgr.c  30 Mar 2005 18:28:32 -0000      1.15
+++ ecompmgr.c  30 Mar 2005 22:51:02 -0000      1.16
@@ -106,9 +106,7 @@
 #define INV_GEOM    (INV_POS | INV_SIZE)
 #define INV_ALL     (INV_POS | INV_SIZE | INV_OPACITY | INV_SHADOW)
 
-typedef struct _ecmwininfo ECmWinInfo; /* TBD */
-
-struct _ecmwininfo
+typedef struct
 {
    EObj               *next;   /* Paint order */
    EObj               *prev;   /* Paint order */
@@ -141,8 +139,16 @@
    unsigned int        opacity;
 
    unsigned long       damage_sequence;        /* sequence when damage was 
created */
-};
+} ECmWinInfo;
+
+typedef struct
+{
+   Picture             bgpict; /* The background picture */
+} ECmDeskInfo;
 
+/*
+ * Configuration
+ */
 #if ENABLE_SHADOWS
 #define ECM_SHADOWS_OFF      0
 #define ECM_SHADOWS_SHARP    1 /* use window alpha for shadow; sharp, but 
precise */
@@ -159,6 +165,9 @@
    int                 shadow_radius;
 } Conf_compmgr;
 
+/*
+ * State
+ */
 #define ECM_MODE_OFF    0
 #define ECM_MODE_ROOT   1
 #define ECM_MODE_WINDOW 2
@@ -322,29 +331,23 @@
 /*
  * Desktops (move to desktops.c?)
  */
-typedef struct
-{
-   Picture             bgpict; /* The background picture */
-} EcmDeskInfo;
-
-static EcmDeskInfo  desks[32];
 
 static              Picture
-DeskBackgroundPictureGet(int desk)
+DeskBackgroundPictureGet(Desk * d)
 {
+   ECmDeskInfo        *cmdi = d->cmhook;
    Picture             pict;
    Pixmap              pmap;
    Bool                fill;
    XRenderPictFormat  *pictfmt;
    XRenderPictureAttributes pa;
 
-   pict = desks[desk].bgpict;
-   if (pict != None)
-      return pict;
+   if (cmdi->bgpict != None)
+      return cmdi->bgpict;
 
    fill = False;
-   pmap = BackgroundGetPixmap(DeskGetBackground(desk));
-   D1printf("DeskBackgroundPictureGet: Desk %d: using pixmap %#lx\n", desk,
+   pmap = BackgroundGetPixmap(DeskGetBackground(d->num));
+   D1printf("DeskBackgroundPictureGet: Desk %d: using pixmap %#lx\n", d->num,
            pmap);
    if (!pmap)
      {
@@ -369,24 +372,25 @@
    /* New background, all must be repainted */
    ECompMgrDamageAll();
 
-   desks[desk].bgpict = pict;
+   cmdi->bgpict = pict;
 
    return pict;
 }
 
 static void
-DeskBackgroundPictureFree(int desk)
+DeskBackgroundPictureFree(Desk * d)
 {
+   ECmDeskInfo        *cmdi = d->cmhook;
    Picture             pict;
 
-   pict = desks[desk].bgpict;
+   pict = cmdi->bgpict;
    if (pict == None)
       return;
 
-   XClearArea(disp, DeskGetWin(desk), 0, 0, 0, 0, True);
+   XClearArea(disp, EoGetWin(d), 0, 0, 0, 0, True);
    XRenderFreePicture(disp, pict);
 
-   desks[desk].bgpict = None;
+   cmdi->bgpict = None;
 }
 
 /*
@@ -1655,7 +1659,7 @@
    pbuf = rootBuffer;
 
    /* Draw desktop background picture */
-   pict = DeskBackgroundPictureGet(0);
+   pict = DeskBackgroundPictureGet(DeskGet(0));
    D1printf("ECompMgrRepaint desk picture=%#lx\n", pict);
    XFixesSetPictureClipRegion(dpy, pbuf, 0, 0, region);
    XRenderComposite(dpy, PictOpSrc, pict, None, pbuf,
@@ -1751,11 +1755,47 @@
 }
 
 static void
+ECompMgrDeskAdd(int desk)
+{
+   Desk               *d = DeskGet(desk);
+
+   if (!d || d->cmhook)
+      return;
+
+   D1printf("ECompMgrDeskAdd: desk=%d\n", desk);
+
+   d->cmhook = Emalloc(sizeof(ECmDeskInfo));
+   if (!d->cmhook)
+      return;
+
+   ((ECmDeskInfo *) d->cmhook)->bgpict = None;
+}
+
+static void
+ECompMgrDeskDel(int desk)
+{
+   Desk               *d = DeskGet(desk);
+
+   if (!d || !d->cmhook)
+      return;
+
+   D1printf("ECompMgrDeskDel: desk=%d\n", desk);
+
+   DeskBackgroundPictureFree(d);
+   Efree(d->cmhook);
+}
+
+static void
 ECompMgrDeskChanged(int desk)
 {
+   Desk               *d = DeskGet(desk);
+
+   if (!d || !d->cmhook)
+      return;
+
    D1printf("ECompMgrDeskChanged: desk=%d\n", desk);
 
-   DeskBackgroundPictureFree(desk);
+   DeskBackgroundPictureFree(d);
 }
 
 #if ENABLE_SHADOWS
@@ -1864,7 +1904,7 @@
       XRenderFreePicture(disp, rootBuffer);
    rootBuffer = None;
 
-   DeskBackgroundPictureFree(0);
+   DeskBackgroundPictureFree(DeskGet(0));
 
    ECompMgrShadowsInit(ECM_SHADOWS_OFF, 0);
 
@@ -2113,6 +2153,13 @@
        ECompMgrStart();
        break;
 
+     case ESIGNAL_DESK_ADDED:
+       ECompMgrDeskAdd((int)(prm));
+       break;
+     case ESIGNAL_DESK_REMOVED:
+       ECompMgrDeskDel((int)(prm));
+       break;
+
      case ESIGNAL_BACKGROUND_CHANGE:
        ECompMgrDeskChanged((int)prm);
        break;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/hints.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -3 -r1.38 -r1.39
--- hints.c     24 Mar 2005 23:38:09 -0000      1.38
+++ hints.c     30 Mar 2005 22:51:02 -0000      1.39
@@ -393,7 +393,7 @@
 }
 
 void
-EHintsSetMainInfo(void)
+EHintsSetDeskInfo(void)
 {
    Atom                a;
    int                 i, ax, ay, n_desks;
@@ -425,7 +425,7 @@
 }
 
 void
-EHintsGetMainInfo(void)
+EHintsGetDeskInfo(void)
 {
    Atom                a;
    unsigned int       *c;
@@ -473,5 +473,5 @@
       if (!EwinIsInternal(lst[i]))
         EHintsSetInfo(lst[i]);
 
-   EHintsSetMainInfo();
+   EHintsSetDeskInfo();
 }
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/main.c,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -3 -r1.119 -r1.120
--- main.c      19 Mar 2005 16:40:06 -0000      1.119
+++ main.c      30 Mar 2005 22:51:02 -0000      1.120
@@ -237,9 +237,6 @@
 
    ModulesSignal(ESIGNAL_INIT, NULL);
 
-   /* retreive stuff from last time we were loaded if we're restarting */
-   EHintsGetMainInfo();
-
    /* Load the theme */
    ThemeConfigLoad();
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/mod-misc.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- mod-misc.c  28 Mar 2005 13:39:32 -0000      1.13
+++ mod-misc.c  30 Mar 2005 22:51:02 -0000      1.14
@@ -55,10 +55,10 @@
 extern EModule      ModWindowMatch;
 
 const EModule      *p_modules[] = {
-   &ModDesktops,
    &ModAclass,
    &ModBackgrounds,
    &ModButtons,
+   &ModDesktops,
 #if USE_COMPOSITE
    &ModCompMgr,
 #endif




-------------------------------------------------------
This SF.net email is sponsored by Demarc:
A global provider of Threat Management Solutions.
Download our HomeAdmin security software for free today!
http://www.demarc.com/info/Sentarus/hamr30
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to