|
@@ -390,6 +390,32 @@ static int translateKey(WPARAM wParam, LPARAM lParam)
|
|
|
return GLFW_KEY_UNKNOWN;
|
|
|
}
|
|
|
|
|
|
+// Enter fullscreen mode
|
|
|
+//
|
|
|
+static GLboolean enterFullscreenMode(_GLFWwindow* window)
|
|
|
+{
|
|
|
+ GLFWvidmode mode;
|
|
|
+ GLboolean status;
|
|
|
+ int xpos, ypos;
|
|
|
+
|
|
|
+ status = _glfwSetVideoMode(window->monitor, &window->videoMode);
|
|
|
+
|
|
|
+ _glfwPlatformGetVideoMode(window->monitor, &mode);
|
|
|
+ _glfwPlatformGetMonitorPos(window->monitor, &xpos, &ypos);
|
|
|
+
|
|
|
+ SetWindowPos(window->win32.handle, HWND_TOPMOST,
|
|
|
+ xpos, ypos, mode.width, mode.height, SWP_NOCOPYBITS);
|
|
|
+
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|
|
|
+// Leave fullscreen mode
|
|
|
+//
|
|
|
+static void leaveFullscreenMode(_GLFWwindow* window)
|
|
|
+{
|
|
|
+ _glfwRestoreVideoMode(window->monitor);
|
|
|
+}
|
|
|
+
|
|
|
// Window callback function (handles window events)
|
|
|
//
|
|
|
static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
|
|
@@ -448,7 +474,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
|
|
|
_glfwPlatformIconifyWindow(window);
|
|
|
}
|
|
|
|
|
|
- _glfwRestoreVideoMode(window->monitor);
|
|
|
+ leaveFullscreenMode(window);
|
|
|
}
|
|
|
}
|
|
|
else if (focused && _glfw.focusedWindow != window)
|
|
@@ -459,7 +485,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
|
|
|
_glfwPlatformApplyCursorMode(window);
|
|
|
|
|
|
if (window->monitor && window->autoIconify)
|
|
|
- _glfwSetVideoMode(window->monitor, &window->videoMode);
|
|
|
+ enterFullscreenMode(window);
|
|
|
}
|
|
|
|
|
|
_glfwInputWindowFocus(window, focused);
|
|
@@ -858,6 +884,9 @@ static int createWindow(_GLFWwindow* window,
|
|
|
{
|
|
|
window->win32.dwStyle |= WS_POPUP;
|
|
|
|
|
|
+ // NOTE: This window placement is temporary and approximate, as the
|
|
|
+ // correct position and size cannot be known until the monitor
|
|
|
+ // video mode has been set
|
|
|
_glfwPlatformGetMonitorPos(wndconfig->monitor, &xpos, &ypos);
|
|
|
fullWidth = wndconfig->width;
|
|
|
fullHeight = wndconfig->height;
|
|
@@ -1050,13 +1079,9 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window,
|
|
|
|
|
|
if (window->monitor)
|
|
|
{
|
|
|
- if (!_glfwSetVideoMode(window->monitor, &window->videoMode))
|
|
|
- return GL_FALSE;
|
|
|
-
|
|
|
- // Place the window above all topmost windows
|
|
|
_glfwPlatformShowWindow(window);
|
|
|
- SetWindowPos(window->win32.handle, HWND_TOPMOST, 0,0,0,0,
|
|
|
- SWP_NOMOVE | SWP_NOSIZE);
|
|
|
+ if (!enterFullscreenMode(window))
|
|
|
+ return GL_FALSE;
|
|
|
}
|
|
|
|
|
|
return GL_TRUE;
|
|
@@ -1064,10 +1089,10 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window,
|
|
|
|
|
|
void _glfwPlatformDestroyWindow(_GLFWwindow* window)
|
|
|
{
|
|
|
- destroyWindow(window);
|
|
|
-
|
|
|
if (window->monitor)
|
|
|
- _glfwRestoreVideoMode(window->monitor);
|
|
|
+ leaveFullscreenMode(window);
|
|
|
+
|
|
|
+ destroyWindow(window);
|
|
|
}
|
|
|
|
|
|
void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title)
|
|
@@ -1118,15 +1143,7 @@ void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height)
|
|
|
void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height)
|
|
|
{
|
|
|
if (window->monitor)
|
|
|
- {
|
|
|
- GLFWvidmode mode;
|
|
|
- _glfwSetVideoMode(window->monitor, &window->videoMode);
|
|
|
- _glfwPlatformGetVideoMode(window->monitor, &mode);
|
|
|
-
|
|
|
- SetWindowPos(window->win32.handle, HWND_TOP,
|
|
|
- 0, 0, mode.width, mode.height,
|
|
|
- SWP_NOMOVE);
|
|
|
- }
|
|
|
+ enterFullscreenMode(window);
|
|
|
else
|
|
|
{
|
|
|
int fullWidth, fullHeight;
|