Fix empty selection highlighting bug.
When user clicks LMB, one character is selected, but will not be copied to selection until the user moves cursor a bit. Therefore, the character should not be highlighted as selected yet. Before the patch, the trick was not to mark line as dirty to avoid highlighting it. However, if user has already selected something and clicks in line that contains selection, selclear sets the line as dirty and one character is highlighted when it should not. This patch replaces dirty trick with explicit check for sel.mode inside selected().
This commit is contained in:
		
				
					committed by
					
						 Roberto E. Vargas Caballero
						Roberto E. Vargas Caballero
					
				
			
			
				
	
			
			
			
						parent
						
							3cb7f27afe
						
					
				
				
					commit
					c990abfedf
				
			
							
								
								
									
										12
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								st.c
									
									
									
									
									
								
							| @ -716,6 +716,9 @@ selnormalize(void) { | ||||
|  | ||||
| bool | ||||
| selected(int x, int y) { | ||||
| 	if(sel.mode == SEL_EMPTY) | ||||
| 		return false; | ||||
|  | ||||
| 	if(sel.type == SEL_RECTANGULAR) | ||||
| 		return BETWEEN(y, sel.nb.y, sel.ne.y) | ||||
| 		    && BETWEEN(x, sel.nb.x, sel.ne.x); | ||||
| @ -921,14 +924,9 @@ bpress(XEvent *e) { | ||||
| 		} | ||||
| 		selnormalize(); | ||||
|  | ||||
| 		/* | ||||
| 		 * Draw selection, unless it's regular and we don't want to | ||||
| 		 * make clicks visible | ||||
| 		 */ | ||||
| 		if(sel.snap != 0) { | ||||
| 		if(sel.snap != 0) | ||||
| 			sel.mode = SEL_READY; | ||||
| 			tsetdirt(sel.nb.y, sel.ne.y); | ||||
| 		} | ||||
| 		tsetdirt(sel.nb.y, sel.ne.y); | ||||
| 		sel.tclick2 = sel.tclick1; | ||||
| 		sel.tclick1 = now; | ||||
| 	} | ||||
|  | ||||
		Reference in New Issue
	
	Block a user