| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -123,6 +123,7 @@ struct window { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						int x, y; | 
					 | 
					 | 
					 | 
						int x, y; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						int resize_edges; | 
					 | 
					 | 
					 | 
						int resize_edges; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						int redraw_scheduled; | 
					 | 
					 | 
					 | 
						int redraw_scheduled; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						int redraw_needed; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						struct task redraw_task; | 
					 | 
					 | 
					 | 
						struct task redraw_task; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						int resize_scheduled; | 
					 | 
					 | 
					 | 
						int resize_scheduled; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						struct task resize_task; | 
					 | 
					 | 
					 | 
						struct task resize_task; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2132,21 +2133,41 @@ widget_redraw(struct widget *widget) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							widget_redraw(child); | 
					 | 
					 | 
					 | 
							widget_redraw(child); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static void | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					frame_callback(void *data, struct wl_callback *callback, uint32_t time) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						struct window *window = data; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						wl_callback_destroy(callback); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						window->redraw_scheduled = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if (window->redraw_needed) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							window_schedule_redraw(window); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static const struct wl_callback_listener listener = { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						frame_callback | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void | 
					 | 
					 | 
					 | 
					static void | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					idle_redraw(struct task *task, uint32_t events) | 
					 | 
					 | 
					 | 
					idle_redraw(struct task *task, uint32_t events) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						struct window *window = | 
					 | 
					 | 
					 | 
						struct window *window = | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							container_of(task, struct window, redraw_task); | 
					 | 
					 | 
					 | 
							container_of(task, struct window, redraw_task); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						struct wl_callback *callback; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						window_create_surface(window); | 
					 | 
					 | 
					 | 
						window_create_surface(window); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						widget_redraw(window->widget); | 
					 | 
					 | 
					 | 
						widget_redraw(window->widget); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						window_flush(window); | 
					 | 
					 | 
					 | 
						window_flush(window); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						window->redraw_scheduled = 0; | 
					 | 
					 | 
					 | 
						window->redraw_needed = 0; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						callback = wl_surface_frame(window->surface); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						wl_callback_add_listener(callback, &listener, window); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void | 
					 | 
					 | 
					 | 
					void | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					window_schedule_redraw(struct window *window) | 
					 | 
					 | 
					 | 
					window_schedule_redraw(struct window *window) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						window->redraw_needed = 1; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (!window->redraw_scheduled) { | 
					 | 
					 | 
					 | 
						if (!window->redraw_scheduled) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							window->redraw_task.run = idle_redraw; | 
					 | 
					 | 
					 | 
							window->redraw_task.run = idle_redraw; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							display_defer(window->display, &window->redraw_task); | 
					 | 
					 | 
					 | 
							display_defer(window->display, &window->redraw_task); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |