Blame SOURCES/0001-Related-rhbz-1290014-gtk3-use-gtk_window_set_modal-o.patch

a9add1
From 8a30dab4e78b42cf3ce587965414b98a50830a78 Mon Sep 17 00:00:00 2001
a9add1
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
a9add1
Date: Mon, 14 Dec 2015 11:36:50 +0000
a9add1
Subject: [PATCH 1/2] Related: rhbz#1290014 gtk3: use gtk_window_set_modal on
a9add1
 modal dialogs
a9add1
MIME-Version: 1.0
a9add1
Content-Type: text/plain; charset=UTF-8
a9add1
Content-Transfer-Encoding: 8bit
a9add1
a9add1
which makes modal dialogs (which are most of them) place correctly
a9add1
under wayland. Modeless ones are still uselessly shoved far to the
a9add1
left, but this makes things near usable and gives the same "graying
a9add1
into the bg" effect for the main window as other gtk apps
a9add1
a9add1
Change-Id: If1486feb7631c5a0c2aa6efac3a6b9dd1b215daf
a9add1
Reviewed-on: https://gerrit.libreoffice.org/20699
a9add1
Tested-by: Jenkins <ci@libreoffice.org>
a9add1
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
a9add1
Tested-by: Caolán McNamara <caolanm@redhat.com>
a9add1
(cherry picked from commit 8d5822983e9b6a1e04874ce4d2c807fd0cf1ee04)
a9add1
Reviewed-on: https://gerrit.libreoffice.org/20700
a9add1
---
a9add1
 vcl/inc/salframe.hxx          | 4 ++++
a9add1
 vcl/inc/unx/gtk/gtkframe.hxx  | 4 ++++
a9add1
 vcl/source/window/dialog.cxx  | 3 ++-
a9add1
 vcl/unx/gtk3/gtk3gtkframe.cxx | 7 +++++++
a9add1
 4 files changed, 17 insertions(+), 1 deletion(-)
a9add1
a9add1
diff --git a/vcl/inc/salframe.hxx b/vcl/inc/salframe.hxx
a9add1
index 4e52fe4..484504c 100644
a9add1
--- a/vcl/inc/salframe.hxx
a9add1
+++ b/vcl/inc/salframe.hxx
a9add1
@@ -233,6 +233,10 @@ public:
a9add1
     // done setting up the clipregion
a9add1
     virtual void            EndSetClipRegion() = 0;
a9add1
 
a9add1
+    virtual void            SetModal(bool /*bModal*/)
a9add1
+    {
a9add1
+    }
a9add1
+
a9add1
     // Callbacks (indepent part in vcl/source/window/winproc.cxx)
a9add1
     // for default message handling return 0
a9add1
     void                    SetCallback( vcl::Window* pWindow, SALFRAMEPROC pProc );
a9add1
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
a9add1
index 3bd5353..ee19e6c 100644
a9add1
--- a/vcl/inc/unx/gtk/gtkframe.hxx
a9add1
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
a9add1
@@ -465,6 +465,10 @@ public:
a9add1
     // done setting up the clipregion
a9add1
     virtual void                EndSetClipRegion() SAL_OVERRIDE;
a9add1
 
a9add1
+#if GTK_CHECK_VERSION(3,0,0)
a9add1
+    virtual void                SetModal(bool bModal) override;
a9add1
+#endif
a9add1
+
a9add1
     static GtkSalFrame         *getFromWindow( GtkWindow *pWindow );
a9add1
 
a9add1
     virtual Window              GetX11Window() SAL_OVERRIDE;
a9add1
diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx
a9add1
index 4ce15de..cd1f0da 100644
a9add1
--- a/vcl/source/window/dialog.cxx
a9add1
+++ b/vcl/source/window/dialog.cxx
a9add1
@@ -46,6 +46,7 @@
a9add1
 #include <vcl/msgbox.hxx>
a9add1
 #include <vcl/unowrap.hxx>
a9add1
 #include <vcl/settings.hxx>
a9add1
+#include <salframe.hxx>
a9add1
 
a9add1
 #include <iostream>
a9add1
 
a9add1
@@ -1001,7 +1002,6 @@ void Dialog::SetModalInputMode( bool bModal )
a9add1
             mpDialogParent = pParent->mpWindowImpl->mpFrameWindow;
a9add1
             mpDialogParent->ImplIncModalCount();
a9add1
         }
a9add1
-
a9add1
     }
a9add1
     else
a9add1
     {
a9add1
@@ -1037,6 +1037,7 @@ void Dialog::SetModalInputMode( bool bModal )
a9add1
             }
a9add1
         }
a9add1
     }
a9add1
+    ImplGetFrame()->SetModal(bModal);
a9add1
 }
a9add1
 
a9add1
 void Dialog::SetModalInputMode( bool bModal, bool bSubModalDialogs )
a9add1
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
a9add1
index 1443054..ca9d371 100644
a9add1
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
a9add1
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
a9add1
@@ -2616,6 +2616,13 @@ void GtkSalFrame::EndSetClipRegion()
a9add1
         gdk_window_shape_combine_region( widget_get_window(m_pWindow), m_pRegion, 0, 0 );
a9add1
 }
a9add1
 
a9add1
+void GtkSalFrame::SetModal(bool bModal)
a9add1
+{
a9add1
+    if (!m_pWindow)
a9add1
+        return;
a9add1
+    gtk_window_set_modal(GTK_WINDOW(m_pWindow), bModal);
a9add1
+}
a9add1
+
a9add1
 gboolean GtkSalFrame::signalButton( GtkWidget*, GdkEventButton* pEvent, gpointer frame )
a9add1
 {
a9add1
     GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame);
a9add1
-- 
a9add1
2.5.0
a9add1