src/video/wayland/SDL_waylandwindow.h
author Sebastian Krzyszkowiak <dos@dosowisko.net>
Wed, 07 Nov 2018 01:08:35 +0100
changeset 12400 28303fca62bd
parent 12367 8256aaaafe54
child 12426 779d711b6b5e
permissions -rw-r--r--
wayland: fix resizing and fullscreen toggling
For starters, we need to correctly respond to 0,0 configure after unsetting
fullscreen. Also, turns out that there should be no drawing calls at all
in between eglSwapBuffers and wl_egl_window_resize, as otherwise EGL can
already allocate a wrongly sized buffer for a next frame, so handle those
together.
gabomdq@8062
     1
/*
gabomdq@8062
     2
  Simple DirectMedia Layer
slouken@11811
     3
  Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
gabomdq@8062
     4
gabomdq@8062
     5
  This software is provided 'as-is', without any express or implied
gabomdq@8062
     6
  warranty.  In no event will the authors be held liable for any damages
gabomdq@8062
     7
  arising from the use of this software.
gabomdq@8062
     8
gabomdq@8062
     9
  Permission is granted to anyone to use this software for any purpose,
gabomdq@8062
    10
  including commercial applications, and to alter it and redistribute it
gabomdq@8062
    11
  freely, subject to the following restrictions:
gabomdq@8062
    12
gabomdq@8062
    13
  1. The origin of this software must not be misrepresented; you must not
gabomdq@8062
    14
     claim that you wrote the original software. If you use this software
gabomdq@8062
    15
     in a product, an acknowledgment in the product documentation would be
gabomdq@8062
    16
     appreciated but is not required.
gabomdq@8062
    17
  2. Altered source versions must be plainly marked as such, and must not be
gabomdq@8062
    18
     misrepresented as being the original software.
gabomdq@8062
    19
  3. This notice may not be removed or altered from any source distribution.
gabomdq@8062
    20
*/
gabomdq@8062
    21
gabomdq@8104
    22
#include "../../SDL_internal.h"
gabomdq@8062
    23
slouken@11382
    24
#ifndef SDL_waylandwindow_h_
slouken@11382
    25
#define SDL_waylandwindow_h_
gabomdq@8062
    26
gabomdq@8062
    27
#include "../SDL_sysvideo.h"
gabomdq@8062
    28
#include "SDL_syswm.h"
gabomdq@8062
    29
gabomdq@8062
    30
#include "SDL_waylandvideo.h"
gabomdq@8062
    31
gabomdq@8062
    32
struct SDL_WaylandInput;
gabomdq@8062
    33
gabomdq@8062
    34
typedef struct {
icculus@11848
    35
    struct zxdg_surface_v6 *surface;
icculus@11848
    36
    union {
icculus@11848
    37
        struct zxdg_toplevel_v6 *toplevel;
icculus@11848
    38
        struct zxdg_popup_v6 *popup;
icculus@11848
    39
    } roleobj;
icculus@11944
    40
    SDL_bool initial_configure_seen;
icculus@11848
    41
} SDL_zxdg_shell_surface;
icculus@11848
    42
icculus@11848
    43
typedef struct {
icculus@12033
    44
    struct xdg_surface *surface;
icculus@12033
    45
    union {
icculus@12033
    46
        struct xdg_toplevel *toplevel;
icculus@12033
    47
        struct xdg_popup *popup;
icculus@12033
    48
    } roleobj;
icculus@12033
    49
    SDL_bool initial_configure_seen;
icculus@12033
    50
} SDL_xdg_shell_surface;
icculus@12033
    51
icculus@12033
    52
typedef struct {
gabomdq@8062
    53
    SDL_Window *sdlwindow;
gabomdq@8062
    54
    SDL_VideoData *waylandData;
gabomdq@8062
    55
    struct wl_surface *surface;
icculus@11848
    56
    union {
icculus@12033
    57
        SDL_xdg_shell_surface xdg;
icculus@11848
    58
        SDL_zxdg_shell_surface zxdg;
icculus@11848
    59
        struct wl_shell_surface *wl;
icculus@11848
    60
    } shell_surface;
gabomdq@8062
    61
    struct wl_egl_window *egl_window;
gabomdq@8062
    62
    struct SDL_WaylandInput *keyboard_device;
gabomdq@8082
    63
    EGLSurface egl_surface;
slouken@10304
    64
    struct zwp_locked_pointer_v1 *locked_pointer;
icculus@12367
    65
    struct org_kde_kwin_server_decoration *kwin_server_decoration;
gabomdq@8062
    66
gabomdq@8082
    67
#ifdef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH
gabomdq@8082
    68
    struct qt_extended_surface *extended_surface;
dos@12400
    69
#endif /* SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */
dos@12400
    70
dos@12400
    71
    struct {
dos@12400
    72
        SDL_bool pending;
dos@12400
    73
        uint32_t serial;
dos@12400
    74
        int width, height;
dos@12400
    75
    } resize;
gabomdq@8062
    76
} SDL_WindowData;
gabomdq@8062
    77
gabomdq@8062
    78
extern void Wayland_ShowWindow(_THIS, SDL_Window *window);
gabomdq@8062
    79
extern void Wayland_SetWindowFullscreen(_THIS, SDL_Window * window,
gabomdq@8062
    80
                                        SDL_VideoDisplay * _display,
gabomdq@8062
    81
                                        SDL_bool fullscreen);
slouken@10492
    82
extern void Wayland_MaximizeWindow(_THIS, SDL_Window * window);
slouken@10492
    83
extern void Wayland_RestoreWindow(_THIS, SDL_Window * window);
icculus@12367
    84
extern void Wayland_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered);
gabomdq@8062
    85
extern int Wayland_CreateWindow(_THIS, SDL_Window *window);
gabomdq@8062
    86
extern void Wayland_SetWindowSize(_THIS, SDL_Window * window);
slouken@10492
    87
extern void Wayland_SetWindowTitle(_THIS, SDL_Window * window);
gabomdq@8062
    88
extern void Wayland_DestroyWindow(_THIS, SDL_Window *window);
gabomdq@8062
    89
gabomdq@8062
    90
extern SDL_bool
gabomdq@8062
    91
Wayland_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info);
icculus@9554
    92
extern int Wayland_SetWindowHitTest(SDL_Window *window, SDL_bool enabled);
gabomdq@8062
    93
slouken@11382
    94
#endif /* SDL_waylandwindow_h_ */
gabomdq@8062
    95
gabomdq@8062
    96
/* vi: set ts=4 sw=4 expandtab: */