Merge pull request #4459 from stenzek/nogui-resize-notify

DolphinNoGUI: Receive resize events and notify backend when this occurs
This commit is contained in:
Stenzek 2016-11-28 22:04:21 +10:00 committed by GitHub
commit 49e807b71f

View File

@ -31,6 +31,7 @@
#include "UICommon/UICommon.h" #include "UICommon/UICommon.h"
#include "VideoCommon/RenderBase.h"
#include "VideoCommon/VideoBackendBase.h" #include "VideoCommon/VideoBackendBase.h"
static bool rendererHasFocus = true; static bool rendererHasFocus = true;
@ -188,7 +189,7 @@ class PlatformX11 : public Platform
SConfig::GetInstance().iRenderWindowYPos, SConfig::GetInstance().iRenderWindowYPos,
SConfig::GetInstance().iRenderWindowWidth, SConfig::GetInstance().iRenderWindowWidth,
SConfig::GetInstance().iRenderWindowHeight, 0, 0, BlackPixel(dpy, 0)); SConfig::GetInstance().iRenderWindowHeight, 0, 0, BlackPixel(dpy, 0));
XSelectInput(dpy, win, KeyPressMask | FocusChangeMask); XSelectInput(dpy, win, StructureNotifyMask | KeyPressMask | FocusChangeMask);
Atom wmProtocols[1]; Atom wmProtocols[1];
wmProtocols[0] = XInternAtom(dpy, "WM_DELETE_WINDOW", True); wmProtocols[0] = XInternAtom(dpy, "WM_DELETE_WINDOW", True);
XSetWMProtocols(dpy, win, wmProtocols, 1); XSetWMProtocols(dpy, win, wmProtocols, 1);
@ -220,6 +221,8 @@ class PlatformX11 : public Platform
void MainLoop() override void MainLoop() override
{ {
bool fullscreen = SConfig::GetInstance().bFullscreen; bool fullscreen = SConfig::GetInstance().bFullscreen;
int last_window_width = SConfig::GetInstance().iRenderWindowWidth;
int last_window_height = SConfig::GetInstance().iRenderWindowHeight;
if (fullscreen) if (fullscreen)
{ {
@ -313,6 +316,22 @@ class PlatformX11 : public Platform
if ((unsigned long)event.xclient.data.l[0] == XInternAtom(dpy, "WM_DELETE_WINDOW", False)) if ((unsigned long)event.xclient.data.l[0] == XInternAtom(dpy, "WM_DELETE_WINDOW", False))
s_shutdown_requested.Set(); s_shutdown_requested.Set();
break; break;
case ConfigureNotify:
{
if (last_window_width != event.xconfigure.width ||
last_window_height != event.xconfigure.height)
{
last_window_width = event.xconfigure.width;
last_window_height = event.xconfigure.height;
// We call Renderer::ChangeSurface here to indicate the size has changed,
// but pass the same window handle. This is needed for the Vulkan backend,
// otherwise it cannot tell that the window has been resized on some drivers.
if (g_renderer)
g_renderer->ChangeSurface(s_window_handle);
}
}
break;
} }
} }
if (!fullscreen) if (!fullscreen)