Re: proposal for a smarter behavior for raising windows on mouse click
- From: Rob Adams <readams readams net>
- To: wm-spec-list gnome org
- Subject: Re: proposal for a smarter behavior for raising windows on mouse click
- Date: Thu, 29 Jan 2004 11:38:15 -0800
That protocol would work, so long as the specification states that a
window advertising support for _NET_WM_HANDLE_RAISE MUST raise the
window if it doesn't start a drag operation, or something like that. We
want to maintain the fact that raise-on-click is a window manager policy
decision, and not an application policy decision.
On Thu, 2004-01-29 at 04:59, Lubos Lunak wrote:
> On Tuesday 27 of January 2004 23:33, John Harper wrote:
> > On Jan 27, 2004, at 12:19 PM, Lubos Lunak wrote:
> > > On Tuesday 27 of January 2004 21:01, John Harper wrote:
> > >> sawfish implements something similar, it has a
> > >> _SAWFISH_WM_RAISE_WINDOW
> > >> wm protocol. When windows advertise they support it, user-initiated
> > >> window raises are redirected to the client window, similar to how
> > >> WM_TAKE_FOCUS works
> > >>
> > >> The motivation for adding this was to do drag and drop correctly in
> > >> nautilus (the version based on gtk 1.x). However, getting things to
> > >> work correctly was fraught with race conditions, so something more
> > >> under wm-control may be better..
> > >
> > > Could you please list the problems? I think I can already see some of
> > > them,
> > > but you have had the personal experience ;), so you know them all.
> > > That'd
> > > certainly help to find out how to do it better.
> >
> > the nautilus code has some comments describing some of the issues I ran
> > into:
> >
> > http://cvs.gnome.org/bonsai/cvsblame.cgi?file=nautilus%2Flibnautilus-
> > extensions%2FAttic/nautilus-drag-window.c&rev=&root=/cvs/gnome
> >
> > I think the main thing was that the code worked by receiving the
> > raise-window message, then waiting a period of time for a
> > button-release event, but there were cases when the button-release
> > event never arrived.
>
> How could this be? AFAIK the window that gets ButtonPress gets all mouse
> events until ButtonRelease, unless there will be a grab on another window as
> a result of the ButtonPress, or the window gets unmapped (which is both ok in
> this case as far as I can say). Are you sure the matching ButtonRelease
> didn't simply get filtered out somewhere else in the application? I tested it
> a bit with Konqueror, and it didn't seem to ever miss ButtonRelease (with the
> exception of the above-mentioned unmap after switching virtual desktops,
> which a) doesn't really matter it, b) will be taken care of in next Qt
> version anyway).
>
> In case this was just your mistake, I think it could be quite simple:
> - apps specify (let's say) _NET_WM_HANDLE_RAISE in their WM_PROTOCOLS
> - when the WM intercepts a click inside a window, it first replays
> (XAllowEvents) the click (if it passes such clicks to apps), and then sends
> _NET_WM_HANDLE_RAISE to the app, with the ButtonPress timestamp (if the WM
> raises on clicks, that is)
> - the app first receives the replayed ButtonPress, and then it gets
> _NET_WM_HANDLE_RAISE, it resets some variables related to this (whether dnd
> was started, etc.)
> - if DND is started, etc. it sets the matching variable
> - when the app gets ButtonRelease, and there was DND or whatever, it does
> nothing, otherwise it raises the window with the timestamp from
> _NET_WM_HANDLE_RAISE
>
> Can anybody see a problem with this? I'll see if I get today to writing a
> patch for Qt and KWin to try this for real.
>
> > Also, there were problems with making sure the
> > correct timestamp got passed when actually focusing/raising the window
> > (e.g. you really want XRaiseWindow to take a timestamp like
> > XSetInputFocus does)
>
> The 1.3 draft actually has this, _NET_RESTACK_WINDOW. But the WWW pages are
> somewhat not up to date - could whoever knows how to do it please sync them
> to current CVS? Hmm, and I also see that it doesn't say that 1.3 is only a
> draft yet :-/.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]