{-# LINE 1 "Graphics\\Win32\\Window\\HotKey.hsc" #-}

{-# LANGUAGE CPP #-}

{- |

   Module      :  Graphics.Win32.Window.HotKey

   Copyright   :  2013 shelarcy

   License     :  BSD-style



   Maintainer  :  shelarcy@gmail.com

   Stability   :  Provisional

   Portability :  Non-portable (Win32 API)



   An FFI binding to the hot key part of the Win32 API.

-}

module Graphics.Win32.Window.HotKey where



import Data.Bits                 ( (.|.) )

import Graphics.Win32.GDI.Types  ( HWND, MbHWND )

import Graphics.Win32.Key        ( VKey )

import Graphics.Win32.Message    ( WindowMessage )

import System.Win32.Types        ( UINT, BOOL, maybePtr, failIfFalse_ )

import System.Win32.Exception.Unsupported ( unsupportedVal, upgradeWindowsOS )

import System.Win32.Info.Version ( is7OrLater )





#include "windows_cconv.h"



type FsModifiers = [FsModifier]

type FsModifier  = UINT



mOD_ALT       :: FsModifier

mOD_ALT       =  1

mOD_CONTROL   :: FsModifier

mOD_CONTROL   =  2

mOD_SHIFT     :: FsModifier

mOD_SHIFT     =  4

mOD_WIN       :: FsModifier

mOD_WIN       =  8



{-# LINE 35 "Graphics\\Win32\\Window\\HotKey.hsc" #-}



-- | This parameter requires to use Windows 7 or later.

mOD_NOREPEAT :: FsModifier

mOD_NOREPEAT

  = unsupportedVal "MOD_NOREPEAT"

      is7OrLater (upgradeWindowsOS "Windows 7") 0x4000

{-

 , mOD_NOREPEAT = MOD_NOREPEAT

-}



wM_HOTKEY :: WindowMessage

wM_HOTKEY = 786

{-# LINE 47 "Graphics\\Win32\\Window\\HotKey.hsc" #-}



joinModifiers :: FsModifiers -> FsModifier

joinModifiers = foldr (.|.) 0



registerHotKey :: MbHWND -> Int -> FsModifier -> VKey -> IO ()

registerHotKey mb_wnd kid md vkey =

  failIfFalse_ (unwords ["RegisterHotKey", show mb_wnd, show kid, show md, show vkey])

    $ c_RegisterHotKey (maybePtr mb_wnd) kid md vkey



foreign import WINDOWS_CCONV "windows.h RegisterHotKey"

  c_RegisterHotKey :: HWND -> Int -> UINT -> VKey -> IO BOOL



unregisterHotKey :: MbHWND -> Int -> IO ()

unregisterHotKey mb_wnd kid =

  failIfFalse_ (unwords ["UnregisterHotKey", show mb_wnd, show kid])

    $ c_UnregisterHotKey (maybePtr mb_wnd) kid



foreign import WINDOWS_CCONV "windows.h UnregisterHotKey"

  c_UnregisterHotKey :: HWND -> Int -> IO BOOL