src/video/x11/SDL_x11window.h
author Ryan C. Gordon
Tue, 05 Jan 2016 02:28:56 -0500
changeset 10026 5f73f513b9f5
parent 10025 bf4f8cde1c54
child 10027 f7ab0613164a
permissions -rw-r--r--
Added SDL_SetWindowInputFocus().

This is currently only implemented for X11.

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