From 44a5de2fbdee39d81bb0fdbd74ba6179b40d77d9 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Tue, 15 Sep 2015 12:36:49 +0200 Subject: [PATCH 129/398] gtktiledviwer: tool item registration is per-window Change-Id: I11a6cda7b9b8949c48c201c4bd467b49f2f43ca5 (cherry picked from commit bec8a1b74f91ffc579567f44a65b903bc854ec4f) --- .../qa/gtktiledviewer/gtktiledviewer.cxx | 71 +++++++++++++--------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx index 09f16da396af..ef3aee008cae 100644 --- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx @@ -30,10 +30,6 @@ static int help() return 1; } -static GtkWidget* pScrolledWindow; -static std::map g_aToolItemCommandNames; -static std::map g_aCommandNameToolItems; -static bool g_bToolItemBroadcast = true; static GtkWidget* pVBox; static GtkComboBoxText* pPartSelector; static GtkWidget* pPartModeComboBox; @@ -54,6 +50,10 @@ public: GtkToolItem* m_pItalic; GtkToolItem* m_pUnderline; GtkToolItem* m_pStrikethrough; + GtkWidget* m_pScrolledWindow; + std::map m_aToolItemCommandNames; + std::map m_aCommandNameToolItems; + bool m_bToolItemBroadcast; TiledWindow() : m_pDocView(0), @@ -62,7 +62,9 @@ public: m_pBold(0), m_pItalic(0), m_pUnderline(0), - m_pStrikethrough(0) + m_pStrikethrough(0), + m_pScrolledWindow(0), + m_bToolItemBroadcast(true) { } }; @@ -71,13 +73,15 @@ static std::map g_aWindows; static TiledWindow& lcl_getTiledWindow(GtkWidget* pWidget) { - return g_aWindows[gtk_widget_get_toplevel(pWidget)]; + GtkWidget* pToplevel = gtk_widget_get_toplevel(pWidget); + assert(g_aWindows.find(pToplevel) != g_aWindows.end()); + return g_aWindows[pToplevel]; } -static void lcl_registerToolItem(GtkToolItem* pItem, const std::string& rName) +static void lcl_registerToolItem(TiledWindow& rWindow, GtkToolItem* pItem, const std::string& rName) { - g_aToolItemCommandNames[pItem] = rName; - g_aCommandNameToolItems[rName] = pItem; + rWindow.m_aToolItemCommandNames[pItem] = rName; + rWindow.m_aCommandNameToolItems[rName] = pItem; } const float fZooms[] = { 0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 3.0, 5.0 }; @@ -87,8 +91,10 @@ const float fZooms[] = { 0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 3.0, 5.0 }; static void getVisibleAreaTwips(GtkWidget* pDocView, GdkRectangle* pArea) { #if GTK_CHECK_VERSION(2,14,0) // we need gtk_adjustment_get_page_size() - GtkAdjustment* pHAdjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(pScrolledWindow)); - GtkAdjustment* pVAdjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(pScrolledWindow)); + TiledWindow& rWindow = lcl_getTiledWindow(pDocView); + + GtkAdjustment* pHAdjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(rWindow.m_pScrolledWindow)); + GtkAdjustment* pVAdjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(rWindow.m_pScrolledWindow)); pArea->x = lok_doc_view_pixel_to_twip(LOK_DOC_VIEW(pDocView), gtk_adjustment_get_value(pHAdjustment)); @@ -306,8 +312,10 @@ static void signalEdit(LOKDocView* pLOKDocView, gboolean bWasEdit, gpointer /*pD } /// LOKDocView changed command state -> inform the tool button. -static void signalCommand(LOKDocView* /*pLOKDocView*/, char* pPayload, gpointer /*pData*/) +static void signalCommand(LOKDocView* pLOKDocView, char* pPayload, gpointer /*pData*/) { + TiledWindow& rWindow = lcl_getTiledWindow(GTK_WIDGET(pLOKDocView)); + std::string aPayload(pPayload); size_t nPosition = aPayload.find("="); if (nPosition != std::string::npos) @@ -316,16 +324,16 @@ static void signalCommand(LOKDocView* /*pLOKDocView*/, char* pPayload, gpointer std::string aValue = aPayload.substr(nPosition + 1); g_info("signalCommand: '%s' is '%s'", aKey.c_str(), aValue.c_str()); - if (g_aCommandNameToolItems.find(aKey) != g_aCommandNameToolItems.end()) + if (rWindow.m_aCommandNameToolItems.find(aKey) != rWindow.m_aCommandNameToolItems.end()) { - GtkToolItem* pItem = g_aCommandNameToolItems[aKey]; + GtkToolItem* pItem = rWindow.m_aCommandNameToolItems[aKey]; gboolean bEdit = aValue == "true"; if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(pItem)) != bEdit) { // Avoid invoking lok_doc_view_post_command(). - g_bToolItemBroadcast = false; + rWindow.m_bToolItemBroadcast = false; gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(pItem), bEdit); - g_bToolItemBroadcast = true; + rWindow.m_bToolItemBroadcast = true; } } } @@ -367,8 +375,10 @@ static void signalHyperlink(LOKDocView* /*pLOKDocView*/, char* pPayload, gpointe static void cursorChanged(LOKDocView* pDocView, gint nX, gint nY, gint /*nWidth*/, gint /*nHeight*/, gpointer /*pData*/) { - GtkAdjustment* vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(pScrolledWindow)); - GtkAdjustment* hadj = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(pScrolledWindow)); + TiledWindow& rWindow = lcl_getTiledWindow(GTK_WIDGET(pDocView)); + + GtkAdjustment* vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(rWindow.m_pScrolledWindow)); + GtkAdjustment* hadj = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(rWindow.m_pScrolledWindow)); GdkRectangle visArea; gdouble upper; gint x = -1, y = -1; @@ -413,12 +423,13 @@ static void cursorChanged(LOKDocView* pDocView, gint nX, gint nY, static void toggleToolItem(GtkWidget* pWidget, gpointer /*pData*/) { - if (g_bToolItemBroadcast) + TiledWindow& rWindow = lcl_getTiledWindow(pWidget); + + if (rWindow.m_bToolItemBroadcast) { - TiledWindow& rWindow = lcl_getTiledWindow(pWidget); LOKDocView* pLOKDocView = LOK_DOC_VIEW(rWindow.m_pDocView); GtkToolItem* pItem = GTK_TOOL_ITEM(pWidget); - const std::string& rString = g_aToolItemCommandNames[pItem]; + const std::string& rString = rWindow.m_aToolItemCommandNames[pItem]; g_info("toggleToolItem: lok_doc_view_post_command('%s')", rString.c_str()); lok_doc_view_post_command(pLOKDocView, rString.c_str(), 0); } @@ -622,28 +633,28 @@ int main( int argc, char* argv[] ) 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"); + lcl_registerToolItem(aWindow, 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"); + lcl_registerToolItem(aWindow, 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"); + lcl_registerToolItem(aWindow, 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"); + lcl_registerToolItem(aWindow, aWindow.m_pStrikethrough, ".uno:Strikeout"); gtk_box_pack_start( GTK_BOX(pVBox), pToolbar, FALSE, FALSE, 0 ); // Adds to top. @@ -696,12 +707,12 @@ int main( int argc, char* argv[] ) // Scrolled window for DocView - pScrolledWindow = gtk_scrolled_window_new(0, 0); - gtk_widget_set_hexpand (pScrolledWindow, TRUE); - gtk_widget_set_vexpand (pScrolledWindow, TRUE); - gtk_container_add(GTK_CONTAINER(pVBox), pScrolledWindow); + aWindow.m_pScrolledWindow = gtk_scrolled_window_new(0, 0); + gtk_widget_set_hexpand (aWindow.m_pScrolledWindow, TRUE); + gtk_widget_set_vexpand (aWindow.m_pScrolledWindow, TRUE); + gtk_container_add(GTK_CONTAINER(pVBox), aWindow.m_pScrolledWindow); - gtk_container_add(GTK_CONTAINER(pScrolledWindow), pDocView); + gtk_container_add(GTK_CONTAINER(aWindow.m_pScrolledWindow), pDocView); GtkWidget* pProgressBar = gtk_progress_bar_new (); g_signal_connect(pDocView, "load-changed", G_CALLBACK(loadChanged), pProgressBar); -- 2.12.0