IDA regression again :-)

Eric Pouech eric.pouech at wanadoo.fr
Sat Feb 8 07:03:39 CST 2003


Lionel Ulmer wrote:
> Hi all,
> 
> Seems that with latest CVS, the ncurses driver 'added' a lot of regressions
> to IDA... The biggest gripe is that the mouse support is VERY flaky (I can
> click some times but once it stops working, it seems that I cannot do
> anymore with it). 
> 
> As I do not know exactly how to select stuff in the GUI using only the
> keyboard (which seems flaky too as the Backspace and Delete key seem not
> really to work), I am a bit stuck.
does the first patch help ?

> PS: we REALLY should be able to use the old slow as hell graphical driver as
>     a fallback....
as a dirty work around, apply the second patch, and define WC_USER (to 
1) in your env when you want USER backend (instead of CURSES)

HTH

(the second patch will not be applied as it is)

A+
-- 
Eric Pouech
-------------- next part --------------
Index: programs/wineconsole/curses.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/programs/wineconsole/curses.c,v
retrieving revision 1.4
diff -u -r1.4 curses.c
--- programs/wineconsole/curses.c	23 Jan 2003 22:51:04 -0000	1.4
+++ programs/wineconsole/curses.c	8 Feb 2003 12:40:56 -0000
@@ -23,6 +23,8 @@
  * - not all key mapping functions have been written
  * - allow dyn loading of curses library (extreme care should be taken for 
  *   functions which can be implemented as macros)
+ * - finish buffer scrolling (mainly, need to decide of a nice way for 
+ *   requesting the UP/DOWN operations
  */
 
 #include "config.h"
@@ -54,6 +56,7 @@
     HANDLE              hInput;
     WINDOW*             pad;
     chtype*             line;
+    int                 allow_scroll;
 };
 
 /******************************************************************
@@ -209,6 +212,27 @@
     /* FIXME: really not much to do ? */
 }
 
+/******************************************************************
+ *		WCCURSES_ScrollV
+ *
+ *
+ */
+static void WCCURSES_ScrollV(struct inner_data* data, int delta)
+{
+    int	pos = data->curcfg.win_pos.Y;
+
+    pos += delta;
+    if (pos < 0) pos = 0;
+    if (pos > data->curcfg.sb_height - data->curcfg.win_height)
+        pos = data->curcfg.sb_height - data->curcfg.win_height;
+    if (pos != data->curcfg.win_pos.Y)
+    {
+        data->curcfg.win_pos.Y = pos;
+        WCCURSES_PosCursor(data);
+        WINECON_NotifyWindowChange(data);
+    }
+}
+
 /* Ascii -> VK, generated by calling VkKeyScanA(i) */
 static int vkkeyscan_table[256] = 
 {
@@ -238,50 +262,90 @@
 }; 
 
 /******************************************************************
+ *		WCCURSES_InitComplexChar
+ *
+ *
+ */
+static inline void WCCURSES_InitComplexChar(INPUT_RECORD* ir, BOOL down, WORD vk, WORD kc, DWORD cks)
+{
+    ir->EventType			 = KEY_EVENT;
+    ir->Event.KeyEvent.bKeyDown	         = down;
+    ir->Event.KeyEvent.wRepeatCount	 = 1;
+    
+    ir->Event.KeyEvent.wVirtualScanCode  = vk;
+    ir->Event.KeyEvent.wVirtualKeyCode   = kc;
+    ir->Event.KeyEvent.dwControlKeyState = cks;
+    ir->Event.KeyEvent.uChar.UnicodeChar = 0;
+}
+
+/******************************************************************
  *		WCCURSES_FillSimpleChar
  *
  *
  */
