Hi all,

Sometimes GTWVT leaves the previous mark of cursor. Attached picture to 
illustrate the issue.
This happens because the pre-cursor position not is marked with InvalidateRect (RedrawDiff not find differences) getting knocked out of WM_PAINT.

In GTWVG not happen because overwrite PutChar and for each character insert call TouchCell and force RedrawDiff to find differences although they are the same characters and atributes.

IMHO is more effective in Windows marking only the previous cursor position.
I would like to commit the following patch to the repository.

Index: gtwvt.c
===================================================================
--- gtwvt.c     (revision 14260)
+++ gtwvt.c     (working copy)
@@ -1683,15 +1683,19 @@

         case WM_QUERYENDSESSION: /* Closing down computer */
            hb_vmRequestQuit();
-         return 0;
+         break;   /* DefWindowProc return TRUE [jarabal] */

         case WM_CLOSE:  /* Clicked 'X' on system menu */
-         if( hb_gt_wvt_FireEvent( pWVT, HB_GTE_CLOSE ) == 0 )
            {
+#        if 0 /* Avoid irregular shutdown if SetCancel( .F. ) [jarabal] */
+            if( hb_setGetCancel() )
+               hb_vmRequestCancel();
+#        else
               PHB_ITEM pItem = hb_itemPutL( NULL, HB_TRUE );
               hb_setSetItem( HB_SET_CANCEL, pItem );
               hb_itemRelease( pItem );
               hb_vmRequestCancel();
+#        endif
            }
            return 0;

@@ -2939,7 +2943,20 @@
   }

   /* ********************************************************************** */
+/* Avoid the possible remnant mark of cursor in some cases [jarabal] */
+static void hb_gt_wvt_SetPos( PHB_GT pGT, int iRow, int iCol )
+{
+   PHB_GTWVT pWVT = HB_GTWVT_GET( pGT );

+   if( pWVT && pWVT->CaretExist && !pWVT->CaretHidden )
+      HB_GTSELF_REDRAW( pGT, pGT->iRow, pGT->iCol, 1 );
+
+   pGT->iRow = iRow;
+   pGT->iCol = iCol;
+}
+
+/* ********************************************************************** */
+
   static HB_BOOL hb_gt_wvt_SetDispCP( PHB_GT pGT, const char * pszTermCDP, 
const char * pszHostCDP, HB_BOOL fBox )
   {
      HB_GTSUPER_SETDISPCP( pGT, pszTermCDP, pszHostCDP, fBox );
@@ -3046,6 +3063,7 @@
      pFuncTable->SetMode              = hb_gt_wvt_SetMode;
      pFuncTable->Redraw               = hb_gt_wvt_Redraw;
      pFuncTable->Refresh              = hb_gt_wvt_Refresh;
+   pFuncTable->SetPos               = hb_gt_wvt_SetPos;
      pFuncTable->Version              = hb_gt_wvt_Version;
      pFuncTable->Tone                 = hb_gt_wvt_Tone;
      pFuncTable->Info                 = hb_gt_wvt_Info;

--
Xavi

<<attachment: MemoEdit.jpg>>

_______________________________________________
Harbour mailing list (attachment size limit: 40KB)
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to