kbrown / rpms / libreoffice

Forked from rpms/libreoffice 2 years ago
Clone

Blame SOURCES/0131-gtktiledviewer-allow-findbar-in-multiple-windows.patch

f325b2
From 1ce8cd9be395ac818a151a7618121e9b203bc159 Mon Sep 17 00:00:00 2001
f325b2
From: Miklos Vajna <vmiklos@collabora.co.uk>
f325b2
Date: Tue, 15 Sep 2015 12:53:24 +0200
f325b2
Subject: [PATCH 131/398] gtktiledviewer: allow findbar in multiple windows
f325b2
f325b2
With this, all previously global data is now stored per-window in the
f325b2
g_aWindows map.
f325b2
f325b2
Change-Id: I45b4449ee7d516106ea0b039d1af97db49edf759
f325b2
(cherry picked from commit d51e3f7877afe62b68071a694438d2d6722bb406)
f325b2
---
f325b2
 .../qa/gtktiledviewer/gtktiledviewer.cxx           | 67 ++++++++++++----------
f325b2
 1 file changed, 36 insertions(+), 31 deletions(-)
f325b2
f325b2
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
f325b2
index 3e72c13470a8..efbb90800301 100644
f325b2
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
f325b2
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
f325b2
@@ -30,10 +30,6 @@ static int help()
f325b2
     return 1;
f325b2
 }
f325b2
 
f325b2
-static GtkWidget* pFindbar;
f325b2
-static GtkWidget* pFindbarEntry;
f325b2
-static GtkWidget* pFindbarLabel;
f325b2
-
f325b2
 /// Represents all the state that is specific to one GtkWindow of this app.
f325b2
 class TiledWindow
f325b2
 {
f325b2
@@ -54,6 +50,9 @@ public:
f325b2
     GtkWidget* m_pPartModeComboBox;
f325b2
     /// Should the part selector avoid calling lok::Document::setPart()?
f325b2
     bool m_bPartSelectorBroadcast;
f325b2
+    GtkWidget* m_pFindbar;
f325b2
+    GtkWidget* m_pFindbarEntry;
f325b2
+    GtkWidget* m_pFindbarLabel;
f325b2
 
f325b2
     TiledWindow()
f325b2
         : m_pDocView(0),
f325b2
@@ -68,7 +67,10 @@ public:
f325b2
         m_pVBox(0),
f325b2
         m_pPartSelector(0),
f325b2
         m_pPartModeComboBox(0),
f325b2
-        m_bPartSelectorBroadcast(true)
f325b2
+        m_bPartSelectorBroadcast(true),
f325b2
+        m_pFindbar(0),
f325b2
+        m_pFindbarEntry(0),
f325b2
+        m_pFindbarLabel(0)
f325b2
     {
f325b2
     }
f325b2
 };
f325b2
@@ -173,16 +175,17 @@ static void toggleEditing(GtkWidget* pButton, gpointer /*pItem*/)
f325b2
 }
f325b2
 
f325b2
 /// Toggle the visibility of the findbar.
f325b2
-static void toggleFindbar(GtkWidget* /*pButton*/, gpointer /*pItem*/)
f325b2
+static void toggleFindbar(GtkWidget* pButton, gpointer /*pItem*/)
f325b2
 {
f325b2
-    if (gtk_widget_get_visible(pFindbar))
f325b2
+    TiledWindow& rWindow = lcl_getTiledWindow(pButton);
f325b2
+    if (gtk_widget_get_visible(rWindow.m_pFindbar))
f325b2
     {
f325b2
-        gtk_widget_hide(pFindbar);
f325b2
+        gtk_widget_hide(rWindow.m_pFindbar);
f325b2
     }
f325b2
     else
f325b2
     {
f325b2
-        gtk_widget_show_all(pFindbar);
f325b2
-        gtk_widget_grab_focus(pFindbarEntry);
f325b2
+        gtk_widget_show_all(rWindow.m_pFindbar);
f325b2
+        gtk_widget_grab_focus(rWindow.m_pFindbarEntry);
f325b2
     }
f325b2
 }
f325b2
 
f325b2
@@ -244,10 +247,11 @@ static void doCopy(GtkWidget* pButton, gpointer /*pItem*/)
f325b2
 }
f325b2
 
f325b2
 
f325b2
-/// Searches for the next or previous text of pFindbarEntry.
f325b2
+/// Searches for the next or previous text of TiledWindow::m_pFindbarEntry.
f325b2
 static void doSearch(GtkWidget* pButton, bool bBackwards)
