2007-07-26 01:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/source/rtl/gtcrs/gtcrs.c
    * added protection against misleading mouse wheel and mouse drag
      events

  * harbour/source/rtl/gttrm/gttrm.c
    * added protection against misleading mouse wheel and mouse drag
      events
    * enable XTERM like mouse reporting also for Linux terminal - it's
      possible with external mouse driver
    * added some CTRL+Fx escape sequences XTERM and gnome-terminal
      compatible
    * disabled some escape sequences mapped to simple cursor keys
      which are used as CTRL+[cursor key] in recent XTerm versions
This commit is contained in:
Przemyslaw Czerpak
2007-07-25 23:21:30 +00:00
parent 1eb9e7722b
commit ee53b57d8b
3 changed files with 82 additions and 14 deletions

View File

@@ -8,6 +8,21 @@
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
2007-07-26 01:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/rtl/gtcrs/gtcrs.c
* added protection against misleading mouse wheel and mouse drag
events
* harbour/source/rtl/gttrm/gttrm.c
* added protection against misleading mouse wheel and mouse drag
events
* enable XTERM like mouse reporting also for Linux terminal - it's
possible with external mouse driver
* added some CTRL+Fx escape sequences XTERM and gnome-terminal
compatible
* disabled some escape sequences mapped to simple cursor keys
which are used as CTRL+[cursor key] in recent XTerm versions
2007-07-25 18:45 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/rtl/gtchrmap.c
* indenting

View File

@@ -1098,7 +1098,7 @@ static void set_tmevt( unsigned char *cMBuf, mouseEvent * mEvt )
mEvt->col = col;
}
switch ( cMBuf[0] & 0xC3 )
switch( cMBuf[0] & 0xC3 )
{
case 0x0:
mEvt->buttonstate |= M_BUTTON_LEFT;
@@ -1113,10 +1113,12 @@ static void set_tmevt( unsigned char *cMBuf, mouseEvent * mEvt )
mEvt->buttonstate &= ~(M_BUTTON_KEYMASK|M_BUTTON_DBLMASK);
break;
case 0x40:
mEvt->buttonstate |= M_BUTTON_WHEELUP;
if( cMBuf[0] & 0x20 )
mEvt->buttonstate |= M_BUTTON_WHEELUP;
break;
case 0x41:
mEvt->buttonstate |= M_BUTTON_WHEELDOWN;
if( cMBuf[0] & 0x20 )
mEvt->buttonstate |= M_BUTTON_WHEELDOWN;
break;
}
chk_mevtdblck( mEvt );

View File

