mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	cursor: fix initial cursor position for new outputs
The fresh new wlr_output_cursor is positioned at (0, 0). Call wlr_output_cursor_move() after creating the wlr_output_cursor to fix this. Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3777
This commit is contained in:
		
							parent
							
								
									d8c0707e27
								
							
						
					
					
						commit
						7ef62cc995
					
				
					 1 changed files with 16 additions and 9 deletions
				
			
		| 
						 | 
					@ -265,6 +265,16 @@ static struct wlr_cursor_device *get_cursor_device(struct wlr_cursor *cur,
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void output_cursor_move(struct wlr_cursor_output_cursor *output_cursor) {
 | 
				
			||||||
 | 
						struct wlr_cursor *cur = output_cursor->cursor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						double output_x = cur->x, output_y = cur->y;
 | 
				
			||||||
 | 
						wlr_output_layout_output_coords(cur->state->layout,
 | 
				
			||||||
 | 
							output_cursor->output_cursor->output, &output_x, &output_y);
 | 
				
			||||||
 | 
						wlr_output_cursor_move(output_cursor->output_cursor,
 | 
				
			||||||
 | 
							output_x, output_y);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void cursor_warp_unchecked(struct wlr_cursor *cur,
 | 
					static void cursor_warp_unchecked(struct wlr_cursor *cur,
 | 
				
			||||||
		double lx, double ly) {
 | 
							double lx, double ly) {
 | 
				
			||||||
	assert(cur->state->layout);
 | 
						assert(cur->state->layout);
 | 
				
			||||||
| 
						 | 
					@ -273,17 +283,13 @@ static void cursor_warp_unchecked(struct wlr_cursor *cur,
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct wlr_cursor_output_cursor *output_cursor;
 | 
					 | 
				
			||||||
	wl_list_for_each(output_cursor, &cur->state->output_cursors, link) {
 | 
					 | 
				
			||||||
		double output_x = lx, output_y = ly;
 | 
					 | 
				
			||||||
		wlr_output_layout_output_coords(cur->state->layout,
 | 
					 | 
				
			||||||
			output_cursor->output_cursor->output, &output_x, &output_y);
 | 
					 | 
				
			||||||
		wlr_output_cursor_move(output_cursor->output_cursor,
 | 
					 | 
				
			||||||
			output_x, output_y);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cur->x = lx;
 | 
						cur->x = lx;
 | 
				
			||||||
	cur->y = ly;
 | 
						cur->y = ly;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct wlr_cursor_output_cursor *output_cursor;
 | 
				
			||||||
 | 
						wl_list_for_each(output_cursor, &cur->state->output_cursors, link) {
 | 
				
			||||||
 | 
							output_cursor_move(output_cursor);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -1104,6 +1110,7 @@ static void layout_add(struct wlr_cursor_state *state,
 | 
				
			||||||
		&output_cursor->output_commit);
 | 
							&output_cursor->output_commit);
 | 
				
			||||||
	output_cursor->output_commit.notify = output_cursor_output_handle_output_commit;
 | 
						output_cursor->output_commit.notify = output_cursor_output_handle_output_commit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						output_cursor_move(output_cursor);
 | 
				
			||||||
	cursor_output_cursor_update(output_cursor);
 | 
						cursor_output_cursor_update(output_cursor);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue