New patches: [bind XGetWMNormalHints pdewacht@gmail.com**20070430212319] { hunk ./Graphics/X11/Xlib/Extras.hsc 698 +------------------------------------------------------------------------ +-- Size hints + +data SizeHints = SizeHints + { sh_min_size :: Maybe (CInt, CInt) + , sh_max_size :: Maybe (CInt, CInt) + , sh_resize_inc :: Maybe (CInt, CInt) + , sh_aspect :: Maybe ((CInt, CInt), (CInt, CInt)) + , sh_base_size :: Maybe (CInt, CInt) + , sh_win_gravity :: Maybe (CInt) + } + +pMinSizeBit = 4 +pMaxSizeBit = 5 +pResizeIncBit = 6 +pAspectBit = 7 +pBaseSizeBit = 8 +pWinGravityBit = 9 + +instance Storable SizeHints where + alignment _ = alignment (undefined :: CInt) + sizeOf _ = #{size XSizeHints} + + poke p sh = do + let whenSet f x = maybe (return ()) x (f sh) + let pokeFlag b = do flag <- #{peek XSizeHints, flags} p :: IO CLong + #{poke XSizeHints, flags} p (setBit flag b) + #{poke XSizeHints, flags} p (0 :: CLong) + whenSet sh_min_size $ \(w, h) -> do + pokeFlag pMinSizeBit + #{poke XSizeHints, min_width } p w + #{poke XSizeHints, min_height } p h + whenSet sh_max_size $ \(w, h) -> do + pokeFlag pMaxSizeBit + #{poke XSizeHints, max_width } p w + #{poke XSizeHints, max_height } p h + whenSet sh_resize_inc $ \(w, h) -> do + pokeFlag pResizeIncBit + #{poke XSizeHints, width_inc } p w + #{poke XSizeHints, height_inc } p w + whenSet sh_aspect $ \((minx, miny), (maxx, maxy)) -> do + pokeFlag pAspectBit + #{poke XSizeHints, min_aspect.x} p minx + #{poke XSizeHints, min_aspect.y} p miny + #{poke XSizeHints, max_aspect.x} p maxx + #{poke XSizeHints, max_aspect.y} p maxy + whenSet sh_base_size $ \(w, h) -> do + pokeFlag pBaseSizeBit + #{poke XSizeHints, base_width } p w + #{poke XSizeHints, base_height } p h + whenSet sh_win_gravity $ \g -> do + pokeFlag pWinGravityBit + #{poke XSizeHints, win_gravity } p g + + peek p = do + flags <- #{peek XSizeHints, flags} p :: IO CLong + let whenBit n x = if testBit flags n then liftM Just x else return Nothing + return SizeHints + `ap` whenBit pMinSizeBit (do liftM2 (,) (#{peek XSizeHints, min_width } p) + (#{peek XSizeHints, min_height } p)) + `ap` whenBit pMaxSizeBit (do liftM2 (,) (#{peek XSizeHints, max_width } p) + (#{peek XSizeHints, max_height } p)) + `ap` whenBit pResizeIncBit (do liftM2 (,) (#{peek XSizeHints, width_inc } p) + (#{peek XSizeHints, height_inc } p)) + `ap` whenBit pAspectBit (do minx <- #{peek XSizeHints, min_aspect.x} p + miny <- #{peek XSizeHints, min_aspect.y} p + maxx <- #{peek XSizeHints, max_aspect.x} p + maxy <- #{peek XSizeHints, max_aspect.y} p + return ((minx, miny), (maxx, maxy))) + `ap` whenBit pBaseSizeBit (do liftM2 (,) (#{peek XSizeHints, base_width } p) + (#{peek XSizeHints, base_height} p)) + `ap` whenBit pWinGravityBit (#{peek XSizeHints, win_gravity} p) + + +foreign import ccall unsafe "XlibExtras.h XGetWMNormalHints" + xGetWMNormalHints :: Display -> Window -> Ptr SizeHints -> Ptr CLong -> IO Status + +getWMNormalHints :: Display -> Window -> IO SizeHints +getWMNormalHints d w + = alloca $ \sh -> do + alloca $ \supplied_return -> do + -- what's the purpose of supplied_return? + xGetWMNormalHints d w sh supplied_return + peek sh + + } [more accurate types for SizeHints pdewacht@gmail.com**20070501202526] { hunk ./Graphics/X11/Xlib/Extras.hsc 702 - { sh_min_size :: Maybe (CInt, CInt) - , sh_max_size :: Maybe (CInt, CInt) - , sh_resize_inc :: Maybe (CInt, CInt) - , sh_aspect :: Maybe ((CInt, CInt), (CInt, CInt)) - , sh_base_size :: Maybe (CInt, CInt) - , sh_win_gravity :: Maybe (CInt) + { sh_min_size :: Maybe (Dimension, Dimension) + , sh_max_size :: Maybe (Dimension, Dimension) + , sh_resize_inc :: Maybe (Dimension, Dimension) + , sh_aspect :: Maybe ((Dimension, Dimension), (Dimension, Dimension)) + , sh_base_size :: Maybe (Dimension, Dimension) + , sh_win_gravity :: Maybe (BitGravity) } Context: [fixed memory leak in binding of XFetchName() Jason Creighton **20070427235344] [added binding to XFetchName() Jason Creighton **20070427044548] [Bind XChangeProperty Stefan O'Rear **20070425034339] [v0.1 Don Stewart **20070425031001] [added anyKey constant Jason Creighton **20070424025755] [TAG 0.1 Spencer Janssen **20070422081052] Patch bundle hash: 30bb3138dc428ce8681244d7fb90286738191695