[Libreoffice-commits] core.git: Branch 'feature/lok_dialog' - libreofficekit/qa

Pranav Kant pranavk at collabora.co.uk
Thu Aug 3 17:29:53 UTC 2017


 libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx                 |   14 +++++++---
 libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.hxx                 |    2 -
 libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx |   14 +++++++++-
 3 files changed, 25 insertions(+), 5 deletions(-)

New commits:
commit 9c44a71a06cb2312fd24ffd7c48302f0ae7807c1
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Thu Aug 3 22:58:04 2017 +0530

    lokdialog: Move the floating window to its actual position
    
    gtk_window_move them to the position broadcasted to us by vcl
    
    Change-Id: Id27b52a24e721b51d7a153cc7c0e03197a99ee2f

diff --git a/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx b/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx
index 1bfb9d538ead..6b19ddc506c0 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx
@@ -460,7 +460,7 @@ gtv_lok_dialog_invalidate(GtvLokDialog* dialog)
     gtk_widget_queue_draw(priv->pDialogDrawingArea);
 }
 
-void gtv_lok_dialog_child_invalidate(GtvLokDialog* dialog)
+void gtv_lok_dialog_child_invalidate(GtvLokDialog* dialog, int nX, int nY)
 {
     g_info("Dialog's floating window invalidate");
 
@@ -474,14 +474,22 @@ void gtv_lok_dialog_child_invalidate(GtvLokDialog* dialog)
     gtk_container_add(GTK_CONTAINER(priv->pFloatingWin), pDrawingArea);
 
     gtk_window_set_transient_for(GTK_WINDOW(priv->pFloatingWin), GTK_WINDOW(dialog));
-    gtk_window_set_position(GTK_WINDOW(priv->pFloatingWin), GTK_WIN_POS_MOUSE);
     gtk_window_set_destroy_with_parent(GTK_WINDOW(priv->pFloatingWin), true);
-
     g_signal_connect(G_OBJECT(pDrawingArea), "draw", G_CALLBACK(gtv_lok_dialog_floating_win_draw), dialog);
 
     gtk_widget_set_size_request(priv->pFloatingWin, 1, 1);
+    gtk_window_set_type_hint(GTK_WINDOW(priv->pFloatingWin), GDK_WINDOW_TYPE_HINT_POPUP_MENU);
+    gtk_window_set_screen(GTK_WINDOW(priv->pFloatingWin), gtk_window_get_screen(GTK_WINDOW(dialog)));
+
     gtk_widget_show_all(priv->pFloatingWin);
     gtk_window_present(GTK_WINDOW(priv->pFloatingWin));
+
+    // Get the root coords of our new floating window
+    GdkWindow* pGdkWin = gtk_widget_get_window(GTK_WIDGET(dialog));
+    int nrX = 0;
+    int nrY = 0;
+    gdk_window_get_root_coords(pGdkWin, nX, nY, &nrX, &nrY);
+    gtk_window_move(GTK_WINDOW(priv->pFloatingWin), nrX, nrY);
 }
 
 void gtv_lok_dialog_child_close(GtvLokDialog* dialog)
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.hxx b/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.hxx
index bce9edbadba1..ba565b4cebb0 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.hxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.hxx
@@ -39,7 +39,7 @@ GtkWidget* gtv_lok_dialog_new(LOKDocView* pDocView, const gchar* dialogId);
 
 void gtv_lok_dialog_invalidate(GtvLokDialog* dialog);
 
-void gtv_lok_dialog_child_invalidate(GtvLokDialog* dialog);
+void gtv_lok_dialog_child_invalidate(GtvLokDialog* dialog, int nX, int nY);
 
 void gtv_lok_dialog_child_close(GtvLokDialog* dialog);
 
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx b/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx
index d0778cef473d..72916b56f9ce 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx
@@ -309,6 +309,18 @@ void LOKDocViewSigHandlers::dialogChild(LOKDocView* pDocView, gchar* pPayload, g
   boost::property_tree::read_json(aStream, aRoot);
   std::string aDialogId = aRoot.get<std::string>("dialogId");
   std::string aAction = aRoot.get<std::string>("action");
+  std::string aPos = aRoot.get<std::string>("position");
+  gchar** ppCoordinates = g_strsplit(aPos.c_str(), ", ", 2);
+  int nX = 0;
+  int nY = 0;
+
+  if (*ppCoordinates)
+      nX = atoi(*ppCoordinates);
+  ++ppCoordinates;
+  if (*ppCoordinates)
+      nY = atoi(*ppCoordinates);
+
+  g_strfreev(ppCoordinates);
 
   // temporary hack to invalidate/close floating window of all opened dialogs
   GList* pChildWins = gtv_application_window_get_all_child_windows(window);
@@ -316,7 +328,7 @@ void LOKDocViewSigHandlers::dialogChild(LOKDocView* pDocView, gchar* pPayload, g
   for (pIt = pChildWins; pIt != nullptr; pIt = pIt->next)
   {
       if (aAction == "invalidate")
-          gtv_lok_dialog_child_invalidate(GTV_LOK_DIALOG(pIt->data));
+          gtv_lok_dialog_child_invalidate(GTV_LOK_DIALOG(pIt->data), nX, nY);
       else if (aAction == "close")
           gtv_lok_dialog_child_close(GTV_LOK_DIALOG(pIt->data));
   }


More information about the Libreoffice-commits mailing list