@ -429,20 +429,35 @@ static void setIdleInhibitor(_GLFWwindow* window, GLFWbool enable)
}
}
static void setFullscreen ( _GLFWwindow * window , _GLFWmonitor * monitor ,
int refreshRate )
// Make the specified window and its video mode active on its monitor
//
static void acquireMonitor ( _GLFWwindow * window )
{
if ( window - > wl . xdg . toplevel )
{
xdg_toplevel_set_fullscreen (
window - > wl . xdg . toplevel ,
monitor - > wl . output ) ;
xdg_toplevel_set_fullscreen ( window - > wl . xdg . toplevel ,
window - > monitor - > wl . output ) ;
}
setIdleInhibitor ( window , GLFW_TRUE ) ;
if ( ! window - > wl . decorations . serverSide )
destroyDecorations ( window ) ;
}
// Remove the window and restore the original video mode
//
static void releaseMonitor ( _GLFWwindow * window )
{
if ( window - > wl . xdg . toplevel )
xdg_toplevel_unset_fullscreen ( window - > wl . xdg . toplevel ) ;
setIdleInhibitor ( window , GLFW_FALSE ) ;
if ( ! _glfw . wl . decorationManager )
createDecorations ( window ) ;
}
static void xdgToplevelHandleConfigure ( void * userData ,
struct xdg_toplevel * toplevel ,
int32_t width ,
@ -495,16 +510,13 @@ static void xdgToplevelHandleConfigure(void* userData,
_glfwInputWindowDamage ( window ) ;
}
if ( window - > wl . wasFullscreen & & window - > autoIconify )
if ( window - > wl . activated & & ! activated )
{
if ( ! activated | | ! fullscreen )
{
if ( window - > monitor & & window - > autoIconify )
_glfwIconifyWindowWayland ( window ) ;
window - > wl . wasFullscreen = GLFW_FALSE ;
}
}
if ( fullscreen & & activated )
window - > wl . wasFullscreen = GLFW_TRUE ;
window - > wl . activated = activated ;
}
static void xdgToplevelHandleClose ( void * userData ,
@ -1896,14 +1908,12 @@ void _glfwRestoreWindowWayland(_GLFWwindow* window)
{
if ( window - > wl . xdg . toplevel )
{
if ( window - > monitor )
xdg_toplevel_unset_fullscreen ( window - > wl . xdg . toplevel ) ;
if ( window - > wl . maximized )
xdg_toplevel_unset_maximized ( window - > wl . xdg . toplevel ) ;
// There is no way to unset minimized, or even to know if we are
// minimized, so there is nothing to do in this case.
}
_glfwInputWindowMonitor ( window , NULL ) ;
window - > wl . maximized = GLFW_FALSE ;
}
@ -1959,19 +1969,23 @@ void _glfwSetWindowMonitorWayland(_GLFWwindow* window,
int width , int height ,
int refreshRate )
{
if ( monitor )
{
setFullscreen ( window , monitor , refreshRate ) ;
}
else
if ( window - > monitor = = monitor )
{
if ( window - > wl . xdg . toplevel )
xdg_toplevel_unset_fullscreen ( window - > wl . xdg . toplevel ) ;
setIdleInhibitor ( window , GLFW_FALSE ) ;
if ( ! _glfw . wl . decorationManager )
createDecorations ( window ) ;
if ( ! monitor )
_glfwSetWindowSizeWayland ( window , width , height ) ;
return ;
}
if ( window - > monitor )
releaseMonitor ( window ) ;
_glfwInputWindowMonitor ( window , monitor ) ;
if ( window - > monitor )
acquireMonitor ( window ) ;
else
_glfwSetWindowSizeWayland ( window , width , height ) ;
}
GLFWbool _glfwWindowFocusedWayland ( _GLFWwindow * window )