78 explicit Atoms (::Display*);
80 static Atom getIfExists (::Display*,
const char* name);
81 static Atom getCreating (::Display*,
const char* name);
83 static String getName (::Display*, Atom);
84 static bool isMimeTypeFile (::Display*, Atom);
86 static constexpr unsigned long DndVersion = 3;
88 Atom protocols, protocolList[3], changeState, state, userTime, activeWin, pid, windowType, windowState, windowStateHidden,
89 XdndAware, XdndEnter, XdndLeave, XdndPosition, XdndStatus, XdndDrop, XdndFinished, XdndSelection,
90 XdndTypeList, XdndActionList, XdndActionDescription, XdndActionCopy, XdndActionPrivate,
91 XembedMsgType, XembedInfo, allowedActions[5], allowedMimeTypes[4], utf8String, clipboard, targets;
111 XSetting (
const String& n,
int v) : name (n), type (Type::integer), integerValue (v) {}
115 bool isValid()
const noexcept {
return type != Type::invalid; }
118 Type type = Type::invalid;
120 int integerValue = -1;
176 void destroyWindow (::Window);
178 void setTitle (::Window,
const String&)
const;
179 void setIcon (::Window ,
const Image&)
const;
182 void updateConstraints (::Window)
const;
186 Point<int> getPhysicalParentScreenPosition()
const;
191 bool isMinimised (::Window)
const;
195 void toFront (::Window,
bool makeActive)
const;
196 void toBehind (::Window, ::Window
otherWindow)
const;
198 bool isFocused (::Window)
const;
199 bool grabFocus (::Window)
const;
201 bool canUseSemiTransparentWindows()
const;
202 bool canUseARGBImages()
const;
203 bool isDarkModeActive()
const;
205 int getNumPaintsPendingForWindow (::Window);
206 void processPendingPaintsForWindow (::Window);
207 void addPendingPaintForWindow (::Window);
208 void removePendingPaintForWindow (::Window);
210 Image createImage (
bool isSemiTransparentWindow,
int width,
int height,
bool argb)
const;
213 void setScreenSaverEnabled (
bool enabled)
const;
218 Cursor createCustomMouseCursorInfo (
const Image&,
Point<int> hotspot)
const;
219 void deleteMouseCursor (Cursor cursorHandle)
const;
221 void showCursor (::Window, Cursor cursorHandle)
const;
223 bool isKeyCurrentlyDown (
int keyCode)
const;
228 ::Window createKeyProxy (::Window);
229 void deleteKeyProxy (::Window)
const;
234 void copyTextToClipboard (
const String&);
235 String getTextFromClipboard()
const;
236 String getLocalClipboardContent()
const noexcept {
return localClipboardContent; }
238 ::Display* getDisplay()
const noexcept {
return display; }
242 bool isX11Available()
const noexcept {
return xIsAvailable; }
244 void startHostManagedResize (::Window window,
247 static String getWindowScalingFactorSettingName() {
return "Gdk/WindowScalingFactor"; }
248 static String getThemeNameSettingName() {
return "Net/ThemeName"; }
252 bool isParentWindowOf (::Window, ::Window
possibleChild)
const;
262 struct VisualAndDepth
268 struct DisplayVisuals
270 explicit DisplayVisuals (::Display*);
272 VisualAndDepth getBestVisualForWindow (
bool)
const;
273 bool isValid()
const noexcept;
275 Visual* visual16Bit =
nullptr;
276 Visual* visual24Bit =
nullptr;
277 Visual* visual32Bit =
nullptr;
280 bool initialiseXDisplay();
281 void destroyXDisplay();
284 ::Window getFocusWindow (::Window)
const;
286 bool isFrontWindow (::Window)
const;
289 void xchangeProperty (::Window, Atom, Atom,
int,
const void*,
int)
const;
291 void removeWindowDecorations (::Window)
const;
292 void addWindowButtons (::Window,
int)
const;
293 void setWindowType (::Window,
int)
const;
295 void initialisePointerMap();
296 void deleteIconPixmaps (::Window)
const;
297 void updateModifierMappings()
const;
299 long getUserTime (::Window)
const;
300 bool isHidden (Window)
const;
301 bool isIconic (Window)
const;
303 void initialiseXSettings();
329 ::Window findTopLevelWindowOf (::Window)
const;
331 static void windowMessageReceive (
XEvent&);
334 bool xIsAvailable =
false;
337 ::Display* display =
nullptr;
345 int shmCompletionEvent = 0;
346 int pointerMap[5] = {};
347 String localClipboardContent;