[mcclim-devel] Drei and input focus
Christophe Rhodes
csr21 at cantab.net
Thu Jan 25 17:10:55 UTC 2007
"Andy Hefner" <ahefner at gmail.com> writes:
> On 1/19/07, Christophe Rhodes <csr21 at cantab.net> wrote:
>> Well, I say the "Right Thing": _clearly_ the right thing is to abandon
>> this horrific focus-follows-mouse-around-widgets disaster and
>> implement a sane keyboard focus policy. Then much of the complexity
>> can go away. Hooray. (What did Classic CLIM do?)
>
> I'm not familiar with the horrors of the Goatee input focus kludge,
> but it seems straightforward to implement click-to-focus. I've
> attached a trivial test which demonstrates that this does indeed work
> (click to focus between two mock text-editor gadgets, although it is
> initially focus-follows-mouse until the focus is first assigned by
> clicking, as that simply seems to be what X does by default).
I've attached a patch which implements click-to-focus fairly
pervasively, without using the X focus mechanism. The basic idea is
to separate out port-keyboard-input-focus, which mediates the X focus
for top-level windows, and frame-keyboard-input-focus, which is a
per-frame setting. This patch deviates from CLIM II in that
stream-set-input-focus does not call port-keyboard-input-focus, but
merely sets the per-frame slot; the CLX event handler is adjusted to
place the proper sheet in keyboard events.
The implementation of click-to-focus is kludgy. It's fine for
drei-gadgets, and for text-gadgets generally; it's not so hot for
general streams. I've taken the line that interactor-panes should be
focusable with a click; somewhat to my surprise, you can't just write
a method on handle-event to get this, but have to work with
frame-input-context-button-press-handler. A potential gotcha is that
I have not implented click-to-focus for application-panes; this may
cause surprises, but it seemed to me the only way not to break the
address book demo ;-)
One new spec compliance is that initially keyboard focus really does
go to *query-io*. This might cause some surprising behaviour.
Somewhat to my surprise, gsharp seems to work -- maybe because its
toplevel loop is different -- but ESAs with default-frame-top-level
deliver keyboard events to the minibuffer by default, which isn't
ideal. On the other hand, the focus behaviour of text gadgets is, to
me, much nicer -- and there's no more focus stealing going on.
I have to send this in a bit of a hurry; there's more I could say
about this, but I'll be happy to hear comments.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: focus.diff
URL: <https://mailman.common-lisp.net/pipermail/mcclim-devel/attachments/20070125/5edc6cb4/attachment.ksh>
-------------- next part --------------
Cheers,
Christophe
More information about the mcclim-devel
mailing list