all repos — openbox @ 345d957e1ea577480f807b892b73c3f52fe913d2

openbox fork - make it a bit more like ryudo

otk/display.hh (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// -*- mode: C++; indent-tabs-mode: nil; -*-
#ifndef   __display_hh
#define   __display_hh

extern "C" {
#include <X11/Xlib.h>
}

#include <vector>

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:
  //! The X display
  static Display *display;
  
  //! A List of ScreenInfo instances
  typedef std::vector<ScreenInfo> ScreenInfoList;

private:
  //! 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 extension
  static int  _shape_event_basep;

  //! Does the display have the Xinerama extension?
  static bool _xinerama;
  //! 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
  */
  static BGCCache *_gccache;

  //! 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();

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 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
  */
  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 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 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();


  
  /* TEMPORARY */
  static 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);
};

}

#endif // __display_hh