• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdio.h>
2 #include <string.h>
3 #include <wayland-client.h>
4 #include <screen-info-client-protocol.h>
5 
6 struct display {
7     struct wl_display *display;
8     struct wl_registry *registry;
9     struct screen_info_module* lm;
10 };
11 
12 static int running = 1;
13 
lminfo(void * data,struct screen_info_module * lm,uint32_t number)14 void lminfo(void *data, struct screen_info_module *lm, uint32_t number)
15 {
16     printf("lminfo: %d\n", number);
17     running = 0;
18 }
19 
20 struct screen_info_module_listener lmlistener = {lminfo};
21 
22 static void
registry_handle_global(void * data,struct wl_registry * registry,uint32_t id,const char * interface,uint32_t version)23 registry_handle_global(void *data, struct wl_registry *registry,
24                uint32_t id, const char *interface, uint32_t version)
25 {
26     struct display *d = data;
27 
28     if (strcmp(interface, "screen_info_module") == 0) {
29         d->lm = wl_registry_bind(registry, id, &screen_info_module_interface, 1);
30         screen_info_module_add_listener(d->lm, &lmlistener, d);
31         screen_info_module_get(d->lm);
32     }
33 }
34 
35 static void
registry_handle_global_remove(void * a,struct wl_registry * b,uint32_t c)36 registry_handle_global_remove(void *a, struct wl_registry *b, uint32_t c)
37 {
38 }
39 
40 static const struct wl_registry_listener registry_listener = {
41     registry_handle_global,
42     registry_handle_global_remove
43 };
44 
45 int
main(int argc,char ** argv)46 main(int argc, char **argv)
47 {
48     int ret = 0;
49     struct display d;
50 
51     d.display = wl_display_connect(NULL);
52     if (!d.display) {
53         printf("wl_display_connect failed\n");
54         return 1;
55     }
56 
57     d.registry = wl_display_get_registry(d.display);
58     wl_registry_add_listener(d.registry, &registry_listener, &d);
59     wl_display_roundtrip(d.display);
60     wl_display_roundtrip(d.display);
61 
62     while (running && ret != -1)
63         ret = wl_display_dispatch(d.display);
64 
65     if (d.lm)
66         screen_info_module_destroy(d.lm);
67 
68     wl_registry_destroy(d.registry);
69     wl_display_flush(d.display);
70     wl_display_disconnect(d.display);
71     return 0;
72 }
73