-static unsigned WCCURSES_FillSimpleChar(INPUT_RECORD* ir, unsigned inchar)
+static unsigned WCCURSES_FillSimpleChar(INPUT_RECORD* ir, unsigned real_inchar)
 {
-     unsigned vk;
-     unsigned second;
-     DWORD    cks = 0;
-
-     switch (inchar)
-     {
-     case 127: inchar = '\b'; break;
-     case  10: inchar = '\r'; break;
-     case  27:
-         /* we assume that ESC & and the second character are atomically generated
-          * otherwise, we'll have a race here
-          */
-         if ((second = wgetch(stdscr)) != ERR)
-         {
-             /* we got a alt-something key... */
-             /* FIXME: we don't generate the keydown message for the Alt key */
-             cks = LEFT_ALT_PRESSED;
-             inchar = second;
-         }
-         break;
-     }
-     
-     ir->EventType                        = KEY_EVENT;
-     ir->Event.KeyEvent.bKeyDown          = 1;
-     ir->Event.KeyEvent.wRepeatCount      = 1;
-     ir->Event.KeyEvent.dwControlKeyState = cks;
-     vk = vkkeyscan_table[inchar];
-     if (vk & 0x0100)
-	  ir->Event.KeyEvent.dwControlKeyState |= SHIFT_PRESSED;
-     if (vk & 0x0200 || (unsigned char)inchar <= 26)
-	  ir->Event.KeyEvent.dwControlKeyState |= LEFT_CTRL_PRESSED;
-     if (vk & 0x0400)
-	  ir->Event.KeyEvent.dwControlKeyState |= LEFT_ALT_PRESSED;
-     ir->Event.KeyEvent.wVirtualKeyCode = vk;
-     ir->Event.KeyEvent.wVirtualScanCode = mapvkey_0[vk & 0x00ff]; /* VirtualKeyCodes to ScanCode */
-     ir->Event.KeyEvent.uChar.UnicodeChar = (unsigned char)inchar;
+    unsigned vk;
+    unsigned inchar;
+    unsigned numEvent = 0;
+    DWORD    cks = 0;
 
-     return TRUE;
+    switch (real_inchar)
+    {
+    case 127: inchar = '\b'; break;
+    case  10: inchar = '\r'; break;
+    case  27:
+        /* we assume that ESC & and the second character are atomically generated
+         * otherwise, we'll have a race here
+         */
+        if ((inchar = wgetch(stdscr)) != ERR)
+        {
+            /* we got a alt-something key... */
+            cks = LEFT_ALT_PRESSED;
+        }
+        else
+            inchar = 27;
+        break;
+    default:
+        inchar = real_inchar;
+        break;
+    }
+    if ((inchar & ~0xFF) != 0) WINE_FIXME("What a char (%u)\n", inchar);
+    vk = vkkeyscan_table[inchar];
+    if (vk & 0x0100)
+        WCCURSES_InitComplexChar(&ir[numEvent++], 1, 0x2a, 0x10, SHIFT_PRESSED);
+    if ((vk & 0x0200) || (unsigned char)real_inchar <= 26)
+        WCCURSES_InitComplexChar(&ir[numEvent++], 1, 0x1d, 0x11, LEFT_CTRL_PRESSED);
+    if (vk & 0x0400)
+        WCCURSES_InitComplexChar(&ir[numEvent++], 1, 0x38, 0x12, LEFT_ALT_PRESSED);
+
+    ir[numEvent].EventType                        = KEY_EVENT;
+    ir[numEvent].Event.KeyEvent.bKeyDown          = 1;
+    ir[numEvent].Event.KeyEvent.wRepeatCount      = 1;
+    ir[numEvent].Event.KeyEvent.dwControlKeyState = cks;
+    if (vk & 0x0100)
+        ir[numEvent].Event.KeyEvent.dwControlKeyState |= SHIFT_PRESSED;
+    if ((vk & 0x0200) || (unsigned char)real_inchar <= 26)
+        ir[numEvent].Event.KeyEvent.dwControlKeyState |= LEFT_CTRL_PRESSED;
+    if (vk & 0x0400)
+        ir[numEvent].Event.KeyEvent.dwControlKeyState |= LEFT_ALT_PRESSED;
+    ir[numEvent].Event.KeyEvent.wVirtualKeyCode = vk;
+    ir[numEvent].Event.KeyEvent.wVirtualScanCode = mapvkey_0[vk & 0x00ff]; /* VirtualKeyCodes to ScanCode */
+    ir[numEvent].Event.KeyEvent.uChar.UnicodeChar = (unsigned char)inchar;
+
+    ir[numEvent + 1] = ir[numEvent];
+    ir[numEvent + 1].Event.KeyEvent.bKeyDown      = 0;
+
+    numEvent += 2;
+
+    if (vk & 0x0400)
+        WCCURSES_InitComplexChar(&ir[numEvent++], 0, 0x38, 0x12, LEFT_ALT_PRESSED);
+    if ((vk & 0x0200) || (unsigned char)real_inchar <= 26)
+        WCCURSES_InitComplexChar(&ir[numEvent++], 0, 0x1d, 0x11, 0);
+    if (vk & 0x0100)
+        WCCURSES_InitComplexChar(&ir[numEvent++], 0, 0x2a, 0x10, 0);
+
+    return numEvent;
 }
 
 /******************************************************************
@@ -289,19 +353,12 @@
  *
  *
  */
