@ -344,25 +344,96 @@ void _glfwPlatformGetMonitorContentScale(_GLFWmonitor* monitor,
void _glfwPlatformGetMonitorWorkarea ( _GLFWmonitor * monitor , int * xpos , int * ypos , int * width , int * height )
{
int areaX = 0 , areaY = 0 , areaWidth = 0 , areaHeight = 0 ;
if ( _glfw . x11 . randr . available & & ! _glfw . x11 . randr . monitorBroken )
{
XRRScreenResources * sr ;
XRRCrtcInfo * ci ;
sr = XRRGetScreenResourcesCurrent ( _glfw . x11 . display , _glfw . x11 . root ) ;
ci = XRRGetCrtcInfo ( _glfw . x11 . display , sr , monitor - > x11 . crtc ) ;
areaX = ci - > x ;
areaY = ci - > y ;
const XRRModeInfo * mi = getModeInfo ( sr , ci - > mode ) ;
if ( ci - > rotation = = RR_Rotate_90 | | ci - > rotation = = RR_Rotate_270 )
{
areaWidth = mi - > height ;
areaHeight = mi - > width ;
}
else
{
areaWidth = mi - > width ;
areaHeight = mi - > height ;
}
XRRFreeCrtcInfo ( ci ) ;
XRRFreeScreenResources ( sr ) ;
}
else
{
areaWidth = DisplayWidth ( _glfw . x11 . display , _glfw . x11 . screen ) ;
areaHeight = DisplayHeight ( _glfw . x11 . display , _glfw . x11 . screen ) ;
}
if ( _glfw . x11 . NET_WORKAREA & & _glfw . x11 . NET_CURRENT_DESKTOP )
{
Atom * extents = NULL ;
Atom * desktop = NULL ;
const unsigned long extentCount =
_glfwGetWindowPropertyX11 ( _glfw . x11 . root ,
_glfw . x11 . NET_WORKAREA ,
XA_CARDINAL ,
( unsigned char * * ) & extents ) ;
if ( _glfwGetWindowPropertyX11 ( _glfw . x11 . root ,
_glfw . x11 . NET_CURRENT_DESKTOP ,
XA_CARDINAL ,
( unsigned char * * ) & desktop ) > 0 )
{
if ( extentCount > = 4 & & * desktop < extentCount / 4 )
{
const int globalX = extents [ * desktop * 4 + 0 ] ;
const int globalY = extents [ * desktop * 4 + 1 ] ;
const int globalWidth = extents [ * desktop * 4 + 2 ] ;
const int globalHeight = extents [ * desktop * 4 + 3 ] ;
_glfwGetWindowPropertyX11 ( _glfw . x11 . root ,
_glfw . x11 . NET_WORKAREA , XA_CARDINAL ,
( unsigned char * * ) & extents ) ;
if ( areaX < globalX )
{
areaWidth - = globalX - areaX ;
areaX = globalX ;
}
if ( xpos )
* xpos = extents [ 0 ] ;
if ( ypos )
* ypos = extents [ 1 ] ;
if ( width )
* width = extents [ 2 ] ;
if ( height )
* height = extents [ 3 ] ;
if ( areaY < globalY )
{
areaHeight - = globalY - areaY ;
areaY = globalY ;
}
XFree ( extents ) ;
if ( areaX + areaWidth > globalX + globalWidth )
areaWidth = globalX - areaX + globalWidth ;
if ( areaY + areaHeight > globalY + globalHeight )
areaHeight = globalY - areaY + globalHeight ;
}
}
if ( extents )
XFree ( extents ) ;
if ( desktop )
XFree ( desktop ) ;
}
if ( xpos )
* xpos = areaX ;
if ( ypos )
* ypos = areaY ;
if ( width )
* width = areaWidth ;
if ( height )
* height = areaHeight ;
}
GLFWvidmode * _glfwPlatformGetVideoModes ( _GLFWmonitor * monitor , int * count )