X-Git-Url: http://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=ncurses%2Fbase%2Flib_mouse.c;h=f388e66e8d8e57c974206d7c9512db5f0466d152;hb=626c294438b51427d6dd6dd99d5d3eb8d3aaa2f9;hp=e60e6be8df79f4fea18b23e5578e705ddef3a60c;hpb=41068edef084c39be0cecdf949d9b538d925f42c;p=ncurses.git diff --git a/ncurses/base/lib_mouse.c b/ncurses/base/lib_mouse.c index e60e6be8..f388e66e 100644 --- a/ncurses/base/lib_mouse.c +++ b/ncurses/base/lib_mouse.c @@ -84,7 +84,7 @@ #define CUR SP_TERMTYPE #endif -MODULE_ID("$Id: lib_mouse.c,v 1.111 2010/01/02 21:06:52 tom Exp $") +MODULE_ID("$Id: lib_mouse.c,v 1.112 2010/02/06 19:54:08 tom Exp $") #include @@ -678,7 +678,7 @@ _nc_mouse_init(SCREEN *sp) * fifo_push() in lib_getch.c */ static bool -_nc_mouse_event(SCREEN *sp GCC_UNUSED) +_nc_mouse_event(SCREEN *sp) { MEVENT *eventp = sp->_mouse_eventp; bool result = FALSE; @@ -778,6 +778,28 @@ _nc_mouse_event(SCREEN *sp GCC_UNUSED) break; #endif /* USE_SYSMOUSE */ +#ifdef USE_TERM_DRIVER + case M_TERM_DRIVER: + while (sp->_drv_mouse_head < sp->_drv_mouse_tail) { + *eventp = sp->_drv_mouse_fifo[sp->_drv_mouse_head]; + + /* + * Point the fifo-head to the next possible location. If there + * are none, reset the indices. + */ + sp->_drv_mouse_head += 1; + if (sp->_drv_mouse_head == sp->_drv_mouse_tail) { + sp->_drv_mouse_tail = 0; + sp->_drv_mouse_head = 0; + } + + /* bump the next-free pointer into the circular list */ + sp->_mouse_eventp = eventp = NEXT(eventp); + result = TRUE; + } + break; +#endif + case M_NONE: break; } @@ -974,6 +996,11 @@ mouse_activate(SCREEN *sp, bool on) signal(SIGUSR2, handle_sysmouse); sp->_mouse_active = TRUE; break; +#endif +#ifdef USE_TERM_DRIVER + case M_TERM_DRIVER: + sp->_mouse_active = TRUE; + break; #endif case M_NONE: return; @@ -1003,6 +1030,11 @@ mouse_activate(SCREEN *sp, bool on) signal(SIGUSR2, SIG_IGN); sp->_mouse_active = FALSE; break; +#endif +#ifdef USE_TERM_DRIVER + case M_TERM_DRIVER: + sp->_mouse_active = FALSE; + break; #endif case M_NONE: return; @@ -1240,6 +1272,11 @@ _nc_mouse_wrap(SCREEN *sp) case M_SYSMOUSE: mouse_activate(sp, FALSE); break; +#endif +#ifdef USE_TERM_DRIVER + case M_TERM_DRIVER: + mouse_activate(sp, FALSE); + break; #endif case M_NONE: break; @@ -1272,6 +1309,13 @@ _nc_mouse_resume(SCREEN *sp) mouse_activate(sp, TRUE); break; #endif + +#ifdef USE_TERM_DRIVER + case M_TERM_DRIVER: + mouse_activate(sp, TRUE); + break; +#endif + case M_NONE: break; }