sw/Library_swui.mk                        |    1 
 sw/UIConfig_swriter.mk                    |    1 
 sw/inc/cmdid.h                            |    2 
 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         |   15 ++
 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 ++
 15 files changed, 375 insertions(+), 2 deletions(-)

New commits:
commit d36dc8169e0d32d42c6f7cf1a84d161310f3c4e7
Author:     Oliver Specht <oliver.spe...@cib.de>
AuthorDate: Wed Jan 8 14:20:43 2025 +0100
Commit:     Thorsten Behrens <thorsten.behr...@allotropia.de>
CommitDate: Mon Feb 3 20:19:40 2025 +0100

    Add dialog to show content of fields in readonly documents
    
    Change-Id: I0036e8c02b57dab91361213489c5a6189149b553
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180351
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>
    Tested-by: allotropia jenkins <jenk...@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 27b7248d74e5..21fe88323a4a 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 5fc521d3eddf..6f5ea775dfa0 100644
--- a/sw/inc/cmdid.h
+++ b/sw/inc/cmdid.h
@@ -152,6 +152,8 @@ 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_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 */
 #define FN_RULER                (FN_VIEW + 11)  /* Horizontal ruler */
diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx
index 1d205f18624f..2426e5f25e16 100644
--- a/sw/inc/swabstdlg.hxx
+++ b/sw/inc/swabstdlg.hxx
@@ -367,6 +367,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
@@ -548,6 +558,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<VclAbstractDialog> 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 810932876bee..9c30229795a4 100644
--- a/sw/sdi/_textsh.sdi
+++ b/sw/sdi/_textsh.sdi
@@ -1023,6 +1023,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 deee2b2ee0ae..d6e0e703fb8b 100644
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -8740,3 +8740,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 42a46be6858f..d7ef3643318d 100644
--- a/sw/source/ui/dialog/swdlgfact.cxx
+++ b/sw/source/ui/dialog/swdlgfact.cxx
@@ -92,6 +92,7 @@
 #include <mmresultdialogs.hxx>
 #include <formatlinebreak.hxx>
 #include <translatelangselect.hxx>
+#include <copyfielddlg.hxx>
 
 using namespace ::com::sun::star;
 using namespace css::frame;
@@ -1005,6 +1006,16 @@ std::optional<SwLanguageListItem> 
AbstractSwTranslateLangSelectDlg_Impl::GetSele
 #endif
 }
 
+short AbstractCopyFieldDlg_Impl::Execute()
+{
+    return m_xDlg->run();
+}
+
+bool AbstractCopyFieldDlg_Impl::StartExecuteAsync(AsyncContext &rCtx)
+{
+    return weld::GenericDialogController::runAsync(m_xDlg, rCtx.maEndDialogFn);
+}
+
 short AbstractChangeDbDialog_Impl::Execute()
 {
     assert(false);
@@ -1260,6 +1271,12 @@ VclPtr<AbstractSwModalRedlineAcceptDlg> 
SwAbstractDialogFactory_Impl::CreateSwMo
     return 
VclPtr<AbstractSwModalRedlineAcceptDlg_Impl>::Create(std::make_unique<SwModalRedlineAcceptDlg>(pParent));
 }
 
+VclPtr<VclAbstractDialog> 
SwAbstractDialogFactory_Impl::CreateCopyFieldDlg(weld::Widget* pParent,
+    const rtl::OUString& rFieldValue)
+{
+    return 
VclPtr<AbstractCopyFieldDlg_Impl>::Create(std::make_unique<CopyFieldDlg>(pParent,
 rFieldValue));
+}
+
 VclPtr<AbstractSwPageNumberDlg> 
SwAbstractDialogFactory_Impl::CreateSwPageNumberDlg(weld::Window *pParent)
 {
     return 
VclPtr<AbstractSwPageNumberDlg_Impl>::Create(std::make_shared<SwPageNumberDlg>(pParent));
diff --git a/sw/source/ui/dialog/swdlgfact.hxx 
b/sw/source/ui/dialog/swdlgfact.hxx
index ae11902beedc..a7240fe862b8 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>
 
 
 class SwInsertAbstractDlg;
@@ -766,6 +767,18 @@ public:
 };
 
 
+class AbstractCopyFieldDlg_Impl : public VclAbstractDialog
+{
+    std::shared_ptr<CopyFieldDlg> m_xDlg;
+public:
+    explicit AbstractCopyFieldDlg_Impl(std::shared_ptr<CopyFieldDlg> p)
+        : m_xDlg(std::move(p))
+    {
+    }
+    virtual short Execute() override;
+    virtual bool StartExecuteAsync(AsyncContext &rCtx) override;
+};
+
 //AbstractDialogFactory_Impl implementations
 class SwAbstractDialogFactory_Impl : public SwAbstractDialogFactory
 {
@@ -907,6 +920,8 @@ public:
     virtual GlossaryGetCurrGroup        GetGlossaryCurrGroupFunc() override;
     virtual GlossarySetActGroup         SetGlossaryActGroupFunc() override;
 
+    virtual VclPtr<VclAbstractDialog> 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 fb8d20d0e525..e401db04bc50 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 187129190133..1b07a0708693 100644
--- a/sw/source/uibase/shells/textfld.cxx
+++ b/sw/source/uibase/shells/textfld.cxx
@@ -178,6 +178,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<VclAbstractDialog> 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();
@@ -1504,7 +1522,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..f98d5c7b895a
--- /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">Enter the 
contents to add to a user-defined field.</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 0c83d8a7616e..d81b0150786e 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</property>
+        <property name="use-underline">True</property>
+      </object>
+    </child>
     <child>
       <object class="GtkSeparatorMenuItem" id="menuitem7">
         <property name="visible">True</property>

Reply via email to