• LRN's avatar
    GDK W32: Use keyboard hook to detect AeroSnap combinations better · eece8a7d
    LRN authored
    Windows WM handles AeroSnap for normal windows on keydown. We did this
    on keyup only because we do not get a keydown message, even if Windows WM
    does nothing with a combination. However, in some specific cases it DOES
    do something - and we have no way to detect that. Specifically, winkey+downarrow
    causes maximized window to be restored by WM, and GDK fails to detect that. Then
    GDK gets a keyup message, figures that winkey+downarrow was pressed and released,
    and handles the combination - by minimizing the window.
    
    To overcome this, install a low-level keyboard hook (high-level ones have
    the same problem as normal message loop - they don't get messages when
    Windows WM handles combinations) and use it to detect interesting key combinations
    before Windows WM has a chance to block them from being processed.
    
    Once an interesting combination is detected, post a message to the window, which
    will be handled in due order.
    
    It should be noted that this code handles key repetitions in a very crude manner.
    
    The downside is that AeroSnap will not work if hook installation function call fails.
    Also, this is a global hook, and if the hook procedure does something wrong, bad things
    can happen.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=776031
    eece8a7d
Name
Last commit
Last update
build Loading commit data...
demos Loading commit data...
docs Loading commit data...
examples Loading commit data...
gdk Loading commit data...
gtk Loading commit data...
libgail-util Loading commit data...
m4 Loading commit data...
m4macros Loading commit data...
modules Loading commit data...
po Loading commit data...
po-properties Loading commit data...
tests Loading commit data...
testsuite Loading commit data...
AUTHORS Loading commit data...
COPYING Loading commit data...
HACKING Loading commit data...
INSTALL.in Loading commit data...
MAINTAINERS Loading commit data...
Makefile.am Loading commit data...
Makefile.decl Loading commit data...
NEWS Loading commit data...
NEWS.pre-1-0 Loading commit data...
README.commits Loading commit data...
README.in Loading commit data...
README.win32 Loading commit data...
acinclude.m4 Loading commit data...
autogen.sh Loading commit data...
config.h.win32.in Loading commit data...
configure.ac Loading commit data...
gail-3.0.pc.in Loading commit data...
gdk-3.0.pc.in Loading commit data...
git.mk Loading commit data...
gtk+-3.0.pc.in Loading commit data...
gtk+-unix-print-3.0.pc.in Loading commit data...
gtk+.doap Loading commit data...
gtk-zip.sh.in Loading commit data...
make-pot Loading commit data...
makefile.msc Loading commit data...
sanitize-la.sh Loading commit data...