-static unsigned WCCURSES_FillComplexChar(INPUT_RECORD* ir, WORD vk, WORD kc)
+static unsigned WCCURSES_FillComplexChar(INPUT_RECORD* ir, WORD vk, WORD kc, DWORD cks)
 {
-     ir->EventType			  = KEY_EVENT;
-     ir->Event.KeyEvent.bKeyDown	  = 1;
-     ir->Event.KeyEvent.wRepeatCount	  = 1;
-     ir->Event.KeyEvent.dwControlKeyState = 0;
-     
-     ir->Event.KeyEvent.wVirtualScanCode  = vk;
-     ir->Event.KeyEvent.wVirtualKeyCode   = kc;
-     ir->Event.KeyEvent.dwControlKeyState |= ENHANCED_KEY;
-     ir->Event.KeyEvent.uChar.UnicodeChar = 0;
-     
-     return TRUE;
+    WCCURSES_InitComplexChar(&ir[0], 1, vk, kc, ENHANCED_KEY | cks);
+    WCCURSES_InitComplexChar(&ir[1], 0, vk, kc, ENHANCED_KEY | cks);
+
+    return 2;
 }
 
 /******************************************************************
@@ -311,58 +368,58 @@
  */
 static unsigned WCCURSES_FillMouse(INPUT_RECORD* ir)
 {
-     static	unsigned	bstate /* = 0 */;
-     static	COORD 		pos /* = {0, 0} */;
-     
-     MEVENT	mevt;
-     
-     if (getmouse(&mevt) == ERR)
-         return FALSE;
-     
-     WINE_TRACE("[%u]: (%d, %d) %08lx\n", 
-                mevt.id, mevt.x, mevt.y, (unsigned long)mevt.bstate);
-     
-     /* macros to ease mapping ncurse button numbering to windows's one */
+    static	unsigned	bstate /* = 0 */;
+    static	COORD 		pos /* = {0, 0} */;
+
+    MEVENT	mevt;
+
+    if (getmouse(&mevt) == ERR)
+        return 0;
+
+    WINE_TRACE("[%u]: (%d, %d) %08lx\n", 
+               mevt.id, mevt.x, mevt.y, (unsigned long)mevt.bstate);
+
+    /* macros to ease mapping ncurse button numbering to windows's one */
 #define	BTN1_BIT	FROM_LEFT_1ST_BUTTON_PRESSED
 #define	BTN2_BIT	RIGHTMOST_BUTTON_PRESSED
 #define	BTN3_BIT	FROM_LEFT_2ND_BUTTON_PRESSED
 #define	BTN4_BIT	0 /* not done yet */
-     
-     if (mevt.bstate & BUTTON1_PRESSED)	 bstate |= BTN1_BIT;
-     if (mevt.bstate & BUTTON1_RELEASED) bstate &= ~BTN1_BIT;
-     if (mevt.bstate & BUTTON2_PRESSED)	 bstate |= BTN2_BIT;
-     if (mevt.bstate & BUTTON2_RELEASED) bstate &= ~BTN2_BIT;
-     if (mevt.bstate & BUTTON3_PRESSED)	 bstate |= BTN3_BIT;
-     if (mevt.bstate & BUTTON3_RELEASED) bstate &= ~BTN3_BIT;
-     
-     ir->EventType = MOUSE_EVENT;
-     ir->Event.MouseEvent.dwMousePosition.X = mevt.x;
-     ir->Event.MouseEvent.dwMousePosition.Y = mevt.y;
-     
-     ir->Event.MouseEvent.dwButtonState = bstate;
-
-     /* partial conversion */
-     ir->Event.MouseEvent.dwControlKeyState = 0;
-     if (mevt.bstate & BUTTON_SHIFT)	ir->Event.MouseEvent.dwControlKeyState |= SHIFT_PRESSED;
-     /* choose to map to left ctrl... could use both ? */
-     if (mevt.bstate & BUTTON_CTRL)	ir->Event.MouseEvent.dwControlKeyState |= LEFT_CTRL_PRESSED;
-     /* choose to map to left alt... could use both ? */
-     if (mevt.bstate & BUTTON_ALT)	ir->Event.MouseEvent.dwControlKeyState |= LEFT_ALT_PRESSED;
-     /* FIXME: unsupported yet flags: CAPSLOCK_ON, ENHANCED_KEY (??), NUMLOCK_ON, SCROLLLOCK_ON 
-      * could be reported from the key events...
-      */
-     
-     ir->Event.MouseEvent.dwEventFlags = 0;
-     /* FIXME: we no longer generate double click events */
-
-     if (!(mevt.bstate & (BUTTON1_PRESSED|BUTTON1_RELEASED|BUTTON2_PRESSED|BUTTON2_RELEASED|BUTTON3_PRESSED|BUTTON3_RELEASED)) &&
-         (mevt.x != pos.X || mevt.y != pos.Y))
-     {
-	  ir->Event.MouseEvent.dwEventFlags |= MOUSE_MOVED;
-     }
-     pos.X = mevt.x; pos.Y = mevt.y;
 
-     return FALSE;
+    if (mevt.bstate & BUTTON1_PRESSED)	 bstate |= BTN1_BIT;
+    if (mevt.bstate & BUTTON1_RELEASED)  bstate &= ~BTN1_BIT;
+    if (mevt.bstate & BUTTON2_PRESSED)	 bstate |= BTN2_BIT;
+    if (mevt.bstate & BUTTON2_RELEASED)  bstate &= ~BTN2_BIT;
+    if (mevt.bstate & BUTTON3_PRESSED)	 bstate |= BTN3_BIT;
+    if (mevt.bstate & BUTTON3_RELEASED)  bstate &= ~BTN3_BIT;
+
+    ir->EventType = MOUSE_EVENT;
+    ir->Event.MouseEvent.dwMousePosition.X = mevt.x;
+    ir->Event.MouseEvent.dwMousePosition.Y = mevt.y;
+
+    ir->Event.MouseEvent.dwButtonState = bstate;
+
+    /* partial conversion */
+    ir->Event.MouseEvent.dwControlKeyState = 0;
+    if (mevt.bstate & BUTTON_SHIFT)	ir->Event.MouseEvent.dwControlKeyState |= SHIFT_PRESSED;
+    /* choose to map to left ctrl... could use both ? */
+    if (mevt.bstate & BUTTON_CTRL)	ir->Event.MouseEvent.dwControlKeyState |= LEFT_CTRL_PRESSED;
+    /* choose to map to left alt... could use both ? */
+    if (mevt.bstate & BUTTON_ALT)	ir->Event.MouseEvent.dwControlKeyState |= LEFT_ALT_PRESSED;
+    /* FIXME: unsupported yet flags: CAPSLOCK_ON, ENHANCED_KEY (??), NUMLOCK_ON, SCROLLLOCK_ON 
+     * could be reported from the key events...
+     */
+
+    ir->Event.MouseEvent.dwEventFlags = 0;
+    /* FIXME: we no longer generate double click events */
+
+    if (!(mevt.bstate & (BUTTON1_PRESSED|BUTTON1_RELEASED|BUTTON2_PRESSED|BUTTON2_RELEASED|BUTTON3_PRESSED|BUTTON3_RELEASED)) &&
+        (mevt.x != pos.X || mevt.y != pos.Y))
+    {
+        ir->Event.MouseEvent.dwEventFlags |= MOUSE_MOVED;
+    }
+    pos.X = mevt.x; pos.Y = mevt.y;
+
+    return 1;
 }
 
 /******************************************************************
@@ -370,31 +427,31 @@
  *
  *
  */
