desktop/inc/app.hxx | 1 desktop/source/app/app.cxx | 1 include/vcl/svapp.hxx | 38 ++++++++++++++++++------------ include/vcl/window.hxx | 2 - vcl/source/app/svapp.cxx | 54 ++++++++++++++++++++++++++++++++++++++++--- vcl/source/outdev/map.cxx | 11 -------- vcl/source/window/window.cxx | 48 -------------------------------------- 7 files changed, 76 insertions(+), 79 deletions(-)
New commits: commit 081a0854635f4bc9f6f743ef4e2675c208405f74 Author: Chris Sherlock <chris.sherloc...@gmail.com> Date: Tue May 6 23:49:29 2014 +1000 Move ImplInitAppFontData from Window to Application (take 2) I have renamed ImplInitAppFontData to InitAppFontData and moved it from Window to Application. This is because this is something that sets *application* global variables, it just so happens it gets it from a Window parameter. But it should be set when the application starts, so I have moved it to Main(). This was previously reverted, but I have since located what was causing unit tests to fail and the font dropdowns to stop loading in writer: see commit c6d7ba5f33c3 where Application::SetSettings() was setting pImplSVData->maGDIData.mnAppFontX to zero. Change-Id: I5da7073b0d8541f1a71a09b0a8337d012fc4134b diff --git a/desktop/inc/app.hxx b/desktop/inc/app.hxx index 67fc3fb..8b8affe 100644 --- a/desktop/inc/app.hxx +++ b/desktop/inc/app.hxx @@ -128,6 +128,7 @@ class Desktop : public Application // throws an exception upon failure private: + void RegisterServices( css::uno::Reference< css::uno::XComponentContext > const & context); void DeregisterServices(); diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index 377afc7..247ac1d 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -1493,6 +1493,7 @@ int Desktop::Main() the main thread is not yet in the event loop. */ Application::GetDefaultDevice(); + Application::InitAppFontData(); #if HAVE_FEATURE_EXTENSIONS // Check if bundled or shared extensions were added /removed diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx index a0d71e6..b7e00ca 100644 --- a/include/vcl/svapp.hxx +++ b/include/vcl/svapp.hxx @@ -267,6 +267,12 @@ public: */ virtual void Init(); +protected: + /** Initialize font data for the application. + */ + static void InitAppFontData(); + +public: /** Finish initialization of the application. @see Init, DeInit diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx index 5dc7340..64d4732 100644 --- a/include/vcl/window.hxx +++ b/include/vcl/window.hxx @@ -384,8 +384,6 @@ public: DECL_DLLPRIVATE_LINK( ImplHideOwnerDrawWindowsHdl, void* ); - SAL_DLLPRIVATE static void ImplInitAppFontData( Window* pWindow ); - SAL_DLLPRIVATE Window* ImplGetFrameWindow() const; SalFrame* ImplGetFrame() const; SAL_DLLPRIVATE ImplFrameData* ImplGetFrameData(); diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx index 607702d..ac24717 100644 --- a/vcl/source/app/svapp.cxx +++ b/vcl/source/app/svapp.cxx @@ -318,12 +318,12 @@ void Application::Abort( const OUString& rErrorText ) SalAbort( rErrorText, dumpCore ); } -sal_uLong Application::GetReservedKeyCodeCount() +sal_uLong Application::GetReservedKeyCodeCount() { return ImplReservedKeys::get()->second; } -const KeyCode* Application::GetReservedKeyCode( sal_uLong i ) +const KeyCode* Application::GetReservedKeyCode( sal_uLong i ) { if( i >= GetReservedKeyCodeCount() ) return NULL; @@ -549,7 +549,7 @@ void Application::SetSettings( const AllSettings& rSettings ) { nOldDPIX = pFirstFrame->mnDPIX; nOldDPIY = pFirstFrame->mnDPIY; - Window::ImplInitAppFontData(pFirstFrame); + InitAppFontData(); } Window* pFrame = pFirstFrame; while ( pFrame ) @@ -1664,4 +1664,52 @@ Application::createFolderPicker( const Reference< uno::XComponentContext >& xSM return pSVData->mpDefInst->createFolderPicker( xSM ); } +void Application::InitAppFontData() +{ + ImplSVData* pSVData = ImplGetSVData(); + + Window *pWindow = pSVData->mpDefaultWin; + + long nTextHeight = pWindow->GetTextHeight(); + long nTextWidth = pWindow->approximate_char_width() * 8; + long nSymHeight = nTextHeight*4; + // Make the basis wider if the font is too narrow + // such that the dialog looks symmetrical and does not become too narrow. + // Add some extra space when the dialog has the same width, + // as a little more space is better. + if ( nSymHeight > nTextWidth ) + nTextWidth = nSymHeight; + else if ( nSymHeight+5 > nTextWidth ) + nTextWidth = nSymHeight+5; + pSVData->maGDIData.mnAppFontX = nTextWidth * 10 / 8; + pSVData->maGDIData.mnAppFontY = nTextHeight * 10; + + // FIXME: this is currently only on OS X, check with other + // platforms + if( pSVData->maNWFData.mbNoFocusRects ) + { + // try to find out whether there is a large correction + // of control sizes, if yes, make app font scalings larger + // so dialog positioning is not completely off + ImplControlValue aControlValue; + Rectangle aCtrlRegion( Point(), Size( nTextWidth < 10 ? 10 : nTextWidth, nTextHeight < 10 ? 10 : nTextHeight ) ); + Rectangle aBoundingRgn( aCtrlRegion ); + Rectangle aContentRgn( aCtrlRegion ); + if( pWindow->GetNativeControlRegion( CTRL_EDITBOX, PART_ENTIRE_CONTROL, aCtrlRegion, + CTRL_STATE_ENABLED, aControlValue, OUString(), + aBoundingRgn, aContentRgn ) ) + { + // comment: the magical +6 is for the extra border in bordered + // (which is the standard) edit fields + if( aContentRgn.GetHeight() - nTextHeight > (nTextHeight+4)/4 ) + pSVData->maGDIData.mnAppFontY = (aContentRgn.GetHeight()-4) * 10; + } + } + + pSVData->maGDIData.mnRealAppFontX = pSVData->maGDIData.mnAppFontX; + if ( pSVData->maAppData.mnDialogScaleX ) + pSVData->maGDIData.mnAppFontX += (pSVData->maGDIData.mnAppFontX*pSVData->maAppData.mnDialogScaleX)/100; +} + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/outdev/map.cxx b/vcl/source/outdev/map.cxx index 117429d..55b0c23a 100644 --- a/vcl/source/outdev/map.cxx +++ b/vcl/source/outdev/map.cxx @@ -223,17 +223,6 @@ static void ImplCalcMapResolution( const MapMode& rMapMode, case MAP_APPFONT: { ImplSVData* pSVData = ImplGetSVData(); - if ( !pSVData->maGDIData.mnAppFontX ) - { - if( pSVData->maWinData.mpFirstFrame ) - Window::ImplInitAppFontData( pSVData->maWinData.mpFirstFrame ); - else - { - WorkWindow* pWin = new WorkWindow( NULL, 0 ); - Window::ImplInitAppFontData( pWin ); - delete pWin; - } - } rMapRes.mnMapScNumX = pSVData->maGDIData.mnAppFontX; rMapRes.mnMapScDenomX = nDPIX * 40; rMapRes.mnMapScNumY = pSVData->maGDIData.mnAppFontY; diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index d329a92..ed5e018 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -533,50 +533,6 @@ bool Window::HasMirroredGraphics() const return pOutDev->OutputDevice::HasMirroredGraphics(); } -void Window::ImplInitAppFontData( Window* pWindow ) -{ - ImplSVData* pSVData = ImplGetSVData(); - long nTextHeight = pWindow->GetTextHeight(); - long nTextWidth = pWindow->approximate_char_width() * 8; - long nSymHeight = nTextHeight*4; - // Make the basis wider if the font is too narrow - // such that the dialog looks symmetrical and does not become too narrow. - // Add some extra space when the dialog has the same width, - // as a little more space is better. - if ( nSymHeight > nTextWidth ) - nTextWidth = nSymHeight; - else if ( nSymHeight+5 > nTextWidth ) - nTextWidth = nSymHeight+5; - pSVData->maGDIData.mnAppFontX = nTextWidth * 10 / 8; - pSVData->maGDIData.mnAppFontY = nTextHeight * 10; - - // FIXME: this is currently only on OS X, check with other - // platforms - if( pSVData->maNWFData.mbNoFocusRects ) - { - // try to find out whether there is a large correction - // of control sizes, if yes, make app font scalings larger - // so dialog positioning is not completely off - ImplControlValue aControlValue; - Rectangle aCtrlRegion( Point(), Size( nTextWidth < 10 ? 10 : nTextWidth, nTextHeight < 10 ? 10 : nTextHeight ) ); - Rectangle aBoundingRgn( aCtrlRegion ); - Rectangle aContentRgn( aCtrlRegion ); - if( pWindow->GetNativeControlRegion( CTRL_EDITBOX, PART_ENTIRE_CONTROL, aCtrlRegion, - CTRL_STATE_ENABLED, aControlValue, OUString(), - aBoundingRgn, aContentRgn ) ) - { - // comment: the magical +6 is for the extra border in bordered - // (which is the standard) edit fields - if( aContentRgn.GetHeight() - nTextHeight > (nTextHeight+4)/4 ) - pSVData->maGDIData.mnAppFontY = (aContentRgn.GetHeight()-4) * 10; - } - } - - pSVData->maGDIData.mnRealAppFontX = pSVData->maGDIData.mnAppFontX; - if ( pSVData->maAppData.mnDialogScaleX ) - pSVData->maGDIData.mnAppFontX += (pSVData->maGDIData.mnAppFontX*pSVData->maAppData.mnDialogScaleX)/100; -} - bool Window::ImplCheckUIFont( const Font& rFont ) { if( ImplGetSVData()->maGDIData.mbNativeFontConfig ) @@ -1198,10 +1154,6 @@ void Window::ImplInit( Window* pParent, WinBits nStyle, SystemParentData* pSyste ImplUpdatePos(); - // calculate app font res (except for the Intro Window or the default window) - if ( mpWindowImpl->mbFrame && !pSVData->maGDIData.mnAppFontX && ! (nStyle & (WB_INTROWIN|WB_DEFAULTWIN)) ) - ImplInitAppFontData( this ); - if ( GetAccessibleParentWindow() && GetParent() != Application::GetDefDialogParent() ) GetAccessibleParentWindow()->ImplCallEventListeners( VCLEVENT_WINDOW_CHILDCREATED, this ); } commit ef31acfde05d5fe0706b0e2d24fc19d07cdbcd31 Author: Chris Sherlock <chris.sherloc...@gmail.com> Date: Tue May 6 22:56:25 2014 +1000 VCL: Application::SetSettings should not set mnAppFontX to 0 pImplSVData->maGDIData.mnAppFontX is *not* a flag to determine if application font dimensions should be reset. The way it currently works is: 1. Application::SetSettings() is called to reset Window settings, etc. 2. Settings are updated on all windows - but at the same time pImplSVData->maGDIData.mnAppFontX is set to zero as a way of indicating to the global function ImplCalMapResolution that we need to get the font from the first window, or if this isn't available then create a new dummy WorkWindow and use this to get the font data, and set the application font to this. This is very odd. What we really should be doing is calling on ImplInitAppFontData directly from within SetSettings() instead of making ImplCalcMapResolution detect that mnAppFontX is zero and there is a valid first frame window. Ultimately, this was found when I commited f76026a43acc to move ImplInitAppFontData from Window to Application. Somehow I entirely missed that the font and style dropdowns in writer died, and I also somehow a whole bunch of tests failed but I again didn't notice this either. With this fix, I should be able to recommit the previous change. Change-Id: Ib526954962fdc397fb3ddd3c21ae947d939db9e5 diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx index 4c8a254..607702d 100644 --- a/vcl/source/app/svapp.cxx +++ b/vcl/source/app/svapp.cxx @@ -549,7 +549,7 @@ void Application::SetSettings( const AllSettings& rSettings ) { nOldDPIX = pFirstFrame->mnDPIX; nOldDPIY = pFirstFrame->mnDPIY; - pSVData->maGDIData.mnAppFontX = 0; + Window::ImplInitAppFontData(pFirstFrame); } Window* pFrame = pFirstFrame; while ( pFrame ) commit 20144988df7296fb012ff0b01f04d3978888e94d Author: Chris Sherlock <chris.sherloc...@gmail.com> Date: Mon May 5 21:30:20 2014 +1000 Use css alias in svapp.hxx Change-Id: Ifffcf30f68aa4486e22211d9dfc5ad6d77346a85 diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx index 6db93f7..a0d71e6 100644 --- a/include/vcl/svapp.hxx +++ b/include/vcl/svapp.hxx @@ -23,6 +23,8 @@ #include <config_features.h> #include <sal/config.h> +#include <sal/types.h> + #include <cassert> #include <stdexcept> @@ -928,7 +930,7 @@ public: @returns UNO reference to an object that implements the css:awt:XDisplayConnection interface. */ - static ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDisplayConnection > GetDisplayConnection(); + static css::uno::Reference< css::awt::XDisplayConnection > GetDisplayConnection(); /** @deprecated AppEvent is used only in the Desktop class now. However, it is intended to notify the application that an event has occured. It was in oldsv.cxx, @@ -1352,7 +1354,7 @@ public: @returns UNO reference to VCL toolkit */ - static ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit > GetVCLToolkit(); + static css::uno::Reference< css::awt::XToolkit > GetVCLToolkit(); /** Get the application's UNO wrapper object. commit deba6ec88a7035be0d88e5e5bf9a2bc3c78eff9d Author: Chris Sherlock <chris.sherloc...@gmail.com> Date: Mon May 5 21:11:48 2014 +1000 Indent svapp.hxx functions Change-Id: Ibc7262921173036297c670fda3c68c6d77b9853e diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx index 7f330f5..6db93f7 100644 --- a/include/vcl/svapp.hxx +++ b/include/vcl/svapp.hxx @@ -348,7 +348,7 @@ public: @returns true if exited successfully, false if not able to fully exit */ - virtual bool QueryExit(); + virtual bool QueryExit(); /** @name Change Notification Functions @@ -618,7 +618,7 @@ public: @see IsInExecute, IsInModalMode */ - static bool IsInMain(); + static bool IsInMain(); /** Queries whether the application is in the event loop @@ -626,7 +626,7 @@ public: @see IsInMain, IsInModalMode */ - static bool IsInExecute(); + static bool IsInExecute(); /** Queries whether application has a modal dialog active. @@ -634,7 +634,7 @@ public: @see IsInMain, IsInExecute */ - static bool IsInModalMode(); + static bool IsInModalMode(); /** Return how many events are being dispatched. @@ -671,7 +671,7 @@ public: @returns true if UI is captured, false if not */ - static bool IsUICaptured(); + static bool IsUICaptured(); /** @name Settings @@ -828,7 +828,7 @@ public: @see PostKeyEvent */ - static bool HandleKey( sal_uLong nEvent, Window *pWin, KeyEvent* pKeyEvent ); + static bool HandleKey( sal_uLong nEvent, Window *pWin, KeyEvent* pKeyEvent ); /** Send keypress event @@ -894,7 +894,7 @@ public: @return true if there is a default window and the event could be posted to it successfully. */ - static bool PostUserEvent( sal_uLong& rEventId, const Link& rLink, void* pCaller = NULL ); + static bool PostUserEvent( sal_uLong& rEventId, const Link& rLink, void* pCaller = NULL ); /** Remove user event based on event ID @@ -912,7 +912,7 @@ public: @return true if the handler was inserted successfully, false if it couldn't be inserted. */ - static bool InsertIdleHdl( const Link& rLink, sal_uInt16 nPriority ); + static bool InsertIdleHdl( const Link& rLink, sal_uInt16 nPriority ); /** Remove an idle handler from the application. @@ -1165,7 +1165,7 @@ public: @see RemoveAccel */ - static bool InsertAccel( Accelerator* pAccel ); + static bool InsertAccel( Accelerator* pAccel ); /** Remove accelerator @@ -1189,7 +1189,7 @@ public: @see EnableAutoMnemonic */ - static bool IsAutoMnemonicEnabled(); + static bool IsAutoMnemonicEnabled(); /** Get the number of reserved key codes used by the application. @@ -1250,7 +1250,7 @@ public: @see EnableAutoHelpId */ - static bool IsAutoHelpIdEnabled(); + static bool IsAutoHelpIdEnabled(); ///@} @@ -1308,7 +1308,7 @@ public: @see GetDialogCancelMode, SetDialogCancelMode */ - static bool IsDialogCancelEnabled(); + static bool IsDialogCancelEnabled(); /** Make a dialog box a system window or not. @@ -1411,7 +1411,7 @@ public: @see EnableHeadlessMode, IsHeadlessModeRequested */ - static bool IsHeadlessModeEnabled(); + static bool IsHeadlessModeEnabled(); /** Check command line arguments for \code --headless \endcode _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits