Initial Present infrastructure.
This commit is contained in:
parent
9c7cf39e31
commit
1e625f8bb4
11
configure.ac
11
configure.ac
|
@ -294,6 +294,16 @@ if test "x$enable_composite" = "xyes"; then
|
||||||
fi
|
fi
|
||||||
AM_CONDITIONAL(ENABLE_COMPOSITE, test "x$enable_composite" = "xyes")
|
AM_CONDITIONAL(ENABLE_COMPOSITE, test "x$enable_composite" = "xyes")
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(xpresent,
|
||||||
|
AC_HELP_STRING([--enable-xpresent], [compile with Present support (experimental) @<:@default=no@:>@]),,
|
||||||
|
enable_xpresent=no)
|
||||||
|
if test "x$enable_xpresent" = "xyes"; then
|
||||||
|
PKG_CHECK_MODULES(XPRESENT, xpresent,
|
||||||
|
AC_DEFINE(USE_XPRESENT, 1, [Present support]),
|
||||||
|
enable_xpresent=no
|
||||||
|
AC_MSG_WARN([Present support was requested but not found]) )
|
||||||
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE(zoom,
|
AC_ARG_ENABLE(zoom,
|
||||||
AC_HELP_STRING([--enable-zoom], [compile with zoom support @<:@default=yes@:>@]),,
|
AC_HELP_STRING([--enable-zoom], [compile with zoom support @<:@default=yes@:>@]),,
|
||||||
enable_zoom=yes)
|
enable_zoom=yes)
|
||||||
|
@ -514,6 +524,7 @@ echo " GLX .......................... $enable_glx"
|
||||||
echo " ScreenSaver .................. $enable_xscrnsaver"
|
echo " ScreenSaver .................. $enable_xscrnsaver"
|
||||||
echo " D-Bus ........................ $enable_dbus"
|
echo " D-Bus ........................ $enable_dbus"
|
||||||
echo " XI2 .......................... $enable_xi2"
|
echo " XI2 .......................... $enable_xi2"
|
||||||
|
echo " Present....................... $enable_xpresent"
|
||||||
echo " Use container window ......... $enable_container"
|
echo " Use container window ......... $enable_container"
|
||||||
echo
|
echo
|
||||||
echo "Installation path .............. $prefix"
|
echo "Installation path .............. $prefix"
|
||||||
|
|
1
src/E.h
1
src/E.h
|
@ -126,6 +126,7 @@
|
||||||
#define XEXT_RENDER 8
|
#define XEXT_RENDER 8
|
||||||
#define XEXT_GLX 9
|
#define XEXT_GLX 9
|
||||||
#define XEXT_XI 10
|
#define XEXT_XI 10
|
||||||
|
#define XEXT_PRESENT 11
|
||||||
|
|
||||||
#define XEXT_CM_ALL 16
|
#define XEXT_CM_ALL 16
|
||||||
|
|
||||||
|
|
|
@ -135,6 +135,7 @@ e16_CPPFLAGS = \
|
||||||
$(DBUS_CFLAGS) \
|
$(DBUS_CFLAGS) \
|
||||||
$(XI_CFLAGS) \
|
$(XI_CFLAGS) \
|
||||||
$(XRANDR_CFLAGS) \
|
$(XRANDR_CFLAGS) \
|
||||||
|
$(XPRESENT_CFLAGS) \
|
||||||
$(X_CFLAGS)
|
$(X_CFLAGS)
|
||||||
|
|
||||||
LDADD = \
|
LDADD = \
|
||||||
|
@ -145,6 +146,7 @@ LDADD = \
|
||||||
$(GLX_LIBS) \
|
$(GLX_LIBS) \
|
||||||
$(XI_LIBS) \
|
$(XI_LIBS) \
|
||||||
$(XRANDR_LIBS) \
|
$(XRANDR_LIBS) \
|
||||||
|
$(XPRESENT_LIBS) \
|
||||||
$(X_LIBS) \
|
$(X_LIBS) \
|
||||||
$(SM_LIBS) \
|
$(SM_LIBS) \
|
||||||
$(XINERAMA_LIBS) \
|
$(XINERAMA_LIBS) \
|
||||||
|
|
|
@ -57,6 +57,7 @@
|
||||||
#define EDBUG_TYPE_XI2 153
|
#define EDBUG_TYPE_XI2 153
|
||||||
#define EDBUG_TYPE_ZOOM 154
|
#define EDBUG_TYPE_ZOOM 154
|
||||||
#define EDBUG_TYPE_ANIM 155
|
#define EDBUG_TYPE_ANIM 155
|
||||||
|
#define EDBUG_TYPE_PRESENT 156
|
||||||
|
|
||||||
#define EDBUG_TYPE_COMPMGR 161
|
#define EDBUG_TYPE_COMPMGR 161
|
||||||
#define EDBUG_TYPE_COMPMGR2 162
|
#define EDBUG_TYPE_COMPMGR2 162
|
||||||
|
|
51
src/events.c
51
src/events.c
|
@ -50,13 +50,16 @@
|
||||||
#include <X11/extensions/Xfixes.h>
|
#include <X11/extensions/Xfixes.h>
|
||||||
#include <X11/extensions/Xrender.h>
|
#include <X11/extensions/Xrender.h>
|
||||||
#endif
|
#endif
|
||||||
|
#if USE_XPRESENT
|
||||||
|
#include <X11/extensions/Xpresent.h>
|
||||||
|
#endif
|
||||||
#if USE_GLX
|
#if USE_GLX
|
||||||
#include <GL/glx.h>
|
#include <GL/glx.h>
|
||||||
#endif
|
#endif
|
||||||
#if USE_XI2
|
#if USE_XI2
|
||||||
#include <X11/extensions/XInput2.h>
|
#include <X11/extensions/XInput2.h>
|
||||||
#endif
|
#endif
|
||||||
#define USE_GENERIC defined(USE_XI2)
|
#define USE_GENERIC defined(USE_XI2) || defined(USE_XPRESENT)
|
||||||
|
|
||||||
#if ENABLE_DEBUG_EVENTS
|
#if ENABLE_DEBUG_EVENTS
|
||||||
static const char *EventName(unsigned int type);
|
static const char *EventName(unsigned int type);
|
||||||
|
@ -78,7 +81,7 @@ typedef struct {
|
||||||
void (*init) (int avaliable);
|
void (*init) (int avaliable);
|
||||||
} EServerExt;
|
} EServerExt;
|
||||||
|
|
||||||
static EServerExtData ExtData[11];
|
static EServerExtData ExtData[12];
|
||||||
|
|
||||||
#define event_base_shape ExtData[XEXT_SHAPE].event_base
|
#define event_base_shape ExtData[XEXT_SHAPE].event_base
|
||||||
#define event_base_randr ExtData[XEXT_RANDR].event_base
|
#define event_base_randr ExtData[XEXT_RANDR].event_base
|
||||||
|
@ -249,6 +252,21 @@ ExtInitInput(int available)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if USE_XPRESENT
|
||||||
|
static void
|
||||||
|
ExtInitPresent(int available)
|
||||||
|
{
|
||||||
|
if (!available)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (EDebug(EDBUG_TYPE_VERBOSE))
|
||||||
|
{
|
||||||
|
Eprintf(" Capabilities: %#x\n",
|
||||||
|
XPresentQueryCapabilities(disp, WinGetXwin(VROOT)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static const EServerExt Extensions[] = {
|
static const EServerExt Extensions[] = {
|
||||||
{"SHAPE", XEXT_SHAPE, XShapeQueryVersion, ExtInitShape},
|
{"SHAPE", XEXT_SHAPE, XShapeQueryVersion, ExtInitShape},
|
||||||
#if USE_XSYNC
|
#if USE_XSYNC
|
||||||
|
@ -275,6 +293,9 @@ static const EServerExt Extensions[] = {
|
||||||
#if USE_XI2
|
#if USE_XI2
|
||||||
{"XInputExtension", XEXT_XI, EInputQueryVersion, ExtInitInput},
|
{"XInputExtension", XEXT_XI, EInputQueryVersion, ExtInitInput},
|
||||||
#endif
|
#endif
|
||||||
|
#if USE_XPRESENT
|
||||||
|
{"Present", XEXT_PRESENT, XPresentQueryVersion, ExtInitPresent},
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -888,6 +909,25 @@ _EventFetchXI2(XEvent * ev)
|
||||||
}
|
}
|
||||||
#endif /* USE_XI2 */
|
#endif /* USE_XI2 */
|
||||||
|
|
||||||
|
#if USE_XPRESENT
|
||||||
|
typedef union {
|
||||||
|
XPresentEvent xpe;
|
||||||
|
XPresentConfigureNotifyEvent conf;
|
||||||
|
XPresentCompleteNotifyEvent cmpl;
|
||||||
|
XPresentIdleNotifyEvent idle;
|
||||||
|
} xpe_t;
|
||||||
|
|
||||||
|
static void
|
||||||
|
_EventFetchPresent(XEvent * ev)
|
||||||
|
{
|
||||||
|
xpe_t *xpe = (xpe_t *) ev->xcookie.data;
|
||||||
|
|
||||||
|
if (EDebug(EDBUG_TYPE_PRESENT))
|
||||||
|
Eprintf("%s: %#lx: type=%d\n",
|
||||||
|
__func__, xpe->idle.window, xpe->xpe.evtype);
|
||||||
|
}
|
||||||
|
#endif /* USE_XPRESENT */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_EventFetchGeneric(XEvent * ev)
|
_EventFetchGeneric(XEvent * ev)
|
||||||
{
|
{
|
||||||
|
@ -904,6 +944,13 @@ _EventFetchGeneric(XEvent * ev)
|
||||||
_EventFetchXI2(ev);
|
_EventFetchXI2(ev);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#if USE_XPRESENT
|
||||||
|
if (ev->xcookie.extension == ExtData[XEXT_PRESENT].major_op)
|
||||||
|
{
|
||||||
|
_EventFetchPresent(ev);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
/* We should never go here */
|
/* We should never go here */
|
||||||
Eprintf("*** %s: ext=%d type=%d\n", __func__,
|
Eprintf("*** %s: ext=%d type=%d\n", __func__,
|
||||||
|
|
Loading…
Reference in New Issue