From cc49e8fbf166ddea4944d1a5330f9d8442bee2e1 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Tue, 15 Sep 2015 12:21:10 +0200 Subject: [PATCH 128/398] gtktiledviwer: allow GtkToolItems in multiple windows Change-Id: I6c19a9bdd34163d12047929170e5cfa7bb9a5820 (cherry picked from commit 91d67ec9a5cc2064b90a888ed962d215bee5dc2d) --- .../qa/gtktiledviewer/gtktiledviewer.cxx | 88 ++++++++++++---------- 1 file changed, 48 insertions(+), 40 deletions(-) diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx index 2559d124c72a..09f16da396af 100644 --- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx @@ -30,11 +30,6 @@ static int help() return 1; } -static GtkToolItem* pEnableEditing; -static GtkToolItem* pBold; -static GtkToolItem* pItalic; -static GtkToolItem* pUnderline; -static GtkToolItem* pStrikethrough; static GtkWidget* pScrolledWindow; static std::map g_aToolItemCommandNames; static std::map g_aCommandNameToolItems; @@ -54,10 +49,20 @@ class TiledWindow public: GtkWidget* m_pDocView; GtkWidget* m_pStatusBar; + GtkToolItem* m_pEnableEditing; + GtkToolItem* m_pBold; + GtkToolItem* m_pItalic; + GtkToolItem* m_pUnderline; + GtkToolItem* m_pStrikethrough; TiledWindow() : m_pDocView(0), - m_pStatusBar(0) + m_pStatusBar(0), + m_pEnableEditing(0), + m_pBold(0), + m_pItalic(0), + m_pUnderline(0), + m_pStrikethrough(0) { } }; @@ -152,7 +157,7 @@ static void toggleEditing(GtkWidget* pButton, gpointer /*pItem*/) TiledWindow& rWindow = lcl_getTiledWindow(pButton); LOKDocView* pLOKDocView = LOK_DOC_VIEW(rWindow.m_pDocView); - bool bActive = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(pEnableEditing)); + bool bActive = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(rWindow.m_pEnableEditing)); if (bool(lok_doc_view_get_edit(pLOKDocView)) != bActive) lok_doc_view_set_edit(pLOKDocView, bActive); } @@ -292,10 +297,12 @@ static gboolean signalFindbar(GtkWidget* pWidget, GdkEventKey* pEvent, gpointer /// LOKDocView changed edit state -> inform the tool button. static void signalEdit(LOKDocView* pLOKDocView, gboolean bWasEdit, gpointer /*pData*/) { + TiledWindow& rWindow = lcl_getTiledWindow(GTK_WIDGET(pLOKDocView)); + gboolean bEdit = lok_doc_view_get_edit(pLOKDocView); g_info("signalEdit: %d -> %d", bWasEdit, lok_doc_view_get_edit(pLOKDocView)); - if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(pEnableEditing)) != bEdit) - gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(pEnableEditing), bEdit); + if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(rWindow.m_pEnableEditing)) != bEdit) + gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(rWindow.m_pEnableEditing), bEdit); } /// LOKDocView changed command state -> inform the tool button. @@ -531,6 +538,7 @@ int main( int argc, char* argv[] ) gtk_init( &argc, &argv ); GtkWidget *pWindow = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + TiledWindow aWindow; gtk_window_set_title( GTK_WINDOW(pWindow), "LibreOfficeKit GTK Tiled Viewer" ); gtk_window_set_default_size(GTK_WINDOW(pWindow), 1024, 768); g_signal_connect( pWindow, "destroy", G_CALLBACK(gtk_main_quit), NULL ); @@ -588,7 +596,8 @@ int main( int argc, char* argv[] ) g_signal_connect(G_OBJECT(pCopyButton), "clicked", G_CALLBACK(doCopy), NULL); gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), gtk_separator_tool_item_new(), -1); - pEnableEditing = gtk_toggle_tool_button_new(); + GtkToolItem* pEnableEditing = gtk_toggle_tool_button_new(); + aWindow.m_pEnableEditing = pEnableEditing; gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (pEnableEditing), "insert-text-symbolic"); gtk_tool_item_set_tooltip_text(pEnableEditing, "Edit"); gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), pEnableEditing, -1); @@ -608,33 +617,33 @@ int main( int argc, char* argv[] ) gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), gtk_separator_tool_item_new(), -1); - pBold = gtk_toggle_tool_button_new(); - gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (pBold), "format-text-bold-symbolic"); - gtk_tool_item_set_tooltip_text(pBold, "Bold"); - gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), pBold, -1); - g_signal_connect(G_OBJECT(pBold), "toggled", G_CALLBACK(toggleToolItem), NULL); - lcl_registerToolItem(pBold, ".uno:Bold"); - - pItalic = gtk_toggle_tool_button_new(); - gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (pItalic), "format-text-italic-symbolic"); - gtk_tool_item_set_tooltip_text(pItalic, "Italic"); - gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), pItalic, -1); - g_signal_connect(G_OBJECT(pItalic), "toggled", G_CALLBACK(toggleToolItem), NULL); - lcl_registerToolItem(pItalic, ".uno:Italic"); - - pUnderline = gtk_toggle_tool_button_new(); - gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (pUnderline), "format-text-underline-symbolic"); - gtk_tool_item_set_tooltip_text(pUnderline, "Underline"); - gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), pUnderline, -1); - g_signal_connect(G_OBJECT(pUnderline), "toggled", G_CALLBACK(toggleToolItem), NULL); - lcl_registerToolItem(pUnderline, ".uno:Underline"); - - pStrikethrough = gtk_toggle_tool_button_new (); - gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (pStrikethrough), "format-text-strikethrough-symbolic"); - gtk_tool_item_set_tooltip_text(pStrikethrough, "Strikethrough"); - gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), pStrikethrough, -1); - g_signal_connect(G_OBJECT(pStrikethrough), "toggled", G_CALLBACK(toggleToolItem), NULL); - lcl_registerToolItem(pStrikethrough, ".uno:Strikeout"); + aWindow.m_pBold = gtk_toggle_tool_button_new(); + gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (aWindow.m_pBold), "format-text-bold-symbolic"); + gtk_tool_item_set_tooltip_text(aWindow.m_pBold, "Bold"); + gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), aWindow.m_pBold, -1); + g_signal_connect(G_OBJECT(aWindow.m_pBold), "toggled", G_CALLBACK(toggleToolItem), NULL); + lcl_registerToolItem(aWindow.m_pBold, ".uno:Bold"); + + aWindow.m_pItalic = gtk_toggle_tool_button_new(); + gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (aWindow.m_pItalic), "format-text-italic-symbolic"); + gtk_tool_item_set_tooltip_text(aWindow.m_pItalic, "Italic"); + gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), aWindow.m_pItalic, -1); + g_signal_connect(G_OBJECT(aWindow.m_pItalic), "toggled", G_CALLBACK(toggleToolItem), NULL); + lcl_registerToolItem(aWindow.m_pItalic, ".uno:Italic"); + + aWindow.m_pUnderline = gtk_toggle_tool_button_new(); + gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (aWindow.m_pUnderline), "format-text-underline-symbolic"); + gtk_tool_item_set_tooltip_text(aWindow.m_pUnderline, "Underline"); + gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), aWindow.m_pUnderline, -1); + g_signal_connect(G_OBJECT(aWindow.m_pUnderline), "toggled", G_CALLBACK(toggleToolItem), NULL); + lcl_registerToolItem(aWindow.m_pUnderline, ".uno:Underline"); + + aWindow.m_pStrikethrough = gtk_toggle_tool_button_new (); + gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(aWindow.m_pStrikethrough), "format-text-strikethrough-symbolic"); + gtk_tool_item_set_tooltip_text(aWindow.m_pStrikethrough, "Strikethrough"); + gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), aWindow.m_pStrikethrough, -1); + g_signal_connect(G_OBJECT(aWindow.m_pStrikethrough), "toggled", G_CALLBACK(toggleToolItem), NULL); + lcl_registerToolItem(aWindow.m_pStrikethrough, ".uno:Strikeout"); gtk_box_pack_start( GTK_BOX(pVBox), pToolbar, FALSE, FALSE, 0 ); // Adds to top. @@ -672,6 +681,7 @@ int main( int argc, char* argv[] ) // Docview GtkWidget* pDocView = lok_doc_view_new (argv[1], NULL, NULL); + aWindow.m_pDocView = pDocView; #if GLIB_CHECK_VERSION(2,40,0) g_assert_nonnull(pDocView); #endif @@ -697,6 +707,7 @@ int main( int argc, char* argv[] ) g_signal_connect(pDocView, "load-changed", G_CALLBACK(loadChanged), pProgressBar); GtkWidget* pStatusBar = gtk_statusbar_new (); + aWindow.m_pStatusBar = pStatusBar; gtk_container_forall(GTK_CONTAINER(pStatusBar), removeChildrenFromStatusbar, pStatusBar); gtk_container_add (GTK_CONTAINER(pVBox), pStatusBar); gtk_container_add (GTK_CONTAINER(pStatusBar), pProgressBar); @@ -706,9 +717,6 @@ int main( int argc, char* argv[] ) // Hide the findbar by default. gtk_widget_hide(pFindbar); - TiledWindow aWindow; - aWindow.m_pDocView = pDocView; - aWindow.m_pStatusBar = pStatusBar; g_aWindows[pWindow] = aWindow; lok_doc_view_open_document( LOK_DOC_VIEW(pDocView), argv[2], NULL, openDocumentCallback, pDocView ); -- 2.12.0