vcl/unx/gtk3/gtk3gtkframe.cxx | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-)
New commits: commit c80d34ad551efe858c47445b13370aa8223357c7 Author: Caolán McNamara <caol...@redhat.com> Date: Wed Jun 8 11:50:42 2016 +0100 gtk3: use window groups so modal dialog are modal to their toplevel frame only so e.g. launching help from a modal dialog gives a new toplevel window which is not blocked by the modal dialog on the other window. likesize can go from one blocked e.g. writer window to calc and type away in there happily Change-Id: Id9376b393514e91dfd667dfce132f1f37367084e diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx index ee02b03..f6f3694 100644 --- a/vcl/unx/gtk3/gtk3gtkframe.cxx +++ b/vcl/unx/gtk3/gtk3gtkframe.cxx @@ -796,8 +796,10 @@ GtkSalFrame::~GtkSalFrame() InvalidateGraphics(); - if( m_pParent ) + if (m_pParent) + { m_pParent->m_aChildren.remove( this ); + } getDisplay()->deregisterFrame( this ); @@ -1196,6 +1198,12 @@ void GtkSalFrame::Init( SalFrame* pParent, SalFrameStyleFlags nStyle ) if (!(m_pParent->m_nStyle & SalFrameStyleFlags::PLUG)) gtk_window_set_transient_for( GTK_WINDOW(m_pWindow), GTK_WINDOW(m_pParent->m_pWindow) ); m_pParent->m_aChildren.push_back( this ); + gtk_window_group_add_window(gtk_window_get_group(GTK_WINDOW(m_pParent->m_pWindow)), GTK_WINDOW(m_pWindow)); + } + else + { + gtk_window_group_add_window(gtk_window_group_new(), GTK_WINDOW(m_pWindow)); + g_object_unref(gtk_window_get_group(GTK_WINDOW(m_pWindow))); } // set window type @@ -2343,11 +2351,17 @@ const SystemEnvData* GtkSalFrame::GetSystemData() const void GtkSalFrame::SetParent( SalFrame* pNewParent ) { - if( m_pParent ) - m_pParent->m_aChildren.remove( this ); + if (m_pParent) + { + gtk_window_group_remove_window(gtk_window_get_group(GTK_WINDOW(m_pParent->m_pWindow)), GTK_WINDOW(m_pWindow)); + m_pParent->m_aChildren.remove(this); + } m_pParent = static_cast<GtkSalFrame*>(pNewParent); - if( m_pParent ) - m_pParent->m_aChildren.push_back( this ); + if (m_pParent) + { + m_pParent->m_aChildren.push_back(this); + gtk_window_group_add_window(gtk_window_get_group(GTK_WINDOW(m_pParent->m_pWindow)), GTK_WINDOW(m_pWindow)); + } if( ! isChild() ) gtk_window_set_transient_for( GTK_WINDOW(m_pWindow), (m_pParent && ! m_pParent->isChild(true,false)) ? GTK_WINDOW(m_pParent->m_pWindow) : nullptr
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits