X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Fdisplay.hh;h=4e9b0227bb2ef395d3747bb21f7308540cab9b97;hb=711e499c703c5bd3a12183c2cbbd3910c7aba99b;hp=e8f91ae946dcd1bec090d643b2313ac5b82d78af;hpb=d4d89ce0bbd3dd0c556a593accb5e48f7ae09d9e;p=chaz%2Fopenbox diff --git a/otk/display.hh b/otk/display.hh index e8f91ae9..4e9b0227 100644 --- a/otk/display.hh +++ b/otk/display.hh @@ -1,4 +1,4 @@ -// -*- mode: C++; indent-tabs-mode: nil; -*- +// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- #ifndef __display_hh #define __display_hh @@ -11,7 +11,7 @@ extern "C" { namespace otk { class ScreenInfo; -class BGCCache; +class GCCache; //! Manages a single X11 display. /*! @@ -19,55 +19,69 @@ class BGCCache; 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 +class Display { public: //! The X display - static Display *display; + static ::Display *display; //! A List of ScreenInfo instances typedef std::vector ScreenInfoList; private: - //! Does the display have the Shape extention? + //! Does the display have the XKB extension? + static bool _xkb; + //! Base for events for the XKB extension + static int _xkb_event_basep; + + //! Does the display have the Shape extension? static bool _shape; - //! Base for events for the Shape extention + //! Base for events for the Shape extension static int _shape_event_basep; - //! Does the display have the Xinerama extention? + //! Does the display have the Xinerama extension? static bool _xinerama; - //! Base for events for the Xinerama extention + //! Base for events for the Xinerama extension static int _xinerama_event_basep; //! A list of all possible combinations of keyboard lock masks static unsigned int _mask_list[8]; + //! 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 + @see Pen + @see Font + @see Image + @see ImageControl + @see Texture */ - static BGCCache *_gccache; + static GCCache *_gccache; - //! Handles X errors on the display - /*! + // Handles X errors on the display + /* Displays the error if compiled for debugging. */ - static int xerrorHandler(Display *d, XErrorEvent *e); + //static int xerrorHandler(::Display *d, XErrorEvent *e); //! Prevents instantiation of the class - OBDisplay(); + Display(); public: //! Initializes the class, opens the X display /*! - @see OBDisplay::display + @see Display::display @param name The name of the X display to open. If it is null, the DISPLAY environment variable is used instead. */ @@ -76,7 +90,7 @@ public: static void destroy(); //! Returns the GC cache for the application - inline static BGCCache *gcCache() { return _gccache; } + inline static GCCache *gcCache() { return _gccache; } //! Gets information on a specific screen /*! @@ -87,14 +101,29 @@ public: */ static const ScreenInfo* screenInfo(int snum); - //! Returns if the display has the shape extention available + //! Find a ScreenInfo based on a root window + static const ScreenInfo* findScreen(Window root); + + //! Returns if the display has the xkb extension available + inline static bool xkb() { return _xkb; } + //! Returns the xkb extension's event base + inline static int xkbEventBase() { return _xkb_event_basep; } + + //! Returns if the display has the shape extension available inline static bool shape() { return _shape; } //! Returns the shape extension's event base inline static int shapeEventBase() { return _shape_event_basep; } - //! Returns if the display has the xinerama extention available + //! Returns if the display has the xinerama extension 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(); @@ -106,6 +135,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); }; }