@@ -960,10 +960,12 @@ static void set_tmevt( unsigned char *cMBuf, mouseEvent * mEvt )
mEvt->buttonstate &= ~(M_BUTTON_KEYMASK|M_BUTTON_DBLMASK);
break;
case 0x40:
mEvt->buttonstate |= M_BUTTON_WHEELUP;
if( cMBuf[0] & 0x20 )
mEvt->buttonstate |= M_BUTTON_WHEELUP;
break;
case 0x41:
mEvt->buttonstate |= M_BUTTON_WHEELDOWN;
if( cMBuf[0] & 0x20 )
mEvt->buttonstate |= M_BUTTON_WHEELDOWN;
break;
}
chk_mevtdblck( mEvt );
@@ -1036,7 +1038,7 @@ static void flush_gpmevt( mouseEvent * mEvt )
static void disp_mousecursor( void )
{
#ifdef HAVE_GPM_H
if( s_termState.mouse_type == MOUSE_GPM && gpm_visiblepointer )
if( (s_termState.mouse_type & MOUSE_GPM) && gpm_visiblepointer )
{
Gpm_DrawPointer( s_termState.mLastEvt.col, s_termState.mLastEvt.row,
gpm_consolefd );
@@ -1046,18 +1048,19 @@ static void disp_mousecursor( void )
static void mouse_init( void )
{
if( s_termState.terminal_type == TERM_XTERM )
if( s_termState.terminal_type == TERM_XTERM ||
s_termState.terminal_type == TERM_LINUX )
{
/* save old hilit tracking & enable mouse tracking */
static const char * szMouseOn = "\033[?1001s\033[?1002h";
hb_gt_trm_termOut( ( BYTE * ) szMouseOn, strlen( szMouseOn ) );
hb_gt_trm_termFlush();
memset( ( void * ) &s_termState.mLastEvt, 0, sizeof( s_termState.mLastEvt ) );
s_termState.mouse_type = MOUSE_XTERM;
s_termState.mouse_type |= MOUSE_XTERM;
s_termState.mButtons = 3;
}
#ifdef HAVE_GPM_H
else if( s_termState.terminal_type == TERM_LINUX )
if( s_termState.terminal_type == TERM_LINUX )
{
s_termState.Conn.eventMask =
GPM_MOVE | GPM_DRAG | GPM_UP | GPM_DOWN | GPM_DOUBLE;
@@ -1077,7 +1080,7 @@ static void mouse_init( void )
memset( ( void * ) &s_termState.mLastEvt, 0, sizeof( s_termState.mLastEvt ) );
flush_gpmevt( &s_termState.mLastEvt );
add_efds( gpm_fd, O_RDONLY, set_gpmevt, ( void * ) &s_termState.mLastEvt );
s_termState.mouse_type = MOUSE_GPM;
s_termState.mouse_type |= MOUSE_GPM;
/*
* In recent GPM versions it produce unpleasure noice on the screen
@@ -1095,7 +1098,7 @@ static void mouse_init( void )
static void mouse_exit( void )
{
if( s_termState.mouse_type == MOUSE_XTERM )
if( s_termState.mouse_type & MOUSE_XTERM )
{
/* disable mouse tracking & restore old hilit tracking */
static const char * szMouseOff = "\033[?1002l\033[?1001r";
@@ -1103,7 +1106,7 @@ static void mouse_exit( void )
hb_gt_trm_termFlush();
}
#ifdef HAVE_GPM_H
else if( s_termState.mouse_type == MOUSE_GPM && gpm_fd >= 0 )
if( (s_termState.mouse_type & MOUSE_GPM) && gpm_fd >= 0 )
{
del_efds( gpm_fd );
Gpm_Close();
@@ -2184,6 +2187,7 @@ static void init_keys( void )
{ EXKEY_LEFT , "\033[D" },
{ EXKEY_CENTER, "\033[E" },
{ EXKEY_END , "\033[F" },
{ EXKEY_CENTER, "\033[G" },
{ EXKEY_HOME , "\033[H" },
{ EXKEY_HOME , "\033[1~" },
@@ -2194,6 +2198,7 @@ static void init_keys( void )
{ EXKEY_DEL, "\033[3~" }, /* kdch1 */
{ EXKEY_PGUP, "\033[5~" }, /* kpp */
{ EXKEY_PGDN, "\033[6~" }, /* knp */
#if 0
{ EXKEY_UP, "\033OA" }, /* kcuu1 */
{ EXKEY_DOWN, "\033OB" }, /* kcud1 */
{ EXKEY_RIGHT, "\033OC" }, /* kcuf1 */
@@ -2202,9 +2207,25 @@ static void init_keys( void )
{ EXKEY_END, "\033OF" }, /* kend */
{ EXKEY_HOME, "\033OH" }, /* khome */
{ EXKEY_ENTER, "\033OM" }, /* kent */
#endif
{ EXKEY_TAB, "\011" }, /* ht */
{ EXKEY_BS, "\010" }, /* kbs */
/* PuTTY */
{ EXKEY_UP |KEY_CTRLMASK, "\033OA" },
{ EXKEY_DOWN |KEY_CTRLMASK, "\033OB" },
{ EXKEY_RIGHT |KEY_CTRLMASK, "\033OC" },
{ EXKEY_LEFT |KEY_CTRLMASK, "\033OD" },
{ EXKEY_CENTER|KEY_CTRLMASK, "\033OG" },
#if 0
{ EXKEY_CENTER|KEY_CTRLMASK, "\033OE" },
{ EXKEY_END |KEY_CTRLMASK, "\033OF" },
{ EXKEY_HOME |KEY_CTRLMASK, "\033OH" },
{ EXKEY_ENTER |KEY_CTRLMASK, "\033OM" },
#endif
{ EXKEY_UP |KEY_CTRLMASK, "\033[5A" },
{ EXKEY_DOWN |KEY_CTRLMASK, "\033[5B" },
{ EXKEY_RIGHT |KEY_CTRLMASK, "\033[5C" },
@@ -2311,6 +2332,23 @@ static void init_keys( void )
{ EXKEY_F11, "\033[23~" }, /* kf11 */
{ EXKEY_F12, "\033[24~" }, /* kf12 */
{ EXKEY_F1 |KEY_CTRLMASK, "\033O5P" },
{ EXKEY_F2 |KEY_CTRLMASK, "\033O5Q" },
{ EXKEY_F3 |KEY_CTRLMASK, "\033O5R" },
{ EXKEY_F4 |KEY_CTRLMASK, "\033O5S" },
{ EXKEY_F1 |KEY_CTRLMASK, "\033[11;5~" },
{ EXKEY_F2 |KEY_CTRLMASK, "\033[12;5~" },
{ EXKEY_F3 |KEY_CTRLMASK, "\033[13;5~" },
{ EXKEY_F4 |KEY_CTRLMASK, "\033[14;5~" },
{ EXKEY_F5 |KEY_CTRLMASK, "\033[15;5~" },
{ EXKEY_F6 |KEY_CTRLMASK, "\033[17;5~" },
{ EXKEY_F7 |KEY_CTRLMASK, "\033[18;5~" },
{ EXKEY_F8 |KEY_CTRLMASK, "\033[19;5~" },
{ EXKEY_F9 |KEY_CTRLMASK, "\033[20;5~" },
{ EXKEY_F10|KEY_CTRLMASK, "\033[21;5~" },
{ EXKEY_F11|KEY_CTRLMASK, "\033[23;5~" },
{ EXKEY_F12|KEY_CTRLMASK, "\033[24;5~" },
{ EXKEY_F1 |KEY_CTRLMASK|KEY_ALTMASK, "\033O2P" },
{ EXKEY_F2 |KEY_CTRLMASK|KEY_ALTMASK, "\033O2Q" },
{ EXKEY_F3 |KEY_CTRLMASK|KEY_ALTMASK, "\033O2R" },
@@ -2440,6 +2478,19 @@ static void init_keys( void )
{ EXKEY_F3, "\033[13~" },
{ EXKEY_F4, "\033[14~" },
{ EXKEY_F5, "\033[15~" },
{ EXKEY_F1 |KEY_CTRLMASK, "\033[11;5~" },
{ EXKEY_F2 |KEY_CTRLMASK, "\033[12;5~" },
{ EXKEY_F3 |KEY_CTRLMASK, "\033[13;5~" },
{ EXKEY_F4 |KEY_CTRLMASK, "\033[14;5~" },
{ EXKEY_F5 |KEY_CTRLMASK, "\033[15;5~" },
{ EXKEY_F6 |KEY_CTRLMASK, "\033[17;5~" },
{ EXKEY_F7 |KEY_CTRLMASK, "\033[18;5~" },
{ EXKEY_F8 |KEY_CTRLMASK, "\033[19;5~" },
{ EXKEY_F9 |KEY_CTRLMASK, "\033[20;5~" },
{ EXKEY_F10|KEY_CTRLMASK, "\033[21;5~" },
{ EXKEY_F11|KEY_CTRLMASK, "\033[23;5~" },
{ EXKEY_F12|KEY_CTRLMASK, "\033[24;5~" },
{ EXKEY_UP |KEY_CTRLMASK, "\033OA" },
{ EXKEY_DOWN |KEY_CTRLMASK, "\033OB" },
{ EXKEY_RIGHT |KEY_CTRLMASK, "\033OC" },
@@ -2831,7 +2882,7 @@ static void hb_gt_trm_mouse_Show( void )
HB_TRACE( HB_TR_DEBUG, ( "hb_gt_trm_mouse_Show()" ) );
#ifdef HAVE_GPM_H
if( s_termState.mouse_type == MOUSE_GPM )
if( s_termState.mouse_type & MOUSE_GPM )
gpm_visiblepointer = 1;
#endif
disp_mousecursor();
@@ -2842,7 +2893,7 @@ static void hb_gt_trm_mouse_Hide( void )
HB_TRACE( HB_TR_DEBUG, ( "hb_gt_trm_mouse_Hide()" ) );
#ifdef HAVE_GPM_H
if( s_termState.mouse_type == MOUSE_GPM )
if( s_termState.mouse_type & MOUSE_GPM )
{
gpm_visiblepointer = 0;
}