summaryrefslogtreecommitdiffstats
path: root/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx')
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx48
1 files changed, 48 insertions, 0 deletions
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx b/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx
index fbe5746ddf1e..ab28f23578ec 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx
@@ -36,6 +36,8 @@ struct GtvApplicationWindowPrivate
gboolean toolbarBroadcast;
gboolean partSelectorBroadcast;
+ GList* m_pChildWindows;
+
// Rendering args; options with which lokdocview was rendered in this window
GtvRenderingArgs* m_pRenderingArgs;
};
@@ -105,6 +107,7 @@ gtv_application_window_init(GtvApplicationWindow* win)
gtk_container_add(GTK_CONTAINER(win), priv->container);
+ priv->m_pChildWindows = nullptr;
priv->m_pRenderingArgs = new GtvRenderingArgs();
}
@@ -311,6 +314,7 @@ static void setupDocView(GtvApplicationWindow* window)
g_signal_connect(window->lokdocview, "formula-changed", G_CALLBACK(LOKDocViewSigHandlers::formulaChanged), nullptr);
g_signal_connect(window->lokdocview, "password-required", G_CALLBACK(LOKDocViewSigHandlers::passwordRequired), nullptr);
g_signal_connect(window->lokdocview, "comment", G_CALLBACK(LOKDocViewSigHandlers::comment), nullptr);
+ g_signal_connect(window->lokdocview, "dialog-invalidate", G_CALLBACK(LOKDocViewSigHandlers::dialogInvalidate), nullptr);
g_signal_connect(window->lokdocview, "configure-event", G_CALLBACK(LOKDocViewSigHandlers::configureEvent), nullptr);
}
@@ -394,6 +398,50 @@ gtv_application_window_get_part_broadcast(GtvApplicationWindow* window)
return priv->partSelectorBroadcast;
}
+void
+gtv_application_window_register_child_window(GtvApplicationWindow* window, GtkWindow* pChildWin)
+{
+ GtvApplicationWindowPrivate* priv = getPrivate(window);
+ if (pChildWin)
+ priv->m_pChildWindows = g_list_append(priv->m_pChildWindows, pChildWin);
+}
+
+void
+gtv_application_window_unregister_child_window(GtvApplicationWindow* window, GtkWindow* pChildWin)
+{
+ GtvApplicationWindowPrivate* priv = getPrivate(window);
+ if (pChildWin)
+ priv->m_pChildWindows = g_list_remove(priv->m_pChildWindows, pChildWin);
+}
+
+GtkWindow*
+gtv_application_window_get_child_window_by_id(GtvApplicationWindow* window, const gchar* pWinId)
+{
+ GtvApplicationWindowPrivate* priv = getPrivate(window);
+ GList* pIt = nullptr;
+ GtkWindow* ret = nullptr;
+ // For now, only dialogs are registered as child window
+ for (pIt = priv->m_pChildWindows; pIt != nullptr; pIt = pIt->next)
+ {
+ gchar* dialogId = nullptr;
+ g_object_get(G_OBJECT(pIt->data), "dialogid", &dialogId, nullptr);
+
+ // prepend .uno:
+ gchar* completeWinId = nullptr;
+ if (pWinId != nullptr)
+ {
+ completeWinId = g_strconcat(".uno:", pWinId, nullptr);
+ }
+
+ if (dialogId != nullptr && g_str_equal(dialogId, completeWinId))
+ {
+ ret = GTK_WINDOW(pIt->data);
+ break;
+ }
+ }
+ return ret;
+}
+
GtvApplicationWindow*
gtv_application_window_new(GtkApplication* app)
{