From 082cbea3a5271f5f3bf3219817c2fef590a36593 Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Thu, 11 Oct 2012 18:48:14 +0000 Subject: [PATCH] 2012-10-11 20:47 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * harbour/src/rtl/gtwvt/gtwvt.h * harbour/src/rtl/gtwvt/gtwvt.c ! fixed some HB_GTI_* actions which could access pWVT->hWnd before console window in created. ! fixed reverted parameters passed in array to HB_GTI_SETPOS_ROWCOL ! removed hb_retl() used inside HB_GTI_SETPOS_XY, HB_GTI_SETPOS_ROWCOL actions. ! respect HB_GTI_SETPOS_XY, HB_GTI_SETPOS_ROWCOL set before console window in created. * harbour/src/rtl/gtxwc/gtxwc.c ! set fullscreen mode if user sets: hb_gtInfo( HB_GTI_ISFULLSCREEN, .t. ) hb_gtInfo( HB_GTI_RESIZABLE, .t. ) at application startup before console window in created. + added support for HB_GTI_SETPOS_XY, HB_GTI_SETPOS_ROWCOL --- harbour/ChangeLog | 18 +++++ harbour/src/rtl/gtwvt/gtwvt.c | 133 +++++++++++++++++--------------- harbour/src/rtl/gtwvt/gtwvt.h | 3 + harbour/src/rtl/gtxwc/gtxwc.c | 139 +++++++++++++++++++++++++++------- 4 files changed, 203 insertions(+), 90 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 030db12797..7c288a4bff 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,24 @@ The license applies to all entries newer than 2009-04-28. */ +2012-10-11 20:47 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * harbour/src/rtl/gtwvt/gtwvt.h + * harbour/src/rtl/gtwvt/gtwvt.c + ! fixed some HB_GTI_* actions which could access pWVT->hWnd before + console window in created. + ! fixed reverted parameters passed in array to HB_GTI_SETPOS_ROWCOL + ! removed hb_retl() used inside HB_GTI_SETPOS_XY, HB_GTI_SETPOS_ROWCOL + actions. + ! respect HB_GTI_SETPOS_XY, HB_GTI_SETPOS_ROWCOL set before + console window in created. + + * harbour/src/rtl/gtxwc/gtxwc.c + ! set fullscreen mode if user sets: + hb_gtInfo( HB_GTI_ISFULLSCREEN, .t. ) + hb_gtInfo( HB_GTI_RESIZABLE, .t. ) + at application startup before console window in created. + + added support for HB_GTI_SETPOS_XY, HB_GTI_SETPOS_ROWCOL + 2012-10-11 20:37 UTC+0200 Viktor Szakats (harbour syenar.net) * extras/hbxlsxml/xlsxml.prg * extras/hbxlsxml/xlsxml_s.prg diff --git a/harbour/src/rtl/gtwvt/gtwvt.c b/harbour/src/rtl/gtwvt/gtwvt.c index 0db14dcf22..ed30995afc 100644 --- a/harbour/src/rtl/gtwvt/gtwvt.c +++ b/harbour/src/rtl/gtwvt/gtwvt.c @@ -364,6 +364,9 @@ static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT, HINSTANCE hInstance, int iCmdShow ) pWVT->MarginTop = 0; pWVT->MarginLeft = 0; + pWVT->iNewPosX = -1; + pWVT->iNewPosY = -1; + pWVT->lpSelectCopy = TEXT( "Mark and Copy" ); pWVT->hSelectCopy = NULL; pWVT->bSelectCopy = HB_TRUE; @@ -900,8 +903,14 @@ static void hb_gt_wvt_ResetWindowSize( PHB_GTWVT pWVT, HFONT hFont ) bRecenter = HB_TRUE; } - wi.left = rcWorkArea.left + ( ( rcWorkArea.right - rcWorkArea.left - width ) / 2 ); - wi.top = rcWorkArea.top + ( ( rcWorkArea.bottom - rcWorkArea.top - height ) / 2 ); + if( bRecenter || + rcWorkArea.left + width > rcWorkArea.right || + rcWorkArea.top + height > rcWorkArea.bottom || + wi.left != pWVT->iNewPosX || wi.top != pWVT->iNewPosY ) + { + wi.left = rcWorkArea.left + ( ( rcWorkArea.right - rcWorkArea.left - width ) / 2 ); + wi.top = rcWorkArea.top + ( ( rcWorkArea.bottom - rcWorkArea.top - height ) / 2 ); + } if( pWVT->ResizeMode == HB_GTI_RESIZEMODE_ROWS ) { @@ -932,9 +941,6 @@ static void hb_gt_wvt_ResetWindowSize( PHB_GTWVT pWVT, HFONT hFont ) #endif } - - - HB_GTSELF_EXPOSEAREA( pWVT->pGT, 0, 0, pWVT->ROWS, pWVT->COLS ); if( pWVT->CaretExist && !pWVT->CaretHidden ) @@ -1992,6 +1998,14 @@ static HB_BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT ) } else { + if( pWVT->iNewPosX >= 0 && pWVT->iNewPosY >= 0 ) + { + RECT wi = { 0,0,0,0 }; + GetWindowRect( pWVT->hWnd, &wi ); + SetWindowPos( pWVT->hWnd, NULL, pWVT->iNewPosX, pWVT->iNewPosY, + wi.right - wi.left, wi.bottom - wi.top, + SWP_NOSIZE | SWP_NOZORDER ); + } ShowWindow( pWVT->hWnd, pWVT->bMaximized ? SW_SHOWMAXIMIZED : pWVT->iCmdShow ); UpdateWindow( pWVT->hWnd ); } @@ -2523,7 +2537,7 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) case HB_GTI_SCREENHEIGHT: pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->PTEXTSIZE.y * pWVT->ROWS ); iVal = hb_itemGetNI( pInfo->pNewVal ); - if( iVal > 0 && !pWVT->bMaximized ) /* Don't allow if Maximized or FullScreen */ + if( iVal > 0 && !pWVT->bMaximized && !pWVT->bFullScreen && pWVT->hWnd ) /* Don't allow if Maximized or FullScreen */ { /* Now conforms to pWVT->ResizeMode setting, resize by FONT or ROWS as applicable [HVB] */ RECT ci; @@ -2541,7 +2555,7 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) case HB_GTI_SCREENWIDTH: pInfo->pResult = hb_itemPutNI( pInfo->pResult, pWVT->PTEXTSIZE.x * pWVT->COLS ); iVal = hb_itemGetNI( pInfo->pNewVal ); - if( iVal > 0 && !pWVT->bMaximized ) /* Don't allow if Maximized or FullScreen */ + if( iVal > 0 && !pWVT->bMaximized && !pWVT->bFullScreen && pWVT->hWnd ) /* Don't allow if Maximized or FullScreen */ { /* Now conforms to pWVT->ResizeMode setting, resize by FONT or ROWS as applicable [HVB] */ RECT ci; @@ -2822,7 +2836,7 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) iY = hb_arrayGetNI( pInfo->pNewVal, 2 ); iX = hb_arrayGetNI( pInfo->pNewVal, 1 ); - if( iY > 0 && iX > 0 && !pWVT->bMaximized) /* Don't allow if Maximized or FullScreen */ + if( iY > 0 && iX > 0 && !pWVT->bMaximized && !pWVT->bFullScreen && pWVT->hWnd ) /* Don't allow if Maximized or FullScreen */ { /* Now conforms to pWVT->ResizeMode setting, resize by FONT or ROWS as applicable [HVB] */ RECT ci; @@ -2959,65 +2973,62 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) case HB_GTI_SETPOS_XY: case HB_GTI_SETPOS_ROWCOL: { + RECT wi = { 0,0,0,0 }; + int x = 0, y = 0; + if( pWVT->hWnd ) { - int x, y; - RECT wi = { 0,0,0,0 }; - GetWindowRect( pWVT->hWnd, &wi ); - if( ! pInfo->pResult ) - pInfo->pResult = hb_itemNew( NULL ); + GetWindowRect( pWVT->hWnd, &wi ); + if( iType == HB_GTI_SETPOS_ROWCOL ) + { + y = wi.left / pWVT->PTEXTSIZE.x; + x = wi.top / pWVT->PTEXTSIZE.y; + } + else + { + x = wi.left; + y = wi.top; + } + } - hb_arrayNew( pInfo->pResult, 2 ); - if( iType == HB_GTI_SETPOS_ROWCOL ) - { - hb_arraySetNI( pInfo->pResult, 1, wi.top / pWVT->PTEXTSIZE.y ); - hb_arraySetNI( pInfo->pResult, 2, wi.left / pWVT->PTEXTSIZE.x ); - } - else - { - hb_arraySetNI( pInfo->pResult, 2, wi.top ); - hb_arraySetNI( pInfo->pResult, 1, wi.left ); - } + if( ! pInfo->pResult ) + pInfo->pResult = hb_itemNew( NULL ); + hb_arrayNew( pInfo->pResult, 2 ); - if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) && - ( hb_itemType( pInfo->pNewVal2 ) & HB_IT_NUMERIC ) ) - { + hb_arraySetNI( pInfo->pResult, 1, x ); + hb_arraySetNI( pInfo->pResult, 2, y ); - if( iType == HB_GTI_SETPOS_ROWCOL ) - { - y = hb_itemGetNI( pInfo->pNewVal ) * pWVT->PTEXTSIZE.y; - x = hb_itemGetNI( pInfo->pNewVal2 ) * pWVT->PTEXTSIZE.x; - } - else - { - x = hb_itemGetNI( pInfo->pNewVal ); - y = hb_itemGetNI( pInfo->pNewVal2 ); - } - hb_retl( SetWindowPos( pWVT->hWnd, NULL, - x, - y, - wi.right - wi.left, - wi.bottom - wi.top, - SWP_NOSIZE | SWP_NOZORDER ) ); - } - else if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_ARRAY ) && hb_arrayLen( pInfo->pNewVal ) == 2 ) - { - y = hb_arrayGetNI( pInfo->pNewVal, 2 ); - x = hb_arrayGetNI( pInfo->pNewVal, 1 ); + if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) && + ( hb_itemType( pInfo->pNewVal2 ) & HB_IT_NUMERIC ) ) + { + x = hb_itemGetNI( pInfo->pNewVal ); + y = hb_itemGetNI( pInfo->pNewVal2 ); + } + else if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_ARRAY ) && + hb_arrayLen( pInfo->pNewVal ) == 2 ) + { + x = hb_arrayGetNI( pInfo->pNewVal, 1 ); + y = hb_arrayGetNI( pInfo->pNewVal, 2 ); + } + else + break; - if( iType == HB_GTI_SETPOS_ROWCOL ) - { - y *= pWVT->PTEXTSIZE.y; - x *= pWVT->PTEXTSIZE.x; - } - hb_retl( SetWindowPos( pWVT->hWnd, NULL, - x, - y, - wi.right - wi.left, - wi.bottom - wi.top, - SWP_NOSIZE | SWP_NOZORDER ) ); - - } + if( iType == HB_GTI_SETPOS_ROWCOL ) + { + int c = y; + y = x * pWVT->PTEXTSIZE.y; + x = c * pWVT->PTEXTSIZE.x; + } + if( pWVT->hWnd ) + { + SetWindowPos( pWVT->hWnd, NULL, + x, y, wi.right - wi.left, wi.bottom - wi.top, + SWP_NOSIZE | SWP_NOZORDER ); + } + else + { + pWVT->iNewPosX = x; + pWVT->iNewPosY = y; } break; } diff --git a/harbour/src/rtl/gtwvt/gtwvt.h b/harbour/src/rtl/gtwvt/gtwvt.h index 70f3ad6cd7..b6dda93e85 100644 --- a/harbour/src/rtl/gtwvt/gtwvt.h +++ b/harbour/src/rtl/gtwvt/gtwvt.h @@ -180,6 +180,9 @@ typedef struct int MarginTop; int MarginLeft; + int iNewPosX; + int iNewPosY; + HB_BOOL bMaximized; /* Flag is set when window has been maximized */ HB_BOOL bBeingMarked; /* Flag to control DOS window like copy operation */ HB_BOOL bBeginMarked; diff --git a/harbour/src/rtl/gtxwc/gtxwc.c b/harbour/src/rtl/gtxwc/gtxwc.c index d2af792d9a..5cc134c344 100644 --- a/harbour/src/rtl/gtxwc/gtxwc.c +++ b/harbour/src/rtl/gtxwc/gtxwc.c @@ -320,6 +320,9 @@ typedef struct HB_USHORT width; HB_USHORT height; + int iNewPosX; + int iNewPosY; + /* Set to true when Windows is resized */ HB_BOOL fWinResize; HB_USHORT newWidth; @@ -434,7 +437,7 @@ typedef struct /******************************************************************/ -static void hb_gt_xwc_ProcessMessages( PXWND_DEF wnd ); +static void hb_gt_xwc_ProcessMessages( PXWND_DEF wnd, HB_BOOL fSync ); static void hb_gt_xwc_InvalidatePts( PXWND_DEF wnd, int left, int top, int right, int bottom ); static void hb_gt_xwc_InvalidateChar( PXWND_DEF wnd, int left, int top, int right, int bottom ); static void hb_gt_xwc_SetSelection( PXWND_DEF wnd, const char * szData, HB_SIZE ulSize, HB_BOOL fCopy ); @@ -486,7 +489,7 @@ static void hb_gt_xwc_SigHandler( int iSig ) { if( s_iUpdateCounter ) --s_iUpdateCounter; - hb_gt_xwc_ProcessMessages( wnd ); + hb_gt_xwc_ProcessMessages( wnd, HB_FALSE ); } } @@ -3970,7 +3973,7 @@ static HB_ULONG hb_gt_xwc_CurrentTime( void ) /* *********************************************************************** */ -static void hb_gt_xwc_ProcessMessages( PXWND_DEF wnd ) +static void hb_gt_xwc_ProcessMessages( PXWND_DEF wnd, HB_BOOL fSync ) { if( wnd->cursorType != SC_NONE ) { @@ -4015,6 +4018,8 @@ static void hb_gt_xwc_ProcessMessages( PXWND_DEF wnd ) } #if 1 + if( fSync ) + XSync( wnd->dpy, False ); do { while( XEventsQueued( wnd->dpy, QueuedAfterFlush ) ) @@ -4026,6 +4031,8 @@ static void hb_gt_xwc_ProcessMessages( PXWND_DEF wnd ) hb_gt_xwc_UpdateSize( wnd ); hb_gt_xwc_UpdatePts( wnd ); hb_gt_xwc_UpdateCursor( wnd ); + if( fSync ) + XSync( wnd->dpy, False ); } while( XEventsQueued( wnd->dpy, QueuedAfterFlush ) ); #else @@ -4255,7 +4262,7 @@ static void hb_gt_xwc_RequestSelection( PXWND_DEF wnd ) } else { - hb_gt_xwc_ProcessMessages( wnd ); + hb_gt_xwc_ProcessMessages( wnd, HB_TRUE ); if( !wnd->ClipboardRcvd && wnd->ClipboardRequest == aRequest ) { HB_ULONG ulTime = hb_gt_xwc_CurrentTime() - ulCurrentTime; @@ -4320,6 +4327,7 @@ static PXWND_DEF hb_gt_xwc_CreateWndDef( PHB_GT pGT ) wnd->dpy = NULL; wnd->fInit = wnd->fData = HB_FALSE; hb_gt_xwc_SetScrBuff( wnd, XWC_DEFAULT_COLS, XWC_DEFAULT_ROWS ); + wnd->iNewPosX = wnd->iNewPosY = -1; wnd->fResizable = HB_TRUE; wnd->fClosable = HB_TRUE; wnd->fWinResize = HB_FALSE; @@ -4531,6 +4539,8 @@ static void hb_gt_xwc_SetResizing( PXWND_DEF wnd ) static void hb_gt_xwc_CreateWindow( PXWND_DEF wnd ) { + HB_BOOL fResizable = wnd->fResizable; + HB_XWC_XLIB_LOCK /* load the standard font */ @@ -4582,12 +4592,17 @@ static void hb_gt_xwc_CreateWindow( PXWND_DEF wnd ) hb_gt_xwc_Resize( wnd, wnd->cols, wnd->rows ); XMapWindow( wnd->dpy, wnd->window ); - /* ok, now we can inform the X manager about our new status: */ - hb_gt_xwc_SetResizing( wnd ); - /* enable FullScreen mode if set by user */ if( wnd->fFullScreen ) + { hb_gt_xwc_FullScreen( wnd ); + wnd->fResizable = HB_TRUE; + } + else if( wnd->iNewPosX >= 0 && wnd->iNewPosY >= 0 ) + XMoveWindow( wnd->dpy, wnd->window, wnd->iNewPosX, wnd->iNewPosY ); + + /* ok, now we can inform the X manager about our new status: */ + hb_gt_xwc_SetResizing( wnd ); /* Request WM to deliver destroy event */ XSetWMProtocols( wnd->dpy, wnd->window, &s_atomDelWin, 1 ); @@ -4618,13 +4633,21 @@ static void hb_gt_xwc_CreateWindow( PXWND_DEF wnd ) #ifdef XWC_DEBUG printf( "Window created\r\n" ); fflush(stdout); #endif + if( wnd->fResizable != fResizable ) + { + hb_gt_xwc_ProcessMessages( wnd, HB_TRUE ); + wnd->fResizable = fResizable; + hb_gt_xwc_SetResizing( wnd ); + } HB_XWC_XLIB_UNLOCK } /* *********************************************************************** */ -static void hb_gt_xwc_Initialize( PXWND_DEF wnd ) +/* *********************************************************************** */ + +static void hb_gt_xwc_RealRefresh( PXWND_DEF wnd, HB_BOOL fSync ) { if( !wnd->fInit ) { @@ -4633,22 +4656,16 @@ static void hb_gt_xwc_Initialize( PXWND_DEF wnd ) hb_gt_xwc_CreateWindow( wnd ); wnd->fInit = HB_TRUE; hb_gt_xwc_Enable(); + fSync = HB_TRUE; } + else + return; } -} - -/* *********************************************************************** */ - -/* *********************************************************************** */ - -static void hb_gt_xwc_RealRefresh( PXWND_DEF wnd ) -{ - hb_gt_xwc_Initialize( wnd ); if( s_updateMode == XWC_SYNC_UPDATE && !wnd->fRefresh ) { wnd->fRefresh = HB_TRUE; - hb_gt_xwc_ProcessMessages( wnd ); + hb_gt_xwc_ProcessMessages( wnd, fSync ); wnd->fRefresh = HB_FALSE; } } @@ -4658,7 +4675,7 @@ static void hb_gt_xwc_RealRefresh( PXWND_DEF wnd ) static void hb_gt_xwc_LateRefresh( PXWND_DEF wnd ) { if( wnd->fInit ) - hb_gt_xwc_RealRefresh( wnd ); + hb_gt_xwc_RealRefresh( wnd, HB_FALSE ); } /* *********************************************************************** */ @@ -4700,7 +4717,7 @@ static void hb_gt_xwc_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFil HB_GTSELF_SEMICOLD( pGT ); /* For immediate connection to XSarver and screen Window show */ - /* hb_gt_xwc_Initialize( wnd ); */ + /* hb_gt_xwc_RealRefresh( wnd, HB_TRUE ); */ /* For connection to XSarver only */ /* hb_gt_xwc_ConnectX( wnd, HB_TRUE ); */ @@ -4763,9 +4780,9 @@ static HB_BOOL hb_gt_xwc_SetMode( PHB_GT pGT, int iRow, int iCol ) * series of setmode() function. I'll look for cleaner * solution in some spare time. */ - hb_gt_xwc_RealRefresh( wnd ); + hb_gt_xwc_RealRefresh( wnd, HB_TRUE ); hb_idleSleep( 0.1 ); - hb_gt_xwc_RealRefresh( wnd ); + hb_gt_xwc_RealRefresh( wnd, HB_TRUE ); } } @@ -4808,7 +4825,7 @@ static int hb_gt_xwc_ReadKey( PHB_GT pGT, int iEventMask ) wnd = HB_GTXWC_GET( pGT ); hb_gt_xwc_LateRefresh( wnd ); - /* hb_gt_xwc_RealRefresh( wnd ); */ + /* hb_gt_xwc_RealRefresh( wnd, HB_FALSE ); */ if( hb_gt_xwc_GetCharFromInputQueue( wnd, &c ) ) return c; @@ -5110,14 +5127,14 @@ static HB_BOOL hb_gt_xwc_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) if( pszClipboardData ) { - hb_gt_xwc_RealRefresh( wnd ); + hb_gt_xwc_RealRefresh( wnd, HB_FALSE ); hb_gt_xwc_SetSelection( wnd, pszClipboardData, nLen, HB_TRUE ); - hb_gt_xwc_RealRefresh( wnd ); + hb_gt_xwc_RealRefresh( wnd, HB_FALSE ); hb_strfree( hString ); } else { - hb_gt_xwc_RealRefresh( wnd ); + hb_gt_xwc_RealRefresh( wnd, HB_FALSE ); hb_gt_xwc_RequestSelection( wnd ); pInfo->pResult = hb_itemPutStrLenUTF8( pInfo->pResult, ( char * ) wnd->ClipboardData, @@ -5203,6 +5220,69 @@ static HB_BOOL hb_gt_xwc_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) } break; + case HB_GTI_SETPOS_XY: + case HB_GTI_SETPOS_ROWCOL: + { + int x = 0, y = 0; + + if( wnd->window ) + { + XWindowAttributes wndAttr; + if( XGetWindowAttributes( wnd->dpy, wnd->window, &wndAttr ) ) + { + if( iType == HB_GTI_SETPOS_ROWCOL ) + { + x = wndAttr.y / wnd->fontHeight; + y = wndAttr.x / wnd->fontWidth; + } + else + { + x = wndAttr.x; + y = wndAttr.y; + } + } + } + + if( ! pInfo->pResult ) + pInfo->pResult = hb_itemNew( NULL ); + hb_arrayNew( pInfo->pResult, 2 ); + + hb_arraySetNI( pInfo->pResult, 1, x ); + hb_arraySetNI( pInfo->pResult, 2, y ); + + if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) && + ( hb_itemType( pInfo->pNewVal2 ) & HB_IT_NUMERIC ) ) + + { + x = hb_itemGetNI( pInfo->pNewVal ); + y = hb_itemGetNI( pInfo->pNewVal2 ); + } + else if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_ARRAY ) && + hb_arrayLen( pInfo->pNewVal ) == 2 ) + { + x = hb_arrayGetNI( pInfo->pNewVal, 1 ); + y = hb_arrayGetNI( pInfo->pNewVal, 2 ); + } + else + break; + + if( iType == HB_GTI_SETPOS_ROWCOL ) + { + int c = y; + y = x * wnd->fontHeight; + x = c * wnd->fontWidth; + } + if( wnd->window ) + { + XMoveWindow( wnd->dpy, wnd->window, x, y ); + } + else + { + wnd->iNewPosX = x; + wnd->iNewPosY = y; + } + break; + } case HB_GTI_PALETTE: if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC ) { @@ -5270,7 +5350,8 @@ static int hb_gt_xwc_gfx_Primitive( PHB_GT pGT, int iType, int iTop, int iLeft, HB_TRACE( HB_TR_DEBUG, ( "hb_gt_xwc_gfx_Primitive(%p,%d,%d,%d,%d,%d,%d)", pGT, iType, iTop, iLeft, iBottom, iRight, iColor ) ); wnd = HB_GTXWC_GET( pGT ); - hb_gt_xwc_Initialize( wnd ); + if( !wnd->fInit ) + hb_gt_xwc_RealRefresh( wnd, HB_TRUE ); HB_GTSELF_REFRESH( pGT ); switch( iType ) @@ -5416,7 +5497,7 @@ static int hb_gt_xwc_gfx_Primitive( PHB_GT pGT, int iType, int iTop, int iLeft, if( HB_GTSELF_DISPCOUNT( pGT ) == 0 ) { - hb_gt_xwc_RealRefresh( wnd ); + hb_gt_xwc_RealRefresh( wnd, HB_FALSE ); } return iRet; @@ -5488,7 +5569,7 @@ static void hb_gt_xwc_Refresh( PHB_GT pGT ) HB_GTSELF_GETSCRCURSOR( pGT, &wnd->row, &wnd->col, &wnd->cursorType ); if( wnd->fInit || wnd->fData ) - hb_gt_xwc_RealRefresh( wnd ); + hb_gt_xwc_RealRefresh( wnd, HB_FALSE ); } }