summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-08-18 10:07:51 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-08-19 10:38:20 +0200
commit1be71c6e6aa4bb6506674220652163fbf0172935 (patch)
treef20394d520bd1621b6d4315ff1aae6788403f50b
parentfd590397606e944e9a2974a2c62759436a5a5b20 (diff)
gtktiledviewer: specify author name when calling initializeForRendering()
Open two views, and type into both of them when a Writer doc with redlining enabled is open: the manage changes dialog now shows how the correct author is used when creating the redline items. Change-Id: I48fb90301bfcc04b06d5be5544324ca76fe7b3d7 (cherry picked from commit f2afe318ce800c1b301f7e1aef769194aa676b12)
-rw-r--r--include/LibreOfficeKit/LibreOfficeKitGtk.h4
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx34
-rw-r--r--libreofficekit/source/gtk/lokdocview.cxx5
3 files changed, 36 insertions, 7 deletions
diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h
index fc7cec141396..cb96f20c0518 100644
--- a/include/LibreOfficeKit/LibreOfficeKitGtk.h
+++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h
@@ -75,10 +75,12 @@ GtkWidget* lok_doc_view_new_from_user_profile (const gchar*
/**
* lok_doc_view_new_from_widget:
* @pDocView: The #LOKDocView instance
+ * @pRenderingArguments: (nullable): lok::Document::initializeForRendering() arguments.
*
* Returns: (transfer none): The #LOKDocView widget instance.
*/
-GtkWidget* lok_doc_view_new_from_widget (LOKDocView* pDocView);
+GtkWidget* lok_doc_view_new_from_widget (LOKDocView* pDocView,
+ const gchar* pRenderingArguments);
/**
* lok_doc_view_open_document:
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index 2b3090e0b672..9e369f464e70 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -136,7 +136,10 @@ public:
std::shared_ptr<TiledRowColumnBar> m_pRowBar;
std::shared_ptr<TiledRowColumnBar> m_pColumnBar;
std::shared_ptr<TiledCornerButton> m_pCornerButton;
+ /// Author string, used for comment insertion.
std::string m_aAuthor;
+ /// Rendering arguments, which are the same for all views.
+ boost::property_tree::ptree m_aRenderingArguments;
TiledWindow()
: m_pDocView(nullptr),
@@ -174,8 +177,6 @@ public:
m_pFindbarLabel(nullptr),
m_bFindAll(false)
{
- struct passwd* pPasswd = getpwuid(getuid());
- m_aAuthor = std::string(pPasswd->pw_gecos);
}
};
@@ -198,6 +199,14 @@ static TiledWindow& lcl_getTiledWindow(GtkWidget* pWidget)
return g_aWindows[pToplevel];
}
+/// Generate an author string for multiple views.
+static std::string getNextAuthor()
+{
+ static int nCounter = 0;
+ struct passwd* pPasswd = getpwuid(getuid());
+ return std::string(pPasswd->pw_gecos) + " #" + std::to_string(++nCounter);
+}
+
TiledRowColumnBar::TiledRowColumnBar(TiledBarType eType)
: m_pDrawingArea(gtk_drawing_area_new()),
m_nSizePixel(0),
@@ -841,9 +850,19 @@ static void registerSelectorHandlers(TiledWindow& rWindow)
static void createView(GtkWidget* pButton, gpointer /*pItem*/)
{
TiledWindow& rWindow = lcl_getTiledWindow(pButton);
- GtkWidget* pDocView = lok_doc_view_new_from_widget(LOK_DOC_VIEW(rWindow.m_pDocView));
+
+ boost::property_tree::ptree aTree = rWindow.m_aRenderingArguments;
+ std::string aAuthor = getNextAuthor();
+ aTree.put(boost::property_tree::ptree::path_type(".uno:Author/type", '/'), "string");
+ aTree.put(boost::property_tree::ptree::path_type(".uno:Author/value", '/'), aAuthor);
+ std::stringstream aStream;
+ boost::property_tree::write_json(aStream, aTree);
+ std::string aArguments = aStream.str();
+
+ GtkWidget* pDocView = lok_doc_view_new_from_widget(LOK_DOC_VIEW(rWindow.m_pDocView), aArguments.c_str());
TiledWindow& rNewWindow = setupWidgetAndCreateWindow(pDocView);
+ rNewWindow.m_aAuthor = aAuthor;
// Hide the unused progress bar.
gtk_widget_show_all(rNewWindow.m_pStatusBar);
gtk_widget_hide(rNewWindow.m_pProgressBar);
@@ -866,7 +885,7 @@ static void createModelAndView(const char* pLOPath, const char* pDocPath, const
const gchar* pUserProfile = aUserProfile.empty() ? nullptr : aUserProfile.c_str();
GtkWidget* pDocView = lok_doc_view_new_from_user_profile(pLOPath, pUserProfile, nullptr, nullptr);
- setupWidgetAndCreateWindow(pDocView);
+ TiledWindow& rWindow = setupWidgetAndCreateWindow(pDocView);
boost::property_tree::ptree aTree;
for (size_t i = 0; i < rArguments.size(); ++i)
@@ -892,6 +911,13 @@ static void createModelAndView(const char* pLOPath, const char* pDocPath, const
}
}
+ // Save rendering arguments for views which are created later.
+ rWindow.m_aRenderingArguments = aTree;
+
+ rWindow.m_aAuthor = getNextAuthor();
+ aTree.put(boost::property_tree::ptree::path_type(".uno:Author/type", '/'), "string");
+ aTree.put(boost::property_tree::ptree::path_type(".uno:Author/value", '/'), rWindow.m_aAuthor);
+
std::stringstream aStream;
boost::property_tree::write_json(aStream, aTree);
std::string aArguments = aStream.str();
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index e5ac6c406320..f3dbc6a73017 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -3001,7 +3001,8 @@ lok_doc_view_new_from_user_profile (const gchar* pPath, const gchar* pUserProfil
nullptr));
}
-SAL_DLLPUBLIC_EXPORT GtkWidget* lok_doc_view_new_from_widget(LOKDocView* pOldLOKDocView)
+SAL_DLLPUBLIC_EXPORT GtkWidget* lok_doc_view_new_from_widget(LOKDocView* pOldLOKDocView,
+ const gchar* pRenderingArguments)
{
LOKDocViewPrivate& pOldPriv = getPrivate(pOldLOKDocView);
GtkWidget* pNewDocView = GTK_WIDGET(g_initable_new(LOK_TYPE_DOC_VIEW, /*cancellable=*/nullptr, /*error=*/nullptr,
@@ -3019,7 +3020,7 @@ SAL_DLLPUBLIC_EXPORT GtkWidget* lok_doc_view_new_from_widget(LOKDocView* pOldLOK
// Store the view id only later in postDocumentLoad(), as
// initializeForRendering() changes the id in Impress.
pDocument->pClass->createView(pDocument);
- pNewPriv->m_aRenderingArguments = pOldPriv->m_aRenderingArguments;
+ pNewPriv->m_aRenderingArguments = pRenderingArguments;
postDocumentLoad(pNewDocView);
return pNewDocView;