mirror of
https://github.com/brl/mutter.git
synced 2024-11-22 08:00:42 -05:00
clutter: Remove event retrieval toggle
This is x11-specific API that was added back when clutter was out of tree. Just remove it and directly do what we want. https://gitlab.gnome.org/GNOME/mutter/merge_requests/672
This commit is contained in:
parent
d6aaef9954
commit
ef93bb6471
@ -101,7 +101,6 @@ static const gchar *atom_names[] = {
|
|||||||
#define N_ATOM_NAMES G_N_ELEMENTS (atom_names)
|
#define N_ATOM_NAMES G_N_ELEMENTS (atom_names)
|
||||||
|
|
||||||
/* various flags corresponding to pre init setup calls */
|
/* various flags corresponding to pre init setup calls */
|
||||||
static gboolean _no_xevent_retrieval = FALSE;
|
|
||||||
static gboolean clutter_enable_xinput = TRUE;
|
static gboolean clutter_enable_xinput = TRUE;
|
||||||
static gboolean clutter_enable_argb = FALSE;
|
static gboolean clutter_enable_argb = FALSE;
|
||||||
static gboolean clutter_enable_stereo = FALSE;
|
static gboolean clutter_enable_stereo = FALSE;
|
||||||
@ -452,30 +451,6 @@ _clutter_backend_x11_events_init (ClutterBackend *backend)
|
|||||||
|
|
||||||
CLUTTER_NOTE (EVENT, "initialising the event loop");
|
CLUTTER_NOTE (EVENT, "initialising the event loop");
|
||||||
|
|
||||||
/* the event source is optional */
|
|
||||||
if (!_no_xevent_retrieval)
|
|
||||||
{
|
|
||||||
GSource *source;
|
|
||||||
|
|
||||||
source = _clutter_x11_event_source_new (backend_x11);
|
|
||||||
|
|
||||||
/* default priority for events
|
|
||||||
*
|
|
||||||
* XXX - at some point we'll have a common EventSource API that
|
|
||||||
* is created by the backend, and this code will most likely go
|
|
||||||
* into the default implementation of ClutterBackend
|
|
||||||
*/
|
|
||||||
g_source_set_priority (source, CLUTTER_PRIORITY_EVENTS);
|
|
||||||
|
|
||||||
/* attach the source to the default context, and transfer the
|
|
||||||
* ownership to the GMainContext itself
|
|
||||||
*/
|
|
||||||
g_source_attach (source, NULL);
|
|
||||||
g_source_unref (source);
|
|
||||||
|
|
||||||
backend_x11->event_source = source;
|
|
||||||
}
|
|
||||||
|
|
||||||
clutter_backend_x11_create_device_manager (backend_x11);
|
clutter_backend_x11_create_device_manager (backend_x11);
|
||||||
|
|
||||||
/* register keymap; unless we create a generic Keymap object, I'm
|
/* register keymap; unless we create a generic Keymap object, I'm
|
||||||
@ -945,58 +920,6 @@ clutter_x11_set_display (Display *xdpy)
|
|||||||
_foreign_dpy= xdpy;
|
_foreign_dpy= xdpy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* clutter_x11_disable_event_retrieval:
|
|
||||||
*
|
|
||||||
* Disables the internal polling of X11 events in the main loop.
|
|
||||||
*
|
|
||||||
* Libraries or applications calling this function will be responsible of
|
|
||||||
* polling all X11 events.
|
|
||||||
*
|
|
||||||
* You also must call clutter_x11_handle_event() to let Clutter process
|
|
||||||
* events and maintain its internal state.
|
|
||||||
*
|
|
||||||
* This function can only be called before calling clutter_init().
|
|
||||||
*
|
|
||||||
* Even with event handling disabled, Clutter will still select
|
|
||||||
* all the events required to maintain its internal state on the stage
|
|
||||||
* Window; compositors using Clutter and input regions to pass events
|
|
||||||
* through to application windows should not rely on an empty input
|
|
||||||
* region, and should instead clear it themselves explicitly using the
|
|
||||||
* XFixes extension.
|
|
||||||
*
|
|
||||||
* This function should not be normally used by applications.
|
|
||||||
*
|
|
||||||
* Since: 0.8
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
clutter_x11_disable_event_retrieval (void)
|
|
||||||
{
|
|
||||||
if (_clutter_context_is_initialized ())
|
|
||||||
{
|
|
||||||
g_warning ("%s() can only be used before calling clutter_init()",
|
|
||||||
G_STRFUNC);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_no_xevent_retrieval = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* clutter_x11_has_event_retrieval:
|
|
||||||
*
|
|
||||||
* Queries the X11 backend to check if event collection has been disabled.
|
|
||||||
*
|
|
||||||
* Return value: TRUE if event retrival has been disabled. FALSE otherwise.
|
|
||||||
*
|
|
||||||
* Since: 0.8
|
|
||||||
*/
|
|
||||||
gboolean
|
|
||||||
clutter_x11_has_event_retrieval (void)
|
|
||||||
{
|
|
||||||
return !_no_xevent_retrieval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_x11_get_default_screen:
|
* clutter_x11_get_default_screen:
|
||||||
*
|
*
|
||||||
|
@ -82,7 +82,6 @@ struct _ClutterBackendX11
|
|||||||
Window xwin_root;
|
Window xwin_root;
|
||||||
|
|
||||||
/* event source */
|
/* event source */
|
||||||
GSource *event_source;
|
|
||||||
GSList *event_filters;
|
GSList *event_filters;
|
||||||
|
|
||||||
/* props */
|
/* props */
|
||||||
@ -119,8 +118,6 @@ ClutterBackend *clutter_backend_x11_new (void);
|
|||||||
|
|
||||||
void _clutter_backend_x11_events_init (ClutterBackend *backend);
|
void _clutter_backend_x11_events_init (ClutterBackend *backend);
|
||||||
|
|
||||||
GSource * _clutter_x11_event_source_new (ClutterBackendX11 *backend_x11);
|
|
||||||
|
|
||||||
/* Private to glx/eglx backends */
|
/* Private to glx/eglx backends */
|
||||||
XVisualInfo * _clutter_backend_x11_get_visual_info (ClutterBackendX11 *backend_x11);
|
XVisualInfo * _clutter_backend_x11_get_visual_info (ClutterBackendX11 *backend_x11);
|
||||||
|
|
||||||
|
@ -63,17 +63,6 @@
|
|||||||
static Window ParentEmbedderWin = None;
|
static Window ParentEmbedderWin = None;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct _ClutterEventSource ClutterEventSource;
|
|
||||||
|
|
||||||
struct _ClutterEventSource
|
|
||||||
{
|
|
||||||
GSource source;
|
|
||||||
|
|
||||||
ClutterBackendX11 *backend;
|
|
||||||
|
|
||||||
GPollFD event_poll_fd;
|
|
||||||
};
|
|
||||||
|
|
||||||
ClutterEventX11 *
|
ClutterEventX11 *
|
||||||
_clutter_event_x11_new (void)
|
_clutter_event_x11_new (void)
|
||||||
{
|
{
|
||||||
@ -96,49 +85,6 @@ _clutter_event_x11_free (ClutterEventX11 *event_x11)
|
|||||||
g_slice_free (ClutterEventX11, event_x11);
|
g_slice_free (ClutterEventX11, event_x11);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean clutter_event_prepare (GSource *source,
|
|
||||||
gint *timeout);
|
|
||||||
static gboolean clutter_event_check (GSource *source);
|
|
||||||
static gboolean clutter_event_dispatch (GSource *source,
|
|
||||||
GSourceFunc callback,
|
|
||||||
gpointer user_data);
|
|
||||||
|
|
||||||
static GSourceFuncs event_funcs = {
|
|
||||||
clutter_event_prepare,
|
|
||||||
clutter_event_check,
|
|
||||||
clutter_event_dispatch,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
GSource *
|
|
||||||
_clutter_x11_event_source_new (ClutterBackendX11 *backend_x11)
|
|
||||||
{
|
|
||||||
ClutterEventSource *event_source;
|
|
||||||
int connection_number;
|
|
||||||
GSource *source;
|
|
||||||
gchar *name;
|
|
||||||
|
|
||||||
connection_number = ConnectionNumber (backend_x11->xdpy);
|
|
||||||
CLUTTER_NOTE (EVENT, "Connection number: %d", connection_number);
|
|
||||||
|
|
||||||
source = g_source_new (&event_funcs, sizeof (ClutterEventSource));
|
|
||||||
event_source = (ClutterEventSource *) source;
|
|
||||||
|
|
||||||
name = g_strdup_printf ("Clutter X11 Event (connection: %d)",
|
|
||||||
connection_number);
|
|
||||||
g_source_set_name (source, name);
|
|
||||||
g_free (name);
|
|
||||||
|
|
||||||
event_source->backend = backend_x11;
|
|
||||||
event_source->event_poll_fd.fd = connection_number;
|
|
||||||
event_source->event_poll_fd.events = G_IO_IN;
|
|
||||||
|
|
||||||
g_source_add_poll (source, &event_source->event_poll_fd);
|
|
||||||
g_source_set_can_recurse (source, TRUE);
|
|
||||||
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_x11_handle_event:
|
* clutter_x11_handle_event:
|
||||||
* @xevent: pointer to XEvent structure
|
* @xevent: pointer to XEvent structure
|
||||||
@ -147,9 +93,6 @@ _clutter_x11_event_source_new (ClutterBackendX11 *backend_x11)
|
|||||||
* into external X11 event processing (for example, a GDK filter
|
* into external X11 event processing (for example, a GDK filter
|
||||||
* function).
|
* function).
|
||||||
*
|
*
|
||||||
* If clutter_x11_disable_event_retrieval() has been called, you must
|
|
||||||
* let this function process events to update Clutter's internal state.
|
|
||||||
*
|
|
||||||
* Return value: #ClutterX11FilterReturn. %CLUTTER_X11_FILTER_REMOVE
|
* Return value: #ClutterX11FilterReturn. %CLUTTER_X11_FILTER_REMOVE
|
||||||
* indicates that Clutter has internally handled the event and the
|
* indicates that Clutter has internally handled the event and the
|
||||||
* caller should do no further processing. %CLUTTER_X11_FILTER_CONTINUE
|
* caller should do no further processing. %CLUTTER_X11_FILTER_CONTINUE
|
||||||
@ -230,95 +173,6 @@ out:
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
clutter_event_prepare (GSource *source,
|
|
||||||
gint *timeout)
|
|
||||||
{
|
|
||||||
ClutterBackendX11 *backend = ((ClutterEventSource *) source)->backend;
|
|
||||||
gboolean retval;
|
|
||||||
|
|
||||||
_clutter_threads_acquire_lock ();
|
|
||||||
|
|
||||||
*timeout = -1;
|
|
||||||
retval = (clutter_events_pending () || XPending (backend->xdpy));
|
|
||||||
|
|
||||||
_clutter_threads_release_lock ();
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
clutter_event_check (GSource *source)
|
|
||||||
{
|
|
||||||
ClutterEventSource *event_source = (ClutterEventSource *) source;
|
|
||||||
ClutterBackendX11 *backend = event_source->backend;
|
|
||||||
gboolean retval;
|
|
||||||
|
|
||||||
_clutter_threads_acquire_lock ();
|
|
||||||
|
|
||||||
if (event_source->event_poll_fd.revents & G_IO_IN)
|
|
||||||
retval = (clutter_events_pending () || XPending (backend->xdpy));
|
|
||||||
else
|
|
||||||
retval = FALSE;
|
|
||||||
|
|
||||||
_clutter_threads_release_lock ();
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
events_queue (ClutterBackendX11 *backend_x11)
|
|
||||||
{
|
|
||||||
ClutterBackend *backend = CLUTTER_BACKEND (backend_x11);
|
|
||||||
Display *xdisplay = backend_x11->xdpy;
|
|
||||||
ClutterEvent *event;
|
|
||||||
XEvent xevent;
|
|
||||||
|
|
||||||
while (!clutter_events_pending () && XPending (xdisplay))
|
|
||||||
{
|
|
||||||
XNextEvent (xdisplay, &xevent);
|
|
||||||
|
|
||||||
event = clutter_event_new (CLUTTER_NOTHING);
|
|
||||||
|
|
||||||
XGetEventData (xdisplay, &xevent.xcookie);
|
|
||||||
|
|
||||||
if (_clutter_backend_translate_event (backend, &xevent, event))
|
|
||||||
_clutter_event_push (event, FALSE);
|
|
||||||
else
|
|
||||||
clutter_event_free (event);
|
|
||||||
|
|
||||||
XFreeEventData (xdisplay, &xevent.xcookie);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
clutter_event_dispatch (GSource *source,
|
|
||||||
GSourceFunc callback,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
ClutterBackendX11 *backend = ((ClutterEventSource *) source)->backend;
|
|
||||||
ClutterEvent *event;
|
|
||||||
|
|
||||||
_clutter_threads_acquire_lock ();
|
|
||||||
|
|
||||||
/* Grab the event(s), translate and figure out double click.
|
|
||||||
* The push onto queue (stack) if valid.
|
|
||||||
*/
|
|
||||||
events_queue (backend);
|
|
||||||
|
|
||||||
/* Pop an event off the queue if any */
|
|
||||||
event = clutter_event_get ();
|
|
||||||
if (event != NULL)
|
|
||||||
{
|
|
||||||
/* forward the event into clutter for emission etc. */
|
|
||||||
_clutter_stage_queue_event (event->any.stage, event, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
_clutter_threads_release_lock ();
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_x11_get_current_event_time: (skip)
|
* clutter_x11_get_current_event_time: (skip)
|
||||||
*
|
*
|
||||||
|
@ -120,11 +120,6 @@ void clutter_x11_remove_filter (ClutterX11FilterFunc func,
|
|||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
ClutterX11FilterReturn clutter_x11_handle_event (XEvent *xevent);
|
ClutterX11FilterReturn clutter_x11_handle_event (XEvent *xevent);
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
|
||||||
void clutter_x11_disable_event_retrieval (void);
|
|
||||||
CLUTTER_EXPORT
|
|
||||||
gboolean clutter_x11_has_event_retrieval (void);
|
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
ClutterStage *clutter_x11_get_stage_from_window (Window win);
|
ClutterStage *clutter_x11_get_stage_from_window (Window win);
|
||||||
|
|
||||||
|
@ -793,9 +793,6 @@ meta_backend_x11_init (MetaBackendX11 *x11)
|
|||||||
* to hopefully call it before any other use of XLib.
|
* to hopefully call it before any other use of XLib.
|
||||||
*/
|
*/
|
||||||
XInitThreads();
|
XInitThreads();
|
||||||
|
|
||||||
/* We do X11 event retrieval ourselves */
|
|
||||||
clutter_x11_disable_event_retrieval ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Display *
|
Display *
|
||||||
|
Loading…
Reference in New Issue
Block a user