struct wl_list global_listener_list;
struct wl_list global_list;
- struct wl_visual *argb_visual;
- struct wl_visual *premultiplied_argb_visual;
- struct wl_visual *rgb_visual;
-
wl_display_update_func_t update;
void *update_data;
wl_closure_destroy(closure);
}
-static void
-add_visual(struct wl_display *display, uint32_t id)
-{
- struct wl_visual *visual;
-
- visual = (struct wl_visual *)
- wl_proxy_create_for_id(display, &wl_visual_interface, id);
- if (display->argb_visual == NULL)
- display->argb_visual = visual;
- else if (display->premultiplied_argb_visual == NULL)
- display->premultiplied_argb_visual = visual;
- else
- display->rgb_visual = visual;
-}
-
-WL_EXPORT struct wl_visual *
-wl_display_get_argb_visual(struct wl_display *display)
-{
- return display->argb_visual;
-}
-
-WL_EXPORT struct wl_visual *
-wl_display_get_premultiplied_argb_visual(struct wl_display *display)
-{
- return display->premultiplied_argb_visual;
-}
-
-WL_EXPORT struct wl_visual *
-wl_display_get_rgb_visual(struct wl_display *display)
-{
- return display->rgb_visual;
-}
-
/* Can't do this, there may be more than one instance of an
* interface... */
WL_EXPORT uint32_t
if (strcmp(interface, "wl_display") == 0)
wl_hash_table_insert(display->objects,
id, &display->proxy.object);
- else if (strcmp(interface, "wl_visual") == 0)
- add_visual(display, id);
global = malloc(sizeof *global);
global->id = id;
return 0;
}
+static void
+compositor_bind(struct wl_client *client,
+ struct wl_object *global, uint32_t version)
+{
+ struct wl_compositor *compositor =
+ container_of(global, struct wl_compositor, object);
+
+ wl_client_post_event(client, global,
+ WL_COMPOSITOR_TOKEN_VISUAL,
+ &compositor->argb_visual.object,
+ WL_COMPOSITOR_VISUAL_ARGB32);
+
+ wl_client_post_event(client, global,
+ WL_COMPOSITOR_TOKEN_VISUAL,
+ &compositor->premultiplied_argb_visual.object,
+ WL_COMPOSITOR_VISUAL_PREMULTIPLIED_ARGB32);
+
+ wl_client_post_event(client, global,
+ WL_COMPOSITOR_TOKEN_VISUAL,
+ &compositor->rgb_visual.object,
+ WL_COMPOSITOR_VISUAL_XRGB32);
+}
+
WL_EXPORT int
wl_compositor_init(struct wl_compositor *compositor,
const struct wl_compositor_interface *interface,
compositor->object.interface = &wl_compositor_interface;
compositor->object.implementation = (void (**)(void)) interface;
wl_display_add_object(display, &compositor->object);
- if (wl_display_add_global(display, &compositor->object, NULL))
+ if (wl_display_add_global(display,
+ &compositor->object, compositor_bind))
return -1;
compositor->argb_visual.object.interface = &wl_visual_interface;
compositor->argb_visual.object.implementation = NULL;
wl_display_add_object(display, &compositor->argb_visual.object);
- if (wl_display_add_global(display, &compositor->argb_visual.object, NULL))
+ if (wl_display_add_global(display,
+ &compositor->argb_visual.object, NULL))
return -1;
compositor->premultiplied_argb_visual.object.interface =
compositor->premultiplied_argb_visual.object.implementation = NULL;
wl_display_add_object(display,
&compositor->premultiplied_argb_visual.object);
- if (wl_display_add_global(display,
- &compositor->premultiplied_argb_visual.object,
- NULL))
- return -1;
+ if (wl_display_add_global(display,
+ &compositor->premultiplied_argb_visual.object,
+ NULL))
+ return -1;
compositor->rgb_visual.object.interface = &wl_visual_interface;
compositor->rgb_visual.object.implementation = NULL;
- wl_display_add_object(display,
- &compositor->rgb_visual.object);
- if (wl_display_add_global(display,
- &compositor->rgb_visual.object, NULL))
- return -1;
+ wl_display_add_object(display, &compositor->rgb_visual.object);
+ if (wl_display_add_global(display,
+ &compositor->rgb_visual.object, NULL))
+ return -1;
return 0;
}