Implementing mouse focus and all events.
This commit is contained in:
		
							
								
								
									
										15
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								st.c
									
									
									
									
									
								
							| @ -118,6 +118,7 @@ enum term_mode { | |||||||
| 	MODE_8BIT	 = 8192, | 	MODE_8BIT	 = 8192, | ||||||
| 	MODE_BLINK	 = 16384, | 	MODE_BLINK	 = 16384, | ||||||
| 	MODE_FBLINK	 = 32768, | 	MODE_FBLINK	 = 32768, | ||||||
|  | 	MODE_FOCUS	 = 65536, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| enum escape_state { | enum escape_state { | ||||||
| @ -1782,6 +1783,13 @@ tsetmode(bool priv, bool set, int *args, int narg) { | |||||||
| 				MODBIT(term.mode, set, MODE_MOUSEMOTION); | 				MODBIT(term.mode, set, MODE_MOUSEMOTION); | ||||||
| 				MODBIT(term.mode, 0, MODE_MOUSEBTN); | 				MODBIT(term.mode, 0, MODE_MOUSEBTN); | ||||||
| 				break; | 				break; | ||||||
|  | 			case 1003: /* 1003: enable all mouse reports */ | ||||||
|  | 				MODBIT(term.mode, set, MODE_MOUSEMOTION); | ||||||
|  | 				MODBIT(term.mode, set, MODE_MOUSEBTN); | ||||||
|  | 				break; | ||||||
|  | 			case 1004: | ||||||
|  | 				MODBIT(term.mode, set, MODE_FOCUS); | ||||||
|  | 				break; | ||||||
| 			case 1006: | 			case 1006: | ||||||
| 				MODBIT(term.mode, set, MODE_MOUSESGR); | 				MODBIT(term.mode, set, MODE_MOUSESGR); | ||||||
| 				break; | 				break; | ||||||
| @ -1807,6 +1815,9 @@ tsetmode(bool priv, bool set, int *args, int narg) { | |||||||
| 			case 1048: | 			case 1048: | ||||||
| 				tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD); | 				tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD); | ||||||
| 				break; | 				break; | ||||||
|  | 			case 9: /* X10 compatibility mode */ | ||||||
|  | 			case 1001: /* mouse highlight mode; can hang the | ||||||
|  | 				      terminal when implemented. */ | ||||||
| 			default: | 			default: | ||||||
| 				fprintf(stderr, | 				fprintf(stderr, | ||||||
| 					"erresc: unknown private set/reset mode %d\n", | 					"erresc: unknown private set/reset mode %d\n", | ||||||
| @ -3309,9 +3320,13 @@ focus(XEvent *ev) { | |||||||
| 		XSetICFocus(xw.xic); | 		XSetICFocus(xw.xic); | ||||||
| 		xw.state |= WIN_FOCUSED; | 		xw.state |= WIN_FOCUSED; | ||||||
| 		xseturgency(0); | 		xseturgency(0); | ||||||
|  | 		if(IS_SET(MODE_FOCUS)) | ||||||
|  | 			ttywrite("\033[I", 3); | ||||||
| 	} else { | 	} else { | ||||||
| 		XUnsetICFocus(xw.xic); | 		XUnsetICFocus(xw.xic); | ||||||
| 		xw.state &= ~WIN_FOCUSED; | 		xw.state &= ~WIN_FOCUSED; | ||||||
|  | 		if(IS_SET(MODE_FOCUS)) | ||||||
|  | 			ttywrite("\033[O", 3); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user