summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-02-11 19:53:55 +0000
committerCaolán McNamara <caolanm@redhat.com>2020-02-12 16:46:49 +0100
commit18dd0254a38ca91d0d325aaecc4227724c035d87 (patch)
treef72d3b271f80b24a8d079812c3c91cc2338c89d6
parent6dd94a4dd8f0b842cd62ec872ede17c8077be98c (diff)
cypress: mobile: Font size combobox is broken on core/master.
a) for vcl version, listen to modify and select, instead of just modify so we can get the artificial select via uiobject that the mobile makes use of. (and disregard the modify which we know will lead to select so we get just one event in that case) b) default to assuming something has been picked "directly" unless we know otherwise. ideally the result is that https://cgit.freedesktop.org/libreoffice/online/commit/?id=08d6c3fdf9bac4ad8318151ab1402690eb950f52 isn't needed Change-Id: Ibbf33eab88dabd55d0c329aa00c8adaf001a4f50 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88476 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--basctl/source/basicide/IDEComboBox.cxx2
-rw-r--r--include/vcl/combobox.hxx13
-rw-r--r--include/vcl/weld.hxx6
-rw-r--r--sfx2/source/inet/inettbc.cxx2
-rw-r--r--svx/source/tbxctrls/tbunocontroller.cxx2
-rw-r--r--sw/source/uibase/ribbar/workctrl.cxx2
-rw-r--r--vcl/source/app/salvtables.cxx17
-rw-r--r--vcl/source/control/combobox.cxx19
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx4
9 files changed, 45 insertions, 22 deletions
diff --git a/basctl/source/basicide/IDEComboBox.cxx b/basctl/source/basicide/IDEComboBox.cxx
index 5279861365d1..b748577e9c63 100644
--- a/basctl/source/basicide/IDEComboBox.cxx
+++ b/basctl/source/basicide/IDEComboBox.cxx
@@ -300,7 +300,7 @@ IMPL_LINK_NOARG(LibBox, FocusOutHdl, weld::Widget&, void)
void LibBox::Select()
{
- if (m_xWidget->changed_by_menu())
+ if (m_xWidget->changed_by_direct_pick())
{
if (!mbIgnoreSelect)
NotifyIDE();
diff --git a/include/vcl/combobox.hxx b/include/vcl/combobox.hxx
index f2f96dca1b37..aae2ce719624 100644
--- a/include/vcl/combobox.hxx
+++ b/include/vcl/combobox.hxx
@@ -152,8 +152,17 @@ public:
void SetNoSelection();
tools::Rectangle GetBoundingRectangle( sal_Int32 nItem ) const;
- // determine if Select was called due to something selected from the menu
- bool IsModifyByMenu() const;
+ // determine if Select was called due to typing or cursoring in the
+ // combobox, as opposed to something selected from the menu or via some
+ // other route. e.g. the toolbar fontsize combobox wants to immediately
+ // change size only if something is picked from the combobox menu, other
+ // changes don't auto-apply until the user presses return
+ bool IsModifyByKeyboard() const;
+
+ // determine if Edit::Modify was called due to the ComboBox changing the edit area
+ // itself
+ bool IsSyntheticModify() const;
+
/** checks whether a certain point lies within the bounds of
a list item and returns the item as well as the character position
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index a98563a9680f..0c9e4af7e893 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -654,12 +654,12 @@ public:
to the user selecting a different item from the list or while typing
into the entry of a combo box with an entry.
- Use changed_by_menu() to discover whether an item was actually selected
- from the menu.
+ Use changed_by_direct_pick() to discover whether an item was actually explicitly
+ selected, e.g. from the menu.
*/
void connect_changed(const Link<ComboBox&, void>& rLink) { m_aChangeHdl = rLink; }
- virtual bool changed_by_menu() const = 0;
+ virtual bool changed_by_direct_pick() const = 0;
virtual void connect_popup_toggled(const Link<ComboBox&, void>& rLink)
{
diff --git a/sfx2/source/inet/inettbc.cxx b/sfx2/source/inet/inettbc.cxx
index ee5adc326ee3..3193100c5f7c 100644
--- a/sfx2/source/inet/inettbc.cxx
+++ b/sfx2/source/inet/inettbc.cxx
@@ -207,7 +207,7 @@ IMPL_LINK(SfxURLToolBoxControl_Impl, SelectHdl, weld::ComboBox&, rComboBox, void
SvtURLBox* pURLBox = GetURLBox();
OUString aName( pURLBox->GetURL() );
- if (rComboBox.changed_by_menu() && !aName.isEmpty())
+ if (rComboBox.changed_by_direct_pick() && !aName.isEmpty())
OpenURL( aName );
}
diff --git a/svx/source/tbxctrls/tbunocontroller.cxx b/svx/source/tbxctrls/tbunocontroller.cxx
index 22e78a397a79..e7a937ed79a9 100644
--- a/svx/source/tbxctrls/tbunocontroller.cxx
+++ b/svx/source/tbxctrls/tbunocontroller.cxx
@@ -175,7 +175,7 @@ void SvxFontSizeBox_Impl::ReleaseFocus_Impl()
IMPL_LINK(SvxFontSizeBox_Impl, SelectHdl, weld::ComboBox&, rCombo, void)
{
- if (rCombo.changed_by_menu()) // only when picked from the list
+ if (rCombo.changed_by_direct_pick()) // only when picked from the list
Select();
}
diff --git a/sw/source/uibase/ribbar/workctrl.cxx b/sw/source/uibase/ribbar/workctrl.cxx
index e60ce29a0c03..0886e3a7ff5c 100644
--- a/sw/source/uibase/ribbar/workctrl.cxx
+++ b/sw/source/uibase/ribbar/workctrl.cxx
@@ -616,7 +616,7 @@ SwZoomBox_Impl::SwZoomBox_Impl(vcl::Window* pParent, sal_uInt16 nSlot)
IMPL_LINK(SwZoomBox_Impl, SelectHdl, weld::ComboBox&, rComboBox, void)
{
- if (rComboBox.changed_by_menu()) // only when picked from the list
+ if (rComboBox.changed_by_direct_pick()) // only when picked from the list
Select();
}
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 942aa3e9d928..f77d986eb0d5 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -6166,7 +6166,7 @@ public:
return false;
}
- virtual bool changed_by_menu() const override
+ virtual bool changed_by_direct_pick() const override
{
return true;
}
@@ -6227,6 +6227,7 @@ class SalInstanceComboBoxWithEdit : public SalInstanceComboBox<ComboBox>
private:
DECL_LINK(ChangeHdl, Edit&, void);
DECL_LINK(EntryActivateHdl, Edit&, bool);
+ DECL_LINK(SelectHdl, ::ComboBox&, void);
WeldTextFilter m_aTextFilter;
public:
SalInstanceComboBoxWithEdit(::ComboBox* pComboBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
@@ -6234,6 +6235,7 @@ public:
, m_aTextFilter(m_aEntryInsertTextHdl)
{
m_xComboBox->SetModifyHdl(LINK(this, SalInstanceComboBoxWithEdit, ChangeHdl));
+ m_xComboBox->SetSelectHdl(LINK(this, SalInstanceComboBoxWithEdit, SelectHdl));
m_xComboBox->SetEntryActivateHdl(LINK(this, SalInstanceComboBoxWithEdit, EntryActivateHdl));
m_xComboBox->SetTextFilter(&m_aTextFilter);
}
@@ -6243,9 +6245,9 @@ public:
return true;
}
- virtual bool changed_by_menu() const override
+ virtual bool changed_by_direct_pick() const override
{
- return m_xComboBox->IsModifyByMenu(); // && !m_xComboBox->IsTravelSelect();
+ return !m_xComboBox->IsModifyByKeyboard();
}
virtual void set_entry_message_type(weld::EntryMessageType eType) override
@@ -6329,6 +6331,7 @@ public:
m_xComboBox->SetTextFilter(nullptr);
m_xComboBox->SetEntryActivateHdl(Link<Edit&, bool>());
m_xComboBox->SetModifyHdl(Link<Edit&, void>());
+ m_xComboBox->SetSelectHdl(Link<::ComboBox&, void>());
}
};
@@ -6336,6 +6339,12 @@ public:
IMPL_LINK_NOARG(SalInstanceComboBoxWithEdit, ChangeHdl, Edit&, void)
{
+ if (!m_xComboBox->IsSyntheticModify()) // SelectHdl will be called
+ signal_changed();
+}
+
+IMPL_LINK_NOARG(SalInstanceComboBoxWithEdit, SelectHdl, ::ComboBox&, void)
+{
signal_changed();
}
@@ -6398,7 +6407,7 @@ public:
m_xEntry->connect_focus_out(rLink);
}
- virtual bool changed_by_menu() const override
+ virtual bool changed_by_direct_pick() const override
{
return m_bTreeChange;
}
diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx
index c42ef08e8e38..03b44f36e880 100644
--- a/vcl/source/control/combobox.cxx
+++ b/vcl/source/control/combobox.cxx
@@ -57,7 +57,7 @@ struct ComboBox::Impl
sal_Unicode m_cMultiSep;
bool m_isDDAutoSize : 1;
bool m_isSyntheticModify : 1;
- bool m_isMenuModify : 1;
+ bool m_isKeyBoardModify : 1;
bool m_isMatchCase : 1;
sal_Int32 m_nMaxWidthChars;
sal_Int32 m_nWidthInChars;
@@ -70,7 +70,7 @@ struct ComboBox::Impl
, m_cMultiSep(0)
, m_isDDAutoSize(false)
, m_isSyntheticModify(false)
- , m_isMenuModify(false)
+ , m_isKeyBoardModify(false)
, m_isMatchCase(false)
, m_nMaxWidthChars(0)
, m_nWidthInChars(-1)
@@ -144,7 +144,7 @@ void ComboBox::Impl::ImplInitComboBoxData()
m_nDDHeight = 0;
m_isDDAutoSize = true;
m_isSyntheticModify = false;
- m_isMenuModify = false;
+ m_isKeyBoardModify = false;
m_isMatchCase = false;
m_cMultiSep = ';';
m_nMaxWidthChars = -1;
@@ -434,19 +434,24 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, LinkParamNone*, void)
if ( bCallSelect )
{
+ m_isKeyBoardModify = !bMenuSelect;
m_pSubEdit->SetModifyFlag();
m_isSyntheticModify = true;
- m_isMenuModify = bMenuSelect;
m_rThis.Modify();
- m_isMenuModify = false;
m_isSyntheticModify = false;
m_rThis.Select();
+ m_isKeyBoardModify = false;
}
}
-bool ComboBox::IsModifyByMenu() const
+bool ComboBox::IsSyntheticModify() const
{
- return m_pImpl->m_isMenuModify;
+ return m_pImpl->m_isSyntheticModify;
+}
+
+bool ComboBox::IsModifyByKeyboard() const
+{
+ return m_pImpl->m_isKeyBoardModify;
}
IMPL_LINK_NOARG( ComboBox::Impl, ImplListItemSelectHdl, LinkParamNone*, void )
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 342658c0de74..177dfc7c5674 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -12645,7 +12645,7 @@ public:
return gtk_widget_has_focus(m_pToggleButton) || GtkInstanceWidget::has_focus();
}
- virtual bool changed_by_menu() const override
+ virtual bool changed_by_direct_pick() const override
{
return m_bChangedByMenu;
}
@@ -12870,7 +12870,7 @@ public:
GtkInstanceContainer::disable_notify_events();
}
- virtual bool changed_by_menu() const override
+ virtual bool changed_by_direct_pick() const override
{
return m_bTreeChange;
}