parent
c2127e1e71
commit
129d6ab539
3
src/E.h
3
src/E.h
|
@ -1125,6 +1125,7 @@ Qentry;
|
|||
/* Disable, but Keep around a bit longer */
|
||||
#define USE_DQ_ICLASS 0
|
||||
#define USE_DQ_TCLASS 0
|
||||
#define USE_DQ_SHAPE 0
|
||||
|
||||
typedef struct _drawqueue
|
||||
{
|
||||
|
@ -1140,7 +1141,9 @@ typedef struct _drawqueue
|
|||
TextClass *tclass;
|
||||
char *text;
|
||||
#endif
|
||||
#if USE_DQ_SHAPE
|
||||
char shape_propagate;
|
||||
#endif
|
||||
Pager *pager;
|
||||
Pager *redraw_pager;
|
||||
char newbg;
|
||||
|
|
|
@ -153,7 +153,6 @@ BorderWinpartChange(EWin * ewin, int i, int force)
|
|||
|
||||
if (!ewin->shapedone || ewin->border->changes_shape)
|
||||
EwinPropagateShapes(ewin);
|
||||
ewin->shapedone = 1;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -173,7 +172,6 @@ EwinBorderDraw(EWin * ewin, int do_shape, int do_paint, int queue_off)
|
|||
|
||||
if (do_shape || !ewin->shapedone || ewin->border->changes_shape)
|
||||
EwinPropagateShapes(ewin);
|
||||
ewin->shapedone = 1;
|
||||
|
||||
if (queue_off)
|
||||
Mode.queue_up = pq;
|
||||
|
@ -397,20 +395,10 @@ EwinBorderCalcSizes(EWin * ewin)
|
|||
ewin->bits[i].no_expose = 1;
|
||||
}
|
||||
|
||||
if ((reshape) || (Mode.have_place_grab))
|
||||
if (reshape)
|
||||
{
|
||||
if (Mode.have_place_grab)
|
||||
{
|
||||
char pq;
|
||||
|
||||
pq = Mode.queue_up;
|
||||
Mode.queue_up = 0;
|
||||
EwinPropagateShapes(ewin);
|
||||
Mode.queue_up = pq;
|
||||
}
|
||||
else
|
||||
EwinPropagateShapes(ewin);
|
||||
ewin->shapedone = 1;
|
||||
ewin->shapedone = 0;
|
||||
EwinPropagateShapes(ewin);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -580,7 +568,6 @@ EwinBorderSetTo(EWin * ewin, const Border * b)
|
|||
EMoveWindow(ewin->win_container, b->border.left, b->border.top);
|
||||
|
||||
EwinBorderCalcSizes(ewin);
|
||||
EwinPropagateShapes(ewin);
|
||||
|
||||
SnapshotEwinUpdate(ewin, SNAP_USE_BORDER);
|
||||
}
|
||||
|
|
|
@ -642,7 +642,6 @@ ShowDialog(Dialog * d)
|
|||
else
|
||||
ArrangeEwinCentered(ewin, 0);
|
||||
}
|
||||
EwinPropagateShapes(ewin);
|
||||
ShowEwin(ewin);
|
||||
}
|
||||
|
||||
|
|
90
src/draw.c
90
src/draw.c
|
@ -57,7 +57,36 @@ HandleDrawQueue()
|
|||
{
|
||||
already = 0;
|
||||
|
||||
if (dq->shape_propagate)
|
||||
if (dq->d)
|
||||
{
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
if ((lst[i]->d == dq->d) && DialogItem(dq->d) &&
|
||||
/*(dq->d->item == dq->di) && */ (lst[i]->di == dq->di))
|
||||
{
|
||||
if (dq->x < lst[i]->x)
|
||||
{
|
||||
lst[i]->w += (lst[i]->x - dq->x);
|
||||
lst[i]->x = dq->x;
|
||||
}
|
||||
if ((lst[i]->x + lst[i]->w) < (dq->x + dq->w))
|
||||
lst[i]->w +=
|
||||
(dq->x + dq->w) - (lst[i]->x + lst[i]->w);
|
||||
if (dq->y < lst[i]->y)
|
||||
{
|
||||
lst[i]->h += (lst[i]->y - dq->y);
|
||||
lst[i]->y = dq->y;
|
||||
}
|
||||
if ((lst[i]->y + lst[i]->h) < (dq->y + dq->h))
|
||||
lst[i]->h +=
|
||||
(dq->y + dq->h) - (lst[i]->y + lst[i]->h);
|
||||
already = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#if USE_DQ_SHAPE
|
||||
else if (dq->shape_propagate)
|
||||
{
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
|
@ -68,6 +97,7 @@ HandleDrawQueue()
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if USE_DQ_TCLASS
|
||||
else if (dq->text)
|
||||
{
|
||||
|
@ -106,34 +136,6 @@ HandleDrawQueue()
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (dq->d)
|
||||
{
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
if ((lst[i]->d == dq->d) && DialogItem(dq->d) &&
|
||||
/*(dq->d->item == dq->di) && */ (lst[i]->di == dq->di))
|
||||
{
|
||||
if (dq->x < lst[i]->x)
|
||||
{
|
||||
lst[i]->w += (lst[i]->x - dq->x);
|
||||
lst[i]->x = dq->x;
|
||||
}
|
||||
if ((lst[i]->x + lst[i]->w) < (dq->x + dq->w))
|
||||
lst[i]->w +=
|
||||
(dq->x + dq->w) - (lst[i]->x + lst[i]->w);
|
||||
if (dq->y < lst[i]->y)
|
||||
{
|
||||
lst[i]->h += (lst[i]->y - dq->y);
|
||||
lst[i]->y = dq->y;
|
||||
}
|
||||
if ((lst[i]->y + lst[i]->h) < (dq->y + dq->h))
|
||||
lst[i]->h +=
|
||||
(dq->y + dq->h) - (lst[i]->y + lst[i]->h);
|
||||
already = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (dq->redraw_pager)
|
||||
{
|
||||
for (i = 0; i < num; i++)
|
||||
|
@ -203,12 +205,23 @@ HandleDrawQueue()
|
|||
for (i = num - 1; i >= 0; i--)
|
||||
{
|
||||
dq = lst[i];
|
||||
if (dq->shape_propagate)
|
||||
|
||||
if (dq->d)
|
||||
{
|
||||
/* printf("D %x\n", dq->d->ewin->client.win); */
|
||||
if (FindItem
|
||||
((char *)(dq->d), 0, LIST_FINDBY_POINTER,
|
||||
LIST_TYPE_DIALOG))
|
||||
DialogDrawItems(dq->d, dq->di, dq->x, dq->y, dq->w, dq->h);
|
||||
}
|
||||
#if USE_DQ_SHAPE
|
||||
else if (dq->shape_propagate)
|
||||
{
|
||||
/* printf("S %x\n", dq->win); */
|
||||
if (WinExists(dq->win))
|
||||
PropagateShapes(dq->win);
|
||||
}
|
||||
#endif
|
||||
#if USE_DQ_TCLASS
|
||||
else if (dq->text)
|
||||
{
|
||||
|
@ -238,14 +251,6 @@ HandleDrawQueue()
|
|||
LIST_TYPE_PAGER))
|
||||
dq->func(dq);
|
||||
}
|
||||
else if (dq->d)
|
||||
{
|
||||
/* printf("D %x\n", dq->d->ewin->client.win); */
|
||||
if (FindItem
|
||||
((char *)(dq->d), 0, LIST_FINDBY_POINTER,
|
||||
LIST_TYPE_DIALOG))
|
||||
DialogDrawItems(dq->d, dq->di, dq->x, dq->y, dq->w, dq->h);
|
||||
}
|
||||
else if (dq->redraw_pager)
|
||||
{
|
||||
/* printf("p %x\n", dq->win); */
|
||||
|
@ -1382,6 +1387,10 @@ PropagateShapes(Window win)
|
|||
XRectangle *rects = NULL, *rl = NULL;
|
||||
XWindowAttributes att;
|
||||
|
||||
#if 0
|
||||
Eprintf("PropagateShapes(%d): %#lx\n", Mode.queue_up, win);
|
||||
#endif
|
||||
#if USE_DQ_SHAPE
|
||||
if (Mode.queue_up)
|
||||
{
|
||||
DrawQueue *dq;
|
||||
|
@ -1392,7 +1401,10 @@ PropagateShapes(Window win)
|
|||
AddItem(dq, "DRAW", dq->win, LIST_TYPE_DRAW);
|
||||
return;
|
||||
}
|
||||
EGetGeometry(win, &rt, &x, &y, &w, &h, &d, &d);
|
||||
#endif
|
||||
|
||||
if (!EGetGeometry(win, &rt, &x, &y, &w, &h, &d, &d))
|
||||
return;
|
||||
if ((w <= 0) || (h <= 0))
|
||||
return;
|
||||
|
||||
|
|
|
@ -800,7 +800,6 @@ EwinInstantShade(EWin * ewin, int force)
|
|||
EwinBorderCalcSizes(ewin);
|
||||
ESync();
|
||||
|
||||
EwinPropagateShapes(ewin);
|
||||
Mode.queue_up = pq;
|
||||
|
||||
HintsSetWindowState(ewin);
|
||||
|
@ -866,7 +865,6 @@ EwinInstantUnShade(EWin * ewin)
|
|||
MoveResizeEwin(ewin, x, y, ewin->client.w, ewin->client.h);
|
||||
ESync();
|
||||
|
||||
EwinPropagateShapes(ewin);
|
||||
Mode.queue_up = pq;
|
||||
HintsSetWindowState(ewin);
|
||||
ModulesSignal(ESIGNAL_EWIN_CHANGE, ewin);
|
||||
|
@ -930,14 +928,13 @@ EwinShade(EWin * ewin)
|
|||
EMoveResizeWindow(ewin->win_container,
|
||||
ewin->border->border.left,
|
||||
ewin->border->border.top, ww, hh);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container,
|
||||
ShapeBounding, -(ewin->client.w - ww),
|
||||
0, ewin->client.win, ShapeBounding,
|
||||
ShapeSet);
|
||||
EwinPropagateShapes(ewin);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
|
||||
k = ETimedLoopNext();
|
||||
}
|
||||
|
@ -970,13 +967,12 @@ EwinShade(EWin * ewin)
|
|||
EMoveResizeWindow(ewin->win_container,
|
||||
ewin->border->border.left,
|
||||
ewin->border->border.top, ww, hh);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container,
|
||||
ShapeBounding, 0, 0, ewin->client.win,
|
||||
ShapeBounding, ShapeSet);
|
||||
EwinPropagateShapes(ewin);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
|
||||
k = ETimedLoopNext();
|
||||
}
|
||||
|
@ -1006,15 +1002,14 @@ EwinShade(EWin * ewin)
|
|||
EMoveResizeWindow(ewin->win_container,
|
||||
ewin->border->border.left,
|
||||
ewin->border->border.top, ww, hh);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container,
|
||||
ShapeBounding, 0,
|
||||
-(ewin->client.h - hh),
|
||||
ewin->client.win, ShapeBounding,
|
||||
ShapeSet);
|
||||
EwinPropagateShapes(ewin);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
|
||||
k = ETimedLoopNext();
|
||||
}
|
||||
|
@ -1048,13 +1043,13 @@ EwinShade(EWin * ewin)
|
|||
EMoveResizeWindow(ewin->win_container,
|
||||
ewin->border->border.left,
|
||||
ewin->border->border.top, ww, hh);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container,
|
||||
ShapeBounding, 0, 0, ewin->client.win,
|
||||
ShapeBounding, ShapeSet);
|
||||
EwinPropagateShapes(ewin);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
|
||||
k = ETimedLoopNext();
|
||||
}
|
||||
}
|
||||
|
@ -1064,7 +1059,9 @@ EwinShade(EWin * ewin)
|
|||
|
||||
ewin->shaded = 2;
|
||||
EMoveResizeWindow(ewin->win_container, -30, -30, 1, 1);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container, ShapeBounding, 0, 0,
|
||||
ewin->client.win, ShapeBounding, ShapeSet);
|
||||
MoveEwin(ewin, EoGetX(ewin), EoGetY(ewin));
|
||||
ESync();
|
||||
|
||||
|
@ -1073,11 +1070,6 @@ EwinShade(EWin * ewin)
|
|||
Eprintf("EwinShade-E\n");
|
||||
#endif
|
||||
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container, ShapeBounding, 0, 0,
|
||||
ewin->client.win, ShapeBounding, ShapeSet);
|
||||
EwinPropagateShapes(ewin);
|
||||
|
||||
Mode.queue_up = pq;
|
||||
|
||||
HintsSetWindowState(ewin);
|
||||
|
@ -1142,8 +1134,6 @@ EwinUnShade(EWin * ewin)
|
|||
ewin->border->border.top,
|
||||
w - ewin->border->border.left -
|
||||
ewin->border->border.right, ewin->client.h);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container,
|
||||
ShapeBounding,
|
||||
|
@ -1153,7 +1143,8 @@ EwinUnShade(EWin * ewin)
|
|||
ewin->border->border.right)), 0,
|
||||
ewin->client.win, ShapeBounding,
|
||||
ShapeSet);
|
||||
EwinPropagateShapes(ewin);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
|
||||
k = ETimedLoopNext();
|
||||
}
|
||||
|
@ -1191,13 +1182,12 @@ EwinUnShade(EWin * ewin)
|
|||
ewin->border->border.top,
|
||||
w - ewin->border->border.left -
|
||||
ewin->border->border.right, ewin->client.h);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container,
|
||||
ShapeBounding, 0, 0, ewin->client.win,
|
||||
ShapeBounding, ShapeSet);
|
||||
EwinPropagateShapes(ewin);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
|
||||
k = ETimedLoopNext();
|
||||
}
|
||||
|
@ -1231,8 +1221,6 @@ EwinUnShade(EWin * ewin)
|
|||
ewin->border->border.top, ewin->client.w,
|
||||
h - ewin->border->border.top -
|
||||
ewin->border->border.bottom);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container,
|
||||
ShapeBounding, 0,
|
||||
|
@ -1242,7 +1230,8 @@ EwinUnShade(EWin * ewin)
|
|||
ewin->border->border.bottom)),
|
||||
ewin->client.win, ShapeBounding,
|
||||
ShapeSet);
|
||||
EwinPropagateShapes(ewin);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
|
||||
k = ETimedLoopNext();
|
||||
}
|
||||
|
@ -1280,13 +1269,12 @@ EwinUnShade(EWin * ewin)
|
|||
ewin->border->border.top, ewin->client.w,
|
||||
h - ewin->border->border.top -
|
||||
ewin->border->border.bottom);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container,
|
||||
ShapeBounding, 0, 0, ewin->client.win,
|
||||
ShapeBounding, ShapeSet);
|
||||
EwinPropagateShapes(ewin);
|
||||
EoMoveResize(ewin, x, y, w, h);
|
||||
EwinBorderCalcSizes(ewin);
|
||||
|
||||
k = ETimedLoopNext();
|
||||
}
|
||||
|
@ -1299,6 +1287,10 @@ EwinUnShade(EWin * ewin)
|
|||
att.win_gravity = NorthWestGravity;
|
||||
EChangeWindowAttributes(ewin->client.win, CWWinGravity, &att);
|
||||
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container, ShapeBounding, 0, 0,
|
||||
ewin->client.win, ShapeBounding, ShapeSet);
|
||||
|
||||
MoveResizeEwin(ewin, EoGetX(ewin), EoGetY(ewin), ewin->client.w,
|
||||
ewin->client.h);
|
||||
ESync();
|
||||
|
@ -1308,11 +1300,6 @@ EwinUnShade(EWin * ewin)
|
|||
Eprintf("EwinUnShade-E\n");
|
||||
#endif
|
||||
|
||||
if (ewin->client.shaped)
|
||||
EShapeCombineShape(ewin->win_container, ShapeBounding, 0, 0,
|
||||
ewin->client.win, ShapeBounding, ShapeSet);
|
||||
EwinPropagateShapes(ewin);
|
||||
|
||||
Mode.queue_up = pq;
|
||||
|
||||
HintsSetWindowState(ewin);
|
||||
|
|
25
src/ewins.c
25
src/ewins.c
|
@ -492,8 +492,22 @@ EwinGetGeometry(EWin * ewin)
|
|||
void
|
||||
EwinPropagateShapes(EWin * ewin)
|
||||
{
|
||||
if (!ewin->docked)
|
||||
PropagateShapes(EoGetWin(ewin));
|
||||
if (!EoIsShown(ewin))
|
||||
return;
|
||||
|
||||
if (ewin->docked)
|
||||
return;
|
||||
|
||||
#if 0
|
||||
Eprintf("EwinPropagateShapes %#lx %#lx %s\n", EoGetWin(ewin),
|
||||
ewin->client.win, EoGetName(ewin));
|
||||
#endif
|
||||
if (!ewin->shapedone)
|
||||
{
|
||||
PropagateShapes(EoGetWin(ewin));
|
||||
EoChangeShape(ewin);
|
||||
ewin->shapedone = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1393,6 +1407,13 @@ ShowEwin(EWin * ewin)
|
|||
EMapWindow(ewin->client.win);
|
||||
}
|
||||
|
||||
if (!ewin->shapedone)
|
||||
{
|
||||
ewin->o.shown = 1;
|
||||
EwinPropagateShapes(ewin);
|
||||
ewin->o.shown = 0;
|
||||
}
|
||||
|
||||
EoMap(ewin, 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -1969,9 +1969,9 @@ IconboxRedraw(Iconbox * ib)
|
|||
PropagateShapes(ib->icon_win);
|
||||
PropagateShapes(ib->win);
|
||||
ICCCM_GetShapeInfo(ib->ewin);
|
||||
EwinPropagateShapes(ib->ewin);
|
||||
if (ib->nobg)
|
||||
EoChangeShape(ib->ewin);
|
||||
ib->ewin->shapedone = 0;
|
||||
EwinPropagateShapes(ib->ewin);
|
||||
|
||||
Mode.queue_up = pq;
|
||||
}
|
||||
|
|
|
@ -686,7 +686,6 @@ PagerShow(Pager * p)
|
|||
h);
|
||||
}
|
||||
PagerRedraw(p, 1);
|
||||
EwinPropagateShapes(ewin);
|
||||
|
||||
/* show the pager ewin */
|
||||
ShowEwin(ewin);
|
||||
|
|
Loading…
Reference in New Issue