mirror of
https://github.com/brl/mutter.git
synced 2024-11-29 19:40:43 -05:00
wayland: Do not poll the Wayland socket for events
Since Cogl also polls on this file descriptor we can get into situations where our event source is woken up to handle events but those events have instead been handled by Cogl resulting in the source sitting in poll(). We can safely rely on Cogl to handle the polling on the event source and to dispatch those events. https://bugzilla.gnome.org/show_bug.cgi?id=702202
This commit is contained in:
parent
1fb0295ba1
commit
5758ab5c89
@ -41,7 +41,6 @@
|
|||||||
typedef struct _ClutterEventSourceWayland
|
typedef struct _ClutterEventSourceWayland
|
||||||
{
|
{
|
||||||
GSource source;
|
GSource source;
|
||||||
GPollFD pfd;
|
|
||||||
struct wl_display *display;
|
struct wl_display *display;
|
||||||
} ClutterEventSourceWayland;
|
} ClutterEventSourceWayland;
|
||||||
|
|
||||||
@ -70,12 +69,11 @@ clutter_event_source_wayland_prepare (GSource *base, gint *timeout)
|
|||||||
static gboolean
|
static gboolean
|
||||||
clutter_event_source_wayland_check (GSource *base)
|
clutter_event_source_wayland_check (GSource *base)
|
||||||
{
|
{
|
||||||
ClutterEventSourceWayland *source = (ClutterEventSourceWayland *) base;
|
|
||||||
gboolean retval;
|
gboolean retval;
|
||||||
|
|
||||||
_clutter_threads_acquire_lock ();
|
_clutter_threads_acquire_lock ();
|
||||||
|
|
||||||
retval = clutter_events_pending () || source->pfd.revents;
|
retval = clutter_events_pending ();
|
||||||
|
|
||||||
_clutter_threads_release_lock ();
|
_clutter_threads_release_lock ();
|
||||||
|
|
||||||
@ -87,17 +85,10 @@ clutter_event_source_wayland_dispatch (GSource *base,
|
|||||||
GSourceFunc callback,
|
GSourceFunc callback,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
ClutterEventSourceWayland *source = (ClutterEventSourceWayland *) base;
|
|
||||||
ClutterEvent *event;
|
ClutterEvent *event;
|
||||||
|
|
||||||
_clutter_threads_acquire_lock ();
|
_clutter_threads_acquire_lock ();
|
||||||
|
|
||||||
if (source->pfd.revents)
|
|
||||||
{
|
|
||||||
wl_display_dispatch (source->display);
|
|
||||||
source->pfd.revents = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
event = clutter_event_get ();
|
event = clutter_event_get ();
|
||||||
|
|
||||||
if (event)
|
if (event)
|
||||||
@ -129,10 +120,6 @@ _clutter_event_source_wayland_new (struct wl_display *display)
|
|||||||
g_source_new (&clutter_event_source_wayland_funcs,
|
g_source_new (&clutter_event_source_wayland_funcs,
|
||||||
sizeof (ClutterEventSourceWayland));
|
sizeof (ClutterEventSourceWayland));
|
||||||
source->display = display;
|
source->display = display;
|
||||||
source->pfd.fd =
|
|
||||||
wl_display_get_fd (display);
|
|
||||||
source->pfd.events = G_IO_IN | G_IO_ERR;
|
|
||||||
g_source_add_poll (&source->source, &source->pfd);
|
|
||||||
|
|
||||||
return &source->source;
|
return &source->source;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user