X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=otk%2Fdisplay.hh;h=5f658cd3a71a8770a531f1505b4853e6f7c7ae0b;hb=23940f9e034af023af610c56e915a6044ea436ec;hp=ee8fecbd55e7ffcd68aa2172fca5e8880fe2c482;hpb=711a7d8c5623814c374ed6f56476bc616cb9391f;p=chaz%2Fopenbox diff --git a/otk/display.hh b/otk/display.hh index ee8fecbd..5f658cd3 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,81 +11,82 @@ extern "C" { namespace otk { class ScreenInfo; -class BGCCache; +class GCCache; + +class Display; + +//! The display instance for the library +extern Display *display; //! 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 +class Display { public: - //! The X display - static Display *display; - //! A List of ScreenInfo instances typedef std::vector ScreenInfoList; private: - //! Does the display have the Shape extention? - static bool _shape; - //! Base for events for the Shape extention - static int _shape_event_basep; + //! The X display + ::Display *_display; + + //! Does the display have the XKB extension? + bool _xkb; + //! Base for events for the XKB extension + int _xkb_event_basep; - //! Does the display have the Xinerama extention? - static bool _xinerama; - //! Base for events for the Xinerama extention - static int _xinerama_event_basep; + //! Does the display have the Shape extension? + bool _shape; + //! Base for events for the Shape extension + int _shape_event_basep; + + //! Does the display have the Xinerama extension? + bool _xinerama; + //! Base for events for the Xinerama extension + int _xinerama_event_basep; //! A list of all possible combinations of keyboard lock masks - static unsigned int _mask_list[8]; + unsigned int _mask_list[8]; //! The value of the mask for the NumLock modifier - static unsigned int _numLockMask; + unsigned int _num_lock_mask; //! The value of the mask for the ScrollLock modifier - static unsigned int _scrollLockMask; + unsigned int _scroll_lock_mask; //! The number of requested grabs on the display - static int _grab_count; + int _grab_count; //! A list of information for all screens on the display - static ScreenInfoList _screenInfoList; + 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; + 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); - - //! Prevents instantiation of the class - OBDisplay(); + //int xerrorHandler(::Display *d, XErrorEvent *e); 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. + The DISPLAY environment variable is used to choose the display. + @see Display::display */ - static void initialize(char *name); + Display(); //! Destroys the class, closes the X display - static void destroy(); + ~Display(); //! Returns the GC cache for the application - inline static BGCCache *gcCache() { return _gccache; } + inline GCCache *gcCache() const { return _gccache; } //! Gets information on a specific screen /*! @@ -94,41 +95,50 @@ public: @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); + const ScreenInfo* screenInfo(int snum); - static const ScreenInfo* findScreen(Window root); + //! Find a ScreenInfo based on a root window + const ScreenInfo* findScreen(Window root); - //! Returns if the display has the shape extention available - inline static bool shape() { return _shape; } + //! Returns if the display has the xkb extension available + inline bool xkb() const { return _xkb; } + //! Returns the xkb extension's event base + inline int xkbEventBase() const { return _xkb_event_basep; } + + //! Returns if the display has the shape extension available + inline bool shape() const { 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 - inline static bool xinerama() { return _xinerama; } + inline int shapeEventBase() const { return _shape_event_basep; } + //! Returns if the display has the xinerama extension available + inline bool xinerama() const { return _xinerama; } + + inline unsigned int numLockMask() const { return _num_lock_mask; } + inline unsigned int scrollLockMask() const { return _scroll_lock_mask; } - inline static unsigned int numLockMask() { return _numLockMask; } - inline static unsigned int scrollLockMask() { return _scrollLockMask; } + inline ::Display* operator*() const { return _display; } //! Grabs the display - static void grab(); + void grab(); //! Ungrabs the display - static void ungrab(); + void ungrab(); /* TEMPORARY */ - static void grabButton(unsigned int button, unsigned int modifiers, + void grabButton(unsigned int button, unsigned int modifiers, Window grab_window, bool owner_events, unsigned int event_mask, int pointer_mode, int keyboard_mode, Window confine_to, Cursor cursor, - 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); + bool allow_scroll_lock) const; + void ungrabButton(unsigned int button, unsigned int modifiers, + Window grab_window) const; + void grabKey(unsigned int keycode, unsigned int modifiers, + Window grab_window, bool owner_events, + int pointer_mode, int keyboard_mode, + bool allow_scroll_lock) const; + void ungrabKey(unsigned int keycode, unsigned int modifiers, + Window grab_window) const; }; }