summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorScott Moreau <oreaus@gmail.com>2012-10-16 20:38:41 -0600
committerRob Bradford <rob@linux.intel.com>2012-10-19 12:21:35 +0100
commite5b88f1bdd570e9f411a8be41199adceb950c61c (patch)
tree4183a8ab1024d715941e5de3e04261a8da0c1227 /gdk
parent7151b1a28a29de183105b86d114c1e55530befd9 (diff)
downloadgtk+-e5b88f1bdd570e9f411a8be41199adceb950c61c.tar.gz
wayland: Update to reflect protocol changes
Diffstat (limited to 'gdk')
-rw-r--r--gdk/wayland/gdkdevice-wayland.c1
-rw-r--r--gdk/wayland/gdkdisplay-wayland.c37
-rw-r--r--gdk/wayland/gdkdisplay-wayland.h1
-rw-r--r--gdk/wayland/gdkeventsource.c31
-rw-r--r--gdk/wayland/gdkprivate-wayland.h1
-rw-r--r--gdk/wayland/gdkwindow-wayland.c1
6 files changed, 28 insertions, 44 deletions
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 3f7091c303..cef1ddfc2c 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -183,6 +183,7 @@ gdk_device_core_set_window_cursor (GdkDevice *device,
x, y);
wl_surface_attach (wd->pointer_surface, buffer, 0, 0);
wl_surface_damage (wd->pointer_surface, 0, 0, w, h);
+ wl_surface_commit(wd->pointer_surface);
g_object_unref (cursor);
}
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index 734fd10669..a2eb8e0b08 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -96,7 +96,8 @@ static void
output_handle_geometry(void *data,
struct wl_output *wl_output,
int x, int y, int physical_width, int physical_height,
- int subpixel, const char *make, const char *model)
+ int subpixel, const char *make, const char *model,
+ int32_t transform)
{
/*
g_signal_emit_by_name (screen, "monitors-changed");
@@ -119,8 +120,8 @@ static const struct wl_output_listener output_listener = {
};
static void
-gdk_display_handle_global(struct wl_display *display, uint32_t id,
- const char *interface, uint32_t version, void *data)
+gdk_registry_handle_global(void *data, struct wl_registry *registry, uint32_t id,
+ const char *interface, uint32_t version)
{
GdkWaylandDisplay *display_wayland = data;
GdkDisplay *gdk_display = GDK_DISPLAY_OBJECT (data);
@@ -128,27 +129,29 @@ gdk_display_handle_global(struct wl_display *display, uint32_t id,
if (strcmp(interface, "wl_compositor") == 0) {
display_wayland->compositor =
- wl_display_bind(display, id, &wl_compositor_interface);
+ wl_registry_bind(display_wayland->wl_registry, id, &wl_compositor_interface, 1);
} else if (strcmp(interface, "wl_shm") == 0) {
- display_wayland->shm = wl_display_bind(display, id, &wl_shm_interface);
+ display_wayland->shm =
+ wl_registry_bind(display_wayland->wl_registry, id, &wl_shm_interface, 1);
/* SHM interface is prerequisite */
_gdk_wayland_display_load_cursor_theme(display_wayland);
} else if (strcmp(interface, "wl_shell") == 0) {
- display_wayland->shell = wl_display_bind(display, id, &wl_shell_interface);
+ display_wayland->shell =
+ wl_registry_bind(display_wayland->wl_registry, id, &wl_shell_interface, 1);
} else if (strcmp(interface, "wl_output") == 0) {
display_wayland->output =
- wl_display_bind(display, id, &wl_output_interface);
+ wl_registry_bind(display_wayland->wl_registry, id, &wl_output_interface, 1);
wl_output_add_listener(display_wayland->output,
&output_listener, display_wayland);
} else if (strcmp(interface, "wl_seat") == 0) {
- seat = wl_display_bind (display, id, &wl_seat_interface);
+ seat = wl_registry_bind(display_wayland->wl_registry, id, &wl_seat_interface, 1);
_gdk_wayland_device_manager_add_device (gdk_display->device_manager,
seat);
} else if (strcmp(interface, "wl_data_device_manager") == 0) {
display_wayland->data_device_manager =
- wl_display_bind(display, id,
- &wl_data_device_manager_interface);
+ wl_registry_bind(display_wayland->wl_registry, id,
+ &wl_data_device_manager_interface, 1);
}
}
@@ -210,6 +213,10 @@ gdk_display_init_egl(GdkDisplay *display)
}
#endif
+static const struct wl_registry_listener registry_listener = {
+ gdk_registry_handle_global
+};
+
GdkDisplay *
_gdk_wayland_display_open (const gchar *display_name)
{
@@ -231,14 +238,13 @@ _gdk_wayland_display_open (const gchar *display_name)
display->device_manager = _gdk_wayland_device_manager_new (display);
/* Set up listener so we'll catch all events. */
- wl_display_add_global_listener(display_wayland->wl_display,
- gdk_display_handle_global, display_wayland);
+ display_wayland->wl_registry = wl_display_get_registry(display_wayland->wl_display);
+ wl_registry_add_listener(display_wayland->wl_registry, &registry_listener, display_wayland);
#ifdef GDK_WAYLAND_USE_EGL
gdk_display_init_egl(display);
#else
- wl_display_iterate(wl_display, WL_DISPLAY_READABLE);
- wl_display_roundtrip(wl_display);
+ wl_display_dispatch(display_wayland->wl_display);
#endif
display_wayland->event_source =
@@ -351,8 +357,7 @@ gdk_wayland_display_flush (GdkDisplay *display)
g_return_if_fail (GDK_IS_DISPLAY (display));
if (!display->closed)
- _gdk_wayland_display_flush (display,
- GDK_WAYLAND_DISPLAY (display)->event_source);
+ wl_display_flush(GDK_WAYLAND_DISPLAY (display)->wl_display);;
}
static gboolean
diff --git a/gdk/wayland/gdkdisplay-wayland.h b/gdk/wayland/gdkdisplay-wayland.h
index c31a82b98f..5e8e76f6c0 100644
--- a/gdk/wayland/gdkdisplay-wayland.h
+++ b/gdk/wayland/gdkdisplay-wayland.h
@@ -76,6 +76,7 @@ struct _GdkWaylandDisplay
/* Wayland fields below */
struct wl_display *wl_display;
+ struct wl_registry *wl_registry;
struct wl_compositor *compositor;
struct wl_shm *shm;
struct wl_shell *shell;
diff --git a/gdk/wayland/gdkeventsource.c b/gdk/wayland/gdkeventsource.c
index f86a580295..31918f4a66 100644
--- a/gdk/wayland/gdkeventsource.c
+++ b/gdk/wayland/gdkeventsource.c
@@ -44,8 +44,7 @@ gdk_event_source_prepare(GSource *base, gint *timeout)
if (_gdk_event_queue_find_first (source->display) != NULL)
return TRUE;
- while (source->mask & WL_DISPLAY_WRITABLE)
- wl_display_iterate(display->wl_display, WL_DISPLAY_WRITABLE);
+ wl_display_flush(display->wl_display);
return FALSE;
}
@@ -97,16 +96,6 @@ static GSourceFuncs wl_glib_source_funcs = {
gdk_event_source_finalize
};
-static int
-gdk_event_source_update(uint32_t mask, void *data)
-{
- GdkWaylandEventSource *source = data;
-
- source->mask = mask;
-
- return 0;
-}
-
void
_gdk_wayland_display_deliver_event (GdkDisplay *display, GdkEvent *event)
{
@@ -134,8 +123,7 @@ _gdk_wayland_display_event_source_new (GdkDisplay *display)
display_wayland = GDK_WAYLAND_DISPLAY (display);
wl_source->display = display;
- wl_source->pfd.fd = wl_display_get_fd(display_wayland->wl_display,
- gdk_event_source_update, source);
+ wl_source->pfd.fd = wl_display_get_fd(display_wayland->wl_display);
wl_source->pfd.events = G_IO_IN | G_IO_ERR;
g_source_add_poll(source, &wl_source->pfd);
@@ -149,16 +137,6 @@ _gdk_wayland_display_event_source_new (GdkDisplay *display)
}
void
-_gdk_wayland_display_flush (GdkDisplay *display, GSource *source)
-{
- GdkWaylandEventSource *wayland_source = (GdkWaylandEventSource *) source;
-
- while (wayland_source->mask & WL_DISPLAY_WRITABLE)
- wl_display_iterate(GDK_WAYLAND_DISPLAY (display)->wl_display,
- WL_DISPLAY_WRITABLE);
-}
-
-void
_gdk_wayland_display_queue_events (GdkDisplay *display)
{
GdkWaylandDisplay *display_wayland;
@@ -166,10 +144,9 @@ _gdk_wayland_display_queue_events (GdkDisplay *display)
display_wayland = GDK_WAYLAND_DISPLAY (display);
source = (GdkWaylandEventSource *) display_wayland->event_source;
-
if (source->pfd.revents)
{
- wl_display_iterate(display_wayland->wl_display, WL_DISPLAY_READABLE);
- source->pfd.revents = 0;
+ wl_display_dispatch(display_wayland->wl_display);
+ source->pfd.revents = 0;
}
}
diff --git a/gdk/wayland/gdkprivate-wayland.h b/gdk/wayland/gdkprivate-wayland.h
index a47f4ec278..8a3161b2bb 100644
--- a/gdk/wayland/gdkprivate-wayland.h
+++ b/gdk/wayland/gdkprivate-wayland.h
@@ -137,7 +137,6 @@ GdkKeymap *_gdk_wayland_device_get_keymap (GdkDevice *device);
void _gdk_wayland_display_deliver_event (GdkDisplay *display, GdkEvent *event);
GSource *_gdk_wayland_display_event_source_new (GdkDisplay *display);
void _gdk_wayland_display_queue_events (GdkDisplay *display);
-void _gdk_wayland_display_flush (GdkDisplay *display, GSource *source);
GdkAppLaunchContext *_gdk_wayland_display_get_app_launch_context (GdkDisplay *display);
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index fad879eafd..553d0b9b7e 100644
--- a/gdk/wayland/gdkwindow-wayland.c
+++ b/gdk/wayland/gdkwindow-wayland.c
@@ -1563,6 +1563,7 @@ gdk_wayland_window_process_updates_recurse (GdkWindow *window,
cairo_region_get_rectangle (region, i, &rect);
wl_surface_damage (impl->surface,
rect.x, rect.y, rect.width, rect.height);
+ wl_surface_commit(impl->surface);
}
_gdk_window_process_updates_recurse (window, region);