comphelper/inc/pch/precompiled_comphelper.hxx | 1 comphelper/source/misc/officeresourcebundle.cxx | 4 include/vcl/dialog.hxx | 22 --- include/vcl/syswin.hxx | 49 +++++-- vcl/source/window/builder.cxx | 4 vcl/source/window/dialog.cxx | 151 +++-------------------- vcl/source/window/paint.cxx | 2 vcl/source/window/syswin.cxx | 155 +++++++++++++++++++++++- 8 files changed, 216 insertions(+), 172 deletions(-)
New commits: commit 2602a41f766625e03b961ed2293fd1f2fe851a05 Author: Caolán McNamara <caol...@redhat.com> Date: Sat Aug 30 18:15:59 2014 +0100 coverity#706466 Uncaught exception and coverity#706463 Uncaught exception Change-Id: I77cb09054f00d86cd3e206e44ef4942ddf148a7f diff --git a/comphelper/inc/pch/precompiled_comphelper.hxx b/comphelper/inc/pch/precompiled_comphelper.hxx index 36ec107..5acedfd 100644 --- a/comphelper/inc/pch/precompiled_comphelper.hxx +++ b/comphelper/inc/pch/precompiled_comphelper.hxx @@ -111,7 +111,6 @@ #include <com/sun/star/lang/IllegalArgumentException.hpp> #include <com/sun/star/lang/Locale.hpp> #include <com/sun/star/lang/NotInitializedException.hpp> -#include <com/sun/star/lang/NullPointerException.hpp> #include <com/sun/star/lang/XComponent.hpp> #include <com/sun/star/lang/XInitialization.hpp> #include <com/sun/star/lang/XLocalizable.hpp> diff --git a/comphelper/source/misc/officeresourcebundle.cxx b/comphelper/source/misc/officeresourcebundle.cxx index 3fe6b8d..5d9032a 100644 --- a/comphelper/source/misc/officeresourcebundle.cxx +++ b/comphelper/source/misc/officeresourcebundle.cxx @@ -21,7 +21,6 @@ #include <com/sun/star/resource/XResourceBundle.hpp> #include <com/sun/star/resource/XResourceBundleLoader.hpp> -#include <com/sun/star/lang/NullPointerException.hpp> #include <osl/mutex.hxx> #include <osl/diagnose.h> #include <rtl/ustrbuf.hxx> @@ -36,7 +35,6 @@ namespace comphelper using com::sun::star::resource::XResourceBundleLoader; using com::sun::star::resource::MissingResourceException; using ::com::sun::star::uno::XComponentContext; - using ::com::sun::star::lang::NullPointerException; using ::com::sun::star::uno::UNO_QUERY; using ::com::sun::star::uno::Exception; using ::com::sun::star::uno::Any; @@ -191,8 +189,6 @@ namespace comphelper OfficeResourceBundle::OfficeResourceBundle( const Reference< XComponentContext >& _context, const sal_Char* _bundleBaseAsciiName ) :m_pImpl( new ResourceBundle_Impl( _context, OUString::createFromAscii( _bundleBaseAsciiName ) ) ) { - if ( !_context.is() ) - throw NullPointerException(); } commit e8fb86134c6f6052ab6748698039760827fbcd37 Author: Caolán McNamara <caol...@redhat.com> Date: Sat Aug 30 16:58:59 2014 +0100 move layout from dialog to systemwindow *distant sounds of hammering in basement* so we can get Floating Windows layout aware as well without duplicate of dialog layout logic Change-Id: I063375f2f7d4e5c3bfbfedf55649078d4dbe4139 diff --git a/include/vcl/dialog.hxx b/include/vcl/dialog.hxx index 361c860..94ea7d6 100644 --- a/include/vcl/dialog.hxx +++ b/include/vcl/dialog.hxx @@ -22,7 +22,6 @@ #include <tools/solar.h> #include <vcl/dllapi.h> -#include <vcl/builder.hxx> #include <vcl/syswin.hxx> #include <vcl/timer.hxx> @@ -36,11 +35,8 @@ struct DialogImpl; class VclBox; class VclButtonBox; -class VclContainer; -class VCL_DLLPUBLIC Dialog - : public SystemWindow - , public VclBuilderContainer +class VCL_DLLPUBLIC Dialog : public SystemWindow { private: Window* mpDialogParent; @@ -52,8 +48,7 @@ private: bool mbInClose; bool mbModalMode; bool mbIsDefferedInit; - bool mbIsCalculatingInitialLayoutSize; - Timer maLayoutTimer; + VclButtonBox* mpActionArea; VclBox* mpContentArea; @@ -65,16 +60,13 @@ private: SAL_DLLPRIVATE Dialog & operator= (const Dialog &); DECL_DLLPRIVATE_LINK( ImplAsyncCloseHdl, void* ); - DECL_DLLPRIVATE_LINK( ImplHandleLayoutTimerHdl, void* ); protected: using Window::ImplInit; SAL_DLLPRIVATE void ImplInit( Window* pParent, WinBits nStyle ); - SAL_DLLPRIVATE void setPosSizeOnContainee(Size aSize, VclContainer &rBox); public: SAL_DLLPRIVATE bool IsInClose() const { return mbInClose; } - SAL_DLLPRIVATE bool hasPendingLayout() const { return maLayoutTimer.IsActive(); } SAL_DLLPRIVATE void doDeferredInit(bool bResizable); SAL_DLLPRIVATE bool isDeferredInit() const { return mbIsDefferedInit; } @@ -82,6 +74,7 @@ protected: explicit Dialog( WindowType nType ); explicit Dialog( Window* pParent, const OString& rID, const OUString& rUIXMLDescription, WindowType nType ); virtual void Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, sal_uLong nFlags ) SAL_OVERRIDE; + virtual void settingOptimalLayoutSize(VclBox *pBox) SAL_OVERRIDE; protected: friend class VclBuilder; @@ -97,11 +90,6 @@ public: virtual void StateChanged( StateChangedType nStateChange ) SAL_OVERRIDE; virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE; - virtual Size GetOptimalSize() const SAL_OVERRIDE; - virtual void Resize() SAL_OVERRIDE; - bool isLayoutEnabled() const; - void setOptimalLayoutSize(); - bool isCalculatingInitialLayoutSize() const { return mbIsCalculatingInitialLayoutSize; } virtual void queue_resize(StateChangedType eReason = STATE_CHANGE_LAYOUT) SAL_OVERRIDE; virtual bool set_property(const OString &rKey, const OString &rValue) SAL_OVERRIDE; VclButtonBox* get_action_area() { return mpActionArea;} @@ -112,10 +100,6 @@ public: virtual short Execute(); bool IsInExecute() const { return mbInExecute; } - virtual void SetText( const OUString& rStr ) SAL_OVERRIDE; - virtual OUString GetText() const SAL_OVERRIDE; - - // Dialog::Execute replacement API public: // Link impl: DECL_LINK( MyEndDialogHdl, Dialog* ); <= param is dialog just ended diff --git a/include/vcl/syswin.hxx b/include/vcl/syswin.hxx index 871c52d..033018b 100644 --- a/include/vcl/syswin.hxx +++ b/include/vcl/syswin.hxx @@ -22,16 +22,16 @@ #include <tools/solar.h> #include <vcl/dllapi.h> +#include <vcl/builder.hxx> #include <vcl/window.hxx> class ModalDialog; class MenuBar; class TaskPaneList; - +class VclContainer; +class VclBox; // - Icon-Types - - - #define ICON_LO_DEFAULT 1 #define ICON_TEXT_DOCUMENT 2 #define ICON_TEXT_TEMPLATE 3 @@ -128,12 +128,10 @@ public: #define TITLE_BUTTON_HIDE ((sal_uInt16)2) #define TITLE_BUTTON_MENU ((sal_uInt16)4) - // - SystemWindow - - - - -class VCL_DLLPUBLIC SystemWindow : public Window +class VCL_DLLPUBLIC SystemWindow + : public Window + , public VclBuilderContainer { friend class WorkWindow; class ImplData; @@ -149,23 +147,34 @@ private: bool mbDockBtn; bool mbHideBtn; bool mbSysChild; - sal_uInt16 mnMenuBarMode; - sal_uInt16 mnIcon; + bool mbIsDefferedInit; + bool mbIsCalculatingInitialLayoutSize; + bool mbInitialLayoutDone; + sal_uInt16 mnMenuBarMode; + sal_uInt16 mnIcon; ImplData* mpImplData; + Timer maLayoutTimer; public: using Window::ImplIsInTaskPaneList; SAL_DLLPRIVATE bool ImplIsInTaskPaneList( Window* pWin ); private: + SAL_DLLPRIVATE void Init(); SAL_DLLPRIVATE void ImplMoveToScreen( long& io_rX, long& io_rY, long i_nWidth, long i_nHeight, Window* i_pConfigureWin ); + SAL_DLLPRIVATE void setPosSizeOnContainee(Size aSize, VclContainer &rBox); + DECL_DLLPRIVATE_LINK( ImplHandleLayoutTimerHdl, void* ); protected: // Single argument ctors shall be explicit. - explicit SystemWindow( WindowType nType ); + explicit SystemWindow(WindowType nType); + explicit SystemWindow(Window* pParent, const OString& rID, const OUString& rUIXMLDescription, WindowType nType); + + void SetWindowStateData( const WindowStateData& rData ); - void SetWindowStateData( const WindowStateData& rData ); + virtual void settingOptimalLayoutSize(VclBox *pBox); + SAL_DLLPRIVATE void DoInitialLayout(); public: virtual ~SystemWindow(); virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE; @@ -176,6 +185,13 @@ public: virtual void Pin(); virtual void Roll(); virtual void Resizing( Size& rSize ); + virtual void Resize() SAL_OVERRIDE; + virtual Size GetOptimalSize() const SAL_OVERRIDE; + virtual void StateChanged(StateChangedType nStateChange) SAL_OVERRIDE; + virtual void queue_resize(StateChangedType eReason = STATE_CHANGE_LAYOUT) SAL_OVERRIDE; + bool isLayoutEnabled() const; + void setOptimalLayoutSize(); + bool isCalculatingInitialLayoutSize() const { return mbIsCalculatingInitialLayoutSize; } void SetIcon( sal_uInt16 nIcon ); sal_uInt16 GetIcon() const { return mnIcon; } @@ -205,16 +221,19 @@ public: const Size& GetMaxOutputSizePixel() const; void SetWindowState(const OString& rStr); - OString GetWindowState(sal_uLong nMask = WINDOWSTATE_MASK_ALL) const; + OString GetWindowState(sal_uLong nMask = WINDOWSTATE_MASK_ALL) const; void SetMenuBar( MenuBar* pMenuBar ); MenuBar* GetMenuBar() const { return mpMenuBar; } void SetMenuBarMode( sal_uInt16 nMode ); - sal_uInt16 GetMenuBarMode() const { return mnMenuBarMode; } + sal_uInt16 GetMenuBarMode() const { return mnMenuBarMode; } TaskPaneList* GetTaskPaneList(); void GetWindowStateData( WindowStateData& rData ) const; + virtual void SetText( const OUString& rStr ) SAL_OVERRIDE; + virtual OUString GetText() const SAL_OVERRIDE; + /** Returns the screen number the window is on @@ -253,6 +272,8 @@ public: void SetCloseHdl(const Link& rLink); const Link& GetCloseHdl() const; + + SAL_DLLPRIVATE bool hasPendingLayout() const { return maLayoutTimer.IsActive(); } }; #endif // INCLUDED_VCL_SYSWIN_HXX diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 65cf06c..636e227 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -176,7 +176,7 @@ VclBuilder::VclBuilder(Window *pParent, const OUString& sUIDir, const OUString& , m_pParserState(new ParserState) , m_xFrame(rFrame) { - m_bToplevelHasDeferredInit = pParent && pParent->IsDialog() && ((Dialog*)pParent)->isDeferredInit(); + m_bToplevelHasDeferredInit = pParent && pParent->IsDialog() && static_cast<Dialog*>(pParent)->isDeferredInit(); m_bToplevelHasDeferredProperties = m_bToplevelHasDeferredInit; sal_Int32 nIdx = m_sHelpRoot.lastIndexOf('.'); @@ -1663,7 +1663,7 @@ Window *VclBuilder::insertObject(Window *pParent, const OString &rClass, //toplevels default to resizable if (pCurrentChild->IsDialog()) { - Dialog *pDialog = (Dialog*)pCurrentChild; + Dialog *pDialog = static_cast<Dialog*>(pCurrentChild); pDialog->doDeferredInit(extractResizable(rProps)); m_bToplevelHasDeferredInit = false; } diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx index f8afa9f..1fa6f40 100644 --- a/vcl/source/window/dialog.cxx +++ b/vcl/source/window/dialog.cxx @@ -347,13 +347,8 @@ void Dialog::ImplInitDialogData() mbModalMode = false; mpContentArea = NULL; mpActionArea = NULL; - mbIsCalculatingInitialLayoutSize = false; mnMousePositioned = 0; mpDialogImpl = new DialogImpl; - - //To-Do, reuse maResizeTimer - maLayoutTimer.SetTimeout(50); - maLayoutTimer.SetTimeoutHdl( LINK( this, Dialog, ImplHandleLayoutTimerHdl ) ); } void Dialog::ImplInit( Window* pParent, WinBits nStyle ) @@ -531,9 +526,24 @@ void Dialog::set_content_area(VclBox* pContentArea) mpContentArea = pContentArea; } +void Dialog::settingOptimalLayoutSize(VclBox *pBox) +{ + const DialogStyle& rDialogStyle = + GetSettings().GetStyleSettings().GetDialogStyle(); + pBox->set_border_width(rDialogStyle.content_area_border); + pBox->set_spacing(pBox->get_spacing() + + rDialogStyle.content_area_spacing); + + VclButtonBox *pActionArea = getActionArea(this); + if (pActionArea) + { + pActionArea->set_border_width(rDialogStyle.action_area_border); + pActionArea->set_spacing(rDialogStyle.button_spacing); + } +} + Dialog::~Dialog() { - maLayoutTimer.Stop(); delete mpDialogImpl; mpDialogImpl = NULL; } @@ -614,54 +624,14 @@ Size bestmaxFrameSizeForScreenSize(const Size &rScreenSize) return Size(w, h); } -void Dialog::setOptimalLayoutSize() -{ - maLayoutTimer.Stop(); - - //resize dialog to fit requisition on initial show - VclBox *pBox = static_cast<VclBox*>(GetWindow(WINDOW_FIRSTCHILD)); - - const DialogStyle& rDialogStyle = - GetSettings().GetStyleSettings().GetDialogStyle(); - pBox->set_border_width(rDialogStyle.content_area_border); - pBox->set_spacing(pBox->get_spacing() + - rDialogStyle.content_area_spacing); - - VclButtonBox *pActionArea = getActionArea(this); - if (pActionArea) - { - pActionArea->set_border_width(rDialogStyle.action_area_border); - pActionArea->set_spacing(rDialogStyle.button_spacing); - } - - Size aSize = get_preferred_size(); - - Size aMax(bestmaxFrameSizeForScreenSize(GetDesktopRectPixel().GetSize())); - - aSize.Width() = std::min(aMax.Width(), aSize.Width()); - aSize.Height() = std::min(aMax.Height(), aSize.Height()); - - SetMinOutputSizePixel(aSize); - SetSizePixel(aSize); - setPosSizeOnContainee(aSize, *pBox); -} - void Dialog::StateChanged( StateChangedType nType ) { - SystemWindow::StateChanged( nType ); - - if ( nType == STATE_CHANGE_INITSHOW ) + if (nType == STATE_CHANGE_INITSHOW) { if ( GetSettings().GetStyleSettings().GetAutoMnemonic() ) ImplWindowAutoMnemonic( this ); - if (isLayoutEnabled()) - { - mbIsCalculatingInitialLayoutSize = true; - setDeferredProperties(); - setOptimalLayoutSize(); - mbIsCalculatingInitialLayoutSize = false; - } + DoInitialLayout(); if ( !HasChildPathFocus() || HasFocus() ) GrabFocusToFirstControl(); @@ -676,7 +646,10 @@ void Dialog::StateChanged( StateChangedType nType ) ImplMouseAutoPos( this ); } - else if ( nType == STATE_CHANGE_CONTROLBACKGROUND ) + + SystemWindow::StateChanged( nType ); + + if (nType == STATE_CHANGE_CONTROLBACKGROUND) { ImplInitSettings(); Invalidate(); @@ -1166,75 +1139,11 @@ void Dialog::Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, sal pDev->Pop(); } -bool Dialog::isLayoutEnabled() const -{ - //pre dtor called, and single child is a container => we're layout enabled - return mpDialogImpl && ::isLayoutEnabled(this); -} - -Size Dialog::GetOptimalSize() const -{ - if (!isLayoutEnabled()) - return SystemWindow::GetOptimalSize(); - - Size aSize = VclContainer::getLayoutRequisition(*GetWindow(WINDOW_FIRSTCHILD)); - - sal_Int32 nBorderWidth = get_border_width(); - - aSize.Height() += mpWindowImpl->mnLeftBorder + mpWindowImpl->mnRightBorder - + 2*nBorderWidth; - aSize.Width() += mpWindowImpl->mnTopBorder + mpWindowImpl->mnBottomBorder - + 2*nBorderWidth; - - return Window::CalcWindowSize(aSize); -} - -void Dialog::setPosSizeOnContainee(Size aSize, VclContainer &rBox) -{ - sal_Int32 nBorderWidth = get_border_width(); - - aSize.Width() -= mpWindowImpl->mnLeftBorder + mpWindowImpl->mnRightBorder - + 2 * nBorderWidth; - aSize.Height() -= mpWindowImpl->mnTopBorder + mpWindowImpl->mnBottomBorder - + 2 * nBorderWidth; - - Point aPos(mpWindowImpl->mnLeftBorder + nBorderWidth, - mpWindowImpl->mnTopBorder + nBorderWidth); - - VclContainer::setLayoutAllocation(rBox, aPos, aSize); -} - -IMPL_LINK( Dialog, ImplHandleLayoutTimerHdl, void*, EMPTYARG ) +void Dialog::queue_resize(StateChangedType eReason) { - if (!isLayoutEnabled()) - { - SAL_WARN("vcl.layout", "Dialog has become non-layout because extra children have been added directly to it."); - return 0; - } - - VclBox *pBox = static_cast<VclBox*>(GetWindow(WINDOW_FIRSTCHILD)); - assert(pBox); - setPosSizeOnContainee(GetSizePixel(), *pBox); - return 0; -} - -void Dialog::queue_resize(StateChangedType /*eReason*/) -{ - if (hasPendingLayout() || isCalculatingInitialLayoutSize()) - return; if (IsInClose()) return; - if (!isLayoutEnabled()) - return; - WindowImpl *pWindowImpl = mpWindowImpl->mpBorderWindow ? mpWindowImpl->mpBorderWindow->mpWindowImpl : mpWindowImpl; - pWindowImpl->mnOptimalWidthCache = -1; - pWindowImpl->mnOptimalHeightCache = -1; - maLayoutTimer.Start(); -} - -void Dialog::Resize() -{ - queue_resize(); + SystemWindow::queue_resize(eReason); } bool Dialog::set_property(const OString &rKey, const OString &rValue) @@ -1246,18 +1155,6 @@ bool Dialog::set_property(const OString &rKey, const OString &rValue) return true; } -void Dialog::SetText(const OUString& rStr) -{ - setDeferredProperties(); - SystemWindow::SetText(rStr); -} - -OUString Dialog::GetText() const -{ - const_cast<Dialog*>(this)->setDeferredProperties(); - return SystemWindow::GetText(); -} - VclBuilderContainer::VclBuilderContainer() : m_pUIBuilder(NULL) { diff --git a/vcl/source/window/paint.cxx b/vcl/source/window/paint.cxx index 18fab8a..9255cc6 100644 --- a/vcl/source/window/paint.cxx +++ b/vcl/source/window/paint.cxx @@ -284,7 +284,7 @@ void Window::ImplPostPaint() IMPL_LINK_NOARG(Window, ImplHandlePaintHdl) { // save paint events until layout is done - if (!ImplDoTiledRendering() && IsDialog() && static_cast<const Dialog*>(this)->hasPendingLayout()) + if (!ImplDoTiledRendering() && IsSystemWindow() && static_cast<const SystemWindow*>(this)->hasPendingLayout()) { mpWindowImpl->mpFrameData->maPaintTimer.Start(); return 0; diff --git a/vcl/source/window/syswin.cxx b/vcl/source/window/syswin.cxx index c4077a1..a3e6ef7 100644 --- a/vcl/source/window/syswin.cxx +++ b/vcl/source/window/syswin.cxx @@ -23,6 +23,7 @@ #include <tools/debug.hxx> +#include <vcl/layout.hxx> #include <vcl/svapp.hxx> #include <vcl/menu.hxx> #include <vcl/event.hxx> @@ -60,12 +61,10 @@ SystemWindow::ImplData::ImplData() SystemWindow::ImplData::~ImplData() { - if( mpTaskPaneList ) - delete mpTaskPaneList; + delete mpTaskPaneList; } -SystemWindow::SystemWindow( WindowType nType ) : - Window( nType ) +void SystemWindow::Init() { mpImplData = new ImplData; mpWindowImpl->mbSysWin = true; @@ -78,12 +77,32 @@ SystemWindow::SystemWindow( WindowType nType ) : mbDockBtn = false; mbHideBtn = false; mbSysChild = false; + mbIsCalculatingInitialLayoutSize = false; + mbInitialLayoutDone = false; mnMenuBarMode = MENUBAR_MODE_NORMAL; mnIcon = 0; + + //To-Do, reuse maResizeTimer + maLayoutTimer.SetTimeout(50); + maLayoutTimer.SetTimeoutHdl( LINK( this, SystemWindow, ImplHandleLayoutTimerHdl ) ); +} + +SystemWindow::SystemWindow(WindowType nType) + : Window(nType) +{ + Init(); +} + +SystemWindow::SystemWindow(Window* pParent, const OString& rID, const OUString& rUIXMLDescription, WindowType nType) + : Window(pParent, nType) +{ + Init(); + m_pUIBuilder = new VclBuilder(this, getUIRootDir(), rUIXMLDescription, rID); } SystemWindow::~SystemWindow() { + maLayoutTimer.Stop(); delete mpImplData; mpImplData = NULL; } @@ -965,4 +984,132 @@ const Link& SystemWindow::GetCloseHdl() const return mpImplData->maCloseHdl; } +void SystemWindow::queue_resize(StateChangedType /*eReason*/) +{ + if (hasPendingLayout() || isCalculatingInitialLayoutSize()) + return; + if (!isLayoutEnabled()) + return; + WindowImpl *pWindowImpl = mpWindowImpl->mpBorderWindow ? mpWindowImpl->mpBorderWindow->mpWindowImpl : mpWindowImpl; + pWindowImpl->mnOptimalWidthCache = -1; + pWindowImpl->mnOptimalHeightCache = -1; + maLayoutTimer.Start(); +} + +void SystemWindow::Resize() +{ + queue_resize(); +} + +bool SystemWindow::isLayoutEnabled() const +{ + //pre dtor called, and single child is a container => we're layout enabled + return mpImplData && ::isLayoutEnabled(this); +} + +Size SystemWindow::GetOptimalSize() const +{ + if (!isLayoutEnabled()) + return Window::GetOptimalSize(); + + Size aSize = VclContainer::getLayoutRequisition(*GetWindow(WINDOW_FIRSTCHILD)); + + sal_Int32 nBorderWidth = get_border_width(); + + aSize.Height() += mpWindowImpl->mnLeftBorder + mpWindowImpl->mnRightBorder + + 2*nBorderWidth; + aSize.Width() += mpWindowImpl->mnTopBorder + mpWindowImpl->mnBottomBorder + + 2*nBorderWidth; + + return Window::CalcWindowSize(aSize); +} + +void SystemWindow::setPosSizeOnContainee(Size aSize, VclContainer &rBox) +{ + sal_Int32 nBorderWidth = get_border_width(); + + aSize.Width() -= mpWindowImpl->mnLeftBorder + mpWindowImpl->mnRightBorder + + 2 * nBorderWidth; + aSize.Height() -= mpWindowImpl->mnTopBorder + mpWindowImpl->mnBottomBorder + + 2 * nBorderWidth; + + Point aPos(mpWindowImpl->mnLeftBorder + nBorderWidth, + mpWindowImpl->mnTopBorder + nBorderWidth); + + VclContainer::setLayoutAllocation(rBox, aPos, aSize); +} + +IMPL_LINK( SystemWindow, ImplHandleLayoutTimerHdl, void*, EMPTYARG ) +{ + if (!isLayoutEnabled()) + { + SAL_WARN("vcl.layout", "SystemWindow has become non-layout because extra children have been added directly to it."); + return 0; + } + + VclBox *pBox = static_cast<VclBox*>(GetWindow(WINDOW_FIRSTCHILD)); + assert(pBox); + setPosSizeOnContainee(GetSizePixel(), *pBox); + return 0; +} + +void SystemWindow::SetText(const OUString& rStr) +{ + setDeferredProperties(); + Window::SetText(rStr); +} + +OUString SystemWindow::GetText() const +{ + const_cast<SystemWindow*>(this)->setDeferredProperties(); + return Window::GetText(); +} + +void SystemWindow::settingOptimalLayoutSize(VclBox* /*pBox*/) +{ +} + +void SystemWindow::setOptimalLayoutSize() +{ + maLayoutTimer.Stop(); + + //resize SystemWindow to fit requisition on initial show + VclBox *pBox = static_cast<VclBox*>(GetWindow(WINDOW_FIRSTCHILD)); + + settingOptimalLayoutSize(pBox); + + Size aSize = get_preferred_size(); + + Size aMax(bestmaxFrameSizeForScreenSize(GetDesktopRectPixel().GetSize())); + + aSize.Width() = std::min(aMax.Width(), aSize.Width()); + aSize.Height() = std::min(aMax.Height(), aSize.Height()); + + SetMinOutputSizePixel(aSize); + SetSizePixel(aSize); + setPosSizeOnContainee(aSize, *pBox); +} + +void SystemWindow::DoInitialLayout() +{ + if (isLayoutEnabled()) + { + mbIsCalculatingInitialLayoutSize = true; + setDeferredProperties(); + setOptimalLayoutSize(); + mbIsCalculatingInitialLayoutSize = false; + mbInitialLayoutDone = true; + } +} + +void SystemWindow::StateChanged( StateChangedType nType ) +{ + Window::StateChanged(nType); + + if (nType == STATE_CHANGE_INITSHOW && !mbInitialLayoutDone) + { + DoInitialLayout(); + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits