The problem is that SessionManagerClient is only initialized with the
first sal frame (IOW, GtkSalFrame::Show calls
SessionManagerClient::open). Obviously, if there has never been any
frame opened, which, I suppose, happens in a lot of cases, this hadn't
happened. So the app is not aware that the desktop session is ending and
continues to run, till it's killed by an XIOError.
I think the simplest thing here is to run SessionManagerClient::open
when initializing the quickstarter (the function is exported, so there
should be no problem with that), but there might be a cleaner solution.
What if we do this when SalSession is created? Does anyone see any
problem with that approach?
D.
commit d1227b3d8b43ced1ef834bb00aec26a03d76c648
Author: David Tardon <dtardon@redhat.com>
Date: Tue Dec 7 10:51:36 2010 +0100
initialize session client when SalSession is created
This avoids crash on end of desktop session if quickstarter is running
and there has not been any window opened.
diff --git a/vcl/unx/gtk/window/gtkframe.cxx b/vcl/unx/gtk/window/gtkframe.cxx
index 39f5f87..9ed4385 100644
--- a/vcl/unx/gtk/window/gtkframe.cxx
+++ b/vcl/unx/gtk/window/gtkframe.cxx
@@ -1282,7 +1282,6 @@ void GtkSalFrame::Show( BOOL bVisible, BOOL bNoActivate )
gtk_window_set_keep_above( GTK_WINDOW(m_pWindow), bVisible );
if( bVisible )
{
- SessionManagerClient::open(); // will simply return after the first time
initClientId();
getDisplay()->startupNotificationCompleted();
diff --git a/vcl/unx/source/app/sm.cxx b/vcl/unx/source/app/sm.cxx
index 2b26694..5125ed2 100644
--- a/vcl/unx/source/app/sm.cxx
+++ b/vcl/unx/source/app/sm.cxx
@@ -82,6 +82,7 @@ SalSession* X11SalInstance::CreateSalSession()
{
if( ! pOneInstance )
pOneInstance = new IceSalSession();
+ SessionManagerClient::open();
return pOneInstance;
}
diff --git a/vcl/unx/source/window/salframe.cxx b/vcl/unx/source/window/salframe.cxx
index 4310f2d..839bd03 100644
--- a/vcl/unx/source/window/salframe.cxx
+++ b/vcl/unx/source/window/salframe.cxx
@@ -1152,8 +1152,6 @@ void X11SalFrame::Show( BOOL bVisible, BOOL bNoActivate )
setXEmbedInfo();
if( bVisible )
{
- SessionManagerClient::open(); // will simply return after the first time
-
mbInShow = TRUE;
if( ! (nStyle_ & SAL_FRAME_STYLE_INTRO) )
{
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.