-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