summaryrefslogtreecommitdiffstats
path: root/lib/tty/mouse.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tty/mouse.h')
-rw-r--r--lib/tty/mouse.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/lib/tty/mouse.h b/lib/tty/mouse.h
new file mode 100644
index 0000000..99d0a69
--- /dev/null
+++ b/lib/tty/mouse.h
@@ -0,0 +1,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 */