wineconsole

Eric Pouech eric.pouech at wanadoo.fr
Sun Jan 5 14:58:17 CST 2003


this patch fixes a few more bugs in wineconsole's (n)curses backend
see changelog for the details

A+
-- 
Eric Pouech
-------------- next part --------------
Name:          wc_curs
ChangeLog:     
	- fixed some update problems (generic & while scrolling)
	- now generating key event for Ctrl-[A-Z] that our editline understands
	- implemented cursor visibility
License:       X11
GenDate:       2003/01/05 20:56:04 UTC
ModifiedFiles: programs/wineconsole/curses.c
AddedFiles:    
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/programs/wineconsole/curses.c,v
retrieving revision 1.2
diff -u -u -r1.2 curses.c
--- programs/wineconsole/curses.c	23 Dec 2002 01:35:27 -0000	1.2
+++ programs/wineconsole/curses.c	5 Jan 2003 20:55:58 -0000
@@ -80,9 +83,21 @@
  */
 static void	WCCURSES_PosCursor(const struct inner_data* data)
 {
-    wmove(PRIVATE(data)->pad, data->cursor.Y, data->cursor.X);
-    prefresh(PRIVATE(data)->pad, 
-             data->curcfg.win_pos.Y, data->curcfg.win_pos.X, 
+    if (data->curcfg.cursor_visible &&
+        data->cursor.Y >= data->curcfg.win_pos.Y &&
+        data->cursor.Y < data->curcfg.win_pos.Y + data->curcfg.win_height &&
+        data->cursor.X >= data->curcfg.win_pos.X &&
+        data->cursor.X < data->curcfg.win_pos.X + data->curcfg.win_width)
+    {
+        if (curs_set(2) == ERR) curs_set(1);
+        wmove(PRIVATE(data)->pad, data->cursor.Y, data->cursor.X);
+    }
+    else
+    {
+        curs_set(0);
+    }
+    prefresh(PRIVATE(data)->pad,
+             data->curcfg.win_pos.Y, data->curcfg.win_pos.X,
              0, 0, data->curcfg.win_height, data->curcfg.win_width);
 }
 
@@ -93,6 +108,10 @@
  */
 void	WCCURSES_ShapeCursor(struct inner_data* data, int size, int vis, BOOL force)
 {
+    /* we can't do much about the size... */
+    data->curcfg.cursor_size = size;
+    data->curcfg.cursor_visible = vis ? TRUE : FALSE;
+    WCCURSES_PosCursor(data);
 }
 
 /******************************************************************
@@ -156,12 +175,13 @@
             if (cell[x].Attributes & BACKGROUND_GREEN)     attr |= COLOR_PAIR(COLOR_GREEN << 3);
 
             if (cell[x].Attributes & FOREGROUND_INTENSITY) attr |= A_BOLD;
-
             PRIVATE(data)->line[x] = attr;
         }
         mvwaddchnstr(PRIVATE(data)->pad, y, 0, PRIVATE(data)->line, data->curcfg.sb_width);
     }
-    WCCURSES_PosCursor(data);
+    prefresh(PRIVATE(data)->pad,
+             data->curcfg.win_pos.Y, data->curcfg.win_pos.X,
+             0, 0, data->curcfg.win_height, data->curcfg.win_width);
 }
 
 /******************************************************************
@@ -179,8 +199,7 @@
     {
 	data->curcfg.win_pos.Y = pos;
     }
-    WCCURSES_Refresh(data, data->curcfg.win_pos.Y, 
-                     data->curcfg.win_pos.Y + data->curcfg.win_height - 1);
+    WCCURSES_PosCursor(data);
 }
 
 /******************************************************************
@@ -258,14 +298,14 @@
      vk = vkkeyscan_table[inchar];
      if (vk & 0x0100)
 	  ir->Event.KeyEvent.dwControlKeyState |= SHIFT_PRESSED;
-     if (vk & 0x0200)
+     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;
-     
+
      return TRUE;
 }
 
@@ -656,11 +709,9 @@
     nodelay(stdscr, TRUE);
     keypad(stdscr, TRUE);
     mousemask(0xffffffff, &PRIVATE(data)->initial_mouse_mask);
-    /* no click generation...
-     * --hmmm man page says -1, instead of 0, to disable click event generation
-     * -1 doesn't seem to work, while 0 does
-     */
-    mouseinterval(0);
+    /* no click event generation... we just need button up/down event */
+    mouseinterval(-1);
+
     return TRUE;
 }
 


More information about the wine-patches mailing list