Fix external background on root at startup with CM enabled. Cleanups.

SVN revision: 20891
This commit is contained in:
Kim Woelders 2006-03-01 21:57:50 +00:00
parent d092ff2f43
commit ad52858fbb
5 changed files with 48 additions and 41 deletions

View File

@ -63,6 +63,9 @@ struct _background
static Ecore_List *bg_list = NULL;
static unsigned int bg_seq_no = 0;
#define N_BG_ASSIGNED 32
static Background *bg_assigned[N_BG_ASSIGNED];
char *
BackgroundGetUniqueString(const Background * bg)
{
@ -337,7 +340,7 @@ BackgroundFind(const char *name)
return ecore_list_find(bg_list, _BackgroundMatchName, name);
}
Background *
static Background *
BackgroundCheck(Background * bg)
{
return ecore_list_goto(bg_list, bg);
@ -1121,7 +1124,7 @@ BackgroundsInvalidate(int refresh)
ECORE_LIST_FOR_EACH(bg_list, bg) BackgroundInvalidate(bg, refresh);
}
Background *
static Background *
BackgroundGetRandom(void)
{
Background *bg;
@ -1140,6 +1143,32 @@ BackgroundGetRandom(void)
return bg;
}
void
BackgroundSetForDesk(Background * bg, unsigned int desk)
{
if (desk >= N_BG_ASSIGNED)
return;
bg_assigned[desk] = bg;
}
Background *
BackgroundGetForDesk(unsigned int desk)
{
Background *bg;
if (desk >= N_BG_ASSIGNED)
return NULL;
bg = bg_assigned[desk];
if (bg)
bg = BackgroundCheck(bg);
if (!bg)
bg = BackgroundGetRandom();
return bg;
}
/*
* Config load/save
*/
@ -1262,20 +1291,18 @@ BackgroundsConfigLoad(FILE * fs)
case BG_DESKNUM:
desk = atoi(s2);
if (desk < DesksGetNumber())
if (desk >= N_BG_ASSIGNED)
break;
if (!bg_assigned[desk] || Conf.backgrounds.user)
{
if ((DeskBackgroundGet(DeskGet(desk)) == NULL) ||
(Conf.backgrounds.user))
if (!ignore)
{
if (!ignore)
{
if (!bg)
bg = BackgroundCreate(name, &xclr, bg1, i1, i2,
i3, i4, i5, i6, bg2, j1,
j2, j3, j4, j5);
}
DeskBackgroundAssign(desk, bg);
if (!bg)
bg = BackgroundCreate(name, &xclr, bg1, i1, i2,
i3, i4, i5, i6, bg2, j1,
j2, j3, j4, j5);
}
bg_assigned[desk] = bg;
}
break;
@ -1434,13 +1461,9 @@ BackgroundsConfigSave(void)
}
#endif
for (j = 0; j < DesksGetNumber(); j++)
for (j = 0; j < N_BG_ASSIGNED; j++)
{
Desk *dsk = DeskGet(j);
if (BackgroundIsNone(bg) && !DeskBackgroundGet(dsk))
fprintf(fs, "564 %d\n", j);
if (DeskBackgroundGet(dsk) == bg)
if (bg == bg_assigned[j])
fprintf(fs, "564 %d\n", j);
}

View File

@ -28,8 +28,7 @@ typedef struct _background Background;
/* backgrounds.c */
Background *BackgroundFind(const char *name);
Background *BackgroundCheck(Background * bg);
Background *BackgroundGetRandom(void);
char *BackgroundGetUniqueString(const Background * bg);
void BackgroundPixmapSet(Background * bg, Pixmap pmap);
void BackgroundDestroyByName(const char *name);
@ -54,6 +53,9 @@ Background *BrackgroundCreateFromImage(const char *bgid,
const char *file, char *thumb,
int thlen);
void BackgroundSetForDesk(Background * bg, unsigned int desk);
Background *BackgroundGetForDesk(unsigned int desk);
void BackgroundsInvalidate(int refresh);
int BackgroundsConfigLoad(FILE * fs);

View File

@ -53,7 +53,6 @@ typedef struct _desktops
Desk *previous;
Desk *desk[ENLIGHTENMENT_CONF_NUM_DESKTOPS];
unsigned int order[ENLIGHTENMENT_CONF_NUM_DESKTOPS];
Background *bg[ENLIGHTENMENT_CONF_NUM_DESKTOPS];
int drag_x0, drag_y0;
}
Desktops;
@ -370,11 +369,7 @@ DeskConfigure(Desk * dsk)
DeskControlsCreate(dsk);
DeskControlsShow(dsk, 1);
bg = desks.bg[dsk->num];
if (bg)
bg = BackgroundCheck(bg);
if (!bg)
bg = BackgroundGetRandom();
bg = BackgroundGetForDesk(dsk->num);
DeskBackgroundSet(dsk, bg);
if (dsk->num > 0)
@ -427,8 +422,6 @@ DeskCreate(int desk, int configure)
EventCallbackRegister(EobjGetWin(eo), 0, DeskHandleEvents, dsk);
dsk->bg.o_bg = eo;
#endif
if (Mode.root.ext_pmap_valid)
dsk->bg.pmap_set = Mode.root.ext_pmap;
#endif
}
else
@ -500,15 +493,6 @@ DeskGetBackgroundWin(const Desk * dsk)
return EobjGetWin(dsk->bg.o);
}
void
DeskBackgroundAssign(unsigned int desk, Background * bg)
{
if (desk >= ENLIGHTENMENT_CONF_NUM_DESKTOPS)
return;
desks.bg[desk] = bg;
}
Background *
DeskBackgroundGet(const Desk * dsk)
{
@ -677,6 +661,7 @@ DeskBackgroundSet(Desk * dsk, Background * bg)
if (!dsk)
return;
BackgroundSetForDesk(bg, dsk->num);
if (bg && BackgroundIsNone(bg))
bg = NULL;

View File

@ -79,8 +79,6 @@ void DeskGotoNum(unsigned int desk);
void DeskRestack(Desk * dsk);
Window DeskGetBackgroundWin(const Desk * dsk);
void DeskBackgroundAssign(unsigned int desk,
struct _background *bg);
struct _background *DeskBackgroundGet(const Desk * dsk);
void DeskBackgroundSet(Desk * dsk, struct _background *bg);

View File

@ -29,7 +29,6 @@
#include "E.h"
#if USE_COMPOSITE
#include "backgrounds.h"
#include "desktops.h"
#include "ecompmgr.h"
#include "emodule.h"