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 | |
36 | typedef enum |
37 | { |
38 | PENDING_FOCUS_NONE, |
39 | PENDING_FOCUS_IN, |
40 | PENDING_FOCUS_OUT |
41 | } PendingFocusEnum; |
42 | |
43 | typedef 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 | |
76 | extern void X11_SetNetWMState(_THIS, Window xwindow, Uint32 flags); |
77 | extern Uint32 X11_GetNetWMState(_THIS, Window xwindow); |
78 | |
79 | extern int X11_CreateWindow(_THIS, SDL_Window * window); |
80 | extern int X11_CreateWindowFrom(_THIS, SDL_Window * window, const void *data); |
81 | extern char *X11_GetWindowTitle(_THIS, Window xwindow); |
82 | extern void X11_SetWindowTitle(_THIS, SDL_Window * window); |
83 | extern void X11_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon); |
84 | extern void X11_SetWindowPosition(_THIS, SDL_Window * window); |
85 | extern void X11_SetWindowMinimumSize(_THIS, SDL_Window * window); |
86 | extern void X11_SetWindowMaximumSize(_THIS, SDL_Window * window); |
87 | extern int (_THIS, SDL_Window * window, int *top, int *left, int *bottom, int *right); |
88 | extern int X11_SetWindowOpacity(_THIS, SDL_Window * window, float opacity); |
89 | extern int X11_SetWindowModalFor(_THIS, SDL_Window * modal_window, SDL_Window * parent_window); |
90 | extern int X11_SetWindowInputFocus(_THIS, SDL_Window * window); |
91 | extern void X11_SetWindowSize(_THIS, SDL_Window * window); |
92 | extern void X11_ShowWindow(_THIS, SDL_Window * window); |
93 | extern void X11_HideWindow(_THIS, SDL_Window * window); |
94 | extern void X11_RaiseWindow(_THIS, SDL_Window * window); |
95 | extern void X11_MaximizeWindow(_THIS, SDL_Window * window); |
96 | extern void X11_MinimizeWindow(_THIS, SDL_Window * window); |
97 | extern void X11_RestoreWindow(_THIS, SDL_Window * window); |
98 | extern void X11_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered); |
99 | extern void X11_SetWindowResizable(_THIS, SDL_Window * window, SDL_bool resizable); |
100 | extern void X11_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen); |
101 | extern int X11_SetWindowGammaRamp(_THIS, SDL_Window * window, const Uint16 * ramp); |
102 | extern void X11_SetWindowMouseGrab(_THIS, SDL_Window * window, SDL_bool grabbed); |
103 | extern void X11_SetWindowKeyboardGrab(_THIS, SDL_Window * window, SDL_bool grabbed); |
104 | extern void X11_DestroyWindow(_THIS, SDL_Window * window); |
105 | extern SDL_bool X11_GetWindowWMInfo(_THIS, SDL_Window * window, |
106 | struct SDL_SysWMinfo *info); |
107 | extern int X11_SetWindowHitTest(SDL_Window *window, SDL_bool enabled); |
108 | extern 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 | |