Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
pirvi-public
glfw
Commits
d10463ac
Commit
d10463ac
authored
Feb 06, 2018
by
Camilla Löwy
Browse files
Win32: Fix extra resize event during mode switch
The switch to full screen is now done with a single call to SetWindowPos.
parent
cfb5cb88
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/win32_window.c
View file @
d10463ac
...
...
@@ -471,27 +471,28 @@ static int translateKey(WPARAM wParam, LPARAM lParam)
return
_glfw
.
win32
.
keycodes
[
HIWORD
(
lParam
)
&
0x1FF
];
}
static
void
fitToMonitor
(
_GLFWwindow
*
window
)
{
MONITORINFO
mi
=
{
sizeof
(
mi
)
};
GetMonitorInfo
(
window
->
monitor
->
win32
.
handle
,
&
mi
);
SetWindowPos
(
window
->
win32
.
handle
,
HWND_TOPMOST
,
mi
.
rcMonitor
.
left
,
mi
.
rcMonitor
.
top
,
mi
.
rcMonitor
.
right
-
mi
.
rcMonitor
.
left
,
mi
.
rcMonitor
.
bottom
-
mi
.
rcMonitor
.
top
,
SWP_NOZORDER
|
SWP_NOACTIVATE
|
SWP_NOCOPYBITS
);
}
// Make the specified window and its video mode active on its monitor
//
static
void
acquireMonitor
(
_GLFWwindow
*
window
)
{
GLFWvidmode
mode
;
int
xpos
,
ypos
;
if
(
!
_glfw
.
win32
.
acquiredMonitorCount
)
SetThreadExecutionState
(
ES_CONTINUOUS
|
ES_DISPLAY_REQUIRED
);
if
(
!
window
->
monitor
->
window
)
_glfw
.
win32
.
acquiredMonitorCount
++
;
_glfwSetVideoModeWin32
(
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_NOACTIVATE
|
SWP_NOCOPYBITS
);
_glfwInputMonitorWindow
(
window
->
monitor
,
window
);
}
...
...
@@ -899,7 +900,10 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
if
(
iconified
)
releaseMonitor
(
window
);
else
{
acquireMonitor
(
window
);
fitToMonitor
(
window
);
}
}
window
->
win32
.
iconified
=
iconified
;
...
...
@@ -1239,6 +1243,7 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window,
_glfwPlatformShowWindow
(
window
);
_glfwPlatformFocusWindow
(
window
);
acquireMonitor
(
window
);
fitToMonitor
(
window
);
if
(
wndconfig
->
centerCursor
)
centerCursor
(
window
);
...
...
@@ -1357,7 +1362,10 @@ void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height)
if
(
window
->
monitor
)
{
if
(
window
->
monitor
->
window
==
window
)
{
acquireMonitor
(
window
);
fitToMonitor
(
window
);
}
}
else
{
...
...
@@ -1487,7 +1495,10 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window,
if
(
monitor
)
{
if
(
monitor
->
window
==
window
)
{
acquireMonitor
(
window
);
fitToMonitor
(
window
);
}
}
else
{
...
...
@@ -1510,20 +1521,27 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window,
if
(
monitor
)
{
MONITORINFO
mi
=
{
sizeof
(
mi
)
};
UINT
flags
=
SWP_SHOWWINDOW
|
SWP_NOACTIVATE
|
SWP_NOCOPYBITS
;
if
(
window
->
decorated
)
{
DWORD
style
=
GetWindowLongW
(
window
->
win32
.
handle
,
GWL_STYLE
);
UINT
flags
=
SWP_FRAMECHANGED
|
SWP_SHOWWINDOW
|
SWP_NOACTIVATE
|
SWP_NOCOPYBITS
|
SWP_NOZORDER
|
SWP_NOMOVE
|
SWP_NOSIZE
;
style
&=
~
WS_OVERLAPPEDWINDOW
;
style
|=
getWindowStyle
(
window
);
SetWindowLongW
(
window
->
win32
.
handle
,
GWL_STYLE
,
style
);
SetWindowPos
(
window
->
win32
.
handle
,
HWND_TOPMOST
,
0
,
0
,
0
,
0
,
flags
)
;
flags
|=
SWP_FRAMECHANGED
;
}
acquireMonitor
(
window
);
GetMonitorInfo
(
window
->
monitor
->
win32
.
handle
,
&
mi
);
SetWindowPos
(
window
->
win32
.
handle
,
HWND_TOPMOST
,
mi
.
rcMonitor
.
left
,
mi
.
rcMonitor
.
top
,
mi
.
rcMonitor
.
right
-
mi
.
rcMonitor
.
left
,
mi
.
rcMonitor
.
bottom
-
mi
.
rcMonitor
.
top
,
flags
);
}
else
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment