add monitor destroy listener
This commit is contained in:
		
							
								
								
									
										18
									
								
								dwl.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								dwl.c
									
									
									
									
									
								
							| @@ -110,6 +110,7 @@ struct Monitor { | ||||
| 	struct wl_list link; | ||||
| 	struct wlr_output *wlr_output; | ||||
| 	struct wl_listener frame; | ||||
| 	struct wl_listener destroy; | ||||
| 	struct wlr_box m;      /* monitor area, layout-relative */ | ||||
| 	struct wlr_box w;      /* window area, layout-relative */ | ||||
| 	const Layout *lt[2]; | ||||
| @@ -152,6 +153,7 @@ static void arrange(Monitor *m); | ||||
| static void axisnotify(struct wl_listener *listener, void *data); | ||||
| static void buttonpress(struct wl_listener *listener, void *data); | ||||
| static void chvt(const Arg *arg); | ||||
| static void cleanupmon(struct wl_listener *listener, void *data); | ||||
| static void createkeyboard(struct wlr_input_device *device); | ||||
| static void createmon(struct wl_listener *listener, void *data); | ||||
| static void createnotify(struct wl_listener *listener, void *data); | ||||
| @@ -393,6 +395,16 @@ chvt(const Arg *arg) | ||||
| 	wlr_session_change_vt(s, arg->ui); | ||||
| } | ||||
|  | ||||
| void | ||||
| cleanupmon(struct wl_listener *listener, void *data) | ||||
| { | ||||
| 	struct wlr_output *wlr_output = data; | ||||
| 	Monitor *m = wlr_output->data; | ||||
|  | ||||
| 	wl_list_remove(&m->destroy.link); | ||||
| 	free(m); | ||||
| } | ||||
|  | ||||
| void | ||||
| createkeyboard(struct wlr_input_device *device) | ||||
| { | ||||
| @@ -455,11 +467,15 @@ createmon(struct wl_listener *listener, void *data) | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| 	/* Sets up a listener for the frame notify event. */ | ||||
| 	/* Set up event listeners */ | ||||
| 	m->frame.notify = rendermon; | ||||
| 	wl_signal_add(&wlr_output->events.frame, &m->frame); | ||||
| 	wl_list_insert(&mons, &m->link); | ||||
|  | ||||
| 	m->destroy.notify = cleanupmon; | ||||
| 	wl_signal_add(&wlr_output->events.destroy, &m->destroy); | ||||
| 	wl_list_insert(&mons, &m->link); | ||||
|  | ||||
| 	wlr_output_enable(wlr_output, 1); | ||||
| 	if (!wlr_output_commit(wlr_output)) | ||||
| 		return; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user