summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-12-14 11:36:50 +0000
committerCaolán McNamara <caolanm@redhat.com>2015-12-14 12:28:02 +0000
commitb8ef286781dd107bcb0cbd065979bd53f176db27 (patch)
tree90377d0e20ebac5a7f1671945d67aa81ca4b0bb1 /vcl
parent02d09f424cac957e2d214a3fc6eebac14b3852a7 (diff)
Related: rhbz#1290014 gtk3: use gtk_window_set_modal on modal dialogs
which makes modal dialogs (which are most of them) place correctly under wayland. Modeless ones are still uselessly shoved far to the left, but this makes things near usable and gives the same "graying into the bg" effect for the main window as other gtk apps Change-Id: If1486feb7631c5a0c2aa6efac3a6b9dd1b215daf Reviewed-on: https://gerrit.libreoffice.org/20699 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 8d5822983e9b6a1e04874ce4d2c807fd0cf1ee04) Reviewed-on: https://gerrit.libreoffice.org/20700
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/salframe.hxx4
-rw-r--r--vcl/inc/unx/gtk/gtkframe.hxx4
-rw-r--r--vcl/source/window/dialog.cxx3
-rw-r--r--vcl/unx/gtk3/gtk3gtkframe.cxx7
4 files changed, 17 insertions, 1 deletions
diff --git a/vcl/inc/salframe.hxx b/vcl/inc/salframe.hxx
index 14fb2fa3095e..a9c11e4c37ce 100644
--- a/vcl/inc/salframe.hxx
+++ b/vcl/inc/salframe.hxx
@@ -239,6 +239,10 @@ public:
// done setting up the clipregion
virtual void EndSetClipRegion() = 0;
+ virtual void SetModal(bool /*bModal*/)
+ {
+ }
+
// Callbacks (indepent part in vcl/source/window/winproc.cxx)
// for default message handling return 0
void SetCallback( vcl::Window* pWindow, SALFRAMEPROC pProc );
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index 4b09426b35f9..dc5cd191d5e0 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -447,6 +447,10 @@ public:
// done setting up the clipregion
virtual void EndSetClipRegion() override;
+#if GTK_CHECK_VERSION(3,0,0)
+ virtual void SetModal(bool bModal) override;
+#endif
+
static GtkSalFrame *getFromWindow( GtkWindow *pWindow );
virtual Window GetX11Window() override;
diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx
index 9db9b87610a5..1793afdf524f 100644
--- a/vcl/source/window/dialog.cxx
+++ b/vcl/source/window/dialog.cxx
@@ -46,6 +46,7 @@
#include <vcl/msgbox.hxx>
#include <vcl/unowrap.hxx>
#include <vcl/settings.hxx>
+#include <salframe.hxx>
#include <iostream>
@@ -1032,7 +1033,6 @@ void Dialog::SetModalInputMode( bool bModal )
mpDialogParent = pParent->mpWindowImpl->mpFrameWindow;
mpDialogParent->ImplIncModalCount();
}
-
}
else
{
@@ -1068,6 +1068,7 @@ void Dialog::SetModalInputMode( bool bModal )
}
}
}
+ ImplGetFrame()->SetModal(bModal);
}
void Dialog::SetModalInputMode( bool bModal, bool bSubModalDialogs )
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index 5a3efe0d2eaa..23393d08e5c8 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -2343,6 +2343,13 @@ void GtkSalFrame::EndSetClipRegion()
gdk_window_shape_combine_region( widget_get_window(m_pWindow), m_pRegion, 0, 0 );
}
+void GtkSalFrame::SetModal(bool bModal)
+{
+ if (!m_pWindow)
+ return;
+ gtk_window_set_modal(GTK_WINDOW(m_pWindow), bModal);
+}
+
gboolean GtkSalFrame::signalButton( GtkWidget*, GdkEventButton* pEvent, gpointer frame )
{
GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame);