summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2014-09-14 15:45:02 +0200
committerLuboš Luňák <l.lunak@collabora.com>2014-09-14 22:07:17 +0200
commit051b29e1025253f35f87a04e297760aa8b40611f (patch)
treef836152e4e5db963740760d05d1d5358776493e3
parentd6a83d3f91336e23b51bfc3b3d58da799760829f (diff)
convert Edit autocomplete Hdl to boost signals2
Here it also keep track of the connection, as it needs to be explicitly disconnected in one place. Change-Id: Id3e2882106ae55c2d880898956a36f84d3ce70ef
-rw-r--r--include/svtools/inettbc.hxx3
-rw-r--r--include/vcl/combobox.hxx4
-rw-r--r--include/vcl/edit.hxx5
-rw-r--r--svtools/source/control/inettbc.cxx9
-rw-r--r--vcl/source/control/combobox.cxx14
-rw-r--r--vcl/source/control/edit.cxx24
6 files changed, 26 insertions, 33 deletions
diff --git a/include/svtools/inettbc.hxx b/include/svtools/inettbc.hxx
index 82e324887a68..8d073a88765a 100644
--- a/include/svtools/inettbc.hxx
+++ b/include/svtools/inettbc.hxx
@@ -48,9 +48,10 @@ friend class SvtURLBox_Impl;
SVT_DLLPRIVATE bool ProcessKey( const vcl::KeyCode& rCode );
SVT_DLLPRIVATE void TryAutoComplete();
SVT_DLLPRIVATE void UpdatePicklistForSmartProtocol_Impl();
- DECL_DLLPRIVATE_LINK( AutoCompleteHdl_Impl, void* );
SVT_DLLPRIVATE void Init(bool bSetDefaultHelpID);
+ SAL_DLLPRIVATE void AutoCompleteHandler( Edit* );
+
protected:
virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
virtual void Select() SAL_OVERRIDE;
diff --git a/include/vcl/combobox.hxx b/include/vcl/combobox.hxx
index 95e35193030a..b80d088ab748 100644
--- a/include/vcl/combobox.hxx
+++ b/include/vcl/combobox.hxx
@@ -20,6 +20,7 @@
#ifndef INCLUDED_VCL_COMBOBOX_HXX
#define INCLUDED_VCL_COMBOBOX_HXX
+#include <boost/signals2/connection.hpp>
#include <vcl/dllapi.h>
#include <vcl/ctrl.hxx>
#include <vcl/combobox.h>
@@ -50,6 +51,7 @@ private:
sal_Int32 m_nMaxWidthChars;
Link maSelectHdl;
Link maDoubleClickHdl;
+ boost::signals2::scoped_connection mAutocompleteConnection;
struct ComboBoxBounds
{
@@ -71,11 +73,11 @@ private:
DECL_DLLPRIVATE_LINK( ImplDoubleClickHdl, void* );
DECL_DLLPRIVATE_LINK( ImplPopupModeEndHdl, void* );
DECL_DLLPRIVATE_LINK( ImplSelectionChangedHdl, void* );
- DECL_DLLPRIVATE_LINK( ImplAutocompleteHdl, Edit* );
DECL_DLLPRIVATE_LINK( ImplListItemSelectHdl , void* );
SAL_DLLPRIVATE void ImplClickButtonHandler( ImplBtn* );
SAL_DLLPRIVATE void ImplUserDrawHandler( UserDrawEvent* );
+ SAL_DLLPRIVATE void ImplAutocompleteHandler( Edit* );
protected:
using Window::ImplInit;
diff --git a/include/vcl/edit.hxx b/include/vcl/edit.hxx
index 391e825437c0..5d41a1bf0852 100644
--- a/include/vcl/edit.hxx
+++ b/include/vcl/edit.hxx
@@ -20,6 +20,7 @@
#ifndef INCLUDED_VCL_EDIT_HXX
#define INCLUDED_VCL_EDIT_HXX
+#include <boost/signals2/signal.hpp>
#include <tools/solar.h>
#include <vcl/dllapi.h>
#include <vcl/timer.hxx>
@@ -94,7 +95,6 @@ private:
mbActivePopup:1;
Link maModifyHdl;
Link maUpdateDataHdl;
- Link maAutocompleteHdl;
css::uno::Reference < css::i18n::XExtendedInputSequenceChecker > mxISC;
@@ -238,8 +238,7 @@ public:
void SetSubEdit( Edit* pEdit );
Edit* GetSubEdit() const { return mpSubEdit; }
- void SetAutocompleteHdl( const Link& rHdl );
- const Link& GetAutocompleteHdl() const { return maAutocompleteHdl; }
+ boost::signals2::signal< void ( Edit* ) > autocompleteSignal;
AutocompleteAction GetAutocompleteAction() const { return meAutocompleteAction; }
virtual Size CalcMinimumSize() const;
diff --git a/svtools/source/control/inettbc.cxx b/svtools/source/control/inettbc.cxx
index e8e4d1c07b74..a5850531c182 100644
--- a/svtools/source/control/inettbc.cxx
+++ b/svtools/source/control/inettbc.cxx
@@ -899,7 +899,7 @@ void SvtURLBox::Init(bool bSetDefaultHelpID)
SetText( OUString() );
- GetSubEdit()->SetAutocompleteHdl( LINK( this, SvtURLBox, AutoCompleteHdl_Impl ) );
+ GetSubEdit()->autocompleteSignal.connect( boost::bind( &SvtURLBox::AutoCompleteHandler, this, _1 ) );
UpdatePicklistForSmartProtocol_Impl();
EnableAutoSize(GetStyle() & WB_AUTOSIZE);
@@ -1127,15 +1127,10 @@ bool SvtURLBox::PreNotify( NotifyEvent& rNEvt )
}
-IMPL_LINK_NOARG(SvtURLBox, AutoCompleteHdl_Impl)
+void SvtURLBox::AutoCompleteHandler( Edit* )
{
if ( GetSubEdit()->GetAutocompleteAction() == AUTOCOMPLETE_KEYINPUT )
- {
TryAutoComplete();
- return 1L;
- }
-
- return 0L;
}
diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx
index 700fe04f5569..93d6c295dc07 100644
--- a/vcl/source/control/combobox.cxx
+++ b/vcl/source/control/combobox.cxx
@@ -224,14 +224,18 @@ void ComboBox::EnableAutocomplete( bool bEnable, bool bMatchCase )
mbMatchCase = bMatchCase;
if ( bEnable )
- mpSubEdit->SetAutocompleteHdl( LINK( this, ComboBox, ImplAutocompleteHdl ) );
+ {
+ if( !mAutocompleteConnection.connected())
+ mAutocompleteConnection = mpSubEdit->autocompleteSignal.connect(
+ boost::bind( &ComboBox::ImplAutocompleteHandler, this, _1 ) );
+ }
else
- mpSubEdit->SetAutocompleteHdl( Link() );
+ mAutocompleteConnection.disconnect();
}
bool ComboBox::IsAutocompleteEnabled() const
{
- return mpSubEdit->GetAutocompleteHdl().IsSet();
+ return mAutocompleteConnection.connected();
}
void ComboBox::ImplClickButtonHandler( ImplBtn* )
@@ -275,7 +279,7 @@ IMPL_LINK_NOARG(ComboBox, ImplPopupModeEndHdl)
return 0;
}
-IMPL_LINK( ComboBox, ImplAutocompleteHdl, Edit*, pEdit )
+void ComboBox::ImplAutocompleteHandler( Edit* pEdit )
{
Selection aSel = pEdit->GetSelection();
AutocompleteAction eAction = pEdit->GetAutocompleteAction();
@@ -326,8 +330,6 @@ IMPL_LINK( ComboBox, ImplAutocompleteHdl, Edit*, pEdit )
pEdit->SetText( aText, aSelection );
}
}
-
- return 0;
}
IMPL_LINK_NOARG(ComboBox, ImplSelectHdl)
diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx
index 287339c33b65..404a0a00d2de 100644
--- a/vcl/source/control/edit.cxx
+++ b/vcl/source/control/edit.cxx
@@ -1615,12 +1615,12 @@ bool Edit::ImplHandleKeyEvent( const KeyEvent& rKEvt )
ImplCopyToSelectionClipboard();
}
- if ( bGoEnd && maAutocompleteHdl.IsSet() && !rKEvt.GetKeyCode().GetModifier() )
+ if ( bGoEnd && !autocompleteSignal.empty() && !rKEvt.GetKeyCode().GetModifier() )
{
if ( (maSelection.Min() == maSelection.Max()) && (maSelection.Min() == maText.getLength()) )
{
meAutocompleteAction = AUTOCOMPLETE_KEYINPUT;
- maAutocompleteHdl.Call( this );
+ autocompleteSignal( this );
}
}
@@ -1686,7 +1686,7 @@ bool Edit::ImplHandleKeyEvent( const KeyEvent& rKEvt )
not suddenly to cycle the autocompletion
case KEY_TAB:
{
- if ( !mbReadOnly && maAutocompleteHdl.IsSet() &&
+ if ( !mbReadOnly && !autocompleteSignal.empty() &&
maSelection.Min() && (maSelection.Min() == maText.Len()) &&
!rKEvt.GetKeyCode().IsMod1() && !rKEvt.GetKeyCode().IsMod2() )
{
@@ -1697,7 +1697,7 @@ bool Edit::ImplHandleKeyEvent( const KeyEvent& rKEvt )
else
meAutocompleteAction = AUTOCOMPLETE_TABFORWARD;
- maAutocompleteHdl.Call( this );
+ autocompleteSignal( this );
// Wurde nichts veraendert, dann TAB fuer DialogControl
if ( GetSelection().Len() )
@@ -1715,12 +1715,12 @@ bool Edit::ImplHandleKeyEvent( const KeyEvent& rKEvt )
if ( !mbReadOnly )
{
ImplInsertText(OUString(rKEvt.GetCharCode()), 0, true);
- if ( maAutocompleteHdl.IsSet() )
+ if ( !autocompleteSignal.empty() )
{
if ( (maSelection.Min() == maSelection.Max()) && (maSelection.Min() == maText.getLength()) )
{
meAutocompleteAction = AUTOCOMPLETE_KEYINPUT;
- maAutocompleteHdl.Call( this );
+ autocompleteSignal( this );
}
}
}
@@ -2080,12 +2080,12 @@ void Edit::Command( const CommandEvent& rCEvt )
ImplModified();
// #i25161# call auto complete handler for ext text commit also
- if ( maAutocompleteHdl.IsSet() )
+ if ( autocompleteSignal.empty() )
{
if ( (maSelection.Min() == maSelection.Max()) && (maSelection.Min() == maText.getLength()) )
{
meAutocompleteAction = AUTOCOMPLETE_KEYINPUT;
- maAutocompleteHdl.Call( this );
+ autocompleteSignal( this );
}
}
}
@@ -2446,13 +2446,6 @@ void Edit::SetReadOnly( bool bReadOnly )
}
}
-void Edit::SetAutocompleteHdl( const Link& rHdl )
-{
- maAutocompleteHdl = rHdl;
- if ( mpSubEdit )
- mpSubEdit->SetAutocompleteHdl( rHdl );
-}
-
void Edit::SetInsertMode( bool bInsert )
{
if ( bInsert != mbInsertMode )
@@ -2709,6 +2702,7 @@ void Edit::SetSubEdit( Edit* pEdit )
mpSubEdit->mbIsSubEdit = true;
mpSubEdit->SetReadOnly( mbReadOnly );
+ mpSubEdit->autocompleteSignal.connect( autocompleteSignal );
}
}