[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - 11 commits - include/LibreOfficeKit libreofficekit/qa libreofficekit/source sd/qa sd/source sw/source
Henry Castro
hcastro at collabora.com
Thu May 28 00:56:33 PDT 2015
include/LibreOfficeKit/LibreOfficeKitEnums.h | 8 +-
include/LibreOfficeKit/LibreOfficeKitGtk.h | 2
libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx | 34 +++++++++-
libreofficekit/source/gtk/lokdocview.cxx | 67 ++++++++++++++++++--
sd/qa/unit/tiledrendering/data/dummy.odp |binary
sd/qa/unit/tiledrendering/tiledrendering.cxx | 49 ++++++++++++--
sd/source/ui/view/Outliner.cxx | 14 ++++
sw/source/core/view/viewsh.cxx | 10 ++
sw/source/uibase/uiview/view2.cxx | 2
sw/source/uibase/uno/unotxdoc.cxx | 5 +
10 files changed, 171 insertions(+), 20 deletions(-)
New commits:
commit 3bc8e5f81b85b02a34cd6bb9080ba0fe1505bd33
Author: Henry Castro <hcastro at collabora.com>
Date: Wed May 27 10:37:03 2015 +0200
sd LOKit callback for search not found
Change-Id: Ide13a989005169cd6e8663f308d15f0e5984bd86
(cherry picked from commit c0cc9a8622a2cd0e3ba07e15a79dd65ca910b233)
diff --git a/sd/source/ui/view/Outliner.cxx b/sd/source/ui/view/Outliner.cxx
index aff2e76..60873d0 100644
--- a/sd/source/ui/view/Outliner.cxx
+++ b/sd/source/ui/view/Outliner.cxx
@@ -70,6 +70,7 @@
#include "framework/FrameworkHelper.hxx"
#include <svx/svxids.hrc>
#include <editeng/editerr.hxx>
+#include <LibreOfficeKit/LibreOfficeKitEnums.h>
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
@@ -1056,7 +1057,12 @@ void Outliner::ShowEndOfSearchDialog()
if (mbStringFound)
aString = SD_RESSTR(STR_END_SEARCHING);
else
+ {
aString = SD_RESSTR(STR_STRING_NOTFOUND);
+ mpDrawDocument->libreOfficeKitCallback(LOK_CALLBACK_SEARCH_NOT_FOUND,
+ mpSearchItem->GetSearchString().toUtf8().getStr());
+
+ }
}
else
{
commit 2195aa2ce8a93895213bbbe2b25bb5a12d3c5160
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed May 27 17:12:28 2015 +0200
lokdocview: handle LOK_CALLBACK_DOCUMENT_SIZE_CHANGED
Change-Id: Ib1b99221afbf9810bad5fd49fbf62c7a20fd28e4
(cherry picked from commit 8cbb94a2b79dcaf9675125da800b64a85bae52dc)
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index 73dd15e..d01c743 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -170,6 +170,8 @@ struct LOKDocView_Impl
* the tiles that intersect with pPartial.
*/
void renderDocument(GdkRectangle* pPartial);
+ /// Sets rWidth and rHeight from a "width, height" string.
+ void payloadToSize(const char* pPayload, long& rWidth, long& rHeight);
/// Returns the GdkRectangle of a width,height,x,y string.
static GdkRectangle payloadToRectangle(const char* pPayload);
/// Returns the GdkRectangles of a w,h,x,y;w2,h2,x2,y2;... string.
@@ -844,6 +846,21 @@ void LOKDocView_Impl::renderDocument(GdkRectangle* pPartial)
}
}
+void LOKDocView_Impl::payloadToSize(const char* pPayload, long& rWidth, long& rHeight)
+{
+ rWidth = rHeight = 0;
+ gchar** ppCoordinates = g_strsplit(pPayload, ", ", 2);
+ gchar** ppCoordinate = ppCoordinates;
+ if (!*ppCoordinate)
+ return;
+ rWidth = atoi(*ppCoordinate);
+ ++ppCoordinate;
+ if (!*ppCoordinate)
+ return;
+ rHeight = atoi(*ppCoordinate);
+ g_strfreev(ppCoordinates);
+}
+
GdkRectangle LOKDocView_Impl::payloadToRectangle(const char* pPayload)
{
GdkRectangle aRet;
@@ -913,8 +930,8 @@ const char* LOKDocView_Impl::callbackTypeToString(int nType)
return "LOK_CALLBACK_STATUS_INDICATOR_FINISH";
case LOK_CALLBACK_SEARCH_NOT_FOUND:
return "LOK_CALLBACK_SEARCH_NOT_FOUND";
- case LOK_CALLBACK_PAGE_COUNT_CHANGED:
- return "LOK_CALLBACK_PAGE_COUNT_CHANGED";
+ case LOK_CALLBACK_DOCUMENT_SIZE_CHANGED:
+ return "LOK_CALLBACK_DOCUMENT_SIZE_CHANGED";
case LOK_CALLBACK_SET_PART:
return "LOK_CALLBACK_SET_PART";
}
@@ -1014,9 +1031,9 @@ gboolean LOKDocView_Impl::callbackImpl(CallbackData* pCallback)
searchNotFound(pCallback->m_aPayload);
}
break;
- case LOK_CALLBACK_PAGE_COUNT_CHANGED:
+ case LOK_CALLBACK_DOCUMENT_SIZE_CHANGED:
{
- m_pDocument->pClass->getDocumentSize(m_pDocument, &m_nDocumentWidthTwips, &m_nDocumentHeightTwips);
+ LOKDocView_Impl::payloadToSize(pCallback->m_aPayload.c_str(), m_nDocumentWidthTwips, m_nDocumentHeightTwips);
}
break;
case LOK_CALLBACK_SET_PART:
commit 50cb3a83fdafd37a4814b3cc6e6d1336274007a7
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed May 27 17:12:00 2015 +0200
LOK: change PAGE_COUNT to a more generic DOCUMENT_SIZE
Change-Id: If94af4072c321358d7bd4d678eeed181dc0f44db
(cherry picked from commit 63a40c45018ad2e6f4a660a520a5907beb1d7801)
diff --git a/include/LibreOfficeKit/LibreOfficeKitEnums.h b/include/LibreOfficeKit/LibreOfficeKitEnums.h
index 9ad7636..5293aa9 100644
--- a/include/LibreOfficeKit/LibreOfficeKitEnums.h
+++ b/include/LibreOfficeKit/LibreOfficeKitEnums.h
@@ -146,12 +146,12 @@ typedef enum
LOK_CALLBACK_SEARCH_NOT_FOUND,
/**
- * Number of pages changed in the document.
+ * Size of the document changed.
*
- * Clients should assume that data returned by an earlier
- * lok::Document::getDocumentSize() call is no longer valid.
+ * Payload format is "width, height", i.e. clients get the new size without
+ * having to do an explicit lok::Document::getDocumentSize() call.
*/
- LOK_CALLBACK_PAGE_COUNT_CHANGED,
+ LOK_CALLBACK_DOCUMENT_SIZE_CHANGED,
/**
* The current part number is changed.
diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx
index 37762b4..c6f374b 100644
--- a/sw/source/core/view/viewsh.cxx
+++ b/sw/source/core/view/viewsh.cxx
@@ -78,6 +78,7 @@
#include <vcl/virdev.hxx>
#include <vcl/svapp.hxx>
#include <svx/sdrpaintwindow.hxx>
+#include <LibreOfficeKit/LibreOfficeKitEnums.h>
#if !HAVE_FEATURE_DESKTOP
#include <vcl/sysdata.hxx>
@@ -989,6 +990,15 @@ void SwViewShell::SizeChgNotify()
const SvxNumberType& rNum = pPage->GetPageDesc()->GetNumType();
OUString sDisplay = rNum.GetNumStr( nVirtNum );
PageNumNotify( this, pCnt->GetPhyPageNum(), nVirtNum, sDisplay );
+
+ if (isTiledRendering())
+ {
+ Size aDocSize = GetDocSize();
+ std::stringstream ss;
+ ss << aDocSize.Width() + 2L * DOCUMENTBORDER << ", " << aDocSize.Height() + 2L * DOCUMENTBORDER;
+ OString sRect = ss.str().c_str();
+ libreOfficeKitCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, sRect.getStr());
+ }
}
}
}
diff --git a/sw/source/uibase/uiview/view2.cxx b/sw/source/uibase/uiview/view2.cxx
index a8ce619..b6f947d 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -147,7 +147,6 @@
#include <vcl/settings.hxx>
#include <boost/scoped_ptr.hpp>
-#include <LibreOfficeKit/LibreOfficeKitEnums.h>
const char sStatusDelim[] = " : ";
const char sStatusComma[] = " , ";
@@ -1281,7 +1280,6 @@ void SwView::Execute(SfxRequest &rReq)
/// invalidate page numbering field
void SwView::UpdatePageNums(sal_uInt16 nPhyNum, sal_uInt16 nVirtNum, const OUString& rPgStr)
{
- GetWrtShell().libreOfficeKitCallback(LOK_CALLBACK_PAGE_COUNT_CHANGED, 0);
OUString sTemp(GetPageStr( nPhyNum, nVirtNum, rPgStr ));
const SfxStringItem aTmp( FN_STAT_PAGE, sTemp );
// Used to distinguish which tooltip to show
commit 4d76e96a8caf86daa7055438c1fdb994c1687706
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed May 27 15:16:58 2015 +0200
SwXTextDocument::initializeForTiledRendering: allow having different defaults
SetHardBlank() configures the gray background for non-breaking spaces.
Change-Id: I779503189085cc6537b776deb3d30cb93b316acd
(cherry picked from commit e3b0bae416b22f6dbf0a63efb645dadf75763a9c)
diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx
index 8a61199..a066c6f 100644
--- a/sw/source/uibase/uno/unotxdoc.cxx
+++ b/sw/source/uibase/uno/unotxdoc.cxx
@@ -3167,6 +3167,11 @@ void SwXTextDocument::initializeForTiledRendering()
return;
pView->SetViewLayout(nColumns, bBookMode, true);
+ // Tiled rendering defaults.
+ SwViewOption aViewOption(*pViewShell->GetViewOptions());
+ aViewOption.SetHardBlank(false);
+ pViewShell->ApplyViewOptions(aViewOption);
+
// Disable map mode, so that it's possible to send mouse event coordinates
// directly in twips.
SwEditWin& rEditWin = pDocShell->GetView()->GetEditWin();
commit 84b35e1165f8cc7855204fb157adec0d345b1653
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed May 27 14:10:00 2015 +0200
CppunitTest_sd_tiledrendering: add search-not-found testcase
Fails without commit c0cc9a8622a2cd0e3ba07e15a79dd65ca910b233 (sd LOKit
callback for search not found, 2015-05-27).
Change-Id: I26ce4eab3d0bf3abc4a59d0dd21d5f2f5de78017
(cherry picked from commit 436b4451c6f36ca23c966e2391cfcf94091b6db7)
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index 9889015..b41c427 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -74,13 +74,15 @@ private:
#if !defined(WNT) && !defined(MACOSX)
Rectangle m_aInvalidation;
std::vector<Rectangle> m_aSelection;
+ bool m_bFound;
sal_Int32 m_nPart;
#endif
};
SdTiledRenderingTest::SdTiledRenderingTest()
#if !defined(WNT) && !defined(MACOSX)
- : m_nPart(0)
+ : m_bFound(true),
+ m_nPart(0)
#endif
{
}
@@ -167,6 +169,11 @@ void SdTiledRenderingTest::callbackImpl(int nType, const char* pPayload)
}
}
break;
+ case LOK_CALLBACK_SEARCH_NOT_FOUND:
+ {
+ m_bFound = false;
+ }
+ break;
case LOK_CALLBACK_SET_PART:
{
OUString aPayload = OUString::createFromAscii(pPayload);
@@ -353,6 +360,12 @@ void SdTiledRenderingTest::testSearch()
// Search for something on the second slide, and make sure that the set-part callback fired.
lcl_search("bbb");
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), m_nPart);
+ CPPUNIT_ASSERT_EQUAL(true, m_bFound);
+
+ // This should trigger the not-found callback.
+ Application::EnableHeadlessMode(false);
+ lcl_search("ccc");
+ CPPUNIT_ASSERT_EQUAL(false, m_bFound);
}
#endif
commit 0de606737423db10a3591f8775a5ebacbdf67604
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed May 27 14:09:18 2015 +0200
sd tiled rendering: avoid showing wrap around dialog
Change-Id: Id977c3a17f5e34d086ee3b68fa9ad2969f9d24c2
(cherry picked from commit 9328df9598286a94f0cf097462045a3c0a5721fc)
diff --git a/sd/source/ui/view/Outliner.cxx b/sd/source/ui/view/Outliner.cxx
index 277efb1..aff2e76 100644
--- a/sd/source/ui/view/Outliner.cxx
+++ b/sd/source/ui/view/Outliner.cxx
@@ -1092,6 +1092,14 @@ bool Outliner::ShowWrapArroundDialog()
// Spell checking needs the dialog, too.
bShowDialog = (meMode == SPELL);
+ boost::shared_ptr<ViewShell> pViewShell(mpWeakViewShell.lock());
+ if (pViewShell && pViewShell->GetDoc()->isTiledRendering())
+ {
+ // Wrap around without asking anything.
+ bShowDialog = false;
+ bDoWrapArround = true;
+ }
+
if (bShowDialog)
{
// The question text depends on the search direction.
commit f953b28a945b7e61bc3407f2147e5afd3a11a2ff
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed May 27 11:59:00 2015 +0200
CppunitTest_sd_tiledrendering: add part switching testcase
Fails with the last hunk of commit
67a37be9969d8b5a0bc8ae081bc1aba697ea6ba5 (sd: fix LOK search result
highlight when result is not on the current slide, 2015-05-26) reverted.
Change-Id: I5f8b57784ad1de1434113af7f94c9fde8672b4d5
(cherry picked from commit a0576aec8381ca8ea36d60c925e871587702c268)
diff --git a/sd/qa/unit/tiledrendering/data/dummy.odp b/sd/qa/unit/tiledrendering/data/dummy.odp
index e559de6..12cd679 100644
Binary files a/sd/qa/unit/tiledrendering/data/dummy.odp and b/sd/qa/unit/tiledrendering/data/dummy.odp differ
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index a55b026..9889015 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -37,6 +37,7 @@ static const char* DATA_DIRECTORY = "/sd/qa/unit/tiledrendering/data/";
class SdTiledRenderingTest : public test::BootstrapFixture, public unotest::MacrosTest, public XmlTestTools
{
public:
+ SdTiledRenderingTest();
virtual void setUp() SAL_OVERRIDE;
virtual void tearDown() SAL_OVERRIDE;
@@ -73,9 +74,17 @@ private:
#if !defined(WNT) && !defined(MACOSX)
Rectangle m_aInvalidation;
std::vector<Rectangle> m_aSelection;
+ sal_Int32 m_nPart;
#endif
};
+SdTiledRenderingTest::SdTiledRenderingTest()
+#if !defined(WNT) && !defined(MACOSX)
+ : m_nPart(0)
+#endif
+{
+}
+
void SdTiledRenderingTest::setUp()
{
test::BootstrapFixture::setUp();
@@ -158,6 +167,12 @@ void SdTiledRenderingTest::callbackImpl(int nType, const char* pPayload)
}
}
break;
+ case LOK_CALLBACK_SET_PART:
+ {
+ OUString aPayload = OUString::createFromAscii(pPayload);
+ m_nPart = aPayload.toInt32();
+ }
+ break;
}
}
@@ -306,6 +321,16 @@ void SdTiledRenderingTest::testResetSelection()
CPPUNIT_ASSERT(!pView->GetTextEditObject());
}
+static void lcl_search(const OUString& rKey)
+{
+ uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence(
+ {
+ {"SearchItem.SearchString", uno::makeAny(rKey)},
+ {"SearchItem.Backward", uno::makeAny(false)}
+ }));
+ comphelper::dispatchCommand(".uno:ExecuteSearch", aPropertyValues);
+}
+
void SdTiledRenderingTest::testSearch()
{
SdXImpressDocument* pXImpressDocument = createDoc("dummy.odp");
@@ -314,12 +339,7 @@ void SdTiledRenderingTest::testSearch()
uno::Reference<text::XTextRange> xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY);
xShape->setString("Aaa bbb.");
- uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence(
- {
- {"SearchItem.SearchString", uno::makeAny(OUString("bbb"))},
- {"SearchItem.Backward", uno::makeAny(false)}
- }));
- comphelper::dispatchCommand(".uno:ExecuteSearch", aPropertyValues);
+ lcl_search("bbb");
sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell();
SdrView* pView = pViewShell->GetView();
@@ -329,6 +349,10 @@ void SdTiledRenderingTest::testSearch()
// Did the selection callback fire?
CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), m_aSelection.size());
+
+ // Search for something on the second slide, and make sure that the set-part callback fired.
+ lcl_search("bbb");
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), m_nPart);
}
#endif
commit d7bd82f9c268ec76df07e8b5d74effe19009484e
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed May 27 11:30:04 2015 +0200
lokdocview: fix not updated part selector when search changes part
Change-Id: I337eed47c56dbbbebda4d7fe716eab6177936dc0
(cherry picked from commit c7ecbbbb6acf92af4ded4119da6abdddace39fe0)
diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h
index cce580f..320121e 100644
--- a/include/LibreOfficeKit/LibreOfficeKitGtk.h
+++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h
@@ -40,6 +40,7 @@ struct _LOKDocViewClass
void (* edit_changed) (LOKDocView* pView, gboolean was_edit);
void (* command_changed) (LOKDocView* pView, char* new_state);
void (* search_not_found) (LOKDocView* pView, char* new_state);
+ void (* part_changed) (LOKDocView* pView, int new_part);
};
guint lok_docview_get_type (void);
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index edd5006..ed2471f 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -45,6 +45,8 @@ static GtkWidget* pVBox;
// GtkComboBox requires gtk 2.24 or later
#if ( GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION >= 24 ) || GTK_MAJOR_VERSION > 2
static GtkComboBoxText* pPartSelector;
+/// Should the part selector avoid calling lok::Document::setPart()?
+static bool g_bPartSelectorBroadcast = true;
#endif
GtkWidget* pFindbar;
GtkWidget* pFindbarEntry;
@@ -238,6 +240,15 @@ static void signalSearch(LOKDocView* /*pLOKDocView*/, char* /*pPayload*/, gpoint
gtk_label_set_text(GTK_LABEL(pFindbarLabel), "Search key not found");
}
+static void signalPart(LOKDocView* /*pLOKDocView*/, int nPart, gpointer /*pData*/)
+{
+#if GTK_CHECK_VERSION(2,24,0)
+ g_bPartSelectorBroadcast = false;
+ gtk_combo_box_set_active(GTK_COMBO_BOX(pPartSelector), nPart);
+ g_bPartSelectorBroadcast = true;
+#endif
+}
+
/// User clicked on a cmmand button -> inform LOKDocView.
static void toggleToolItem(GtkWidget* pWidget, gpointer /*pData*/)
{
@@ -285,7 +296,7 @@ static void changePart( GtkWidget* pSelector, gpointer /* pItem */ )
{
int nPart = gtk_combo_box_get_active( GTK_COMBO_BOX(pSelector) );
- if ( pDocView )
+ if (g_bPartSelectorBroadcast && pDocView)
{
lok_docview_set_part( LOK_DOCVIEW(pDocView), nPart );
}
@@ -443,6 +454,7 @@ int main( int argc, char* argv[] )
g_signal_connect(pDocView, "edit-changed", G_CALLBACK(signalEdit), NULL);
g_signal_connect(pDocView, "command-changed", G_CALLBACK(signalCommand), NULL);
g_signal_connect(pDocView, "search-not-found", G_CALLBACK(signalSearch), NULL);
+ g_signal_connect(pDocView, "part-changed", G_CALLBACK(signalPart), NULL);
// Input handling.
g_signal_connect(pWindow, "key-press-event", G_CALLBACK(signalKey), pDocView);
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index 874f96a..73dd15e 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -194,6 +194,8 @@ struct LOKDocView_Impl
void commandChanged(const std::string& rPayload);
/// Search did not find any matches.
void searchNotFound(const std::string& rPayload);
+ /// LOK decided to change parts, need to update UI.
+ void setPart(const std::string& rPayload);
};
namespace {
@@ -1019,7 +1021,7 @@ gboolean LOKDocView_Impl::callbackImpl(CallbackData* pCallback)
break;
case LOK_CALLBACK_SET_PART:
{
- renderDocument(0);
+ setPart(pCallback->m_aPayload);
}
break;
default:
@@ -1066,6 +1068,7 @@ enum
EDIT_CHANGED,
COMMAND_CHANGED,
SEARCH_NOT_FOUND,
+ PART_CHANGED,
LAST_SIGNAL
};
@@ -1081,6 +1084,12 @@ void LOKDocView_Impl::searchNotFound(const std::string& rString)
g_signal_emit(m_pDocView, docview_signals[SEARCH_NOT_FOUND], 0, rString.c_str());
}
+void LOKDocView_Impl::setPart(const std::string& rString)
+{
+ g_signal_emit(m_pDocView, docview_signals[PART_CHANGED], 0, std::stoi(rString));
+ renderDocument(0);
+}
+
static void lok_docview_class_init( gpointer ptr )
{
LOKDocViewClass* pClass = static_cast<LOKDocViewClass *>(ptr);
@@ -1115,6 +1124,16 @@ static void lok_docview_class_init( gpointer ptr )
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1,
G_TYPE_STRING);
+ pClass->part_changed = 0;
+ docview_signals[PART_CHANGED] =
+ g_signal_new("part-changed",
+ G_TYPE_FROM_CLASS(gobject_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET(LOKDocViewClass, part_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE, 1,
+ G_TYPE_INT);
}
static void lok_docview_init( GTypeInstance* pInstance, gpointer )
commit 8dbeb6368cdcb1605e6750771f96b5865e0c5e93
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Thu May 21 13:17:18 2015 +0100
gtktiledviewer: handle LOK_CALLBACK_SEARCH_NOT_FOUND
Change-Id: Ic545bbd14d11a3b310f4d72ee02e51a7cb6f4f22
(cherry picked from commit cb0b7ff34dc193c37e89f4a968e1cb7502338230)
diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h
index a517fca..cce580f 100644
--- a/include/LibreOfficeKit/LibreOfficeKitGtk.h
+++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h
@@ -39,6 +39,7 @@ struct _LOKDocViewClass
GtkScrolledWindowClass parent_class;
void (* edit_changed) (LOKDocView* pView, gboolean was_edit);
void (* command_changed) (LOKDocView* pView, char* new_state);
+ void (* search_not_found) (LOKDocView* pView, char* new_state);
};
guint lok_docview_get_type (void);
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index aa1f3f6..edd5006 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -48,6 +48,7 @@ static GtkComboBoxText* pPartSelector;
#endif
GtkWidget* pFindbar;
GtkWidget* pFindbarEntry;
+GtkWidget* pFindbarLabel;
static LibreOfficeKit* pOffice;
@@ -177,6 +178,7 @@ static void signalSearchPrev(GtkWidget* /*pButton*/, gpointer /*pItem*/)
/// Handles the key-press-event of the search entry widget.
static gboolean signalFindbar(GtkWidget* /*pWidget*/, GdkEventKey* pEvent, gpointer /*pData*/)
{
+ gtk_label_set_text(GTK_LABEL(pFindbarLabel), "");
switch(pEvent->keyval)
{
case GDK_Return:
@@ -230,6 +232,12 @@ static void signalCommand(LOKDocView* /*pLOKDocView*/, char* pPayload, gpointer
}
}
+/// LOKDocView found no search matches -> set the search label accordingly.
+static void signalSearch(LOKDocView* /*pLOKDocView*/, char* /*pPayload*/, gpointer /*pData*/)
+{
+ gtk_label_set_text(GTK_LABEL(pFindbarLabel), "Search key not found");
+}
+
/// User clicked on a cmmand button -> inform LOKDocView.
static void toggleToolItem(GtkWidget* pWidget, gpointer /*pData*/)
{
@@ -423,12 +431,18 @@ int main( int argc, char* argv[] )
gtk_toolbar_insert(GTK_TOOLBAR(pFindbar), pFindbarPrev, -1);
g_signal_connect(G_OBJECT(pFindbarPrev), "clicked", G_CALLBACK(signalSearchPrev), NULL);
+ GtkToolItem* pFindbarLabelContainer = gtk_tool_item_new();
+ pFindbarLabel = gtk_label_new("");
+ gtk_container_add(GTK_CONTAINER(pFindbarLabelContainer), pFindbarLabel);
+ gtk_toolbar_insert(GTK_TOOLBAR(pFindbar), pFindbarLabelContainer, -1);
+
gtk_box_pack_end(GTK_BOX(pVBox), pFindbar, FALSE, FALSE, 0);
// Docview
pDocView = lok_docview_new( pOffice );
g_signal_connect(pDocView, "edit-changed", G_CALLBACK(signalEdit), NULL);
g_signal_connect(pDocView, "command-changed", G_CALLBACK(signalCommand), NULL);
+ g_signal_connect(pDocView, "search-not-found", G_CALLBACK(signalSearch), NULL);
// Input handling.
g_signal_connect(pWindow, "key-press-event", G_CALLBACK(signalKey), pDocView);
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index 7b2d4c9..874f96a 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -192,6 +192,8 @@ struct LOKDocView_Impl
void globalCallbackWorkerImpl(int nType, const char* pPayload);
/// Command state (various buttons like bold are toggled or not) is changed.
void commandChanged(const std::string& rPayload);
+ /// Search did not find any matches.
+ void searchNotFound(const std::string& rPayload);
};
namespace {
@@ -1006,6 +1008,9 @@ gboolean LOKDocView_Impl::callbackImpl(CallbackData* pCallback)
}
break;
case LOK_CALLBACK_SEARCH_NOT_FOUND:
+ {
+ searchNotFound(pCallback->m_aPayload);
+ }
break;
case LOK_CALLBACK_PAGE_COUNT_CHANGED:
{
@@ -1060,6 +1065,7 @@ enum
{
EDIT_CHANGED,
COMMAND_CHANGED,
+ SEARCH_NOT_FOUND,
LAST_SIGNAL
};
@@ -1070,6 +1076,11 @@ void LOKDocView_Impl::commandChanged(const std::string& rString)
g_signal_emit(m_pDocView, docview_signals[COMMAND_CHANGED], 0, rString.c_str());
}
+void LOKDocView_Impl::searchNotFound(const std::string& rString)
+{
+ g_signal_emit(m_pDocView, docview_signals[SEARCH_NOT_FOUND], 0, rString.c_str());
+}
+
static void lok_docview_class_init( gpointer ptr )
{
LOKDocViewClass* pClass = static_cast<LOKDocViewClass *>(ptr);
@@ -1094,6 +1105,16 @@ static void lok_docview_class_init( gpointer ptr )
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1,
G_TYPE_STRING);
+ pClass->search_not_found = 0;
+ docview_signals[SEARCH_NOT_FOUND] =
+ g_signal_new("search-not-found",
+ G_TYPE_FROM_CLASS(gobject_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET(LOKDocViewClass, search_not_found),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1,
+ G_TYPE_STRING);
}
static void lok_docview_init( GTypeInstance* pInstance, gpointer )
commit 1c2f1892992a7193518f74fbbed78b456ae4a8b2
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Sat May 23 11:08:07 2015 +0100
libreofficekit: fix Linux baseline build
Change-Id: Ib0a076d78aacfec5e0625d7592ae24815e600ad6
(cherry picked from commit 5d9c2f2115dd8d3741501cbbc0313e4609bee896)
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index 903c247..aa1f3f6 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -451,9 +451,9 @@ int main( int argc, char* argv[] )
populatePartModeSelector( GTK_COMBO_BOX_TEXT(pPartModeComboBox) );
// Connect these signals after populating the selectors, to avoid re-rendering on setting the default part/partmode.
g_signal_connect(G_OBJECT(pPartModeComboBox), "changed", G_CALLBACK(changePartMode), 0);
-#endif
g_signal_connect(G_OBJECT(pPartSelector), "changed", G_CALLBACK(changePart), 0);
+#endif
gtk_main();
commit 134fa6a4999ccf0ed7b8cff7258bfa3d0e291b46
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Fri May 22 13:23:33 2015 +0100
gtktiledviewer: avoid a number of pointless re-rendering on startup
Change-Id: Ia7f63a6fa7505da50e6580ea009975e06a0cb65c
(cherry picked from commit 2807bcc186c976e55b6844d3459e2b0fbb92cdb8)
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index 7509b2f..903c247 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -362,7 +362,6 @@ int main( int argc, char* argv[] )
GtkWidget* pComboBox = gtk_combo_box_text_new();
gtk_container_add( GTK_CONTAINER(pPartSelectorToolItem), pComboBox );
gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), pPartSelectorToolItem, -1 );
- g_signal_connect( G_OBJECT(pComboBox), "changed", G_CALLBACK(changePart), NULL );
pPartSelector = GTK_COMBO_BOX_TEXT(pComboBox);
@@ -373,7 +372,6 @@ int main( int argc, char* argv[] )
GtkWidget* pPartModeComboBox = gtk_combo_box_text_new();
gtk_container_add( GTK_CONTAINER(pPartModeSelectorToolItem), pPartModeComboBox );
gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), pPartModeSelectorToolItem, -1 );
- g_signal_connect( G_OBJECT(pPartModeComboBox), "changed", G_CALLBACK(changePartMode), NULL );
#endif
gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), gtk_separator_tool_item_new(), -1);
@@ -451,8 +449,12 @@ int main( int argc, char* argv[] )
#if ( GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION >= 24 ) || GTK_MAJOR_VERSION > 2
populatePartSelector();
populatePartModeSelector( GTK_COMBO_BOX_TEXT(pPartModeComboBox) );
+ // Connect these signals after populating the selectors, to avoid re-rendering on setting the default part/partmode.
+ g_signal_connect(G_OBJECT(pPartModeComboBox), "changed", G_CALLBACK(changePartMode), 0);
#endif
+ g_signal_connect(G_OBJECT(pPartSelector), "changed", G_CALLBACK(changePart), 0);
+
gtk_main();
pOffice->pClass->destroy( pOffice );
More information about the Libreoffice-commits
mailing list