Remove RandomPlacement and UsePPosition options.

For now that means to behave as if RandomPlacement is true
and UsePPosition is non-zero (use PPosition if the window position
isn't (0,0).
This commit is contained in:
Mike Small 2018-08-25 15:01:34 -04:00
parent eb039dc872
commit 4de2773058
5 changed files with 14 additions and 359 deletions

View File

@ -554,10 +554,6 @@ work around bugs in older applications that have problems with focus events.
This variable sets \fItwmruined\fP's priority. \fIpriority\fP should be an
unquoted, signed number (e.g. 999). This variable has an effect only
if the server supports the SYNC extension.
.IP "\fBRandomPlacement\fP" 8
This variable indicates that windows with no specified geometry should
be placed in a pseudo-random location instead of having the user drag out
an outline.
.IP "\fBResizeFont\fP \fIstring\fP" 8
This variable specifies the font to be used for in the dimensions window when
resizing windows. The default is "fixed".
@ -625,19 +621,6 @@ This variable specifies the filename of a bitmap file to be
used as the default icon. This bitmap will be used as the icon of all
clients which do not provide an icon bitmap and are not listed
in the \fBIcons\fP list.
.IP "\fBUsePPosition\fP \fIstring\fP" 8
This variable specifies whether or not \fItwmruined\fP should honor
program-requested locations (given by the \fBPPosition\fP flag in the
WM_NORMAL_HINTS property) in the absence of a user-specified position.
The argument \fIstring\fP may have one of three values: \fB"off"\fP
(the default)
indicating that \fItwmruined\fP
should ignore the program-supplied position,
\fB"on"\fP indicating that the position
should be used, and
\fB"non-zero"\fP indicating that the position should used if
it is other than (0,0). The latter option is for working around a bug in
older toolkits.
.IP "\fBWarpCursor\fP [{ \fIwin-list\fP }]" 8
This variable indicates that the pointer should be warped into windows when
they are deiconified. If the optional \fIwin-list\fP is given, the pointer

View File

@ -144,12 +144,9 @@ TwmWindow *
AddWindow(Window w)
{
TwmWindow *tmp_win; /* new twm window structure */
int stat;
XEvent event;
unsigned long valuemask; /* mask for create windows */
XSetWindowAttributes attributes; /* attributes for create windows */
int width, height; /* tmp variable */
int ask_user; /* don't know where to put the window */
int random_placement; /* don't know where to put the window */
int gravx, gravy; /* gravity signs for positioning */
int namelen;
int bw2;
@ -341,32 +338,29 @@ AddWindow(Window w)
}
else
{
GetGravityOffsets (tmp_win, &gravx, &gravy);
GetGravityOffsets(tmp_win, &gravx, &gravy);
}
/*
* Don't bother user if:
* Random placement is used when...
*
* o the window is a transient, or
* o the window is not a transient, and
*
* o a USPosition was requested, or
* o a USPosition was not requested, and
*
* o a PPosition was requested and UsePPosition is ON or
* NON_ZERO if the window is at other than (0,0)
* o a PPosition was not requested or it was and the window is not at (0,0)
*
* According to twm's man page, not respecting PPosition = (0,0)
* avoids problems with old toolkits.
*/
ask_user = TRUE;
if (tmp_win->transient ||
(tmp_win->hints.flags & USPosition) ||
((tmp_win->hints.flags & PPosition) && Scr->UsePPosition &&
(Scr->UsePPosition == PPOS_ON ||
tmp_win->attr.x != 0 || tmp_win->attr.y != 0)))
ask_user = FALSE;
random_placement = !tmp_win->transient && !(tmp_win->hints.flags & USPosition)
&& !((tmp_win->hints.flags & PPosition)
&& (tmp_win->attr.x != 0 || tmp_win->attr.y != 0));
/*
* do any prompting for position
* set window position
*/
if (HandlingEvents && ask_user && !restoredFromPrevSession) {
if (Scr->RandomPlacement) { /* just stick it somewhere */
if (HandlingEvents && random_placement && !restoredFromPrevSession) {
if ((PlaceX + tmp_win->attr.width) > Scr->MyDisplayWidth)
PlaceX = 50;
if ((PlaceY + tmp_win->attr.height) > Scr->MyDisplayHeight)
@ -376,280 +370,6 @@ AddWindow(Window w)
tmp_win->attr.y = PlaceY;
PlaceX += 30;
PlaceY += 30;
} else { /* else prompt */
if (!(tmp_win->wmhints && tmp_win->wmhints->flags & StateHint &&
tmp_win->wmhints->initial_state == IconicState))
{
Bool firsttime = True;
/* better wait until all the mouse buttons have been
* released.
*/
while (TRUE)
{
XUngrabServer(dpy);
XSync(dpy, 0);
XGrabServer(dpy);
JunkMask = 0;
if (!XQueryPointer (dpy, Scr->Root, &JunkRoot,
&JunkChild, &JunkX, &JunkY,
&AddingX, &AddingY, &JunkMask))
JunkMask = 0;
JunkMask &= (Button1Mask | Button2Mask | Button3Mask |
Button4Mask | Button5Mask);
/*
* watch out for changing screens
*/
if (firsttime) {
if (JunkRoot != Scr->Root) {
register int scrnum;
for (scrnum = 0; scrnum < NumScreens; scrnum++) {
if (JunkRoot == RootWindow (dpy, scrnum)) break;
}
if (scrnum != NumScreens) PreviousScreen = scrnum;
}
firsttime = False;
}
/*
* wait for buttons to come up; yuck
*/
if (JunkMask != 0) continue;
/*
* this will cause a warp to the indicated root
*/
stat = XGrabPointer(dpy, Scr->Root, False,
ButtonPressMask | ButtonReleaseMask |
PointerMotionMask | PointerMotionHintMask,
GrabModeAsync, GrabModeAsync,
Scr->Root, UpperLeftCursor, CurrentTime);
if (stat == GrabSuccess)
break;
}
width = (SIZE_HINDENT + MyFont_TextWidth (&Scr->SizeFont,
tmp_win->name, namelen));
height = Scr->SizeFont.height + SIZE_VINDENT * 2;
XResizeWindow (dpy, Scr->SizeWindow, width + SIZE_HINDENT, height);
XMapRaised(dpy, Scr->SizeWindow);
InstallRootColormap();
MyFont_ChangeGC(Scr->DefaultC.fore, Scr->DefaultC.back,
&Scr->SizeFont);
MyFont_DrawImageString (dpy, Scr->SizeWindow, &Scr->SizeFont,
Scr->NormalGC,
SIZE_HINDENT,
SIZE_VINDENT + Scr->SizeFont.ascent,
tmp_win->name, namelen);
AddingW = tmp_win->attr.width + bw2;
AddingH = tmp_win->attr.height + tmp_win->title_height + bw2;
if (Scr->DontMoveOff) {
/*
* Make sure the initial outline comes up on the screen.
*/
if (AddingX < 0)
AddingX = 0;
if (AddingX > Scr->MyDisplayWidth - AddingW)
AddingX = Scr->MyDisplayWidth - AddingW;
if (AddingY < 0)
AddingY = 0;
if (AddingY > Scr->MyDisplayHeight - AddingH)
AddingY = Scr->MyDisplayHeight - AddingH;
}
MoveOutline(Scr->Root, AddingX, AddingY, AddingW, AddingH,
tmp_win->frame_bw, tmp_win->title_height);
while (TRUE)
{
XMaskEvent(dpy, ButtonPressMask | PointerMotionMask, &event);
if (Event.type == MotionNotify) {
/* discard any extra motion events before a release */
while(XCheckMaskEvent(dpy,
ButtonMotionMask | ButtonPressMask, &Event))
if (Event.type == ButtonPress)
break;
}
if (event.type == ButtonPress) {
AddingX = event.xbutton.x_root;
AddingY = event.xbutton.y_root;
/* DontMoveOff prohibits user form off-screen placement */
if (Scr->DontMoveOff)
{
int AddingR, AddingB;
AddingR = AddingX + AddingW;
AddingB = AddingY + AddingH;
if (AddingX < 0)
AddingX = 0;
if (AddingR > Scr->MyDisplayWidth)
AddingX = Scr->MyDisplayWidth - AddingW;
if (AddingY < 0)
AddingY = 0;
if (AddingB > Scr->MyDisplayHeight)
AddingY = Scr->MyDisplayHeight - AddingH;
}
break;
}
if (event.type != MotionNotify) {
continue;
}
XQueryPointer(dpy, Scr->Root, &JunkRoot, &JunkChild,
&JunkX, &JunkY, &AddingX, &AddingY, &JunkMask);
if (Scr->DontMoveOff)
{
int AddingR, AddingB;
AddingR = AddingX + AddingW;
AddingB = AddingY + AddingH;
if (AddingX < 0)
AddingX = 0;
if (AddingR > Scr->MyDisplayWidth)
AddingX = Scr->MyDisplayWidth - AddingW;
if (AddingY < 0)
AddingY = 0;
if (AddingB > Scr->MyDisplayHeight)
AddingY = Scr->MyDisplayHeight - AddingH;
}
MoveOutline(Scr->Root, AddingX, AddingY, AddingW, AddingH,
tmp_win->frame_bw, tmp_win->title_height);
}
if (event.xbutton.button == Button2) {
int lastx, lasty;
Scr->SizeStringOffset = width +
MyFont_TextWidth(&Scr->SizeFont, ": ", 2);
XResizeWindow (dpy, Scr->SizeWindow, Scr->SizeStringOffset +
Scr->SizeStringWidth, height);
MyFont_DrawImageString (dpy, Scr->SizeWindow, &Scr->SizeFont,
Scr->NormalGC, width,
SIZE_VINDENT + Scr->SizeFont.ascent,
": ", 2);
if (0/*Scr->AutoRelativeResize*/) {
int dx = (tmp_win->attr.width / 4);
int dy = (tmp_win->attr.height / 4);
#define HALF_AVE_CURSOR_SIZE 8 /* so that it is visible */
if (dx < HALF_AVE_CURSOR_SIZE) dx = HALF_AVE_CURSOR_SIZE;
if (dy < HALF_AVE_CURSOR_SIZE) dy = HALF_AVE_CURSOR_SIZE;
#undef HALF_AVE_CURSOR_SIZE
dx += (tmp_win->frame_bw + 1);
dy += (bw2 + tmp_win->title_height + 1);
if (AddingX + dx >= Scr->MyDisplayWidth)
dx = Scr->MyDisplayWidth - AddingX - 1;
if (AddingY + dy >= Scr->MyDisplayHeight)
dy = Scr->MyDisplayHeight - AddingY - 1;
if (dx > 0 && dy > 0)
XWarpPointer (dpy, None, None, 0, 0, 0, 0, dx, dy);
} else {
XWarpPointer (dpy, None, Scr->Root, 0, 0, 0, 0,
AddingX + AddingW/2, AddingY + AddingH/2);
}
AddStartResize(tmp_win, AddingX, AddingY, AddingW, AddingH);
lastx = -10000;
lasty = -10000;
while (TRUE)
{
XMaskEvent(dpy,
ButtonReleaseMask | ButtonMotionMask, &event);
if (Event.type == MotionNotify) {
/* discard any extra motion events before a release */
while(XCheckMaskEvent(dpy,
ButtonMotionMask | ButtonReleaseMask, &Event))
if (Event.type == ButtonRelease)
break;
}
if (event.type == ButtonRelease)
{
AddEndResize(tmp_win);
break;
}
if (event.type != MotionNotify) {
continue;
}
/*
* XXX - if we are going to do a loop, we ought to consider
* using multiple GXxor lines so that we don't need to
* grab the server.
*/
XQueryPointer(dpy, Scr->Root, &JunkRoot, &JunkChild,
&JunkX, &JunkY, &AddingX, &AddingY, &JunkMask);
if (lastx != AddingX || lasty != AddingY)
{
DoResize(AddingX, AddingY, tmp_win);
lastx = AddingX;
lasty = AddingY;
}
}
}
else if (event.xbutton.button == Button3)
{
int maxw = Scr->MyDisplayWidth - AddingX - bw2;
int maxh = Scr->MyDisplayHeight - AddingY - bw2;
/*
* Make window go to bottom of screen, and clip to right edge.
* This is useful when popping up large windows and fixed
* column text windows.
*/
if (AddingW > maxw) AddingW = maxw;
AddingH = maxh;
ConstrainSize (tmp_win, &AddingW, &AddingH); /* w/o borders */
AddingW += bw2;
AddingH += bw2;
}
else
{
XMaskEvent(dpy, ButtonReleaseMask, &event);
}
MoveOutline(Scr->Root, 0, 0, 0, 0, 0, 0);
XUnmapWindow(dpy, Scr->SizeWindow);
UninstallRootColormap();
XUngrabPointer(dpy, CurrentTime);
tmp_win->attr.x = AddingX;
tmp_win->attr.y = AddingY + tmp_win->title_height;
tmp_win->attr.width = AddingW - bw2;
tmp_win->attr.height = AddingH - tmp_win->title_height - bw2;
XUngrabServer(dpy);
}
}
} else { /* put it where asked, mod title bar */
/* if the gravity is towards the top, move it by the title height */
if (gravy < 0) tmp_win->attr.y -= gravy * tmp_win->title_height;

View File

@ -86,7 +86,6 @@ static unsigned char **stringListSource, *currentString;
static int doparse ( int (*ifunc)(void), const char *srctypename, const char *srcname );
static int twmFileInput ( void );
static int twmStringListInput ( void );
static int ParseUsePPosition ( char *s );
static int ParseStringList ( unsigned char **sl );
extern int yylineno;
@ -325,12 +324,10 @@ typedef struct _TwmKeyword {
#define kw0_RestartPreviousState 17
#define kw0_ClientBorderWidth 18
#define kw0_NoTitleFocus 19
#define kw0_RandomPlacement 20
#define kw0_DecorateTransients 21
#define kw0_NoRaiseOnWarp 24
#define kw0_WarpUnmapped 25
#define kws_UsePPosition 1
#define kws_IconFont 2
#define kws_ResizeFont 3
#define kws_MenuFont 4
@ -512,7 +509,6 @@ static TwmKeyword keytable[] = {
{ "pointerforeground", CKEYWORD, kwc_PointerForeground },
{ "priority", NKEYWORD, kwn_Priority },
{ "r", ROOT, 0 },
{ "randomplacement", KEYWORD, kw0_RandomPlacement },
{ "resize", RESIZE, 0 },
{ "resizefont", SKEYWORD, kws_ResizeFont },
{ "restartpreviousstate", KEYWORD, kw0_RestartPreviousState },
@ -533,7 +529,6 @@ static TwmKeyword keytable[] = {
{ "titleforeground", CLKEYWORD, kwcl_TitleForeground },
{ "titlepadding", NKEYWORD, kwn_TitlePadding },
{ "unknownicon", SKEYWORD, kws_UnknownIcon },
{ "usepposition", SKEYWORD, kws_UsePPosition },
{ "w", WINDOW, 0 },
{ "wait", WAIT, 0 },
{ "warpcursor", WARP_CURSOR, 0 },
@ -643,10 +638,6 @@ int do_single_keyword (int keyword)
Scr->TitleFocus = FALSE;
return 1;
case kw0_RandomPlacement:
Scr->RandomPlacement = TRUE;
return 1;
case kw0_DecorateTransients:
Scr->DecorateTransients = TRUE;
return 1;
@ -667,19 +658,6 @@ int do_single_keyword (int keyword)
int do_string_keyword (int keyword, char *s)
{
switch (keyword) {
case kws_UsePPosition:
{
int ppos = ParseUsePPosition (s);
if (ppos < 0) {
twmrc_error_prefix();
fprintf (stderr,
"ignoring invalid UsePPosition argument \"%s\"\n", s);
} else {
Scr->UsePPosition = ppos;
}
return 1;
}
case kws_IconFont:
if (!Scr->HaveFonts) Scr->IconFont.name = s;
return 1;
@ -966,19 +944,3 @@ assign_var_savecolor(void)
}
}
static int
ParseUsePPosition (char *s)
{
XmuCopyISOLatin1Lowered (s, s);
if (strcmp (s, "off") == 0) {
return PPOS_OFF;
} else if (strcmp (s, "on") == 0) {
return PPOS_ON;
} else if (strcmp (s, "non-zero") == 0 ||
strcmp (s, "nonzero") == 0) {
return PPOS_NON_ZERO;
}
return -1;
}

View File

@ -193,7 +193,6 @@ typedef struct ScreenInfo
int ButtonIndent; /* amount to shrink buttons on each side */
int NumAutoRaises; /* number of autoraise windows on screen */
short NoDefaults; /* do not add in default UI stuff */
short UsePPosition; /* what do with PPosition, see values below */
short AutoRelativeResize; /* start resize relative to position in quad */
short FocusRoot; /* is the input focus on the root ? */
short WarpCursor; /* warp cursor on de-iconify ? */
@ -210,7 +209,6 @@ typedef struct ScreenInfo
short DecorateTransients; /* put title bars on transients */
short BackingStore; /* use backing store for menus */
short SaveUnder; /* use save under's for menus */
short RandomPlacement; /* randomly place windows that no give hints */
short StackMode; /* should we honor stack mode requests */
short MoveDelta; /* number of pixels before f.move starts */
short ZoomCount; /* zoom outline count */
@ -231,10 +229,4 @@ extern ScreenInfo **ScreenList;
extern ScreenInfo *Scr;
extern int FirstScreen;
#define PPOS_OFF 0
#define PPOS_ON 1
#define PPOS_NON_ZERO 2
/* may eventually want an option for having the PPosition be the initial
location for the drag lines */
#endif /* _SCREEN_ */

View File

@ -703,7 +703,6 @@ InitVariables(void)
Scr->UnknownHeight = 0;
Scr->NumAutoRaises = 0;
Scr->NoDefaults = FALSE;
Scr->UsePPosition = PPOS_OFF;
Scr->FocusRoot = TRUE;
Scr->Focus = NULL;
Scr->WarpCursor = FALSE;
@ -720,7 +719,6 @@ InitVariables(void)
Scr->DecorateTransients = FALSE;
Scr->BackingStore = TRUE;
Scr->SaveUnder = TRUE;
Scr->RandomPlacement = FALSE;
Scr->StackMode = TRUE;
Scr->MoveDelta = 1; /* so that f.deltastop will work */
Scr->ZoomCount = 8;