Button related cleanups.

SVN revision: 16256
This commit is contained in:
Kim Woelders 2005-08-21 13:21:48 +00:00
parent 8905b18c51
commit 5c756e0076
12 changed files with 214 additions and 248 deletions

38
src/E.h
View File

@ -333,7 +333,6 @@ typedef struct _dialog Dialog;
typedef struct _ditem DItem;
typedef struct _snapshot Snapshot;
typedef struct _group Group;
typedef struct _button Button;
typedef struct _background Background;
typedef struct _ecursor ECursor;
typedef struct _efont Efont;
@ -485,6 +484,7 @@ struct _textclass
unsigned int ref_count;
};
struct _button;
typedef struct
{
EObj o;
@ -492,7 +492,7 @@ typedef struct
char viewable;
char dirty_stack;
Background *bg;
Button *tag;
struct _button *tag;
int current_area_x;
int current_area_y;
long event_mask;
@ -1035,39 +1035,6 @@ Border *BorderCreateFiller(int left, int right, int top,
int bottom);
void BordersSetupFallback(void);
/* buttons.c */
int ButtonsConfigLoad(FILE * fs);
Button *ButtonCreate(const char *name, int id, ImageClass * ic,
ActionClass * aclass, TextClass * 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);
void ButtonDestroy(Button * b);
void ButtonShow(Button * b);
void ButtonHide(Button * b);
void ButtonToggle(Button * b);
void ButtonDraw(Button * b);
void ButtonDrawWithState(Button * b, int state);
void ButtonMoveToDesktop(Button * b, int desk);
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 * bi, EObj * eo);
int ButtonGetRefcount(const Button * b);
int ButtonGetDesk(const Button * b);
int ButtonGetInfo(const Button * b, RectBox * r, int desk);
Window ButtonGetWin(const Button * b);
int ButtonGetWidth(const Button * b);
int ButtonGetHeight(const Button * b);
int ButtonIsFixed(const Button * b);
int ButtonIsInternal(const Button * b);
int ButtonDoShowDefault(const Button * b);
int ButtonEmbedWindow(Button * ButtonToUse,
Window WindowToEmbed);
/* cmclass.c */
#if ENABLE_COLOR_MODIFIERS
void CreateCurve(ModCurve * c);
@ -1558,7 +1525,6 @@ void ITApply(Window win, ImageClass * ic, ImageState * is, int w,
/* ipc.c */
void __PRINTF__ IpcPrintf(const char *fmt, ...);
int HandleIPC(const char *params, Client * c);
void ButtonIPC(int val, void *data);
int EFunc(EWin * ewin, const char *params);
/* lang.c */

View File

@ -26,6 +26,7 @@ e16_SOURCES = \
backgrounds.c \
borders.c \
buttons.c \
buttons.h \
cmclass.c \
comms.c \
conf.h \

View File

@ -22,6 +22,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "E.h"
#include "buttons.h"
#include "ewins.h"
static int

View File

@ -22,6 +22,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "E.h"
#include "buttons.h"
#include "emodule.h"
#include "tooltips.h"
#include "xwin.h"
@ -74,6 +75,30 @@ static struct
static void ButtonHandleEvents(XEvent * ev, void *btn);
void
ButtonIncRefcount(Button * b)
{
b->ref_count++;
}
void
ButtonDecRefcount(Button * b)
{
b->ref_count--;
}
static int
ButtonIsFixed(const Button * b)
{
return b->flags & FLAG_FIXED;
}
static int
ButtonIsInternal(const Button * b)
{
return b->internal;
}
Button *
ButtonCreate(const char *name, int id, ImageClass * iclass,
ActionClass * aclass, TextClass * tclass, const char *label,
@ -229,6 +254,22 @@ ButtonCalc(Button * b)
EoMoveResize(b, x, y, w, h);
}
static void
ButtonDraw(Button * b)
{
ITApply(EoGetWin(b), b->iclass, NULL, EoGetW(b), EoGetH(b),
b->state, 0, 0, 0, ST_BUTTON, b->tclass, NULL, b->label);
}
#if 0 /* Unused */
void
ButtonDrawWithState(Button * b, int state)
{
b->state = state;
ButtonDraw(b);
}
#endif
void
ButtonShow(Button * b)
{
@ -251,7 +292,7 @@ ButtonSwallowInto(Button * b, EObj * eo)
EMapWindow(EoGetWin(b));
}
void
static void
ButtonMoveToDesktop(Button * b, int desk)
{
Desk *d;
@ -273,7 +314,7 @@ ButtonHide(Button * b)
EoUnmap(b);
}
void
static void
ButtonToggle(Button * b)
{
if (b->internal)
@ -285,26 +326,12 @@ ButtonToggle(Button * b)
ButtonShow(b);
}
void
ButtonDraw(Button * b)
{
ITApply(EoGetWin(b), b->iclass, NULL, EoGetW(b), EoGetH(b),
b->state, 0, 0, 0, ST_BUTTON, b->tclass, NULL, b->label);
}
void
ButtonDrawWithState(Button * b, int state)
{
b->state = state;
ButtonDraw(b);
}
void
ButtonMoveToCoord(Button * b, int x, int y)
{
int rx, ry, relx, rely, absx, absy;
if (b->flags & FLAG_FIXED)
if (ButtonIsFixed(b))
return;
if ((x + (EoGetW(b) >> 1)) < (VRoot.w / 3))
@ -345,40 +372,10 @@ ButtonMoveRelative(Button * b, int dx, int dy)
ButtonMoveToCoord(b, EoGetX(b) + dx, EoGetY(b) + dy);
}
void
ButtonIncRefcount(Button * b)
{
b->ref_count++;
}
void
ButtonDecRefcount(Button * b)
{
b->ref_count--;
}
static const char *
ButtonGetName(const Button * b)
{
return EoGetName(b);
}
int
ButtonGetRefcount(const Button * b)
{
return b->ref_count;
}
int
ButtonGetDesk(const Button * b)
{
return EoGetDesk(b);
}
int
ButtonGetInfo(const Button * b, RectBox * r, int desk)
{
if (!EoIsShown(b) || b->internal)
if (!EoIsShown(b) || ButtonIsInternal(b))
return -1;
if (!EoIsSticky(b) && EoGetDesk(b) != desk)
return -1;
@ -393,36 +390,6 @@ ButtonGetInfo(const Button * b, RectBox * r, int desk)
return 0;
}
Window
ButtonGetWin(const Button * b)
{
return EoGetWin(b);
}
int
ButtonGetWidth(const Button * b)
{
return EoGetW(b);
}
int
ButtonGetHeight(const Button * b)
{
return EoGetH(b);
}
int
ButtonIsFixed(const Button * b)
{
return b->flags & FLAG_FIXED;
}
int
ButtonIsInternal(const Button * b)
{
return b->internal;
}
int
ButtonDoShowDefault(const Button * b)
{
@ -487,6 +454,25 @@ ButtonDragEnd(Button * b)
autosave();
}
void
ButtonsMoveStickyToDesk(int desk)
{
Button **lst, *btn;
int i, num;
lst = (Button **) ListItemType(&num, LIST_TYPE_BUTTON);
for (i = 0; i < num; i++)
{
btn = lst[i];
if (!EoIsSticky(btn) || ButtonIsInternal(btn))
continue;
ButtonMoveToDesktop(btn, desk);
}
if (lst)
Efree(lst);
}
/*
* Button event handlers
*/
@ -519,7 +505,7 @@ ButtonEventMouseDown(Button * b, XEvent * ev)
b->state = STATE_CLICKED;
ButtonDraw(b);
if (!b->internal)
if (!ButtonIsInternal(b))
{
ActionClass *ac;
@ -1062,9 +1048,9 @@ doHideShowButton(const char *params)
lst = (Button **) ListItemType(&num, LIST_TYPE_BUTTON);
for (i = 0; i < num; i++)
{
if (matchregexp(ss, ButtonGetName(lst[i])))
if (matchregexp(ss, EoGetName(lst[i])))
{
if (strcmp(ButtonGetName(lst[i]),
if (strcmp(EoGetName(lst[i]),
"_DESKTOP_DESKRAY_DRAG_CONTROL"))
ButtonToggle(lst[i]);
}
@ -1081,9 +1067,9 @@ doHideShowButton(const char *params)
lst = (Button **) ListItemTypeID(&num, LIST_TYPE_BUTTON, 0);
for (i = 0; i < num; i++)
{
if (!matchregexp(ss, ButtonGetName(lst[i])))
if (!matchregexp(ss, EoGetName(lst[i])))
{
if (strcmp(ButtonGetName(lst[i]),
if (strcmp(EoGetName(lst[i]),
"_DESKTOP_DESKRAY_DRAG_CONTROL"))
ButtonToggle(lst[i]);
}
@ -1096,7 +1082,7 @@ doHideShowButton(const char *params)
lst = (Button **) ListItemType(&num, LIST_TYPE_BUTTON);
for (i = 0; i < num; i++)
{
if (strcmp(ButtonGetName(lst[i]), "_DESKTOP_DESKRAY_DRAG_CONTROL"))
if (strcmp(EoGetName(lst[i]), "_DESKTOP_DESKRAY_DRAG_CONTROL"))
ButtonToggle(lst[i]);
}
if (lst)
@ -1138,7 +1124,7 @@ ButtonsIpc(const char *params, Client * c __UNUSED__)
IpcPrintf("%#lx %2d %2d %2d %5d+%5d %5dx%5d %s\n",
EoGetWin(b), EoGetDesk(b), EoIsSticky(b), EoGetLayer(b),
EoGetX(b), EoGetY(b), EoGetW(b), EoGetH(b),
ButtonGetName(lst[i]));
EoGetName(lst[i]));
}
if (lst)
Efree(lst);

54
src/buttons.h Normal file
View File

@ -0,0 +1,54 @@
/*
* Copyright (C) 2000-2005 Carsten Haitzler, Geoff Harrison,
* and various contributors
* Copyright (C) 2004-2005 Kim Woelders
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies of the Software, its documentation and marketing & publicity
* materials, and acknowledgment shall be given in the documentation, materials
* and software packages that this Software was used.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* 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.
*/
#ifndef _BUTTONS_H_
#define _BUTTONS_H_
typedef struct _button Button;
/* buttons.c */
Button *ButtonCreate(const char *name, int id, ImageClass * ic,
ActionClass * aclass, TextClass * 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);
void ButtonDestroy(Button * b);
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 * bi, EObj * eo);
int ButtonGetInfo(const Button * b, RectBox * r, int desk);
int ButtonDoShowDefault(const Button * b);
int ButtonEmbedWindow(Button * ButtonToUse,
Window WindowToEmbed);
void ButtonsMoveStickyToDesk(int desk);
int ButtonsConfigLoad(FILE * fs);
#endif /* _BUTTONS_H_ */

View File

@ -22,6 +22,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "E.h"
#include "buttons.h"
#include "conf.h"
#include "tooltips.h"
#include <ctype.h>

View File

@ -22,11 +22,12 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "E.h"
#include <time.h>
#include "buttons.h"
#include "emodule.h"
#include "ewins.h"
#include "tooltips.h"
#include "xwin.h"
#include <time.h>
#define EDESK_EVENT_MASK \
(ButtonPressMask | ButtonReleaseMask | \
@ -308,35 +309,35 @@ DeskControlsCreate(Desk * d)
}
static void
DeskControlsDestroy(Desk * d)
DeskControlsDestroy(Desk * d, int id)
{
Button **blst;
int num, i;
blst = (Button **) ListItemTypeID(&num, LIST_TYPE_BUTTON, 1);
if (blst)
{
for (i = 0; i < num; i++)
if (ButtonGetDesk(blst[i]) == d->num)
ButtonDestroy(blst[i]);
Efree(blst);
}
blst = (Button **) ListItemTypeID(&num, LIST_TYPE_BUTTON, id);
if (!blst)
return;
for (i = 0; i < num; i++)
if (EobjGetDesk((EObj *) (blst[i])) == d->num)
ButtonDestroy(blst[i]);
Efree(blst);
}
static void
DeskControlsShow(Desk * d)
DeskControlsShow(Desk * d, int id)
{
Button **blst;
int num, i;
blst = (Button **) ListItemTypeID(&num, LIST_TYPE_BUTTON, 1);
if (blst)
{
for (i = 0; i < num; i++)
if (ButtonGetDesk(blst[i]) == d->num)
ButtonShow(blst[i]);
Efree(blst);
}
blst = (Button **) ListItemTypeID(&num, LIST_TYPE_BUTTON, id);
if (!blst)
return;
for (i = 0; i < num; i++)
if (EobjGetDesk((EObj *) (blst[i])) == d->num)
ButtonShow(blst[i]);
Efree(blst);
}
static void
@ -372,7 +373,7 @@ DeskConfigure(Desk * d)
unsigned int rnd;
DeskControlsCreate(d);
DeskControlsShow(d);
DeskControlsShow(d, 1);
bg = desks.bg[d->num];
if (bg)
@ -443,33 +444,12 @@ DeskCreate(int desk, int configure)
static void
DeskDestroy(Desk * d)
{
Button **blst;
int num, i;
if (d->num <= 0)
return;
ModulesSignal(ESIGNAL_DESK_REMOVED, ((void *)(long)(d->num)));
EventCallbackUnregister(EoGetWin(d), 0, DesktopHandleEvents, d);
blst = (Button **) ListItemTypeID(&num, LIST_TYPE_BUTTON, 1);
for (i = 0; i < num; i++)
{
if (ButtonGetDesk(blst[i]) == d->num)
ButtonDestroy(blst[i]);
}
if (blst)
Efree(blst);
blst = (Button **) ListItemTypeID(&num, LIST_TYPE_BUTTON, 2);
for (i = 0; i < num; i++)
{
if (ButtonGetDesk(blst[i]) == d->num)
ButtonDestroy(blst[i]);
}
if (blst)
Efree(blst);
DeskControlsDestroy(d, 1);
DeskControlsDestroy(d, 2);
if (d->bg)
BackgroundDecRefcount(d->bg);
@ -500,9 +480,9 @@ DeskResize(int desk, int w, int h)
}
BackgroundPixmapFree(d->bg);
DeskRefresh(d->num);
DeskControlsDestroy(d);
DeskControlsDestroy(d, 1);
DeskControlsCreate(d);
DeskControlsShow(d);
DeskControlsShow(d, 1);
}
Desk *
@ -712,7 +692,7 @@ DesksControlsDestroy(void)
int i;
for (i = 0; i < Conf.desks.num; i++)
DeskControlsDestroy(_DeskGet(i));
DeskControlsDestroy(_DeskGet(i), 1);
}
static void
@ -721,7 +701,7 @@ DesksControlsShow(void)
int i;
for (i = 0; i < Conf.desks.num; i++)
DeskControlsShow(_DeskGet(i));
DeskControlsShow(_DeskGet(i), 1);
}
static void
@ -920,48 +900,6 @@ DesktopAt(int x, int y)
return 0;
}
static void
MoveStickyWindowsToCurrentDesk(void)
{
Desk *d;
EWin *const *lst, *ewin;
int i, num, desk;
desk = DesksGetCurrent();
d = _DeskGet(desk);
lst = EwinListStackGet(&num);
for (i = 0; i < num; i++)
{
ewin = lst[i];
if (!EoIsSticky(ewin) && !EoIsFloating(ewin))
continue;
if (EwinIsTransientChild(ewin))
continue;
EwinMoveToDesktop(ewin, desk);
}
}
static void
MoveStickyButtonsToCurrentDesk(void)
{
Button **lst, *btn;
int i, num;
lst = (Button **) ListItemType(&num, LIST_TYPE_BUTTON);
for (i = 0; i < num; i++)
{
btn = lst[i];
if (ButtonIsInternal(btn) || !EoIsSticky((EWin *) btn))
continue;
ButtonMoveToDesktop(btn, desks.current);
}
if (lst)
Efree(lst);
}
static void
DesksStackingCheck(void)
{
@ -1071,8 +1009,8 @@ DeskEnter(Desk * d)
DeskHide(desks.order[i]);
}
MoveStickyWindowsToCurrentDesk();
MoveStickyButtonsToCurrentDesk();
EwinsMoveStickyToDesk(d->num);
ButtonsMoveStickyToDesk(d->num);
DesksStackingCheck();
HintsSetCurrentDesktop();
@ -1215,8 +1153,8 @@ DeskLower(int desk)
UncoverDesktop(desks.order[0]);
DeskHide(desk);
MoveStickyWindowsToCurrentDesk();
MoveStickyButtonsToCurrentDesk();
EwinsMoveStickyToDesk(desks.current);
ButtonsMoveStickyToDesk(desks.current);
DesksStackingCheck();
FocusNewDesk();
if (Mode.mode == MODE_NONE)

View File

@ -55,6 +55,13 @@ struct _eobj
#define EOBJ_TYPE_EVENT 4
#define EOBJ_TYPE_EXT 5
#define EobjGetWin(eo) ((eo)->win)
#define EobjGetDesk(eo) ((eo)->desk)
#define EobjGetX(eo) ((eo)->x)
#define EobjGetY(eo) ((eo)->y)
#define EobjGetW(eo) ((eo)->w)
#define EobjGetH(eo) ((eo)->h)
#define EoObj(eo) (&((eo)->o))
#define EoGetWin(eo) ((eo)->o.win)
#define EoGetName(eo) ((eo)->o.name)

View File

@ -1619,6 +1619,25 @@ EwinsTouch(int desk)
}
}
void
EwinsMoveStickyToDesk(int desk)
{
EWin *const *lst, *ewin;
int i, num;
lst = EwinListStackGet(&num);
for (i = 0; i < num; i++)
{
ewin = lst[num - 1 - i];
if (!EoIsSticky(ewin) && !EoIsFloating(ewin))
continue;
if (EwinIsTransientChild(ewin))
continue;
EwinMoveToDesktop(ewin, desk);
}
}
void
EwinsSetFree(void)
{

View File

@ -263,6 +263,7 @@ void EwinChange(EWin * ewin, unsigned int flag);
void EwinsEventsConfigure(int mode);
void EwinsSetFree(void);
void EwinsShowDesktop(int on);
void EwinsMoveStickyToDesk(int desk);
/* ewin-ops.c */
void SlideEwinTo(EWin * ewin, int fx, int fy, int tx, int ty,

View File

@ -217,13 +217,6 @@ MenuShow(Menu * m, char noshow)
ewin = m->ewin;
if (ewin)
{
#if 0 /* FIXME - Why? */
if ((Mode.button) &&
FindItem(Mode.button, 0, LIST_FINDBY_POINTER, LIST_TYPE_BUTTON))
{
ButtonDrawWithState(Mode.button, STATE_NORMAL);
}
#endif
#if 0 /* ??? */
RaiseEwin(ewin);
ShowEwin(ewin);

View File

@ -22,6 +22,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "E.h"
#include "buttons.h"
#include "emodule.h"
#include "ewins.h"
#include "xwin.h"
@ -35,8 +36,8 @@ typedef struct
{
EObj o;
char direction;
int num_buttons;
Button **button;
int num_objs;
EObj **objs;
unsigned int ref_count;
EWin *context_ewin;
} Slideout;
@ -170,9 +171,8 @@ SlideoutShow(Slideout * s, EWin * ewin, Window win)
att.win_gravity = SouthEastGravity;
EChangeWindowAttributes(EoGetWin(s), CWWinGravity, &att);
att.win_gravity = NorthWestGravity;
for (i = 0; i < s->num_buttons; i++)
EChangeWindowAttributes(ButtonGetWin(s->button[i]),
CWWinGravity, &att);
for (i = 0; i < s->num_objs; i++)
EChangeWindowAttributes(EobjGetWin(s->objs[i]), CWWinGravity, &att);
EoMoveResize(s, xx, yy, 1, 1);
ESync();
EoMap(s, 2);
@ -183,9 +183,8 @@ SlideoutShow(Slideout * s, EWin * ewin, Window win)
att.win_gravity = NorthWestGravity;
EChangeWindowAttributes(EoGetWin(s), CWWinGravity, &att);
att.win_gravity = SouthEastGravity;
for (i = 0; i < s->num_buttons; i++)
EChangeWindowAttributes(ButtonGetWin(s->button[i]),
CWWinGravity, &att);
for (i = 0; i < s->num_objs; i++)
EChangeWindowAttributes(EobjGetWin(s->objs[i]), CWWinGravity, &att);
EoMoveResize(s, xx, yy, 1, 1);
ESync();
EoMap(s, 2);
@ -196,9 +195,8 @@ SlideoutShow(Slideout * s, EWin * ewin, Window win)
att.win_gravity = SouthEastGravity;
EChangeWindowAttributes(EoGetWin(s), CWWinGravity, &att);
att.win_gravity = NorthWestGravity;
for (i = 0; i < s->num_buttons; i++)
EChangeWindowAttributes(ButtonGetWin(s->button[i]),
CWWinGravity, &att);
for (i = 0; i < s->num_objs; i++)
EChangeWindowAttributes(EobjGetWin(s->objs[i]), CWWinGravity, &att);
EoMoveResize(s, xx, yy, 1, 1);
ESync();
EoMap(s, 2);
@ -209,9 +207,8 @@ SlideoutShow(Slideout * s, EWin * ewin, Window win)
att.win_gravity = NorthWestGravity;
EChangeWindowAttributes(EoGetWin(s), CWWinGravity, &att);
att.win_gravity = SouthEastGravity;
for (i = 0; i < s->num_buttons; i++)
EChangeWindowAttributes(ButtonGetWin(s->button[i]),
CWWinGravity, &att);
for (i = 0; i < s->num_objs; i++)
EChangeWindowAttributes(EobjGetWin(s->objs[i]), CWWinGravity, &att);
EoMoveResize(s, xx, yy, 1, 1);
ESync();
EoMap(s, 2);
@ -255,10 +252,10 @@ SlideoutCalcSize(Slideout * s)
sh = 0;
x = 0;
y = 0;
for (i = 0; i < s->num_buttons; i++)
for (i = 0; i < s->num_objs; i++)
{
bw = ButtonGetWidth(s->button[i]);
bh = ButtonGetHeight(s->button[i]);
bw = EobjGetW(s->objs[i]);
bh = EobjGetH(s->objs[i]);
switch (s->direction)
{
@ -281,27 +278,27 @@ SlideoutCalcSize(Slideout * s)
EoResize(s, sw, sh);
for (i = 0; i < s->num_buttons; i++)
for (i = 0; i < s->num_objs; i++)
{
bw = ButtonGetWidth(s->button[i]);
bh = ButtonGetHeight(s->button[i]);
bw = EobjGetW(s->objs[i]);
bh = EobjGetH(s->objs[i]);
switch (s->direction)
{
case 2:
y += bh;
EMoveWindow(ButtonGetWin(s->button[i]), (sw - bw) >> 1, sh - y);
EMoveWindow(EobjGetWin(s->objs[i]), (sw - bw) >> 1, sh - y);
break;
case 3:
EMoveWindow(ButtonGetWin(s->button[i]), (sw - bw) >> 1, y);
EMoveWindow(EobjGetWin(s->objs[i]), (sw - bw) >> 1, y);
y += bh;
break;
case 0:
x += bw;
EMoveWindow(ButtonGetWin(s->button[i]), sw - x, (sh - bh) >> 1);
EMoveWindow(EobjGetWin(s->objs[i]), sw - x, (sh - bh) >> 1);
break;
case 1:
EMoveWindow(ButtonGetWin(s->button[i]), x, (sh - bh) >> 1);
EMoveWindow(EobjGetWin(s->objs[i]), x, (sh - bh) >> 1);
x += bw;
default:
break;
@ -313,14 +310,16 @@ SlideoutCalcSize(Slideout * s)
static void
SlideoutAddButton(Slideout * s, Button * b)
{
EObj *eob = (EObj *) b;
if (!b)
return;
if (!s)
return;
s->num_buttons++;
s->button = Erealloc(s->button, sizeof(Button *) * s->num_buttons);
s->button[s->num_buttons - 1] = b;
s->num_objs++;
s->objs = Erealloc(s->objs, sizeof(EObj *) * s->num_objs);
s->objs[s->num_objs - 1] = eob;
ButtonSwallowInto(b, EoObj(s));
SlideoutCalcSize(s);
}