helpcontent2 | 2 sw/Library_swui.mk | 1 sw/UIConfig_swriter.mk | 1 sw/inc/cmdid.h | 1 sw/inc/swabstdlg.hxx | 13 ++ sw/sdi/_textsh.sdi | 5 sw/sdi/swriter.sdi | 18 +++ sw/source/ui/dialog/swdlgfact.cxx | 17 +++ sw/source/ui/dialog/swdlgfact.hxx | 3 sw/source/ui/utlui/copyfielddlg.cxx | 58 +++++++++++ sw/source/uibase/docvw/romenu.cxx | 6 - sw/source/uibase/docvw/romenu.hxx | 1 sw/source/uibase/inc/copyfielddlg.hxx | 37 +++++++ sw/source/uibase/shells/textfld.cxx | 32 +++++- sw/uiconfig/swriter/ui/copyfielddialog.ui | 157 ++++++++++++++++++++++++++++++ sw/uiconfig/swriter/ui/readonlymenu.ui | 14 ++ 16 files changed, 363 insertions(+), 3 deletions(-)
New commits: commit 1c3ffcb60d55c2c2ac92bf998c98732f5d982fc2 Author: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de> AuthorDate: Fri Jan 24 15:37:41 2025 +0100 Commit: Gerrit Code Review <ger...@gerrit.libreoffice.org> CommitDate: Fri Jan 24 15:37:41 2025 +0100 Update git submodules * Update helpcontent2 from branch 'master' to b3d44a635cf6f1dde13883262a259c0d73e020a0 - tdf#164318 Add help page for the new Copy Field Content dialog Change-Id: I3ea5b64ce58bcf934c3f80b2b45904bfb624f2b2 Reviewed-on: https://gerrit.libreoffice.org/c/help/+/180419 Reviewed-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de> Tested-by: Jenkins diff --git a/helpcontent2 b/helpcontent2 index 5eeb4854797b..b3d44a635cf6 160000 --- a/helpcontent2 +++ b/helpcontent2 @@ -1 +1 @@ -Subproject commit 5eeb4854797b00302a1f78e439ec63c78e3f559c +Subproject commit b3d44a635cf6f1dde13883262a259c0d73e020a0 commit a45428d4bdf733718bad2d87412eb0932c90d27e Author: Oliver Specht <oliver.spe...@cib.de> AuthorDate: Wed Jan 8 14:20:43 2025 +0100 Commit: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de> CommitDate: Fri Jan 24 15:37:29 2025 +0100 tdf#164318 Add dialog to show content of fields in readonly documents Change-Id: I0036e8c02b57dab91361213489c5a6189149b553 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/179953 Tested-by: Jenkins Reviewed-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de> diff --git a/sw/Library_swui.mk b/sw/Library_swui.mk index 2c6d8512fe44..cf025735337e 100644 --- a/sw/Library_swui.mk +++ b/sw/Library_swui.mk @@ -168,6 +168,7 @@ $(eval $(call gb_Library_add_exception_objects,swui,\ sw/source/ui/table/tabledlg \ sw/source/ui/table/tautofmt \ sw/source/ui/utlui/swrenamexnameddlg \ + sw/source/ui/utlui/copyfielddlg \ )) ifneq (,$(filter DBCONNECTIVITY,$(BUILD_TYPE))) diff --git a/sw/UIConfig_swriter.mk b/sw/UIConfig_swriter.mk index d9df23bf27a4..6bc32a541106 100644 --- a/sw/UIConfig_swriter.mk +++ b/sw/UIConfig_swriter.mk @@ -138,6 +138,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/swriter,\ sw/uiconfig/swriter/ui/contentcontroldropdown \ sw/uiconfig/swriter/ui/contentcontrollistitemdlg \ sw/uiconfig/swriter/ui/converttexttable \ + sw/uiconfig/swriter/ui/copyfielddialog \ sw/uiconfig/swriter/ui/createaddresslist \ sw/uiconfig/swriter/ui/createauthorentry \ sw/uiconfig/swriter/ui/createautomarkdialog \ diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h index f50754b6e274..340e57c8f5b4 100644 --- a/sw/inc/cmdid.h +++ b/sw/inc/cmdid.h @@ -152,6 +152,7 @@ class SwUINumRuleItem; #define FN_REDLINE_ACCEPT_TONEXT (FN_EDIT2 + 45) /* Redlining Accept and jump to next*/ #define FN_REDLINE_REJECT_TONEXT (FN_EDIT2 + 46) /* Redlining Reject and jump to next*/ #define FN_TRANSFORM_DOCUMENT_STRUCTURE (FN_EDIT2 + 47) /* overwrite text of content control, and more*/ +#define FN_COPY_FIELD (FN_EDIT2 + 48) /* show field content in readonly documents to copy content*/ // Region: View #define FN_DRAW_WRAP_DLG TypedWhichId<SfxInt16Item>(FN_VIEW + 3) /* Draw wrapping dlg */ diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx index 229b2fdc042d..59768a69aa55 100644 --- a/sw/inc/swabstdlg.hxx +++ b/sw/inc/swabstdlg.hxx @@ -366,6 +366,16 @@ public: css::uno::Reference< css::container::XNameAccess > & xThird ) = 0; }; +/** + * Interface for copy field value dialog in read only documents. It's implemented by + * AbstractCopyFieldDlg_Impl + */ +class AbstractCopyFieldDlg : public VclAbstractDialog +{ +protected: + virtual ~AbstractCopyFieldDlg() override = default; +}; + /** * Interface for e.g. the form -> content control -> properties -> add dialog. It's implemented by * AbstractSwContentControlListItemDlg_Impl, but SwContentControlDlg only knows about this interface @@ -547,6 +557,9 @@ public: virtual VclPtr<AbstractSwRenameXNamedDlg> CreateSwRenameXNamedDlg(weld::Widget* pParent, css::uno::Reference< css::container::XNamed > & xNamed, css::uno::Reference< css::container::XNameAccess > & xNameAccess) = 0; + + virtual VclPtr<AbstractCopyFieldDlg> CreateCopyFieldDlg(weld::Widget* pParent, const rtl::OUString& rFieldValue ) = 0; + virtual VclPtr<AbstractSwModalRedlineAcceptDlg> CreateSwModalRedlineAcceptDlg(weld::Window *pParent) = 0; virtual VclPtr<AbstractSwPageNumberDlg> CreateSwPageNumberDlg(weld::Window* pParent) = 0; diff --git a/sw/sdi/_textsh.sdi b/sw/sdi/_textsh.sdi index 612f3d1955a9..a0f257d916a3 100644 --- a/sw/sdi/_textsh.sdi +++ b/sw/sdi/_textsh.sdi @@ -1027,6 +1027,11 @@ interface BaseText StateMethod = StateField ; DisableFlags="SfxDisableFlags::SwOnProtectedCursor"; ] + FN_COPY_FIELD // status() + [ + ExecMethod = ExecField; + StateMethod = StateField; + ] FN_UPDATE_SEL_FIELD [ ExecMethod = ExecField ; diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi index bba5111a7077..dd7c1668d8b3 100644 --- a/sw/sdi/swriter.sdi +++ b/sw/sdi/swriter.sdi @@ -8856,3 +8856,21 @@ SfxVoidItem OutlineLevelsShown FN_OUTLINE_LEVELS_SHOWN ToolBoxConfig = TRUE, GroupId = SfxGroupId::View; ] + +SfxVoidItem CopyFieldDialog FN_COPY_FIELD +() +[ + AutoUpdate = TRUE, + FastCall = FALSE, + ReadOnlyDoc = TRUE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Asynchron; + + AccelConfig = FALSE, + MenuConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = SfxGroupId::Edit; +] diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx index 343dd34850dc..ea4e0ffa3daa 100644 --- a/sw/source/ui/dialog/swdlgfact.cxx +++ b/sw/source/ui/dialog/swdlgfact.cxx @@ -93,6 +93,7 @@ #include <mmresultdialogs.hxx> #include <formatlinebreak.hxx> #include <translatelangselect.hxx> +#include <copyfielddlg.hxx> using namespace css::frame; using namespace css::uno; @@ -759,6 +760,22 @@ VclPtr<AbstractSwModalRedlineAcceptDlg> SwAbstractDialogFactory_Impl::CreateSwMo return VclPtr<AbstractSwModalRedlineAcceptDlg_Impl>::Create(pParent); } +namespace +{ +class AbstractCopyFieldDlg_Impl + : public vcl::AbstractDialogImpl_Async<AbstractCopyFieldDlg, CopyFieldDlg> +{ +public: + using AbstractDialogImpl_BASE::AbstractDialogImpl_BASE; +}; +} + +VclPtr<AbstractCopyFieldDlg> SwAbstractDialogFactory_Impl::CreateCopyFieldDlg(weld::Widget* pParent, + const rtl::OUString& rFieldValue) +{ + return VclPtr<AbstractCopyFieldDlg_Impl>::Create(pParent, rFieldValue); +} + namespace { /// Interface implementation for the insert -> fields -> page number wizard dialog diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx index f33460a21840..60879d516887 100644 --- a/sw/source/ui/dialog/swdlgfact.hxx +++ b/sw/source/ui/dialog/swdlgfact.hxx @@ -58,6 +58,7 @@ #include <o3tl/deleter.hxx> #include <pagenumberdlg.hxx> #include <changedb.hxx> +#include <copyfielddlg.hxx> //AbstractDialogFactory_Impl implementations class SwAbstractDialogFactory_Impl : public SwAbstractDialogFactory @@ -200,6 +201,8 @@ public: virtual GlossaryGetCurrGroup GetGlossaryCurrGroupFunc() override; virtual GlossarySetActGroup SetGlossaryActGroupFunc() override; + virtual VclPtr<AbstractCopyFieldDlg> CreateCopyFieldDlg(weld::Widget* pParent, const rtl::OUString& rFieldValue ) override; + // For TabPage virtual CreateTabPage GetTabPageCreatorFunc( sal_uInt16 nId ) override; diff --git a/sw/source/ui/utlui/copyfielddlg.cxx b/sw/source/ui/utlui/copyfielddlg.cxx new file mode 100644 index 000000000000..6625f581e451 --- /dev/null +++ b/sw/source/ui/utlui/copyfielddlg.cxx @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <copyfielddlg.hxx> +#include <comphelper/string.hxx> + +using namespace ::com::sun::star; + +CopyFieldDlg::CopyFieldDlg(weld::Widget* pParent, const rtl::OUString& rFieldValue) + : GenericDialogController(pParent, u"modules/swriter/ui/copyfielddialog.ui"_ustr, + u"CopyFieldDialog"_ustr) + , m_xFieldValueED(new ConditionEdit<weld::TextView>(m_xBuilder->weld_text_view(u"value"_ustr))) + , m_xCopy(m_xBuilder->weld_button(u"copy"_ustr)) + , m_xClose(m_xBuilder->weld_button(u"cancel"_ustr)) +{ + m_xClose->connect_clicked(LINK(this, CopyFieldDlg, CloseHdl)); + m_xCopy->connect_clicked(LINK(this, CopyFieldDlg, CopyHdl)); + + m_xFieldValueED->set_text(rFieldValue); + sal_Int32 nRows{ comphelper::string::getTokenCount(rFieldValue, ' ') }; + + m_xFieldValueED->get_widget().set_size_request( + m_xFieldValueED->get_widget().get_preferred_size().Width() * 2, + m_xFieldValueED->get_widget().get_height_rows(std::min<sal_Int32>(nRows + 1, 6))); +} + +IMPL_LINK_NOARG(CopyFieldDlg, CloseHdl, weld::Button&, void) { m_xDialog->response(RET_OK); } + +IMPL_LINK_NOARG(CopyFieldDlg, CopyHdl, weld::Button&, void) +{ + int nStartPos; + int nEndPos; + m_xFieldValueED->get_widget().get_selection_bounds(nStartPos, nEndPos); + if (nStartPos == nEndPos) + m_xFieldValueED->get_widget().select_region(0, -1); + + m_xFieldValueED->get_widget().copy_clipboard(); + if (nStartPos == nEndPos) + m_xFieldValueED->get_widget().select_region(0, 0); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/docvw/romenu.cxx b/sw/source/uibase/docvw/romenu.cxx index ae59afcc1abc..c5b0eb271569 100644 --- a/sw/source/uibase/docvw/romenu.cxx +++ b/sw/source/uibase/docvw/romenu.cxx @@ -96,6 +96,7 @@ SwReadOnlyPopup::SwReadOnlyPopup(const Point &rDPos, SwView &rV) , m_nReadonlyLoadGraphic(m_xMenu->GetItemId(u"loadgraphic")) , m_nReadonlyGraphicoff(m_xMenu->GetItemId(u"imagesoff")) , m_nReadonlyFullscreen(m_xMenu->GetItemId(u"fullscreen")) + , m_nReadonlyCopyField(m_xMenu->GetItemId(u"copyfield")) , m_nReadonlyCopy(m_xMenu->GetItemId(u"copy")) , m_rView(rV) , m_xBrushItem(std::make_unique<SvxBrushItem>(RES_BACKGROUND)) @@ -213,7 +214,8 @@ SwReadOnlyPopup::SwReadOnlyPopup(const Point &rDPos, SwView &rV) m_xMenu->EnableItem(m_nReadonlyCopylink, false); } Check(m_nReadonlyFullscreen, SID_WIN_FULLSCREEN, rDis); - + eState = rVFrame.GetBindings().QueryState(FN_COPY_FIELD, pState); + m_xMenu->EnableItem(m_nReadonlyCopyField, eState > SfxItemState::DISABLED); m_xMenu->RemoveDisabledEntries( true ); } @@ -284,6 +286,8 @@ void SwReadOnlyPopup::Execute( vcl::Window* pWin, sal_uInt16 nId ) nExecId = SID_BROWSE_FORWARD; else if (nId == m_nReadonlySourceview) nExecId = SID_SOURCEVIEW; + else if (nId == m_nReadonlyCopyField) + nExecId = FN_COPY_FIELD; else if (nId == m_nReadonlySaveGraphic || nId == m_nReadonlySaveBackground) SaveGraphic(nId); else if (nId == m_nReadonlyCopylink) diff --git a/sw/source/uibase/docvw/romenu.hxx b/sw/source/uibase/docvw/romenu.hxx index 1af58d3dee6d..fed747f33d18 100644 --- a/sw/source/uibase/docvw/romenu.hxx +++ b/sw/source/uibase/docvw/romenu.hxx @@ -55,6 +55,7 @@ class SwReadOnlyPopup sal_uInt16 m_nReadonlyLoadGraphic; sal_uInt16 m_nReadonlyGraphicoff; sal_uInt16 m_nReadonlyFullscreen; + sal_uInt16 m_nReadonlyCopyField; sal_uInt16 m_nReadonlyCopy; SwView & m_rView; diff --git a/sw/source/uibase/inc/copyfielddlg.hxx b/sw/source/uibase/inc/copyfielddlg.hxx new file mode 100644 index 000000000000..d255930e8ea8 --- /dev/null +++ b/sw/source/uibase/inc/copyfielddlg.hxx @@ -0,0 +1,37 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include <vcl/weld.hxx> +#include <condedit.hxx> + +class CopyFieldDlg final : public weld::GenericDialogController +{ + std::unique_ptr<ConditionEdit<weld::TextView>> m_xFieldValueED; + std::unique_ptr<weld::Button> m_xCopy; + std::unique_ptr<weld::Button> m_xClose; + + DECL_LINK(CloseHdl, weld::Button&, void); + DECL_LINK(CopyHdl, weld::Button&, void); + +public: + CopyFieldDlg(weld::Widget* pParent, const rtl::OUString& rFieldValue); +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/shells/textfld.cxx b/sw/source/uibase/shells/textfld.cxx index 42fd111f2684..ea69fe7e8064 100644 --- a/sw/source/uibase/shells/textfld.cxx +++ b/sw/source/uibase/shells/textfld.cxx @@ -201,6 +201,24 @@ void SwTextShell::ExecField(SfxRequest &rReq) } break; } + case FN_COPY_FIELD: + { + //call copy field dialog with field string - if there is any! + SwField* pField = rSh.GetCurField(true); + if( pField && pField->GetFieldName().getLength()) + { + SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); + VclPtr<AbstractCopyFieldDlg> pDlg(pFact->CreateCopyFieldDlg( + GetView().GetFrameWeld(), pField->ExpandField(true, nullptr))); + pDlg->StartExecuteAsync( + [pDlg] (sal_Int32 /*nResult*/)->void + { + pDlg->disposeOnce(); + } + ); + } + break; + } case FN_UPDATE_SEL_FIELD: { SwField *pField = rSh.GetCurField(); @@ -1594,7 +1612,19 @@ void SwTextShell::StateField( SfxItemSet &rSet ) } } break; - + case FN_COPY_FIELD: + { + if( !bGetField ) + { + pField = rSh.GetCurField(true); + bGetField = true; + } + SwFieldIds nTempWhich = pField ? pField->GetTyp()->Which() : SwFieldIds::Unknown; + if (SwFieldIds::Unknown == nTempWhich + || !pField->ExpandField(true, nullptr).getLength()) + rSet.DisableItem( nWhich ); + } + break; case FN_UPDATE_SEL_FIELD: { pField = rSh.GetCurField(); diff --git a/sw/uiconfig/swriter/ui/copyfielddialog.ui b/sw/uiconfig/swriter/ui/copyfielddialog.ui new file mode 100644 index 000000000000..90d33e601b1c --- /dev/null +++ b/sw/uiconfig/swriter/ui/copyfielddialog.ui @@ -0,0 +1,157 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.40.0 --> +<interface domain="sw"> + <requires lib="gtk+" version="3.20"/> + <object class="GtkDialog" id="CopyFieldDialog"> + <property name="can-focus">False</property> + <property name="border-width">6</property> + <property name="title" translatable="yes" context="copyfielddialog|CopyFieldDialog">Copy field content</property> + <property name="modal">True</property> + <property name="default-width">0</property> + <property name="default-height">0</property> + <property name="type-hint">dialog</property> + <child internal-child="vbox"> + <object class="GtkBox" id="dialog-vbox1"> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">12</property> + <child internal-child="action_area"> + <object class="GtkButtonBox" id="dialog-action_area1"> + <property name="can-focus">False</property> + <property name="layout-style">end</property> + <child> + <object class="GtkButton" id="cancel"> + <property name="label" translatable="yes" context="stock">_Cancel</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="use-underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="help"> + <property name="label" translatable="yes" context="stock">_Help</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="use-underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + <property name="secondary">True</property> + </packing> + </child> + <child> + <object class="GtkButton" id="copy"> + <property name="label" translatable="yes" context="stock">_Copy</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="use-underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack-type">end</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame1"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="label-xalign">0</property> + <property name="shadow-type">none</property> + <child> + <!-- n-columns=2 n-rows=1 --> + <object class="GtkGrid" id="grid1"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">12</property> + <property name="margin-top">6</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="row-spacing">6</property> + <property name="column-spacing">12</property> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="copyfielddialog|label2">Content: </property> + <property name="use-underline">True</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left-attach">0</property> + <property name="top-attach">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="shadow-type">in</property> + <child> + <object class="GtkTextView" id="value"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <child internal-child="accessible"> + <object class="AtkObject" id="value-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="copyfielddialog|extended_tip|value">Copy the contents of the field for reuse in other documents.</property> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">0</property> + </packing> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="copyfielddialog|label1">Field content</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-6">cancel</action-widget> + <action-widget response="-11">help</action-widget> + </action-widgets> + </object> +</interface> diff --git a/sw/uiconfig/swriter/ui/readonlymenu.ui b/sw/uiconfig/swriter/ui/readonlymenu.ui index 96ffe24346c2..0f94bea34d51 100644 --- a/sw/uiconfig/swriter/ui/readonlymenu.ui +++ b/sw/uiconfig/swriter/ui/readonlymenu.ui @@ -225,6 +225,20 @@ <property name="use-underline">True</property> </object> </child> + <child> + <object class="GtkSeparatorMenuItem" id="menuitem9"> + <property name="visible">True</property> + <property name="can-focus">False</property> + </object> + </child> + <child> + <object class="GtkMenuItem" id="copyfield"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="readonlymenu|copyfield">Copy _Field Contents...</property> + <property name="use-underline">True</property> + </object> + </child> <child> <object class="GtkSeparatorMenuItem" id="menuitem7"> <property name="visible">True</property>