tdf#170592 Add "Remove query string" checkbox to Hyperlink dialog
Adds a checkbox on the Internet tab page. It strips the entire query string part (from ?...) of URL except the fragment part ( # ) https://en.wikipedia.org/wiki/URL#Syntax Change-Id: I372ae0d1192864071294b35e6277e6513a65450f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199687 Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org> Tested-by: Jenkins
This commit is contained in:
committed by
Heiko Tietze
parent
49daa23d81
commit
ff0d6aec23
@@ -14,6 +14,11 @@
|
||||
#include <sot/exchange.hxx>
|
||||
#include <hlmarkwn_def.hxx>
|
||||
|
||||
namespace
|
||||
{
|
||||
bool bRemoveQueryString = false;
|
||||
}
|
||||
|
||||
OUString HyperlinkInternetTP::CreateAbsoluteURL() const
|
||||
{
|
||||
// erase leading and trailing whitespaces
|
||||
@@ -33,6 +38,7 @@ HyperlinkInternetTP::HyperlinkInternetTP(weld::Container* pParent,
|
||||
: HyperlinkTabPageBase(pParent, pController, u"cui/ui/hyperlinkinternetpage.ui"_ustr,
|
||||
u"HyperlinkInternetPage"_ustr, pSet)
|
||||
, m_xCbbTarget(std::make_unique<SvxHyperURLBox>(m_xBuilder->weld_combo_box(u"target"_ustr)))
|
||||
, m_xCbRemoveQueryString(m_xBuilder->weld_check_button(u"removequerystring"_ustr))
|
||||
{
|
||||
m_xCbbTarget->SetSmartProtocol(GetSmartProtocolFromButtons());
|
||||
|
||||
@@ -41,6 +47,8 @@ HyperlinkInternetTP::HyperlinkInternetTP(weld::Container* pParent,
|
||||
// set handlers
|
||||
m_xCbbTarget->connect_focus_out(LINK(this, HyperlinkInternetTP, LostFocusTargetHdl_Impl));
|
||||
m_xCbbTarget->connect_changed(LINK(this, HyperlinkInternetTP, ModifiedTargetHdl_Impl));
|
||||
m_xCbRemoveQueryString->connect_toggled(
|
||||
LINK(this, HyperlinkInternetTP, ClickRemoveQueryStringHdl_Impl));
|
||||
maTimer.SetInvokeHandler(LINK(this, HyperlinkInternetTP, TimeoutHdl_Impl));
|
||||
}
|
||||
|
||||
@@ -51,6 +59,23 @@ std::unique_ptr<SfxTabPage> HyperlinkInternetTP::Create(weld::Container* pParent
|
||||
return std::make_unique<HyperlinkInternetTP>(pParent, pController, pSet);
|
||||
}
|
||||
|
||||
void HyperlinkInternetTP::RemoveQueryString()
|
||||
{
|
||||
OUString aStrURL(m_xCbbTarget->get_active_text());
|
||||
sal_Int32 nQueryPos = aStrURL.indexOf('?');
|
||||
if (nQueryPos != -1)
|
||||
{
|
||||
// Preserve #fragment if present
|
||||
OUString aFragment;
|
||||
sal_Int32 nFragPos = aStrURL.indexOf('#', nQueryPos);
|
||||
if (nFragPos != -1)
|
||||
aFragment = aStrURL.copy(nFragPos);
|
||||
|
||||
aStrURL = OUString::Concat(aStrURL.subView(0, nQueryPos)) + aFragment;
|
||||
m_xCbbTarget->set_entry_text(aStrURL);
|
||||
}
|
||||
}
|
||||
|
||||
void HyperlinkInternetTP::FillDlgFields(const OUString& rStrURL)
|
||||
{
|
||||
// tdf#146576 - propose clipboard content when inserting a hyperlink
|
||||
@@ -97,6 +122,13 @@ void HyperlinkInternetTP::FillDlgFields(const OUString& rStrURL)
|
||||
m_xCbbTarget->set_entry_text(rStrURL);
|
||||
|
||||
SetScheme(aStrScheme);
|
||||
|
||||
OUString aFinalURL(m_xCbbTarget->get_active_text());
|
||||
bool bHasQuery = aFinalURL.indexOf('?') != -1;
|
||||
m_xCbRemoveQueryString->set_active(bRemoveQueryString);
|
||||
|
||||
if (bRemoveQueryString && bHasQuery)
|
||||
RemoveQueryString();
|
||||
}
|
||||
|
||||
void HyperlinkInternetTP::GetCurrentItemData(OUString& rStrURL, OUString& aStrName,
|
||||
@@ -107,7 +139,11 @@ void HyperlinkInternetTP::GetCurrentItemData(OUString& rStrURL, OUString& aStrNa
|
||||
GetDataFromCommonFields(aStrName, aStrIntName, aStrFrame, eMode);
|
||||
}
|
||||
|
||||
void HyperlinkInternetTP::ClearPageSpecificControls() { m_xCbbTarget->set_entry_text(OUString()); }
|
||||
void HyperlinkInternetTP::ClearPageSpecificControls()
|
||||
{
|
||||
m_xCbbTarget->set_entry_text(OUString());
|
||||
m_xCbRemoveQueryString->set_active(bRemoveQueryString);
|
||||
}
|
||||
|
||||
IMPL_LINK_NOARG(HyperlinkInternetTP, ModifiedTargetHdl_Impl, weld::ComboBox&, void)
|
||||
{
|
||||
@@ -115,6 +151,14 @@ IMPL_LINK_NOARG(HyperlinkInternetTP, ModifiedTargetHdl_Impl, weld::ComboBox&, vo
|
||||
if (!aScheme.isEmpty())
|
||||
SetScheme(aScheme);
|
||||
|
||||
OUString aStrURL(m_xCbbTarget->get_active_text());
|
||||
bool bHasQuery = aStrURL.indexOf('?') != -1;
|
||||
|
||||
if (m_xCbRemoveQueryString->get_active() && bHasQuery)
|
||||
{
|
||||
RemoveQueryString();
|
||||
}
|
||||
|
||||
// start timer
|
||||
maTimer.SetTimeout(2500);
|
||||
maTimer.Start();
|
||||
@@ -122,6 +166,16 @@ IMPL_LINK_NOARG(HyperlinkInternetTP, ModifiedTargetHdl_Impl, weld::ComboBox&, vo
|
||||
|
||||
IMPL_LINK_NOARG(HyperlinkInternetTP, TimeoutHdl_Impl, Timer*, void) { RefreshMarkWindow(); }
|
||||
|
||||
IMPL_LINK_NOARG(HyperlinkInternetTP, ClickRemoveQueryStringHdl_Impl, weld::Toggleable&, void)
|
||||
{
|
||||
bRemoveQueryString = m_xCbRemoveQueryString->get_active();
|
||||
|
||||
if (bRemoveQueryString)
|
||||
{
|
||||
RemoveQueryString();
|
||||
}
|
||||
}
|
||||
|
||||
void HyperlinkInternetTP::SetScheme(std::u16string_view rScheme)
|
||||
{
|
||||
// update target
|
||||
|
||||
@@ -17,13 +17,17 @@ class HyperlinkInternetTP final : public HyperlinkTabPageBase
|
||||
{
|
||||
private:
|
||||
std::unique_ptr<SvxHyperURLBox> m_xCbbTarget;
|
||||
std::unique_ptr<weld::CheckButton> m_xCbRemoveQueryString;
|
||||
|
||||
DECL_LINK(ModifiedTargetHdl_Impl, weld::ComboBox&, void);
|
||||
DECL_LINK(LostFocusTargetHdl_Impl, weld::Widget&, void);
|
||||
DECL_LINK(TimeoutHdl_Impl, Timer*, void);
|
||||
DECL_LINK(ClickRemoveQueryStringHdl_Impl, weld::Toggleable&, void);
|
||||
|
||||
OUString CreateAbsoluteURL() const;
|
||||
|
||||
void RemoveQueryString();
|
||||
|
||||
void SetScheme(std::u16string_view rScheme);
|
||||
void RemoveImproperProtocol(std::u16string_view aProperScheme);
|
||||
static INetProtocol GetSmartProtocolFromButtons();
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<property name="label-xalign">0</property>
|
||||
<property name="shadow-type">none</property>
|
||||
<child>
|
||||
<!-- n-columns=2 n-rows=2 -->
|
||||
<!-- n-columns=2 n-rows=3 -->
|
||||
<object class="GtkGrid" id="grid1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
@@ -95,6 +95,25 @@
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="removequerystring">
|
||||
<property name="label" translatable="yes" context="hyperlinkinternetpage|removequerystring">Remove _query string</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="use-underline">True</property>
|
||||
<property name="draw-indicator">True</property>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="removequerystring-atkobject">
|
||||
<property name="AtkObject::accessible-description" translatable="yes" context="hyperlinkinternetpage|extended_tip|removequerystring">Remove query string (everything after ?) from the URL.</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
|
||||
Reference in New Issue
Block a user