tdf#141026 Put user and computer name into collapsed section
This patch hides away the file name and the name of the user when the user tries to open a locked file. This improves privacy, as discussed in the bug report. The .ui file for the new dialog box is `vcl/uiconfig/ui/openlockedquerybox.ui`. The source files `openlocked.hxx` and `openlocked.cxx` have been changed to implement the new dialog. The old string template `STR_OPENLOCKED_MSG` has been deleted to hide away the private data, and a new string template `STR_OPENLOCKED_HIDDEN_DATA` has been added; the latter will be hidden inside the expander dialog. Finally, corresponding changes in the makefiles have been made to let the makefiles know about the UI file. Change-Id: I3cc9d2f6e2d9bc43857c80662e2a405aacd7fc70 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132342 Tested-by: Jenkins Reviewed-by: Hossein <hossein@libreoffice.org>
This commit is contained in:
parent
df0d25d440
commit
ff9ff6018b
7 changed files with 354 additions and 34 deletions
|
@ -1076,6 +1076,7 @@ gb_emscripten_fs_image_files := \
|
|||
$(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/vcl/ui/menutogglebutton3.ui \
|
||||
$(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/vcl/ui/menutogglebutton4.ui \
|
||||
$(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/vcl/ui/printdialog.ui \
|
||||
$(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/vcl/ui/openlockedquerybox.ui \
|
||||
$(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/vcl/ui/printerdevicepage.ui \
|
||||
$(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/vcl/ui/printerpaperpage.ui \
|
||||
$(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/vcl/ui/printerpropertiesdialog.ui \
|
||||
|
|
|
@ -47,12 +47,7 @@
|
|||
#define STR_LOCKFAILED_OPENREADONLY_BTN NC_("STR_LOCKFAILED_OPENREADONLY_BTN", "Open ~Read-Only")
|
||||
#define STR_LOCKFAILED_OPENREADONLY_NOTIFY_BTN NC_("STR_LOCKFAILED_OPENREADONLY_NOTIFY_BTN", "~Notify")
|
||||
|
||||
#define STR_OPENLOCKED_TITLE NC_("STR_OPENLOCKED_TITLE", "Document in Use")
|
||||
#define STR_OPENLOCKED_MSG NC_("STR_OPENLOCKED_MSG", "Document file '$(ARG1)' is locked for editing by:\n\n$(ARG2)\n\nOpen document read-only or open a copy of the document for editing.\nSelect Notify to open read-only and get notified when the document becomes editable.$(ARG3)")
|
||||
#define STR_OPENLOCKED_ALLOWIGNORE_MSG NC_("STR_OPENLOCKED_ALLOWIGNORE_MSG", "\nYou may also ignore the file locking and open the document for editing.")
|
||||
#define STR_OPENLOCKED_OPENREADONLY_BTN NC_("STR_OPENLOCKED_OPENREADONLY_BTN", "Open ~Read-Only")
|
||||
#define STR_OPENLOCKED_OPENREADONLY_NOTIFY_BTN NC_("STR_OPENLOCKED_OPENREADONLY_NOTIFY_BTN", "~Notify")
|
||||
#define STR_OPENLOCKED_OPENCOPY_BTN NC_("STR_OPENLOCKED_OPENCOPY_BTN", "Open ~Copy")
|
||||
#define STR_OPENLOCKED_HIDDEN_DATA NC_("STR_OPENLOCKED_HIDDEN_DATA", "Document Name: $(ARG1)\nUser Name: $(ARG2)")
|
||||
#define STR_UNKNOWNUSER NC_("STR_UNKNOWNUSER", "Unknown User")
|
||||
|
||||
#define STR_FILECHANGED_TITLE NC_("STR_FILECHANGED_TITLE", "Document Has Been Changed by Others")
|
||||
|
|
|
@ -107,6 +107,7 @@ handleLockedDocumentRequest_(
|
|||
std::locale aResLocale = Translate::Create("uui");
|
||||
|
||||
OUString aMessage;
|
||||
OUString aHiddenData;
|
||||
std::vector< OUString > aArguments { aDocumentURL };
|
||||
|
||||
bool bAllowOverride = xRetry.is() && officecfg::Office::Common::Misc::AllowOverrideLocking::get();
|
||||
|
@ -117,14 +118,12 @@ handleLockedDocumentRequest_(
|
|||
aArguments.push_back( !aInfo.isEmpty()
|
||||
? aInfo
|
||||
: Translate::get( STR_UNKNOWNUSER, aResLocale) );
|
||||
aArguments.push_back( bAllowOverride
|
||||
? Translate::get( STR_OPENLOCKED_ALLOWIGNORE_MSG, aResLocale )
|
||||
: "" );
|
||||
aMessage = Translate::get(STR_OPENLOCKED_MSG, aResLocale);
|
||||
aMessage = UUIInteractionHelper::replaceMessageWithArguments(
|
||||
aMessage, aArguments );
|
||||
|
||||
OpenLockedQueryBox aDialog(pParent, aResLocale, aMessage, bAllowOverride);
|
||||
aHiddenData = Translate::get(STR_OPENLOCKED_HIDDEN_DATA, aResLocale);
|
||||
aHiddenData = UUIInteractionHelper::replaceMessageWithArguments(
|
||||
aHiddenData, aArguments );
|
||||
|
||||
vcl::OpenLockedQueryBox aDialog(pParent, aHiddenData, bAllowOverride);
|
||||
nResult = aDialog.run();
|
||||
}
|
||||
else if ( nMode == UUI_DOC_SAVE_LOCK )
|
||||
|
@ -137,7 +136,7 @@ handleLockedDocumentRequest_(
|
|||
aResLocale);
|
||||
aMessage = UUIInteractionHelper::replaceMessageWithArguments(
|
||||
aMessage, aArguments );
|
||||
|
||||
|
||||
TryLaterQueryBox aDialog(pParent, aResLocale, aMessage, bAllowOverride);
|
||||
nResult = aDialog.run();
|
||||
}
|
||||
|
|
|
@ -20,23 +20,60 @@
|
|||
#include <strings.hrc>
|
||||
#include "openlocked.hxx"
|
||||
#include <officecfg/Office/Common.hxx>
|
||||
#include <unotools/resmgr.hxx>
|
||||
#include <vcl/stdtext.hxx>
|
||||
#include <vcl/svapp.hxx>
|
||||
#include <vcl/weldutils.hxx>
|
||||
|
||||
OpenLockedQueryBox::OpenLockedQueryBox(weld::Window* pParent, const std::locale& rResLocale, const OUString& rMessage, bool bEnableOverride)
|
||||
: m_xQueryBox(Application::CreateMessageDialog(pParent, VclMessageType::Question, VclButtonsType::NONE, rMessage))
|
||||
using namespace vcl;
|
||||
|
||||
IMPL_LINK(OpenLockedQueryBox, ClickHdl, weld::Button&, rButton, void)
|
||||
{
|
||||
m_xQueryBox->set_title(Translate::get(STR_OPENLOCKED_TITLE, rResLocale));
|
||||
m_xQueryBox->add_button(Translate::get(STR_OPENLOCKED_OPENREADONLY_BTN, rResLocale), RET_YES);
|
||||
m_xQueryBox->add_button(Translate::get(STR_OPENLOCKED_OPENREADONLY_NOTIFY_BTN, rResLocale), RET_RETRY);
|
||||
m_xQueryBox->add_button(Translate::get(STR_OPENLOCKED_OPENCOPY_BTN, rResLocale), RET_NO);
|
||||
if (bEnableOverride && officecfg::Office::Common::Misc::AllowOverrideLocking::get())
|
||||
if (&rButton == mxOpenReadOnlyBtn.get())
|
||||
{
|
||||
// Present option to ignore the (stale?) lock file and open the document
|
||||
m_xQueryBox->add_button(Translate::get(STR_ALREADYOPEN_OPEN_BTN, rResLocale), RET_IGNORE);
|
||||
if (mxNotifyBtn->get_active())
|
||||
m_xDialog->response(RET_RETRY);
|
||||
else
|
||||
m_xDialog->response(RET_YES);
|
||||
}
|
||||
m_xQueryBox->add_button(GetStandardText(StandardButtonType::Cancel), RET_CANCEL);
|
||||
else if (&rButton == mxOpenCopyBtn.get())
|
||||
{
|
||||
m_xDialog->response(RET_NO);
|
||||
}
|
||||
else if (&rButton == mxOpenBtn.get())
|
||||
{
|
||||
m_xDialog->response(RET_IGNORE);
|
||||
}
|
||||
else if (&rButton == mxCancelBtn.get())
|
||||
{
|
||||
m_xDialog->response(RET_CANCEL);
|
||||
}
|
||||
}
|
||||
|
||||
OpenLockedQueryBox::OpenLockedQueryBox(weld::Window* pParent, const OUString& rHiddenData, bool bEnableOverride)
|
||||
: GenericDialogController(pParent, "vcl/ui/openlockedquerybox.ui", "OpenLockedQueryBox")
|
||||
, mxQuestionMarkImage(m_xBuilder->weld_image("questionmark"))
|
||||
, mxOpenReadOnlyBtn(m_xBuilder->weld_button("readonly"))
|
||||
, mxOpenCopyBtn(m_xBuilder->weld_button("opencopy"))
|
||||
, mxOpenBtn(m_xBuilder->weld_button("open"))
|
||||
, mxCancelBtn(m_xBuilder->weld_button("cancel"))
|
||||
, mxNotifyBtn(m_xBuilder->weld_check_button("notify"))
|
||||
, mxHiddenText(m_xBuilder->weld_label("hiddentext"))
|
||||
{
|
||||
//set up the image
|
||||
mxQuestionMarkImage->set_from_icon_name(u"vcl/res/help.png");
|
||||
|
||||
//setup click hdl
|
||||
mxOpenReadOnlyBtn->connect_clicked(LINK(this, OpenLockedQueryBox, ClickHdl));
|
||||
mxOpenCopyBtn->connect_clicked(LINK(this, OpenLockedQueryBox, ClickHdl));
|
||||
mxOpenBtn->connect_clicked(LINK(this, OpenLockedQueryBox, ClickHdl));
|
||||
mxCancelBtn->connect_clicked(LINK(this, OpenLockedQueryBox, ClickHdl));
|
||||
|
||||
if (!(bEnableOverride && officecfg::Office::Common::Misc::AllowOverrideLocking::get()))
|
||||
{
|
||||
//disable option to ignore the (stale?) lock file and open the document
|
||||
mxOpenBtn->set_sensitive(false);
|
||||
}
|
||||
|
||||
mxHiddenText->set_label(rHiddenData);
|
||||
m_xDialog->set_centered_on_parent(true);
|
||||
}
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
|
|
@ -20,15 +20,32 @@
|
|||
|
||||
#include <vcl/weld.hxx>
|
||||
|
||||
class OpenLockedQueryBox
|
||||
namespace vcl
|
||||
{
|
||||
private:
|
||||
std::unique_ptr<weld::MessageDialog> m_xQueryBox;
|
||||
class OpenLockedQueryBox;
|
||||
}
|
||||
|
||||
namespace vcl
|
||||
{
|
||||
class OpenLockedQueryBox final : public weld::GenericDialogController
|
||||
{
|
||||
public:
|
||||
OpenLockedQueryBox(weld::Window* pParent, const std::locale& rResLocale,
|
||||
const OUString& rMessage, bool bEnableOverride);
|
||||
short run() { return m_xQueryBox->run(); }
|
||||
};
|
||||
OpenLockedQueryBox(weld::Window* pParent, const OUString& rHiddenData, bool bEnableOverride);
|
||||
|
||||
private:
|
||||
std::unique_ptr<weld::Image> mxQuestionMarkImage;
|
||||
|
||||
std::unique_ptr<weld::Button> mxOpenReadOnlyBtn;
|
||||
std::unique_ptr<weld::Button> mxOpenCopyBtn;
|
||||
std::unique_ptr<weld::Button> mxOpenBtn;
|
||||
std::unique_ptr<weld::Button> mxCancelBtn;
|
||||
|
||||
std::unique_ptr<weld::CheckButton> mxNotifyBtn;
|
||||
|
||||
std::unique_ptr<weld::Label> mxHiddenText;
|
||||
|
||||
DECL_LINK(ClickHdl, weld::Button&, void);
|
||||
DECL_LINK(ToggleHdl, weld::Toggleable&, void);
|
||||
};
|
||||
}
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
|
|
@ -29,6 +29,7 @@ $(eval $(call gb_UIConfig_add_uifiles,vcl,\
|
|||
vcl/uiconfig/ui/querydialog \
|
||||
vcl/uiconfig/ui/screenshotparent \
|
||||
vcl/uiconfig/ui/wizard \
|
||||
vcl/uiconfig/ui/openlockedquerybox \
|
||||
))
|
||||
|
||||
$(eval $(call gb_UIConfig_add_a11yerrors_uifiles,vcl,\
|
||||
|
|
270
vcl/uiconfig/ui/openlockedquerybox.ui
Normal file
270
vcl/uiconfig/ui/openlockedquerybox.ui
Normal file
|
@ -0,0 +1,270 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.38.2 -->
|
||||
<interface domain="vcl">
|
||||
<requires lib="gtk+" version="3.20"/>
|
||||
<object class="GtkDialog" id="OpenLockedQueryBox">
|
||||
<property name="can-focus">False</property>
|
||||
<property name="border-width">6</property>
|
||||
<property name="title" translatable="yes" context="openlockedquerybox|OpenLockedQueryBox">Document in Use</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="destroy-with-parent">True</property>
|
||||
<property name="type-hint">dialog</property>
|
||||
<property name="urgency-hint">True</property>
|
||||
<property name="gravity">north</property>
|
||||
<child type="titlebar">
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="VerticalBox">
|
||||
<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="ButtonContainer">
|
||||
<property name="can-focus">False</property>
|
||||
<property name="layout-style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="open">
|
||||
<property name="label" translatable="yes" context="stock">_Open</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="use-underline">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<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">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="pack-type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="MainPanel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="spacing">24</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="questionmark">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">start</property>
|
||||
<property name="margin-start">24</property>
|
||||
<property name="margin-top">70</property>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="questionmark-atkobject">
|
||||
<property name="AtkObject::accessible-name" translatable="yes" context="openlockedquerybox|questionmark">Question mark image</property>
|
||||
<property name="AtkObject::accessible-description" translatable="yes" context="openlockedquerybox|questionmark">Question mark icon for dialog box.</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<!-- n-columns=2 n-rows=4 -->
|
||||
<object class="GtkGrid">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="margin-end">6</property>
|
||||
<property name="margin-top">6</property>
|
||||
<property name="row-spacing">18</property>
|
||||
<property name="column-spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="messagetext">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes" context="openlockedquerybox|messagetext">This file has been locked by another user.</property>
|
||||
<property name="width-chars">0</property>
|
||||
<property name="max-width-chars">0</property>
|
||||
<property name="xalign">0</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="messagetext-atkobject">
|
||||
<property name="AtkObject::accessible-role">static</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="ReadOnlyMessage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="valign">start</property>
|
||||
<property name="label" translatable="yes" context="openlockedquerybox|ReadOnlyMessage">You can open it read only and
|
||||
receive a notification if ready.</property>
|
||||
<property name="xalign">0</property>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="ReadOnlyMessage-atkobject">
|
||||
<property name="AtkObject::accessible-role">static</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="OpenCopyMessage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes" context="openlockedquerybox|OpenCopyMessage">You can open a copy on your
|
||||
local system.</property>
|
||||
<property name="xalign">0</property>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="OpenCopyMessage-atkobject">
|
||||
<property name="AtkObject::accessible-role">static</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkExpander" id="moredetailsexpander">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="resize-toplevel">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="hiddentext">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="margin-top">10</property>
|
||||
<property name="xalign">0</property>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="hiddentext-atkobject">
|
||||
<property name="AtkObject::accessible-role">static</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="expandertext">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes" context="openlockedquerybox|expandertext">_More Details</property>
|
||||
<property name="use-underline">True</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="opencopy">
|
||||
<property name="label" translatable="yes" context="stock">Open Co_py</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="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">3</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="readonly">
|
||||
<property name="label" translatable="yes" context="stock">Open _R/O</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">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="notify">
|
||||
<property name="label" translatable="yes" context="stock">_Notify</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>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="OpenLockedQueryBox-atkobject">
|
||||
<property name="AtkObject::accessible-description" translatable="yes" context="openlockedquerybox|OpenLockedQueryBox">Displays information about locked files and further steps to take when opening a locked file.</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
Loading…
Reference in a new issue