1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2021 Sam Lantinga <slouken@libsdl.org>
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20*/
21#include "../../SDL_internal.h"
22
23#ifndef SDL_x11window_h_
24#define SDL_x11window_h_
25
26/* We need to queue the focus in/out changes because they may occur during
27 video mode changes and we can respond to them by triggering more mode
28 changes.
29*/
30#define PENDING_FOCUS_TIME 200
31
32#if SDL_VIDEO_OPENGL_EGL
33#include <EGL/egl.h>
34#endif
35
36typedef enum
37{
38 PENDING_FOCUS_NONE,
39 PENDING_FOCUS_IN,
40 PENDING_FOCUS_OUT
41} PendingFocusEnum;
42
43typedef struct
44{
45 SDL_Window *window;
46 Window xwindow;
47 Window fswindow; /* used if we can't have the WM handle fullscreen. */
48 Visual *visual;
49 Colormap colormap;
50#ifndef NO_SHARED_MEMORY
51 /* MIT shared memory extension information */
52 SDL_bool use_mitshm;
53 XShmSegmentInfo shminfo;
54#endif
55 XImage *ximage;
56 GC gc;
57 XIC ic;
58 SDL_bool created;
59 int border_left;
60 int border_right;
61 int border_top;
62 int border_bottom;
63 Uint32 last_focus_event_time;
64 PendingFocusEnum pending_focus;
65 Uint32 pending_focus_time;
66 XConfigureEvent last_xconfigure;
67 struct SDL_VideoData *videodata;
68 unsigned long user_time;
69 Atom xdnd_req;
70 Window xdnd_source;
71#if SDL_VIDEO_OPENGL_EGL
72 EGLSurface egl_surface;
73#endif
74} SDL_WindowData;
75
76extern void X11_SetNetWMState(_THIS, Window xwindow, Uint32 flags);
77extern Uint32 X11_GetNetWMState(_THIS, Window xwindow);
78
79extern int X11_CreateWindow(_THIS, SDL_Window * window);
80extern int X11_CreateWindowFrom(_THIS, SDL_Window * window, const void *data);
81extern char *X11_GetWindowTitle(_THIS, Window xwindow);
82extern void X11_SetWindowTitle(_THIS, SDL_Window * window);
83extern void X11_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon);
84extern void X11_SetWindowPosition(_THIS, SDL_Window * window);
85extern void X11_SetWindowMinimumSize(_THIS, SDL_Window * window);
86extern void X11_SetWindowMaximumSize(_THIS, SDL_Window * window);
87extern int X11_GetWindowBordersSize(_THIS, SDL_Window * window, int *top, int *left, int *bottom, int *right);
88extern int X11_SetWindowOpacity(_THIS, SDL_Window * window, float opacity);
89extern int X11_SetWindowModalFor(_THIS, SDL_Window * modal_window, SDL_Window * parent_window);
90extern int X11_SetWindowInputFocus(_THIS, SDL_Window * window);
91extern void X11_SetWindowSize(_THIS, SDL_Window * window);
92extern void X11_ShowWindow(_THIS, SDL_Window * window);
93extern void X11_HideWindow(_THIS, SDL_Window * window);
94extern void X11_RaiseWindow(_THIS, SDL_Window * window);
95extern void X11_MaximizeWindow(_THIS, SDL_Window * window);
96extern void X11_MinimizeWindow(_THIS, SDL_Window * window);
97extern void X11_RestoreWindow(_THIS, SDL_Window * window);
98extern void X11_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered);
99extern void X11_SetWindowResizable(_THIS, SDL_Window * window, SDL_bool resizable);
100extern void X11_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen);
101extern int X11_SetWindowGammaRamp(_THIS, SDL_Window * window, const Uint16 * ramp);
102extern void X11_SetWindowMouseGrab(_THIS, SDL_Window * window, SDL_bool grabbed);
103extern void X11_SetWindowKeyboardGrab(_THIS, SDL_Window * window, SDL_bool grabbed);
104extern void X11_DestroyWindow(_THIS, SDL_Window * window);
105extern SDL_bool X11_GetWindowWMInfo(_THIS, SDL_Window * window,
106 struct SDL_SysWMinfo *info);
107extern int X11_SetWindowHitTest(SDL_Window *window, SDL_bool enabled);
108extern void X11_AcceptDragAndDrop(SDL_Window * window, SDL_bool accept);
109
110#endif /* SDL_x11window_h_ */
111
112/* vi: set ts=4 sw=4 expandtab: */
113