Revision: 2806
          http://tmux.svn.sourceforge.net/tmux/?rev=2806&view=rev
Author:   tcunha
Date:     2012-05-22 21:04:25 +0000 (Tue, 22 May 2012)
Log Message:
-----------
Sync OpenBSD patchset 1120:

Store mouse data in tty structure not on the stack.

Modified Paths:
--------------
    trunk/tmux.h
    trunk/tty-keys.c

Modified: trunk/tmux.h
===================================================================
--- trunk/tmux.h        2012-05-22 21:03:25 UTC (rev 2805)
+++ trunk/tmux.h        2012-05-22 21:04:25 UTC (rev 2806)
@@ -1044,6 +1044,29 @@
 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;
@@ -1111,6 +1134,7 @@
 
        int              term_flags;
 
+       struct mouse_event mouse_event;
        void             (*key_callback)(int, struct mouse_event *, void *);
        void            *key_data;
        struct event     key_timer;
@@ -1147,29 +1171,6 @@
        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;
@@ -1220,7 +1221,7 @@
 #define CLIENT_EXIT 0x4
 #define CLIENT_REDRAW 0x8
 #define CLIENT_STATUS 0x10
-#define CLIENT_REPEAT 0x20     /* allow command to repeat within repeat time */
+#define CLIENT_REPEAT 0x20 /* allow command to repeat within repeat time */
 #define CLIENT_SUSPENDED 0x40
 #define CLIENT_BAD 0x80
 #define CLIENT_IDENTIFY 0x100

Modified: trunk/tty-keys.c
===================================================================
--- trunk/tty-keys.c    2012-05-22 21:03:25 UTC (rev 2805)
+++ trunk/tty-keys.c    2012-05-22 21:04:25 UTC (rev 2806)
@@ -40,8 +40,7 @@
                    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 {
@@ -434,13 +433,12 @@
 int
 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;
-       int                      key, delay;
+       struct tty_key  *tk;
+       struct timeval   tv;
+       const char      *buf;
+       size_t           len, size;
+       cc_t             bspace;
+       int              key, delay;
 
        buf = EVBUFFER_DATA(tty->event->input);
        len = EVBUFFER_LENGTH(tty->event->input);
@@ -477,7 +475,7 @@
        }
 
        /* 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 @@
                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,11 +605,11 @@
  * (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 utf8_data        utf8data;
-       u_int                   i, value;
+       struct mouse_event      *m = &tty->mouse_event;
+       struct utf8_data         utf8data;
+       u_int                    i, value;
 
        /*
         * Standard mouse sequences are \033[M followed by three characters

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to