| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -302,7 +302,7 @@ x11_output_set_icon(struct x11_compositor *c, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static int | 
					 | 
					 | 
					 | 
					static int | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					x11_compositor_create_output(struct x11_compositor *c, | 
					 | 
					 | 
					 | 
					x11_compositor_create_output(struct x11_compositor *c, int x, int y, | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								     int width, int height, int fullscreen) | 
					 | 
					 | 
					 | 
								     int width, int height, int fullscreen) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						static const char name[] = "Wayland Compositor"; | 
					 | 
					 | 
					 | 
						static const char name[] = "Wayland Compositor"; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -341,7 +341,7 @@ x11_compositor_create_output(struct x11_compositor *c, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						wl_list_insert(&output->base.mode_list, &output->mode.link); | 
					 | 
					 | 
					 | 
						wl_list_insert(&output->base.mode_list, &output->mode.link); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						output->base.current = &output->mode; | 
					 | 
					 | 
					 | 
						output->base.current = &output->mode; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						wlsc_output_init(&output->base, &c->base, 0, 0, width, height, | 
					 | 
					 | 
					 | 
						wlsc_output_init(&output->base, &c->base, x, y, width, height, | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								 WL_OUTPUT_FLIPPED); | 
					 | 
					 | 
					 | 
								 WL_OUTPUT_FLIPPED); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						values[1] = c->null_cursor; | 
					 | 
					 | 
					 | 
						values[1] = c->null_cursor; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -539,10 +539,11 @@ x11_compositor_handle_event(int fd, uint32_t mask, void *data) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case XCB_MOTION_NOTIFY: | 
					 | 
					 | 
					 | 
							case XCB_MOTION_NOTIFY: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								motion_notify = (xcb_motion_notify_event_t *) event; | 
					 | 
					 | 
					 | 
								motion_notify = (xcb_motion_notify_event_t *) event; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								output = x11_compositor_find_output(c, motion_notify->event); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								notify_motion(c->base.input_device, | 
					 | 
					 | 
					 | 
								notify_motion(c->base.input_device, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									      motion_notify->time, | 
					 | 
					 | 
					 | 
									      motion_notify->time, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									      motion_notify->event_x, | 
					 | 
					 | 
					 | 
									      output->base.x + motion_notify->event_x, | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									      motion_notify->event_y); | 
					 | 
					 | 
					 | 
									      output->base.y + motion_notify->event_y); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								break; | 
					 | 
					 | 
					 | 
								break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case XCB_EXPOSE: | 
					 | 
					 | 
					 | 
							case XCB_EXPOSE: | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -560,19 +561,20 @@ x11_compositor_handle_event(int fd, uint32_t mask, void *data) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								notify_pointer_focus(c->base.input_device, | 
					 | 
					 | 
					 | 
								notify_pointer_focus(c->base.input_device, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										     enter_notify->time, | 
					 | 
					 | 
					 | 
										     enter_notify->time, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										     &output->base, | 
					 | 
					 | 
					 | 
										     &output->base, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										     enter_notify->event_x, | 
					 | 
					 | 
					 | 
										     output->base.x + enter_notify->event_x, | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										     enter_notify->event_y); | 
					 | 
					 | 
					 | 
										     output->base.y + enter_notify->event_y); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								break; | 
					 | 
					 | 
					 | 
								break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case XCB_LEAVE_NOTIFY: | 
					 | 
					 | 
					 | 
							case XCB_LEAVE_NOTIFY: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								enter_notify = (xcb_enter_notify_event_t *) event; | 
					 | 
					 | 
					 | 
								enter_notify = (xcb_enter_notify_event_t *) event; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if (enter_notify->state >= Button1Mask) | 
					 | 
					 | 
					 | 
								if (enter_notify->state >= Button1Mask) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									break; | 
					 | 
					 | 
					 | 
									break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								output = x11_compositor_find_output(c, enter_notify->event); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								notify_pointer_focus(c->base.input_device, | 
					 | 
					 | 
					 | 
								notify_pointer_focus(c->base.input_device, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										     enter_notify->time, | 
					 | 
					 | 
					 | 
										     enter_notify->time, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										     NULL, | 
					 | 
					 | 
					 | 
										     NULL, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										     enter_notify->event_x, | 
					 | 
					 | 
					 | 
										     output->base.x + enter_notify->event_x, | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										     enter_notify->event_y); | 
					 | 
					 | 
					 | 
										     output->base.y + enter_notify->event_y); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								break; | 
					 | 
					 | 
					 | 
								break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case XCB_CLIENT_MESSAGE: | 
					 | 
					 | 
					 | 
							case XCB_CLIENT_MESSAGE: | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -681,11 +683,12 @@ x11_destroy(struct wlsc_compositor *ec) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static struct wlsc_compositor * | 
					 | 
					 | 
					 | 
					static struct wlsc_compositor * | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					x11_compositor_create(struct wl_display *display, | 
					 | 
					 | 
					 | 
					x11_compositor_create(struct wl_display *display, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							      int width, int height, int fullscreen) | 
					 | 
					 | 
					 | 
							      int width, int height, int count, int fullscreen) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						struct x11_compositor *c; | 
					 | 
					 | 
					 | 
						struct x11_compositor *c; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						struct wl_event_loop *loop; | 
					 | 
					 | 
					 | 
						struct wl_event_loop *loop; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						xcb_screen_iterator_t s; | 
					 | 
					 | 
					 | 
						xcb_screen_iterator_t s; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						int i, x; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						c = malloc(sizeof *c); | 
					 | 
					 | 
					 | 
						c = malloc(sizeof *c); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (c == NULL) | 
					 | 
					 | 
					 | 
						if (c == NULL) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -719,8 +722,12 @@ x11_compositor_create(struct wl_display *display, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (wlsc_compositor_init(&c->base, display) < 0) | 
					 | 
					 | 
					 | 
						if (wlsc_compositor_init(&c->base, display) < 0) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							return NULL; | 
					 | 
					 | 
					 | 
							return NULL; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (x11_compositor_create_output(c, width, height, fullscreen) < 0) | 
					 | 
					 | 
					 | 
						for (i = 0, x = 0; i < count; i++) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							if (x11_compositor_create_output(c, x, 0, width, height, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
											 fullscreen) < 0) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								return NULL; | 
					 | 
					 | 
					 | 
								return NULL; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							x += width; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (x11_input_create(c) < 0) | 
					 | 
					 | 
					 | 
						if (x11_input_create(c) < 0) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							return NULL; | 
					 | 
					 | 
					 | 
							return NULL; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -742,11 +749,11 @@ backend_init(struct wl_display *display, char *options); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					WL_EXPORT struct wlsc_compositor * | 
					 | 
					 | 
					 | 
					WL_EXPORT struct wlsc_compositor * | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					backend_init(struct wl_display *display, char *options) | 
					 | 
					 | 
					 | 
					backend_init(struct wl_display *display, char *options) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						int width = 1024, height = 640, fullscreen = 0, i; | 
					 | 
					 | 
					 | 
						int width = 1024, height = 640, fullscreen = 0, count = 1, i; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						char *p, *value; | 
					 | 
					 | 
					 | 
						char *p, *value; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						static char * const tokens[] = { | 
					 | 
					 | 
					 | 
						static char * const tokens[] = { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							"width", "height", "fullscreen", NULL | 
					 | 
					 | 
					 | 
							"width", "height", "fullscreen", "output-count", NULL | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}; | 
					 | 
					 | 
					 | 
						}; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						
 | 
					 | 
					 | 
					 | 
						
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						p = options; | 
					 | 
					 | 
					 | 
						p = options; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -761,8 +768,12 @@ backend_init(struct wl_display *display, char *options) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case 2: | 
					 | 
					 | 
					 | 
							case 2: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								fullscreen = 1; | 
					 | 
					 | 
					 | 
								fullscreen = 1; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								break; | 
					 | 
					 | 
					 | 
								break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							case 3: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								count = strtol(value, NULL, 0); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							} | 
					 | 
					 | 
					 | 
							} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						} | 
					 | 
					 | 
					 | 
						} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return x11_compositor_create(display, width, height, fullscreen); | 
					 | 
					 | 
					 | 
						return x11_compositor_create(display, | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									     width, height, count, fullscreen); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					 | 
					
  |