[mutter] wayland: Move out popup logic to its own file
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] wayland: Move out popup logic to its own file
- Date: Tue, 17 Feb 2015 14:17:17 +0000 (UTC)
commit 768286bffb925759fba610d7d01354ce083242f6
Author: Jonas Ådahl <jadahl gmail com>
Date: Wed Feb 11 17:34:15 2015 +0800
wayland: Move out popup logic to its own file
We'll want to expose popup logic outside of meta-wayland-pointer.c and
one day we'll also probably want to add touch support for popups, so
lets move it to its own file. There are no significant semantical
changes, only refactoring.
https://bugzilla.gnome.org/show_bug.cgi?id=744452
src/Makefile.am | 2 +
src/wayland/meta-wayland-pointer.c | 208 ++++++++------------------------
src/wayland/meta-wayland-pointer.h | 8 ++
src/wayland/meta-wayland-popup.c | 238 ++++++++++++++++++++++++++++++++++++
src/wayland/meta-wayland-popup.h | 49 ++++++++
src/wayland/meta-wayland-surface.c | 1 +
src/wayland/meta-wayland-types.h | 2 +
7 files changed, 351 insertions(+), 157 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 20ed3e2..baadb41 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -253,6 +253,8 @@ libmutter_la_SOURCES += \
wayland/meta-wayland-keyboard.h \
wayland/meta-wayland-pointer.c \
wayland/meta-wayland-pointer.h \
+ wayland/meta-wayland-popup.c \
+ wayland/meta-wayland-popup.h \
wayland/meta-wayland-seat.c \
wayland/meta-wayland-seat.h \
wayland/meta-wayland-touch.c \
diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c
index fcb7795..b9d7f66 100644
--- a/src/wayland/meta-wayland-pointer.c
+++ b/src/wayland/meta-wayland-pointer.c
@@ -47,6 +47,7 @@
#include <linux/input.h>
#include "meta-wayland-pointer.h"
+#include "meta-wayland-popup.h"
#include "meta-wayland-private.h"
#include "meta-wayland-buffer.h"
#include "meta-cursor.h"
@@ -57,8 +58,6 @@
#define DEFAULT_AXIS_STEP_DISTANCE wl_fixed_from_int (10)
-static void meta_wayland_pointer_end_popup_grab (MetaWaylandPointer *pointer);
-
static void
unbind_resource (struct wl_resource *resource)
{
@@ -127,23 +126,10 @@ pointer_handle_focus_surface_destroy (struct wl_listener *listener, void *data)
meta_wayland_pointer_set_focus (pointer, NULL);
}
-static void
-default_grab_focus (MetaWaylandPointerGrab *grab,
- MetaWaylandSurface *surface)
-{
- MetaWaylandPointer *pointer = grab->pointer;
-
- if (pointer->button_count > 0)
- return;
-
- meta_wayland_pointer_set_focus (pointer, surface);
-}
-
-static void
-default_grab_motion (MetaWaylandPointerGrab *grab,
- const ClutterEvent *event)
+void
+meta_wayland_pointer_send_motion (MetaWaylandPointer *pointer,
+ const ClutterEvent *event)
{
- MetaWaylandPointer *pointer = grab->pointer;
struct wl_resource *resource;
struct wl_list *l;
@@ -159,18 +145,17 @@ default_grab_motion (MetaWaylandPointerGrab *grab,
}
}
-static void
-default_grab_button (MetaWaylandPointerGrab *grab,
- const ClutterEvent *event)
+void
+meta_wayland_pointer_send_button (MetaWaylandPointer *pointer,
+ const ClutterEvent *event)
{
- MetaWaylandPointer *pointer = grab->pointer;
struct wl_resource *resource;
struct wl_list *l;
ClutterEventType event_type;
event_type = clutter_event_type (event);
- l = &grab->pointer->focus_resource_list;
+ l = &pointer->focus_resource_list;
if (!wl_list_empty (l))
{
struct wl_client *client = wl_resource_get_client (pointer->focus_surface->resource);
@@ -210,6 +195,36 @@ default_grab_button (MetaWaylandPointerGrab *grab,
sync_focus_surface (pointer);
}
+static void
+default_grab_focus (MetaWaylandPointerGrab *grab,
+ MetaWaylandSurface *surface)
+{
+ MetaWaylandPointer *pointer = grab->pointer;
+
+ if (pointer->button_count > 0)
+ return;
+
+ meta_wayland_pointer_set_focus (pointer, surface);
+}
+
+static void
+default_grab_motion (MetaWaylandPointerGrab *grab,
+ const ClutterEvent *event)
+{
+ MetaWaylandPointer *pointer = grab->pointer;
+
+ meta_wayland_pointer_send_motion (pointer, event);
+}
+
+static void
+default_grab_button (MetaWaylandPointerGrab *grab,
+ const ClutterEvent *event)
+{
+ MetaWaylandPointer *pointer = grab->pointer;
+
+ meta_wayland_pointer_send_button (pointer, event);
+}
+
static const MetaWaylandPointerGrabInterface default_pointer_grab_interface = {
default_grab_focus,
default_grab_motion,
@@ -557,102 +572,13 @@ meta_wayland_pointer_end_grab (MetaWaylandPointer *pointer)
meta_wayland_pointer_update_cursor_surface (pointer);
}
-typedef struct {
- MetaWaylandPointerGrab generic;
-
- struct wl_client *grab_client;
- struct wl_list all_popups;
-} MetaWaylandPopupGrab;
-
-typedef struct {
- MetaWaylandPopupGrab *grab;
- MetaWaylandSurface *surface;
- struct wl_listener surface_destroy_listener;
-
- struct wl_list link;
-} MetaWaylandPopup;
-
-static void
-popup_grab_focus (MetaWaylandPointerGrab *grab,
- MetaWaylandSurface *surface)
-{
- MetaWaylandPopupGrab *popup_grab = (MetaWaylandPopupGrab*)grab;
-
- /* Popup grabs are in owner-events mode (ie, events for the same client
- are reported as normal) */
- if (surface && wl_resource_get_client (surface->resource) == popup_grab->grab_client)
- meta_wayland_pointer_set_focus (grab->pointer, surface);
- else
- meta_wayland_pointer_set_focus (grab->pointer, NULL);
-}
-
-static void
-popup_grab_motion (MetaWaylandPointerGrab *grab,
- const ClutterEvent *event)
-{
- default_grab_motion (grab, event);
-}
-
-static void
-popup_grab_button (MetaWaylandPointerGrab *grab,
- const ClutterEvent *event)
-{
- MetaWaylandPointer *pointer = grab->pointer;
-
- if (pointer->focus_surface)
- default_grab_button (grab, event);
- else if (clutter_event_type (event) == CLUTTER_BUTTON_RELEASE &&
- pointer->button_count == 0)
- meta_wayland_pointer_end_popup_grab (grab->pointer);
-}
-
-static MetaWaylandPointerGrabInterface popup_grab_interface = {
- popup_grab_focus,
- popup_grab_motion,
- popup_grab_button
-};
-
-static void
+void
meta_wayland_pointer_end_popup_grab (MetaWaylandPointer *pointer)
{
- MetaWaylandPopupGrab *popup_grab;
- MetaWaylandPopup *popup, *tmp;
-
- popup_grab = (MetaWaylandPopupGrab*)pointer->grab;
-
- g_assert (popup_grab->generic.interface == &popup_grab_interface);
-
- wl_list_for_each_safe (popup, tmp, &popup_grab->all_popups, link)
- {
- meta_wayland_surface_popup_done (popup->surface);
- wl_list_remove (&popup->surface_destroy_listener.link);
- wl_list_remove (&popup->link);
- g_slice_free (MetaWaylandPopup, popup);
- }
-
- {
- MetaDisplay *display = meta_get_display ();
- meta_display_end_grab_op (display,
- meta_display_get_current_time_roundtrip (display));
- }
+ MetaWaylandPopupGrab *popup_grab = (MetaWaylandPopupGrab*)pointer->grab;
- meta_wayland_pointer_end_grab (pointer);
- g_slice_free (MetaWaylandPopupGrab, popup_grab);
-}
-
-static void
-on_popup_surface_destroy (struct wl_listener *listener,
- void *data)
-{
- MetaWaylandPopup *popup =
- wl_container_of (listener, popup, surface_destroy_listener);
- MetaWaylandPopupGrab *popup_grab = popup->grab;
-
- wl_list_remove (&popup->link);
- g_slice_free (MetaWaylandPopup, popup);
-
- if (wl_list_empty (&popup_grab->all_popups))
- meta_wayland_pointer_end_popup_grab (popup_grab->generic.pointer);
+ meta_wayland_popup_grab_end (popup_grab);
+ meta_wayland_popup_grab_destroy (popup_grab);
}
gboolean
@@ -660,56 +586,24 @@ meta_wayland_pointer_start_popup_grab (MetaWaylandPointer *pointer,
MetaWaylandSurface *surface)
{
MetaWaylandPopupGrab *grab;
- MetaWaylandPopup *popup;
- if (pointer->grab != &pointer->default_grab)
- {
- if (pointer->grab->interface != &popup_grab_interface)
- return FALSE;
-
- grab = (MetaWaylandPopupGrab*)pointer->grab;
-
- if (wl_resource_get_client (surface->resource) != grab->grab_client)
- return FALSE;
- }
+ if (pointer->grab != &pointer->default_grab &&
+ !meta_wayland_pointer_grab_is_popup_grab (pointer->grab))
+ return FALSE;
if (pointer->grab == &pointer->default_grab)
{
- MetaWindow *window = surface->window;
-
- grab = g_slice_new0 (MetaWaylandPopupGrab);
- grab->generic.interface = &popup_grab_interface;
- grab->generic.pointer = pointer;
- grab->grab_client = wl_resource_get_client (surface->resource);
- wl_list_init (&grab->all_popups);
-
- meta_wayland_pointer_start_grab (pointer, (MetaWaylandPointerGrab*)grab);
-
- meta_display_begin_grab_op (window->display,
- window->screen,
- window,
- META_GRAB_OP_WAYLAND_POPUP,
- FALSE, /* pointer_already_grabbed */
- FALSE, /* frame_action */
- 1, /* button. XXX? */
- 0, /* modmask */
- meta_display_get_current_time_roundtrip (window->display),
- pointer->grab_x,
- pointer->grab_y);
+ struct wl_client *client = wl_resource_get_client (surface->resource);
+
+ grab = meta_wayland_popup_grab_create (pointer, client);
+ meta_wayland_popup_grab_begin (grab, surface);
}
else
grab = (MetaWaylandPopupGrab*)pointer->grab;
- popup = g_slice_new0 (MetaWaylandPopup);
- popup->grab = grab;
- popup->surface = surface;
- popup->surface_destroy_listener.notify = on_popup_surface_destroy;
- if (surface->xdg_popup)
- wl_resource_add_destroy_listener (surface->xdg_popup, &popup->surface_destroy_listener);
- else if (surface->wl_shell_surface)
- wl_resource_add_destroy_listener (surface->wl_shell_surface, &popup->surface_destroy_listener);
+ if (meta_wayland_popup_create (surface, grab) == NULL)
+ return FALSE;
- wl_list_insert (&grab->all_popups, &popup->link);
return TRUE;
}
diff --git a/src/wayland/meta-wayland-pointer.h b/src/wayland/meta-wayland-pointer.h
index de5d815..5dadd5f 100644
--- a/src/wayland/meta-wayland-pointer.h
+++ b/src/wayland/meta-wayland-pointer.h
@@ -85,6 +85,12 @@ void meta_wayland_pointer_update (MetaWaylandPointer *pointer,
gboolean meta_wayland_pointer_handle_event (MetaWaylandPointer *pointer,
const ClutterEvent *event);
+void meta_wayland_pointer_send_motion (MetaWaylandPointer *pointer,
+ const ClutterEvent *event);
+
+void meta_wayland_pointer_send_button (MetaWaylandPointer *pointer,
+ const ClutterEvent *event);
+
void meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer,
MetaWaylandSurface *surface);
@@ -96,6 +102,8 @@ void meta_wayland_pointer_end_grab (MetaWaylandPointer *pointer);
gboolean meta_wayland_pointer_start_popup_grab (MetaWaylandPointer *pointer,
MetaWaylandSurface *popup);
+void meta_wayland_pointer_end_popup_grab (MetaWaylandPointer *pointer);
+
void meta_wayland_pointer_repick (MetaWaylandPointer *pointer);
void meta_wayland_pointer_get_relative_coordinates (MetaWaylandPointer *pointer,
diff --git a/src/wayland/meta-wayland-popup.c b/src/wayland/meta-wayland-popup.c
new file mode 100644
index 0000000..9a70ce3
--- /dev/null
+++ b/src/wayland/meta-wayland-popup.c
@@ -0,0 +1,238 @@
+/*
+ * Wayland Support
+ *
+ * Copyright (C) 2013 Intel Corporation
+ * Copyright (C) 2015 Red Hat, Inc.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * Copyright © 2008 Kristian Høgsberg
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#include "config.h"
+
+#include "meta-wayland-popup.h"
+
+#include "meta-wayland-pointer.h"
+#include "meta-wayland-private.h"
+#include "meta-wayland-surface.h"
+
+struct _MetaWaylandPopupGrab
+{
+ MetaWaylandPointerGrab generic;
+
+ struct wl_client *grab_client;
+ struct wl_list all_popups;
+};
+
+struct _MetaWaylandPopup
+{
+ MetaWaylandPopupGrab *grab;
+ MetaWaylandSurface *surface;
+ struct wl_listener surface_destroy_listener;
+
+ struct wl_list link;
+};
+
+static void
+popup_grab_focus (MetaWaylandPointerGrab *grab,
+ MetaWaylandSurface *surface)
+{
+ MetaWaylandPopupGrab *popup_grab = (MetaWaylandPopupGrab*)grab;
+
+ /* Popup grabs are in owner-events mode (ie, events for the same client
+ are reported as normal) */
+ if (surface &&
+ wl_resource_get_client (surface->resource) == popup_grab->grab_client)
+ meta_wayland_pointer_set_focus (grab->pointer, surface);
+ else
+ meta_wayland_pointer_set_focus (grab->pointer, NULL);
+}
+
+static void
+popup_grab_motion (MetaWaylandPointerGrab *grab,
+ const ClutterEvent *event)
+{
+ meta_wayland_pointer_send_motion (grab->pointer, event);
+}
+
+static void
+popup_grab_button (MetaWaylandPointerGrab *grab,
+ const ClutterEvent *event)
+{
+ MetaWaylandPointer *pointer = grab->pointer;
+
+ if (pointer->focus_surface)
+ meta_wayland_pointer_send_button (grab->pointer, event);
+ else if (clutter_event_type (event) == CLUTTER_BUTTON_RELEASE &&
+ pointer->button_count == 0)
+ meta_wayland_pointer_end_popup_grab (grab->pointer);
+}
+
+static MetaWaylandPointerGrabInterface popup_grab_interface = {
+ popup_grab_focus,
+ popup_grab_motion,
+ popup_grab_button
+};
+
+MetaWaylandPopupGrab *
+meta_wayland_popup_grab_create (MetaWaylandPointer *pointer,
+ struct wl_client *client)
+{
+ MetaWaylandPopupGrab *grab;
+
+ grab = g_slice_new0 (MetaWaylandPopupGrab);
+ grab->generic.interface = &popup_grab_interface;
+ grab->generic.pointer = pointer;
+ grab->grab_client = client;
+ wl_list_init (&grab->all_popups);
+
+ return grab;
+}
+
+void
+meta_wayland_popup_grab_destroy (MetaWaylandPopupGrab *grab)
+{
+ g_slice_free (MetaWaylandPopupGrab, grab);
+}
+
+void
+meta_wayland_popup_grab_begin (MetaWaylandPopupGrab *grab,
+ MetaWaylandSurface *surface)
+{
+ MetaWaylandPointer *pointer = grab->generic.pointer;
+ MetaWindow *window = surface->window;
+
+ meta_wayland_pointer_start_grab (pointer, (MetaWaylandPointerGrab*)grab);
+ meta_display_begin_grab_op (window->display,
+ window->screen,
+ window,
+ META_GRAB_OP_WAYLAND_POPUP,
+ FALSE, /* pointer_already_grabbed */
+ FALSE, /* frame_action */
+ 1, /* button. XXX? */
+ 0, /* modmask */
+ meta_display_get_current_time_roundtrip (
+ window->display),
+ pointer->grab_x,
+ pointer->grab_y);
+}
+
+void
+meta_wayland_popup_grab_end (MetaWaylandPopupGrab *grab)
+{
+ MetaWaylandPopup *popup, *tmp;
+
+ g_assert (grab->generic.interface == &popup_grab_interface);
+
+ wl_list_for_each_safe (popup, tmp, &grab->all_popups, link)
+ {
+ meta_wayland_surface_popup_done (popup->surface);
+ meta_wayland_popup_destroy (popup);
+ }
+
+ {
+ MetaDisplay *display = meta_get_display ();
+ meta_display_end_grab_op (display,
+ meta_display_get_current_time_roundtrip (display));
+ }
+
+ meta_wayland_pointer_end_grab (grab->generic.pointer);
+}
+
+gboolean
+meta_wayland_pointer_grab_is_popup_grab (MetaWaylandPointerGrab *grab)
+{
+ return grab->interface == &popup_grab_interface;
+}
+
+void
+meta_wayland_popup_destroy (MetaWaylandPopup *popup)
+{
+ wl_list_remove (&popup->surface_destroy_listener.link);
+ wl_list_remove (&popup->link);
+ g_slice_free (MetaWaylandPopup, popup);
+}
+
+void
+meta_wayland_popup_dismiss (MetaWaylandPopup *popup)
+{
+ MetaWaylandPopupGrab *popup_grab = popup->grab;
+
+ meta_wayland_popup_destroy (popup);
+
+ if (wl_list_empty (&popup_grab->all_popups))
+ meta_wayland_pointer_end_popup_grab (popup_grab->generic.pointer);
+}
+
+static void
+on_popup_surface_destroy (struct wl_listener *listener,
+ void *data)
+{
+ MetaWaylandPopup *popup =
+ wl_container_of (listener, popup, surface_destroy_listener);
+
+ meta_wayland_popup_dismiss (popup);
+}
+
+MetaWaylandPopup *
+meta_wayland_popup_create (MetaWaylandSurface *surface,
+ MetaWaylandPopupGrab *grab)
+{
+ MetaWaylandPopup *popup;
+
+ /* Don't allow creating popups if the grab has a different client. */
+ if (grab->grab_client != wl_resource_get_client (surface->resource))
+ return NULL;
+
+ popup = g_slice_new0 (MetaWaylandPopup);
+ popup->grab = grab;
+ popup->surface = surface;
+ popup->surface_destroy_listener.notify = on_popup_surface_destroy;
+
+ if (surface->xdg_popup)
+ {
+ wl_resource_add_destroy_listener (surface->xdg_popup,
+ &popup->surface_destroy_listener);
+ }
+ else if (surface->wl_shell_surface)
+ {
+ wl_resource_add_destroy_listener (surface->wl_shell_surface,
+ &popup->surface_destroy_listener);
+ }
+
+ wl_list_insert (&grab->all_popups, &popup->link);
+
+ return popup;
+}
diff --git a/src/wayland/meta-wayland-popup.h b/src/wayland/meta-wayland-popup.h
new file mode 100644
index 0000000..bba6d56
--- /dev/null
+++ b/src/wayland/meta-wayland-popup.h
@@ -0,0 +1,49 @@
+/*
+ * Wayland Support
+ *
+ * Copyright (C) 2013 Intel Corporation
+ * Copyright (C) 2015 Red Hat, Inc.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef META_WAYLAND_POPUP_H
+#define META_WAYLAND_POPUP_H
+
+#include <glib.h>
+#include <wayland-server.h>
+
+#include "meta-wayland-types.h"
+#include "meta-wayland-pointer.h"
+
+MetaWaylandPopupGrab *meta_wayland_popup_grab_create (MetaWaylandPointer *pointer,
+ struct wl_client *client);
+
+void meta_wayland_popup_grab_destroy (MetaWaylandPopupGrab *grab);
+
+void meta_wayland_popup_grab_begin (MetaWaylandPopupGrab *grab,
+ MetaWaylandSurface *surface);
+
+void meta_wayland_popup_grab_end (MetaWaylandPopupGrab *grab);
+
+gboolean meta_wayland_pointer_grab_is_popup_grab (MetaWaylandPointerGrab *grab);
+
+MetaWaylandPopup *meta_wayland_popup_create (MetaWaylandSurface *surface,
+ MetaWaylandPopupGrab *grab);
+
+void meta_wayland_popup_destroy (MetaWaylandPopup *popup);
+
+void meta_wayland_popup_dismiss (MetaWaylandPopup *popup);
+
+#endif /* META_WAYLAND_POPUP_H */
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index 7089cc4..b7c888d 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -40,6 +40,7 @@
#include "meta-wayland-seat.h"
#include "meta-wayland-keyboard.h"
#include "meta-wayland-pointer.h"
+#include "meta-wayland-popup.h"
#include "meta-wayland-data-device.h"
#include "meta-cursor-tracker-private.h"
diff --git a/src/wayland/meta-wayland-types.h b/src/wayland/meta-wayland-types.h
index f28a34d..9713f1e 100644
--- a/src/wayland/meta-wayland-types.h
+++ b/src/wayland/meta-wayland-types.h
@@ -26,6 +26,8 @@ typedef struct _MetaWaylandSeat MetaWaylandSeat;
typedef struct _MetaWaylandPointer MetaWaylandPointer;
typedef struct _MetaWaylandPointerGrab MetaWaylandPointerGrab;
typedef struct _MetaWaylandPointerGrabInterface MetaWaylandPointerGrabInterface;
+typedef struct _MetaWaylandPopupGrab MetaWaylandPopupGrab;
+typedef struct _MetaWaylandPopup MetaWaylandPopup;
typedef struct _MetaWaylandKeyboard MetaWaylandKeyboard;
typedef struct _MetaWaylandTouch MetaWaylandTouch;
typedef struct _MetaWaylandDataSource MetaWaylandDataSource;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]