diff --git a/cogl/Makefile.am b/cogl/Makefile.am index 43934ad33..41ac43197 100644 --- a/cogl/Makefile.am +++ b/cogl/Makefile.am @@ -151,11 +151,13 @@ libclutter_cogl_la_SOURCES = $(BUILT_SOURCES) $(cogl_sources_c) if SUPPORT_GLX libclutter_cogl_la_SOURCES += \ - $(srcdir)/winsys/cogl-glx.c + $(srcdir)/winsys/cogl-glx.c \ + $(srcdir)/winsys/cogl-xlib.c endif if SUPPORT_EGL_PLATFORM_POWERVR_X11 libclutter_cogl_la_SOURCES += \ - $(srcdir)/winsys/cogl-eglx.c + $(srcdir)/winsys/cogl-eglx.c \ + $(srcdir)/winsys/cogl-xlib.c endif if SUPPORT_EGL_PLATFORM_POWERVR_NULL libclutter_cogl_la_SOURCES += \ diff --git a/cogl/cogl-internal.h b/cogl/cogl-internal.h index 5783f0201..8987401ef 100644 --- a/cogl/cogl-internal.h +++ b/cogl/cogl-internal.h @@ -27,6 +27,10 @@ #include "cogl.h" #include "cogl-matrix-stack.h" +#ifdef COGL_HAS_XLIB_SUPPORT +#include +#endif + typedef enum { COGL_FRONT_WINDING_CLOCKWISE, @@ -128,4 +132,39 @@ _cogl_get_max_texture_image_units (void); void _cogl_flush_face_winding (void); +#ifdef COGL_HAS_XLIB_SUPPORT + +/* + * CoglX11FilterReturn: + * @COGL_XLIB_FILTER_CONTINUE: The event was not handled, continues the + * processing + * @COGL_XLIB_FILTER_REMOVE: Remove the event, stops the processing + * + * Return values for the #CoglX11FilterFunc function. + */ +typedef enum _CoglXlibFilterReturn { + COGL_XLIB_FILTER_CONTINUE, + COGL_XLIB_FILTER_REMOVE +} CoglXlibFilterReturn; + +/* + * cogl_xlib_handle_event: + * @xevent: pointer to XEvent structure + * + * This function processes a single X event; it can be used to hook + * into external X event retrieval (for example that done by Clutter + * or GDK). + * + * Return value: #CoglXlibFilterReturn. %COGL_XLIB_FILTER_REMOVE + * indicates that Cogl has internally handled the event and the + * caller should do no further processing. %COGL_XLIB_FILTER_CONTINUE + * indicates that Cogl is either not interested in the event, + * or has used the event to update internal state without taking + * any exclusive action. + */ +CoglXlibFilterReturn +_cogl_xlib_handle_event (XEvent *xevent); + +#endif /* COGL_HAS_XLIB_SUPPORT */ + #endif /* __COGL_INTERNAL_H */ diff --git a/cogl/winsys/cogl-xlib.c b/cogl/winsys/cogl-xlib.c new file mode 100644 index 000000000..f403f5d4c --- /dev/null +++ b/cogl/winsys/cogl-xlib.c @@ -0,0 +1,54 @@ +/* + * Cogl + * + * An object oriented GL/GLES Abstraction/Utility Layer + * + * Copyright (C) 2010 Intel Corporation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Authors: + * Robert Bragg + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +#include + +CoglXlibFilterReturn +_cogl_xlib_handle_event (XEvent *xevent) +{ + _COGL_GET_CONTEXT (ctx, COGL_XLIB_FILTER_CONTINUE); + + switch (xevent->type) + { + /* TODO... */ + default: + break; + } + + return COGL_XLIB_FILTER_CONTINUE; +} +