mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	view: fix bug in view_snap_to_edge()
Use view_move() and view_move_resize() correctly. view_move_resize() should only be used when the view actually changes width and/or height, otherwise the serials might cause a delay in moving xdg-shell clients. Issue #201
This commit is contained in:
		
							parent
							
								
									cef9723505
								
							
						
					
					
						commit
						be89478f7a
					
				
					 2 changed files with 28 additions and 11 deletions
				
			
		| 
						 | 
					@ -368,6 +368,15 @@ void view_subsurface_create(struct view *view,
 | 
				
			||||||
void view_set_activated(struct view *view, bool activated);
 | 
					void view_set_activated(struct view *view, bool activated);
 | 
				
			||||||
void view_close(struct view *view);
 | 
					void view_close(struct view *view);
 | 
				
			||||||
struct border view_border(struct view *view);
 | 
					struct border view_border(struct view *view);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * view_move_resize - resize and move view
 | 
				
			||||||
 | 
					 * @view: view to be resized and moved
 | 
				
			||||||
 | 
					 * @geo: the new geometry
 | 
				
			||||||
 | 
					 * NOTE: Only use this when the view actually changes width and/or height
 | 
				
			||||||
 | 
					 * otherwise the serials might cause a delay in moving xdg-shell clients.
 | 
				
			||||||
 | 
					 * For move only, use view_move()
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
void view_move_resize(struct view *view, struct wlr_box geo);
 | 
					void view_move_resize(struct view *view, struct wlr_box geo);
 | 
				
			||||||
void view_move(struct view *view, double x, double y);
 | 
					void view_move(struct view *view, double x, double y);
 | 
				
			||||||
void view_minimize(struct view *view, bool minimized);
 | 
					void view_minimize(struct view *view, bool minimized);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										28
									
								
								src/view.c
									
										
									
									
									
								
							
							
						
						
									
										28
									
								
								src/view.c
									
										
									
									
									
								
							| 
						 | 
					@ -24,16 +24,6 @@ view_close(struct view *view)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					 | 
				
			||||||
view_move_resize(struct view *view, struct wlr_box geo)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (view->impl->configure) {
 | 
					 | 
				
			||||||
		view->impl->configure(view, geo);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	ssd_update_title(view);
 | 
					 | 
				
			||||||
	view_discover_output(view);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
view_move(struct view *view, double x, double y)
 | 
					view_move(struct view *view, double x, double y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -43,6 +33,19 @@ view_move(struct view *view, double x, double y)
 | 
				
			||||||
	view_discover_output(view);
 | 
						view_discover_output(view);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					view_move_resize(struct view *view, struct wlr_box geo)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (view->w == geo.width && view->h == geo.height) {
 | 
				
			||||||
 | 
							wlr_log(WLR_ERROR, "use view_move() if not resizing");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (view->impl->configure) {
 | 
				
			||||||
 | 
							view->impl->configure(view, geo);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						ssd_update_title(view);
 | 
				
			||||||
 | 
						view_discover_output(view);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MIN_VIEW_WIDTH (100)
 | 
					#define MIN_VIEW_WIDTH (100)
 | 
				
			||||||
#define MIN_VIEW_HEIGHT (60)
 | 
					#define MIN_VIEW_HEIGHT (60)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -602,8 +605,13 @@ view_snap_to_edge(struct view *view, const char *direction)
 | 
				
			||||||
			view_edge_invert(edge));
 | 
								view_edge_invert(edge));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (view->w == dst.width && view->h == dst.height) {
 | 
				
			||||||
 | 
							/* move horizontally/vertically without changing size */
 | 
				
			||||||
 | 
							view_move(view, dst.x, dst.y);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
		view_move_resize(view, dst);
 | 
							view_move_resize(view, dst);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char *
 | 
					const char *
 | 
				
			||||||
view_get_string_prop(struct view *view, const char *prop)
 | 
					view_get_string_prop(struct view *view, const char *prop)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue