Set window operation source some more places.

SVN revision: 22058
This commit is contained in:
Kim Woelders 2006-04-12 15:19:40 +00:00
parent d87574b64b
commit e0b0ca87e2
6 changed files with 63 additions and 46 deletions

View File

@ -156,7 +156,7 @@ SlideEwinTo(EWin * ewin, int fx, int fy, int tx, int ty, int speed)
if (Conf.place.slidemode)
DrawEwinShape(ewin, Conf.place.slidemode, tx, ty,
ewin->client.w, ewin->client.h, 2);
EwinMove(ewin, tx, ty);
EwinOpMove(ewin, OPSRC_USER, tx, ty);
FocusEnable(1);
@ -572,15 +572,51 @@ EwinMoveToDesktopAt(EWin * ewin, Desk * dsk, int x, int y)
}
void
EwinFloatAt(EWin * ewin, int x, int y)
EwinOpMove(EWin * ewin, int source, int x, int y)
{
doEwinMoveResize(ewin, EoGetDesk(ewin), x, y, 0, 0, MRF_MOVE | MRF_FLOAT);
Mode.op_source = source;
EwinMove(ewin, x, y);
Mode.op_source = 0;
}
void
EwinUnfloatAt(EWin * ewin, Desk * dsk, int x, int y)
EwinOpResize(EWin * ewin, int source, int w, int h)
{
Mode.op_source = source;
EwinResize(ewin, w, h);
Mode.op_source = 0;
}
void
EwinOpMoveResize(EWin * ewin, int source, int x, int y, int w, int h)
{
Mode.op_source = source;
EwinMoveResize(ewin, x, y, w, h);
Mode.op_source = 0;
}
void
EwinOpMoveToDesktopAt(EWin * ewin, int source, Desk * dsk, int x, int y)
{
Mode.op_source = source;
EwinMoveToDesktopAt(ewin, dsk, x, y);
Mode.op_source = 0;
}
void
EwinOpFloatAt(EWin * ewin, int source, int x, int y)
{
Mode.op_source = source;
doEwinMoveResize(ewin, EoGetDesk(ewin), x, y, 0, 0, MRF_MOVE | MRF_FLOAT);
Mode.op_source = 0;
}
void
EwinOpUnfloatAt(EWin * ewin, int source, Desk * dsk, int x, int y)
{
Mode.op_source = source;
doEwinMoveResize(ewin, dsk, x, y, 0, 0, MRF_MOVE | MRF_UNFLOAT);
Mode.op_source = 0;
}
void
@ -1289,30 +1325,6 @@ EwinUnShade(EWin * ewin)
HintsSetWindowState(ewin);
}
void
EwinOpMove(EWin * ewin, int source, int x, int y)
{
Mode.op_source = source;
EwinMove(ewin, x, y);
Mode.op_source = 0;
}
void
EwinOpResize(EWin * ewin, int source, int w, int h)
{
Mode.op_source = source;
EwinResize(ewin, w, h);
Mode.op_source = 0;
}
void
EwinOpMoveResize(EWin * ewin, int source, int x, int y, int w, int h)
{
Mode.op_source = source;
EwinMoveResize(ewin, x, y, w, h);
Mode.op_source = 0;
}
void
EwinOpFullscreen(EWin * ewin, int source __UNUSED__, int on)
{

View File

@ -433,29 +433,29 @@ DetermineEwinFloat(EWin * ewin, int dx, int dy)
case 0:
if (((x + dx < 0) ||
((x + dx + w <= VRoot.w) &&
((DesktopAt(xd + x + dx + w - 1, yd) != dsk)))))
(DesktopAt(xd + x + dx + w - 1, yd) != dsk))))
dofloat = 1;
break;
case 1:
if (((x + dx + w > VRoot.w) ||
((x + dx >= 0) && ((DesktopAt(xd + x + dx, yd) != dsk)))))
((x + dx >= 0) && (DesktopAt(xd + x + dx, yd) != dsk))))
dofloat = 1;
break;
case 2:
if (((y + dy < 0) ||
((y + dy + h <= VRoot.h) &&
((DesktopAt(xd, yd + y + dy + h - 1) != dsk)))))
(DesktopAt(xd, yd + y + dy + h - 1) != dsk))))
dofloat = 1;
break;
case 3:
if (((y + dy + h > VRoot.h) ||
((y + dy >= 0) && ((DesktopAt(xd, yd + y + dy) != dsk)))))
((y + dy >= 0) && (DesktopAt(xd, yd + y + dy) != dsk))))
dofloat = 1;
break;
}
if (dofloat)
EwinFloatAt(ewin, x + xd, y + yd);
EwinOpFloatAt(ewin, OPSRC_USER, x + xd, y + yd);
}
}
@ -698,6 +698,7 @@ AddToFamily(EWin * ewin, Window win)
/* We got here by MapRequest. DestroyNotify should follow. */
goto done;
}
EwinGetHints(ewin);
EwinManage(ewin);
EwinConfigure(ewin);

