Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h actions.c backgrounds.c comms.c config.c desktops.c 
        iclass.c init.c ipc.c main.c menus.c pager.c settings.c 
        startup.c 


Log Message:
Simplify background code, re-generate backgrounds when enabling transparency.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.246
retrieving revision 1.247
diff -u -3 -r1.246 -r1.247
--- E.h 10 Apr 2004 19:36:47 -0000      1.246
+++ E.h 12 Apr 2004 08:28:32 -0000      1.247
@@ -1038,6 +1038,7 @@
 };
 #endif /* DECLARE_STRUCT_BUTTON */
 
+#ifdef DECLARE_STRUCT_BACKGROUND
 typedef struct
 {
    char               *file;
@@ -1062,6 +1063,7 @@
    char                keepim;
    unsigned int        ref_count;
 };
+#endif /* DECLARE_STRUCT_BACKGROUND */
 
 typedef struct _desk
 {
@@ -1648,16 +1650,25 @@
 
 /* backgrounds.c */
 char               *BackgroundGetUniqueString(Background * bg);
-void                BackgroundImagesKeep(Background * bg, char onoff);
+void                BackgroundPixmapFree(Background * bg);
+void                BackgroundImagesFree(Background * bg, int free_pmap);
+void                BackgroundImagesKeep(Background * bg, int onoff);
 void                BackgroundImagesRemove(Background * bg);
-void                BackgroundDestroy(Background * bg);
+int                 BackgroundDestroy(Background * bg);
+void                BackgroundDelete(Background * bg);
 Background         *BackgroundCreate(const char *name, XColor * solid,
                                     const char *bg, char tile,
                                     char keep_aspect, int xjust, int yjust,
                                     int xperc, int yperc, const char *top,
                                     char tkeep_aspect, int txjust, int tyjust,
                                     int txperc, int typerc);
+void                BackgroundDestroyByName(const char *name);
 void                BackgroundApply(Background * bg, Window win, int setbg);
+void                BackgroundIncRefcount(Background * bg);
+void                BackgroundDecRefcount(Background * bg);
+void                BackgroundTouch(Background * bg);
+const char         *BackgroundGetName(const Background * bg);
+Pixmap              BackgroundGetPixmap(const Background * bg);
 void                BackgroundsAccounting(void);
 void                BackgroundsInit(void);
 
@@ -1839,9 +1850,10 @@
                                  int speed);
 void                RefreshCurrentDesktop(void);
 void                RefreshDesktop(int num);
+void                DesktopsRefresh(void);
 void                InitDesktopBgs(void);
 void                InitDesktopControls(void);
-void                SetDesktopBg(int desk, Background * bg);
+void                DesktopSetBg(int desk, Background * bg, int refresh);
 void                ConformEwinToDesktop(EWin * ewin);
 int                 DesktopAt(int x, int y);
 void                GotoDesktop(int num);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/actions.c,v
retrieving revision 1.154
retrieving revision 1.155
diff -u -3 -r1.154 -r1.155
--- actions.c   10 Apr 2004 19:36:48 -0000      1.154
+++ actions.c   12 Apr 2004 08:28:32 -0000      1.155
@@ -2616,7 +2616,7 @@
 {
    int                 desk;
    Background         *bg;
-   char                view, s[1024];
+   char                s[1024];
 
    EDBUG(6, "doBackgroundSet");
 
@@ -2626,29 +2626,13 @@
    desk = desks.current;
    if (sscanf((char *)params, "%1000s %i", s, &desk) < 2)
       desk = desks.current;
+
    bg = (Background *) FindItem(s, 0, LIST_FINDBY_NAME, LIST_TYPE_BACKGROUND);
    if (!bg)
       EDBUG_RETURN(0);
 
    if (desks.desk[desk].bg != bg)
-     {
-       char                pq;
-
-       if (desks.desk[desk].bg)
-          desks.desk[desk].bg->last_viewed = 0;
-       view = desks.desk[desk].viewable;
-       desks.desk[desk].viewable = 0;
-       BackgroundsAccounting();
-       desks.desk[desk].viewable = view;
-       BGSettingsGoTo(bg);
-       pq = Mode.queue_up;
-       Mode.queue_up = 0;
-       SetDesktopBg(desk, bg);
-       RefreshDesktop(desk);
-       RedrawPagersForDesktop(desk, 2);
-       ForceUpdatePagersForDesktop(desk);
-       Mode.queue_up = pq;
-     }
+      DesktopSetBg(desk, bg, 0);
    autosave();
 
    EDBUG_RETURN(0);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/backgrounds.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- backgrounds.c       10 Apr 2004 19:39:02 -0000      1.1
+++ backgrounds.c       12 Apr 2004 08:28:32 -0000      1.2
@@ -20,6 +20,7 @@
  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
+#define DECLARE_STRUCT_BACKGROUND
 #include "E.h"
 #include <time.h>
 
@@ -111,7 +112,17 @@
    return Estrdup(s);
 }
 
-static void
+void
+BackgroundPixmapFree(Background * bg)
+{
+   if (bg && bg->pmap)
+     {
+       imlib_free_pixmap_and_mask(bg->pmap);
+       bg->pmap = 0;
+     }
+}
+
+void
 BackgroundImagesFree(Background * bg, int free_pmap)
 {
    if (bg->bg.im)
@@ -127,14 +138,11 @@
        bg->top.im = NULL;
      }
    if (free_pmap && bg->pmap)
-     {
-       imlib_free_pixmap_and_mask(bg->pmap);
-       bg->pmap = 0;
-     }
+      BackgroundPixmapFree(bg);
 }
 
 void
