in reply to Re: Gtk2 X11 GrabKey
in thread Gtk2 X11 GrabKey

... using any application ...

I think so, thats usually what they mean by "global hotkey" or "system wide hotkey"

gtk apparently doesn't have a global hotkey capability built-in -- if the app/window doesn't have focus, it can't get events -- python/c/cpp folks apparently use libkeybinder (whatever that is)

the OP issue appears to be that Gtk2->main; is blocking (or the other piece of code is blocking) ... so needs to poll, something along the lines of Re: AnyEvent + Wx, Gtk2/3 or Tk ?

Replies are listed 'Best First'.
Re^3: Gtk2 X11 GrabKey
by basiliscos (Pilgrim) on Dec 14, 2013 at 16:05 UTC

    Thanks all!

    Unfortunately I don't see event-loop in X11::Protocol, i.e. polling capabilities. I don't wan't go to low-level capabilities, i.e. poll underlying socket for events. I'll try to use the libkeybinder, and tell the details here.

    PS. Mixed usage of Gtk2 events and X11 events seems to be leading to some messy:

    ... my $seq = $x->GrabKey( $k->KeysymToKeycode("z"), 'AnyModifier', $x->root, 0, 'Asynchronous', 'Asynchronous'); $x->event_handler('queue'); my %event = $x->next_event; ### %event my $t = AE::timer 0, 1, sub { my %event = $x->next_event; # %event }; Gtk2->main;
    It exists with:
    Protocol error: bad 2 (Value); Sequence Number 4 Opcode (33, 0) = GrabKey Bad value 183 (0xb7) at ./gtk-treeview-action line 31.

      Shouldn't you say something like return unless my %event = $x->dequeue_event rather than $x->next_event? The docs seem to suggest that next_event will block until you get your final results. As to your error, I'm not sure what to say as I don't use X11. Sorry.