[mutter] barriers: Separate implementation from public API
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] barriers: Separate implementation from public API
- Date: Sun, 18 Jan 2015 01:23:13 +0000 (UTC)
commit 5f91a62f6f9c9b6a336eb27e6f6254a7a0ecc7bb
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Jan 16 10:30:04 2015 +0800
barriers: Separate implementation from public API
This patch removes the X11 specific code from MetaBarrier and creates an
abstraction layer MetaBarrierImpl. The existing X11 implementation is
moved to a new GObject MetaBarrierImplX11 implementing the abstract
interface MetaBarrierImpl which is instantiated by MetaBarrier when
supported.
While at it, move it to backends/ and properly name the files.
https://bugzilla.gnome.org/show_bug.cgi?id=706655
src/Makefile.am | 5 +-
src/backends/meta-barrier-private.h | 81 +++++++++
src/{core/barrier.c => backends/meta-barrier.c} | 170 +++++-------------
src/backends/x11/meta-barrier-x11.c | 216 +++++++++++++++++++++++
src/backends/x11/meta-barrier-x11.h | 57 ++++++
5 files changed, 405 insertions(+), 124 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 00ca3d5..a967c60 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -61,6 +61,8 @@ libmutter_la_SOURCES = \
backends/meta-backend.c \
meta/meta-backend.h \
backends/meta-backend-private.h \
+ backends/meta-barrier.c \
+ backends/meta-barrier-private.h \
backends/meta-cursor.c \
backends/meta-cursor.h \
backends/meta-cursor-private.h \
@@ -85,6 +87,8 @@ libmutter_la_SOURCES = \
backends/edid.h \
backends/x11/meta-backend-x11.c \
backends/x11/meta-backend-x11.h \
+ backends/x11/meta-barrier-x11.c \
+ backends/x11/meta-barrier-x11.h \
backends/x11/meta-cursor-renderer-x11.c \
backends/x11/meta-cursor-renderer-x11.h \
backends/x11/meta-idle-monitor-xsync.c \
@@ -93,7 +97,6 @@ libmutter_la_SOURCES = \
backends/x11/meta-monitor-manager-xrandr.h \
core/meta-accel-parse.c \
core/meta-accel-parse.h \
- core/barrier.c \
meta/barrier.h \
core/bell.c \
core/bell.h \
diff --git a/src/backends/meta-barrier-private.h b/src/backends/meta-barrier-private.h
new file mode 100644
index 0000000..1dbb1cb
--- /dev/null
+++ b/src/backends/meta-barrier-private.h
@@ -0,0 +1,81 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/*
+ * Copyright (C) 2014-2015 Red Hat
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Written by:
+ * Jasper St. Pierre <jstpierre mecheye net>
+ * Jonas Ådahl <jadahl gmail com>
+ */
+
+#ifndef META_BARRIER_PRIVATE_H
+#define META_BARRIER_PRIVATE_H
+
+G_BEGIN_DECLS
+
+#define META_TYPE_BARRIER_IMPL (meta_barrier_impl_get_type ())
+#define META_BARRIER_IMPL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_BARRIER,
MetaBarrierImpl))
+#define META_BARRIER_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_BARRIER_IMPL,
MetaBarrierImplClass))
+#define META_IS_BARRIER_IMPL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_BARRIER_IMPL))
+#define META_IS_BARRIER_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_BARRIER_IMPL))
+#define META_BARRIER_IMPL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_BARRIER_IMPL,
MetaBarrierImplClass))
+
+typedef struct _MetaBarrierImpl MetaBarrierImpl;
+typedef struct _MetaBarrierImplClass MetaBarrierImplClass;
+
+struct _MetaBarrierImpl
+{
+ GObject parent;
+};
+
+struct _MetaBarrierImplClass
+{
+ GObjectClass parent_class;
+
+ gboolean (*is_active) (MetaBarrierImpl *barrier);
+ void (*release) (MetaBarrierImpl *barrier,
+ MetaBarrierEvent *event);
+ void (*destroy) (MetaBarrierImpl *barrier);
+};
+
+GType meta_barrier_impl_get_type (void) G_GNUC_CONST;
+
+void _meta_barrier_emit_hit_signal (MetaBarrier *barrier,
+ MetaBarrierEvent *event);
+void _meta_barrier_emit_left_signal (MetaBarrier *barrier,
+ MetaBarrierEvent *event);
+
+void meta_barrier_event_unref (MetaBarrierEvent *event);
+
+G_END_DECLS
+
+struct _MetaBarrierPrivate
+{
+ MetaDisplay *display;
+
+ int x1;
+ int y1;
+ int x2;
+ int y2;
+
+ MetaBarrierDirection directions;
+
+ MetaBarrierImpl *impl;
+};
+
+#endif /* META_BARRIER_PRIVATE_H */
diff --git a/src/core/barrier.c b/src/backends/meta-barrier.c
similarity index 69%
rename from src/core/barrier.c
rename to src/backends/meta-barrier.c
index a0f8950..ab4fdbe 100644
--- a/src/core/barrier.c
+++ b/src/backends/meta-barrier.c
@@ -10,15 +10,14 @@
#include <glib-object.h>
-#include <X11/extensions/XInput2.h>
-#include <X11/extensions/Xfixes.h>
#include <meta/util.h>
#include <meta/barrier.h>
-#include "display-private.h"
+#include "backends/x11/meta-backend-x11.h"
+#include "backends/x11/meta-barrier-x11.h"
#include "mutter-enum-types.h"
-#include "core.h"
G_DEFINE_TYPE (MetaBarrier, meta_barrier, G_TYPE_OBJECT)
+G_DEFINE_TYPE (MetaBarrierImpl, meta_barrier_impl, G_TYPE_OBJECT)
enum {
PROP_0,
@@ -45,21 +44,6 @@ enum {
static guint obj_signals[LAST_SIGNAL];
-struct _MetaBarrierPrivate
-{
- MetaDisplay *display;
-
- int x1;
- int y1;
- int x2;
- int y2;
-
- MetaBarrierDirection directions;
-
- PointerBarrier xbarrier;
-};
-
-static void meta_barrier_event_unref (MetaBarrierEvent *event);
static void
meta_barrier_get_property (GObject *object,
@@ -133,13 +117,11 @@ static void
meta_barrier_dispose (GObject *object)
{
MetaBarrier *barrier = META_BARRIER (object);
- MetaBarrierPrivate *priv = barrier->priv;
if (meta_barrier_is_active (barrier))
{
- meta_bug ("MetaBarrier wrapper %p for X barrier %ld was destroyed"
- " while the X barrier is still active.",
- barrier, priv->xbarrier);
+ meta_bug ("MetaBarrier %p was destroyed while it was still active.",
+ barrier);
}
G_OBJECT_CLASS (meta_barrier_parent_class)->dispose (object);
@@ -148,7 +130,12 @@ meta_barrier_dispose (GObject *object)
gboolean
meta_barrier_is_active (MetaBarrier *barrier)
{
- return barrier->priv->xbarrier != 0;
+ MetaBarrierImpl *impl = barrier->priv->impl;
+
+ if (impl)
+ return META_BARRIER_IMPL_GET_CLASS (impl)->is_active (impl);
+ else
+ return FALSE;
}
/**
@@ -165,15 +152,10 @@ void
meta_barrier_release (MetaBarrier *barrier,
MetaBarrierEvent *event)
{
-#ifdef HAVE_XI23
- MetaBarrierPrivate *priv = barrier->priv;
- if (META_DISPLAY_HAS_XINPUT_23 (priv->display))
- {
- XIBarrierReleasePointer (priv->display->xdisplay,
- META_VIRTUAL_CORE_POINTER_ID,
- priv->xbarrier, event->event_id);
- }
-#endif /* HAVE_XI23 */
+ MetaBarrierImpl *impl = barrier->priv->impl;
+
+ if (impl)
+ META_BARRIER_IMPL_GET_CLASS (impl)->release (impl, event);
}
static void
@@ -181,31 +163,22 @@ meta_barrier_constructed (GObject *object)
{
MetaBarrier *barrier = META_BARRIER (object);
MetaBarrierPrivate *priv = barrier->priv;
- Display *dpy;
- Window root;
g_return_if_fail (priv->x1 == priv->x2 || priv->y1 == priv->y2);
- if (priv->display == NULL)
- {
- g_warning ("A display must be provided when constructing a barrier.");
- return;
- }
+#if defined(HAVE_XI23)
+ if (META_IS_BACKEND_X11 (meta_get_backend ()) &&
+ !meta_is_wayland_compositor ())
+ priv->impl = meta_barrier_impl_x11_new (barrier);
+#endif
- dpy = priv->display->xdisplay;
- root = DefaultRootWindow (dpy);
+ if (priv->impl == NULL)
+ g_warning ("Created a non-working barrier");
- priv->xbarrier = XFixesCreatePointerBarrier (dpy, root,
- priv->x1, priv->y1,
- priv->x2, priv->y2,
- priv->directions, 0, NULL);
-
- /* Take a ref that we'll release when the XID dies inside destroy(),
- * so that the object stays alive and doesn't get GC'd. */
+ /* Take a ref that we'll release in destroy() so that the object stays
+ * alive while active. */
g_object_ref (barrier);
- g_hash_table_insert (priv->display->xids, &priv->xbarrier, barrier);
-
G_OBJECT_CLASS (meta_barrier_parent_class)->constructed (object);
}
@@ -306,20 +279,10 @@ meta_barrier_class_init (MetaBarrierClass *klass)
void
meta_barrier_destroy (MetaBarrier *barrier)
{
- MetaBarrierPrivate *priv = barrier->priv;
- Display *dpy;
-
- if (priv->display == NULL)
- return;
-
- dpy = priv->display->xdisplay;
+ MetaBarrierImpl *impl = barrier->priv->impl;
- if (!meta_barrier_is_active (barrier))
- return;
-
- XFixesDestroyPointerBarrier (dpy, priv->xbarrier);
- g_hash_table_remove (priv->display->xids, &priv->xbarrier);
- priv->xbarrier = 0;
+ if (impl)
+ return META_BARRIER_IMPL_GET_CLASS (impl)->destroy (impl);
g_object_unref (barrier);
}
@@ -330,71 +293,32 @@ meta_barrier_init (MetaBarrier *barrier)
barrier->priv = G_TYPE_INSTANCE_GET_PRIVATE (barrier, META_TYPE_BARRIER, MetaBarrierPrivate);
}
-#ifdef HAVE_XI23
-static void
-meta_barrier_fire_event (MetaBarrier *barrier,
- XIBarrierEvent *xevent)
+void
+_meta_barrier_emit_hit_signal (MetaBarrier *barrier,
+ MetaBarrierEvent *event)
{
- MetaBarrierEvent *event = g_slice_new0 (MetaBarrierEvent);
-
- event->ref_count = 1;
- event->event_id = xevent->eventid;
- event->time = xevent->time;
- event->dt = xevent->dtime;
-
- event->x = xevent->root_x;
- event->y = xevent->root_y;
- event->dx = xevent->dx;
- event->dy = xevent->dy;
-
- event->released = (xevent->flags & XIBarrierPointerReleased) != 0;
- event->grabbed = (xevent->flags & XIBarrierDeviceIsGrabbed) != 0;
-
- switch (xevent->evtype)
- {
- case XI_BarrierHit:
- g_signal_emit (barrier, obj_signals[HIT], 0, event);
- break;
- case XI_BarrierLeave:
- g_signal_emit (barrier, obj_signals[LEFT], 0, event);
- break;
- default:
- g_assert_not_reached ();
- }
-
- meta_barrier_event_unref (event);
+ g_signal_emit (barrier, obj_signals[HIT], 0, event);
}
-gboolean
-meta_display_process_barrier_xevent (MetaDisplay *display,
- XIEvent *event)
+void
+_meta_barrier_emit_left_signal (MetaBarrier *barrier,
+ MetaBarrierEvent *event)
{
- MetaBarrier *barrier;
- XIBarrierEvent *xev;
-
- if (event == NULL)
- return FALSE;
-
- switch (event->evtype)
- {
- case XI_BarrierHit:
- case XI_BarrierLeave:
- break;
- default:
- return FALSE;
- }
+ g_signal_emit (barrier, obj_signals[LEFT], 0, event);
+}
- xev = (XIBarrierEvent *) event;
- barrier = g_hash_table_lookup (display->xids, &xev->barrier);
- if (barrier != NULL)
- {
- meta_barrier_fire_event (barrier, xev);
- return TRUE;
- }
+static void
+meta_barrier_impl_class_init (MetaBarrierImplClass *klass)
+{
+ klass->is_active = NULL;
+ klass->release = NULL;
+ klass->destroy = NULL;
+}
- return FALSE;
+static void
+meta_barrier_impl_init (MetaBarrierImpl *impl)
+{
}
-#endif /* HAVE_XI23 */
static MetaBarrierEvent *
meta_barrier_event_ref (MetaBarrierEvent *event)
@@ -406,7 +330,7 @@ meta_barrier_event_ref (MetaBarrierEvent *event)
return event;
}
-static void
+void
meta_barrier_event_unref (MetaBarrierEvent *event)
{
g_return_if_fail (event != NULL);
diff --git a/src/backends/x11/meta-barrier-x11.c b/src/backends/x11/meta-barrier-x11.c
new file mode 100644
index 0000000..1a813c4
--- /dev/null
+++ b/src/backends/x11/meta-barrier-x11.c
@@ -0,0 +1,216 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/*
+ * Copyright (C) 2014-2015 Red Hat
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Written by:
+ * Jasper St. Pierre <jstpierre mecheye net>
+ * Jonas Ådahl <jadahl gmail com>
+ */
+
+/**
+ * SECTION:barrier-x11
+ * @Title: MetaBarrierImplX11
+ * @Short_Description: Pointer barriers implementation for X11
+ */
+
+#include "config.h"
+
+#ifdef HAVE_XI23
+
+#include <glib-object.h>
+
+#include <X11/extensions/XInput2.h>
+#include <X11/extensions/Xfixes.h>
+#include <meta/barrier.h>
+#include "backends/x11/meta-barrier-x11.h"
+#include "display-private.h"
+
+struct _MetaBarrierImplX11Private
+{
+ MetaBarrier *barrier;
+ PointerBarrier xbarrier;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (MetaBarrierImplX11, meta_barrier_impl_x11,
+ META_TYPE_BARRIER_IMPL)
+
+static gboolean
+_meta_barrier_impl_x11_is_active (MetaBarrierImpl *impl)
+{
+ MetaBarrierImplX11 *self = META_BARRIER_IMPL_X11 (impl);
+ MetaBarrierImplX11Private *priv =
+ meta_barrier_impl_x11_get_instance_private (self);
+
+ return priv->xbarrier != 0;
+}
+
+static void
+_meta_barrier_impl_x11_release (MetaBarrierImpl *impl,
+ MetaBarrierEvent *event)
+{
+ MetaBarrierImplX11 *self = META_BARRIER_IMPL_X11 (impl);
+ MetaBarrierImplX11Private *priv =
+ meta_barrier_impl_x11_get_instance_private (self);
+ MetaDisplay *display = priv->barrier->priv->display;
+
+ if (META_DISPLAY_HAS_XINPUT_23 (display))
+ {
+ XIBarrierReleasePointer (display->xdisplay,
+ META_VIRTUAL_CORE_POINTER_ID,
+ priv->xbarrier, event->event_id);
+ }
+}
+
+static void
+_meta_barrier_impl_x11_destroy (MetaBarrierImpl *impl)
+{
+ MetaBarrierImplX11 *self = META_BARRIER_IMPL_X11 (impl);
+ MetaBarrierImplX11Private *priv =
+ meta_barrier_impl_x11_get_instance_private (self);
+ MetaDisplay *display = priv->barrier->priv->display;
+ Display *dpy;
+
+ if (display == NULL)
+ return;
+
+ dpy = display->xdisplay;
+
+ if (!meta_barrier_is_active (priv->barrier))
+ return;
+
+ XFixesDestroyPointerBarrier (dpy, priv->xbarrier);
+ g_hash_table_remove (display->xids, &priv->xbarrier);
+ priv->xbarrier = 0;
+}
+
+MetaBarrierImpl *
+meta_barrier_impl_x11_new (MetaBarrier *barrier)
+{
+ MetaBarrierImplX11 *self;
+ MetaBarrierImplX11Private *priv;
+ MetaDisplay *display = barrier->priv->display;
+ Display *dpy;
+ Window root;
+
+ if (display == NULL)
+ {
+ g_warning ("A display must be provided when constructing a barrier.");
+ return NULL;
+ }
+
+ self = g_object_new (META_TYPE_BARRIER_IMPL_X11, NULL);
+ priv = meta_barrier_impl_x11_get_instance_private (self);
+ priv->barrier = barrier;
+
+ dpy = display->xdisplay;
+ root = DefaultRootWindow (dpy);
+
+ priv->xbarrier = XFixesCreatePointerBarrier (dpy, root,
+ barrier->priv->x1,
+ barrier->priv->y1,
+ barrier->priv->x2,
+ barrier->priv->y2,
+ barrier->priv->directions,
+ 0, NULL);
+
+ g_hash_table_insert (display->xids, &priv->xbarrier, barrier);
+
+ return META_BARRIER_IMPL (self);
+}
+
+static void
+meta_barrier_fire_xevent (MetaBarrier *barrier,
+ XIBarrierEvent *xevent)
+{
+ MetaBarrierEvent *event = g_slice_new0 (MetaBarrierEvent);
+
+ event->ref_count = 1;
+ event->event_id = xevent->eventid;
+ event->time = xevent->time;
+ event->dt = xevent->dtime;
+
+ event->x = xevent->root_x;
+ event->y = xevent->root_y;
+ event->dx = xevent->dx;
+ event->dy = xevent->dy;
+
+ event->released = (xevent->flags & XIBarrierPointerReleased) != 0;
+ event->grabbed = (xevent->flags & XIBarrierDeviceIsGrabbed) != 0;
+
+ switch (xevent->evtype)
+ {
+ case XI_BarrierHit:
+ _meta_barrier_emit_hit_signal (barrier, event);
+ break;
+ case XI_BarrierLeave:
+ _meta_barrier_emit_left_signal (barrier, event);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ meta_barrier_event_unref (event);
+}
+
+gboolean
+meta_display_process_barrier_xevent (MetaDisplay *display,
+ XIEvent *event)
+{
+ MetaBarrier *barrier;
+ XIBarrierEvent *xev;
+
+ if (event == NULL)
+ return FALSE;
+
+ switch (event->evtype)
+ {
+ case XI_BarrierHit:
+ case XI_BarrierLeave:
+ break;
+ default:
+ return FALSE;
+ }
+
+ xev = (XIBarrierEvent *) event;
+ barrier = g_hash_table_lookup (display->xids, &xev->barrier);
+ if (barrier != NULL)
+ {
+ meta_barrier_fire_xevent (barrier, xev);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+meta_barrier_impl_x11_class_init (MetaBarrierImplX11Class *klass)
+{
+ MetaBarrierImplClass *impl_class = META_BARRIER_IMPL_CLASS (klass);
+
+ impl_class->is_active = _meta_barrier_impl_x11_is_active;
+ impl_class->release = _meta_barrier_impl_x11_release;
+ impl_class->destroy = _meta_barrier_impl_x11_destroy;
+}
+
+static void
+meta_barrier_impl_x11_init (MetaBarrierImplX11 *self)
+{
+}
+
+#endif /* HAVE_XI23 */
diff --git a/src/backends/x11/meta-barrier-x11.h b/src/backends/x11/meta-barrier-x11.h
new file mode 100644
index 0000000..802494c
--- /dev/null
+++ b/src/backends/x11/meta-barrier-x11.h
@@ -0,0 +1,57 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/*
+ * Copyright (C) 2015 Red Hat
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Written by:
+ * Jonas Ådahl <jadahl gmail com>
+ */
+
+#ifndef META_BARRIER_X11_H
+#define META_BARRIER_X11_H
+
+#include "backends/meta-barrier-private.h"
+
+G_BEGIN_DECLS
+
+#define META_TYPE_BARRIER_IMPL_X11 (meta_barrier_impl_x11_get_type ())
+#define META_BARRIER_IMPL_X11(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_BARRIER,
MetaBarrierImplX11))
+#define META_BARRIER_IMPL_X11_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
META_TYPE_BARRIER_IMPL_X11, MetaBarrierImplX11Class))
+#define META_IS_BARRIER_IMPL_X11(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
META_TYPE_BARRIER_IMPL_X11))
+#define META_IS_BARRIER_IMPL_X11_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
META_TYPE_BARRIER_IMPL_X11))
+#define META_BARRIER_IMPL_X11_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
META_TYPE_BARRIER_IMPL_X11, MetaBarrierImplX11Class))
+
+typedef struct _MetaBarrierImplX11 MetaBarrierImplX11;
+typedef struct _MetaBarrierImplX11Class MetaBarrierImplX11Class;
+typedef struct _MetaBarrierImplX11Private MetaBarrierImplX11Private;
+
+struct _MetaBarrierImplX11
+{
+ MetaBarrierImpl parent;
+};
+
+struct _MetaBarrierImplX11Class
+{
+ MetaBarrierImplClass parent_class;
+};
+
+MetaBarrierImpl *meta_barrier_impl_x11_new (MetaBarrier *barrier);
+
+G_END_DECLS
+
+#endif /* META_BARRIER_X11_H1 */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]