On 2005-09-05 21:58, Slawa Olhovchenkov <slw_at_zxy.spb.ru> wrote: > On Mon, Sep 05, 2005 at 12:27:13PM -0400, Craig Rodrigues wrote: > > > On Sat, Sep 03, 2005 at 04:33:44PM +0300, Giorgos Keramidas wrote: > > > This was on a console running with 132x25 mode. > > > > Can you try this? > > 1. I think your remember '()' around '||' > 2. Now mouse cursor not moved. I think I've found why this seems broken in non-graphics VESA modes. In vesa_ioctl(), the 132x25 text mode triggers (diff since August 30): - return sc_set_text_mode(scp, tp, cmd & 0xff, 0, 0, 0); + return sc_set_text_mode(scp, tp, cmd & 0xff, 0, 0, 0, 0); By calling sc_set_text_mode() with a font width of zero, scp->font_width is then initialized to 0 and all set_mouse_pos() calls avoid running the patched section: > > - if (scp->mouse_xpos != scp->mouse_oldxpos || scp->mouse_ypos != scp->mouse_oldypos) { > > + if (scp->mouse_xpos != scp->mouse_oldxpos || scp->mouse_ypos != scp->mouse_oldypos && scp->font_size != 0 && scp->font_width != 0) { > > scp->status |= MOUSE_MOVED; > > scp->mouse_pos = > > (scp->mouse_ypos/scp->font_size - scp->yoff)*scp->xsize The following patch fixes the movement of the cursor in VESA text modes and avoids a panic in non-graphics VESA modes, by wrapping the graphics-specific changes to the position of the cursor in ISGRAPHSC(scp) checks. The extra KASSERT() is probably not necessary, but I'd vote for leaving it there anyway. %%% Index: scmouse.c =================================================================== RCS file: /home/ncvs/src/sys/dev/syscons/scmouse.c,v retrieving revision 1.38 diff -u -r1.38 scmouse.c --- scmouse.c 30 Aug 2005 18:58:16 -0000 1.38 +++ scmouse.c 6 Sep 2005 01:51:08 -0000 _at__at_ -140,9 +140,12 _at__at_ static void set_mouse_pos(scr_stat *scp) { - if (scp->mouse_xpos < scp->xoff*scp->font_width) - scp->mouse_xpos = scp->xoff*scp->font_width; - if (scp->mouse_ypos < scp->yoff*scp->font_size) + + KASSERT(scp != NULL, ("null scp")); + + if (scp->font_width != 0 && scp->mouse_xpos < scp->xoff * scp->font_width) + scp->mouse_xpos = scp->xoff * scp->font_width; + if (scp->font_size != 0 && scp->mouse_ypos < scp->yoff * scp->font_size) scp->mouse_ypos = scp->yoff*scp->font_size; if (ISGRAPHSC(scp)) { if (scp->mouse_xpos > scp->xpixel-1) _at__at_ -151,17 +154,21 _at__at_ scp->mouse_ypos = scp->ypixel-1; return; } else { - if (scp->mouse_xpos > (scp->xsize + scp->xoff)*scp->font_width - 1) - scp->mouse_xpos = (scp->xsize + scp->xoff)*scp->font_width - 1; - if (scp->mouse_ypos > (scp->ysize + scp->yoff)*scp->font_size - 1) - scp->mouse_ypos = (scp->ysize + scp->yoff)*scp->font_size - 1; + if (scp->font_width != 0 && + scp->mouse_xpos > (scp->xsize + scp->xoff) * scp->font_width - 1) + scp->mouse_xpos = (scp->xsize + scp->xoff) * scp->font_width - 1; + if (scp->font_size != 0 && + scp->mouse_ypos > (scp->ysize + scp->yoff) * scp->font_size - 1) + scp->mouse_ypos = (scp->ysize + scp->yoff) * scp->font_size - 1; } if (scp->mouse_xpos != scp->mouse_oldxpos || scp->mouse_ypos != scp->mouse_oldypos) { scp->status |= MOUSE_MOVED; - scp->mouse_pos = - (scp->mouse_ypos/scp->font_size - scp->yoff)*scp->xsize - + scp->mouse_xpos/scp->font_width - scp->xoff; + if (ISGRAPHSC(scp)) { + scp->mouse_pos = + (scp->mouse_ypos / scp->font_size - scp->yoff) * scp->xsize + + scp->mouse_xpos / scp->font_width - scp->xoff; + } #ifndef SC_NO_CUTPASTE if ((scp->status & MOUSE_VISIBLE) && (scp->status & MOUSE_CUTTING)) mouse_cut(scp); %%%Received on Mon Sep 05 2005 - 23:54:36 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:42 UTC