-static unsigned WCCURSES_FillCode(INPUT_RECORD* ir, int inchar)
+static unsigned WCCURSES_FillCode(struct inner_data* data, INPUT_RECORD* ir, int inchar)
 {
-    unsigned secondEvent = 0;
-
+    unsigned numEvent = 0;
+    
     switch (inchar)
     {
     case KEY_BREAK:
         goto notFound;
     case KEY_DOWN:
-        secondEvent = WCCURSES_FillComplexChar(ir, 0x50, 0x28);
+        numEvent = WCCURSES_FillComplexChar(ir, 0x50, 0x28, 0);
         break;
     case KEY_UP:
-        secondEvent = WCCURSES_FillComplexChar(ir, 0x48, 0x26);
+        numEvent = WCCURSES_FillComplexChar(ir, 0x48, 0x26, 0);
         break;
     case KEY_LEFT:
-        secondEvent = WCCURSES_FillComplexChar(ir, 0x4b, 0x25);
+        numEvent = WCCURSES_FillComplexChar(ir, 0x4b, 0x25, 0);
         break;
     case KEY_RIGHT:
-        secondEvent = WCCURSES_FillComplexChar(ir, 0x4d, 0x27);
+        numEvent = WCCURSES_FillComplexChar(ir, 0x4d, 0x27, 0);
         break;
     case KEY_HOME:
-        secondEvent = WCCURSES_FillComplexChar(ir, 0x47, 0x24);
+        numEvent = WCCURSES_FillComplexChar(ir, 0x47, 0x24, 0);
         break;
     case KEY_BACKSPACE:
-        secondEvent = WCCURSES_FillSimpleChar(ir, '\b');
+        numEvent = WCCURSES_FillSimpleChar(ir, '\b');
         break;
         
     case KEY_F0: /* up to F63 */
@@ -410,17 +467,31 @@
     case KEY_F( 8):
     case KEY_F( 9):
     case KEY_F(10):
-        secondEvent = WCCURSES_FillComplexChar(ir, 0x3b + inchar - KEY_F(1), 0);
+        numEvent = WCCURSES_FillComplexChar(ir, 0x3b + inchar - KEY_F(1), 0, 0);
         break;
     case KEY_F(11):
     case KEY_F(12):
-        secondEvent = WCCURSES_FillComplexChar(ir, 0xd9 + inchar - KEY_F(11), 0);
+        if (PRIVATE(data)->allow_scroll)
+        {
+            WCCURSES_ScrollV(data, inchar == KEY_F(11) ? 8 : -8);
+        }
+        else
+        {
+            numEvent = WCCURSES_FillComplexChar(ir, 0xd9 + inchar - KEY_F(11), 0, 0);
+        }
         break;
 		    
     case KEY_DL:
     case KEY_IL:
+        goto notFound;
+
     case KEY_DC:
+        numEvent = WCCURSES_FillComplexChar(ir, 0x53, 0x2e, 0);
+        break;
     case KEY_IC:
+        numEvent = WCCURSES_FillComplexChar(ir, 0x52, 0x2d, 0);
+        break;
+
     case KEY_EIC:
     case KEY_CLEAR:
     case KEY_EOS:
@@ -430,10 +501,10 @@
         goto notFound;
 		    
     case KEY_NPAGE:
-        secondEvent = WCCURSES_FillComplexChar(ir, 0x51, 0x22);
+        numEvent = WCCURSES_FillComplexChar(ir, 0x51, 0x22, 0);
         break;
     case KEY_PPAGE:
-        secondEvent = WCCURSES_FillComplexChar(ir, 0x49, 0x21);
+        numEvent = WCCURSES_FillComplexChar(ir, 0x49, 0x21, 0);
         break;
         
     case KEY_STAB:
@@ -456,7 +527,12 @@
     case KEY_COMMAND:
     case KEY_COPY:
     case KEY_CREATE:
+        goto notFound;
+
     case KEY_END:
+        numEvent = WCCURSES_FillComplexChar(ir, 0x4f, 0x23, 0);
+        break;
+        
     case KEY_EXIT:
     case KEY_FIND:
     case KEY_HELP:
@@ -465,7 +541,7 @@
         goto notFound;
 		    
     case KEY_MOUSE:
-        secondEvent = WCCURSES_FillMouse(ir);
+        numEvent = WCCURSES_FillMouse(ir);
         break;
         
     case KEY_MOVE:
@@ -486,17 +562,35 @@
     case KEY_SCOMMAND:
     case KEY_SCOPY:
     case KEY_SCREATE:
+        goto notFound;
+
     case KEY_SDC:
+        numEvent = WCCURSES_FillComplexChar(ir, 0x53, 0x2e, SHIFT_PRESSED);
+        break;
     case KEY_SDL:
     case KEY_SELECT:
+        goto notFound;
+
     case KEY_SEND:
+        numEvent = WCCURSES_FillComplexChar(ir, 0x4f, 0x23, SHIFT_PRESSED);
+        break;
+
     case KEY_SEOL:
     case KEY_SEXIT:
     case KEY_SFIND:
     case KEY_SHELP:
+        goto notFound;
+
     case KEY_SHOME:
+        numEvent = WCCURSES_FillComplexChar(ir, 0x47, 0x24, SHIFT_PRESSED);
+        break;
     case KEY_SIC:
+        numEvent = WCCURSES_FillComplexChar(ir, 0x52, 0x2d, SHIFT_PRESSED);
+        break;
     case KEY_SLEFT:
+        numEvent = WCCURSES_FillComplexChar(ir, 0x4b, 0x25, SHIFT_PRESSED);
+        break;
+
     case KEY_SMESSAGE:
     case KEY_SMOVE:
     case KEY_SNEXT:
@@ -505,7 +599,12 @@
     case KEY_SPRINT:
     case KEY_SREDO:
     case KEY_SREPLACE:
+        goto notFound;
+
     case KEY_SRIGHT:
+        numEvent = WCCURSES_FillComplexChar(ir, 0x4d, 0x27, SHIFT_PRESSED);
+        break;
+
     case KEY_SRSUME:
     case KEY_SSAVE:
     case KEY_SSUSPEND:
@@ -513,13 +612,13 @@
     case KEY_SUSPEND:
     case KEY_UNDO:
     notFound:
-        WINE_FIXME("Not done yet (%d)\n", inchar);
+        WINE_FIXME("Not done yet (%o)\n", inchar);
         break;
     default:
-        WINE_ERR("Unknown val (%d)\n", inchar);
+        WINE_ERR("Unknown val (%o)\n", inchar);
         break;
     }
-    return secondEvent;
+    return numEvent;
 }
 
 /******************************************************************
@@ -529,45 +628,25 @@
  */
 static void WCCURSES_GetEvents(struct inner_data* data)
 {
-     int		inchar;
-     INPUT_RECORD       ir[2];
-     unsigned		secondEvent = 0;
-     DWORD              n;
-
-     if ((inchar = wgetch(stdscr)) == ERR) {WINE_FIXME("Ooch. somebody beat us\n");return;}
-
-     WINE_TRACE("Got %d\n", inchar);
-
-     ir->EventType = 0;
-	  
-     if (inchar & KEY_CODE_YES)
-     {
-         secondEvent = WCCURSES_FillCode(ir, inchar);
-     }
-     else
-     {
-         secondEvent = WCCURSES_FillSimpleChar(ir, inchar);
-     }
-
-     if (secondEvent != 0)
-     {
-         ir[1] = ir[0];
-
-         switch (ir[1].EventType)
-         {
-         case KEY_EVENT:
-             ir[1].Event.KeyEvent.bKeyDown = 0;
-             break;
-         case MOUSE_EVENT:
-             ir[1].Event.MouseEvent.dwButtonState &= ~secondEvent;
-             break;
-         default:	
-             WINE_FIXME("oooo\n");
-             break;
-         }
-     }
-     if (ir[0].EventType != 0)
-         WriteConsoleInput(data->hConIn, ir, secondEvent ? 2 : 1, &n);
+    int		        inchar;
+    INPUT_RECORD        ir[8];
+    unsigned		numEvent;
+    DWORD               n;
+    
+    if ((inchar = wgetch(stdscr)) == ERR) {WINE_FIXME("Ooch. somebody beat us\n");return;}
+    
+    WINE_TRACE("Got %d\n", inchar);
+    
+    if (inchar & KEY_CODE_YES)
+    {
+        numEvent = WCCURSES_FillCode(data, ir, inchar);
+    }
+    else
+    {
+        numEvent = WCCURSES_FillSimpleChar(ir, inchar);
+    }
+    if (numEvent)
+        WriteConsoleInput(data->hConIn, ir, numEvent, &n);
 }
 
 /******************************************************************
@@ -652,6 +731,12 @@
         return 0;
     }
 
+    /* FIXME: should find a good way to enable buffer scrolling
+     * For the time being, setting this to 1 will allow scrolling up/down 
+     * on buffer with F11/F12.
+     */
+    /* data->allow_scroll = 1; */
+
     initscr();
 
     /* creating the basic colors - FIXME intensity not handled yet */
