On Mon, Dec 28, 2015 at 11:42:00AM +0100, Alexander Hall wrote:
> On Mon, Dec 28, 2015 at 08:10:49AM +0100, Matthieu Herrb wrote:
> > On Sun, Dec 27, 2015 at 08:28:36PM +0100, Alexander Hall wrote:
> > > Hi,
> > >
> > > Recently, my window manager (i3) started making the ssh-askpass windows
> > > too small to be really usable. The problem seems to be that the size
> > > hints indicate that it provides a width and height, while those fields
> > > are set to 0. While looking at this, the same seems to be the case for
> > > position (x and y are 0). AFAICS, both of these hints are obsolete.
> >
> > x y width and height are marked obsolete because the values are taken
> > from the window parameters passed to XCreateWindow and not from here.
> >
> > But the hints themselve are not obsolete. I would rather investigate
> > why i3 behaves wrong than just removing the placement and size hints.
> >
> > It seems to me that it can come from different reasons (I don't use
> > i3 so I've not taken the time to look at its code):
> >
> > - it incorrectly tries to use the obsolete values, rather than the
> > window parameters
Yes that's what it seems like. See below.
> >
> > - it completely dropped the implementation of the "old" ICCCM
> > hints and only follows the extened wm hints. Since ssh-askpass
> > doesn't handle those it gets random values...
> >
> > - the computed window parameters are either wrong or interpreted
> > wrong. This can be the case with Xinerama or pseudo-xinerama when
> > both ssh-ask pass and the window manager are trying to center the
> > window on a given monitor rather than having it centered globally
> > (where it will end up being split across 2 monitors if they are of
> > equal size).
> >
> > >
> > > The diff below (even without the PPosition removal, but I added that
> > > for good measure) fixes this, at least for i3.
> >
> > I would rather not remove those hints, even if other window manager
> > seem to behave correctly. Maybe it's needed to pass the correct values
> > for the obsolete fields. (ihmo it's still an i3 problem in that case,
> > but it's a more acceptable workaround). ie set them from the d->w3.w
> > structure.
>
> Thanks a lot for the detailed answer. This is obviously not the right
> fix. I previously tried adding those fields and that helped too IIRC.
> I'll have a look at the i3 sources.
Ok, I can see this in the i3 code:
/* Plasma windows set their geometry in WM_SIZE_HINTS. */
if ((wm_size_hints.flags & XCB_ICCCM_SIZE_HINT_US_POSITION ||
wm_size_hints.flags & XCB_ICCCM_SIZE_HINT_P_POSITION) &&
(wm_size_hints.flags & XCB_ICCCM_SIZE_HINT_US_SIZE ||
wm_size_hints.flags & XCB_ICCCM_SIZE_HINT_P_SIZE)) {
DLOG("We are setting geometry according to wm_size_hints x=%d y=%d w=%d
h=%d\n",
wm_size_hints.x, wm_size_hints.y, wm_size_hints.width,
wm_size_hints.height);
geom->x = wm_size_hints.x;
geom->y = wm_size_hints.y;
geom->width = wm_size_hints.width;
geom->height = wm_size_hints.height;
}
which indeed indicate it's using the deprecated members, with no intention not
to.
However, AFAICT, /usr/X11R6/include/xcb/xcb_icccm.h gives no
alternative, and as I'm not aiming to be an X hacker, ok to commit
the workaround, or is that only counterproductive in terms of i3?
/Alexander
Index: x11-ssh-askpass.c
===================================================================
RCS file: /cvs/xenocara/app/ssh-askpass/x11-ssh-askpass.c,v
retrieving revision 1.6
diff -u -p -r1.6 x11-ssh-askpass.c
--- x11-ssh-askpass.c 24 Apr 2015 02:19:41 -0000 1.6
+++ x11-ssh-askpass.c 28 Dec 2015 12:25:55 -0000
@@ -772,7 +772,11 @@ void createDialogWindow(AppInfo *app)
outOfMemory(app, __LINE__);
}
d->sizeHints->flags = 0;
+ d->sizeHints->x = d->w3.w.x;
+ d->sizeHints->y = d->w3.w.y;
d->sizeHints->flags |= PPosition;
+ d->sizeHints->width = d->w3.w.width;
+ d->sizeHints->height = d->w3.w.height;
d->sizeHints->flags |= PSize;
d->sizeHints->min_width = d->w3.w.width;
d->sizeHints->min_height = d->w3.w.height;