Hi, Here is a patch to fix bug 32376: Bug 32376 - [EasyHack] Set default color to the current one in toolbar popups https://bugs.freedesktop.org/show_bug.cgi?id=32376 With this patch, color selection popups remember previously selected color. Limitation: This patch doesn't change anything about selection rendering. It marks the previously selected color as a selection which has little visual appeal. So it is a bit difficult to find the selected color. See attached a png image. The patch is under LGPLv3/MPL. Cheers, -- Kurosawa Takeshi <taken.spc@gmail.com>
From c765a03b543015c1ffa9e2ea6b7e6d1fba322b71 Mon Sep 17 00:00:00 2001 From: Kurosawa Takeshi <taken.spc@gmail.com> Date: Sat, 12 Feb 2011 01:27:59 +0900 Subject: [PATCH] fdo#32376 Set default color to the current one in toolbar popups --- svx/inc/svx/extrusioncolorcontrol.hxx | 3 +- svx/inc/svx/tbcontrl.hxx | 6 +++ svx/source/tbxctrls/colorwindow.hxx | 10 +++-- svx/source/tbxctrls/extrusioncontrols.cxx | 9 +++- svx/source/tbxctrls/tbcontrl.cxx | 62 ++++++++++++++++++---------- 5 files changed, 61 insertions(+), 29 deletions(-) diff --git a/svx/inc/svx/extrusioncolorcontrol.hxx b/svx/inc/svx/extrusioncolorcontrol.hxx index 8bd4a93..4b79b88 100644 --- a/svx/inc/svx/extrusioncolorcontrol.hxx +++ b/svx/inc/svx/extrusioncolorcontrol.hxx @@ -38,7 +38,8 @@ namespace svx { class SVX_DLLPUBLIC ExtrusionColorControl : public SfxToolBoxControl { private: - ToolboxButtonColorUpdater* mpBtnUpdater; + ToolboxButtonColorUpdater* mpBtnUpdater; + Color mLastColor; public: SFX_DECL_TOOLBOX_CONTROL(); diff --git a/svx/inc/svx/tbcontrl.hxx b/svx/inc/svx/tbcontrl.hxx index 66b4861..fd1fb8a 100644 --- a/svx/inc/svx/tbcontrl.hxx +++ b/svx/inc/svx/tbcontrl.hxx @@ -287,6 +287,7 @@ public: class SVX_DLLPUBLIC SvxFontColorToolBoxControl : public SfxToolBoxControl { ::svx::ToolboxButtonColorUpdater* pBtnUpdater; + Color mLastColor; public: SFX_DECL_TOOLBOX_CONTROL(); @@ -314,6 +315,7 @@ class SVX_DLLPUBLIC SvxFontColorExtToolBoxControl : public SfxToolBoxControl // SfxStatusForwarder aForward; ::svx::ToolboxButtonColorUpdater* pBtnUpdater; + Color mLastColor; public: SFX_DECL_TOOLBOX_CONTROL(); @@ -338,6 +340,8 @@ public: class SVX_DLLPUBLIC SvxColorToolBoxControl : public SfxToolBoxControl { ::svx::ToolboxButtonColorUpdater* pBtnUpdater; + Color mLastColor; + public: SFX_DECL_TOOLBOX_CONTROL(); SvxColorToolBoxControl( USHORT nSlotId, USHORT nId, ToolBox& rTbx ); @@ -398,6 +402,8 @@ public: class SVX_DLLPUBLIC SvxFrameLineColorToolBoxControl : public SfxToolBoxControl { ::svx::ToolboxButtonColorUpdater* pBtnUpdater; + Color mLastColor; + public: SFX_DECL_TOOLBOX_CONTROL(); SvxFrameLineColorToolBoxControl( USHORT nSlotId, diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx index 763f2bf..fc49d05 100644 --- a/svx/source/tbxctrls/colorwindow.hxx +++ b/svx/source/tbxctrls/colorwindow.hxx @@ -19,9 +19,10 @@ class SvxColorWindow_Impl : public SfxPopupWindow using FloatingWindow::StateChanged; private: - const USHORT theSlotId; - ValueSet aColorSet; - rtl::OUString maCommand; + const USHORT theSlotId; + ValueSet aColorSet; + rtl::OUString maCommand; + const Color mLastColor; #if _SOLAR__PRIVATE DECL_LINK( SelectHdl, void * ); @@ -36,7 +37,8 @@ public: USHORT nSlotId, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame
& rFrame,
const String& rWndTitle, - Window* pParentWindow ); + Window* pParentWindow, + const Color rLastColor = COL_AUTO); ~SvxColorWindow_Impl(); void StartSelection(); diff --git a/svx/source/tbxctrls/extrusioncontrols.cxx b/svx/source/tbxctrls/extrusioncontrols.cxx index ac1b68a..cca72a1 100644 --- a/svx/source/tbxctrls/extrusioncontrols.cxx +++ b/svx/source/tbxctrls/extrusioncontrols.cxx @@ -989,7 +989,8 @@ SFX_IMPL_TOOLBOX_CONTROL( ExtrusionColorControl, SvxColorItem ); ExtrusionColorControl::ExtrusionColorControl( USHORT nSlotId, USHORT nId, ToolBox& rTbx ) -: SfxToolBoxControl ( nSlotId, nId, rTbx ) +: SfxToolBoxControl ( nSlotId, nId, rTbx ), + mLastColor( COL_AUTO ) { rTbx.SetItemBits( nId, TIB_DROPDOWNONLY | rTbx.GetItemBits( nId ) ); mpBtnUpdater = new ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox(), TBX_UPDATER_MODE_CHAR_COLOR_NEW ); @@ -1018,7 +1019,8 @@ SfxPopupWindow* ExtrusionColorControl::CreatePopupWindow() SID_EXTRUSION_3D_COLOR, m_xFrame, SVX_RESSTR( RID_SVXSTR_EXTRUSION_COLOR ), - &GetToolBox() ); + &GetToolBox(), + mLastColor ); pColorWin->StartPopupMode( &GetToolBox(), FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF ); pColorWin->StartSelection(); SetPopupWindow( pColorWin ); @@ -1040,7 +1042,10 @@ void ExtrusionColorControl::StateChanged( USHORT nSID, SfxItemState eState, cons pItem = PTR_CAST( SvxColorItem, pState ); if ( pItem ) + { mpBtnUpdater->Update( pItem->GetValue()); + mLastColor = pItem->GetValue(); + } } rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState ); diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index c50a4fb..070e0aa 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -821,13 +821,15 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, USHORT nSlotId, const Reference< XFrame >& rFrame, const String& rWndTitle, - Window* pParentWindow ) : + Window* pParentWindow, + const ::Color rLastColor ) : SfxPopupWindow( nSlotId, rFrame, pParentWindow, WinBits( WB_STDPOPUP ) ), theSlotId( nSlotId ), aColorSet( this, WinBits( WB_ITEMBORDER | WB_NAMEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT) ), - maCommand( rCommand ) + maCommand( rCommand ), + mLastColor( rLastColor ) { SfxObjectShell* pDocSh = SfxObjectShell::Current(); @@ -883,6 +885,8 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, { pEntry = pColorTable->GetColor(i); aColorSet.InsertItem( i+1, pEntry->GetColor(), pEntry->GetName() ); + if( pEntry->GetColor() == mLastColor ) + aColorSet.SelectItem( i+1 ); } while ( i < PALETTE_SIZE ) @@ -921,7 +925,7 @@ void SvxColorWindow_Impl::KeyInput( const KeyEvent& rKEvt ) SfxPopupWindow* SvxColorWindow_Impl::Clone() const { - return new SvxColorWindow_Impl( maCommand, theSlotId, GetFrame(), GetText(), GetParent() ); + return new SvxColorWindow_Impl( maCommand, theSlotId, GetFrame(), GetText(), GetParent(), mLastColor ); } // ----------------------------------------------------------------------- @@ -930,7 +934,6 @@ IMPL_LINK( SvxColorWindow_Impl, SelectHdl, void *, EMPTYARG ) { USHORT nItemId = aColorSet.GetSelectItemId(); SvxColorItem aColorItem( aColorSet.GetItemColor( nItemId ), theSlotId ); - /* #i33380# DR 2004-09-03 Moved the following line above the Dispatch() calls. This instance may be deleted in the meantime (i.e. when a dialog is opened while in Dispatch()), accessing members will crash in this case. */ @@ -2333,7 +2336,8 @@ SvxFontColorToolBoxControl::SvxFontColorToolBoxControl( : SfxToolBoxControl( nSlotId, nId, rTbx ), pBtnUpdater( new ::svx::ToolboxButtonColorUpdater( - nSlotId, nId, &GetToolBox(), TBX_UPDATER_MODE_CHAR_COLOR_NEW )) + nSlotId, nId, &GetToolBox(), TBX_UPDATER_MODE_CHAR_COLOR_NEW )), + mLastColor( COL_AUTO ) { rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) ); } @@ -2354,7 +2358,7 @@ SfxPopupWindowType SvxFontColorToolBoxControl::GetPopupWindowType() const // ----------------------------------------------------------------------- -SfxPopupWindow* SvxFontColorToolBoxControl::CreatePopupWindow() +SfxPopupWindow* SvxFontColorToolBoxControl::CreatePopupWindow() { SvxColorWindow_Impl* pColorWin = new SvxColorWindow_Impl( @@ -2362,7 +2366,8 @@ SfxPopupWindow* SvxFontColorToolBoxControl::CreatePopupWindow() SID_ATTR_CHAR_COLOR, m_xFrame, SVX_RESSTR( RID_SVXITEMS_EXTRAS_CHARCOLOR ), - &GetToolBox() ); + &GetToolBox(), + mLastColor); pColorWin->StartPopupMode( &GetToolBox(), FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF ); @@ -2380,13 +2385,16 @@ void SvxFontColorToolBoxControl::StateChanged( { USHORT nId = GetId(); ToolBox& rTbx = GetToolBox(); - const SvxColorItem* pItem = 0; + const SvxColorItem* pItem = 0; if ( SFX_ITEM_DONTCARE != eState ) pItem = PTR_CAST( SvxColorItem, pState ); if ( pItem ) - pBtnUpdater->Update( pItem->GetValue()); + { + pBtnUpdater->Update( pItem->GetValue() ); + mLastColor= pItem->GetValue(); + } rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState ); rTbx.SetItemState( nId, ( SFX_ITEM_DONTCARE == eState ) ? STATE_DONTKNOW : STATE_NOCHECK ); @@ -2398,7 +2406,8 @@ void SvxFontColorToolBoxControl::StateChanged( SvxColorToolBoxControl::SvxColorToolBoxControl( USHORT nSlotId, USHORT nId, ToolBox& rTbx ) : - SfxToolBoxControl( nSlotId, nId, rTbx ) + SfxToolBoxControl( nSlotId, nId, rTbx ), + mLastColor( COL_AUTO ) { if ( nSlotId == SID_BACKGROUND_COLOR ) rTbx.SetItemBits( nId, TIB_DROPDOWNONLY | rTbx.GetItemBits( nId ) ); @@ -2433,7 +2442,8 @@ SfxPopupWindow* SvxColorToolBoxControl::CreatePopupWindow() SID_BACKGROUND_COLOR, m_xFrame, SVX_RESSTR(nResId), - &GetToolBox() ); + &GetToolBox(), + mLastColor); pColorWin->StartPopupMode( &GetToolBox(), FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF ); @@ -2445,16 +2455,16 @@ SfxPopupWindow* SvxColorToolBoxControl::CreatePopupWindow() // ----------------------------------------------------------------------- void SvxColorToolBoxControl::StateChanged( - USHORT , SfxItemState eState, const SfxPoolItem* pState ) - { - const SvxColorItem* pItem = 0; + const SvxColorItem* pItem = 0; if ( SFX_ITEM_DONTCARE != eState ) pItem = PTR_CAST( SvxColorItem, pState ); - if ( pItem ) + if ( pItem ) { pBtnUpdater->Update( pItem->GetValue() ); + mLastColor= pItem->GetValue(); + } USHORT nId = GetId(); ToolBox& rTbx = GetToolBox(); @@ -2472,7 +2482,8 @@ SvxFontColorExtToolBoxControl::SvxFontColorExtToolBoxControl( ToolBox& rTbx ) : SfxToolBoxControl( nSlotId, nId, rTbx ), - pBtnUpdater(0) + pBtnUpdater(0), + mLastColor( COL_AUTO ) { rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) ); // The following commands are available at the writer module. @@ -2510,7 +2521,8 @@ SfxPopupWindow* SvxFontColorExtToolBoxControl::CreatePopupWindow() GetSlotId(), m_xFrame, SVX_RESSTR( RID_SVXITEMS_EXTRAS_CHARCOLOR ), - &GetToolBox() ); + &GetToolBox(), + mLastColor ); if ( GetSlotId() == SID_ATTR_CHAR_COLOR_BACKGROUND ) pColorWin->SetText( SVX_RESSTR( RID_SVXSTR_EXTRAS_CHARBACKGROUND ) ); @@ -2549,7 +2561,10 @@ void SvxFontColorExtToolBoxControl::StateChanged( pItem = PTR_CAST( SvxColorItem, pState ); if ( pItem ) + { pBtnUpdater->Update( pItem->GetValue() ); + mLastColor = pItem->GetValue(); + } } } @@ -2685,7 +2700,8 @@ SvxFrameLineColorToolBoxControl::SvxFrameLineColorToolBoxControl( ToolBox& rTbx ) : SfxToolBoxControl( nSlotId, nId, rTbx ), - pBtnUpdater(new ::svx::ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox() )) + pBtnUpdater(new ::svx::ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox() )), + mLastColor( COL_AUTO ) { rTbx.SetItemBits( nId, TIB_DROPDOWNONLY | rTbx.GetItemBits( nId ) ); } @@ -2714,7 +2730,8 @@ SfxPopupWindow* SvxFrameLineColorToolBoxControl::CreatePopupWindow() SID_FRAME_LINECOLOR, m_xFrame, SVX_RESSTR(RID_SVXSTR_FRAME_COLOR), - &GetToolBox() ); + &GetToolBox(), + mLastColor); pColorWin->StartPopupMode( &GetToolBox(), FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF ); @@ -2726,9 +2743,7 @@ SfxPopupWindow* SvxFrameLineColorToolBoxControl::CreatePopupWindow() // ----------------------------------------------------------------------- void SvxFrameLineColorToolBoxControl::StateChanged( - USHORT , SfxItemState eState, const SfxPoolItem* pState ) - { USHORT nId = GetId(); ToolBox& rTbx = GetToolBox(); @@ -2738,9 +2753,12 @@ void SvxFrameLineColorToolBoxControl::StateChanged( const SvxColorItem* pItem = 0; if ( SFX_ITEM_DONTCARE != eState ) { - pItem = PTR_CAST( SvxColorItem, pState ); + pItem = PTR_CAST( SvxColorItem, pState ); if ( pItem ) + { pBtnUpdater->Update( pItem->GetValue()); + mLastColor = pItem->GetValue(); + } } } -- 1.7.1
Attachment:
bug32376_with_patch.png
Description: PNG image