static VOID _wmActive(PGROPDATA pGrop, BOOL fActive) { if ( pGrop->fFullscreen ) { if ( fActive ) { _setFullscreen( pGrop, pGrop->ulModeIdx ); pGrop->pVideoSys->fnUpdate( pGrop->pVSData, pGrop, 0, NULL ); } else { _setDesktop( pGrop ); _captureMouse( pGrop, FALSE ); WinShowWindow( pGrop->hwndFrame, FALSE ); } } else _captureMouse( pGrop, pGrop->fCapture && fActive ); pGrop->fActive = fActive; if ( pGrop->stCallback.fnActive != NULL ) pGrop->stCallback.fnActive( pGrop, GROUP_ACTIVATE_WINDOW, fActive ); }
void KnotPropertiesDialog::_close() { _setDesktop(NULL); destroy_(); Glib::signal_idle().connect( sigc::bind_return( sigc::bind(sigc::ptr_fun(&::operator delete), this), false ) ); }
KnotPropertiesDialog::~KnotPropertiesDialog() { _setDesktop(NULL); }
MRESULT EXPENTRY wndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { PGROPDATA pGrop = (PGROPDATA)WinQueryWindowULong( hwnd, 0 ); switch( msg ) { case WM_ACTIVATE: _wmActive( pGrop, (BOOL)mp1 ); break; case WM_SETFOCUS: if ( pGrop->stCallback.fnActive != NULL ) pGrop->stCallback.fnActive( pGrop, GROUP_ACTIVATE_FOCUS, LONGFROMMP(mp2) ); break; case WM_DESTROY: break; case WM_CLOSE: /* if ( ( pGrop->stCallback.fnClose != NULL ) && !pGrop->stCallback.fnClose( pGrop ) ) return (MRESULT)FALSE;*/ if ( pGrop->fFullscreen && pGrop->fActive ) _setDesktop( pGrop ); _captureMouse( pGrop, FALSE ); break; case WM_PAINT: { RECTL rctl; HPS hps; hps = WinBeginPaint( hwnd, 0, &rctl ); WinFillRect( hps, &rctl, CLR_BLACK ); WinEndPaint( hps ); if ( pGrop->fInternalResize ) debugCP( "WM_PAINT & fInternalResize" ); // else pGrop->pVideoSys->fnUpdate( pGrop->pVSData, pGrop, 0, NULL ); } return (MRESULT)FALSE; case WM_SIZE: if ( pGrop->lSkipWinResize > 0 ) { pGrop->lSkipWinResize--; break; } if ( !pGrop->fFullscreen && !pGrop->fInternalResize && pGrop->fActive && (pGrop->stUserMode.ulFlags & GROP_MODEFL_RESIZABLE) != 0 && pGrop->stCallback.fnSize != NULL ) pGrop->stCallback.fnSize( pGrop, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2) ); break; case WM_VRNENABLED: _calcViewRect( pGrop, FALSE ); _setVisibleRegion( pGrop, TRUE ); return (MRESULT)TRUE; case WM_VRNDISABLED: _setVisibleRegion( pGrop, FALSE ); return (MRESULT)TRUE; case WM_MOUSEMOVE: if ( pGrop->lSkipMouseMove > 0 ) pGrop->lSkipMouseMove--; else { if ( pGrop->fInternalResize ) debugCP( "WM_MOUSEMOVE & fInternalResize" ); _wmMouseMove( pGrop, SHORT1FROMMP(mp1), SHORT2FROMMP(mp1) ); } return (MRESULT)FALSE; case WM_BUTTON1DOWN: case WM_BUTTON1DBLCLK: _wmMouseButton( pGrop, 0, TRUE ); break; case WM_BUTTON1UP: _wmMouseButton( pGrop, 0, FALSE ); break; case WM_BUTTON2DOWN: case WM_BUTTON2DBLCLK: _wmMouseButton( pGrop, 1, TRUE ); break; case WM_BUTTON2UP: _wmMouseButton( pGrop, 1, FALSE ); break; case WM_BUTTON3DOWN: case WM_BUTTON3DBLCLK: _wmMouseButton( pGrop, 2, TRUE ); break; case WM_BUTTON3UP: _wmMouseButton( pGrop, 2, FALSE ); break; case WM_TRANSLATEACCEL: // ALT and acceleration keys not allowed (must be processed in WM_CHAR) if ( mp1 == NULL || ((PQMSG)mp1)->msg != WM_CHAR ) break; return (MRESULT)FALSE; case WM_CHAR: if ( pGrop->stCallback.fnKeyboard != NULL ) { ULONG ulFlags = SHORT1FROMMP(mp1); // WM_CHAR flags pGrop->stCallback.fnKeyboard( pGrop, (ulFlags & KC_SCANCODE) == 0 ? 0 : CHAR4FROMMP(mp1), (ulFlags & KC_CHAR) == 0 ? 0 : SHORT1FROMMP(mp2), ulFlags ); } return (MRESULT)TRUE; case WM_GROP_QUERY: _wmGropQuery( pGrop, (PGROPQUERY)PVOIDFROMMP(mp1) ); return (MRESULT)TRUE; } return WinDefWindowProc( hwnd, msg, mp1, mp2 ); }
static BOOL _setMode(PGROPDATA pGrop, ULONG ulModeIdx, BOOL fFullscreen) { PVIDEOMODE pMode = &pGrop->stModes.pList[ulModeIdx]; // fFirstTime - Mode was not selected, mode will be set first time. BOOL fFirstTime = pGrop->ulModeIdx == ~0; RECTL rectl; LONG lX, lY, lW, lH; BOOL fSuccess = TRUE; if ( fFirstTime ) { pGrop->swpOld.x = pGrop->ulDTWidth / 2; pGrop->swpOld.y = pGrop->ulDTHeight / 2; } fFullscreen &= ( pGrop->stUserMode.ulWidth <= pMode->ulWidth ) && ( pGrop->stUserMode.ulHeight <= pMode->ulHeight ); if ( fFullscreen ) { if ( pGrop->fActive || fFirstTime ) { // Is the fullscreen and not on the descktop now - change fulscreen mode. if ( !pGrop->fFullscreen && !fFirstTime ) // Save windows position before switching to full-screen mode. WinQueryWindowPos( pGrop->hwndFrame, &pGrop->swpOld ); // Do not change FS mode if it is the same as the current one. fSuccess = ( pGrop->fFullscreen && ( pGrop->ulModeIdx == ulModeIdx ) ) || _setFullscreen( pGrop, ulModeIdx ); } // else: FS mode but on the desktop now, change mode later in _wmActive(). pGrop->ulModeIdx = ulModeIdx; pGrop->fFullscreen = TRUE; } else //if ( pGrop->fFullscreen || ( pGrop->ulModeIdx != ulModeIdx ) ) { // Change window if mode is not same as the current one. if ( pGrop->fFullscreen ) { debug( "Return to the desktop..." ); _setDesktop( pGrop ); } debug( "Calc new window size..." ); rectl.xLeft = 0; rectl.yBottom = 0; rectl.xRight = pGrop->stUserMode.ulWidth; rectl.yTop = pGrop->stUserMode.ulHeight; WinCalcFrameRect( pGrop->hwndFrame, &rectl, FALSE ); lW = rectl.xRight - rectl.xLeft; lH = rectl.yTop - rectl.yBottom; if ( !pGrop->fFullscreen && !fFirstTime ) { // Positioning relative to the current location. debug( "Query current window position..." ); WinQueryWindowPos( pGrop->hwndFrame, &pGrop->swpOld ); } else debug( "Window's location will be relative to the location before FS." ); lX = pGrop->swpOld.x + (pGrop->swpOld.cx / 2) - (lW / 2); lY = pGrop->swpOld.y + (pGrop->swpOld.cy / 2) - (lH / 2); if ( lW > pGrop->ulDTWidth ) lX = (pGrop->ulDTWidth / 2) - ( lW / 2); else if ( (lX + lW) > pGrop->ulDTWidth ) lX = pGrop->ulDTWidth - lW; else if ( lX < 0 ) lX = 0; if ( lY < 0 ) lY = 0; if ( (lY + lH) > pGrop->ulDTHeight ) lY = pGrop->ulDTHeight - lH; pGrop->ulModeIdx = ulModeIdx; pGrop->fFullscreen = FALSE; debug( "Set window position..." ); pGrop->fInternalResize = TRUE; WinSetWindowPos( pGrop->hwndFrame, HWND_TOP, lX, lY, lW, lH, fFirstTime ? SWP_MOVE | SWP_SIZE | SWP_SHOW | SWP_ZORDER | SWP_ACTIVATE : SWP_MOVE | SWP_SIZE | SWP_SHOW ); pGrop->fInternalResize = FALSE; debug( "Call _captureMouse(,%s)...", pGrop->fCapture ? "TRUE" : "FALSE" ); _captureMouse( pGrop, pGrop->fCapture ); } debug( "Call _calcViewRect(,FALSE)..." ); _calcViewRect( pGrop, FALSE ); debug( "Call pVideoSys->fnUpdate()..." ); pGrop->pVideoSys->fnUpdate( pGrop->pVSData, pGrop, 0, NULL ); return fSuccess; }