|  |  |  | @ -12,7 +12,7 @@ | 
			
		
	
		
			
				
					|  |  |  |  | static void destroy_inhibitor(struct sway_idle_inhibitor_v1 *inhibitor) { | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_list_remove(&inhibitor->link); | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_list_remove(&inhibitor->destroy.link); | 
			
		
	
		
			
				
					|  |  |  |  | 	sway_idle_inhibit_v1_check_active(inhibitor->manager); | 
			
		
	
		
			
				
					|  |  |  |  | 	sway_idle_inhibit_v1_check_active(); | 
			
		
	
		
			
				
					|  |  |  |  | 	free(inhibitor); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -35,7 +35,6 @@ void handle_idle_inhibitor_v1(struct wl_listener *listener, void *data) { | 
			
		
	
		
			
				
					|  |  |  |  | 		return; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	inhibitor->manager = manager; | 
			
		
	
		
			
				
					|  |  |  |  | 	inhibitor->mode = INHIBIT_IDLE_APPLICATION; | 
			
		
	
		
			
				
					|  |  |  |  | 	inhibitor->wlr_inhibitor = wlr_inhibitor; | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_list_insert(&manager->inhibitors, &inhibitor->link); | 
			
		
	
	
		
			
				
					|  |  |  | @ -43,33 +42,34 @@ void handle_idle_inhibitor_v1(struct wl_listener *listener, void *data) { | 
			
		
	
		
			
				
					|  |  |  |  | 	inhibitor->destroy.notify = handle_destroy; | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_signal_add(&wlr_inhibitor->events.destroy, &inhibitor->destroy); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	sway_idle_inhibit_v1_check_active(manager); | 
			
		
	
		
			
				
					|  |  |  |  | 	sway_idle_inhibit_v1_check_active(); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void sway_idle_inhibit_v1_user_inhibitor_register(struct sway_view *view, | 
			
		
	
		
			
				
					|  |  |  |  | 		enum sway_idle_inhibit_mode mode) { | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_idle_inhibit_manager_v1 *manager = &server.idle_inhibit_manager_v1; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_idle_inhibitor_v1 *inhibitor = | 
			
		
	
		
			
				
					|  |  |  |  | 		calloc(1, sizeof(struct sway_idle_inhibitor_v1)); | 
			
		
	
		
			
				
					|  |  |  |  | 	if (!inhibitor) { | 
			
		
	
		
			
				
					|  |  |  |  | 		return; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	inhibitor->manager = server.idle_inhibit_manager_v1; | 
			
		
	
		
			
				
					|  |  |  |  | 	inhibitor->mode = mode; | 
			
		
	
		
			
				
					|  |  |  |  | 	inhibitor->view = view; | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_list_insert(&inhibitor->manager->inhibitors, &inhibitor->link); | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_list_insert(&manager->inhibitors, &inhibitor->link); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	inhibitor->destroy.notify = handle_destroy; | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_signal_add(&view->events.unmap, &inhibitor->destroy); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	sway_idle_inhibit_v1_check_active(inhibitor->manager); | 
			
		
	
		
			
				
					|  |  |  |  | 	sway_idle_inhibit_v1_check_active(); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | struct sway_idle_inhibitor_v1 *sway_idle_inhibit_v1_user_inhibitor_for_view( | 
			
		
	
		
			
				
					|  |  |  |  | 		struct sway_view *view) { | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_idle_inhibit_manager_v1 *manager = &server.idle_inhibit_manager_v1; | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_idle_inhibitor_v1 *inhibitor; | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_list_for_each(inhibitor, &server.idle_inhibit_manager_v1->inhibitors, | 
			
		
	
		
			
				
					|  |  |  |  | 			link) { | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_list_for_each(inhibitor, &manager->inhibitors, link) { | 
			
		
	
		
			
				
					|  |  |  |  | 		if (inhibitor->mode != INHIBIT_IDLE_APPLICATION && | 
			
		
	
		
			
				
					|  |  |  |  | 				inhibitor->view == view) { | 
			
		
	
		
			
				
					|  |  |  |  | 			return inhibitor; | 
			
		
	
	
		
			
				
					|  |  |  | @ -80,9 +80,9 @@ struct sway_idle_inhibitor_v1 *sway_idle_inhibit_v1_user_inhibitor_for_view( | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | struct sway_idle_inhibitor_v1 *sway_idle_inhibit_v1_application_inhibitor_for_view( | 
			
		
	
		
			
				
					|  |  |  |  | 		struct sway_view *view) { | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_idle_inhibit_manager_v1 *manager = &server.idle_inhibit_manager_v1; | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_idle_inhibitor_v1 *inhibitor; | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_list_for_each(inhibitor, &server.idle_inhibit_manager_v1->inhibitors, | 
			
		
	
		
			
				
					|  |  |  |  | 			link) { | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_list_for_each(inhibitor, &manager->inhibitors, link) { | 
			
		
	
		
			
				
					|  |  |  |  | 		if (inhibitor->mode == INHIBIT_IDLE_APPLICATION && | 
			
		
	
		
			
				
					|  |  |  |  | 				view_from_wlr_surface(inhibitor->wlr_inhibitor->surface) == view) { | 
			
		
	
		
			
				
					|  |  |  |  | 			return inhibitor; | 
			
		
	
	
		
			
				
					|  |  |  | @ -131,8 +131,8 @@ bool sway_idle_inhibit_v1_is_active(struct sway_idle_inhibitor_v1 *inhibitor) { | 
			
		
	
		
			
				
					|  |  |  |  | 	return false; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void sway_idle_inhibit_v1_check_active( | 
			
		
	
		
			
				
					|  |  |  |  | 		struct sway_idle_inhibit_manager_v1 *manager) { | 
			
		
	
		
			
				
					|  |  |  |  | void sway_idle_inhibit_v1_check_active(void) { | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_idle_inhibit_manager_v1 *manager = &server.idle_inhibit_manager_v1; | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_idle_inhibitor_v1 *inhibitor; | 
			
		
	
		
			
				
					|  |  |  |  | 	bool inhibited = false; | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_list_for_each(inhibitor, &manager->inhibitors, link) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -140,28 +140,22 @@ void sway_idle_inhibit_v1_check_active( | 
			
		
	
		
			
				
					|  |  |  |  | 			break; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	wlr_idle_set_enabled(manager->idle, NULL, !inhibited); | 
			
		
	
		
			
				
					|  |  |  |  | 	wlr_idle_set_enabled(server.idle, NULL, !inhibited); | 
			
		
	
		
			
				
					|  |  |  |  | 	wlr_idle_notifier_v1_set_inhibited(server.idle_notifier_v1, inhibited); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | struct sway_idle_inhibit_manager_v1 *sway_idle_inhibit_manager_v1_create( | 
			
		
	
		
			
				
					|  |  |  |  | 		struct wl_display *wl_display, struct wlr_idle *idle) { | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_idle_inhibit_manager_v1 *manager = | 
			
		
	
		
			
				
					|  |  |  |  | 		calloc(1, sizeof(struct sway_idle_inhibit_manager_v1)); | 
			
		
	
		
			
				
					|  |  |  |  | 	if (!manager) { | 
			
		
	
		
			
				
					|  |  |  |  | 		return NULL; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | bool sway_idle_inhibit_manager_v1_init(void) { | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_idle_inhibit_manager_v1 *manager = &server.idle_inhibit_manager_v1; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	manager->wlr_manager = wlr_idle_inhibit_v1_create(wl_display); | 
			
		
	
		
			
				
					|  |  |  |  | 	manager->wlr_manager = wlr_idle_inhibit_v1_create(server.wl_display); | 
			
		
	
		
			
				
					|  |  |  |  | 	if (!manager->wlr_manager) { | 
			
		
	
		
			
				
					|  |  |  |  | 		free(manager); | 
			
		
	
		
			
				
					|  |  |  |  | 		return NULL; | 
			
		
	
		
			
				
					|  |  |  |  | 		return false; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	manager->idle = idle; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_signal_add(&manager->wlr_manager->events.new_inhibitor, | 
			
		
	
		
			
				
					|  |  |  |  | 		&manager->new_idle_inhibitor_v1); | 
			
		
	
		
			
				
					|  |  |  |  | 	manager->new_idle_inhibitor_v1.notify = handle_idle_inhibitor_v1; | 
			
		
	
		
			
				
					|  |  |  |  | 	wl_list_init(&manager->inhibitors); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	return manager; | 
			
		
	
		
			
				
					|  |  |  |  | 	return true; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |