mirror of
https://github.com/glfw/glfw.git
synced 2024-11-10 00:51:47 +00:00
parent
35682ec3fa
commit
e07f0c9b6b
@ -220,6 +220,7 @@ information on what to include when reporting a bug.
|
|||||||
- [Win32] Bugfix: `glfwCreateWindow` activated window even with `GLFW_FOCUSED`
|
- [Win32] Bugfix: `glfwCreateWindow` activated window even with `GLFW_FOCUSED`
|
||||||
hint set to false (#1179,#1180)
|
hint set to false (#1179,#1180)
|
||||||
- [X11] Added support for `org.freedesktop.ScreenSaver` (#854)
|
- [X11] Added support for `org.freedesktop.ScreenSaver` (#854)
|
||||||
|
- [X11] Added support for the MIT screensaver extension (#854)
|
||||||
- [X11] Moved to XI2 `XI_RawMotion` for disable cursor mode motion input (#125)
|
- [X11] Moved to XI2 `XI_RawMotion` for disable cursor mode motion input (#125)
|
||||||
- [X11] Replaced `_GLFW_HAS_XF86VM` compile-time option with dynamic loading
|
- [X11] Replaced `_GLFW_HAS_XF86VM` compile-time option with dynamic loading
|
||||||
- [X11] Bugfix: `glfwGetVideoMode` would segfault on Cygwin/X
|
- [X11] Bugfix: `glfwGetVideoMode` would segfault on Cygwin/X
|
||||||
|
@ -623,6 +623,23 @@ static GLFWbool initExtensions(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_glfw.x11.xss.handle = _glfw_dlopen("libXss.so.1");
|
||||||
|
if (_glfw.x11.xss.handle)
|
||||||
|
{
|
||||||
|
_glfw.x11.xss.QueryExtension = (PFN_XScreenSaverQueryExtension)
|
||||||
|
dlsym(_glfw.x11.xss.handle, "XScreenSaverQueryExtension");
|
||||||
|
_glfw.x11.xss.Suspend = (PFN_XScreenSaverSuspend)
|
||||||
|
dlsym(_glfw.x11.xss.handle, "XScreenSaverSuspend");
|
||||||
|
|
||||||
|
if (XScreenSaverQueryExtension(_glfw.x11.display,
|
||||||
|
&_glfw.x11.xss.eventBase,
|
||||||
|
&_glfw.x11.xss.errorBase))
|
||||||
|
{
|
||||||
|
_glfw.x11.xss.available = GLFW_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if Xkb is supported on this display
|
||||||
_glfw.x11.xkb.major = 1;
|
_glfw.x11.xkb.major = 1;
|
||||||
_glfw.x11.xkb.minor = 0;
|
_glfw.x11.xkb.minor = 0;
|
||||||
_glfw.x11.xkb.available =
|
_glfw.x11.xkb.available =
|
||||||
|
@ -126,6 +126,11 @@ typedef XRenderPictFormat* (* PFN_XRenderFindVisualFormat)(Display*,Visual const
|
|||||||
#define XRenderQueryVersion _glfw.x11.xrender.QueryVersion
|
#define XRenderQueryVersion _glfw.x11.xrender.QueryVersion
|
||||||
#define XRenderFindVisualFormat _glfw.x11.xrender.FindVisualFormat
|
#define XRenderFindVisualFormat _glfw.x11.xrender.FindVisualFormat
|
||||||
|
|
||||||
|
typedef Bool (* PFN_XScreenSaverQueryExtension)(Display*,int*,int*);
|
||||||
|
typedef void (* PFN_XScreenSaverSuspend)(Display*,Bool);
|
||||||
|
#define XScreenSaverQueryExtension _glfw.x11.xss.QueryExtension
|
||||||
|
#define XScreenSaverSuspend _glfw.x11.xss.Suspend
|
||||||
|
|
||||||
typedef void (*PFN_dbus_error_init)(DBusError*);
|
typedef void (*PFN_dbus_error_init)(DBusError*);
|
||||||
typedef dbus_bool_t (*PFN_dbus_error_is_set)(const DBusError*);
|
typedef dbus_bool_t (*PFN_dbus_error_is_set)(const DBusError*);
|
||||||
typedef DBusConnection* (*PFN_dbus_bus_get_private)(DBusBusType,DBusError*);
|
typedef DBusConnection* (*PFN_dbus_bus_get_private)(DBusBusType,DBusError*);
|
||||||
@ -263,6 +268,8 @@ typedef struct _GLFWlibraryX11
|
|||||||
double restoreCursorPosX, restoreCursorPosY;
|
double restoreCursorPosX, restoreCursorPosY;
|
||||||
// The window whose disabled cursor mode is active
|
// The window whose disabled cursor mode is active
|
||||||
_GLFWwindow* disabledCursorWindow;
|
_GLFWwindow* disabledCursorWindow;
|
||||||
|
// The number of full screen windows active on their monitors
|
||||||
|
int acquiredMonitorCount;
|
||||||
|
|
||||||
// Window manager atoms
|
// Window manager atoms
|
||||||
Atom WM_PROTOCOLS;
|
Atom WM_PROTOCOLS;
|
||||||
@ -355,7 +362,6 @@ typedef struct _GLFWlibraryX11
|
|||||||
} xkb;
|
} xkb;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
int count;
|
|
||||||
int timeout;
|
int timeout;
|
||||||
int interval;
|
int interval;
|
||||||
int blanking;
|
int blanking;
|
||||||
@ -385,6 +391,15 @@ typedef struct _GLFWlibraryX11
|
|||||||
PFN_XineramaQueryScreens QueryScreens;
|
PFN_XineramaQueryScreens QueryScreens;
|
||||||
} xinerama;
|
} xinerama;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
GLFWbool available;
|
||||||
|
void* handle;
|
||||||
|
int eventBase;
|
||||||
|
int errorBase;
|
||||||
|
PFN_XScreenSaverQueryExtension QueryExtension;
|
||||||
|
PFN_XScreenSaverSuspend Suspend;
|
||||||
|
} xss;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
void* handle;
|
void* handle;
|
||||||
PFN_XGetXCBConnection GetXCBConnection;
|
PFN_XGetXCBConnection GetXCBConnection;
|
||||||
|
@ -1078,18 +1078,20 @@ static const char* getSelectionString(Atom selection)
|
|||||||
//
|
//
|
||||||
static void acquireMonitor(_GLFWwindow* window)
|
static void acquireMonitor(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
if (_glfw.x11.saver.count == 0)
|
if (_glfw.x11.acquiredMonitorCount == 0)
|
||||||
|
{
|
||||||
|
if (_glfw.x11.xss.available)
|
||||||
|
XScreenSaverSuspend(_glfw.x11.display, True);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
// Remember old screen saver settings
|
|
||||||
XGetScreenSaver(_glfw.x11.display,
|
XGetScreenSaver(_glfw.x11.display,
|
||||||
&_glfw.x11.saver.timeout,
|
&_glfw.x11.saver.timeout,
|
||||||
&_glfw.x11.saver.interval,
|
&_glfw.x11.saver.interval,
|
||||||
&_glfw.x11.saver.blanking,
|
&_glfw.x11.saver.blanking,
|
||||||
&_glfw.x11.saver.exposure);
|
&_glfw.x11.saver.exposure);
|
||||||
|
|
||||||
// Disable screen saver
|
|
||||||
XSetScreenSaver(_glfw.x11.display, 0, 0, DontPreferBlanking,
|
XSetScreenSaver(_glfw.x11.display, 0, 0, DontPreferBlanking,
|
||||||
DefaultExposures);
|
DefaultExposures);
|
||||||
|
}
|
||||||
|
|
||||||
if (_glfw.x11.dbus.session)
|
if (_glfw.x11.dbus.session)
|
||||||
{
|
{
|
||||||
@ -1124,7 +1126,7 @@ static void acquireMonitor(_GLFWwindow* window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!window->monitor->window)
|
if (!window->monitor->window)
|
||||||
_glfw.x11.saver.count++;
|
_glfw.x11.acquiredMonitorCount++;
|
||||||
|
|
||||||
_glfwSetVideoModeX11(window->monitor, &window->videoMode);
|
_glfwSetVideoModeX11(window->monitor, &window->videoMode);
|
||||||
|
|
||||||
@ -1154,16 +1156,19 @@ static void releaseMonitor(_GLFWwindow* window)
|
|||||||
_glfwInputMonitorWindow(window->monitor, NULL);
|
_glfwInputMonitorWindow(window->monitor, NULL);
|
||||||
_glfwRestoreVideoModeX11(window->monitor);
|
_glfwRestoreVideoModeX11(window->monitor);
|
||||||
|
|
||||||
_glfw.x11.saver.count--;
|
_glfw.x11.acquiredMonitorCount--;
|
||||||
|
if (_glfw.x11.acquiredMonitorCount == 0)
|
||||||
if (_glfw.x11.saver.count == 0)
|
{
|
||||||
|
if (_glfw.x11.xss.available)
|
||||||
|
XScreenSaverSuspend(_glfw.x11.display, False);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
// Restore old screen saver settings
|
|
||||||
XSetScreenSaver(_glfw.x11.display,
|
XSetScreenSaver(_glfw.x11.display,
|
||||||
_glfw.x11.saver.timeout,
|
_glfw.x11.saver.timeout,
|
||||||
_glfw.x11.saver.interval,
|
_glfw.x11.saver.interval,
|
||||||
_glfw.x11.saver.blanking,
|
_glfw.x11.saver.blanking,
|
||||||
_glfw.x11.saver.exposure);
|
_glfw.x11.saver.exposure);
|
||||||
|
}
|
||||||
|
|
||||||
if (_glfw.x11.dbus.session)
|
if (_glfw.x11.dbus.session)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user