all repos — openbox @ 0c05f5d9c76d4c765022eb72dc03de6671c20734

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
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
#ifndef   __display_hh
#define   __display_hh

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

namespace otk {

class ScreenInfo;
class RenderControl;

class Display;

//! The display instance for the library
extern Display *display;

//! Manages a single X11 display.
class Display
{
private:
  //! 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;

  //! A list of all possible combinations of keyboard lock masks
  unsigned int _mask_list[8];

  //! The value of the mask for the NumLock modifier
  unsigned int _num_lock_mask;

  //! The value of the mask for the ScrollLock modifier
  unsigned int _scroll_lock_mask;

  //! The key codes for the modifier keys
  XModifierKeymap *_modmap;
  
  //! The number of requested grabs on the display
  int _grab_count;

  //! When true, X errors will be ignored. Use with care.
  bool _ignore_errors;

  //! A list of information for all screens on the display
  ScreenInfo** _screeninfo_list;

  //! A list of RenderControl objects, which are used for all graphics on a
  //! screen
  RenderControl** _rendercontrol_list;

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

  //! 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
  */
  const ScreenInfo* screenInfo(int snum) const;

  //! Find a ScreenInfo based on a root window
  const ScreenInfo* findScreen(Window root) const;

  //! Gets the RenderControl for a screen
  const RenderControl *renderControl(int snum) const;

  //! 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 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; }
  const XModifierKeymap *modifierMap() const { return _modmap; }

  inline ::Display* operator*() const { return _display; }

  //! When true, X errors will be ignored.
  inline bool ignoreErrors() const { return _ignore_errors; }
  //! Set whether X errors should be ignored. Use with care.
  void setIgnoreErrors(bool t);
  
  //! Grabs the display
  void grab();

  //! Ungrabs the display
  void ungrab();


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

}

#endif // __display_hh