X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Fdisplay.hh;h=ed469a6c5c79e9acfa85a9e2bf7f979c532c403f;hb=a2de94e91e1c0e7775c97745ae11d14e5c5f5659;hp=13ceaa3628d04bdfe3cc94b8c6adca8f7754541b;hpb=c5f62494f14629797c109acc0b3048203a1adb6a;p=chaz%2Fopenbox diff --git a/otk/display.hh b/otk/display.hh index 13ceaa36..ed469a6c 100644 --- a/otk/display.hh +++ b/otk/display.hh @@ -13,45 +13,92 @@ namespace otk { class ScreenInfo; class BGCCache; +//! Manages a single X11 display. +/*! + This class is static, and cannot be instantiated. + Use the initialize() method to open the display and ready it for use. + Use the destroy() method to close it and clean up the class' data. +*/ class OBDisplay { public: - static Display *display; // the X display - - typedef std::vector ScreenInfoList; + //! The X display + static Display *display; + //! A List of ScreenInfo instances + typedef std::vector ScreenInfoList; + private: - static bool _shape; // does the display have the shape extention? - static int _shape_event_basep; // base for shape events + //! Does the display have the Shape extention? + static bool _shape; + //! Base for events for the Shape extention + static int _shape_event_basep; - static bool _xinerama; // does the display have the xinerama extention? - static int _xinerama_event_basep;// base for xinerama events + //! Does the display have the Xinerama extention? + static bool _xinerama; + //! Base for events for the Xinerama extention + static int _xinerama_event_basep; - static unsigned int _mask_list[8];// a list of all combinations of lock masks + //! A list of all possible combinations of keyboard lock masks + static unsigned int _mask_list[8]; - static ScreenInfoList _screenInfoList; // info for all screens on the display + //! The value of the mask for the NumLock modifier + static unsigned int _numLockMask; + //! The value of the mask for the ScrollLock modifier + static unsigned int _scrollLockMask; + + //! The number of requested grabs on the display + static int _grab_count; + + //! A list of information for all screens on the display + static ScreenInfoList _screenInfoList; + + //! A cache for re-using GCs, used by the drawing objects + /*! + @see BPen + @see BFont + @see BImage + @see BImageControl + @see BTexture + */ static BGCCache *_gccache; - static int xerrorHandler(Display *d, XErrorEvent *e); // handles X errors duh + //! Handles X errors on the display + /*! + Displays the error if compiled for debugging. + */ + static int xerrorHandler(Display *d, XErrorEvent *e); - OBDisplay(); // this class cannot be instantiated + //! Prevents instantiation of the class + OBDisplay(); public: + //! Initializes the class, opens the X display + /*! + @see OBDisplay::display + @param name The name of the X display to open. If it is null, the DISPLAY + environment variable is used instead. + */ static void initialize(char *name); + //! Destroys the class, closes the X display static void destroy(); //! Returns the GC cache for the application inline static BGCCache *gcCache() { return _gccache; } + //! Gets information on a specific screen /*! - Returns a ScreenInfo class, which gives information on a screen on the + Returns a ScreenInfo class, which contains information for a screen on the display. - \param snum The screen number of the screen to retrieve info on - \return Info on the requested screen, in a ScreenInfo class + @param snum The screen number of the screen to retrieve info on + @return Info on the requested screen, in a ScreenInfo class */ static const ScreenInfo* screenInfo(int snum); + //! Find a ScreenInfo based on a root window + static const ScreenInfo* findScreen(Window root); + //! Returns if the display has the shape extention available inline static bool shape() { return _shape; } //! Returns the shape extension's event base @@ -59,7 +106,14 @@ public: //! Returns if the display has the xinerama extention available inline static bool xinerama() { return _xinerama; } + inline static unsigned int numLockMask() { return _numLockMask; } + inline static unsigned int scrollLockMask() { return _scrollLockMask; } + //! Grabs the display + static void grab(); + + //! Ungrabs the display + static void ungrab(); @@ -71,6 +125,11 @@ public: bool allow_scroll_lock); static void ungrabButton(unsigned int button, unsigned int modifiers, Window grab_window); + static void grabKey(unsigned int keycode, unsigned int modifiers, + Window grab_window, bool owner_events, + int pointer_mode, int keyboard_mode, bool allow_scroll_lock); + static void ungrabKey(unsigned int keycode, unsigned int modifiers, + Window grab_window); }; }