1 
2 /** \file mouse.h
3  *  \brief Header: mouse managing
4  *
5  *  Events received by clients of this library have their coordinates 0 based
6  */
7 
8 #ifndef MC__MOUSE_H
9 #define MC__MOUSE_H
10 
11 #ifdef HAVE_LIBGPM
12 /* GPM mouse support include file */
13 #include <gpm.h>
14 #endif /* !HAVE_LIBGPM */
15 
16 
17 /*** typedefs(not structures) and defined constants **********************************************/
18 
19 #ifndef HAVE_LIBGPM
20 /* Equivalent definitions for non-GPM mouse support */
21 /* These lines are modified version from the lines appearing in the */
22 /* gpm.h include file of the Linux General Purpose Mouse server */
23 
24 #define GPM_B_LEFT      (1 << 2)
25 #define GPM_B_MIDDLE    (1 << 1)
26 #define GPM_B_RIGHT     (1 << 0)
27 
28 #define GPM_BARE_EVENTS(ev) ((ev)&0xF)
29 #endif /* !HAVE_LIBGPM */
30 
31 /* Mouse wheel events */
32 #ifndef GPM_B_DOWN
33 #define GPM_B_DOWN      (1 << 5)
34 #endif
35 
36 #ifndef GPM_B_UP
37 #define GPM_B_UP        (1 << 4)
38 #endif
39 
40 /*** enums ***************************************************************************************/
41 
42 #ifndef HAVE_LIBGPM
43 /* Xterm mouse support supports only GPM_DOWN and GPM_UP */
44 /* If you use others make sure your code also works without them */
45 enum Gpm_Etype
46 {
47     GPM_MOVE = 1,
48     GPM_DRAG = 2,               /* exactly one in four is active at a time */
49     GPM_DOWN = 4,
50     GPM_UP = 8,
51 
52 
53     GPM_SINGLE = 16,            /* at most one in three is set */
54     GPM_DOUBLE = 32,
55     GPM_TRIPLE = 64,
56 
57     GPM_MFLAG = 128,            /* motion during click? */
58     GPM_HARD = 256              /* if set in the defaultMask, force an already
59                                    used event to pass over to another handler */
60 };
61 #endif /* !HAVE_LIBGPM */
62 
63 /* Constants returned from the mouse callback */
64 enum
65 {
66     MOU_UNHANDLED = 0,
67     MOU_NORMAL,
68     MOU_REPEAT
69 };
70 
71 /* Type of mouse support */
72 typedef enum
73 {
74     MOUSE_NONE,                 /* Not detected yet */
75     MOUSE_DISABLED,             /* Explicitly disabled by -d */
76     MOUSE_GPM,                  /* Support using GPM on Linux */
77     MOUSE_XTERM,                /* Support using xterm-style mouse reporting */
78     MOUSE_XTERM_NORMAL_TRACKING = MOUSE_XTERM,
79     MOUSE_XTERM_BUTTON_EVENT_TRACKING
80 } Mouse_Type;
81 
82 /*** structures declarations (and typedefs of structures)*****************************************/
83 
84 #ifndef HAVE_LIBGPM
85 typedef struct Gpm_Event
86 {
87     int buttons, x, y;
88     enum Gpm_Etype type;
89 } Gpm_Event;
90 #endif /* !HAVE_LIBGPM */
91 
92 /*** global variables defined in .c file *********************************************************/
93 
94 /* Type of the currently used mouse */
95 extern Mouse_Type use_mouse_p;
96 
97 /* To be used when gpm_fd were initially >= 0 */
98 extern int mouse_fd;
99 
100 /* String indicating that a mouse event has occurred, usually "\E[M" */
101 extern const char *xmouse_seq;
102 
103 /* String indicating that an SGR extended mouse event has occurred, namely "\E[<" */
104 extern const char *xmouse_extended_seq;
105 
106 /*** declarations of public functions ************************************************************/
107 
108 /* General (i.e. both for xterm and gpm) mouse support definitions */
109 
110 void init_mouse (void);
111 void enable_mouse (void);
112 void disable_mouse (void);
113 
114 void show_mouse_pointer (int x, int y);
115 
116 /*** inline functions ****************************************************************************/
117 #endif /* MC_MOUSE_H */
118