src/video/wayland/SDL_waylandwindow.h
author Sam Lantinga
Fri, 07 Oct 2016 18:11:03 -0700
changeset 10492 786e10ab72d8
parent 10304 ee83e0b4a36f
child 10737 3406a0f8b041
permissions -rw-r--r--
Fixed bug 3063 - Wayland: SDL resizes EGL surface to 0x0.

x414e54

Wayland will sometimes send empty resize events (0 width and 0 height) to the client. I have not worked out the exact conditions a client would receive these but I can assume it might be if the window is offscreen or not mapped yet.

This causes issues with some SDL clients as they receive the 0x0 event and unexpected resize event or might not request to resize back to the correct size.

As per the wl_shell Wayland spec configure events are only a suggestion and the client is free to ignore or pick a different size (this is how min/max and fixed aspect ratio is supped to be implemented).

A patch is attached but is just the first iteration and I will fix any issues such as checking for FULLSCREEN/MAXIMIZED or RESIZABLE flags unless someone else fixes this first.

I have update to take into account non resizable and fullscreen windows. Also adding in maximize/restore and title functions for Wayland.
gabomdq@8062
     1
/*
gabomdq@8062
     2
  Simple DirectMedia Layer
slouken@9998
     3
  Copyright (C) 1997-2016 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
gabomdq@8062
    24
#ifndef _SDL_waylandwindow_h
gabomdq@8062
    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 {
gabomdq@8062
    35
    SDL_Window *sdlwindow;
gabomdq@8062
    36
    SDL_VideoData *waylandData;
gabomdq@8062
    37
    struct wl_surface *surface;
gabomdq@8062
    38
    struct wl_shell_surface *shell_surface;
gabomdq@8062
    39
    struct wl_egl_window *egl_window;
gabomdq@8062
    40
    struct SDL_WaylandInput *keyboard_device;
gabomdq@8082
    41
    EGLSurface egl_surface;
slouken@10304
    42
    struct zwp_locked_pointer_v1 *locked_pointer;
gabomdq@8062
    43
gabomdq@8082
    44
#ifdef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH
gabomdq@8082
    45
    struct qt_extended_surface *extended_surface;
gabomdq@8082
    46
#endif /* SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */    
gabomdq@8062
    47
} SDL_WindowData;
gabomdq@8062
    48
gabomdq@8062
    49
extern void Wayland_ShowWindow(_THIS, SDL_Window *window);
gabomdq@8062
    50
extern void Wayland_SetWindowFullscreen(_THIS, SDL_Window * window,
gabomdq@8062
    51
                                        SDL_VideoDisplay * _display,
gabomdq@8062
    52
                                        SDL_bool fullscreen);
slouken@10492
    53
extern void Wayland_MaximizeWindow(_THIS, SDL_Window * window);
slouken@10492
    54
extern void Wayland_RestoreWindow(_THIS, SDL_Window * window);
gabomdq@8062
    55
extern int Wayland_CreateWindow(_THIS, SDL_Window *window);
gabomdq@8062
    56
extern void Wayland_SetWindowSize(_THIS, SDL_Window * window);
slouken@10492
    57
extern void Wayland_SetWindowTitle(_THIS, SDL_Window * window);
gabomdq@8062
    58
extern void Wayland_DestroyWindow(_THIS, SDL_Window *window);
gabomdq@8062
    59
gabomdq@8062
    60
extern SDL_bool
gabomdq@8062
    61
Wayland_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info);
icculus@9554
    62
extern int Wayland_SetWindowHitTest(SDL_Window *window, SDL_bool enabled);
gabomdq@8062
    63
gabomdq@8062
    64
#endif /* _SDL_waylandwindow_h */
gabomdq@8062
    65
gabomdq@8062
    66
/* vi: set ts=4 sw=4 expandtab: */