[xmonad] [PATCH 1/2] XMonadContrib: add a utility module to set the
default cursor
Andres Salomon
dilinger at collabora.co.uk
Tue Sep 15 02:22:38 EDT 2009
Based upon comments on the list and IRC, here's an updated set of patches. I
went with "xc_" as the cursor name prefix as opposed to haskell-x11's
"xC_"/"xK_" convention so that if haskell-x11 starts exporting the
symbols, we won't have any namespace issues.
From c7723b6cfc9dc8b1225ca2f184e282d502925af2 Mon Sep 17 00:00:00 2001
From: Andres Salomon <dilinger at collabora.co.uk>
Date: Tue, 15 Sep 2009 00:16:21 -0400
Subject: [PATCH 1/2] XMonadContrib: add a utility module to set the default cursor
This adds XMonad.Util.Cursor, which defines a function that allows setting
the default mouse cursor. This can be useful for (for example) gnomeConfig,
to ensure that the root cursor is changed from X_cursor to left_ptr.
Signed-off-by: Andres Salomon <dilinger at collabora.co.uk>
---
XMonad/Doc/Extending.hs | 2 +
XMonad/Util/Cursor.hsc | 354 +++++++++++++++++++++++++++++++++++++++++++++++
xmonad-contrib.cabal | 1 +
3 files changed, 357 insertions(+), 0 deletions(-)
create mode 100644 XMonad/Util/Cursor.hsc
diff --git a/XMonad/Doc/Extending.hs b/XMonad/Doc/Extending.hs
index 39e11a2..1c07b56 100644
--- a/XMonad/Doc/Extending.hs
+++ b/XMonad/Doc/Extending.hs
@@ -448,6 +448,8 @@ external utilities.
A non complete list with a brief description:
+* "XMonad.Util.Cursor": configure the default cursor/pointer glyph.
+
* "XMonad.Util.CustomKeys": configure key bindings (see
"XMonad.Doc.Extending#Editing_key_bindings").
diff --git a/XMonad/Util/Cursor.hsc b/XMonad/Util/Cursor.hsc
new file mode 100644
index 0000000..10e3d31
--- /dev/null
+++ b/XMonad/Util/Cursor.hsc
@@ -0,0 +1,354 @@
+----------------------------------------------------------------------------
+-- |
+-- Module : XMonad.Util.Cursor
+-- Copyright : (c) 2009 Collabora Ltd
+-- License : BSD-style (see xmonad/LICENSE)
+--
+-- Maintainer : Andres Salomon <dilinger at collabora.co.uk>
+-- Stability : unstable
+-- Portability : unportable
+--
+-- A module for setting the default mouse cursor.
+--
+-- Some ideas shamelessly stolen from Nils Schweinsberg; thanks!
+-----------------------------------------------------------------------------
+
+module XMonad.Util.Cursor
+ ( -- * Usage:
+ -- $usage
+ setDefaultCursor,
+ xc_X_cursor,
+ xc_arrow,
+ xc_based_arrow_down,
+ xc_based_arrow_up,
+ xc_boat,
+ xc_bogosity,
+ xc_bottom_left_corner,
+ xc_bottom_right_corner,
+ xc_bottom_side,
+ xc_bottom_tee,
+ xc_box_spiral,
+ xc_center_ptr,
+ xc_circle,
+ xc_clock,
+ xc_coffee_mug,
+ xc_cross,
+ xc_cross_reverse,
+ xc_crosshair,
+ xc_diamond_cross,
+ xc_dot,
+ xc_dotbox,
+ xc_double_arrow,
+ xc_draft_large,
+ xc_draft_small,
+ xc_draped_box,
+ xc_exchange,
+ xc_fleur,
+ xc_gobbler,
+ xc_gumby,
+ xc_hand1,
+ xc_hand2,
+ xc_heart,
+ xc_icon,
+ xc_iron_cross,
+ xc_left_ptr,
+ xc_left_side,
+ xc_left_tee,
+ xc_leftbutton,
+ xc_ll_angle,
+ xc_lr_angle,
+ xc_man,
+ xc_middlebutton,
+ xc_mouse,
+ xc_pencil,
+ xc_pirate,
+ xc_plus,
+ xc_question_arrow,
+ xc_right_ptr,
+ xc_right_side,
+ xc_right_tee,
+ xc_rightbutton,
+ xc_rtl_logo,
+ xc_sailboat,
+ xc_sb_down_arrow,
+ xc_sb_h_double_arrow,
+ xc_sb_left_arrow,
+ xc_sb_right_arrow,
+ xc_sb_up_arrow,
+ xc_sb_v_double_arrow,
+ xc_shuttle,
+ xc_sizing,
+ xc_spider,
+ xc_spraycan,
+ xc_star,
+ xc_target,
+ xc_tcross,
+ xc_top_left_arrow,
+ xc_top_left_corner,
+ xc_top_right_corner,
+ xc_top_side,
+ xc_top_tee,
+ xc_trek,
+ xc_ul_angle,
+ xc_umbrella,
+ xc_ur_angle,
+ xc_watch,
+ xc_xterm
+ ) where
+
+import XMonad
+
+-- $usage
+-- setDefaultCursor xc_left_ptr
+-- For example, to override the default gnome cursor:
+-- import XMonad.Util.Cursor
+-- main = xmonad gnomeConfig { startupHook = setDefaultCursor xc_pirate }
+-- Arrr!
+
+
+-- | Import the cursor font names from cursorfont.h
+
+#include <X11/cursorfont.h>
+
+xc_X_cursor :: Glyph
+xc_X_cursor = #const XC_X_cursor
+
+xc_arrow :: Glyph
+xc_arrow = #const XC_arrow
+
+xc_based_arrow_down :: Glyph
+xc_based_arrow_down = #const XC_based_arrow_down
+
+xc_based_arrow_up :: Glyph
+xc_based_arrow_up = #const XC_based_arrow_up
+
+xc_boat :: Glyph
+xc_boat = #const XC_boat
+
+xc_bogosity :: Glyph
+xc_bogosity = #const XC_bogosity
+
+xc_bottom_left_corner :: Glyph
+xc_bottom_left_corner = #const XC_bottom_left_corner
+
+xc_bottom_right_corner :: Glyph
+xc_bottom_right_corner = #const XC_bottom_right_corner
+
+xc_bottom_side :: Glyph
+xc_bottom_side = #const XC_bottom_side
+
+xc_bottom_tee :: Glyph
+xc_bottom_tee = #const XC_bottom_tee
+
+xc_box_spiral :: Glyph
+xc_box_spiral = #const XC_box_spiral
+
+xc_center_ptr :: Glyph
+xc_center_ptr = #const XC_center_ptr
+
+xc_circle :: Glyph
+xc_circle = #const XC_circle
+
+xc_clock :: Glyph
+xc_clock = #const XC_clock
+
+xc_coffee_mug :: Glyph
+xc_coffee_mug = #const XC_coffee_mug
+
+xc_cross :: Glyph
+xc_cross = #const XC_cross
+
+xc_cross_reverse :: Glyph
+xc_cross_reverse = #const XC_cross_reverse
+
+xc_crosshair :: Glyph
+xc_crosshair = #const XC_crosshair
+
+xc_diamond_cross :: Glyph
+xc_diamond_cross = #const XC_diamond_cross
+
+xc_dot :: Glyph
+xc_dot = #const XC_dot
+
+xc_dotbox :: Glyph
+xc_dotbox = #const XC_dotbox
+
+xc_double_arrow :: Glyph
+xc_double_arrow = #const XC_double_arrow
+
+xc_draft_large :: Glyph
+xc_draft_large = #const XC_draft_large
+
+xc_draft_small :: Glyph
+xc_draft_small = #const XC_draft_small
+
+xc_draped_box :: Glyph
+xc_draped_box = #const XC_draped_box
+
+xc_exchange :: Glyph
+xc_exchange = #const XC_exchange
+
+xc_fleur :: Glyph
+xc_fleur = #const XC_fleur
+
+xc_gobbler :: Glyph
+xc_gobbler = #const XC_gobbler
+
+xc_gumby :: Glyph
+xc_gumby = #const XC_gumby
+
+xc_hand1 :: Glyph
+xc_hand1 = #const XC_hand1
+
+xc_hand2 :: Glyph
+xc_hand2 = #const XC_hand2
+
+xc_heart :: Glyph
+xc_heart = #const XC_heart
+
+xc_icon :: Glyph
+xc_icon = #const XC_icon
+
+xc_iron_cross :: Glyph
+xc_iron_cross = #const XC_iron_cross
+
+xc_left_ptr :: Glyph
+xc_left_ptr = #const XC_left_ptr
+
+xc_left_side :: Glyph
+xc_left_side = #const XC_left_side
+
+xc_left_tee :: Glyph
+xc_left_tee = #const XC_left_tee
+
+xc_leftbutton :: Glyph
+xc_leftbutton = #const XC_leftbutton
+
+xc_ll_angle :: Glyph
+xc_ll_angle = #const XC_ll_angle
+
+xc_lr_angle :: Glyph
+xc_lr_angle = #const XC_lr_angle
+
+xc_man :: Glyph
+xc_man = #const XC_man
+
+xc_middlebutton :: Glyph
+xc_middlebutton = #const XC_middlebutton
+
+xc_mouse :: Glyph
+xc_mouse = #const XC_mouse
+
+xc_pencil :: Glyph
+xc_pencil = #const XC_pencil
+
+xc_pirate :: Glyph
+xc_pirate = #const XC_pirate
+
+xc_plus :: Glyph
+xc_plus = #const XC_plus
+
+xc_question_arrow :: Glyph
+xc_question_arrow = #const XC_question_arrow
+
+xc_right_ptr :: Glyph
+xc_right_ptr = #const XC_right_ptr
+
+xc_right_side :: Glyph
+xc_right_side = #const XC_right_side
+
+xc_right_tee :: Glyph
+xc_right_tee = #const XC_right_tee
+
+xc_rightbutton :: Glyph
+xc_rightbutton = #const XC_rightbutton
+
+xc_rtl_logo :: Glyph
+xc_rtl_logo = #const XC_rtl_logo
+
+xc_sailboat :: Glyph
+xc_sailboat = #const XC_sailboat
+
+xc_sb_down_arrow :: Glyph
+xc_sb_down_arrow = #const XC_sb_down_arrow
+
+xc_sb_h_double_arrow :: Glyph
+xc_sb_h_double_arrow = #const XC_sb_h_double_arrow
+
+xc_sb_left_arrow :: Glyph
+xc_sb_left_arrow = #const XC_sb_left_arrow
+
+xc_sb_right_arrow :: Glyph
+xc_sb_right_arrow = #const XC_sb_right_arrow
+
+xc_sb_up_arrow :: Glyph
+xc_sb_up_arrow = #const XC_sb_up_arrow
+
+xc_sb_v_double_arrow :: Glyph
+xc_sb_v_double_arrow = #const XC_sb_v_double_arrow
+
+xc_shuttle :: Glyph
+xc_shuttle = #const XC_shuttle
+
+xc_sizing :: Glyph
+xc_sizing = #const XC_sizing
+
+xc_spider :: Glyph
+xc_spider = #const XC_spider
+
+xc_spraycan :: Glyph
+xc_spraycan = #const XC_spraycan
+
+xc_star :: Glyph
+xc_star = #const XC_star
+
+xc_target :: Glyph
+xc_target = #const XC_target
+
+xc_tcross :: Glyph
+xc_tcross = #const XC_tcross
+
+xc_top_left_arrow :: Glyph
+xc_top_left_arrow = #const XC_top_left_arrow
+
+xc_top_left_corner :: Glyph
+xc_top_left_corner = #const XC_top_left_corner
+
+xc_top_right_corner :: Glyph
+xc_top_right_corner = #const XC_top_right_corner
+
+xc_top_side :: Glyph
+xc_top_side = #const XC_top_side
+
+xc_top_tee :: Glyph
+xc_top_tee = #const XC_top_tee
+
+xc_trek :: Glyph
+xc_trek = #const XC_trek
+
+xc_ul_angle :: Glyph
+xc_ul_angle = #const XC_ul_angle
+
+xc_umbrella :: Glyph
+xc_umbrella = #const XC_umbrella
+
+xc_ur_angle :: Glyph
+xc_ur_angle = #const XC_ur_angle
+
+xc_watch :: Glyph
+xc_watch = #const XC_watch
+
+xc_xterm :: Glyph
+xc_xterm = #const XC_xterm
+
+
+-- | Set the default (root) cursor
+setDefaultCursor :: Glyph -> X ()
+setDefaultCursor glyph = do
+ dpy <- asks display
+ rootw <- asks theRoot
+ liftIO $ do
+ curs <- createFontCursor dpy glyph
+ defineCursor dpy rootw curs
+ flush dpy
+ freeCursor dpy curs
diff --git a/xmonad-contrib.cabal b/xmonad-contrib.cabal
index 0d056a0..4b2a850 100644
--- a/xmonad-contrib.cabal
+++ b/xmonad-contrib.cabal
@@ -209,6 +209,7 @@ library
XMonad.Prompt.Window
XMonad.Prompt.Workspace
XMonad.Prompt.XMonad
+ XMonad.Util.Cursor
XMonad.Util.CustomKeys
XMonad.Util.Dmenu
XMonad.Util.Dzen
--
1.6.3.3
More information about the xmonad
mailing list