global shortcuts and drop-down active

Lubos Lunak l.lunak at suse.cz
Thu Nov 8 17:35:59 GMT 2007


On Thursday 08 of November 2007, Andreas Hartmetz wrote:
> Am Mittwoch, 7. November 2007 16:39:53 schrieb Lubos Lunak:
> > On Wednesday 07 of November 2007, Andriy Rysin wrote:
> > > Hi,
> > >
> > > global shortcuts in KDE4 (as well as in KDE3) don't work when drop-down
> > > (menu or combobox) is active.
...
> >  Even then, I'm not quite sure about how to solve it. If the application
> > already has focus (which I assume represents most of the cases), then the
> > application itself (toolkit, actually) could just avoid the grab and
> > handle routing the input event from the focused toplevel window to the
> > popup itself. If you run some application with --nograb then you will get
> > more or less this (note, --nograb works only with debug-enabled Qt). It
> > would need few tweaks, but this could be a relatively simple solution for
> > most cases including dropdowns, although not for all popups.
> >
> >  Better solution would however require much more work. Regardless whether
> > the solution would be making the popup's application somehow forward
> > shortcuts to other apps or setting focus to the popup, there would be
> > problems and their solving would require creating a widely used spec.
> > Forwarding shortcuts would be probably practically unfeasible anyway,
> > with focus setting there would be undesired focus changes (indeed) that I
> > don't know how would be difficult to handle.
>
> From the side of the global shortcuts infrastructure I see no problem. It's
> a kded module that is already connected to DBus anyway. It would probably
> be simple enough to to make it treat key events injected via DBus like key
> events it received from the X server directly.

 Hmm. Ok, I take back that part about practically unfeasible, but it's still 
more work. I'll refrain from guessing the second time how much it would 
be :).

> The interesting part would be to implement key event forwarding in the
> right widgets on the application side. Ugh.

 Actually this part would be no problem, I think. Qt doesn't give a damn about 
the X focus that X uses for sending events - it's only set to the toplevel 
widget and Qt uses its own logic to route it to the (Qt-)focused widget or 
active popup, if any.

> Actually, maybe we should ask the trolls about implementing something like
> QApplication::setKeyboardGrabEnabled()? Something to that effect might be
> already available but you need some black magic to enable it. Think of
> event filters on the application and things like that.
> Lubos, you know how to handle keyboard focus better than me - would having
> a programmable "--nograb" even cause less problems than it fixes?

 I don't think would be needed at all. With the simple solution that'd work 
only if the application has focus, Qt could already itself handle the logic 
of "do I have X focus?" -> "don't grab keyboard for popups", otherwise it'd 
grab. Plus it would have to handle better the few new resulting cases (e.g. 
if you now show a popup with -nograb and then switch virtual desktops, the 
popup will stay).

-- 
Lubos Lunak
KDE developer
--------------------------------------------------------------
SUSE LINUX, s.r.o.   e-mail: l.lunak at suse.cz , l.lunak at kde.org
Lihovarska 1060/12   tel: +420 284 028 972
190 00 Prague 9      fax: +420 284 028 951
Czech Republic       http//www.suse.cz




More information about the kde-core-devel mailing list