mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-22 12:32:40 +03:00
9699d5dd69
mc may not detect the gpm mouse under X11 on many x terminals when running together with tmux or screen. On some cases it can even hang. It's a small patch to the gpm maintainer to improve its checking. Seems there is a need also to a small change on mc. Now everything is working perfectly. Signed-off-by: Slava Zanko <slavazanko@gmail.com>
121 lines
3.3 KiB
C
121 lines
3.3 KiB
C
|
|
/** \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 */
|
|
|
|
/* Mouse callback */
|
|
typedef int (*mouse_h) (Gpm_Event *, void *);
|
|
|
|
/*** 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 */
|