f325b2
 {
f325b2
-    GtkEntry* pEntry = GTK_ENTRY(pFindbarEntry);
f325b2
+    TiledWindow& rWindow = lcl_getTiledWindow(pButton);
f325b2
+    GtkEntry* pEntry = GTK_ENTRY(rWindow.m_pFindbarEntry);
f325b2
     const char* pText = gtk_entry_get_text(pEntry);
f325b2
     boost::property_tree::ptree aTree;
f325b2
     aTree.put(boost::property_tree::ptree::path_type("SearchItem.SearchString/type", '/'), "string");
f325b2
@@ -255,7 +259,6 @@ static void doSearch(GtkWidget* pButton, bool bBackwards)
f325b2
     aTree.put(boost::property_tree::ptree::path_type("SearchItem.Backward/type", '/'), "boolean");
f325b2
     aTree.put(boost::property_tree::ptree::path_type("SearchItem.Backward/value", '/'), bBackwards);
f325b2
 
f325b2
-    TiledWindow& rWindow = lcl_getTiledWindow(pButton);
f325b2
     LOKDocView* pLOKDocView = LOK_DOC_VIEW(rWindow.m_pDocView);
f325b2
     GdkRectangle aArea;
f325b2
     getVisibleAreaTwips(rWindow.m_pDocView, &aArea);
f325b2
@@ -285,7 +288,8 @@ static void signalSearchPrev(GtkWidget* pButton, gpointer /*pItem*/)
f325b2
 /// Handles the key-press-event of the search entry widget.
f325b2
 static gboolean signalFindbar(GtkWidget* pWidget, GdkEventKey* pEvent, gpointer /*pData*/)
f325b2
 {
f325b2
-    gtk_label_set_text(GTK_LABEL(pFindbarLabel), "");
f325b2
+    TiledWindow& rWindow = lcl_getTiledWindow(pWidget);
f325b2
+    gtk_label_set_text(GTK_LABEL(rWindow.m_pFindbarLabel), "");
f325b2
     switch(pEvent->keyval)
f325b2
     {
f325b2
         case GDK_KEY_Return:
f325b2
@@ -297,7 +301,7 @@ static gboolean signalFindbar(GtkWidget* pWidget, GdkEventKey* pEvent, gpointer
f325b2
         case GDK_KEY_Escape:
f325b2
         {
f325b2
             // Hide the findbar.
f325b2
-            gtk_widget_hide(pFindbar);
f325b2
+            gtk_widget_hide(rWindow.m_pFindbar);
f325b2
             return TRUE;
f325b2
         }
f325b2
     }
f325b2
@@ -350,9 +354,10 @@ static void loadChanged(LOKDocView* /*pLOKDocView*/, gdouble fValue, gpointer pD
f325b2
 }
f325b2
 
f325b2
 /// LOKDocView found no search matches -> set the search label accordingly.
f325b2
-static void signalSearch(LOKDocView* /*pLOKDocView*/, char* /*pPayload*/, gpointer /*pData*/)
f325b2
+static void signalSearch(LOKDocView* pLOKDocView, char* /*pPayload*/, gpointer /*pData*/)
f325b2
 {
f325b2
-    gtk_label_set_text(GTK_LABEL(pFindbarLabel), "Search key not found");
f325b2
+    TiledWindow& rWindow = lcl_getTiledWindow(GTK_WIDGET(pLOKDocView));
f325b2
+    gtk_label_set_text(GTK_LABEL(rWindow.m_pFindbarLabel), "Search key not found");
f325b2
 }
f325b2
 
f325b2
 
f325b2
@@ -666,36 +671,36 @@ int main( int argc, char* argv[] )
f325b2
     gtk_box_pack_start( GTK_BOX(aWindow.m_pVBox), pToolbar, FALSE, FALSE, 0 ); // Adds to top.
f325b2
 
f325b2
     // Findbar
f325b2
-    pFindbar = gtk_toolbar_new();
f325b2
-    gtk_toolbar_set_style(GTK_TOOLBAR(pFindbar), GTK_TOOLBAR_ICONS);
f325b2
+    aWindow.m_pFindbar = gtk_toolbar_new();
f325b2
+    gtk_toolbar_set_style(GTK_TOOLBAR(aWindow.m_pFindbar), GTK_TOOLBAR_ICONS);
f325b2
 
f325b2
     GtkToolItem* pFindbarClose = gtk_tool_button_new( NULL, NULL);
f325b2
     gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (pFindbarClose), "window-close-symbolic");
f325b2
-    gtk_toolbar_insert(GTK_TOOLBAR(pFindbar), pFindbarClose, -1);
f325b2
+    gtk_toolbar_insert(GTK_TOOLBAR(aWindow.m_pFindbar), pFindbarClose, -1);
f325b2
     g_signal_connect(G_OBJECT(pFindbarClose), "clicked", G_CALLBACK(toggleFindbar), NULL);
f325b2
 
f325b2
     GtkToolItem* pEntryContainer = gtk_tool_item_new();
f325b2
-    pFindbarEntry = gtk_entry_new();
f325b2
-    gtk_container_add(GTK_CONTAINER(pEntryContainer), pFindbarEntry);
f325b2
-    g_signal_connect(pFindbarEntry, "key-press-event", G_CALLBACK(signalFindbar), 0);
f325b2
-    gtk_toolbar_insert(GTK_TOOLBAR(pFindbar), pEntryContainer, -1);
f325b2
+    aWindow.m_pFindbarEntry = gtk_entry_new();
f325b2
+    gtk_container_add(GTK_CONTAINER(pEntryContainer), aWindow.m_pFindbarEntry);
f325b2
+    g_signal_connect(aWindow.m_pFindbarEntry, "key-press-event", G_CALLBACK(signalFindbar), 0);
f325b2
+    gtk_toolbar_insert(GTK_TOOLBAR(aWindow.m_pFindbar), pEntryContainer, -1);
f325b2
 
f325b2
     GtkToolItem* pFindbarNext = gtk_tool_button_new( NULL, NULL);
f325b2
     gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (pFindbarNext), "go-down-symbolic");
f325b2
-    gtk_toolbar_insert(GTK_TOOLBAR(pFindbar), pFindbarNext, -1);
f325b2
+    gtk_toolbar_insert(GTK_TOOLBAR(aWindow.m_pFindbar), pFindbarNext, -1);
f325b2
     g_signal_connect(G_OBJECT(pFindbarNext), "clicked", G_CALLBACK(signalSearchNext), NULL);
f325b2
 
f325b2
     GtkToolItem* pFindbarPrev = gtk_tool_button_new( NULL, NULL);
f325b2
     gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (pFindbarPrev), "go-up-symbolic");
