all repos — openbox @ f8a47de5ec444c452093371e3db16857eb39a490

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

  //! The optimal visual for the display
  Visual *_visual;

  //! Our colormap built for the optimal visual
  Colormap _colormap;

  //! The depth of our optimal visual
  int _depth;
  
public:
  //! Wraps an open Display connection
  /*!
    @param d An open Display connection.
  */
  Display(::Display *d);
  //! Destroys the class, closes the X display
  ~Display();

  //! 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;
  void ungrabAllKeys(Window grab_window) const;
};

}

#endif // __display_hh