📄 mouse_wheel.patch
字号:
i=ePtr->type; ePtr->type=0; return i; /* number of buttons */ }++int Gpm_GetSnapshot(Gpm_Event *ePtr)+{+ int rc;+ Gpm_EventExt eTmp;+ rc = Gpm_GetSnapshotExt(&eTmp); + if (ePtr)+ memcpy(ePtr, &eTmp, sizeof(Gpm_Event));+ return rc; + +} /* Local Variables: */ /* c-indent-level: 2 */ /* End: */+diff -u -r gpm-1.19.3/mev.c gpm-1.19.3.wheel/mev.c--- gpm-1.19.3/mev.c Tue Jan 18 09:23:00 2000+++ gpm-1.19.3.wheel/mev.c Sat Nov 11 19:17:46 2000@@ -90,15 +90,15 @@ int opt_pointer = 0; /*===================================================================*/-int user_handler(Gpm_Event *event, void *data)+int user_handler(Gpm_EventExt *event, void *data) { if (opt_fit) Gpm_FitEvent(event); - printf("mouse: event 0x%02X, at %2i,%2i (delta %2i,%2i), "+ printf("mouse: event 0x%05X at %2i,%2i (delta %2i,%2i,%2i,%2i), " "buttons %i, modifiers 0x%02X\r\n", event->type, event->x, event->y,- event->dx, event->dy,+ event->dx, event->dy, event->dw, event->dw2, event->buttons, event->modifiers); if (event->type & (GPM_DRAG|GPM_DOWN)) {@@ -110,7 +110,7 @@ } /*-------------------------------------------------------------------*/-int emacs_handler(Gpm_Event *event, void *data)+int emacs_handler(Gpm_EventExt *event, void *data) { int i,j; static int dragX, dragY;@@ -230,8 +230,8 @@ /*===================================================================*/ int usage(void) {- printf( "(" GPM_NAME ") " GPM_RELEASE ", " GPM_DATE "\n"- "Usage: %s [options]\n",prgname);+// printf( "(" GPM_NAME ") " GPM_RELEASE ", " GPM_DATE "\n"+// "Usage: %s [options]\n",prgname); printf(" Valid options are\n" " -C <number> choose virtual console (beware of it)\n" " -d <number> choose the default mask\n"@@ -334,8 +334,9 @@ void do_snapshot() {- Gpm_Event event;- int i=Gpm_GetSnapshot(&event);+ Gpm_EventExt event;+ int rsize=sizeof(Gpm_EventExt);+ int i=Gpm_GetSnapshotExt(&event); char *s; if (-1 == i) {@@ -479,8 +480,9 @@ } /*if*/ } /*if*/ if (FD_ISSET(gpm_fd, &readset)) {- Gpm_Event evt;- if (Gpm_GetEvent(&evt) > 0) {+ Gpm_EventExt evt;+ if (Gpm_GetEventExt(&evt) > 0) {+/* if (Gpm_GetEvent(&evt) > 0) { */ my_handler(&evt, 0); } else { fprintf(stderr, "Oops, Gpm_GetEvent()\n");diff -u -r gpm-1.19.3/mice.c gpm-1.19.3.wheel/mice.c--- gpm-1.19.3/mice.c Wed Mar 8 01:10:00 2000+++ gpm-1.19.3.wheel/mice.c Wed Nov 22 21:51:35 2000@@ -25,7 +25,7 @@ * This file is part of the mouse server. The information herein * is kept aside from the rest of the server to ease fixing mouse-type * issues. Each mouse type is expected to fill the `buttons', `dx' and `dy'- * fields of the Gpm_Event structure and nothing more.+ * fields of the Gpm_EventExt structure and nothing more. * * Absolute-pointing devices (support by Marc Meis), are expecting to * fit `x' and `y' as well. Unfortunately, to do it the window size must@@ -208,7 +208,7 @@ * The return value is the number of unprocessed bytes */ -static int M_ms(Gpm_Event *state, unsigned char *data)+static int M_ms(Gpm_EventExt *state, unsigned char *data) { /* * some devices report a change of middle-button state by@@ -223,17 +223,21 @@ prev = state->buttons; state->dx= (signed char)(((data[0] & 0x03) << 6) | (data[1] & 0x3F)); state->dy= (signed char)(((data[0] & 0x0C) << 4) | (data[2] & 0x3F));+ state->dw= 0;+ state->dw2= 0; return 0; } -static int M_ms_plus(Gpm_Event *state, unsigned char *data)+static int M_ms_plus(Gpm_EventExt *state, unsigned char *data) { static unsigned char prev=0; state->buttons= ((data[0] & 0x20) >> 3) | ((data[0] & 0x10) >> 4); state->dx= (signed char)(((data[0] & 0x03) << 6) | (data[1] & 0x3F)); state->dy= (signed char)(((data[0] & 0x0C) << 4) | (data[2] & 0x3F));+ state->dw= 0;+ state->dw2= 0; /* Allow motion *and* button change (Michael Plass) */ @@ -248,7 +252,7 @@ return 0; } -static int M_ms_plus_lr(Gpm_Event *state, unsigned char *data)+static int M_ms_plus_lr(Gpm_EventExt *state, unsigned char *data) { /* * Same as M_ms_plus but with an addition by Edmund GRIMLEY EVANS@@ -258,6 +262,8 @@ state->buttons= ((data[0] & 0x20) >> 3) | ((data[0] & 0x10) >> 4); state->dx= (signed char)(((data[0] & 0x03) << 6) | (data[1] & 0x3F)); state->dy= (signed char)(((data[0] & 0x0C) << 4) | (data[2] & 0x3F));+ state->dw= 0;+ state->dw2= 0; /* Allow motion *and* button change (Michael Plass) */ @@ -285,7 +291,7 @@ int SUMMA_BORDER=100; int summamaxx,summamaxy; char summaid=-1;-static int M_summa(Gpm_Event *state, unsigned char *data)+static int M_summa(Gpm_EventExt *state, unsigned char *data) { int x, y; @@ -307,7 +313,7 @@ /* Thu Jan 28 20:54:47 MET 1999 hof@hof-berlin.de SummaSketch reportformat */-static int R_summa(Gpm_Event *state, int fd)+static int R_summa(Gpm_EventExt *state, int fd) { signed char buffer[5]; static int x,y;@@ -335,7 +341,7 @@ /* 'Genitizer' (kw@dtek.chalmers.se 11/12/97) */-static int M_geni(Gpm_Event *state, unsigned char *data)+static int M_geni(Gpm_EventExt *state, unsigned char *data) { /* this is a little confusing. If we use the stylus, we * have three buttons (tip, lower, upper), and if@@ -352,25 +358,48 @@ state->dx = ((data[1] & 0x3f) ) * ((data[0] & 0x10)?1:-1); state->dy = ((data[2] & 0x3f) ) * ((data[0] & 0x8)?-1:1);+ state->dw= 0;+ state->dw2= 0; return 0; } /* m$ 'Intellimouse' (steveb 20/7/97) */-static int M_ms3(Gpm_Event *state, unsigned char *data)+static int M_ms3(Gpm_EventExt *state, unsigned char *data) { state->buttons= ((data[0] & 0x20) >> 3) /* left */ | ((data[3] & 0x10) >> 3) /* middle */ | ((data[0] & 0x10) >> 4); /* right */ state->dx= (signed char)(((data[0] & 0x03) << 6) | (data[1] & 0x3F)); state->dy= (signed char)(((data[0] & 0x0C) << 4) | (data[2] & 0x3F));- /* wheel (dz??) is (data[3] & 0x0f) */+ state->dw= data[3] & 0x0f;+ if (data[3] & 0x08) state->dw -= 16;+ state->dw2= 0;++ return 0;+}++/* A4 tech 4D mouse serial (michg@alphalink.com.au 11/11/00) */+static int M_a4d(Gpm_EventExt *state, unsigned char *data)+{+ state->buttons= ((data[0] & 0x20) >> 3) /* left */+ | ((data[3] & 0x10) >> 3) /* middle */+ | ((data[0] & 0x10) >> 4); /* right */+ state->dx= (signed char)(((data[0] & 0x03) << 6) | (data[1] & 0x3F));+ state->dy= (signed char)(((data[0] & 0x0C) << 4) | (data[2] & 0x3F));+ switch(data[3] & 0x0f)+ { case 0x01: state->dw= 1; state->dw2 = 0; break;+ case 0x02: state->dw= 0; state->dw2 = 1; break;+ case 0x0f: state->dw=-1; state->dw2 = 0; break;+ case 0x0e: state->dw= 0; state->dw2 = -1; break; + default: state->dw= 0; state->dw2 = 0;+ } return 0; } /* M_brw is a variant of m$ 'Intellimouse' the middle button is different */-static int M_brw(Gpm_Event *state, unsigned char *data)+static int M_brw(Gpm_EventExt *state, unsigned char *data) { state->buttons= ((data[0] & 0x20) >> 3) /* left */ | ((data[3] & 0x20) >> 4) /* middle */@@ -385,6 +414,9 @@ data[0], data[1], data[2], data[3]); return -1; }+ state->dw= data[3] & 0x0f;+ if (data[3] & 0x08) state->dw -= 16;+ state->dw2= 0; /* wheel (dz) is (data[3] & 0x0f) */ /* where is the side button? I can sort of detect it at 9600 baud */ /* Note this mouse is very noisy */@@ -392,35 +424,41 @@ return 0; } -static int M_bare(Gpm_Event *state, unsigned char *data)+static int M_bare(Gpm_EventExt *state, unsigned char *data) { /* a bare ms protocol */ state->buttons= ((data[0] & 0x20) >> 3) | ((data[0] & 0x10) >> 4); state->dx= (signed char)(((data[0] & 0x03) << 6) | (data[1] & 0x3F)); state->dy= (signed char)(((data[0] & 0x0C) << 4) | (data[2] & 0x3F));+ state->dw= 0;+ state->dw2= 0; return 0; } -static int M_sun(Gpm_Event *state, unsigned char *data)+static int M_sun(Gpm_EventExt *state, unsigned char *data) { state->buttons= (~data[0]) & 0x07; state->dx= (signed char)(data[1]); state->dy= -(signed char)(data[2]);+ state->dw= 0;+ state->dw2= 0; return 0; } -static int M_msc(Gpm_Event *state, unsigned char *data)+static int M_msc(Gpm_EventExt *state, unsigned char *data) { state->buttons= (~data[0]) & 0x07; state->dx= (signed char)(data[1]) + (signed char)(data[3]); state->dy= -((signed char)(data[2]) + (signed char)(data[4]));+ state->dw= 0;+ state->dw2= 0; return 0; } /* itz Mon Jan 11 23:51:38 PST 1999 this code moved here from gpm.c */ /* (processMouse) */ -static int R_msc(Gpm_Event *state, int fd)+static int R_msc(Gpm_EventExt *state, int fd) { signed char buffer[5]; @@ -432,39 +470,121 @@ } -static int M_logimsc(Gpm_Event *state, unsigned char *data) /* same as msc */+static int M_logimsc(Gpm_EventExt *state, unsigned char *data) /* same as msc */ { state->buttons= (~data[0]) & 0x07; state->dx= (signed char)(data[1]) + (signed char)(data[3]); state->dy= -((signed char)(data[2]) + (signed char)(data[4]));+ state->dw= 0;+ state->dw2= 0; return 0; } -static int M_mm(Gpm_Event *state, unsigned char *data)+static int M_mm(Gpm_EventExt *state, unsigned char *data) { state->buttons= data[0] & 0x07; state->dx= (data[0] & 0x10) ? data[1] : - data[1]; state->dy= (data[0] & 0x08) ? - data[2] : data[2];+ state->dw= 0;+ state->dw2= 0; return 0; } -static int M_logi(Gpm_Event *state, unsigned char *data) /* equal to mm */+static int M_logi(Gpm_EventExt *state, unsigned char *data) /* equal to mm */ { state->buttons= data[0] & 0x07; state->dx= (data[0] & 0x10) ? data[1] : - data[1]; state->dy= (data[0] & 0x08) ? - data[2] : data[2];+ state->dw= 0;+ state->dw2= 0; return 0; } -static int M_bm(Gpm_Event *state, unsigned char *data) /* equal to sun */+static int M_bm(Gpm_EventExt *state, unsigned char *data) /* equal to sun */ { state->buttons= (~data[0]) & 0x07; state->dx= (signed char)data[1]; state->dy= -(signed char)data[2];+ state->dw= 0;+ state->dw2= 0;+ return 0;+}++static int M_ps2(Gpm_EventExt *state, unsigned char *data)+{+ static int tap_active=0; /* there exist glidepoint ps2 mice */++ state->buttons=+ !!(data[0]&1) * GPM_B_LEFT ++ !!(data[0]&2) * GPM_B_RIGHT ++ !!(data[0]&4) * GPM_B_MIDDLE;++ if (data[0]==0 && opt_glidepoint_tap) /* by default this is false */+ state->buttons = tap_active = opt_glidepoint_tap;+ else if (tap_active)+ if (data[0]==8)+ state->buttons = tap_active = 0;+ else state->buttons = tap_active;++ /* Some PS/2 mice send reports with negative bit set in data[0]+ * and zero for movement. I think this is a bug in the mouse, but+ * working around it only causes artifacts when the actual report is -256;+ * they'll be treated as zero. This should be rare if the mouse sampling+ * rate is set to a reasonable value; the default of 100 Hz is plenty.+ * (Stephen Tell)+ */+ if(data[1] != 0)+ state->dx= (data[0] & 0x10) ? data[1]-256 : data[1];+ else+ state->dx = 0;+ if(data[2] != 0)+ state->dy= -((data[0] & 0x20) ? data[2]-256 : data[2]);+ else+ state->dy = 0;+ state->dw= 0;+ state->dw2= 0;+ return 0;+}++static int M_imps2(Gpm_EventExt *state, unsigned char *data)+{+ static int tap_active=0; /* there exist glidepoint ps2 mice */++ state->buttons=+ !!(data[0]&1) * GPM_B_LEFT ++ !!(data[0]&2) * GPM_B_RIGHT ++ !!(data[0]&4) * GPM_B_MIDDLE;++ if (data[0]==0 && opt_glidepoint_tap) /* by default this is false */+ state->buttons = tap_active = opt_glidepoint_tap;+ else if (tap_active)+ if (data[0]==8)+ state->buttons = tap_active = 0;+ else state->buttons = tap_active;++ /* Some PS/2 mice send reports with negative bit set in data[0]+ * and zero for movement. I think this is a bug in the mouse, but+ * working around it only causes artifacts when the actual report is -256;+ * they'll be treated as zero. This should be rare if the mouse sampling+ * rate is set to a reasonable value; the default of 100 Hz is plenty.+ * (Stephen Tell)+ */+ if(data[1] != 0)+ state->dx= (data[0] & 0x10) ? data[1]-256 : data[1];+ else+ state->dx = 0;+ if(data[2] != 0)+ state->dy= -((data[0] & 0x20) ? data[2]-256 : data[2]);+ else+ state->dy = 0;+ state->dw = (data[3] >= 128) ? data[3]-256 : data[3]; + state->dw2= 0;+ return 0; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -