gimp but for windows: a wayland compositor
git clone https://github.com/m-col/wimp
Files | Refs | Readme

-rw-r--r-- src/decorations.c


      1 #include "decorations.h"
      2 
      3 
      4 struct decoration {
      5     struct wlr_xdg_toplevel_decoration_v1 *wlr_xdg_decoration;
      6     struct wl_listener destroy_listener;
      7     struct wl_listener request_mode_listener;
      8 };
      9 
     10 
     11 static void on_destroy(struct wl_listener *listener, void *data) {
     12     struct decoration *deco = wl_container_of(listener, deco, destroy_listener);
     13     wl_list_remove(&deco->destroy_listener.link);
     14     wl_list_remove(&deco->request_mode_listener.link);
     15     free(deco);
     16 }
     17 
     18 
     19 static void on_request_mode(struct wl_listener *listener, void *data) {
     20     struct decoration *deco = wl_container_of(listener, deco, request_mode_listener);
     21     wlr_xdg_toplevel_decoration_v1_set_mode(
     22 	deco->wlr_xdg_decoration, WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE
     23     );
     24 }
     25 
     26 
     27 static void on_new_decoration(struct wl_listener *listener, void *data) {
     28     struct wlr_xdg_toplevel_decoration_v1 *wlr_deco = data;
     29 
     30     struct decoration *deco = calloc(1, sizeof(struct decoration));
     31     if (deco == NULL) {
     32 	return;
     33     }
     34 
     35     deco->wlr_xdg_decoration = wlr_deco;
     36 
     37     wl_signal_add(&wlr_deco->events.destroy, &deco->destroy_listener);
     38     deco->destroy_listener.notify = on_destroy;
     39 
     40     wl_signal_add(&wlr_deco->events.request_mode, &deco->request_mode_listener);
     41     deco->request_mode_listener.notify = on_request_mode;
     42 
     43     wlr_xdg_toplevel_decoration_v1_set_mode(
     44 	wlr_deco, WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE
     45     );
     46 }
     47 
     48 
     49 void set_up_decorations() {
     50     // xdg_decoration
     51     wimp.decoration_manager = wlr_xdg_decoration_manager_v1_create(wimp.display);
     52 
     53     wimp.decoration_listener.notify = on_new_decoration;
     54     wl_signal_add(
     55         &wimp.decoration_manager->events.new_toplevel_decoration,
     56         &wimp.decoration_listener
     57     );
     58 
     59     // server_decoration
     60     wimp.server_decoration_manager = wlr_server_decoration_manager_create(wimp.display);
     61     wlr_server_decoration_manager_set_default_mode(
     62 	wimp.server_decoration_manager,
     63 	WLR_SERVER_DECORATION_MANAGER_MODE_SERVER
     64     );
     65 }
     66