View File

@ -29,7 +29,7 @@
#include "xwin.h"
/* Window operation sources */
#define OPSRC_UNKNOWN 0
#define OPSRC_NA 0
#define OPSRC_APP 1
#define OPSRC_USER 2
#define OPSRC_WM 3
@ -335,8 +335,6 @@ void EwinMoveResizeWithGravity(EWin * ewin, int x, int y, int w,
int h, int grav);
void EwinMoveToDesktop(EWin * ewin, Desk * d);
void EwinMoveToDesktopAt(EWin * ewin, Desk * d, int x, int y);
void EwinFloatAt(EWin * ewin, int x, int y);
void EwinUnfloatAt(EWin * ewin, Desk * d, int x, int y);
void EwinIconify(EWin * ewin);
void EwinDeIconify(EWin * ewin);
void EwinInstantShade(EWin * ewin, int force);
@ -351,6 +349,11 @@ void EwinOpMove(EWin * ewin, int source, int x, int y);
void EwinOpResize(EWin * ewin, int source, int w, int h);
void EwinOpMoveResize(EWin * ewin, int source, int x, int y,
int w, int h);
void EwinOpMoveToDesktopAt(EWin * ewin, int source, Desk * dsk,
int x, int y);
void EwinOpFloatAt(EWin * ewin, int source, int x, int y);
void EwinOpUnfloatAt(EWin * ewin, int source, Desk * d,
int x, int y);
void EwinOpClose(EWin * ewin, int source);
void EwinOpActivate(EWin * ewin, int source);
void EwinOpKill(EWin * ewin, int source);

View File

@ -353,7 +353,7 @@ MenuShow(Menu * m, char noshow)
if (!noshow)
{
ICCCM_Cmap(NULL);
EwinFloatAt(ewin, EoGetX(ewin), EoGetY(ewin));
EwinOpFloatAt(ewin, OPSRC_NA, EoGetX(ewin), EoGetY(ewin));
ShowEwin(ewin);
if (Conf.menus.animate)
EwinUnShade(ewin);
@ -1578,7 +1578,7 @@ SubmenuShowTimeout(int val __UNUSED__, void *dat)
Mode.move.check = 0; /* Bypass on-screen checks */
EwinMove(ewin2, EoGetX(ewin) + xo, EoGetY(ewin) + yo);
Mode.move.check = 1;
EwinFloatAt(ewin2, EoGetX(ewin2), EoGetY(ewin2));
EwinOpFloatAt(ewin2, OPSRC_NA, EoGetX(ewin2), EoGetY(ewin2));
RaiseEwin(ewin2);
ShowEwin(ewin2);

View File

@ -98,7 +98,7 @@ ActionMoveStart(EWin * ewin, int grab, char constrained, int nogroup)
for (i = 0; i < num; i++)
{
EwinShapeSet(gwins[i]);
EwinFloatAt(gwins[i], EoGetX(gwins[i]), EoGetY(gwins[i]));
EwinOpFloatAt(gwins[i], OPSRC_USER, EoGetX(gwins[i]), EoGetY(gwins[i]));
if (Mode_mr.mode == 0)
{
ewin->state.moving = 1;
@ -152,11 +152,11 @@ ActionMoveEnd(EWin * ewin)
ewin = gwins[i];
d1 = EoGetDesk(ewin);
if (d2 == d1)
EwinUnfloatAt(ewin, d2, ewin->shape_x, ewin->shape_y);
EwinOpUnfloatAt(ewin, OPSRC_USER, d2, ewin->shape_x, ewin->shape_y);
else
EwinUnfloatAt(ewin, d2,
ewin->shape_x - (EoGetX(d2) - EoGetX(d1)),
ewin->shape_y - (EoGetY(d2) - EoGetY(d1)));
EwinOpUnfloatAt(ewin, OPSRC_USER, d2,
ewin->shape_x - (EoGetX(d2) - EoGetX(d1)),
ewin->shape_y - (EoGetY(d2) - EoGetY(d1)));
if (Mode_mr.mode == 0)
{
ewin->state.moving = 0;

View File

@ -1275,10 +1275,11 @@ EwinGroupMove(EWin * ewin, Desk * dsk, int x, int y)
continue;
if (newdesk)
EwinMoveToDesktopAt(gwins[i], dsk, EoGetX(gwins[i]) + dx,
EoGetY(gwins[i]) + dy);
EwinOpMoveToDesktopAt(gwins[i], OPSRC_USER, dsk,
EoGetX(gwins[i]) + dx, EoGetY(gwins[i]) + dy);
else
EwinMove(gwins[i], EoGetX(gwins[i]) + dx, EoGetY(gwins[i]) + dy);
EwinOpMove(gwins[i], OPSRC_USER, EoGetX(gwins[i]) + dx,
EoGetY(gwins[i]) + dy);
}
if (gwins)
Efree(gwins);