Add new "technical/opaque" move/resize mode.
Work by Daniel Manjarres. SVN revision: 62889
This commit is contained in:
parent
460988a63d
commit
dc9e952685
1
src/E.h
1
src/E.h
|
@ -496,6 +496,7 @@ void DialogOKstr(const char *title, const char *txt);
|
|||
#define MR_SHADED 3
|
||||
#define MR_SEMI_SOLID 4
|
||||
#define MR_TRANSLUCENT 5
|
||||
#define MR_TECH_OPAQUE 6
|
||||
|
||||
int MoveResizeModeValidateMove(int md);
|
||||
int MoveResizeModeValidateResize(int md);
|
||||
|
|
20
src/draw.c
20
src/draw.c
|
@ -31,11 +31,11 @@
|
|||
#if ENABLE_OLDMOVRES
|
||||
#define MR_ENABLE_STIPPLED 1 /* Enable shaded/semi-solid modes */
|
||||
#define MR_ENABLE_TRANSLUCENT 1 /* Enable translucent mode */
|
||||
#define MR_MODES_MOVE 0x3f /* MR_OPAQUE through MR_TRANSLUCENT */
|
||||
#define MR_MODES_RESIZE 0x1f /* MR_OPAQUE through MR_SEMI_SOLID */
|
||||
#define MR_MODES_MOVE 0x7f /* MR_OPAQUE through MR_TECH_OPAQUE */
|
||||
#define MR_MODES_RESIZE 0x5f /* MR_OPAQUE through MR_SEMI_SOLID and MR_TECH_OPAQUE */
|
||||
#else
|
||||
#define MR_MODES_MOVE 0x07 /* MR_OPAQUE through MR_BOX */
|
||||
#define MR_MODES_RESIZE 0x07 /* MR_OPAQUE through MR_BOX */
|
||||
#define MR_MODES_MOVE 0x47 /* MR_OPAQUE through MR_BOX and MR_TECH_OPAQUE */
|
||||
#define MR_MODES_RESIZE 0x47 /* MR_OPAQUE through MR_BOX and MR_TECH_OPAQUE */
|
||||
#endif
|
||||
|
||||
#if MR_ENABLE_STIPPLED
|
||||
|
@ -217,8 +217,11 @@ typedef void (DrawFunc) (Drawable dr, GC gc, int a, int b, int c, int d,
|
|||
static DrawFunc *const draw_functions[] = {
|
||||
do_draw_technical, do_draw_boxy,
|
||||
#if MR_ENABLE_STIPPLED
|
||||
do_draw_shaded, do_draw_semi_solid
|
||||
do_draw_shaded, do_draw_semi_solid,
|
||||
#else
|
||||
NULL, NULL,
|
||||
#endif /* MR_ENABLE_STIPPLED */
|
||||
NULL, do_draw_technical,
|
||||
};
|
||||
|
||||
static void
|
||||
|
@ -404,11 +407,12 @@ DrawEwinShape(EWin * ewin, int md, int x, int y, int w, int h,
|
|||
(ewin->state.shaded || (w == ewin->shape_w && h == ewin->shape_h))))
|
||||
return;
|
||||
|
||||
if (md == MR_OPAQUE)
|
||||
if ((md == MR_OPAQUE) || (md == MR_TECH_OPAQUE))
|
||||
{
|
||||
EwinOpMoveResize(ewin, OPSRC_USER, x, y, w, h);
|
||||
EwinShapeSet(ewin);
|
||||
CoordsShow(ewin);
|
||||
if (md == MR_OPAQUE)
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -440,7 +444,8 @@ DrawEwinShape(EWin * ewin, int md, int x, int y, int w, int h,
|
|||
|
||||
EwinBorderGetSize(ewin, &psd->bl, &psd->br, &psd->bt, &psd->bb);
|
||||
|
||||
if (md <= MR_BOX && Conf.movres.avoid_server_grab)
|
||||
if (((md <= MR_BOX) || (md == MR_TECH_OPAQUE)) &&
|
||||
Conf.movres.avoid_server_grab)
|
||||
{
|
||||
_ShapeDrawNograb_tech_box(psd, md, firstlast, x, y, w, h, seqno);
|
||||
goto done;
|
||||
|
@ -449,6 +454,7 @@ DrawEwinShape(EWin * ewin, int md, int x, int y, int w, int h,
|
|||
switch (md)
|
||||
{
|
||||
case MR_TECHNICAL:
|
||||
case MR_TECH_OPAQUE:
|
||||
case MR_BOX:
|
||||
#if MR_ENABLE_STIPPLED
|
||||
case MR_SHADED:
|
||||
|
|
17
src/ipc.c
17
src/ipc.c
|
@ -208,12 +208,9 @@ CfgStrlistIndex(const char *const *list, const char *str)
|
|||
return -1;
|
||||
}
|
||||
|
||||
static const char *const MovResCfgMoveModes[] = {
|
||||
"opaque", "lined", "box", "shaded", "semi-solid", "translucent", NULL
|
||||
};
|
||||
|
||||
static const char *const MovResCfgResizeModes[] = {
|
||||
"opaque", "lined", "box", "shaded", "semi-solid", NULL
|
||||
static const char *const MovResCfgMoveResizeModeNames[] = {
|
||||
"opaque", "lined", "box", "shaded", "semi-solid", "translucent", "techop",
|
||||
NULL
|
||||
};
|
||||
|
||||
static const char *const MovResCfgInfoModes[] = {
|
||||
|
@ -243,11 +240,11 @@ IPC_MoveResize(const char *params)
|
|||
Conf.movres.mode_move =
|
||||
MoveResizeModeValidateMove(Conf.movres.mode_move);
|
||||
IpcPrintf("Move mode: %s\n",
|
||||
MovResCfgMoveModes[Conf.movres.mode_move]);
|
||||
MovResCfgMoveResizeModeNames[Conf.movres.mode_move]);
|
||||
return;
|
||||
}
|
||||
|
||||
i = CfgStrlistIndex(MovResCfgMoveModes, param2);
|
||||
i = CfgStrlistIndex(MovResCfgMoveResizeModeNames, param2);
|
||||
if (i >= 0)
|
||||
{
|
||||
Conf.movres.mode_move = i;
|
||||
|
@ -265,11 +262,11 @@ IPC_MoveResize(const char *params)
|
|||
Conf.movres.mode_resize =
|
||||
MoveResizeModeValidateResize(Conf.movres.mode_resize);
|
||||
IpcPrintf("Resize mode: %s\n",
|
||||
MovResCfgResizeModes[Conf.movres.mode_resize]);
|
||||
MovResCfgMoveResizeModeNames[Conf.movres.mode_resize]);
|
||||
return;
|
||||
}
|
||||
|
||||
i = CfgStrlistIndex(MovResCfgResizeModes, param2);
|
||||
i = CfgStrlistIndex(MovResCfgMoveResizeModeNames, param2);
|
||||
if (i >= 0)
|
||||
{
|
||||
Conf.movres.mode_resize = i;
|
||||
|
|
|
@ -56,7 +56,7 @@ _NeedServerGrab(int mode)
|
|||
{
|
||||
if (mode == MR_OPAQUE)
|
||||
return 0;
|
||||
if (mode <= MR_BOX)
|
||||
if ((mode <= MR_BOX) || (mode == MR_TECH_OPAQUE))
|
||||
return !Conf.movres.avoid_server_grab;
|
||||
return 1;
|
||||
}
|
||||
|
@ -127,7 +127,7 @@ MoveResizeMoveStart(EWin * ewin, int kbd, int constrained, int nogroup)
|
|||
{
|
||||
EwinShapeSet(gwins[i]);
|
||||
EwinOpFloatAt(gwins[i], OPSRC_USER, EoGetX(gwins[i]), EoGetY(gwins[i]));
|
||||
if (Mode_mr.mode == MR_OPAQUE)
|
||||
if ((Mode_mr.mode == MR_OPAQUE) || (Mode_mr.mode == MR_TECH_OPAQUE))
|
||||
{
|
||||
ewin->state.moving = 1;
|
||||
EwinUpdateOpacity(gwins[i]);
|
||||
|
@ -189,7 +189,7 @@ _MoveResizeMoveEnd(EWin * ewin)
|
|||
EwinOpUnfloatAt(ewin, OPSRC_USER, d2,
|
||||
ewin->shape_x - (EoGetX(d2) - EoGetX(d1)),
|
||||
ewin->shape_y - (EoGetY(d2) - EoGetY(d1)));
|
||||
if (Mode_mr.mode == MR_OPAQUE)
|
||||
if ((Mode_mr.mode == MR_OPAQUE) || (Mode_mr.mode == MR_TECH_OPAQUE))
|
||||
{
|
||||
ewin->state.moving = 0;
|
||||
EwinUpdateOpacity(ewin);
|
||||
|
@ -328,7 +328,7 @@ MoveResizeResizeStart(EWin * ewin, int kbd, int hv)
|
|||
/* Run idlers (stacking, border updates, ...) before drawing lines */
|
||||
IdlersRun();
|
||||
}
|
||||
if (Mode_mr.mode == MR_OPAQUE)
|
||||
if ((Mode_mr.mode == MR_OPAQUE) || (Mode_mr.mode == MR_TECH_OPAQUE))
|
||||
{
|
||||
ewin->state.resizing = 1;
|
||||
EwinUpdateOpacity(ewin);
|
||||
|
@ -465,7 +465,7 @@ _MoveResizeResizeEnd(EWin * ewin)
|
|||
DrawEwinShape(ewin, Conf.movres.mode_resize, ewin->shape_x, ewin->shape_y,
|
||||
ewin->shape_w, ewin->shape_h, 2, 0);
|
||||
|
||||
if (Mode_mr.mode == MR_OPAQUE)
|
||||
if ((Mode_mr.mode == MR_OPAQUE) || (Mode_mr.mode == MR_TECH_OPAQUE))
|
||||
{
|
||||
ewin->state.resizing = 0;
|
||||
EwinUpdateOpacity(ewin);
|
||||
|
|
|
@ -117,6 +117,16 @@ _DlgFillMoveResize(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
|
|||
DialogItemRadioButtonSetFirst(di, radio2);
|
||||
DialogItemRadioButtonGroupSetVal(di, MR_TECHNICAL);
|
||||
|
||||
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
||||
DialogItemSetText(di, _("TechOpaque"));
|
||||
DialogItemRadioButtonSetFirst(di, radio1);
|
||||
DialogItemRadioButtonGroupSetVal(di, MR_TECH_OPAQUE);
|
||||
|
||||
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
||||
DialogItemSetText(di, _("TechOpaque"));
|
||||
DialogItemRadioButtonSetFirst(di, radio2);
|
||||
DialogItemRadioButtonGroupSetVal(di, MR_TECH_OPAQUE);
|
||||
|
||||
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
||||
DialogItemSetText(di, _("Box"));
|
||||
DialogItemRadioButtonSetFirst(di, radio1);
|
||||
|
@ -418,6 +428,11 @@ _DlgFillPlacement(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
|
|||
DialogItemRadioButtonSetFirst(di, radio);
|
||||
DialogItemRadioButtonGroupSetVal(di, MR_TECHNICAL);
|
||||
|
||||
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
||||
DialogItemSetText(di, _("TechOpaque"));
|
||||
DialogItemRadioButtonSetFirst(di, radio);
|
||||
DialogItemRadioButtonGroupSetVal(di, MR_TECH_OPAQUE);
|
||||
|
||||
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
||||
DialogItemSetText(di, _("Box"));
|
||||
DialogItemRadioButtonSetFirst(di, radio);
|
||||
|
@ -436,8 +451,6 @@ _DlgFillPlacement(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
|
|||
DialogItemRadioButtonGroupSetValPtr(radio, &dd->slide_mode);
|
||||
#endif /* ENABLE_OLDMOVRES */
|
||||
|
||||
DialogAddItem(table, DITEM_NONE);
|
||||
|
||||
di = DialogAddItem(table, DITEM_TEXT);
|
||||
DialogItemSetFill(di, 0, 0);
|
||||
DialogItemSetAlign(di, 1024, 512);
|
||||
|
|
|
@ -86,7 +86,7 @@ ShapewinCreate(int md)
|
|||
ShapeInput, 0, 0, NULL, 0, ShapeSet, Unsorted);
|
||||
#endif
|
||||
|
||||
if (md == MR_TECHNICAL)
|
||||
if ((md == MR_TECHNICAL) || (md == MR_TECH_OPAQUE))
|
||||
{
|
||||
sw->mask =
|
||||
ECreatePixmap(EoGetWin(sw), WinGetW(VROOT), WinGetH(VROOT), 1);
|
||||
|
@ -111,7 +111,7 @@ ShapewinShapeSet(ShapeWin * sw, int md, int x, int y, int w, int h,
|
|||
w2 = w + bl + br;
|
||||
h2 = h + bt + bb;
|
||||
|
||||
if (md == MR_TECHNICAL)
|
||||
if ((md == MR_TECHNICAL) || (md == MR_TECH_OPAQUE))
|
||||
{
|
||||
XSetForeground(disp, sw->gc, 0);
|
||||
XFillRectangle(disp, sw->mask, sw->gc,
|
||||
|
|
Loading…
Reference in New Issue