! Copyright (C) 2017 Alexander Ilin.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien alien.data alien.strings continuations
-fry io.encodings.utf16n kernel literals math namespaces
-sequences ui.backend.windows ui.gadgets.worlds ui.gestures
-windows.messages windows.shell32 windows.types windows.user32 ;
+USING: accessors alien alien.data alien.libraries alien.strings
+continuations fry io.encodings.utf16n kernel literals math
+namespaces sequences ui.backend.windows ui.gadgets.worlds
+ui.gestures windows.messages windows.shell32 windows.types
+windows.user32 ;
IN: windows.dropfiles
: filecount-from-hdrop ( hdrop -- n )
! list of wm-handlers. Therefore, there is no benefit in using the stricter
! ChangeWindowMessageFilterEx approach. Plus, the latter is not in Vista.
: (init-message-filter) ( -- )
- ${ WM_DROPFILES WM_COPYDATA WM_COPYGLOBALDATA }
- [ MSGFLT_ADD ChangeWindowMessageFilter win32-error=0/f ] each ;
+ "ChangeWindowMessageFilter" "user32" dlsym? [
+ ${ WM_DROPFILES WM_COPYDATA WM_COPYGLOBALDATA }
+ [ MSGFLT_ADD ChangeWindowMessageFilter win32-error=0/f ] each
+ ] when ;
: do-once ( guard-variable quot -- )
dupd '[ t _ set-global @ ] [ get-global ] dip unless ; inline
-! Ignore the errors: on WinXP the function is missing, and is not needed.
: init-message-filter ( -- )
- \ init-message-filter [
- [ (init-message-filter) ] [ drop ] recover
- ] do-once ;
+ \ init-message-filter [ (init-message-filter) ] do-once ;
: install-wm-handler ( -- )
[ drop 2nip handle-wm-dropfiles 0 ] WM_DROPFILES add-wm-handler ;