- _mask_list[2] = NumLockMask;
- _mask_list[3] = LockMask | NumLockMask;
- _mask_list[4] = ScrollLockMask;
- _mask_list[5] = ScrollLockMask | LockMask;
- _mask_list[6] = ScrollLockMask | NumLockMask;
- _mask_list[7] = ScrollLockMask | LockMask | NumLockMask;
-
- // Get information on all the screens which are available.
- _screenInfoList.reserve(ScreenCount(display));
- for (int i = 0; i < ScreenCount(display); ++i)
- _screenInfoList.push_back(ScreenInfo(i));
-
- _gccache = new BGCCache(_screenInfoList.size());
+ _mask_list[2] = _num_lock_mask;
+ _mask_list[3] = LockMask | _num_lock_mask;
+ _mask_list[4] = _scroll_lock_mask;
+ _mask_list[5] = _scroll_lock_mask | LockMask;
+ _mask_list[6] = _scroll_lock_mask | _num_lock_mask;
+ _mask_list[7] = _scroll_lock_mask | LockMask | _num_lock_mask;
+
+ // Get information on all the screens which are available, and create their
+ // RenderControl
+ _screeninfo_list = new ScreenInfo*[ScreenCount(_display)];
+ _rendercontrol_list = new RenderControl*[ScreenCount(_display)];
+ for (int i = 0; i < ScreenCount(_display); ++i) {
+ _screeninfo_list[i] = new ScreenInfo(i);
+ _rendercontrol_list[i] = RenderControl::getRenderControl(i);
+ }
+}
+
+
+Display::~Display()
+{
+ while (_grab_count > 0)
+ ungrab();
+
+ XFreeModifiermap(_modmap);
+
+ for (int i = 0; i < ScreenCount(_display); ++i) {
+ delete _rendercontrol_list[i];
+ delete _screeninfo_list[i];
+ }
+ delete [] _rendercontrol_list;
+ delete [] _screeninfo_list;
+
+ XCloseDisplay(_display);
+}
+
+
+const ScreenInfo* Display::screenInfo(int snum) const
+{
+ assert(snum >= 0);
+ assert(snum < (signed) ScreenCount(_display));
+ return _screeninfo_list[snum];