-BackgroundImagesKeep(Background * bg, char onoff)
+BackgroundImagesKeep(Background * bg, int onoff)
 {
    if (onoff)
      {
@@ -158,26 +166,35 @@
       Efree(bg->bg.real_file);
    bg->bg.real_file = NULL;
 
+   if (bg->top.file)
+      Efree(bg->top.file);
+   bg->top.file = NULL;
+
+   if (bg->top.real_file)
+      Efree(bg->top.real_file);
+   bg->top.real_file = NULL;
+
    BackgroundImagesFree(bg, 1);
 
    bg->keepim = 0;
 }
 
-void
+int
 BackgroundDestroy(Background * bg)
 {
    EDBUG(6, "BackgroundDestroy");
 
    if (!bg)
-      EDBUG_RETURN_;
+      EDBUG_RETURN(-1);
 
    if (bg->ref_count > 0)
      {
        DialogOK(_("Background Error!"), _("%u references remain\n"),
                 bg->ref_count);
-       EDBUG_RETURN_;
+       EDBUG_RETURN(-1);
      }
 
+   RemoveItem((char *)bg, 0, LIST_FINDBY_POINTER, LIST_TYPE_BACKGROUND);
    BackgroundImagesRemove(bg);
 
    if (bg->name)
@@ -185,57 +202,98 @@
 
    Efree(bg);
 
+   EDBUG_RETURN(0);
+}
+
+void
+BackgroundDelete(Background * bg)
+{
+   char               *f;
+
+   EDBUG(6, "BackgroundDelete");
+
+   if (BackgroundDestroy(bg))
+      EDBUG_RETURN_;
+
+   /* And delete the actual image files */
+   if (bg->bg.file)
+     {
+       f = FindFile(bg->bg.file);
+       if (f)
+         {
+            E_rm(f);
+            Efree(f);
+         }
+     }
+   if (bg->top.file)
+     {
+       f = FindFile(bg->top.file);
+       if (f)
+         {
+            E_rm(f);
+            Efree(f);
+         }
+     }
+
    EDBUG_RETURN_;
 }
 
 Background         *
-BackgroundCreate(const char *name, XColor * solid, const char *bg, char tile,
+BackgroundCreate(const char *name, XColor * solid, const char *bgn, char tile,
                 char keep_aspect, int xjust, int yjust, int xperc,
                 int yperc, const char *top, char tkeep_aspect, int txjust,
                 int tyjust, int txperc, int typerc)
 {
-   Background         *d;
+   Background         *bg;
 
    EDBUG(6, "BackgroundCreate");
 
-   d = Emalloc(sizeof(Background));
-   if (!d)
+   bg = Emalloc(sizeof(Background));
+   if (!bg)
       EDBUG_RETURN(NULL);
-   d->name = Estrdup(name);
-   d->pmap = 0;
-   d->last_viewed = 0;
+   bg->name = Estrdup(name);
+   bg->pmap = 0;
+   bg->last_viewed = 0;
 
-   ESetColor(&(d->bg_solid), 160, 160, 160);
+   ESetColor(&(bg->bg_solid), 160, 160, 160);
    if (solid)
-      d->bg_solid = *solid;
-   d->bg.file = NULL;
-   if (bg)
-      d->bg.file = Estrdup(bg);
-   d->bg.real_file = NULL;
-   d->bg.im = NULL;
-   d->bg_tile = tile;
-   d->bg.keep_aspect = keep_aspect;
-   d->bg.xjust = xjust;
-   d->bg.yjust = yjust;
-   d->bg.xperc = xperc;
-   d->bg.yperc = yperc;
+      bg->bg_solid = *solid;
+   bg->bg.file = NULL;
+   if (bgn)
+      bg->bg.file = Estrdup(bgn);
+   bg->bg.real_file = NULL;
+   bg->bg.im = NULL;
+   bg->bg_tile = tile;
+   bg->bg.keep_aspect = keep_aspect;
+   bg->bg.xjust = xjust;
+   bg->bg.yjust = yjust;
+   bg->bg.xperc = xperc;
+   bg->bg.yperc = yperc;
 
-   d->top.file = NULL;
+   bg->top.file = NULL;
    if (top)
-      d->top.file = Estrdup(top);
-   d->top.real_file = NULL;
-   d->top.im = NULL;
-   d->top.keep_aspect = tkeep_aspect;
-   d->top.xjust = txjust;
-   d->top.yjust = tyjust;
-   d->top.xperc = txperc;
-   d->top.yperc = typerc;
-
-   d->cmclass = NULL;
-   d->keepim = 0;
-   d->ref_count = 0;
+      bg->top.file = Estrdup(top);
+   bg->top.real_file = NULL;
+   bg->top.im = NULL;
+   bg->top.keep_aspect = tkeep_aspect;
+   bg->top.xjust = txjust;
+   bg->top.yjust = tyjust;
+   bg->top.xperc = txperc;
+   bg->top.yperc = typerc;
 
-   EDBUG_RETURN(d);
+   bg->cmclass = NULL;
+   bg->keepim = 0;
+   bg->ref_count = 0;
+
+   AddItem(bg, bg->name, 0, LIST_TYPE_BACKGROUND);
+
+   EDBUG_RETURN(bg);
+}
+
+void
+BackgroundDestroyByName(const char *name)
+{
+   BackgroundDestroy(FindItem(name, 0, LIST_FINDBY_NAME, LIST_TYPE_BACKGROUND));
 }
 
 static void
@@ -523,14 +581,55 @@
 }
 
 void
+BackgroundIncRefcount(Background * bg)
+{
+   if (bg == NULL)
+      return;
+   bg->ref_count++;
+}
+
+void
+BackgroundDecRefcount(Background * bg)
+{
+   if (bg == NULL)
+      return;
+   bg->ref_count--;
+   if (bg->ref_count <= 0)
+      bg->last_viewed = 0;     /* Clean out asap */
+}
+
+void
+BackgroundTouch(Background * bg)
+{
+   if (bg == NULL)
+      return;
+   bg->last_viewed = time(NULL);
+}
+
+const char         *
+BackgroundGetName(const Background * bg)
+{
+   return (bg) ? bg->name : NULL;
+}
+
+Pixmap
+BackgroundGetPixmap(const Background * bg)
+{
+   return (bg) ? bg->pmap : None;
+}
+
+void
 BackgroundsAccounting(void)
 {
    time_t              now;
    int                 i, j, num;
    Background        **lst;
+   Window              win;
 
    EDBUG(3, "BackgroundsAccounting");
+
    now = time(NULL);
+
    for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
      {
        if ((desks.desk[i].bg) && (desks.desk[i].viewable))
@@ -538,34 +637,39 @@
      }
 
    lst = (Background **) ListItemType(&num, LIST_TYPE_BACKGROUND);
-   if (lst)
+   for (i = 0; i < num; i++)
      {
-       for (i = 0; i < num; i++)
+       /* Skip if no pixmap or not timed out */
+       if ((lst[i]->pmap == 0) ||
+           ((now - lst[i]->last_viewed) <= Conf.backgrounds.timeout))
+          continue;
+
+       /* Skip if associated with any viewable desktop */
+       for (j = 0; j < ENLIGHTENMENT_CONF_NUM_DESKTOPS; j++)
+          if (lst[i] == desks.desk[j].bg && desks.desk[j].viewable)
+             goto next;
+
+       for (j = 0; j < ENLIGHTENMENT_CONF_NUM_DESKTOPS; j++)
          {
-            if ((lst[i]->pmap == 0) ||
-                ((now - lst[i]->last_viewed) <= Conf.backgrounds.timeout))
+            if (lst[i] != desks.desk[j].bg || desks.desk[j].viewable)
                continue;
 
-            for (j = 0; j < ENLIGHTENMENT_CONF_NUM_DESKTOPS; j++)
-              {
-                 if ((desks.desk[j].bg == lst[i]) && (!desks.desk[j].viewable))
-                   {
-                      Window              win = desks.desk[j].win;
-
-                      HintsSetRootInfo(win, 0, 0);
-                      XSetWindowBackground(disp, win, 0);
-                      XClearWindow(disp, win);
-
-                      IMLIB1_SET_CONTEXT(lst[i] == desks.desk[0].bg);
-                      imlib_free_pixmap_and_mask(lst[i]->pmap);
-                      lst[i]->pmap = 0;
-                   }
-              }
-
+            /* Unviewable desktop - update the virtual root hints */
+            win = desks.desk[j].win;
+            HintsSetRootInfo(win, 0, 0);
+            XSetWindowBackground(disp, win, 0);
+            XClearWindow(disp, win);
          }
-       Efree(lst);
-       IMLIB1_SET_CONTEXT(0);
+
+       IMLIB1_SET_CONTEXT(lst[i] == desks.desk[0].bg);
+       BackgroundPixmapFree(lst[i]);
+
+      next:
+       ;
      }
+   if (lst)
+      Efree(lst);
+   IMLIB1_SET_CONTEXT(0);
 
    EDBUG_RETURN_;
 }
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/comms.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -3 -r1.59 -r1.60
--- comms.c     10 Apr 2004 19:36:48 -0000      1.59
+++ comms.c     12 Apr 2004 08:28:32 -0000      1.60
@@ -20,6 +20,7 @@
  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
+#define DECLARE_STRUCT_BACKGROUND
 #include "E.h"
 
 static Window       comms_win = 0;
@@ -479,43 +480,13 @@
      }
    else if (!strcmp(w, "del_bg"))
      {
-       Background         *bg;
-       int                 i;
-       char                dodel = 1;
-
        sscanf(s, "%*s %1000s", w);
-       bg = (Background *) FindItem(w, 0, LIST_FINDBY_NAME,
-                                    LIST_TYPE_BACKGROUND);
-       if (bg)
-         {
-            /* check for desktops referencing this bg - if there are - don't */
-            /* delete it */
-            for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
-              {
-                 if (desks.desk[i].bg == bg)
-                    dodel = 0;
-              }
-            if (dodel)
-              {
-                 bg = (Background *) RemoveItem(w, 0, LIST_FINDBY_NAME,
-                                                LIST_TYPE_BACKGROUND);
-                 if (bg->name)
-                    Efree(bg->name);
-                 if (bg->bg.file)
-                    Efree(bg->bg.file);
-                 if (bg->top.file)
-                    Efree(bg->top.file);
-                 if (bg->pmap)
-                    imlib_free_pixmap_and_mask(bg->pmap);
-                 Efree(bg);
-              }
-         }
+       BackgroundDestroyByName(w);
      }
    else if (!strcmp(w, "use_bg"))
      {
        Background         *bg;
        int                 i, wd;
-       char                view;
 
        sscanf(s, "%*s %1000s", w);
        bg = (Background *) FindItem(w, 0, LIST_FINDBY_NAME,
@@ -531,28 +502,7 @@
                  if (w[0])
                    {
                       i = atoi(w);
-                      if ((i >= 0) && (i < ENLIGHTENMENT_CONF_NUM_DESKTOPS))
-                        {
-                           if (desks.desk[i].bg)
-                              desks.desk[i].bg->last_viewed = 0;
-                           view = desks.desk[i].viewable;
-                           desks.desk[i].viewable = 0;
-                           BackgroundsAccounting();
-                           desks.desk[i].viewable = view;
-                           desks.desk[i].bg = bg;
-                           if (i < Conf.desks.num)
-                             {
-                                if (desks.desk[i].viewable)
-                                   RefreshDesktop(i);
-                                if (i == desks.current)
-                                  {
-                                     RedrawPagersForDesktop(i, 2);
-                                     ForceUpdatePagersForDesktop(i);
-                                  }
-                                else
-                                   RedrawPagersForDesktop(i, 1);
-                             }
-                        }
+                      DesktopSetBg(i, bg, 1);
                    }
               }
          }
