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
> 
> - 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.

/Alexander

> 
> Also if someone is interested, support for ewmh compliant window
> managers could be added to ssh-askpass. It may help with complex
> multi-monitor layouts.
> 
> > 
> > Should this rather be taken upstream, if any, if it's not already 
> > there, in which case it might already be fixed?
> 
> Upstream is no longer maintained as far as I know.
> 
> > 
> > Anyway, the diff follows. Please test on your favourite window manager.
> > 
> > OK? Comments?
> > 
> > /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       27 Dec 2015 18:52:55 -0000
> > @@ -772,8 +772,6 @@ void createDialogWindow(AppInfo *app)
> >        outOfMemory(app, __LINE__);
> >     }
> >     d->sizeHints->flags = 0;
> > -   d->sizeHints->flags |= PPosition;
> > -   d->sizeHints->flags |= PSize;
> >     d->sizeHints->min_width = d->w3.w.width;
> >     d->sizeHints->min_height = d->w3.w.height;
> >     d->sizeHints->flags |= PMinSize;
> 
> > 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       27 Dec 2015 18:52:55 -0000
> > @@ -772,8 +772,6 @@ void createDialogWindow(AppInfo *app)
> >        outOfMemory(app, __LINE__);
> >     }
> >     d->sizeHints->flags = 0;
> > -   d->sizeHints->flags |= PPosition;
> > -   d->sizeHints->flags |= PSize;
> >     d->sizeHints->min_width = d->w3.w.width;
> >     d->sizeHints->min_height = d->w3.w.height;
> >     d->sizeHints->flags |= PMinSize;
> 
> 
> -- 
> Matthieu Herrb


Reply via email to