diff options
Diffstat (limited to 'src/wayland-server.h')
-rw-r--r-- | src/wayland-server.h | 60 |
1 files changed, 45 insertions, 15 deletions
diff --git a/src/wayland-server.h b/src/wayland-server.h index 4b34547..3090032 100644 --- a/src/wayland-server.h +++ b/src/wayland-server.h @@ -114,11 +114,53 @@ wl_client_new_object(struct wl_client *client, const struct wl_interface *interface, const void *implementation, void *data); +struct wl_listener { + struct wl_list link; + void (*notify)(struct wl_listener *listener, void *data); +}; + +struct wl_signal { + struct wl_list listener_list; +}; + +static inline void +wl_signal_init(struct wl_signal *signal) +{ + wl_list_init(&signal->listener_list); +} + +static inline void +wl_signal_add(struct wl_signal *signal, struct wl_listener *listener) +{ + wl_list_insert(signal->listener_list.prev, &listener->link); +} + +static inline struct wl_listener * +wl_signal_get(struct wl_signal *signal, void *notify) +{ + struct wl_listener *l; + + wl_list_for_each(l, &signal->listener_list, link) + if (l->notify == notify) + return l; + + return NULL; +} + +static inline void +wl_signal_emit(struct wl_signal *signal, void *data) +{ + struct wl_listener *l, *next; + + wl_list_for_each_safe(l, next, &signal->listener_list, link) + l->notify(l, data); +} + struct wl_resource { struct wl_object object; void (*destroy)(struct wl_resource *resource); struct wl_list link; - struct wl_list destroy_listener_list; + struct wl_signal destroy_signal; struct wl_client *client; void *data; }; @@ -129,12 +171,6 @@ struct wl_buffer { uint32_t busy_count; }; -struct wl_listener { - struct wl_list link; - void (*func)(struct wl_listener *listener, - struct wl_resource *resource); -}; - struct wl_surface { struct wl_resource resource; }; @@ -183,12 +219,6 @@ struct wl_data_source { void (*cancel)(struct wl_data_source *source); }; -struct wl_selection_listener { - void (*func)(struct wl_selection_listener *listener, - struct wl_input_device *device); - struct wl_list link; -}; - struct wl_input_device { struct wl_list resource_list; struct wl_resource *pointer_focus_resource; @@ -226,11 +256,11 @@ struct wl_input_device { struct wl_pointer_grab drag_grab; struct wl_surface *drag_surface; struct wl_listener drag_icon_listener; - struct wl_list drag_icon_listener_list; + struct wl_signal drag_icon_signal; struct wl_data_source *selection_data_source; struct wl_listener selection_data_source_listener; - struct wl_list selection_listener_list; + struct wl_signal selection_signal; }; |