mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:44:18 +00:00 
			
		
		
		
	Store mouse data in tty structure not on the stack.
This commit is contained in:
		
							
								
								
									
										47
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1048,6 +1048,29 @@ struct session {
 | 
			
		||||
RB_HEAD(sessions, session);
 | 
			
		||||
ARRAY_DECL(sessionslist, struct session *);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mouse input. xterm mouse mode is fairly silly. Buttons are in the bottom two
 | 
			
		||||
 * bits: 0 = button 1; 1 = button 2; 2 = button 3; 3 = buttons released. Bits
 | 
			
		||||
 * 3, 4 and 5 are for keys. Bit 6 is set for dragging and 7 for mouse buttons 4
 | 
			
		||||
 * and 5.
 | 
			
		||||
 */
 | 
			
		||||
struct mouse_event {
 | 
			
		||||
	u_int	b;
 | 
			
		||||
#define MOUSE_1 0
 | 
			
		||||
#define MOUSE_2 1
 | 
			
		||||
#define MOUSE_3 2
 | 
			
		||||
#define MOUSE_UP 3
 | 
			
		||||
#define MOUSE_BUTTON 3
 | 
			
		||||
#define MOUSE_SHIFT 4
 | 
			
		||||
#define MOUSE_ESCAPE 8
 | 
			
		||||
#define MOUSE_CTRL 16
 | 
			
		||||
#define MOUSE_DRAG 32
 | 
			
		||||
#define MOUSE_45 64
 | 
			
		||||
#define MOUSE_RESIZE_PANE 128 /* marker for resizing */
 | 
			
		||||
	u_int	x;
 | 
			
		||||
	u_int	y;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* TTY information. */
 | 
			
		||||
struct tty_key {
 | 
			
		||||
	char		 ch;
 | 
			
		||||
@@ -1115,6 +1138,7 @@ struct tty {
 | 
			
		||||
 | 
			
		||||
	int		 term_flags;
 | 
			
		||||
 | 
			
		||||
	struct mouse_event mouse_event;
 | 
			
		||||
	void		 (*key_callback)(int, struct mouse_event *, void *);
 | 
			
		||||
	void		*key_data;
 | 
			
		||||
	struct event	 key_timer;
 | 
			
		||||
@@ -1151,29 +1175,6 @@ struct tty_ctx {
 | 
			
		||||
	u_int		 last_width;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mouse input. xterm mouse mode is fairly silly. Buttons are in the bottom two
 | 
			
		||||
 * bits: 0 = button 1; 1 = button 2; 2 = button 3; 3 = buttons released. Bits
 | 
			
		||||
 * 3, 4 and 5 are for keys. Bit 6 is set for dragging and 7 for mouse buttons 4
 | 
			
		||||
 * and 5.
 | 
			
		||||
 */
 | 
			
		||||
struct mouse_event {
 | 
			
		||||
	u_int	b;
 | 
			
		||||
#define MOUSE_1 0
 | 
			
		||||
#define MOUSE_2 1
 | 
			
		||||
#define MOUSE_3 2
 | 
			
		||||
#define MOUSE_UP 3
 | 
			
		||||
#define MOUSE_BUTTON 3
 | 
			
		||||
#define MOUSE_SHIFT 4
 | 
			
		||||
#define MOUSE_ESCAPE 8
 | 
			
		||||
#define MOUSE_CTRL 16
 | 
			
		||||
#define MOUSE_DRAG 32
 | 
			
		||||
#define MOUSE_45 64
 | 
			
		||||
#define MOUSE_RESIZE_PANE 128 /* marker for resizing */
 | 
			
		||||
	u_int	x;
 | 
			
		||||
	u_int	y;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Saved message entry. */
 | 
			
		||||
struct message_entry {
 | 
			
		||||
	char   *msg;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								tty-keys.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								tty-keys.c
									
									
									
									
									
								
							@@ -40,8 +40,7 @@ struct tty_key *tty_keys_find1(
 | 
			
		||||
		    struct tty_key *, const char *, size_t, size_t *);
 | 
			
		||||
struct tty_key *tty_keys_find(struct tty *, const char *, size_t, size_t *);
 | 
			
		||||
void		tty_keys_callback(int, short, void *);
 | 
			
		||||
int		tty_keys_mouse(struct tty *,
 | 
			
		||||
		    const char *, size_t, size_t *, struct mouse_event *);
 | 
			
		||||
int		tty_keys_mouse(struct tty *, const char *, size_t, size_t *);
 | 
			
		||||
int		tty_keys_device(struct tty *, const char *, size_t, size_t *);
 | 
			
		||||
 | 
			
		||||
struct tty_key_ent {
 | 
			
		||||
@@ -436,7 +435,6 @@ tty_keys_next(struct tty *tty)
 | 
			
		||||
{
 | 
			
		||||
	struct tty_key	*tk;
 | 
			
		||||
	struct timeval	 tv;
 | 
			
		||||
	struct mouse_event	 mouse;
 | 
			
		||||
	const char	*buf;
 | 
			
		||||
	size_t		 len, size;
 | 
			
		||||
	cc_t		 bspace;
 | 
			
		||||
@@ -477,7 +475,7 @@ tty_keys_next(struct tty *tty)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Is this a mouse key press? */
 | 
			
		||||
	switch (tty_keys_mouse(tty, buf, len, &size, &mouse)) {
 | 
			
		||||
	switch (tty_keys_mouse(tty, buf, len, &size)) {
 | 
			
		||||
	case 0:		/* yes */
 | 
			
		||||
		evbuffer_drain(tty->event->input, size);
 | 
			
		||||
		key = KEYC_MOUSE;
 | 
			
		||||
@@ -582,7 +580,7 @@ handle_key:
 | 
			
		||||
		evtimer_del(&tty->key_timer);
 | 
			
		||||
 | 
			
		||||
	if (key != KEYC_NONE)
 | 
			
		||||
		tty->key_callback(key, &mouse, tty->key_data);
 | 
			
		||||
		tty->key_callback(key, &tty->mouse_event, tty->key_data);
 | 
			
		||||
 | 
			
		||||
	tty->flags &= ~TTY_ESCAPE;
 | 
			
		||||
	return (1);
 | 
			
		||||
@@ -607,9 +605,9 @@ tty_keys_callback(unused int fd, unused short events, void *data)
 | 
			
		||||
 * (probably a mouse sequence but need more data).
 | 
			
		||||
 */
 | 
			
		||||
int
 | 
			
		||||
tty_keys_mouse(struct tty *tty,
 | 
			
		||||
    const char *buf, size_t len, size_t *size, struct mouse_event *m)
 | 
			
		||||
tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size)
 | 
			
		||||
{
 | 
			
		||||
	struct mouse_event	*m = &tty->mouse_event;
 | 
			
		||||
	struct utf8_data	 utf8data;
 | 
			
		||||
	u_int			 i, value;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user