diff options
author | Rüdiger Timm <rt@openoffice.org> | 2003-04-24 12:33:02 +0000 |
---|---|---|
committer | Rüdiger Timm <rt@openoffice.org> | 2003-04-24 12:33:02 +0000 |
commit | efc94fc1056dc4db7ae075b121a6c028c2383409 (patch) | |
tree | 41c858fd3806a7054edaf04110feb99c745bfe82 /framework/source | |
parent | 969f41a8bf6dc3448d1bd3bdc0eb5fd188b1ab57 (diff) |
INTEGRATION: CWS mav4 (1.2.10); FILE MERGED
2003/04/23 13:17:52 as 1.2.10.1: #109052# HACK: refresh background color if it was changed by 3rdparty!
Diffstat (limited to 'framework/source')
-rw-r--r-- | framework/source/classes/colorlistener.cxx | 63 |
1 files changed, 53 insertions, 10 deletions
diff --git a/framework/source/classes/colorlistener.cxx b/framework/source/classes/colorlistener.cxx index 36ec9c3c21f2..e804133fd262 100644 --- a/framework/source/classes/colorlistener.cxx +++ b/framework/source/classes/colorlistener.cxx @@ -2,9 +2,9 @@ * * $RCSfile: colorlistener.cxx,v $ * - * $Revision: 1.2 $ + * $Revision: 1.3 $ * - * last change: $Author: hr $ $Date: 2003-03-25 18:21:28 $ + * last change: $Author: rt $ $Date: 2003-04-24 13:33:02 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -90,6 +90,14 @@ #include <rtl/ustring.h> #endif +#ifndef _RTL_USTRBUF_HXX_ +#include <rtl/ustrbuf.hxx> +#endif + +#ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_ +#include <toolkit/helper/vclunohelper.hxx> +#endif + #ifndef _SFXSMPLHINT_HXX #include <svtools/smplhint.hxx> #endif @@ -98,6 +106,10 @@ #include <vcl/svapp.hxx> #endif +#ifndef _SV_WINDOW_HXX +#include <vcl/window.hxx> +#endif + //__________________________________________ // definition @@ -129,7 +141,7 @@ ColorListener::ColorListener( const css::uno::Reference< css::awt::XWindow >& xW , m_pConfig (NULL ) { impl_startListening(); - impl_applyColor(); + impl_applyColor(sal_True); } //__________________________________________ @@ -160,13 +172,13 @@ ColorListener::~ColorListener() void ColorListener::Notify( SfxBroadcaster& rBroadCaster, const SfxHint& rHint ) { if (((SfxSimpleHint&)rHint).GetId()==SFX_HINT_COLORS_CHANGED) - impl_applyColor(); + impl_applyColor(sal_True); } -void ColorListener::impl_applyColor() +void ColorListener::impl_applyColor( sal_Bool bInvalidate ) { /* SAFE { */ - ReadGuard aReadLock(m_aLock); + WriteGuard aWriteLock(m_aLock); if (m_pConfig) { @@ -174,13 +186,17 @@ void ColorListener::impl_applyColor() ::svtools::ColorConfigValue aBackgroundColor = m_pConfig->GetColorValue( ::svtools::APPBACKGROUND ); if (xPeer.is()) { - xPeer->setBackground(aBackgroundColor.nColor); - xPeer->invalidate( - css::awt::InvalidateStyle::UPDATE | css::awt::InvalidateStyle::CHILDREN | css::awt::InvalidateStyle::NOTRANSPARENT ); + m_nColor = aBackgroundColor.nColor; + xPeer->setBackground(m_nColor); + if (bInvalidate) + { + xPeer->invalidate( + css::awt::InvalidateStyle::UPDATE | css::awt::InvalidateStyle::CHILDREN | css::awt::InvalidateStyle::NOTRANSPARENT ); + } } } - aReadLock.unlock(); + aWriteLock.unlock(); /* } SAFE */ } @@ -213,6 +229,29 @@ void SAL_CALL ColorListener::disposing( const css::lang::EventObject& aEvent ) t /* } SAFE */ } +IMPL_LINK( ColorListener, impl_SettingsChanged, void*, pVoid ) +{ + VclWindowEvent* pEvent = (VclWindowEvent*)pVoid; + if (pEvent->GetId() != VCLEVENT_APPLICATION_DATACHANGED) + return 0L; + + /* SAFE { */ + ReadGuard aReadLock(m_aLock); + Window* pWindow = VCLUnoHelper::GetWindow(m_xWindow); + if (!pWindow) + return 0L; + + OutputDevice* pDevice = (OutputDevice*)pWindow; + long nNewColor = (long)(pDevice->GetBackground().GetColor().GetColor()); + + if (m_nColor != nNewColor) + impl_applyColor(sal_False); + aReadLock.unlock(); + /* } SAFE */ + + return 0L; +} + //__________________________________________ /** starts listening for color changes and window destroy. @@ -227,6 +266,8 @@ void ColorListener::impl_startListening() if (!m_bListen) { + Application::AddEventListener( LINK( this, ColorListener, impl_SettingsChanged ) ); + if (!m_pConfig) m_pConfig = new ::svtools::ColorConfig(); @@ -254,6 +295,8 @@ void ColorListener::impl_stopListening() if (m_bListen) { + Application::RemoveEventListener( LINK( this, ColorListener, impl_SettingsChanged ) ); + EndListeningAll(); delete m_pConfig; |