]> Dogcows Code - chaz/openbox/blobdiff - otk/display.hh
state the license. killall the old readme data
[chaz/openbox] / otk / display.hh
index 7724bbab7222817e044b00cc257a1d9abc4f8be7..0dc59481d3d5bd6898a634265fa9d3d7338b03b4 100644 (file)
@@ -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,70 +11,139 @@ extern "C" {
 namespace otk {
 
 class ScreenInfo;
-class BGCCache;
+class GCCache;
 
-class OBDisplay
+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 Display
 {
 public:
-  static Display *display;       // the X display
-
+  //! A List of ScreenInfo instances
   typedef std::vector<ScreenInfo> ScreenInfoList;
-  
+
 private:
-  static bool _shape;          // does the display have the shape extention?
-  static int  _shape_event_basep;   // base for shape events
+  //! 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 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;
 
-  static bool _xinerama;       // does the display have the xinerama extention?
-  static int  _xinerama_event_basep;// base for xinerama events
+  //! A list of all possible combinations of keyboard lock masks
+  unsigned int _mask_list[8];
 
-  static unsigned int _mask_list[8];// a list of all combinations of lock masks
+  //! The value of the mask for the NumLock modifier
+  unsigned int _num_lock_mask;
 
-  static ScreenInfoList _screenInfoList; // info for all screens on the display
+  //! The value of the mask for the ScrollLock modifier
+  unsigned int _scroll_lock_mask;
 
-  static BGCCache *_gccache;
+  //! The number of requested grabs on the display
+  int _grab_count;
 
-  static int xerrorHandler(Display *d, XErrorEvent *e); // handles X errors duh
+  //! A list of information for all screens on the display
+  ScreenInfoList _screenInfoList;
 
-  OBDisplay(); // this class cannot be instantiated
+  //! A cache for re-using GCs, used by the drawing objects
+  /*!
+    @see Pen
+    @see Font
+    @see Image
+    @see ImageControl
+    @see Texture
+  */
+  GCCache *_gccache;
+
+  // Handles X errors on the display
+  /*
+    Displays the error if compiled for debugging.
+  */
+  //int xerrorHandler(::Display *d, XErrorEvent *e);
 
 public:
-  static void initialize(char *name);
-  static void destroy();
+  //! Initializes the class, opens the X display
+  /*!
+    The DISPLAY environment variable is used to choose the display.
+    @see Display::display
+  */
+  Display();
+  //! Destroys the class, closes the X display
+  ~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
   /*!
-    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
   */
-  inline static const ScreenInfo* screenInfo(int snum) {
-    assert(snum >= 0);
-    assert(snum < static_cast<int>(_screenInfoList.size()));
-    return &_screenInfoList[snum];
-  }
-
-  //! Returns if the display has the shape extention available
-  inline static bool shape() { return _shape; }
+  const ScreenInfo* screenInfo(int snum);
+
+  //! Find a ScreenInfo based on a root window
+  const ScreenInfo* findScreen(Window root);
+
+  //! 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 ::Display* operator*() const { return _display; }
 
+  //! Grabs the display
+  void grab();
 
+  //! Ungrabs the display
+  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);
+                  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;
 };
 
 }
This page took 0.026522 seconds and 4 git commands to generate.