@@ -560,7 +510,6 @@
    else if (!strcmp(w, "use_no_bg"))
      {
        int                 i, wd;
-       char                view;
 
        wd = 2;
        w[0] = ' ';
@@ -571,28 +520,7 @@
             if (w[0])
               {
                  i = atoi(w);
-                 if ((i >= 0) && (i < ENLIGHTENMENT_CONF_NUM_DESKTOPS))
-                   {
-                      if (desks.desk[i].bg)
-                         desks.desk[i].bg->last_viewed = 0;
-                      view = desks.desk[i].viewable;
-                      desks.desk[i].viewable = 0;
-                      BackgroundsAccounting();
-                      desks.desk[i].viewable = view;
-                      desks.desk[i].bg = NULL;
-                      if (i < Conf.desks.num)
-                        {
-                           if (desks.desk[i].viewable)
-                              RefreshDesktop(i);
-                           if (i == desks.current)
-                             {
-                                RedrawPagersForDesktop(i, 2);
-                                ForceUpdatePagersForDesktop(i);
-                             }
-                           else
-                              RedrawPagersForDesktop(i, 1);
-                        }
-                   }
+                 DesktopSetBg(i, NULL, 1);
               }
          }
      }
@@ -1134,17 +1062,7 @@
                  for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
                    {
                       if (desks.desk[i].bg == bg)
-                        {
-                           if (desks.desk[i].viewable)
-                              RefreshDesktop(i);
-                           if (i == desks.current)
-                             {
-                                RedrawPagersForDesktop(i, 2);
-                                ForceUpdatePagersForDesktop(i);
-                             }
-                           else
-                              RedrawPagersForDesktop(i, 1);
-                        }
+                         DesktopSetBg(i, bg, 0);
                    }
               }
          }
@@ -1166,7 +1084,6 @@
                Efree(bgf);
             if (topf)
                Efree(topf);
-            AddItem(bg, bg->name, 0, LIST_TYPE_BACKGROUND);
          }
      }
    else if (!strcmp(w, "draw_bg_to"))
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/config.c,v
retrieving revision 1.100
retrieving revision 1.101
diff -u -3 -r1.100 -r1.101
--- config.c    10 Apr 2004 19:36:48 -0000      1.100
+++ config.c    12 Apr 2004 08:28:32 -0000      1.101
@@ -20,6 +20,7 @@
  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
+#define DECLARE_STRUCT_BACKGROUND
 #define DECLARE_STRUCT_BUTTON
 #define DECLARE_STRUCT_ICONBOX
 #define DECLARE_STRUCT_MENU
@@ -1827,7 +1828,6 @@
                            bg = BackgroundCreate(name, &xclr, bg1, i1, i2, i3,
                                                  i4, i5, i6, bg2, j1, j2, j3,
                                                  j4, j5);
