Deskflow 1.22.0.197
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
XWindowsUtil.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
4 * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
10#include "base/EventTypes.h"
11
12#include <map>
13#include <string>
14#include <vector>
15
16#include <X11/Xlib.h>
17
20{
21public:
22 using KeySyms = std::vector<KeySym>;
23
25
32 static bool getWindowProperty(
33 Display *, Window window, Atom property, std::string *data, Atom *type, int32_t *format, bool deleteProperty
34 );
35
37
41 static bool setWindowProperty(
42 Display *, Window window, Atom property, const void *data, uint32_t size, Atom type, int32_t format
43 );
44
46
49 static Time getCurrentTime(Display *, Window);
50
52
56 static uint32_t mapKeySymToKeyID(KeySym);
57
59
63 static uint32_t getModifierBitForKeySym(KeySym keysym);
64
66
69 static std::string atomToString(Display *, Atom atom);
70
72
76 static std::string atomsToString(Display *display, const Atom *atom, uint32_t num);
77
79
83 static void convertAtomProperty(std::string &data);
84
86
90 static void appendAtomData(std::string &data, Atom atom);
91
93
97 static void replaceAtomData(std::string &data, uint32_t index, Atom atom);
98
100
104 static void appendTimeData(std::string &data, Time time);
105
107
116 {
117 public:
119 using ErrorHandler = void (*)(Display *, XErrorEvent *, void *userData);
120
124 explicit ErrorLock(Display *);
125 ErrorLock(ErrorLock const &) = delete;
126 ErrorLock(ErrorLock &&) = delete;
127
128 ErrorLock &operator=(ErrorLock const &) = delete;
130
134 ErrorLock(Display *, bool *errorFlag);
135
139 ErrorLock(Display *, ErrorHandler handler, void *userData);
140
141 ~ErrorLock();
142
143 private:
144 void install(ErrorHandler, void *);
145 static int internalHandler(Display *, XErrorEvent *);
146 static void ignoreHandler(Display *, XErrorEvent *, void *);
147 static void saveHandler(Display *, XErrorEvent *, void *);
148
149 private:
150 using XErrorHandler = int (*)(Display *, XErrorEvent *);
151
152 Display *m_display;
153 ErrorHandler m_handler;
154 void *m_userData;
155 XErrorHandler m_oldXHandler;
156 ErrorLock *m_next;
157 static ErrorLock *s_top;
158 };
159
160private:
161 class PropertyNotifyPredicateInfo
162 {
163 public:
164 Window m_window;
165 Atom m_property;
166 };
167
168 static Bool propertyNotifyPredicate(Display *, XEvent *xevent, XPointer arg);
169
170 static void initKeyMaps();
171
172private:
173 using KeySymMap = std::map<KeySym, uint32_t>;
174
175 static KeySymMap s_keySymToUCS4;
176};
static int void FAR * data
Definition ArchNetworkWinsock.cpp:34
static int type
Definition ArchNetworkWinsock.cpp:44
static int(PASCAL FAR *bind_winsock)(SOCKET s
ErrorLock & operator=(ErrorLock const &)=delete
~ErrorLock()
Definition XWindowsUtil.cpp:1915
ErrorLock & operator=(ErrorLock &&)=delete
ErrorLock(ErrorLock &&)=delete
ErrorLock(ErrorLock const &)=delete
void(*)(Display *, XErrorEvent *, void *userData) ErrorHandler
Error handler type.
Definition XWindowsUtil.h:119
ErrorLock(Display *)
Definition XWindowsUtil.cpp:1900
X11 utility functions.
Definition XWindowsUtil.h:20
static void appendTimeData(std::string &data, Time time)
Append an Time to property data.
Definition XWindowsUtil.cpp:1871
std::vector< KeySym > KeySyms
Definition XWindowsUtil.h:22
static void convertAtomProperty(std::string &data)
Prepare a property of atoms for use.
Definition XWindowsUtil.cpp:1847
static std::string atomsToString(Display *display, const Atom *atom, uint32_t num)
Convert several Atoms to a string.
Definition XWindowsUtil.cpp:1823
static uint32_t mapKeySymToKeyID(KeySym)
Convert KeySym to KeyID.
Definition XWindowsUtil.cpp:1669
static void appendAtomData(std::string &data, Atom atom)
Append an Atom to property data.
Definition XWindowsUtil.cpp:1861
static bool getWindowProperty(Display *, Window window, Atom property, std::string *data, Atom *type, int32_t *format, bool deleteProperty)
Get property.
Definition XWindowsUtil.cpp:1506
static uint32_t getModifierBitForKeySym(KeySym keysym)
Convert KeySym to corresponding KeyModifierMask.
Definition XWindowsUtil.cpp:1759
static std::string atomToString(Display *, Atom atom)
Convert Atom to its string.
Definition XWindowsUtil.cpp:1805
static bool setWindowProperty(Display *, Window window, Atom property, const void *data, uint32_t size, Atom type, int32_t format)
Set property.
Definition XWindowsUtil.cpp:1594
static void replaceAtomData(std::string &data, uint32_t index, Atom atom)
Replace an Atom in property data.
Definition XWindowsUtil.cpp:1866
static Time getCurrentTime(Display *, Window)
Get X server time.
Definition XWindowsUtil.cpp:1635