@ -13,17 +13,19 @@ static const struct zwp_idle_inhibit_manager_v1_interface idle_inhibit_impl;
static const struct zwp_idle_inhibitor_v1_interface idle_inhibitor_impl ;
static struct wlr_idle_inhibit_manager_v1 *
wlr_idle_inhibit_manager_v1_from_resource ( struct wl_resource * resource ) {
assert ( wl_resource_instance_of ( resource , & zwp_idle_inhibit_manager_v1_interface ,
wlr_idle_inhibit_manager_v1_from_resource ( struct wl_resource * manager_resource ) {
assert ( wl_resource_instance_of ( manager_resource ,
& zwp_idle_inhibit_manager_v1_interface ,
& idle_inhibit_impl ) ) ;
return wl_resource_get_user_data ( resource) ;
return wl_resource_get_user_data ( manager_ resource) ;
}
static struct wlr_idle_inhibitor_v1 *
wlr_idle_inhibitor_v1_from_resource ( struct wl_resource * resource ) {
assert ( wl_resource_instance_of ( resource , & zwp_idle_inhibitor_v1_interface ,
wlr_idle_inhibitor_v1_from_resource ( struct wl_resource * inhibitor_resource ) {
assert ( wl_resource_instance_of ( inhibitor_resource ,
& zwp_idle_inhibitor_v1_interface ,
& idle_inhibitor_impl ) ) ;
return wl_resource_get_user_data ( resource) ;
return wl_resource_get_user_data ( inhibitor_ resource) ;
}
static void idle_inhibitor_v1_destroy ( struct wlr_idle_inhibitor_v1 * inhibitor ) {
@ -39,9 +41,10 @@ static void idle_inhibitor_v1_destroy(struct wlr_idle_inhibitor_v1 *inhibitor) {
free ( inhibitor ) ;
}
static void idle_inhibitor_v1_handle_resource_destroy ( struct wl_resource * resource ) {
static void idle_inhibitor_v1_handle_resource_destroy (
struct wl_resource * inhibitor_resource ) {
struct wlr_idle_inhibitor_v1 * inhibitor =
wlr_idle_inhibitor_v1_from_resource ( resource) ;
wlr_idle_inhibitor_v1_from_resource ( inhibitor_ resource) ;
idle_inhibitor_v1_destroy ( inhibitor ) ;
}
@ -53,8 +56,8 @@ static void idle_inhibitor_handle_surface_destroy(
}
static void idle_inhibitor_v1_handle_destroy ( struct wl_client * client ,
struct wl_resource * manage r_resource) {
wl_resource_destroy ( manage r_resource) ;
struct wl_resource * inhibito r_resource) {
wl_resource_destroy ( inhibito r_resource) ;
}
static const struct zwp_idle_inhibitor_v1_interface idle_inhibitor_impl = {
@ -62,11 +65,11 @@ static const struct zwp_idle_inhibitor_v1_interface idle_inhibitor_impl = {
} ;
static void manager_handle_create_inhibitor ( struct wl_client * client ,
struct wl_resource * resource, uint32_t id ,
struct wl_resource * manager_ resource, uint32_t id ,
struct wl_resource * surface_resource ) {
struct wlr_surface * surface = wlr_surface_from_resource ( surface_resource ) ;
struct wlr_idle_inhibit_manager_v1 * manager =
wlr_idle_inhibit_manager_v1_from_resource ( resource) ;
wlr_idle_inhibit_manager_v1_from_resource ( manager_ resource) ;
struct wlr_idle_inhibitor_v1 * inhibitor =
calloc ( 1 , sizeof ( struct wlr_idle_inhibitor_v1 ) ) ;
@ -75,23 +78,23 @@ static void manager_handle_create_inhibitor(struct wl_client *client,
return ;
}
struct wl_resource * wl_resource = wl_resource_create ( client ,
& zwp_idle_inhibitor_v1_interface , 1 , id ) ;
if ( ! wl_resource ) {
uint32_t version = wl_resource_get_version ( manager_resource ) ;
struct wl_resource * inhibitor_resource = wl_resource_create ( client ,
& zwp_idle_inhibitor_v1_interface , version , id ) ;
if ( ! inhibitor_resource ) {
wl_client_post_no_memory ( client ) ;
free ( inhibitor ) ;
return ;
}
inhibitor - > resource = wl _resource;
inhibitor - > resource = inhibitor _resource;
inhibitor - > surface = surface ;
wl_signal_init ( & inhibitor - > events . destroy ) ;
inhibitor - > surface_destroy . notify = idle_inhibitor_handle_surface_destroy ;
wl_signal_add ( & surface - > events . destroy , & inhibitor - > surface_destroy ) ;
wl_resource_set_implementation ( wl_resource , & idle_inhibitor_impl ,
wl_resource_set_implementation ( inhibitor_resource , & idle_inhibitor_impl ,
inhibitor , idle_inhibitor_v1_handle_resource_destroy ) ;
wl_list_insert ( & manager - > inhibitors , & inhibitor - > link ) ;
@ -109,50 +112,50 @@ static const struct zwp_idle_inhibit_manager_v1_interface idle_inhibit_impl = {
} ;
static void handle_display_destroy ( struct wl_listener * listener , void * data ) {
struct wlr_idle_inhibit_manager_v1 * idle_inhibit =
wl_container_of ( listener , idle_inhibit , display_destroy ) ;
wlr_signal_emit_safe ( & idle_inhibit- > events . destroy , idle_inhibit ) ;
wl_list_remove ( & idle_inhibit - > display_destroy . link ) ;
wl_global_destroy ( idle_inhibit - > global ) ;
free ( idle_inhibit ) ;
struct wlr_idle_inhibit_manager_v1 * manager =
wl_container_of ( listener , manager , display_destroy ) ;
wlr_signal_emit_safe ( & manager- > events . destroy , manager ) ;
wl_list_remove ( & manager - > display_destroy . link ) ;
wl_global_destroy ( manager - > global ) ;
free ( manager ) ;
}
static void idle_inhibit_bind ( struct wl_client * wl_client , void * data ,
uint32_t version , uint32_t id ) {
struct wlr_idle_inhibit_manager_v1 * idle_inhibit = data ;
struct wlr_idle_inhibit_manager_v1 * manager = data ;
struct wl_resource * wl _resource = wl_resource_create ( wl_client ,
struct wl_resource * manager _resource = wl_resource_create ( wl_client ,
& zwp_idle_inhibit_manager_v1_interface , version , id ) ;
if ( ! wl _resource) {
if ( ! manager _resource) {
wl_client_post_no_memory ( wl_client ) ;
return ;
}
wl_resource_set_implementation ( wl _resource, & idle_inhibit_impl ,
idle_inhibit , NULL ) ;
wl_resource_set_implementation ( manager _resource, & idle_inhibit_impl ,
manager , NULL ) ;
}
struct wlr_idle_inhibit_manager_v1 * wlr_idle_inhibit_v1_create ( struct wl_display * display ) {
struct wlr_idle_inhibit_manager_v1 * idle_inhibit =
struct wlr_idle_inhibit_manager_v1 * manager =
calloc ( 1 , sizeof ( struct wlr_idle_inhibit_manager_v1 ) ) ;
if ( ! idle_inhibit ) {
if ( ! manager ) {
return NULL ;
}
wl_list_init ( & idle_inhibit - > inhibitors ) ;
wl_signal_init ( & idle_inhibit - > events . new_inhibitor ) ;
wl_signal_init ( & idle_inhibit - > events . destroy ) ;
wl_list_init ( & manager - > inhibitors ) ;
wl_signal_init ( & manager - > events . new_inhibitor ) ;
wl_signal_init ( & manager - > events . destroy ) ;
idle_inhibit - > global = wl_global_create ( display ,
manager - > global = wl_global_create ( display ,
& zwp_idle_inhibit_manager_v1_interface , 1 ,
idle_inhibit , idle_inhibit_bind ) ;
if ( ! idle_inhibit - > global ) {
free ( idle_inhibit ) ;
manager , idle_inhibit_bind ) ;
if ( ! manager - > global ) {
free ( manager ) ;
return NULL ;
}
idle_inhibit - > display_destroy . notify = handle_display_destroy ;
wl_display_add_destroy_listener ( display , & idle_inhibit - > display_destroy ) ;
manager - > display_destroy . notify = handle_display_destroy ;
wl_display_add_destroy_listener ( display , & manager - > display_destroy ) ;
return idle_inhibit ;
return manager ;
}