-                           AddItem(bg, bg->name, 0, LIST_TYPE_BACKGROUND);
                            if (cm)
                              {
                                 cm->ref_count++;
@@ -1882,15 +1882,14 @@
                                 bg = BackgroundCreate(name, &xclr, bg1, i1, i2,
                                                       i3, i4, i5, i6, bg2, j1,
                                                       j2, j3, j4, j5);
-                                AddItem(bg, bg->name, 0, LIST_TYPE_BACKGROUND);
                              }
                            if (!strcmp(bg->name, "NONE"))
                              {
-                                SetDesktopBg(atoi(s2), NULL);
+                                DesktopSetBg(atoi(s2), NULL, 0);
                              }
                            else
                              {
-                                SetDesktopBg(atoi(s2), bg);
+                                DesktopSetBg(atoi(s2), bg, 0);
                              }
 #if !USE_IMLIB2
                            if ((prImlib_Context) && (atoi(s2) == 0))
@@ -1911,11 +1910,11 @@
                              {
                                 if (!strcmp(bg->name, "NONE"))
                                   {
-                                     SetDesktopBg(atoi(s2), NULL);
+                                     DesktopSetBg(atoi(s2), NULL, 0);
                                   }
                                 else
                                   {
-                                     SetDesktopBg(atoi(s2), bg);
+                                     DesktopSetBg(atoi(s2), bg, 0);
                                   }
 #if !USE_IMLIB2
                                 if ((prImlib_Context) && (atoi(s2) == 0))
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -3 -r1.82 -r1.83
--- desktops.c  10 Apr 2004 19:36:48 -0000      1.82
+++ desktops.c  12 Apr 2004 08:28:32 -0000      1.83
@@ -65,7 +65,7 @@
 }
 
 void
-ShowDesktopControls()
+ShowDesktopControls(void)
 {
    Button            **blst;
    int                 num, i;
@@ -81,7 +81,7 @@
 }
 
 void
-ShowDesktopTabs()
+ShowDesktopTabs(void)
 {
    Button            **blst;
    int                 num, i;
@@ -97,7 +97,7 @@
 }
 
 void
-HideDesktopTabs()
+HideDesktopTabs(void)
 {
    Button            **blst;
    int                 num, i;
@@ -218,7 +218,7 @@
 }
 
 void
-RefreshCurrentDesktop()
+RefreshCurrentDesktop(void)
 {
    EDBUG(5, "RefreshCurrentDesktop");
    RefreshDesktop(desks.current);
@@ -245,7 +245,19 @@
 }
 
 void
-InitDesktopBgs()
+DesktopsRefresh(void)
+{
+   int                 i;
+
+   for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
+     {
+       if (desks.desk[i].bg)
+          DesktopSetBg(i, desks.desk[i].bg, 1);
+     }
+}
+
+void
+InitDesktopBgs(void)
 {
    int                 i;
    Desk               *d;
@@ -262,10 +274,10 @@
        d->y = 0;
        d->current_area_x = 0;
        d->current_area_y = 0;
+       d->viewable = 0;
        if (i == 0)
          {
             d->win = root.win;
-            d->viewable = 0;
          }
        else
          {
@@ -277,7 +289,6 @@
                          | ButtonMotionMask | PropertyChangeMask |
                          SubstructureRedirectMask | KeyPressMask |
                          KeyReleaseMask | PointerMotionMask);
-            d->viewable = 0;
          }
        at = XInternAtom(disp, "ENLIGHTENMENT_DESKTOP", False);
        XChangeProperty(disp, d->win, at, XA_CARDINAL, 32, PropModeReplace,
@@ -293,11 +304,10 @@
      }
 
    EDBUG_RETURN_;
-
 }
 
 void
-InitDesktopControls()
+InitDesktopControls(void)
 {
    int                 i;
    ActionClass        *ac, *ac2, *ac3;
@@ -564,32 +574,29 @@
 }
 
 void
-SetDesktopBg(int desk, Background * bg)
+DesktopSetBg(int desk, Background * bg, int refresh)
 {
-   EDBUG(5, "SetDesktopBg");
+   EDBUG(5, "DesktopSetBg");
 
-   if (desk < 0)
-      EDBUG_RETURN_;
-   if (desk >= ENLIGHTENMENT_CONF_NUM_DESKTOPS)
+   if (desk < 0 || desk >= ENLIGHTENMENT_CONF_NUM_DESKTOPS)
       EDBUG_RETURN_;
 
-   if (desks.desk[desk].bg)
+   if (refresh)
+      BackgroundPixmapFree(desks.desk[desk].bg);
+
+   if (desks.desk[desk].bg != bg)
      {
-       if (desks.desk[desk].bg != bg)
-         {
-            desks.desk[desk].bg->ref_count--;
-            if (desks.desk[desk].bg->ref_count < 1)
-              {
-                 desks.desk[desk].bg->last_viewed = 0;
-                 BackgroundsAccounting();
-              }
-            if (bg)
-               bg->ref_count++;
-         }
+       if (desks.desk[desk].bg)
+          BackgroundDecRefcount(desks.desk[desk].bg);
+       if (bg)
+          BackgroundIncRefcount(bg);
      }
+
    desks.desk[desk].bg = bg;
+
    if (desks.desk[desk].viewable)
       RefreshDesktop(desk);
+
    if (desk == desks.current)
      {
        RedrawPagersForDesktop(desk, 2);
@@ -597,6 +604,7 @@
      }
    else
       RedrawPagersForDesktop(desk, 1);
+
    EDBUG_RETURN_;
 }
 
@@ -836,9 +844,8 @@
          {
             for (i = n + 1; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
               {
-                 if ((desks.desk[desks.order[i]].viewable)
-                     && (desks.desk[desks.order[i]].bg))
-                    desks.desk[desks.order[i]].bg->last_viewed = time(NULL);
+                 if (desks.desk[desks.order[i]].viewable)
+                    BackgroundTouch(desks.desk[desks.order[i]].bg);
                  desks.desk[desks.order[i]].viewable = 0;
               }
          }
@@ -876,12 +883,8 @@
                    }
                  else
                    {
-                      if ((!v) && (desks.desk[desks.order[i]].viewable)
-                          && (desks.desk[desks.order[i]].bg))
-                        {
-                           desks.desk[desks.order[i]].bg->last_viewed =
-                              time(NULL);
-                        }
+                      if ((!v) && (desks.desk[desks.order[i]].viewable))
+                         BackgroundTouch(desks.desk[desks.order[i]].bg);
                       desks.desk[desks.order[i]].viewable = v;
                    }
 
@@ -991,8 +994,8 @@
    if (desk == 0)
       EDBUG_RETURN_;
 
-   if ((desks.desk[desk].viewable) && (desks.desk[desk].bg))
-      desks.desk[desk].bg->last_viewed = time(NULL);
+   if (desks.desk[desk].viewable)
+      BackgroundTouch(desks.desk[desk].bg);
    desks.desk[desk].viewable = 0;
    EMoveWindow(disp, desks.desk[desk].win, root.w, 0);
 
@@ -1030,7 +1033,7 @@
 }
 
 void
