From 31ae1232bbde5ca3d74481dad1c9d70bab999c73 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Mon, 5 Oct 2015 11:30:15 +0200 Subject: [PATCH 173/398] lokdocview: handle LOK_CALLBACK_SEARCH_RESULT_COUNT Change-Id: I0d1b641654e0de65169e19bb5843ea11b43a90a3 (cherry picked from commit 22d342a82f225381057b5b8b941be8583de87a63) --- .../qa/gtktiledviewer/gtktiledviewer.cxx | 9 +++++++ libreofficekit/source/gtk/lokdocview.cxx | 28 ++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx index 46264eb0126b..852bee584dfb 100644 --- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx @@ -386,6 +386,14 @@ static void signalSearch(LOKDocView* pLOKDocView, char* /*pPayload*/, gpointer / gtk_label_set_text(GTK_LABEL(rWindow.m_pFindbarLabel), "Search key not found"); } +/// LOKDocView found some search matches -> set the search label accordingly. +static void signalSearchResultCount(LOKDocView* pLOKDocView, char* pPayload, gpointer /*pData*/) +{ + TiledWindow& rWindow = lcl_getTiledWindow(GTK_WIDGET(pLOKDocView)); + std::stringstream ss; + ss << pPayload << " match(es)"; + gtk_label_set_text(GTK_LABEL(rWindow.m_pFindbarLabel), ss.str().c_str()); +} static void signalPart(LOKDocView* pLOKDocView, int nPart, gpointer /*pData*/) { @@ -763,6 +771,7 @@ static void setupDocView(GtkWidget* pDocView) 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, "search-result-count", G_CALLBACK(signalSearchResultCount), NULL); g_signal_connect(pDocView, "part-changed", G_CALLBACK(signalPart), NULL); g_signal_connect(pDocView, "size-changed", G_CALLBACK(signalSize), NULL); g_signal_connect(pDocView, "hyperlink-clicked", G_CALLBACK(signalHyperlink), NULL); diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx index 99476764e69d..3aa4cabeb76c 100644 --- a/libreofficekit/source/gtk/lokdocview.cxx +++ b/libreofficekit/source/gtk/lokdocview.cxx @@ -121,6 +121,7 @@ enum SIZE_CHANGED, HYPERLINK_CLICKED, CURSOR_CHANGED, + SEARCH_RESULT_COUNT, LAST_SIGNAL }; @@ -221,6 +222,8 @@ callbackTypeToString (int nType) return "LOK_CALLBACK_STATUS_INDICATOR_FINISH"; case LOK_CALLBACK_SEARCH_NOT_FOUND: return "LOK_CALLBACK_SEARCH_NOT_FOUND"; + case LOK_CALLBACK_SEARCH_RESULT_COUNT: + return "LOK_CALLBACK_SEARCH_RESULT_COUNT"; case LOK_CALLBACK_DOCUMENT_SIZE_CHANGED: return "LOK_CALLBACK_DOCUMENT_SIZE_CHANGED"; case LOK_CALLBACK_SET_PART: @@ -363,6 +366,11 @@ searchNotFound(LOKDocView* pDocView, const std::string& rString) g_signal_emit(pDocView, doc_view_signals[SEARCH_NOT_FOUND], 0, rString.c_str()); } +static void searchResultCount(LOKDocView* pDocView, const std::string& rString) +{ + g_signal_emit(pDocView, doc_view_signals[SEARCH_RESULT_COUNT], 0, rString.c_str()); +} + static void setPart(LOKDocView* pDocView, const std::string& rString) { @@ -645,6 +653,11 @@ callback (gpointer pData) setPart(pDocView, pCallback->m_aPayload); } break; + case LOK_CALLBACK_SEARCH_RESULT_COUNT: + { + searchResultCount(pDocView, pCallback->m_aPayload); + } + break; default: g_assert(false); break; @@ -1841,6 +1854,21 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass) G_TYPE_NONE, 4, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT); + /** + * LOKDocView::search-result-count: + * @pDocView: the #LOKDocView on which the signal is emitted + * @aCommand: number of matches. + */ + doc_view_signals[SEARCH_RESULT_COUNT] = + g_signal_new("search-result_count", + G_TYPE_FROM_CLASS(pGObjectClass), + G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, + G_TYPE_STRING); + } SAL_DLLPUBLIC_EXPORT GtkWidget* -- 2.12.0