f325b2
-    gtk_toolbar_insert(GTK_TOOLBAR(pFindbar), pFindbarPrev, -1);
f325b2
+    gtk_toolbar_insert(GTK_TOOLBAR(aWindow.m_pFindbar), pFindbarPrev, -1);
f325b2
     g_signal_connect(G_OBJECT(pFindbarPrev), "clicked", G_CALLBACK(signalSearchPrev), NULL);
f325b2
 
f325b2
     GtkToolItem* pFindbarLabelContainer = gtk_tool_item_new();
f325b2
-    pFindbarLabel = gtk_label_new("");
f325b2
-    gtk_container_add(GTK_CONTAINER(pFindbarLabelContainer), pFindbarLabel);
f325b2
-    gtk_toolbar_insert(GTK_TOOLBAR(pFindbar), pFindbarLabelContainer, -1);
f325b2
+    aWindow.m_pFindbarLabel = gtk_label_new("");
f325b2
+    gtk_container_add(GTK_CONTAINER(pFindbarLabelContainer), aWindow.m_pFindbarLabel);
f325b2
+    gtk_toolbar_insert(GTK_TOOLBAR(aWindow.m_pFindbar), pFindbarLabelContainer, -1);
f325b2
 
f325b2
-    gtk_box_pack_end(GTK_BOX(aWindow.m_pVBox), pFindbar, FALSE, FALSE, 0);
f325b2
+    gtk_box_pack_end(GTK_BOX(aWindow.m_pVBox), aWindow.m_pFindbar, FALSE, FALSE, 0);
f325b2
 
f325b2
     // Docview
f325b2
     GtkWidget* pDocView = lok_doc_view_new (argv[1], NULL, NULL);
f325b2
@@ -733,7 +738,7 @@ int main( int argc, char* argv[] )
f325b2
 
f325b2
     gtk_widget_show_all( pWindow );
f325b2
     // Hide the findbar by default.
f325b2
-    gtk_widget_hide(pFindbar);
f325b2
+    gtk_widget_hide(aWindow.m_pFindbar);
f325b2
 
f325b2
     g_aWindows[pWindow] = aWindow;
f325b2
 
f325b2
-- 
f325b2
2.12.0
f325b2