diff options
author | Kristian Høgsberg <krh@redhat.com> | 2008-11-07 14:27:23 -0500 |
---|---|---|
committer | Kristian Høgsberg <krh@redhat.com> | 2008-11-07 14:27:23 -0500 |
commit | fb59084fbf03b738276579e121defcc6a586301d (patch) | |
tree | c61fd19f2c181a0c00c4c3e2619a29f7f69ff2dc /wayland-client.c | |
parent | 7f77bd8fbedee8a8a1fbb26776084ccaffc2a087 (diff) |
Add glib main loop integration, use it in flower client.
Diffstat (limited to 'wayland-client.c')
-rw-r--r-- | wayland-client.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/wayland-client.c b/wayland-client.c index 8503a30..005954b 100644 --- a/wayland-client.c +++ b/wayland-client.c @@ -25,6 +25,10 @@ struct wl_display { struct wl_connection *connection; int fd; uint32_t id; + uint32_t mask; + + wl_display_update_func_t update; + void *update_data; wl_display_event_func_t event_handler; void *event_handler_data; @@ -34,9 +38,22 @@ struct wl_surface { struct wl_proxy proxy; }; +static int +connection_update(struct wl_connection *connection, + uint32_t mask, void *data) +{ + struct wl_display *display = data; + + display->mask = mask; + if (display->update) + return display->update(display->mask, + display->update_data); + + return 0; +} + struct wl_display * -wl_display_create(const char *address, - wl_connection_update_func_t update, void *data) +wl_display_create(const char *address) { struct wl_display *display; struct sockaddr_un name; @@ -79,7 +96,8 @@ wl_display_create(const char *address, display->proxy.id = id; display->connection = wl_connection_create(display->fd, - update, data); + connection_update, + display); return display; } @@ -93,8 +111,14 @@ wl_display_destroy(struct wl_display *display) } int -wl_display_get_fd(struct wl_display *display) +wl_display_get_fd(struct wl_display *display, + wl_display_update_func_t update, void *data) { + display->update = update; + display->update_data = data; + + display->update(display->mask, display->update_data); + return display->fd; } |