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

View File

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

View File

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

View File

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

View File

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