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.
     1 /*
     2   Simple DirectMedia Layer
     3   Copyright (C) 1997-2016 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 
    22 #include "../../SDL_internal.h"
    23 
    24 #ifndef _SDL_waylandwindow_h
    25 #define _SDL_waylandwindow_h
    26 
    27 #include "../SDL_sysvideo.h"
    28 #include "SDL_syswm.h"
    29 
    30 #include "SDL_waylandvideo.h"
    31 
    32 struct SDL_WaylandInput;
    33 
    34 typedef struct {
    35     SDL_Window *sdlwindow;
    36     SDL_VideoData *waylandData;
    37     struct wl_surface *surface;
    38     struct wl_shell_surface *shell_surface;
    39     struct wl_egl_window *egl_window;
    40     struct SDL_WaylandInput *keyboard_device;
    41     EGLSurface egl_surface;
    42     struct zwp_locked_pointer_v1 *locked_pointer;
    43 
    44 #ifdef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH
    45     struct qt_extended_surface *extended_surface;
    46 #endif /* SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */    
    47 } SDL_WindowData;
    48 
    49 extern void Wayland_ShowWindow(_THIS, SDL_Window *window);
    50 extern void Wayland_SetWindowFullscreen(_THIS, SDL_Window * window,
    51                                         SDL_VideoDisplay * _display,
    52                                         SDL_bool fullscreen);
    53 extern void Wayland_MaximizeWindow(_THIS, SDL_Window * window);
    54 extern void Wayland_RestoreWindow(_THIS, SDL_Window * window);
    55 extern int Wayland_CreateWindow(_THIS, SDL_Window *window);
    56 extern void Wayland_SetWindowSize(_THIS, SDL_Window * window);
    57 extern void Wayland_SetWindowTitle(_THIS, SDL_Window * window);
    58 extern void Wayland_DestroyWindow(_THIS, SDL_Window *window);
    59 
    60 extern SDL_bool
    61 Wayland_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info);
    62 extern int Wayland_SetWindowHitTest(SDL_Window *window, SDL_bool enabled);
    63 
    64 #endif /* _SDL_waylandwindow_h */
    65 
    66 /* vi: set ts=4 sw=4 expandtab: */