- xa_wm_colormap_windows =
- XInternAtom(display, "WM_COLORMAP_WINDOWS", False);
- xa_wm_protocols = XInternAtom(display, "WM_PROTOCOLS", False);
- xa_wm_state = XInternAtom(display, "WM_STATE", False);
- xa_wm_change_state = XInternAtom(display, "WM_CHANGE_STATE", False);
- xa_wm_delete_window = XInternAtom(display, "WM_DELETE_WINDOW", False);
- xa_wm_take_focus = XInternAtom(display, "WM_TAKE_FOCUS", False);
- motif_wm_hints = XInternAtom(display, "_MOTIF_WM_HINTS", False);
-
- openbox_hints = XInternAtom(display, "_BLACKBOX_HINTS", False);
- openbox_attributes = XInternAtom(display, "_BLACKBOX_ATTRIBUTES", False);
- openbox_change_attributes =
- XInternAtom(display, "_BLACKBOX_CHANGE_ATTRIBUTES", False);
-
- openbox_structure_messages =
- XInternAtom(display, "_BLACKBOX_STRUCTURE_MESSAGES", False);
- openbox_notify_startup =
- XInternAtom(display, "_BLACKBOX_NOTIFY_STARTUP", False);
- openbox_notify_window_add =
- XInternAtom(display, "_BLACKBOX_NOTIFY_WINDOW_ADD", False);
- openbox_notify_window_del =
- XInternAtom(display, "_BLACKBOX_NOTIFY_WINDOW_DEL", False);
- openbox_notify_current_workspace =
- XInternAtom(display, "_BLACKBOX_NOTIFY_CURRENT_WORKSPACE", False);
- openbox_notify_workspace_count =
- XInternAtom(display, "_BLACKBOX_NOTIFY_WORKSPACE_COUNT", False);
- openbox_notify_window_focus =
- XInternAtom(display, "_BLACKBOX_NOTIFY_WINDOW_FOCUS", False);
- openbox_notify_window_raise =
- XInternAtom(display, "_BLACKBOX_NOTIFY_WINDOW_RAISE", False);
- openbox_notify_window_lower =
- XInternAtom(display, "_BLACKBOX_NOTIFY_WINDOW_LOWER", False);
-
- openbox_change_workspace =
- XInternAtom(display, "_BLACKBOX_CHANGE_WORKSPACE", False);
- openbox_change_window_focus =
- XInternAtom(display, "_BLACKBOX_CHANGE_WINDOW_FOCUS", False);
- openbox_cycle_window_focus =
- XInternAtom(display, "_BLACKBOX_CYCLE_WINDOW_FOCUS", False);
-
-#ifdef NEWWMSPEC
-
- net_supported = XInternAtom(display, "_NET_SUPPORTED", False);
- net_client_list = XInternAtom(display, "_NET_CLIENT_LIST", False);
- net_client_list_stacking = XInternAtom(display, "_NET_CLIENT_LIST_STACKING", False);
- net_number_of_desktops = XInternAtom(display, "_NET_NUMBER_OF_DESKTOPS", False);
- net_desktop_geometry = XInternAtom(display, "_NET_DESKTOP_GEOMETRY", False);
- net_desktop_viewport = XInternAtom(display, "_NET_DESKTOP_VIEWPORT", False);
- net_current_desktop = XInternAtom(display, "_NET_CURRENT_DESKTOP", False);
- net_desktop_names = XInternAtom(display, "_NET_DESKTOP_NAMES", False);
- net_active_window = XInternAtom(display, "_NET_ACTIVE_WINDOW", False);
- net_workarea = XInternAtom(display, "_NET_WORKAREA", False);
- net_supporting_wm_check = XInternAtom(display, "_NET_SUPPORTING_WM_CHECK", False);
- net_virtual_roots = XInternAtom(display, "_NET_VIRTUAL_ROOTS", False);
-
- net_close_window = XInternAtom(display, "_NET_CLOSE_WINDOW", False);
- net_wm_moveresize = XInternAtom(display, "_NET_WM_MOVERESIZE", False);
-
- net_properties = XInternAtom(display, "_NET_PROPERTIES", False);
- net_wm_name = XInternAtom(display, "_NET_WM_NAME", False);
- net_wm_desktop = XInternAtom(display, "_NET_WM_DESKTOP", False);
- net_wm_window_type = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False);
- net_wm_state = XInternAtom(display, "_NET_WM_STATE", False);
- net_wm_strut = XInternAtom(display, "_NET_WM_STRUT", False);
- net_wm_icon_geometry = XInternAtom(display, "_NET_WM_ICON_GEOMETRY", False);
- net_wm_icon = XInternAtom(display, "_NET_WM_ICON", False);
- net_wm_pid = XInternAtom(display, "_NET_WM_PID", False);
- net_wm_handled_icons = XInternAtom(display, "_NET_WM_HANDLED_ICONS", False);
-
- net_wm_ping = XInternAtom(display, "_NET_WM_PING", False);
-
-#endif // NEWWMSPEC
-
- cursor.session = XCreateFontCursor(display, XC_left_ptr);
- cursor.move = XCreateFontCursor(display, XC_fleur);
- cursor.ll_angle = XCreateFontCursor(display, XC_ll_angle);
- cursor.lr_angle = XCreateFontCursor(display, XC_lr_angle);
- cursor.ul_angle = XCreateFontCursor(display, XC_ul_angle);
- cursor.ur_angle = XCreateFontCursor(display, XC_ur_angle);
-
- XSetErrorHandler((XErrorHandler) handleXErrors);
-
- screenInfoList.reserve(numberOfScreens());
- for (unsigned int s = 0; s < numberOfScreens(); s++)
- screenInfoList.push_back(new ScreenInfo(*this, s));
-
-#ifndef NOCLOBBER
- NumLockMask = ScrollLockMask = 0;
-
- const XModifierKeymap* const modmap = XGetModifierMapping(display);
- if (modmap && modmap->max_keypermod > 0) {
- const int mask_table[] = {
- ShiftMask, LockMask, ControlMask, Mod1Mask,
- Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask
- };
- const size_t size = (sizeof(mask_table) / sizeof(mask_table[0])) *
- modmap->max_keypermod;
- // get the values of the keyboard lock modifiers
- // Note: Caps lock is not retrieved the same way as Scroll and Num lock
- // since it doesn't need to be.
- const KeyCode num_lock_code = XKeysymToKeycode(display, XK_Num_Lock);
- const KeyCode scroll_lock_code = XKeysymToKeycode(display, XK_Scroll_Lock);
-
- for (size_t cnt = 0; cnt < size; ++cnt) {
- if (! modmap->modifiermap[cnt]) continue;
-
- if (num_lock_code == modmap->modifiermap[cnt])
- NumLockMask = mask_table[cnt / modmap->max_keypermod];
- if (scroll_lock_code == modmap->modifiermap[cnt])
- ScrollLockMask = mask_table[cnt / modmap->max_keypermod];
- }
- }
-
- MaskList[0] = 0;
- MaskList[1] = LockMask;
- MaskList[2] = NumLockMask;
- MaskList[3] = ScrollLockMask;
- MaskList[4] = LockMask | NumLockMask;
- MaskList[5] = NumLockMask | ScrollLockMask;
- MaskList[6] = LockMask | ScrollLockMask;
- MaskList[7] = LockMask | NumLockMask | ScrollLockMask;
- MaskListLength = sizeof(MaskList) / sizeof(MaskList[0]);
-
- if (modmap) XFreeModifiermap(const_cast<XModifierKeymap*>(modmap));
-#else
- NumLockMask = Mod2Mask;
- ScrollLockMask = Mod5Mask;
-#endif // NOCLOBBER