-StackDesktops()
+StackDesktops(void)
 {
    EDBUG(2, "StackDesktops");
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/iclass.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -3 -r1.34 -r1.35
--- iclass.c    9 Apr 2004 12:59:55 -0000       1.34
+++ iclass.c    12 Apr 2004 08:28:33 -0000      1.35
@@ -54,15 +54,21 @@
 void
 TransparencySet(int transparency)
 {
+   int                 changed;
+
    if (transparency < 0)
       transparency = 0;
    else if (transparency > 255)
       transparency = 255;
 
+   changed = Conf.theme.transparency != transparency;
    Conf.theme.transparency = transparency;
 
    /* Generate the color modifier tables */
    TransparencyMakeColorModifier();
+
+   if (changed)
+      DesktopsRefresh();
 }
 
 #else
@@ -433,11 +439,9 @@
        if (xx < root.w && yy < root.h && xx + w >= 0 && yy + h >= 0)
          {
             /* Create the background base image */
-            bg = root.win;
-            if ((is->transparent & 0x02) == 0 &&
-                desks.desk[desks.current].bg
-                && desks.desk[desks.current].bg->pmap)
-               bg = desks.desk[desks.current].bg->pmap;
+            bg = BackgroundGetPixmap(desks.desk[desks.current].bg);
+            if ((is->transparent & 0x02) != 0 || bg == None)
+               bg = root.win;
             imlib_context_set_drawable(bg);
             ii = imlib_create_image_from_drawable(0, xx, yy, w, h, 1);
             imlib_context_set_image(ii);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/init.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- init.c      10 Apr 2004 19:36:48 -0000      1.16
+++ init.c      12 Apr 2004 08:28:33 -0000      1.17
@@ -129,7 +129,6 @@
    /* create a fallback background in case no background is found */
    bg = BackgroundCreate("NONE", NULL, NULL, 0, 0, 0, 0, 0, 0, NULL, 0, 0, 0, 0,
                         0);
-   AddItem(bg, bg->name, 0, LIST_TYPE_BACKGROUND);
 
    /* create a fallback textclass in case no textclass is found */
    tc = CreateTclass();
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ipc.c,v
retrieving revision 1.152
retrieving revision 1.153
diff -u -3 -r1.152 -r1.153
--- ipc.c       10 Apr 2004 19:36:48 -0000      1.152
+++ ipc.c       12 Apr 2004 08:28:33 -0000      1.153
@@ -20,6 +20,7 @@
  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
+#define DECLARE_STRUCT_BACKGROUND
 #include "E.h"
 #include "timestamp.h"
 #include <ctype.h>
@@ -1047,7 +1048,8 @@
                    {
                       EGetColor(&(bg->bg_solid), &r, &g, &b);
                       Esnprintf(buf, sizeof(buf),
-                                "%s ref_count %u\n" " bg.solid\t %i %i %i \n"
+                                "%s ref_count %u keepim %u\n"
+                                " bg.solid\t %i %i %i \n"
                                 " bg.file\t %s \ttop.file\t %s \n"
                                 " bg.tile\t %i \n"
                                 " bg.keep_aspect\t %i \ttop.keep_aspect\t %i \n"
@@ -1055,7 +1057,7 @@
                                 " bg.yjust\t %i \ttop.yjust\t %i \n"
                                 " bg.xperc\t %i \ttop.xperc\t %i \n"
                                 " bg.yperc\t %i \ttop.yperc\t %i \n", bg->name,
-                                bg->ref_count, r, g, b,
+                                bg->ref_count, bg->keepim, r, g, b,
                                 bg->bg.file, bg->top.file, bg->bg_tile,
                                 bg->bg.keep_aspect, bg->top.keep_aspect,
                                 bg->bg.xjust, bg->top.xjust, bg->bg.yjust,
@@ -1077,7 +1079,6 @@
                    {
                       bg = BackgroundCreate(Estrdup(name), NULL, NULL, 0, 0, 0,
                                             0, 0, 0, NULL, 0, 0, 0, 0, 0);
-                      AddItem(bg, bg->name, 0, LIST_TYPE_BACKGROUND);
                    }
                  if (!bg)
                     Esnprintf(buf, sizeof(buf),
@@ -1175,11 +1176,7 @@
             if (bg)
               {
                  if (bg->ref_count == 0)
-                   {
-                      RemoveItem(name, 0,
-                                 LIST_FINDBY_NAME, LIST_TYPE_BACKGROUND);
-                      BackgroundDestroy(bg);
-                   }
+                    BackgroundDestroy(bg);
                  else
                     Esnprintf(buf, sizeof(buf),
                               "Error: ref_count for background '%s' is %u.",
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/main.c,v
retrieving revision 1.86
retrieving revision 1.87
diff -u -3 -r1.86 -r1.87
--- main.c      10 Apr 2004 19:36:49 -0000      1.86
+++ main.c      12 Apr 2004 08:28:33 -0000      1.87
@@ -53,7 +53,6 @@
 main(int argc, char **argv)
 {
    int                 i;
-   Background         *bg;
    ECursor            *ec = NULL;
    struct utsname      ubuf;
    char               *str;
@@ -344,12 +343,8 @@
    if (!Conf.mapslide)
       CreateStartupDisplay(0);
 
-   if ((bg = RemoveItem("STARTUP_BACKGROUND_SIDEWAYS", 0,
-                       LIST_FINDBY_NAME, LIST_TYPE_BACKGROUND)))
-      BackgroundDestroy(bg);
-   if ((bg = RemoveItem("STARTUP_BACKGROUND", 0,
-                       LIST_FINDBY_NAME, LIST_TYPE_BACKGROUND)))
-      BackgroundDestroy(bg);
+   BackgroundDestroyByName("STARTUP_BACKGROUND_SIDEWAYS");
+   BackgroundDestroyByName("STARTUP_BACKGROUND");
 
 #ifdef SIGCONT
    for (i = 0; i < child_count; i++)
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/menus.c,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -3 -r1.121 -r1.122
--- menus.c     10 Apr 2004 19:36:49 -0000      1.121
+++ menus.c     12 Apr 2004 08:28:33 -0000      1.122
@@ -1125,7 +1125,6 @@
                                                       keep_asp, justx, justy,
                                                       scalex, scaley, NULL, 0,
                                                       0, 0, 0, 0);
-                                AddItem(bg, bg->name, 0, LIST_TYPE_BACKGROUND);
                              }
                            else
                               ok = 0;
@@ -1336,7 +1335,6 @@
                            bg = BackgroundCreate(s3, &xclr, ss, tile, keep_asp,
                                                  512, 512, scalex, scaley,
                                                  NULL, 0, 0, 0, 0, 0);
-                           AddItem(bg, bg->name, 0, LIST_TYPE_BACKGROUND);
                         }
                       else
                          ok = 0;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/pager.c,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -3 -r1.83 -r1.84
--- pager.c     10 Apr 2004 19:36:49 -0000      1.83
+++ pager.c     12 Apr 2004 08:28:34 -0000      1.84
@@ -664,8 +664,8 @@
                          BackgroundGetUniqueString(desks.desk[p->desktop].bg);
                       Esnprintf(s, sizeof(s), "%s/cached/pager/%s.%i.%i.%s",
                                 EDirUserCache(),
-                                desks.desk[p->desktop].bg->name, (p->w / ax),
-                                (p->h / ay), uniq);
+                                BackgroundGetName(desks.desk[p->desktop].bg),
+                                (p->w / ax), (p->h / ay), uniq);
                       Efree(uniq);
 
                       im = imlib_load_image(s);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/settings.c,v
retrieving revision 1.105
retrieving revision 1.106
diff -u -3 -r1.105 -r1.106
--- settings.c  10 Apr 2004 19:36:49 -0000      1.105
+++ settings.c  12 Apr 2004 08:28:34 -0000      1.106
@@ -20,6 +20,7 @@
  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
+#define DECLARE_STRUCT_BACKGROUND
 #define DECLARE_STRUCT_ICONBOX
 #include "E.h"
 #include <time.h>
@@ -2426,7 +2427,6 @@
 static DItem       *bg_filename;
 static DItem       *tmp_w[10];
 static int          tmp_bg_sel_sliderval = 0;
-static Background  *tbg = NULL;
 static Background  *tmp_bg;
 static int          tmp_bg_r;
 static int          tmp_bg_g;
@@ -2465,23 +2465,16 @@
        tmp_bg->bg.yjust = 1024 - tmp_bg_yjust;
        tmp_bg->bg.xperc = tmp_bg_xperc;
        tmp_bg->bg.yperc = 1024 - tmp_bg_yperc;
+
        if (!tmp_bg_image)
           BackgroundImagesRemove(tmp_bg);
+
        for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
          {
             if (desks.desk[i].bg == tmp_bg)
-              {
-                 if (desks.desk[i].viewable)
-                    RefreshDesktop(i);
-                 if (i == desks.current)
-                   {
-                      RedrawPagersForDesktop(i, 2);
-                      ForceUpdatePagersForDesktop(i);
-                   }
-                 else
-                    RedrawPagersForDesktop(i, 1);
-              }
+               DesktopSetBg(i, tmp_bg, 0);
          }
+
        {
           char                s[4096];
           Imlib_Image        *im;
@@ -2505,20 +2498,7 @@
      {
        BackgroundImagesKeep(tmp_bg, 0);
      }
-   if (tbg)
-     {
-       BackgroundDestroy(tbg);
-       tbg = NULL;
-     }
-   BackgroundsAccounting();
    autosave();
-   /* This is kind of a hack - somehow it loses the correct current desktop
-    * information when we actually open up the dialog box, so this
-    * should fix the atom which apparently gets clobbered somewhere
-    * above here
-    * --Mandrake
-    */
-   RefreshDesktop(desks.current);
 
    data = NULL;
 }
@@ -2526,88 +2506,65 @@
 static void
 CB_DesktopMiniDisplayRedraw(int val, void *data)
 {
+   Background         *bg;
    int                 w, h;
    DItem              *di;
    Window              win;
    Pixmap              pmap;
    XColor              xclr;
+   const char         *fbg, *ffg;
+
+   if (!tmp_bg)
+      return;
 
    di = (DItem *) data;
    win = DialogItemAreaGetWindow(di);
    DialogItemAreaGetSize(di, &w, &h);
 
+   fbg = (tmp_bg_image) ? tmp_bg->bg.file : NULL;
+   ffg = (tmp_bg_image) ? tmp_bg->top.file : NULL;
    ESetColor(&xclr, tmp_bg_r, tmp_bg_g, tmp_bg_b);
-   if (!tbg)
-     {
-       if (!tmp_bg_image)
-          tbg =
-             BackgroundCreate("TEMP", &xclr, NULL, tmp_bg_tile,
-                              tmp_bg_keep_aspect, tmp_bg_xjust,
-                              1024 - tmp_bg_yjust, tmp_bg_xperc,
-                              1024 - tmp_bg_yperc, tmp_bg->top.file,
-                              tmp_bg->top.keep_aspect, tmp_bg->top.xjust,
-                              tmp_bg->top.yjust, tmp_bg->top.xperc,
-                              tmp_bg->top.yperc);
-       else
-          tbg =
-             BackgroundCreate("TEMP", &xclr, tmp_bg->bg.file, tmp_bg_tile,
-                              tmp_bg_keep_aspect, tmp_bg_xjust,
-                              1024 - tmp_bg_yjust, tmp_bg_xperc,
-                              1024 - tmp_bg_yperc, tmp_bg->top.file,
-                              tmp_bg->top.keep_aspect, tmp_bg->top.xjust,
-                              tmp_bg->top.yjust, tmp_bg->top.xperc,
-                              tmp_bg->top.yperc);
-     }
-   else
-     {
-       if (tbg->pmap)
-          imlib_free_pixmap_and_mask(tbg->pmap);
-       ESetColor(&(tbg->bg_solid), tmp_bg_r, tmp_bg_g, tmp_bg_b);
-       if (tbg->bg.file)
-          Efree(tbg->bg.file);
-       tbg->bg.file = NULL;
-       if (tmp_bg_image)
-          tbg->bg.file = Estrdup(tmp_bg->bg.file);
-       else
-         {
-            if (tbg->bg.im)
-              {
-                 imlib_context_set_image(tbg->bg.im);
-                 imlib_free_image();
-                 tbg->bg.im = NULL;
-              }
-         }
-       if (tbg->bg.real_file)
-          Efree(tbg->bg.real_file);
-       tbg->bg.real_file = NULL;
-       tbg->bg_tile = tmp_bg_tile;
-       tbg->bg.keep_aspect = tmp_bg_keep_aspect;
-       tbg->bg.xjust = tmp_bg_xjust;
-       tbg->bg.yjust = 1024 - tmp_bg_yjust;
-       tbg->bg.xperc = tmp_bg_xperc;
-       tbg->bg.yperc = 1024 - tmp_bg_yperc;
-     }
-   BackgroundImagesKeep(tbg, 1);
+   bg = BackgroundCreate("TEMP", &xclr, fbg, tmp_bg_tile,
+                        tmp_bg_keep_aspect, tmp_bg_xjust,
+                        1024 - tmp_bg_yjust, tmp_bg_xperc,
+                        1024 - tmp_bg_yperc, ffg,
+                        tmp_bg->top.keep_aspect, tmp_bg->top.xjust,
+                        tmp_bg->top.yjust, tmp_bg->top.xperc,
+                        tmp_bg->top.yperc);
+
    pmap = ECreatePixmap(disp, win, w, h, root.depth);
    ESetWindowBackgroundPixmap(disp, win, pmap);
-   BackgroundApply(tbg, pmap, 0);
+   BackgroundApply(bg, pmap, 0);
    XClearWindow(disp, win);
    EFreePixmap(disp, pmap);
+
+   BackgroundDestroy(bg);
    val = 0;
 }
 
 static void
+BG_GetValues(void)
+{
+   tmp_bg_image = (tmp_bg->bg.file) ? 1 : 0;
+
+   BackgroundImagesKeep(tmp_bg, 1);
+
+   EGetColor(&(tmp_bg->bg_solid), &tmp_bg_r, &tmp_bg_g, &tmp_bg_b);
+   tmp_bg_tile = tmp_bg->bg_tile;
+   tmp_bg_keep_aspect = tmp_bg->bg.keep_aspect;
+   tmp_bg_xjust = tmp_bg->bg.xjust;
+   tmp_bg_yjust = 1024 - tmp_bg->bg.yjust;
+   tmp_bg_xperc = tmp_bg->bg.xperc;
+   tmp_bg_yperc = 1024 - tmp_bg->bg.yperc;
+}
+
+static void
 BG_DoDialog(void)
 {
    char               *stmp;
    char                s[1024];
 
-   if (tmp_bg->bg.file)
-      tmp_bg_image = 1;
-   else
-      tmp_bg_image = 0;
-
-   BackgroundImagesKeep(tmp_bg, 1);
+   BG_GetValues();
 
    if (tmp_bg->bg.file)
       stmp = fullfileof(tmp_bg->bg.file);
@@ -2620,13 +2577,6 @@
    DialogItemTextSetText(bg_filename, s);
    DialogDrawItems(bg_sel_dialog, bg_filename, 0, 0, 99999, 99999);
 
-   EGetColor(&(tmp_bg->bg_solid), &tmp_bg_r, &tmp_bg_g, &tmp_bg_b);
-   tmp_bg_tile = tmp_bg->bg_tile;
-   tmp_bg_keep_aspect = tmp_bg->bg.keep_aspect;
-   tmp_bg_xjust = tmp_bg->bg.xjust;
-   tmp_bg_yjust = 1024 - tmp_bg->bg.yjust;
-   tmp_bg_xperc = tmp_bg->bg.xperc;
-   tmp_bg_yperc = 1024 - tmp_bg->bg.yperc;
    DialogItemSliderSetVal(tmp_w[0], tmp_bg_r);
    DialogItemCheckButtonSetState(tmp_w[1], tmp_bg_image);
    DialogItemSliderSetVal(tmp_w[2], tmp_bg_g);
@@ -2637,11 +2587,7 @@
    DialogItemSliderSetVal(tmp_w[7], tmp_bg_yjust);
    DialogItemSliderSetVal(tmp_w[8], tmp_bg_yperc);
    DialogItemSliderSetVal(tmp_w[9], tmp_bg_xperc);
-   if (tbg)
-     {
-       BackgroundDestroy(tbg);
-       tbg = NULL;
-     }
+
    CB_DesktopMiniDisplayRedraw(0, bg_mini_disp);
 }
 
@@ -2650,28 +2596,23 @@
 {
    char                s[1024];
    XColor              xclr;
-   Background         *bg;
    int                 lower, upper;
 
-   Esnprintf(s, sizeof(s), "__NEWBG_%i\n", (unsigned)time(NULL));
+   Esnprintf(s, sizeof(s), "__NEWBG_%i", (unsigned)time(NULL));
    ESetColor(&xclr, tmp_bg_r, tmp_bg_g, tmp_bg_b);
-   bg = BackgroundCreate(s, &xclr, tmp_bg->bg.file, tmp_bg_tile,
-                        tmp_bg_keep_aspect, tmp_bg_xjust, 1024 - tmp_bg_yjust,
-                        tmp_bg_xperc, 1024 - tmp_bg_yperc, tmp_bg->top.file,
-                        tmp_bg->top.keep_aspect, tmp_bg->top.xjust,
-                        tmp_bg->top.yjust, tmp_bg->top.xperc,
-                        tmp_bg->top.yperc);
-   AddItem(bg, bg->name, 0, LIST_TYPE_BACKGROUND);
-   tmp_bg = bg;
-   desks.desk[desks.current].bg = bg;
+   tmp_bg = BackgroundCreate(s, &xclr, tmp_bg->bg.file, tmp_bg_tile,
+                            tmp_bg_keep_aspect, tmp_bg_xjust,
+                            1024 - tmp_bg_yjust, tmp_bg_xperc,
+                            1024 - tmp_bg_yperc, tmp_bg->top.file,
+                            tmp_bg->top.keep_aspect, tmp_bg->top.xjust,
+                            tmp_bg->top.yjust, tmp_bg->top.xperc,
+                            tmp_bg->top.yperc);
    DialogItemSliderGetBounds(bg_sel_slider, &lower, &upper);
    upper += 4;
    DialogItemSliderSetBounds(bg_sel_slider, lower, upper);
    DialogItemSliderSetVal(bg_sel_slider, 0);
    DialogDrawItems(bg_sel_dialog, bg_sel_slider, 0, 0, 99999, 99999);
-   RefreshCurrentDesktop();
-   RedrawPagersForDesktop(desks.current, 2);
-   ForceUpdatePagersForDesktop(desks.current);
+   DesktopSetBg(desks.current, tmp_bg, 0);
    BG_RedrawView(0);
    autosave();
    val = 0;
@@ -2696,26 +2637,22 @@
        if (slider > upper)
           DialogItemSliderSetVal(bg_sel_slider, upper);
 
+       bg = NULL;
        for (i = 0; i < num; i++)
          {
             if (bglist[i] == tmp_bg)
               {
-                 bg = RemoveItem((char *)tmp_bg, 0, LIST_FINDBY_POINTER,
-                                 LIST_TYPE_BACKGROUND);
                  if (i < (num - 1))
-                    tmp_bg = bglist[i + 1];
+                    bg = bglist[i + 1];
                  else
-                    tmp_bg = bglist[i - 1];
-                 i = num;
-                 if (bg)
-                    BackgroundDestroy(bg);
-                 BG_DoDialog();
+                    bg = bglist[i - 1];
+                 break;
               }
          }
-       desks.desk[desks.current].bg = tmp_bg;
-       RedrawPagersForDesktop(desks.current, 2);
-       ForceUpdatePagersForDesktop(desks.current);
-       RefreshCurrentDesktop();
+       DesktopSetBg(desks.current, bg, 0);
+       BackgroundDestroy(tmp_bg);
+       tmp_bg = bg;
+       BG_DoDialog();
        BG_RedrawView(0);
        for (i = 0; i < 10; i++)
           DialogDrawItems(bg_sel_dialog, tmp_w[i], 0, 0, 99999, 99999);
@@ -2746,50 +2683,23 @@
        if (slider > upper)
           DialogItemSliderSetVal(bg_sel_slider, upper);
 
+       bg = NULL;
        for (i = 0; i < num; i++)
          {
             if (bglist[i] == tmp_bg)
               {
-                 bg = RemoveItem((char *)tmp_bg, 0, LIST_FINDBY_POINTER,
-                                 LIST_TYPE_BACKGROUND);
                  if (i < (num - 1))
-                    tmp_bg = bglist[i + 1];
+                    bg = bglist[i + 1];
                  else
-                    tmp_bg = bglist[i - 1];
-                 i = num;
-                 if (bg)
-                   {
-                      if (bg->bg.file)
-                        {
-                           char               *f;
-
-                           f = FindFile(bg->bg.file);
-                           if (f)
-                             {
-                                E_rm(f);
-                                Efree(f);
-                             }
-                        }
-                      if (bg->top.file)
-                        {
-                           char               *f;
-
-                           f = FindFile(bg->top.file);
-                           if (f)
-                             {
-                                E_rm(f);
-                                Efree(f);
-                             }
-                        }
-                      BackgroundDestroy(bg);
-                   }
-                 BG_DoDialog();
+                    bg = bglist[i - 1];
+                 break;
               }
          }
-       desks.desk[desks.current].bg = tmp_bg;
-       RedrawPagersForDesktop(desks.current, 2);
-       ForceUpdatePagersForDesktop(desks.current);
-       RefreshCurrentDesktop();
+
+       DesktopSetBg(desks.current, bg, 0);
+       BackgroundDelete(tmp_bg);
+       tmp_bg = bg;
+       BG_DoDialog();
        BG_RedrawView(0);
        for (i = 0; i < 10; i++)
           DialogDrawItems(bg_sel_dialog, tmp_w[i], 0, 0, 99999, 99999);
@@ -2989,10 +2899,7 @@
             BackgroundImagesKeep(tmp_bg, 0);
             tmp_bg = bglist[tmp_bg_selected];
             BG_DoDialog();
-            desks.desk[desks.current].bg = tmp_bg;
-            RedrawPagersForDesktop(desks.current, 2);
-            ForceUpdatePagersForDesktop(desks.current);
-            RefreshCurrentDesktop();
+            DesktopSetBg(desks.current, tmp_bg, 0);
             BG_RedrawView(0);
             for (x = 0; x < 10; x++)
                DialogDrawItems(bg_sel_dialog, tmp_w[x], 0, 0, 99999, 99999);
@@ -3073,23 +2980,17 @@
    int                 i, num;
 
    bglist = (Background **) ListItemType(&num, LIST_TYPE_BACKGROUND);
-   if (bglist)
+   for (i = 0; i < num; i++)
      {
-       for (i = 0; i < num; i++)
+       if ((bglist[i] == tmp_bg) && (i > 0))
          {
-            if ((bglist[i] == tmp_bg) && (i > 0))
-              {
-                 desks.desk[desks.current].bg = bglist[i - 1];
-                 BGSettingsGoTo(bglist[i - 1]);
-                 RedrawPagersForDesktop(desks.current, 2);
-                 ForceUpdatePagersForDesktop(desks.current);
-                 RefreshCurrentDesktop();
-                 Efree(bglist);
-                 return;
-              }
+            BGSettingsGoTo(bglist[i - 1]);
+            DesktopSetBg(desks.current, bglist[i - 1], 0);
+            break;;
          }
-       Efree(bglist);
      }
+   if (bglist)
+      Efree(bglist);
    val = 0;
    data = NULL;
 }
@@ -3101,23 +3002,17 @@
    int                 i, num;
 
    bglist = (Background **) ListItemType(&num, LIST_TYPE_BACKGROUND);
-   if (bglist)
+   for (i = 0; i < num; i++)
      {
-       for (i = 0; i < num; i++)
+       if ((bglist[i] == tmp_bg) && (i < (num - 1)))
          {
-            if ((bglist[i] == tmp_bg) && (i < (num - 1)))
-              {
-                 desks.desk[desks.current].bg = bglist[i + 1];
-                 BGSettingsGoTo(bglist[i + 1]);
-                 RedrawPagersForDesktop(desks.current, 2);
-                 ForceUpdatePagersForDesktop(desks.current);
-                 RefreshCurrentDesktop();
-                 Efree(bglist);
-                 return;
-              }
+            BGSettingsGoTo(bglist[i + 1]);
+            DesktopSetBg(desks.current, bglist[i + 1], 0);
+            break;
          }
-       Efree(bglist);
      }
+   if (bglist)
+      Efree(bglist);
    val = 0;
    data = NULL;
 }
@@ -3272,28 +3167,14 @@
 
    if ((!bg) || ((bg) && (!strcmp(bg->name, "NONE"))))
      {
-       Esnprintf(s, sizeof(s), "__NEWBG_%i\n", (unsigned)time(NULL));
+       Esnprintf(s, sizeof(s), "__NEWBG_%i", (unsigned)time(NULL));
        bg = BackgroundCreate(s, NULL, NULL, 1, 1, 0, 0, 0, 0, NULL, 1,
                              512, 512, 0, 0);
-       AddItem(bg, bg->name, 0, LIST_TYPE_BACKGROUND);
-       /*
-        * desks.desk[desks.current].bg = bg;
-        */
      }
    tmp_bg = bg;
-   if (bg->bg.file)
-      tmp_bg_image = 1;
-   else
-      tmp_bg_image = 0;
-   tmp_bg->keepim = 1;
 
-   EGetColor(&(bg->bg_solid), &tmp_bg_r, &tmp_bg_g, &tmp_bg_b);
-   tmp_bg_tile = bg->bg_tile;
-   tmp_bg_keep_aspect = bg->bg.keep_aspect;
-   tmp_bg_xjust = bg->bg.xjust;
-   tmp_bg_yjust = 1024 - bg->bg.yjust;
-   tmp_bg_xperc = bg->bg.xperc;
-   tmp_bg_yperc = 1024 - bg->bg.yperc;
+   BG_GetValues();
+
    tmp_hiq = Conf.backgrounds.hiquality;
    tmp_userbg = Conf.backgrounds.user;
    tmp_bg_timeout = Conf.backgrounds.timeout;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/startup.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -3 -r1.41 -r1.42
--- startup.c   10 Apr 2004 19:36:49 -0000      1.41
+++ startup.c   12 Apr 2004 08:28:34 -0000      1.42
@@ -218,9 +218,7 @@
        Mode.queue_up = pq;
        BackgroundApply(bg, win1, 1);
        BackgroundApply(bg, win2, 1);
-       if (bg->pmap)
-          imlib_free_pixmap_and_mask(bg->pmap);
-       bg->pmap = 0;
+       BackgroundImagesFree(bg, 1);
        init_win1 = w1;
        init_win2 = w2;
        EMapRaised(disp, w1);




-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to