{-# LINE 2 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} -- -*-haskell-*- -- GIMP Toolkit (GTK) Gdk -- -- Author : Jens Petersen <petersen@haskell.org> -- -- Created: 6 June 2003 -- -- Copyright (C) 2003-2005 Jens-Ulrik Holger Petersen -- -- This library is free software; you can redistribute it and/or -- modify it under the terms of the GNU Lesser General Public -- License as published by the Free Software Foundation; either -- version 2.1 of the License, or (at your option) any later version. -- -- This library is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- Lesser General Public License for more details. -- -- | -- Maintainer : gtk2hs-users@lists.sourceforge.net -- Stability : provisional -- Portability : portable (depends on GHC) -- -- Gdk general functions. -- module Graphics.UI.Gtk.Gdk.Gdk ( flush, screenWidth, screenHeight, screenWidthMM, screenHeightMM, GrabStatus(..), pointerGrab, pointerUngrab, pointerIsGrabbed, keyboardGrab, keyboardUngrab, beep ) where import Control.Monad (liftM) import System.Glib.Flags (fromFlags) import System.Glib.FFI import Graphics.UI.Gtk.Types {-# LINE 48 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} import Graphics.UI.Gtk.Gdk.Cursor (Cursor(..)) import Graphics.UI.Gtk.Gdk.Events import Graphics.UI.Gtk.Gdk.Enums (EventMask, GrabStatus(..)) {-# LINE 53 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} -- | Emits a short beep. -- beep :: IO () beep = gdk_beep {-# LINE 58 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} -- | Flushes the X output buffer and waits until all requests have been -- processed by the server. This is rarely needed by applications. -- flush :: IO () flush = gdk_flush {-# LINE 64 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} -- | Returns the width of the default screen in pixels. -- screenWidth :: IO Int screenWidth = liftM fromIntegral $ gdk_screen_width {-# LINE 69 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} -- | Returns the height of the default screen in pixels. -- screenHeight :: IO Int screenHeight = liftM fromIntegral $ gdk_screen_height {-# LINE 74 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} -- | Returns the width of the default screen in millimeters. Note that on many -- X servers this value will not be correct. -- screenWidthMM :: IO Int screenWidthMM = liftM fromIntegral $ gdk_screen_width_mm {-# LINE 80 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} -- | Returns the height of the default screen in millimeters. Note that on many -- X servers this value will not be correct. -- screenHeightMM :: IO Int screenHeightMM = liftM fromIntegral $ gdk_screen_height_mm {-# LINE 86 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} -- | Grabs the pointer (usually a mouse) so that all events are passed to this -- application until the pointer is ungrabbed with 'pointerUngrab', or the grab -- window becomes unviewable. This overrides any previous pointer grab by this -- client. -- -- Pointer grabs are used for operations which need complete control over mouse -- events, even if the mouse leaves the application. For example in GTK+ it is -- used for Drag and Drop, for dragging the handle in the GtkHPaned and -- GtkVPaned widgets, and for resizing columns in GtkCList widgets. -- -- Note that if the event mask of an X window has selected both button press -- and button release events, then a button press event will cause an automatic -- pointer grab until the button is released. X does this automatically since -- most applications expect to receive button press and release events in -- pairs. It is equivalent to a pointer grab on the window with @owner_events@ -- set to @True@. -- -- If you set up anything at the time you take the grab that needs to be -- cleaned up when the grab ends, you should handle the GdkEventGrabBroken -- events that are emitted when the grab ends unvoluntarily. -- pointerGrab :: (DrawWindowClass window, DrawWindowClass confine_to) => window -- ^ @window@ - the 'DrawWindow' which will own the grab (the grab -- window). -> Bool -- ^ @owner_events@ - if @False@ then all pointer events are -- reported with respect to @window@ and are only reported if -- selected by @event_mask@. If @True@ then pointer events for this -- application are reported as normal, but pointer events outside -- this application are reported with respect to @window@ and only -- if selected by @event_mask@. In either mode, unreported events -- are discarded. -> [EventMask] -- ^ @event_mask@ - specifies the event mask, which is used in -- accordance with @owner_events@. Note that only pointer -- events (i.e. button and motion events) may be selected. -> Maybe confine_to -- ^ @confine_to@ If supplied, the pointer will be -- confined to this window during the grab. If the -- pointer is outside @confine_to@, it will automatically -- be moved to the closest edge of @confine_to@ and enter -- and leave events will be generated as necessary. -> Maybe Cursor -- ^ @cursor@ - the cursor to display while the grab is -- active. If this is @Nothing@ then the normal cursors are -- used for @window@ and its descendants, and the cursor for -- @window@ is used for all other windows. -> TimeStamp -- ^ @time@ - the timestamp of the event which led to this -- pointer grab. This usually comes from an 'Event', though -- 'currentTime' can be used if the time isn't known. -> IO GrabStatus -- ^ @Returns@ - 'GrabSuccess' if the grab was successful. pointerGrab window owner_events event_mask mbConfine_to mbCursor time = liftM (toEnum . fromIntegral) $ (\(DrawWindow arg1) arg2 arg3 (DrawWindow arg4) (Cursor arg5) arg6 -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg4 $ \argPtr4 ->withForeignPtr arg5 $ \argPtr5 ->gdk_pointer_grab argPtr1 arg2 arg3 argPtr4 argPtr5 arg6) {-# LINE 137 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} (toDrawWindow window) (fromBool owner_events) (fromIntegral $ fromFlags event_mask) (maybe (DrawWindow nullForeignPtr) toDrawWindow mbConfine_to) (maybe (Cursor nullForeignPtr) id mbCursor) (fromIntegral time) -- | Ungrabs the pointer on the default display, if it is grabbed by this -- application. -- pointerUngrab :: TimeStamp -- ^ @time@ - a timestamp from an 'Event', or 'currentTime' if no -- timestamp is available. -> IO () pointerUngrab time = gdk_pointer_ungrab (fromIntegral time) -- | Returns @True@ if the pointer on the default display is currently grabbed -- by this application. -- -- Note that this does not take the inmplicit pointer grab on button presses -- into account. -- pointerIsGrabbed :: IO Bool pointerIsGrabbed = liftM toBool $ gdk_pointer_is_grabbed {-# LINE 161 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} -- | Grabs the keyboard so that all events are passed to this application until -- the keyboard is ungrabbed with 'keyboardUngrab'. This overrides any previous -- keyboard grab by this client. -- -- If you set up anything at the time you take the grab that needs to be -- cleaned up when the grab ends, you should handle the GdkEventGrabBroken -- events that are emitted when the grab ends unvoluntarily. keyboardGrab :: (DrawWindowClass window) => window -- ^ @window@ - the 'DrawWindow' which will own the grab (the grab -- window). -> Bool -- ^ @owner_events@ - if @False@ then all keyboard events are -- reported with respect to @window@. If @True@ then keyboard events -- for this application are reported as normal, but keyboard events -- outside this application are reported with respect to @window@. -- Both key press and key release events are always reported, -- independant of the event mask set by the application. -> TimeStamp -- ^ @time@ - a timestamp from an 'Event', or 'currentTime' if -- no timestamp is available. -> IO GrabStatus -- ^ @Returns@ - 'GrabSuccess' if the grab was successful. keyboardGrab window owner_events time = liftM (toEnum . fromIntegral) $ (\(DrawWindow arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->gdk_keyboard_grab argPtr1 arg2 arg3) {-# LINE 184 "./Graphics/UI/Gtk/Gdk/Gdk.chs" #-} (toDrawWindow window) (fromBool owner_events) (fromIntegral time) -- | Ungrabs the keyboard on the default display, if it is grabbed by this -- application. keyboardUngrab :: TimeStamp -- ^ @time@ - a timestamp from an 'Event', or 'currentTime' if no -- timestamp is available. -> IO () keyboardUngrab time = gdk_keyboard_ungrab (fromIntegral time) foreign import ccall safe "gdk_beep" gdk_beep :: (IO ()) foreign import ccall safe "gdk_flush" gdk_flush :: (IO ()) foreign import ccall safe "gdk_screen_width" gdk_screen_width :: (IO CInt) foreign import ccall safe "gdk_screen_height" gdk_screen_height :: (IO CInt) foreign import ccall safe "gdk_screen_width_mm" gdk_screen_width_mm :: (IO CInt) foreign import ccall safe "gdk_screen_height_mm" gdk_screen_height_mm :: (IO CInt) foreign import ccall safe "gdk_pointer_grab" gdk_pointer_grab :: ((Ptr DrawWindow) -> (CInt -> (CInt -> ((Ptr DrawWindow) -> ((Ptr Cursor) -> (CUInt -> (IO CInt))))))) foreign import ccall safe "gdk_pointer_ungrab" gdk_pointer_ungrab :: (CUInt -> (IO ())) foreign import ccall safe "gdk_pointer_is_grabbed" gdk_pointer_is_grabbed :: (IO CInt) foreign import ccall safe "gdk_keyboard_grab" gdk_keyboard_grab :: ((Ptr DrawWindow) -> (CInt -> (CUInt -> (IO CInt)))) foreign import ccall safe "gdk_keyboard_ungrab" gdk_keyboard_ungrab :: (CUInt -> (IO ()))