summaryrefslogtreecommitdiffstats
path: root/lib/tty/mouse.h
blob: 99d0a69a2f980fc794f7d721020d7482476def3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/** \file mouse.h
 *  \brief Header: mouse managing
 *
 *  Events received by clients of this library have their coordinates 0 based
 */

#ifndef MC__MOUSE_H
#define MC__MOUSE_H

#ifdef HAVE_LIBGPM
/* GPM mouse support include file */
#include <gpm.h>
#endif /* !HAVE_LIBGPM */


/*** typedefs(not structures) and defined constants **********************************************/

#ifndef HAVE_LIBGPM
/* Equivalent definitions for non-GPM mouse support */
/* These lines are modified version from the lines appearing in the */
/* gpm.h include file of the Linux General Purpose Mouse server */

#define GPM_B_LEFT      (1 << 2)
#define GPM_B_MIDDLE    (1 << 1)
#define GPM_B_RIGHT     (1 << 0)

#define GPM_BARE_EVENTS(ev) ((ev)&0xF)
#endif /* !HAVE_LIBGPM */

/* Mouse wheel events */
#ifndef GPM_B_DOWN
#define GPM_B_DOWN      (1 << 5)
#endif

#ifndef GPM_B_UP
#define GPM_B_UP        (1 << 4)
#endif

/*** enums ***************************************************************************************/

#ifndef HAVE_LIBGPM
/* Xterm mouse support supports only GPM_DOWN and GPM_UP */
/* If you use others make sure your code also works without them */
enum Gpm_Etype
{
    GPM_MOVE = 1,
    GPM_DRAG = 2,               /* exactly one in four is active at a time */
    GPM_DOWN = 4,
    GPM_UP = 8,


    GPM_SINGLE = 16,            /* at most one in three is set */
    GPM_DOUBLE = 32,
    GPM_TRIPLE = 64,

    GPM_MFLAG = 128,            /* motion during click? */
    GPM_HARD = 256              /* if set in the defaultMask, force an already
                                   used event to pass over to another handler */
};
#endif /* !HAVE_LIBGPM */

/* Constants returned from the mouse callback */
enum
{
    MOU_UNHANDLED = 0,
    MOU_NORMAL,
    MOU_REPEAT
};

/* Type of mouse support */
typedef enum
{
    MOUSE_NONE,                 /* Not detected yet */
    MOUSE_DISABLED,             /* Explicitly disabled by -d */
    MOUSE_GPM,                  /* Support using GPM on Linux */
    MOUSE_XTERM,                /* Support using xterm-style mouse reporting */
    MOUSE_XTERM_NORMAL_TRACKING = MOUSE_XTERM,
    MOUSE_XTERM_BUTTON_EVENT_TRACKING
} Mouse_Type;

/*** structures declarations (and typedefs of structures)*****************************************/

#ifndef HAVE_LIBGPM
typedef struct Gpm_Event
{
    int buttons, x, y;
    enum Gpm_Etype type;
} Gpm_Event;
#endif /* !HAVE_LIBGPM */

/*** global variables defined in .c file *********************************************************/

/* Type of the currently used mouse */
extern Mouse_Type use_mouse_p;

/* To be used when gpm_fd were initially >= 0 */
extern int mouse_fd;

/* String indicating that a mouse event has occurred, usually "\E[M" */
extern const char *xmouse_seq;

/* String indicating that an SGR extended mouse event has occurred, namely "\E[<" */
extern const char *xmouse_extended_seq;

/*** declarations of public functions ************************************************************/

/* General (i.e. both for xterm and gpm) mouse support definitions */

void init_mouse (void);
void enable_mouse (void);
void disable_mouse (void);

void show_mouse_pointer (int x, int y);

/*** inline functions ****************************************************************************/
#endif /* MC_MOUSE_H */