@@ -670,10 +755,16 @@
     intrflush(stdscr, FALSE);
     nodelay(stdscr, TRUE);
     keypad(stdscr, TRUE);
-    mousemask(0xffffffff, &PRIVATE(data)->initial_mouse_mask);
-    /* no click event generation... we just need button up/down event */
-    mouseinterval(-1);
-
+    mousemask(BUTTON1_PRESSED|BUTTON1_RELEASED|
+              BUTTON2_PRESSED|BUTTON2_RELEASED|
+              BUTTON3_PRESSED|BUTTON3_RELEASED|
+              BUTTON_SHIFT|BUTTON_CTRL|BUTTON_ALT|REPORT_MOUSE_POSITION,
+              &PRIVATE(data)->initial_mouse_mask);
+    /* no click event generation... we just need button up/down events
+     * it doesn't seem that mouseinterval(-1) behaves as documented... 
+     * 0 seems to be better value to disable click event generation
+     */
+    mouseinterval(0);
     return TRUE;
 }
 
-------------- next part --------------
Index: programs/wineconsole/wineconsole.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/programs/wineconsole/wineconsole.c,v
retrieving revision 1.20
diff -u -r1.20 wineconsole.c
--- programs/wineconsole/wineconsole.c	9 Jan 2003 06:01:51 -0000	1.20
+++ programs/wineconsole/wineconsole.c	7 Feb 2003 20:21:30 -0000
@@ -658,7 +657,9 @@
         while (*src && *src != ' ') *dst++ = *src++;
         *dst = 0;
 
-        if (!(data = WINECON_Init(hInst, GetCurrentProcessId(), buffer, WCCURSES_InitBackend))) return 0;
+        if (!(data = WINECON_Init(hInst, GetCurrentProcessId(), buffer, 
+                                  getenv("WC_USER") ? WCUSER_InitBackend : WCCURSES_InitBackend))) 
+            return 0;
 	ret = WINECON_Spawn(data, wcmdLine);
         if (!ret)
 	{


More information about the wine-devel mailing list