Assorted refactorizations.

SVN revision: 31016
This commit is contained in:
Kim Woelders 2007-07-27 16:59:50 +00:00
parent dd8a5138b2
commit 11cf892306
26 changed files with 575 additions and 1055 deletions

View File

@ -568,6 +568,8 @@ void EspawnCmd(const char *cmd);
/* config.c */
void SkipTillEnd(FILE * ConfigFile);
char *GetLine(char *s, int size, FILE * f);
int ConfigParseline1(char *str, char *s2, char **p2, char **p3);
void ConfigParseError(const char *where, const char *line);
void ConfigAlertLoad(const char *txt);
char *FindFile(const char *file, const char *themepath,
int localized);
@ -578,7 +580,6 @@ int ConfigFileLoad(const char *name, const char *themepath,
int (*parse) (FILE * fs), int preparse);
int ConfigFileRead(FILE * fs);
int ThemeConfigLoad(void);
void RecoverUserConfig(void);
/* dialog.c */
void DialogOK(const char *title, const char *fmt, ...);

View File

@ -237,6 +237,8 @@ ActionclassFindGlobal(const char *name)
ActionClass *
ActionclassFind(const char *name)
{
if (!name)
return NULL;
return (ActionClass *) ecore_list_find(aclass_list, _ActionclassMatchName,
name);
}
@ -261,8 +263,9 @@ AclassConfigLoad(FILE * fs)
ActionClass *ac = NULL;
Action *aa = NULL;
char s[FILEPATH_LEN_MAX];
int i1;
char s2[FILEPATH_LEN_MAX];
char *p2;
int i1, i2;
char event = 0;
char anymod = 0;
int mod = 0;
@ -270,47 +273,24 @@ AclassConfigLoad(FILE * fs)
int but = 0;
int first = 1;
char anykey = 0;
char *key = NULL;
char key[64];
char *aclass_tooltipstring = NULL;
char *action_tooltipstring = NULL;
char global = 0;
int fields, len2, len;
key[0] = '\0';
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
fields = sscanf(s, "%i %n%4000s %n", &i1, &len2, s2, &len);
if (fields < 1)
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_CLOSE || i1 == CONFIG_NEXT)
{
if (fields != 1)
{
RecoverUserConfig();
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
{
RecoverUserConfig();
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
}
}
i1 = ConfigParseline1(s, s2, &p2, NULL);
i2 = atoi(s2);
switch (i1)
{
case CONFIG_VERSION:
break;
case CONFIG_ACTIONCLASS:
err = -1;
i1 = atoi(s2);
if (i1 != CONFIG_OPEN)
if (i2 != CONFIG_OPEN)
goto done;
ac = NULL;
aa = NULL;
@ -319,7 +299,7 @@ AclassConfigLoad(FILE * fs)
mod = 0;
but = 0;
first = 1;
_EFREE(key);
key[0] = '\0';
break;
case CONFIG_CLOSE:
ac->tooltipstring =
@ -349,7 +329,7 @@ AclassConfigLoad(FILE * fs)
break;
case CONFIG_TYPE:
case ACLASS_TYPE:
if (atoi(s2) == ACLASS_TYPE_ACLASS)
if (i2 == ACLASS_TYPE_ACLASS)
break;
ecore_list_node_remove(aclass_list, ActionclassFind(s2));
ecore_list_prepend(aclass_list_global, ac);
@ -371,7 +351,7 @@ AclassConfigLoad(FILE * fs)
* #define Mod4Mask (1<<6)
* #define Mod5Mask (1<<7)
*/
switch (atoi(s2))
switch (i2)
{
case MASK_NONE:
mod = 0;
@ -445,27 +425,25 @@ AclassConfigLoad(FILE * fs)
break;
case CONFIG_ANYMOD:
case ACLASS_ANYMOD:
anymod = atoi(s2);
anymod = i2;
break;
case CONFIG_ANYBUT:
case ACLASS_ANYBUT:
anybut = atoi(s2);
anybut = i2;
break;
case CONFIG_BUTTON:
case ACLASS_BUT:
but = atoi(s2);
but = i2;
break;
case CONFIG_ANYKEY:
case ACLASS_ANYKEY:
anykey = atoi(s2);
anykey = i2;
break;
case ACLASS_KEY:
if (key)
Efree(key);
key = Estrdup(s2);
STRCPY(key, s2);
break;
case ACLASS_EVENT_TRIGGER:
event = atoi(s2);
event = i2;
break;
case CONFIG_NEXT:
mod = 0;
@ -480,28 +458,22 @@ AclassConfigLoad(FILE * fs)
key, action_tooltipstring);
/* the correct place to grab an action key */
_EFREE(action_tooltipstring);
_EFREE(key);
key[0] = '\0';
if (global)
GrabActionKey(aa);
ActionclassAddAction(ac, aa);
first = 0;
}
ActionAddTo(aa, s + len2);
ActionAddTo(aa, p2);
break;
case CONFIG_ACTION_TOOLTIP:
action_tooltipstring =
Estrdupcat2(action_tooltipstring, "\n", s + len2);
action_tooltipstring = Estrdupcat2(action_tooltipstring, "\n", p2);
break;
case CONFIG_TOOLTIP:
aclass_tooltipstring =
Estrdupcat2(aclass_tooltipstring, "\n", s + len2);
aclass_tooltipstring = Estrdupcat2(aclass_tooltipstring, "\n", p2);
break;
default:
RecoverUserConfig();
Alert(_("Warning: unable to determine what to do with\n"
"the following text in the middle of current "
"ActionClass definition:\n"
"%s\nWill ignore and continue...\n"), s);
ConfigParseError("ActionClass", s);
break;
}
}
@ -512,7 +484,6 @@ AclassConfigLoad(FILE * fs)
done:
_EFREE(aclass_tooltipstring);
_EFREE(action_tooltipstring);
_EFREE(key);
return err;
}
@ -915,15 +886,23 @@ ActionclassSetTooltipString(ActionClass * ac, const char *tts)
_EFDUP(ac->tooltipstring, tts);
}
void
ActionclassIncRefcount(ActionClass * ac)
ActionClass *
ActionclassAlloc(const char *name)
{
ActionClass *ac;
if (!name || !name[0])
return NULL;
ac = ActionclassFind(name);
if (ac)
ac->ref_count++;
return ac;
}
void
ActionclassDecRefcount(ActionClass * ac)
ActionclassFree(ActionClass * ac)
{
if (ac)
ac->ref_count--;

View File

@ -38,8 +38,8 @@ void ActionclassAddAction(ActionClass * ac, Action * aa);
void ActionclassSetTooltipString(ActionClass * ac,
const char *tts);
ActionClass *ActionclassFind(const char *name);
void ActionclassIncRefcount(ActionClass * ac);
void ActionclassDecRefcount(ActionClass * ac);
ActionClass *ActionclassAlloc(const char *name);
void ActionclassFree(ActionClass * ac);
const char *ActionclassGetName(ActionClass * ac);
const char *ActionclassGetTooltipString(ActionClass * ac);
int ActionclassGetActionCount(ActionClass * ac);

View File

@ -1123,7 +1123,6 @@ BackgroundsConfigLoad(FILE * fs)
char *bg2 = 0;
char *name = 0;
char ignore = 0;
int fields;
unsigned int desk;
#if ENABLE_COLOR_MODIFIERS
@ -1134,31 +1133,7 @@ BackgroundsConfigLoad(FILE * fs)
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
ii1 = CONFIG_INVALID;
fields = sscanf(s, "%i %4000s", &ii1, s2);
if (fields < 1)
{
ii1 = CONFIG_INVALID;
}
else if (ii1 == CONFIG_CLOSE)
{
if (fields != 1)
{
RecoverUserConfig();
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
}
else if (ii1 != CONFIG_INVALID)
{
if (fields != 2)
{
RecoverUserConfig();
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
ii1 = CONFIG_INVALID;
}
}
ii1 = ConfigParseline1(s, s2, NULL, NULL);
switch (ii1)
{
case CONFIG_CLOSE:
@ -2376,8 +2351,7 @@ BackgroundSet1(const char *name, const char *params)
{
const char *p = params;
char type[FILEPATH_LEN_MAX];
char valu[FILEPATH_LEN_MAX];
int len;
int len, value;
Background *bg;
XColor xclr;
@ -2397,10 +2371,11 @@ BackgroundSet1(const char *name, const char *params)
}
}
type[0] = valu[0] = '\0';
type[0] = '\0';
len = 0;
sscanf(p, "%400s %4000s %n", type, valu, &len);
sscanf(p, "%400s %n", type, &len);
p += len;
value = atoi(p);
if (!strcmp(type, "bg.solid"))
{
@ -2414,57 +2389,57 @@ BackgroundSet1(const char *name, const char *params)
{
if (bg->bg.file)
Efree(bg->bg.file);
bg->bg.file = Estrdup(valu);
bg->bg.file = Estrdup(p);
}
else if (!strcmp(type, "bg.tile"))
{
bg->bg_tile = atoi(valu);
bg->bg_tile = value;
}
else if (!strcmp(type, "bg.keep_aspect"))
{
bg->bg.keep_aspect = atoi(valu);
bg->bg.keep_aspect = value;
}
else if (!strcmp(type, "bg.xjust"))
{
bg->bg.xjust = atoi(valu);
bg->bg.xjust = value;
}
else if (!strcmp(type, "bg.yjust"))
{
bg->bg.yjust = atoi(valu);
bg->bg.yjust = value;
}
else if (!strcmp(type, "bg.xperc"))
{
bg->bg.xperc = atoi(valu);
bg->bg.xperc = value;
}
else if (!strcmp(type, "bg.yperc"))
{
bg->bg.yperc = atoi(valu);
bg->bg.yperc = value;
}
else if (!strcmp(type, "top.file"))
{
if (bg->top.file)
Efree(bg->top.file);
bg->top.file = Estrdup(valu);
bg->top.file = Estrdup(p);
}
else if (!strcmp(type, "top.keep_aspect"))
{
bg->top.keep_aspect = atoi(valu);
bg->top.keep_aspect = value;
}
else if (!strcmp(type, "top.xjust"))
{
bg->top.xjust = atoi(valu);
bg->top.xjust = value;
}
else if (!strcmp(type, "top.yjust"))
{
bg->top.yjust = atoi(valu);
bg->top.yjust = value;
}
else if (!strcmp(type, "top.xperc"))
{
bg->top.xperc = atoi(valu);
bg->top.xperc = value;
}
else if (!strcmp(type, "top.yperc"))
{
bg->top.yperc = atoi(valu);
bg->top.yperc = value;
}
else
{

View File

@ -406,13 +406,13 @@ EwinBorderCalcSizes(EWin * ewin, int propagate)
EwinPropagateShapes(ewin);
}
void
static void
BorderIncRefcount(const Border * b)
{
((Border *) b)->ref_count++;
}
void
static void
BorderDecRefcount(const Border * b)
{
((Border *) b)->ref_count--;
@ -656,14 +656,10 @@ BorderDestroy(Border * b)
for (i = 0; i < b->num_winparts; i++)
{
if (b->part[i].iclass)
ImageclassDecRefcount(b->part[i].iclass);
if (b->part[i].tclass)
TextclassDecRefcount(b->part[i].tclass);
if (b->part[i].aclass)
ActionclassDecRefcount(b->part[i].aclass);
if (b->part[i].ec)
ECursorDecRefcount(b->part[i].ec);
ImageclassFree(b->part[i].iclass);
ActionclassFree(b->part[i].aclass);
TextclassFree(b->part[i].tclass);
ECursorFree(b->part[i].ec);
}
if (b->num_winparts > 0)
@ -673,8 +669,7 @@ BorderDestroy(Border * b)
Efree(b->name);
if (b->group_border_name)
Efree(b->group_border_name);
if (b->aclass)
ActionclassDecRefcount(b->aclass);
ActionclassFree(b->aclass);
}
static int
@ -689,9 +684,27 @@ BorderFind(const char *name)
return (Border *) ecore_list_find(border_list, _BorderMatchName, name);
}
Border *
BorderAlloc(const char *name)
{
Border *b;
b = BorderFind(name);
if (b)
BorderIncRefcount(b);
return b;
}
void
BorderFree(Border * b)
{
BorderDecRefcount(b);
}
static void
BorderWinpartAdd(Border * b, ImageClass * iclass, ActionClass * aclass,
TextClass * tclass, ECursor * ec, char ontop, int flags,
BorderWinpartAdd(Border * b, const char *iclass, const char *aclass,
const char *tclass, const char *cclass, char ontop, int flags,
char isregion __UNUSED__, int wmin, int wmax, int hmin,
int hmax, int torigin, int txp, int txa, int typ, int tya,
int borigin, int bxp, int bxa, int byp, int bya,
@ -704,24 +717,10 @@ BorderWinpartAdd(Border * b, ImageClass * iclass, ActionClass * aclass,
b->part = EREALLOC(WinPart, b->part, n);
if (!iclass)
iclass = ImageclassFind(NULL, 0);
b->part[n - 1].iclass = iclass;
if (iclass)
ImageclassIncRefcount(iclass);
b->part[n - 1].aclass = aclass;
if (aclass)
ActionclassIncRefcount(aclass);
b->part[n - 1].tclass = tclass;
if (tclass)
TextclassIncRefcount(tclass);
b->part[n - 1].ec = ec;
if (ec)
ECursorIncRefcount(ec);
b->part[n - 1].iclass = (iclass) ? ImageclassAlloc(iclass, 1) : NULL;
b->part[n - 1].aclass = (aclass) ? ActionclassAlloc(aclass) : NULL;
b->part[n - 1].tclass = (tclass) ? TextclassAlloc(tclass, 1) : NULL;
b->part[n - 1].ec = (cclass) ? ECursorAlloc(cclass) : NULL;
b->part[n - 1].ontop = ontop;
b->part[n - 1].flags = flags;
@ -1072,122 +1071,106 @@ BorderPartLoad(FILE * fs, char type __UNUSED__, Border * b)
int err = 0;
char s[FILEPATH_LEN_MAX];
char s2[FILEPATH_LEN_MAX];
int i1;
ImageClass *iclass = 0;
ActionClass *aclass = 0;
TextClass *tclass = 0;
ECursor *ec = NULL;
int i1, i2;
char iclass[64], aclass[64], tclass[64], cclass[64];
char *piclass, *paclass, *ptclass, *pcclass;
char ontop = 1;
int flags = FLAG_BUTTON;
char isregion = 0, keepshade = 1;
int wmin = 0, wmax = 0, hmin = 0, hmax = 0, torigin =
0, txp = 0, txa = 0, typ = 0, tya = 0, borigin = 0;
int bxp = 0, bxa = 0, byp = 0, bya = 0;
int fields;
piclass = paclass = ptclass = pcclass = NULL;
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
fields = sscanf(s, "%i %4000s", &i1, s2);
if (fields < 1)
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
{
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
i1 = CONFIG_INVALID;
}
}
i1 = ConfigParseline1(s, s2, NULL, NULL);
i2 = atoi(s2);
switch (i1)
{
case CONFIG_CLOSE:
BorderWinpartAdd(b, iclass, aclass, tclass, ec, ontop, flags,
isregion, wmin, wmax, hmin, hmax, torigin, txp,
txa, typ, tya, borigin, bxp, bxa, byp, bya,
keepshade);
BorderWinpartAdd(b, piclass, paclass, ptclass, pcclass, ontop,
flags, isregion, wmin, wmax, hmin, hmax,
torigin, txp, txa, typ, tya,
borigin, bxp, bxa, byp, bya, keepshade);
goto done;
case CONFIG_IMAGECLASS:
case BORDERPART_ICLASS:
iclass = ImageclassFind(s2, 1);
STRCPY(iclass, s2);
piclass = iclass;
break;
case CONFIG_ACTIONCLASS:
case BORDERPART_ACLASS:
aclass = ActionclassFind(s2);
STRCPY(aclass, s2);
paclass = aclass;
break;
case CONFIG_TEXT:
case BORDERPART_TEXTCLASS:
tclass = TextclassFind(s2, 1);
STRCPY(tclass, s2);
ptclass = tclass;
break;
case CONFIG_CURSOR:
ec = ECursorFind(s2);
STRCPY(cclass, s2);
pcclass = cclass;
break;
case BORDERPART_ONTOP:
ontop = atoi(s2);
ontop = i2;
break;
case BORDERPART_FLAGS:
flags = atoi(s2);
flags = i2;
break;
case BORDERPART_ISREGION:
isregion = atoi(s2);
isregion = i2;
break;
case BORDERPART_WMIN:
wmin = atoi(s2);
wmin = i2;
if (!wmax)
wmax = wmin;
break;
case BORDERPART_WMAX:
wmax = atoi(s2);
wmax = i2;
break;
case BORDERPART_HMIN:
hmin = atoi(s2);
hmin = i2;
if (!hmax)
hmax = hmin;
break;
case BORDERPART_HMAX:
hmax = atoi(s2);
hmax = i2;
break;
case BORDERPART_TORIGIN:
torigin = atoi(s2);
torigin = i2;
break;
case BORDERPART_TXP:
txp = atoi(s2);
txp = i2;
break;
case BORDERPART_TXA:
txa = atoi(s2);
txa = i2;
break;
case BORDERPART_TYP:
typ = atoi(s2);
typ = i2;
break;
case BORDERPART_TYA:
tya = atoi(s2);
tya = i2;
break;
case BORDERPART_BORIGIN:
borigin = atoi(s2);
borigin = i2;
break;
case BORDERPART_BXP:
bxp = atoi(s2);
bxp = i2;
break;
case BORDERPART_BXA:
bxa = atoi(s2);
bxa = i2;
break;
case BORDERPART_BYP:
byp = atoi(s2);
byp = i2;
break;
case BORDERPART_BYA:
bya = atoi(s2);
bya = i2;
break;
case BORDERPART_KEEPSHADE:
keepshade = atoi(s2);
keepshade = i2;
break;
default:
break;
@ -1205,33 +1188,14 @@ BorderConfigLoad(FILE * fs)
Border *b = 0;
char s[FILEPATH_LEN_MAX];
char s2[FILEPATH_LEN_MAX];
int i1;
int fields;
int i1, i2;
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
fields = sscanf(s, "%i %4000s", &i1, s2);
i1 = ConfigParseline1(s, s2, NULL, NULL);
i2 = atoi(s2);
if (fields < 1)
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
{
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
i1 = CONFIG_INVALID;
}
}
if (atoi(s2) == CONFIG_OPEN)
if (i2 == CONFIG_OPEN)
{
err = BorderPartLoad(fs, i1, b);
if (err)
@ -1258,22 +1222,22 @@ BorderConfigLoad(FILE * fs)
b->group_border_name = Estrdup(s2);
break;
case BORDER_LEFT:
b->border.left = atoi(s2);
b->border.left = i2;
break;
case BORDER_RIGHT:
b->border.right = atoi(s2);
b->border.right = i2;
break;
case BORDER_TOP:
b->border.top = atoi(s2);
b->border.top = i2;
break;
case BORDER_BOTTOM:
b->border.bottom = atoi(s2);
b->border.bottom = i2;
break;
case SHADEDIR:
b->shadedir = atoi(s2);
b->shadedir = i2;
break;
case BORDER_CHANGES_SHAPE:
b->changes_shape = atoi(s2);
b->changes_shape = i2;
break;
case CONFIG_ACTIONCLASS:
b->aclass = ActionclassFind(s2);
@ -1293,9 +1257,6 @@ Border *
BorderCreateFiller(int left, int right, int top, int bottom)
{
Border *b;
ImageClass *ic;
ic = ImageclassFind("__BLACK", 1);
b = BorderCreate("__FILLER");
b->throwaway = 1;
@ -1306,20 +1267,20 @@ BorderCreateFiller(int left, int right, int top, int bottom)
b->border.bottom = bottom;
if (top)
BorderWinpartAdd(b, ic, NULL, NULL, NULL, 1, FLAG_BUTTON, 0,
BorderWinpartAdd(b, "__BLACK", NULL, NULL, NULL, 1, FLAG_BUTTON, 0,
1, 99999, 1, 99999,
-1, 0, 0, 0, 0, -1, 1024, -1, 0, top - 1, 1);
if (bottom)
BorderWinpartAdd(b, ic, NULL, NULL, NULL, 1, FLAG_BUTTON, 0,
BorderWinpartAdd(b, "__BLACK", NULL, NULL, NULL, 1, FLAG_BUTTON, 0,
1, 99999, 1, 99999,
-1, 0, 0, 1024, -bottom, -1, 1024, -1, 1024, -1, 1);
if (left)
BorderWinpartAdd(b, ic, NULL, NULL, NULL, 1, FLAG_BUTTON, 0,
BorderWinpartAdd(b, "__BLACK", NULL, NULL, NULL, 1, FLAG_BUTTON, 0,
1, 99999, 1, 99999,
-1, 0, 0, 0, top,
-1, 0, left - 1, 1024, -(bottom + 1), 1);
if (right)
BorderWinpartAdd(b, ic, NULL, NULL, NULL, 1, FLAG_BUTTON, 0,
BorderWinpartAdd(b, "__BLACK", NULL, NULL, NULL, 1, FLAG_BUTTON, 0,
1, 99999, 1, 99999,
-1, 1024, -right, 0, top,
-1, 1024, -1, 1024, -(bottom + 1), 1);
@ -1362,12 +1323,16 @@ BordersSetupFallback(void)
b->border.right = 8;
b->border.top = 8;
b->border.bottom = 8;
BorderWinpartAdd(b, ic, ac, NULL, NULL, 1, FLAG_BUTTON, 0, 8, 99999, 8,
99999, -1, 0, 0, 0, 0, -1, 1024, -1, 0, 7, 1);
BorderWinpartAdd(b, ic, ac, NULL, NULL, 1, FLAG_BUTTON, 0, 8, 99999, 8,
99999, -1, 0, 0, 1024, -8, -1, 1024, -1, 1024, -1, 1);
BorderWinpartAdd(b, ic, ac, NULL, NULL, 1, FLAG_BUTTON, 0, 8, 99999, 8,
99999, -1, 0, 0, 0, 8, -1, 0, 7, 1024, -9, 1);
BorderWinpartAdd(b, ic, ac, NULL, NULL, 1, FLAG_BUTTON, 0, 8, 99999, 8,
99999, -1, 1024, -8, 0, 8, -1, 1024, -1, 1024, -9, 1);
BorderWinpartAdd(b, "__FALLBACK_ICLASS", "__FALLBACK_ACTION", NULL, NULL,
1, FLAG_BUTTON, 0, 8, 99999, 8, 99999, -1, 0, 0, 0, 0,
-1, 1024, -1, 0, 7, 1);
BorderWinpartAdd(b, "__FALLBACK_ICLASS", "__FALLBACK_ACTION", NULL, NULL,
1, FLAG_BUTTON, 0, 8, 99999, 8, 99999, -1, 0, 0, 1024,
-8, -1, 1024, -1, 1024, -1, 1);
BorderWinpartAdd(b, "__FALLBACK_ICLASS", "__FALLBACK_ACTION", NULL, NULL,
1, FLAG_BUTTON, 0, 8, 99999, 8, 99999, -1, 0, 0, 0, 8,
-1, 0, 7, 1024, -9, 1);
BorderWinpartAdd(b, "__FALLBACK_ICLASS", "__FALLBACK_ACTION", NULL, NULL,
1, FLAG_BUTTON, 0, 8, 99999, 8, 99999, -1, 1024, -8, 0,
8, -1, 1024, -1, 1024, -9, 1);
}

View File

@ -89,8 +89,8 @@ struct _ewinbit
/* borders.c */
Border *BorderFind(const char *name);
void BorderIncRefcount(const Border * b);
void BorderDecRefcount(const Border * b);
Border *BorderAlloc(const char *name);
void BorderFree(Border * b);
const char *BorderGetName(const Border * b);
int BorderConfigLoad(FILE * fs);
void EwinBorderSelect(EWin * ewin);

View File

@ -88,6 +88,7 @@ static struct
static void ButtonHandleEvents(Win win, XEvent * ev, void *btn);
#if 0 /* Unused */
void
ButtonIncRefcount(Button * b)
{
@ -99,6 +100,7 @@ ButtonDecRefcount(Button * b)
{
b->ref_count--;
}
#endif
static int
ButtonIsFixed(const Button * b)
@ -113,8 +115,8 @@ ButtonIsInternal(const Button * b)
}
Button *
ButtonCreate(const char *name, int id, ImageClass * iclass,
ActionClass * aclass, TextClass * tclass, const char *label,
ButtonCreate(const char *name, int id, const char *iclass,
const char *aclass, const char *tclass, const char *label,
char ontop, int flags, int minw, int maxw, int minh, int maxh,
int xo, int yo, int xa, int xr, int ya, int yr, int xsr, int xsa,
int ysr, int ysa, char simg, int desk, char sticky)
@ -136,21 +138,10 @@ ButtonCreate(const char *name, int id, ImageClass * iclass,
b->id = id;
b->label = Estrdup(label);
b->iclass = iclass;
if (!b->iclass)
b->iclass = ImageclassFind(NULL, 0);
if (b->iclass)
ImageclassIncRefcount(b->iclass);
b->aclass = aclass;
if (b->aclass)
ActionclassIncRefcount(b->aclass);
b->tclass = tclass;
if (!b->tclass && b->label)
b->tclass = TextclassFind(NULL, 0);
if (b->tclass)
TextclassIncRefcount(b->tclass);
b->iclass = ImageclassAlloc(iclass, 1);
b->aclass = ActionclassAlloc(aclass);
if (b->label)
b->tclass = TextclassAlloc(tclass, 1);
b->flags = flags;
b->geom.width.min = minw;
@ -198,14 +189,9 @@ ButtonDestroy(Button * b)
EoFini(b);
if (b->iclass)
ImageclassDecRefcount(b->iclass);
if (b->aclass)
ActionclassDecRefcount(b->aclass);
if (b->tclass)
TextclassDecRefcount(b->tclass);
ImageclassFree(b->iclass);
ActionclassFree(b->aclass);
TextclassFree(b->tclass);
if (b->label)
Efree(b->label);
@ -246,7 +232,7 @@ ButtonCalc(Button * b)
else
{
if (!b->iclass)
b->iclass = ImageclassFind(NULL, 0);
b->iclass = ImageclassAlloc(NULL, 1);
w = 32;
h = 32;
}
@ -670,17 +656,15 @@ ButtonHandleEvents(Win win __UNUSED__, XEvent * ev, void *prm)
#include "conf.h"
int
ButtonsConfigLoad(FILE * ConfigFile)
ButtonsConfigLoad(FILE * fs)
{
int err = 0;
char s[FILEPATH_LEN_MAX];
char s2[FILEPATH_LEN_MAX];
int i1;
char *name = NULL;
char *label = NULL;
ActionClass *ac = NULL;
ImageClass *ic = NULL;
TextClass *tc = NULL;
char *p2;
int i1, i2;
char name[64], label[64];
char iclass[64], aclass[64], tclass[64];
Button *bt = NULL;
Button *pbt = NULL;
char ontop = 0;
@ -693,185 +677,136 @@ ButtonsConfigLoad(FILE * ConfigFile)
char sticky = 0;
char show = 1;
char internal = 0;
int fields, len;
while (GetLine(s, sizeof(s), ConfigFile))
name[0] = label[0] = '\0';
iclass[0] = aclass[0] = tclass[0] = '\0';
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
len = 0;
fields = sscanf(s, "%i %4000s %n", &i1, s2, &len);
if (fields < 1)
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
{
RecoverUserConfig();
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
{
RecoverUserConfig();
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
i1 = CONFIG_INVALID;
}
}
i1 = ConfigParseline1(s, s2, &p2, NULL);
i2 = atoi(s2);
switch (i1)
{
case CONFIG_CLOSE:
if (!pbt && !Mode_buttons.loading_user)
{
bt = ButtonCreate(name, 0, ic, ac, tc, label, ontop, flags,
minw, maxw, minh, maxh, xo, yo, xa, xr,
ya, yr, xsr, xsa, ysr, ysa, simg, desk,
sticky);
bt = ButtonCreate(name, 0, iclass, aclass, tclass, label,
ontop, flags, minw, maxw, minh, maxh,
xo, yo, xa, xr, ya, yr, xsr, xsa, ysr, ysa,
simg, desk, sticky);
bt->default_show = show;
bt->internal = internal;
}
goto done;
case CONFIG_TEXT:
tc = TextclassFind(s2, 1);
if (pbt)
pbt->tclass = tc;
break;
case BUTTON_LABEL:
_EFREE(label);
label = Estrdup(s + len);
if (pbt)
else if (pbt)
{
_EFREE(pbt->label);
pbt->label = label;
_EFDUP(pbt->label, label);
EoSetLayer(pbt, ontop);
EoSetSticky(pbt, sticky);
ButtonMoveToDesktop(pbt, DeskGet(desk));
pbt->iclass = ImageclassFind(iclass, 1);
pbt->aclass = ActionclassFind(aclass);
pbt->tclass = TextclassFind(tclass, 1);
pbt->flags = flags;
pbt->internal = internal;
pbt->default_show = show;
pbt->geom.width.min = minw;
pbt->geom.width.max = maxw;
pbt->geom.height.min = minh;
pbt->geom.height.max = maxh;
pbt->geom.xorigin = xo;
pbt->geom.yorigin = yo;
pbt->geom.xabs = xa;
pbt->geom.xrel = xr;
pbt->geom.yabs = ya;
pbt->geom.yrel = yr;
pbt->geom.xsizerel = xsr;
pbt->geom.xsizeabs = xsa;
pbt->geom.ysizerel = ysr;
pbt->geom.ysizeabs = ysa;
pbt->geom.size_from_image = simg;
}
break;
case BORDERPART_ONTOP:
ontop = atoi(s2);
if (pbt)
EoSetLayer(pbt, ontop);
break;
goto done;
case CONFIG_CLASSNAME:
case BUTTON_NAME:
_EFREE(name);
name = Estrdup(s2);
STRCPY(name, s2);
pbt = ButtonFind(name);
break;
case CONFIG_ACTIONCLASS:
case BUTTON_ACLASS:
ac = ActionclassFind(s2);
if (pbt)
pbt->aclass = ac;
case BUTTON_LABEL:
STRCPY(label, s2);
break;
case CONFIG_IMAGECLASS:
case BUTTON_ICLASS:
ic = ImageclassFind(s2, 1);
if (pbt)
pbt->iclass = ic;
STRCPY(iclass, s2);
break;
case CONFIG_ACTIONCLASS:
case BUTTON_ACLASS:
STRCPY(aclass, s2);
break;
case CONFIG_TEXT:
STRCPY(tclass, s2);
break;
case BORDERPART_ONTOP:
ontop = i2;
break;
case BORDERPART_WMIN:
minw = atoi(s2);
if (pbt)
pbt->geom.width.min = minw;
minw = i2;
break;
case BORDERPART_WMAX:
maxw = atoi(s2);
if (pbt)
pbt->geom.width.max = maxw;
maxw = i2;
break;
case BORDERPART_HMIN:
minh = atoi(s2);
if (pbt)
pbt->geom.height.min = minh;
minh = i2;
break;
case BORDERPART_FLAGS:
flags = atoi(s2);
if (pbt)
pbt->flags = flags;
flags = i2;
break;
case BORDERPART_HMAX:
maxh = atoi(s2);
if (pbt)
pbt->geom.height.max = maxh;
maxh = i2;
break;
case BUTTON_XO:
xo = atoi(s2);
if (pbt)
pbt->geom.xorigin = xo;
xo = i2;
break;
case BUTTON_YO:
yo = atoi(s2);
if (pbt)
pbt->geom.yorigin = yo;
yo = i2;
break;
case BUTTON_XA:
xa = atoi(s2);
if (pbt)
pbt->geom.xabs = xa;
xa = i2;
break;
case BUTTON_XR:
xr = atoi(s2);
if (pbt)
pbt->geom.xrel = xr;
xr = i2;
break;
case BUTTON_YA:
ya = atoi(s2);
if (pbt)
pbt->geom.yabs = ya;
ya = i2;
break;
case BUTTON_YR:
yr = atoi(s2);
if (pbt)
pbt->geom.yrel = yr;
yr = i2;
break;
case BUTTON_XSR:
xsr = atoi(s2);
if (pbt)
pbt->geom.xsizerel = xsr;
xsr = i2;
break;
case BUTTON_XSA:
xsa = atoi(s2);
if (pbt)
pbt->geom.xsizeabs = xsa;
xsa = i2;
break;
case BUTTON_YSR:
ysr = atoi(s2);
if (pbt)
pbt->geom.ysizerel = ysr;
ysr = i2;
break;
case BUTTON_YSA:
ysa = atoi(s2);
if (pbt)
pbt->geom.ysizeabs = ysa;
ysa = i2;
break;
case BUTTON_SIMG:
simg = atoi(s2);
if (pbt)
pbt->geom.size_from_image = simg;
simg = i2;
break;
case BUTTON_DESK:
desk = atoi(s2);
if (pbt)
ButtonMoveToDesktop(pbt, DeskGet(desk));
desk = i2;
break;
case BUTTON_STICKY:
sticky = atoi(s2);
if (pbt)
EoSetSticky(pbt, sticky);
sticky = i2;
break;
case BUTTON_INTERNAL:
internal = atoi(s2);
if (pbt)
pbt->internal = internal;
internal = i2;
break;
case BUTTON_SHOW:
show = atoi(s2);
if (pbt)
pbt->default_show = show;
show = i2;
break;
default:
break;
@ -880,9 +815,6 @@ ButtonsConfigLoad(FILE * ConfigFile)
err = -1;
done:
_EFREE(name);
_EFREE(label);
return err;
}

View File

@ -30,9 +30,8 @@
typedef void (ButtonCbFunc) (EObj * eo, XEvent * ev, ActionClass * ac);
/* buttons.c */
Button *ButtonCreate(const char *name, int id,
ImageClass * ic,
ActionClass * ac, TextClass * tc,
Button *ButtonCreate(const char *name, int id, const char *iclass,
const char *aclass, const char *tclass,
const char *label, char ontop, int flags,
int minw, int maxw, int minh, int maxh, int xo,
int yo, int xa, int xr, int ya, int yr,
@ -44,8 +43,6 @@ void ButtonShow(Button * b);
void ButtonHide(Button * b);
void ButtonMoveToCoord(Button * b, int x, int y);
void ButtonMoveRelative(Button * b, int dx, int dy);
void ButtonIncRefcount(Button * b);
void ButtonDecRefcount(Button * b);
void ButtonSwallowInto(Button * b, EObj * eo);
void ButtonSetCallback(Button * b, ButtonCbFunc * func,
EObj * eo);

View File

@ -167,6 +167,7 @@ ColorModifierConfigLoad(FILE * fs)
int err = 0;
char s[FILEPATH_LEN_MAX];
char s2[FILEPATH_LEN_MAX];
char *p2;
int i1;
char *name = NULL;
const char *params = NULL;
@ -180,36 +181,10 @@ ColorModifierConfigLoad(FILE * fs)
int i = 0, tx, ty;
int rnum = 0, gnum = 0, bnum = 0;
ColorModifierClass *cm;
int fields, len2;
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i = 0;
i1 = CONFIG_INVALID;
len2 = 0;
fields = sscanf(s, "%i %n%4000s", &i1, &len2, s2);
if (fields < 1)
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
{
RecoverUserConfig();
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
{
RecoverUserConfig();
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
}
}
i1 = ConfigParseline1(s, s2, &p2, NULL);
switch (i1)
{
case CONFIG_CLOSE:
@ -231,7 +206,7 @@ ColorModifierConfigLoad(FILE * fs)
name = Estrdup(s2);
break;
case COLORMOD_RED:
params = (s[len2]) ? s + len2 : NULL;
params = p2;
current_param = params;
if (!current_param)
goto done;
@ -263,7 +238,7 @@ ColorModifierConfigLoad(FILE * fs)
rnum = i;
break;
case COLORMOD_GREEN:
params = (s[len2]) ? s + len2 : NULL;
params = p2;
current_param = params;
if (!current_param)
goto done;
@ -295,7 +270,7 @@ ColorModifierConfigLoad(FILE * fs)
gnum = i;
break;
case COLORMOD_BLUE:
params = (s[len2]) ? s + len2 : NULL;
params = p2;
current_param = params;
if (!current_param)
goto done;
@ -327,11 +302,7 @@ ColorModifierConfigLoad(FILE * fs)
bnum = i;
break;
default:
RecoverUserConfig();
Alert(_("Warning: unable to determine what to do with\n"
"the following text in the middle of current "
" ColorModifier definition:\n"
"%s\nWill ignore and continue...\n"), s);
ConfigParseError("ColorModifier", s);
break;
}
}

View File

@ -38,19 +38,19 @@
#include "windowmatch.h"
void
SkipTillEnd(FILE * ConfigFile)
SkipTillEnd(FILE * fs)
{
char s[FILEPATH_LEN_MAX];
int i1, i2, fields;
while (GetLine(s, sizeof(s), ConfigFile))
while (GetLine(s, sizeof(s), fs))
{
i1 = i2 = 0;
fields = sscanf(s, "%i %i", &i1, &i2);
if (i1 == CONFIG_CLOSE)
return;
if (i2 == CONFIG_OPEN)
SkipTillEnd(ConfigFile);
SkipTillEnd(fs);
}
}
@ -170,10 +170,54 @@ GetLine(char *s, int size, FILE * f)
return s;
}
int
ConfigParseline1(char *str, char *s2, char **p2, char **p3)
{
int i1, len1, len2, fields;
i1 = CONFIG_INVALID;
len1 = len2 = 0;
s2[0] = '\0';
fields = sscanf(str, "%i %n%4000s %n", &i1, &len1, s2, &len2);
if (p2)
*p2 = (len1) ? str + len1 : NULL;
if (p3)
*p3 = (len2) ? str + len2 : NULL;
if (fields <= 0)
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_CLOSE || i1 == CONFIG_NEXT)
{
if (fields != 1)
{
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), str);
}
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
{
i1 = CONFIG_INVALID;
Alert(_("CONFIG: missing required data in \"%s\"\n"), str);
}
}
return i1;
}
void
ConfigParseError(const char *where, const char *line)
{
Alert(_("Warning: unable to determine what to do with\n"
"the following text in the middle of current %s definition:\n"
"%s\nWill ignore and continue...\n"), where, line);
}
void
ConfigAlertLoad(const char *txt)
{
RecoverUserConfig();
Alert(_("Warning: Configuration error in %s block.\n"
"Outcome is likely not good.\n"), txt);
}
@ -235,7 +279,9 @@ ConfigFileRead(FILE * fs)
fields = sscanf(s, "%i %i", &i1, &i2);
if (fields < 1)
i1 = CONFIG_INVALID;
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_VERSION)
{
if (fields == 2)
@ -245,7 +291,6 @@ ConfigFileRead(FILE * fs)
{
if (fields != 1)
{
RecoverUserConfig();
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
}
@ -253,8 +298,8 @@ ConfigFileRead(FILE * fs)
{
if (fields != 2)
{
RecoverUserConfig();
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
i1 = CONFIG_INVALID;
}
}
@ -585,26 +630,3 @@ ThemeConfigLoad(void)
return 0;
}
void
RecoverUserConfig(void)
{
int save;
/* Don't save settings if we restart or quit */
save = Conf.autosave;
Conf.autosave = 0;
AlertX(_("Recover system config?"), _("Yes, Attempt recovery"),
_("Restart and try again"), _("Quit and give up"),
_
("Enlightenment has encountered parsing errors in your autosaved\n"
"configuration.\n" "\n"
"This may be due to filing system errors, Minor bugs or "
"unforeseen\n" "system shutdowns.\n" "\n"
"Do you wish Enlightenment to recover its original system\n"
"configuration and try again?\n"));
/* Allow settings to be saved if we continue */
Conf.autosave = save;
}

View File

@ -1752,39 +1752,27 @@ ContainersConfigLoad(void)
char s[FILEPATH_LEN_MAX];
char s2[FILEPATH_LEN_MAX];
int i1, i2;
int fields;
Container *ct;
Container *ct, ct_dummy;
Esnprintf(s, sizeof(s), "%s.ibox", EGetSavePrefix());
fs = fopen(s, "r");
if (!fs)
return;
ct = NULL;
ct = &ct_dummy;
while (fgets(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
fields = sscanf(s, "%i %4000s", &i1, s2);
if (fields < 1)
i1 = CONFIG_INVALID;
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
i1 = ConfigParseline1(s, s2, NULL, NULL);
i2 = atoi(s2);
switch (i1)
{
case CONFIG_IBOX:
err = -1;
i2 = atoi(s2);
if (i2 != CONFIG_OPEN)
goto done;
break;
case CONFIG_CLOSE:
ct = NULL;
ct = &ct_dummy;
err = 0;
break;
@ -1795,56 +1783,43 @@ ContainersConfigLoad(void)
ct = ContainerCreate(s2);
break;
case TEXT_ORIENTATION: /* __ORIENTATION [ __HORIZONTAL | __VERTICAL ] */
if (ct)
ct->orientation = (char)atoi(s2);
ct->orientation = i2;
break;
case CONFIG_TRANSPARENCY: /* __TRANSPARENCY [ __ON | __OFF ] */
if (ct)
ct->nobg = (char)atoi(s2);
ct->nobg = i2;
break;
case CONFIG_SHOW_NAMES: /* __SHOW_NAMES [ __ON | __OFF ] */
if (ct)
ct->shownames = (char)atoi(s2);
ct->shownames = i2;
break;
case CONFIG_ICON_SIZE: /* __ICON_SIZE %i */
if (ct)
ct->iconsize = (int)atoi(s2);
ct->iconsize = i2;
break;
case CONFIG_ICON_MODE: /* __ICON_MODE [ 0 | 1 | 2 | 3 | 4 ] */
if (ct)
ct->icon_mode = (int)atoi(s2);
ct->icon_mode = i2;
break;
case CONFIG_SCROLLBAR_SIDE: /* __SCROLLBAR_SIDE [ __BAR_LEFT/__BAR_TOP | __BAR_RIGHT/__BAR_BOTTOM ] */
if (ct)
ct->scrollbar_side = (char)atoi(s2);
ct->scrollbar_side = i2;
break;
case CONFIG_SCROLLBAR_ARROWS: /* __SCROLLBAR_ARROWS [ __START | __BOTH | __FINISH | __NEITHER ] */
if (ct)
ct->arrow_side = (char)atoi(s2);
ct->arrow_side = i2;
break;
case CONFIG_AUTOMATIC_RESIZE: /* __AUTOMATIC_RESIZE [ __ON | __OFF ] */
if (ct)
ct->auto_resize = (char)atoi(s2);
ct->auto_resize = i2;
break;
case CONFIG_SHOW_ICON_BASE: /* __SHOW_ICON_BASE [ __ON | __OFF ] */
if (ct)
ct->draw_icon_base = (char)atoi(s2);
ct->draw_icon_base = i2;
break;
case CONFIG_SCROLLBAR_AUTOHIDE: /* __SCROLLBAR_AUTOHIDE [ __ON | __OFF ] */
if (ct)
ct->scrollbar_hide = (char)atoi(s2);
ct->scrollbar_hide = i2;
break;
case CONFIG_COVER_HIDE: /* __COVER_HIDE [ __ON | __OFF ] */
if (ct)
ct->cover_hide = (char)atoi(s2);
ct->cover_hide = i2;
break;
case CONFIG_RESIZE_ANCHOR: /* __RESIZE_ANCHOR 0-1024 */
if (ct)
ct->auto_resize_anchor = atoi(s2);
ct->auto_resize_anchor = i2;
break;
case CONFIG_IB_ANIMATE: /* __ICONBOX_ANIMATE [ 0 | 1 | 2 ] */
if (ct)
ct->anim_mode = atoi(s2);
ct->anim_mode = i2;
break;
default:
Eprintf("Warning: Iconbox configuration, ignoring: %s\n", s);

View File

@ -35,9 +35,6 @@ struct _ecursor
char *file;
Cursor cursor;
unsigned int ref_count;
#if 0 /* Not used */
char inroot;
#endif
};
static Ecore_List *cursor_list = NULL;
@ -105,9 +102,6 @@ ECursorCreate(const char *name, const char *image, int native_id, XColor * fg,
ec->file = Estrdup(image);
ec->cursor = curs;
ec->ref_count = 0;
#if 0 /* Not used */
ec->inroot = 0;
#endif
if (!cursor_list)
cursor_list = ecore_list_new();
@ -146,9 +140,33 @@ _ECursorMatchName(const void *data, const void *match)
ECursor *
ECursorFind(const char *name)
{
if (!name || !name[0])
return NULL;
return (ECursor *) ecore_list_find(cursor_list, _ECursorMatchName, name);
}
ECursor *
ECursorAlloc(const char *name)
{
ECursor *ec;
if (!name)
return NULL;
ec = ECursorFind(name);
if (ec)
ec->ref_count++;
return ec;
}
void
ECursorFree(ECursor * ec)
{
if (ec)
ec->ref_count--;
}
static int
ECursorConfigLoad(FILE * fs)
{
@ -156,35 +174,17 @@ ECursorConfigLoad(FILE * fs)
XColor xclr, xclr2;
char s[FILEPATH_LEN_MAX];
char s2[FILEPATH_LEN_MAX];
char *p2;
int i1, i2, r, g, b;
char *file = NULL, *name = NULL;
char name[FILEPATH_LEN_MAX], *pname;
char file[FILEPATH_LEN_MAX], *pfile;
int native_id = -1;
int fields;
pname = pfile = NULL;
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
fields = sscanf(s, "%i %4000s", &i1, s2);
if (fields < 1)
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
{
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
continue;
}
}
i1 = ConfigParseline1(s, s2, &p2, NULL);
switch (i1)
{
case CONFIG_CURSOR:
@ -194,12 +194,11 @@ ECursorConfigLoad(FILE * fs)
goto done;
ESetColor(&xclr, 0, 0, 0);
ESetColor(&xclr2, 255, 255, 255);
_EFREE(file);
_EFREE(name);
pname = pfile = NULL;
native_id = -1;
break;
case CONFIG_CLOSE:
ECursorCreate(name, file, native_id, &xclr, &xclr2);
ECursorCreate(pname, pfile, native_id, &xclr, &xclr2);
err = 0;
break;
@ -209,23 +208,25 @@ ECursorConfigLoad(FILE * fs)
SkipTillEnd(fs);
goto done;
}
_EFDUP(name, s2);
strcpy(name, s2);
pname = name;
break;
case CURS_BG_RGB:
r = g = b = 0;
sscanf(s, "%4000s %d %d %d", s2, &r, &g, &b);
sscanf(p2, "%d %d %d", &r, &g, &b);
ESetColor(&xclr, r, g, b);
break;
case CURS_FG_RGB:
r = g = b = 255;
sscanf(s, "%4000s %d %d %d", s2, &r, &g, &b);
sscanf(p2, "%d %d %d", &r, &g, &b);
ESetColor(&xclr2, r, g, b);
break;
case XBM_FILE:
_EFDUP(file, s2);
strcpy(file, s2);
pfile = file;
break;
case NATIVE_ID:
sscanf(s, "%4000s %d", s2, &native_id);
native_id = atoi(s2);
break;
default:
break;
@ -236,9 +237,6 @@ ECursorConfigLoad(FILE * fs)
if (err)
ConfigAlertLoad("Cursor");
_EFREE(name);
_EFREE(file);
return err;
}
@ -248,10 +246,6 @@ ECursorApply(ECursor * ec, Win win)
if (!ec)
return;
XDefineCursor(disp, WinGetXwin(win), ec->cursor);
#if 0 /* Not used */
if (win == VRoot.xwin)
ec->inroot = 1;
#endif
}
static Cursor
@ -259,40 +253,15 @@ ECursorGetByName(const char *name, const char *name2, unsigned int fallback)
{
ECursor *ec;
ec = ECursorFind(name);
ec = ECursorAlloc(name);
if (!ec && name2)
ec = ECursorFind(name2);
ec = ECursorAlloc(name2);
if (ec)
{
ECursorIncRefcount(ec);
return ec->cursor;
}
return ec->cursor;
return XCreateFontCursor(disp, fallback);
}
void
ECursorIncRefcount(ECursor * ec)
{
if (ec)
ec->ref_count++;
}
void
ECursorDecRefcount(ECursor * ec)
{
if (ec)
ec->ref_count--;
}
#if 0 /* Not used */
static int
ECursorGetRefcount(ECursor * ec)
{
return (ec) ? ec->ref_count : 0;
}
#endif
static Cursor ECsrs[ECSR_COUNT];
Cursor

View File

@ -42,9 +42,9 @@
#define ECSR_COUNT 12
ECursor *ECursorFind(const char *name);
ECursor *ECursorAlloc(const char *name);
void ECursorFree(ECursor * ec);
void ECursorApply(ECursor * ec, Win win);
void ECursorIncRefcount(ECursor * ec);
void ECursorDecRefcount(ECursor * ec);
Cursor ECsrGet(int which);
void ECsrApply(int which, Window win);

View File

@ -77,9 +77,10 @@ static void
DeskControlsCreate(Desk * dsk)
{
char s[512];
ActionClass *ac, *ac2, *ac3;
ImageClass *ic, *ic2, *ic3;
const char *ic1, *ic2, *ic3;
char ac1[64], ac2[64], ac3[64];
Button *b;
ActionClass *ac;
Action *a;
int x[3], y[3], w[3], h[3], m, n, o;
const char *t;
@ -97,11 +98,10 @@ DeskControlsCreate(Desk * dsk)
else if (Conf.desks.dragbar_length > VRoot.w)
Conf.desks.dragbar_length = VRoot.w;
Esnprintf(s, sizeof(s), "DRAGBAR_DESKTOP_%i", dsk->num);
ac = ActionclassFind(s);
if (!ac)
Esnprintf(ac1, sizeof(ac1), "DRAGBAR_DESKTOP_%i", dsk->num);
if (!ActionclassFind(ac1))
{
ac = ActionclassCreate(s, 0);
ac = ActionclassCreate(ac1, 0);
a = ActionCreate(EVENT_MOUSE_DOWN, 0, 0, 0, 1, 0, NULL, NULL);
ActionclassAddAction(ac, a);
@ -139,50 +139,48 @@ DeskControlsCreate(Desk * dsk)
}
}
Esnprintf(s, sizeof(s), "RAISEBUTTON_DESKTOP_%i", dsk->num);
ac2 = ActionclassFind(s);
if (!ac2)
Esnprintf(ac2, sizeof(ac2), "RAISEBUTTON_DESKTOP_%i", dsk->num);
if (!ActionclassFind(ac2))
{
ac2 = ActionclassCreate(s, 0);
ac = ActionclassCreate(ac2, 0);
a = ActionCreate(EVENT_MOUSE_UP, 1, 0, 1, 0, 0, NULL, NULL);
ActionclassAddAction(ac2, a);
ActionclassAddAction(ac, a);
Esnprintf(s, sizeof(s), "desk raise %i", dsk->num);
ActionAddTo(a, s);
t = _("Click here to raise this desktop\nto the top.\n");
ActionclassSetTooltipString(ac2, t);
ActionclassSetTooltipString(ac, t);
}
Esnprintf(s, sizeof(s), "LOWERBUTTON_DESKTOP_%i", dsk->num);
ac3 = ActionclassFind(s);
if (!ac3)
Esnprintf(ac3, sizeof(ac3), "LOWERBUTTON_DESKTOP_%i", dsk->num);
if (!ActionclassFind(ac3))
{
ac3 = ActionclassCreate(s, 0);
ac = ActionclassCreate(ac3, 0);
a = ActionCreate(EVENT_MOUSE_UP, 1, 0, 1, 0, 0, NULL, NULL);
ActionclassAddAction(ac3, a);
ActionclassAddAction(ac, a);
Esnprintf(s, sizeof(s), "desk lower %i", dsk->num);
ActionAddTo(a, s);
t = _("Click here to lower this desktop\nto the bottom.\n");
ActionclassSetTooltipString(ac3, t);
ActionclassSetTooltipString(ac, t);
}
if (Conf.desks.dragdir < 2)
{
ic = ImageclassFind("DESKTOP_DRAGBUTTON_VERT", 0);
ic2 = ImageclassFind("DESKTOP_RAISEBUTTON_VERT", 0);
ic3 = ImageclassFind("DESKTOP_LOWERBUTTON_VERT", 0);
ic1 = "DESKTOP_DRAGBUTTON_VERT";
ic2 = "DESKTOP_RAISEBUTTON_VERT";
ic3 = "DESKTOP_LOWERBUTTON_VERT";
#if 0
ic4 = ImageclassFind("DESKTOP_DESKRAY_VERT", 0);
ic4 = "DESKTOP_DESKRAY_VERT";
#endif
}
else
{
ic = ImageclassFind("DESKTOP_DRAGBUTTON_HORIZ", 0);
ic2 = ImageclassFind("DESKTOP_RAISEBUTTON_HORIZ", 0);
ic3 = ImageclassFind("DESKTOP_LOWERBUTTON_HORIZ", 0);
ic1 = "DESKTOP_DRAGBUTTON_HORIZ";
ic2 = "DESKTOP_RAISEBUTTON_HORIZ";
ic3 = "DESKTOP_LOWERBUTTON_HORIZ";
#if 0
ic4 = ImageclassFind("DESKTOP_DESKRAY_HORIZ", 0);
ic4 = "DESKTOP_DESKRAY_HORIZ";
#endif
}
@ -284,7 +282,7 @@ DeskControlsCreate(Desk * dsk)
b = ButtonCreate("_DESKTOP_DRAG_CONTROL", 1, ic3, ac3, NULL, NULL,
-1, FLAG_FIXED, 1, 99999, 1, 99999, 0, 0, x[1], 0,
y[1], 0, 0, w[1], 0, h[1], 0, dsk->num, 0);
b = ButtonCreate("_DESKTOP_DRAG_CONTROL", 1, ic, ac, NULL, NULL,
b = ButtonCreate("_DESKTOP_DRAG_CONTROL", 1, ic1, ac1, NULL, NULL,
-1, FLAG_FIXED, 1, 99999, 1, 99999, 0, 0, x[2], 0,
y[2], 0, 0, w[2], 0, h[2], 0, dsk->num, 0);
ButtonSetCallback(b, DeskButtonCallback, EoObj(dsk));
@ -295,14 +293,14 @@ DeskControlsCreate(Desk * dsk)
{
if (Conf.desks.dragdir == 0)
{
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac,
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac1,
NULL, NULL, 1, FLAG_FIXED_VERT, 1, 99999, 1,
99999, 0, 0, EoGetX(dsk), 0, EoGetY(dsk),
0, 0, 0, 0, 0, 1, 0, 1);
}
else if (Conf.desks.dragdir == 1)
{
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac,
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac1,
NULL, NULL, 1, FLAG_FIXED_VERT, 1, 99999, 1,
99999, 0, 0,
EoGetX(dsk) + VRoot.w -
@ -311,14 +309,14 @@ DeskControlsCreate(Desk * dsk)
}
else if (Conf.desks.dragdir == 2)
{
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac,
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac1,
NULL, NULL, 1, FLAG_FIXED_HORIZ, 1, 99999, 1,
99999, 0, 0, EoGetX(dsk), 0, EoGetY(dsk),
0, 0, 0, 0, 0, 1, 0, 1);
}
else
{
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac,
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac1,
NULL, NULL, 1, FLAG_FIXED_HORIZ, 1, 99999, 1,
99999, 0, 0, EoGetX(dsk), 0,
EoGetY(dsk) + VRoot.h - Conf.desks.dragbar_width,

View File

@ -253,13 +253,8 @@ DialogCreate(const char *name)
d->win = ECreateClientWindow(VRoot.win, -20, -20, 2, 2);
EventCallbackRegister(d->win, 0, DialogHandleEvents, d);
d->tclass = TextclassFind("DIALOG", 1);
if (d->tclass)
TextclassIncRefcount(d->tclass);
d->iclass = ImageclassFind("DIALOG", 1);
if (d->iclass)
ImageclassIncRefcount(d->iclass);
d->iclass = ImageclassAlloc("DIALOG", 1);
d->tclass = TextclassAlloc("DIALOG", 1);
d->xu1 = d->yu1 = 99999;
d->xu2 = d->yu2 = 0;
@ -279,10 +274,8 @@ DialogDestroy(Dialog * d)
DialogKeybindingsDestroy(d);
if (d->item)
DialogItemDestroy(d->item, 0);
if (d->iclass)
ImageclassDecRefcount(d->iclass);
if (d->tclass)
TextclassDecRefcount(d->tclass);
ImageclassFree(d->iclass);
TextclassFree(d->tclass);
FreePmapMask(&(d->pmm_bg));
EDestroyWindow(d->win);
@ -367,13 +360,8 @@ DialogAddButton(Dialog * d, const char *text, DialogCallbackFunc * func,
db->clicked = 0;
db->close = doclose;
db->tclass = TextclassFind("DIALOG_BUTTON", 1);
if (db->tclass)
TextclassIncRefcount(db->tclass);
db->iclass = ImageclassFind("DIALOG_BUTTON", 1);
if (db->iclass)
ImageclassIncRefcount(db->iclass);
db->tclass = TextclassAlloc("DIALOG_BUTTON", 1);
db->iclass = ImageclassAlloc("DIALOG_BUTTON", 1);
TextSize(db->tclass, 0, 0, STATE_NORMAL, text, &w, &h, 17);
pad = ImageclassGetPadding(db->iclass);
@ -921,24 +909,6 @@ DialogItemSetCallback(DItem * di, DialogCallbackFunc * func, int val,
di->data = data;
}
#if 0 /* Unused */
void
DialogItemSetClass(DItem * di, ImageClass * iclass, TextClass * tclass)
{
if (di->iclass)
ImageclassDecRefcount(di->iclass);
di->iclass = iclass;
if (di->iclass)
ImageclassIncRefcount(di->iclass);
if (di->tclass)
TextclassDecRefcount(di->tclass);
di->tclass = tclass;
if (di->tclass)
TextclassIncRefcount(di->tclass);
}
#endif
void
DialogItemSetPadding(DItem * di, int left, int right, int top, int bottom)
{
@ -1027,15 +997,10 @@ DialogRealizeItem(Dialog * d, DItem * di)
def = "DIALOG_WIDGET_BUTTON";
}
if (!di->tclass)
di->tclass = TextclassFind(def, 1);
if (!di->iclass)
di->iclass = ImageclassFind(def, 1);
if (di->tclass)
TextclassIncRefcount(di->tclass);
if (di->iclass)
ImageclassIncRefcount(di->iclass);
di->iclass = ImageclassAlloc(def, 1);
if (!di->tclass)
di->tclass = TextclassAlloc(def, 1);
if (di->type == DITEM_TABLE)
{
@ -1071,20 +1036,16 @@ DialogRealizeItem(Dialog * d, DItem * di)
ButtonPressMask | ButtonReleaseMask | PointerMotionMask);
EventCallbackRegister(di->item.slider.knob_win, 0, DItemHandleEvents,
di);
if (!di->item.slider.ic_base)
{
if (di->item.slider.horizontal)
{
di->item.slider.ic_base =
ImageclassFind("DIALOG_WIDGET_SLIDER_BASE_HORIZONTAL", 1);
}
di->item.slider.ic_base =
ImageclassAlloc("DIALOG_WIDGET_SLIDER_BASE_HORIZONTAL", 1);
else
{
di->item.slider.ic_base =
ImageclassFind("DIALOG_WIDGET_SLIDER_BASE_VERTICAL", 1);
}
di->item.slider.ic_base =
ImageclassAlloc("DIALOG_WIDGET_SLIDER_BASE_VERTICAL", 1);
}
im = ImageclassGetImage(di->item.slider.ic_base, 0, 0, 0);
if (im)
{
@ -1092,25 +1053,16 @@ DialogRealizeItem(Dialog * d, DItem * di)
&di->item.slider.base_orig_h);
EImageFree(im);
}
if (di->item.slider.ic_base)
ImageclassIncRefcount(di->item.slider.ic_base);
if (!di->item.slider.ic_knob)
{
if (di->item.slider.horizontal)
{
di->item.slider.ic_knob =
ImageclassFind("DIALOG_WIDGET_SLIDER_KNOB_HORIZONTAL", 1);
}
di->item.slider.ic_knob =
ImageclassAlloc("DIALOG_WIDGET_SLIDER_KNOB_HORIZONTAL", 1);
else
{
di->item.slider.ic_knob =
ImageclassFind("DIALOG_WIDGET_SLIDER_KNOB_VERTICAL", 1);
}
di->item.slider.ic_knob =
ImageclassAlloc("DIALOG_WIDGET_SLIDER_KNOB_VERTICAL", 1);
}
if (di->item.slider.ic_knob)
ImageclassIncRefcount(di->item.slider.ic_knob);
im = ImageclassGetImage(di->item.slider.ic_knob, 0, 0, 0);
if (im)
{
@ -1118,34 +1070,27 @@ DialogRealizeItem(Dialog * d, DItem * di)
&di->item.slider.knob_orig_h);
EImageFree(im);
}
if (!di->item.slider.ic_border)
{
if (di->item.slider.horizontal)
{
di->item.slider.ic_border =
ImageclassFind("DIALOG_WIDGET_SLIDER_BORDER_HORIZONTAL",
0);
}
di->item.slider.ic_border =
ImageclassAlloc("DIALOG_WIDGET_SLIDER_BORDER_HORIZONTAL", 1);
else
{
di->item.slider.ic_border =
ImageclassFind("DIALOG_WIDGET_SLIDER_BORDER_VERTICAL", 0);
}
di->item.slider.ic_border =
ImageclassAlloc("DIALOG_WIDGET_SLIDER_BORDER_VERTICAL", 1);
}
if (di->item.slider.ic_border)
im = ImageclassGetImage(di->item.slider.ic_border, 0, 0, 0);
if (im)
{
im = ImageclassGetImage(di->item.slider.ic_border, 0, 0, 0);
if (im)
{
EImageGetSize(im, &di->item.slider.border_orig_w,
&di->item.slider.border_orig_h);
EImageFree(im);
di->item.slider.border_win =
ECreateWindow(d->win, -20, -20, 2, 2, 0);
EMapWindow(di->item.slider.border_win);
}
ImageclassIncRefcount(di->item.slider.ic_border);
EImageGetSize(im, &di->item.slider.border_orig_w,
&di->item.slider.border_orig_h);
EImageFree(im);
di->item.slider.border_win =
ECreateWindow(d->win, -20, -20, 2, 2, 0);
EMapWindow(di->item.slider.border_win);
}
pad = ImageclassGetPadding(di->item.slider.ic_base);
if (di->item.slider.horizontal)
{
@ -2109,12 +2054,9 @@ DialogItemDestroy(DItem * di, int clean)
EDestroyWindow(di->item.radio_button.radio_win);
break;
case DITEM_SLIDER:
if (di->item.slider.ic_base)
ImageclassDecRefcount(di->item.slider.ic_base);
if (di->item.slider.ic_knob)
ImageclassDecRefcount(di->item.slider.ic_knob);
if (di->item.slider.ic_border)
ImageclassDecRefcount(di->item.slider.ic_border);
ImageclassFree(di->item.slider.ic_base);
ImageclassFree(di->item.slider.ic_knob);
ImageclassFree(di->item.slider.ic_border);
if (!clean)
break;
EDestroyWindow(di->item.slider.base_win);
@ -2130,10 +2072,8 @@ DialogItemDestroy(DItem * di, int clean)
if (clean && di->win)
EDestroyWindow(di->win);
if (di->iclass)
ImageclassDecRefcount(di->iclass);
if (di->tclass)
TextclassDecRefcount(di->tclass);
ImageclassFree(di->iclass);
TextclassFree(di->tclass);
Efree(di);
}

View File

@ -104,8 +104,6 @@ DItem *DialogAddItem(DItem * dii, int type);
Dialog *DialogItemGetDialog(DItem * di);
void DialogItemSetCallback(DItem * di, DialogCallbackFunc * func,
int val, void *data);
void DialogItemSetClass(DItem * di, ImageClass * ic,
TextClass * tclass);
void DialogItemSetPadding(DItem * di, int left, int right,
int top, int bottom);
void DialogItemSetFill(DItem * di, char fill_h, char fill_v);

View File

@ -375,16 +375,26 @@ ImageclassDestroy(ImageClass * ic)
#endif
}
void
ImageclassIncRefcount(ImageClass * ic)
ImageClass *
ImageclassAlloc(const char *name, int fallback)
{
ic->ref_count++;
ImageClass *ic;
if (!name || !name[0])
return NULL;
ic = ImageclassFind(name, fallback);
if (ic)
ic->ref_count++;
return ic;
}
void
ImageclassDecRefcount(ImageClass * ic)
ImageclassFree(ImageClass * ic)
{
ic->ref_count--;
if (ic)
ic->ref_count--;
}
const char *
@ -408,20 +418,16 @@ _ImageclassMatchName(const void *data, const void *match)
ImageClass *
ImageclassFind(const char *name, int fallback)
{
ImageClass *ic;
ImageClass *ic = NULL;
if (name)
{
ic =
(ImageClass *) ecore_list_find(iclass_list, _ImageclassMatchName,
ic = (ImageClass *) ecore_list_find(iclass_list, _ImageclassMatchName,
name);
if (ic || !fallback)
return ic;
}
if (ic || !fallback)
return ic;
ic =
(ImageClass *) ecore_list_find(iclass_list, _ImageclassMatchName,
"__FALLBACK_ICLASS");
ic = (ImageClass *) ecore_list_find(iclass_list, _ImageclassMatchName,
"__FALLBACK_ICLASS");
return ic;
}
@ -526,7 +532,6 @@ ImageclassConfigLoad(FILE * fs)
int i1;
ImageClass *ic = NULL;
ImageState *ICToRead = NULL;
int fields;
int l, r, t, b;
#if ENABLE_COLOR_MODIFIERS
@ -535,42 +540,24 @@ ImageclassConfigLoad(FILE * fs)
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
fields = sscanf(s, "%i %4000s", &i1, s2);
if (fields < 1)
i1 = CONFIG_INVALID;
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
}
i1 = ConfigParseline1(s, s2, NULL, NULL);
switch (i1)
{
case CONFIG_CLOSE:
ImageclassPopulate(ic);
goto done;
case ICLASS_LRTB:
{
ICToRead->border = EMALLOC(EImageBorder, 1);
ICToRead->border = EMALLOC(EImageBorder, 1);
l = r = t = b = 0;
sscanf(s, "%*s %i %i %i %i", &l, &r, &t, &b);
ICToRead->border->left = l;
ICToRead->border->right = r;
ICToRead->border->top = t;
ICToRead->border->bottom = b;
/* Hmmm... imlib2 works better with this */
ICToRead->border->right++;
ICToRead->border->bottom++;
}
l = r = t = b = 0;
sscanf(s, "%*s %i %i %i %i", &l, &r, &t, &b);
ICToRead->border->left = l;
ICToRead->border->right = r;
ICToRead->border->top = t;
ICToRead->border->bottom = b;
/* Hmmm... imlib2 works better with this */
ICToRead->border->right++;
ICToRead->border->bottom++;
break;
case ICLASS_FILLRULE:
ICToRead->pixmapfillstyle = atoi(s2);
@ -612,14 +599,12 @@ ImageclassConfigLoad(FILE * fs)
#endif
break;
case ICLASS_PADDING:
{
l = r = t = b = 0;
sscanf(s, "%*s %i %i %i %i", &l, &r, &t, &b);
ic->padding.left = l;
ic->padding.right = r;
ic->padding.top = t;
ic->padding.bottom = b;
}
l = r = t = b = 0;
sscanf(s, "%*s %i %i %i %i", &l, &r, &t, &b);
ic->padding.left = l;
ic->padding.right = r;
ic->padding.top = t;
ic->padding.bottom = b;
break;
case CONFIG_CLASSNAME:
case ICLASS_NAME:
@ -713,10 +698,7 @@ ImageclassConfigLoad(FILE * fs)
ICToRead = ic->sticky_active.disabled;
break;
default:
Alert(_("Warning: unable to determine what to do with\n"
"the following text in the middle of current "
"ImageClass definition:\n"
"%s\nWill ignore and continue...\n"), s);
ConfigParseError("ImageClass", s);
break;
}
}

View File

@ -96,8 +96,8 @@ int ImageclassIsTransparent(ImageClass * ic);
#endif
ImageClass *ImageclassFind(const char *name, int fallback);
void ImageclassIncRefcount(ImageClass * ic);
void ImageclassDecRefcount(ImageClass * ic);
ImageClass *ImageclassAlloc(const char *name, int fallback);
void ImageclassFree(ImageClass * ic);
const char *ImageclassGetName(ImageClass * ic);
EImageBorder *ImageclassGetPadding(ImageClass * ic);
ImageState *ImageclassGetImageState(ImageClass * ic, int state,

View File

@ -418,8 +418,10 @@ MenuItemCreate(const char *text, ImageClass * iclass,
mi = ECALLOC(MenuItem, 1);
mi->icon_iclass = iclass;
#if 0
if (iclass)
ImageclassIncRefcount(iclass);
#endif
mi->text = (text) ? Estrdup((text[0]) ? text : "?!?") : NULL;
mi->params = Estrdup(action_params);
@ -620,8 +622,7 @@ MenuEmpty(Menu * m, int destroying)
FreePmapMask(&(mi->pmm[j]));
if (!destroying && mi->win)
EDestroyWindow(mi->win);
if (mi->icon_iclass)
ImageclassDecRefcount(mi->icon_iclass);
ImageclassFree(mi->icon_iclass);
if (mi)
Efree(mi);
}
@ -1777,36 +1778,17 @@ MenuMaskerHandleEvents(Win win __UNUSED__, XEvent * ev, void *prm __UNUSED__)
#include "conf.h"
int
MenuStyleConfigLoad(FILE * ConfigFile)
MenuStyleConfigLoad(FILE * fs)
{
int err = 0;
char s[FILEPATH_LEN_MAX];
char s2[FILEPATH_LEN_MAX];
int i1;
MenuStyle *ms = NULL;
int fields;
while (GetLine(s, sizeof(s), ConfigFile))
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
fields = sscanf(s, "%i %4000s", &i1, s2);
if (fields < 1)
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
}
i1 = ConfigParseline1(s, s2, NULL, NULL);
switch (i1)
{
case CONFIG_CLOSE:
@ -1815,24 +1797,16 @@ MenuStyleConfigLoad(FILE * ConfigFile)
ms = MenuStyleCreate(s2);
break;
case CONFIG_TEXT:
ms->tclass = TextclassFind(s2, 1);
if (ms->tclass)
TextclassIncRefcount(ms->tclass);
ms->tclass = TextclassAlloc(s2, 1);
break;
case MENU_BG_ICLASS:
ms->bg_iclass = ImageclassFind(s2, 0);
if (ms->bg_iclass)
ImageclassIncRefcount(ms->bg_iclass);
ms->bg_iclass = ImageclassAlloc(s2, 1);
break;
case MENU_ITEM_ICLASS:
ms->item_iclass = ImageclassFind(s2, 0);
if (ms->item_iclass)
ImageclassIncRefcount(ms->item_iclass);
ms->item_iclass = ImageclassAlloc(s2, 1);
break;
case MENU_SUBMENU_ICLASS:
ms->sub_iclass = ImageclassFind(s2, 0);
if (ms->sub_iclass)
ImageclassIncRefcount(ms->sub_iclass);
ms->sub_iclass = ImageclassAlloc(s2, 1);
break;
case MENU_USE_ITEM_BACKGROUND:
ms->use_item_bg = atoi(s2);
@ -1840,7 +1814,7 @@ MenuStyleConfigLoad(FILE * ConfigFile)
{
if (ms->bg_iclass)
{
ImageclassDecRefcount(ms->bg_iclass);
ImageclassFree(ms->bg_iclass);
ms->bg_iclass = NULL;
}
}
@ -1852,21 +1826,7 @@ MenuStyleConfigLoad(FILE * ConfigFile)
ms->maxy = atoi(s2);
break;
case CONFIG_BORDER:
{
/* FIXME!!! I don't think this file is loaded in the
* right order!
*/
Border *b;
if (ms->border_name)
Efree(ms->border_name);
ms->border_name = Estrdup(s2);
b = BorderFind(ms->border_name);
if (b)
BorderIncRefcount(b);
}
_EFDUP(ms->border_name, s2);
break;
default:
break;
@ -1887,39 +1847,17 @@ MenuConfigLoad(FILE * fs)
char s3[FILEPATH_LEN_MAX];
char s4[FILEPATH_LEN_MAX];
char s5[FILEPATH_LEN_MAX];
char *p2, *p3;
char *txt = NULL;
const char *params;
int i1, i2;
int i1, i2, len;
Menu *m = NULL, *mm;
MenuItem *mi;
ImageClass *ic = NULL;
int fields, len2, len;
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
len = 0;
fields = sscanf(s, "%i %n%4000s %n", &i1, &len2, s2, &len);
if (fields < 1)
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
{
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
continue;
}
}
i1 = ConfigParseline1(s, s2, &p2, &p3);
switch (i1)
{
case CONFIG_MENU:
@ -1936,7 +1874,7 @@ MenuConfigLoad(FILE * fs)
break;
case MENU_PREBUILT:
sscanf(s, "%i %4000s %4000s %4000s %4000s", &i1, s2, s3, s4, s5);
sscanf(p3, "%4000s %4000s %4000s", s3, s4, s5);
m = MenusCreateInternal(s4, s2, s3, s5);
break;
case CONFIG_CLASSNAME:
@ -1952,21 +1890,15 @@ MenuConfigLoad(FILE * fs)
MenuSetStyle(m, MenuStyleFind(s2));
break;
case MENU_TITLE:
MenuSetTitle(m, s + len2);
MenuSetTitle(m, p2);
break;
case MENU_ITEM:
#if 0 /* FIXME - Why ? */
if ((txt) || (ic))
{
mi = MenuItemCreate(txt, ic, NULL, NULL);
MenuAddItem(m, mi);
}
#endif
ic = NULL;
if (strcmp("NULL", s2))
ic = ImageclassFind(s2, 0);
params = s + len;
_EFDUP(txt, params);
if (i2 <= 0)
break;
_EFDUP(txt, p3);
break;
case MENU_ACTION:
if ((txt) || (ic))
@ -1977,13 +1909,12 @@ MenuConfigLoad(FILE * fs)
* on your system before adding the menu entry */
if (!strcmp(s2, "exec"))
{
sscanf(s + len, "%1000s", s3);
sscanf(p3, "%1000s", s3);
ok = path_canexec(s3);
}
if (ok)
{
params = s + len2;
mi = MenuItemCreate(txt, ic, params, NULL);
mi = MenuItemCreate(txt, ic, p2, NULL);
MenuAddItem(m, mi);
}
ic = NULL;
@ -1991,18 +1922,13 @@ MenuConfigLoad(FILE * fs)
}
break;
case MENU_SUBMENU:
len2 = 0;
sscanf(s + len, "%4000s %n", s3, &len2);
len = 0;
sscanf(p3, "%s %n", s3, &len);
ic = NULL;
if (strcmp("NULL", s3))
ic = ImageclassFind(s3, 0);
mm = MenuFind(s2, NULL);
#if 0 /* FIXME - Remove? */
/* if submenu empty - dont put it in - only if menu found */
if (MenuIsEmpty(mm))
break;
#endif
mi = MenuItemCreate(s + len + len2, ic, NULL, mm);
mi = MenuItemCreate(p3 + len, ic, NULL, mm);
MenuAddItem(m, mi);
break;
default:

View File

@ -53,17 +53,9 @@ ProgressbarCreate(const char *name, int w, int h)
plist = EREALLOC(Progressbar *, plist, pnum);
plist[pnum - 1] = p;
p->ic = ImageclassFind("PROGRESS_BAR", 1);
if (p->ic)
ImageclassIncRefcount(p->ic);
p->tc = TextclassFind("PROGRESS_TEXT", 1);
if (p->tc)
TextclassIncRefcount(p->tc);
p->tnc = TextclassFind("PROGRESS_TEXT_NUMBER", 1);
if (p->tnc)
TextclassIncRefcount(p->tnc);
p->ic = ImageclassAlloc("PROGRESS_BAR", 1);
p->tc = TextclassAlloc("PROGRESS_TEXT", 1);
p->tnc = TextclassAlloc("PROGRESS_TEXT_NUMBER", 1);
pad = ImageclassGetPadding(p->ic);
TextSize(p->tc, 0, 0, 0, name, &tw, &th, 0);
@ -123,16 +115,11 @@ ProgressbarDestroy(Progressbar * p)
break;
}
if (p->ic)
ImageclassDecRefcount(p->ic);
ImageclassFree(p->ic);
TextclassFree(p->tc);
TextclassFree(p->tnc);
if (p->tc)
TextclassDecRefcount(p->tc);
if (p->tnc)
TextclassDecRefcount(p->tnc);
if (p)
Efree(p);
Efree(p);
pnum--;
if (pnum <= 0)

View File

@ -405,35 +405,14 @@ SlideoutsConfigLoad(FILE * fs)
int i1;
char s[FILEPATH_LEN_MAX];
char s2[FILEPATH_LEN_MAX];
char *name = 0;
int fields;
char name[FILEPATH_LEN_MAX];
if (!slideout_list)
slideout_list = ecore_list_new();
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
fields = sscanf(s, "%i %4000s", &i1, s2);
if (fields < 1)
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
{
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
i1 = CONFIG_INVALID;
}
}
i1 = ConfigParseline1(s, s2, NULL, NULL);
switch (i1)
{
case CONFIG_CLOSE:
@ -441,24 +420,18 @@ SlideoutsConfigLoad(FILE * fs)
ecore_list_prepend(slideout_list, slideout);
goto done;
case CONFIG_CLASSNAME:
if (name)
Efree(name);
name = Estrdup(s2);
strcpy(name, s2);
break;
case SLIDEOUT_DIRECTION:
slideout = SlideoutCreate(name, (char)atoi(s2));
if (name)
Efree(name);
break;
case CONFIG_BUTTON:
SlideoutAddButton(slideout, ButtonFind(s2));
break;
default:
Alert(_("Warning: unable to determine what to do with\n"
"the following text in the middle of current Text "
"definition:\n" "%s\nWill ignore and continue...\n"), s);
ConfigParseError("Slideout", s);
break;
}
}
err = -1;

View File

@ -135,16 +135,26 @@ TextclassDestroy(TextClass * tc)
Efree(tc);
}
void
TextclassIncRefcount(TextClass * tc)
TextClass *
TextclassAlloc(const char *name, int fallback)
{
tc->ref_count++;
TextClass *tc;
if (!name || !name[0])
return NULL;
tc = TextclassFind(name, fallback);
if (tc)
tc->ref_count++;
return tc;
}
void
TextclassDecRefcount(TextClass * tc)
TextclassFree(TextClass * tc)
{
tc->ref_count--;
if (tc)
tc->ref_count--;
}
int
@ -213,20 +223,16 @@ _TextclassMatchName(const void *data, const void *match)
TextClass *
TextclassFind(const char *name, int fallback)
{
TextClass *tc;
TextClass *tc = NULL;
if (name)
{
tc =
(TextClass *) ecore_list_find(tclass_list, _TextclassMatchName,
tc = (TextClass *) ecore_list_find(tclass_list, _TextclassMatchName,
name);
if (tc || !fallback)
return tc;
}
if (tc || !fallback)
return tc;
tc =
(TextClass *) ecore_list_find(tclass_list, _TextclassMatchName,
"__FALLBACK_TCLASS");
tc = (TextClass *) ecore_list_find(tclass_list, _TextclassMatchName,
"__FALLBACK_TCLASS");
return tc;
}
@ -240,31 +246,10 @@ TextclassConfigLoad(FILE * fs)
int i1, r, g, b;
TextClass *tc = NULL;
TextState *ts = NULL;
int fields;
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
fields = sscanf(s, "%i %4000[^=]", &i1, s2);
if (fields < 1)
{
i1 = CONFIG_INVALID;
}
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
{
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
i1 = CONFIG_INVALID;
}
}
i1 = ConfigParseline1(s, s2, NULL, NULL);
switch (i1)
{
case CONFIG_CLOSE:
@ -456,11 +441,9 @@ TextclassConfigLoad(FILE * fs)
}
break;
default:
Alert(_("Warning: unable to determine what to do with\n"
"the following text in the middle of current Text"
" definition:\n" "%s\nWill ignore and continue...\n"), s);
ConfigParseError("TextClass", s);
break;
}
}
err = -1;

View File

@ -92,11 +92,11 @@ struct _textclass
/* tclass.c */
int TextclassConfigLoad(FILE * fs);
void TextclassIncRefcount(TextClass * tc);
void TextclassDecRefcount(TextClass * tc);
TextClass *TextclassFind(const char *name, int fallback);
TextClass *TextclassAlloc(const char *name, int fallback);
void TextclassFree(TextClass * tc);
int TextclassGetJustification(TextClass * tc);
void TextclassSetJustification(TextClass * tc, int just);
TextClass *TextclassFind(const char *name, int fallback);
/* text.c */
TextState *TextclassGetTextState(TextClass * tclass, int state,

View File

@ -91,11 +91,10 @@ TooltipRealize(ToolTip * tt)
}
static ToolTip *
TooltipCreate(const char *name, ImageClass * ic0, ImageClass * ic1,
ImageClass * ic2, ImageClass * ic3, ImageClass * ic4,
TextClass * tclass, int dist, ImageClass * tooltippic)
TooltipCreate(const char *name, const char *ic0, const char *ic1,
const char *ic2, const char *ic3, const char *ic4,
const char *tclass, int dist, const char *tooltippic)
{
int i;
ToolTip *tt;
if (ic0 == NULL || tclass == NULL)
@ -106,24 +105,18 @@ TooltipCreate(const char *name, ImageClass * ic0, ImageClass * ic1,
return NULL;
tt->name = Estrdup(name);
tt->iclass[0] = ic1;
tt->iclass[1] = ic2;
tt->iclass[2] = ic3;
tt->iclass[3] = ic4;
tt->iclass[4] = ic0;
ImageclassIncRefcount(ic0);
tt->tclass = tclass;
TextclassIncRefcount(tclass);
tt->tooltippic = tooltippic;
if (tooltippic)
ImageclassIncRefcount(tooltippic);
tt->iclass[0] = ImageclassAlloc(ic1, 0);
tt->iclass[1] = ImageclassAlloc(ic2, 0);
tt->iclass[2] = ImageclassAlloc(ic3, 0);
tt->iclass[3] = ImageclassAlloc(ic4, 0);
tt->iclass[4] = ImageclassAlloc(ic0, 0);
tt->tclass = TextclassAlloc(tclass, 1);
tt->tooltippic = ImageclassAlloc(tooltippic, 0);
tt->dist = dist;
for (i = 0; i < 5; i++)
if (tt->iclass[i])
ImageclassIncRefcount(tt->iclass[i]);
if (!tt_list)
tt_list = ecore_list_new();
ecore_list_prepend(tt_list, tt);
return tt;
@ -144,93 +137,70 @@ TooltipDestroy(ToolTip * tt)
#endif
int
TooltipConfigLoad(FILE * ConfigFile)
TooltipConfigLoad(FILE * fs)
{
int err = 0;
ToolTip *tt;
char *name = 0;
ImageClass *drawiclass = 0;
ImageClass *bubble1 = 0, *bubble2 = 0, *bubble3 = 0, *bubble4 = 0;
TextClass *tclass = 0;
ImageClass *tooltiphelppic = 0;
char s[FILEPATH_LEN_MAX];
char s2[FILEPATH_LEN_MAX];
char name[64];
char iclass[64];
char bubble1[64], bubble2[64], bubble3[64], bubble4[64];
char tclass[64];
char tooltiphelppic[64];
int i1;
int distance = 0;
int fields;
if (!tt_list)
tt_list = ecore_list_new();
name[0] = iclass[0] = tclass[0] = '\0';
bubble1[0] = bubble2[0] = bubble3[0] = bubble4[0] = '\0';
tooltiphelppic[0] = '\0';
tt = NULL;
while (GetLine(s, sizeof(s), ConfigFile))
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
fields = sscanf(s, "%i %4000s", &i1, s2);
if (fields < 1)
i1 = CONFIG_INVALID;
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
{
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
}
}
i1 = ConfigParseline1(s, s2, NULL, NULL);
switch (i1)
{
case CONFIG_CLOSE:
if ((drawiclass) && (tclass) && (name))
tt = TooltipCreate(name, drawiclass, bubble1, bubble2,
bubble3, bubble4, tclass, distance,
tooltiphelppic);
_EFREE(name);
if (iclass[0] && tclass[0] && name[0])
TooltipCreate(name, iclass, bubble1, bubble2,
bubble3, bubble4, tclass, distance,
tooltiphelppic);
goto done;
case CONFIG_CLASSNAME:
if (TooltipFind(s2))
{
SkipTillEnd(ConfigFile);
SkipTillEnd(fs);
goto done;
}
_EFDUP(name, s2);
STRCPY(name, s2);
break;
case TOOLTIP_DRAWICLASS:
case CONFIG_IMAGECLASS:
drawiclass = ImageclassFind(s2, 0);
STRCPY(iclass, s2);
break;
case TOOLTIP_BUBBLE1:
bubble1 = ImageclassFind(s2, 0);
STRCPY(bubble1, s2);
break;
case TOOLTIP_BUBBLE2:
bubble2 = ImageclassFind(s2, 0);
STRCPY(bubble2, s2);
break;
case TOOLTIP_BUBBLE3:
bubble3 = ImageclassFind(s2, 0);
STRCPY(bubble3, s2);
break;
case TOOLTIP_BUBBLE4:
bubble4 = ImageclassFind(s2, 0);
STRCPY(bubble4, s2);
break;
case CONFIG_TEXT:
tclass = TextclassFind(s2, 1);
STRCPY(tclass, s2);
break;
case TOOLTIP_DISTANCE:
distance = atoi(s2);
break;
case TOOLTIP_HELP_PIC:
tooltiphelppic = ImageclassFind(s2, 0);
STRCPY(tooltiphelppic, s2);
break;
default:
Alert(_("Warning: unable to determine what to do with\n"
"the following text in the middle of current "
"ToolTip definition:\n"
"%s\nWill ignore and continue...\n"), s);
ConfigParseError("ToolTip", s);
break;
}
}

View File

@ -54,6 +54,8 @@
#define _EFREE(p) do { if (p) { Efree(p); p = NULL; } } while (0)
#define _EFDUP(p, s) do { if (p) Efree(p); p = Estrdup(s); } while (0)
#define STRCPY(dst, src) do { src[sizeof(dst)-1] = '\0'; strcpy(dst, src); } while(0)
char *Estrtrim(char *s);
char *Estrdup(const char *s);

View File

@ -127,8 +127,6 @@ WindowMatchDestroy(WindowMatch * wm)
Efree(wm->name);
if (wm->value)
Efree(wm->value);
if (wm->border)
BorderDecRefcount(wm->border);
if (wm->args)
Efree(wm->args);
@ -143,28 +141,10 @@ WindowMatchConfigLoad(FILE * fs)
char s[FILEPATH_LEN_MAX];
char s2[FILEPATH_LEN_MAX];
int i1;
int fields, len;
while (GetLine(s, sizeof(s), fs))
{
s2[0] = 0;
i1 = CONFIG_INVALID;
len = 0;
fields = sscanf(s, "%i %4000s %n", &i1, s2, &len);
if (fields < 1)
i1 = CONFIG_INVALID;
else if (i1 == CONFIG_CLOSE)
{
if (fields != 1)
Alert(_("CONFIG: ignoring extra data in \"%s\"\n"), s);
}
else if (i1 != CONFIG_INVALID)
{
if (fields != 2)
Alert(_("CONFIG: missing required data in \"%s\"\n"), s);
}
i1 = ConfigParseline1(s, s2, NULL, NULL);
switch (i1)
{
case CONFIG_VERSION:
@ -267,7 +247,6 @@ WindowMatchConfigLoad(FILE * fs)
if (!wm->border)
break;
wm->op = MATCH_OP_BORDER;
BorderIncRefcount(wm->border);
break;
case WINDOWMATCH_ICON:
@ -297,10 +276,7 @@ WindowMatchConfigLoad(FILE * fs)
break;
default:
Alert(_("Warning: unable to determine what to do with\n"
"the following text in the middle of current "
"WindowMatch definition:\n"
"%s\nWill ignore and continue...\n"), s);
ConfigParseError("WindowMatch", s);
break;
}
}
@ -408,7 +384,6 @@ WindowMatchDecode(const char *line)
err = 1;
goto done;
}
BorderIncRefcount(wm->border);
break;
case MATCH_OP_ICON: