diff --git a/src/E.h b/src/E.h index 7f452102..30dfe4d5 100644 --- a/src/E.h +++ b/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); diff --git a/src/draw.c b/src/draw.c index d63c4038..019ac17a 100644 --- a/src/draw.c +++ b/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,12 +407,13 @@ 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); - goto done; + if (md == MR_OPAQUE) + goto done; } if (firstlast == 0) @@ -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: diff --git a/src/ipc.c b/src/ipc.c index 7f077450..8f43f965 100644 --- a/src/ipc.c +++ b/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; diff --git a/src/moveresize.c b/src/moveresize.c index 8566f5c3..da03a758 100644 --- a/src/moveresize.c +++ b/src/moveresize.c @@ -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); diff --git a/src/settings.c b/src/settings.c index b5ca6ab3..a5de6148 100644 --- a/src/settings.c +++ b/src/settings.c @@ -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); diff --git a/src/shapewin.c b/src/shapewin.c index ec6c75b0..12ec7ce2 100644 --- a/src/shapewin.c +++ b/src/shapewin.c @@ -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,