> 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 <[email protected]> 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) ) {
_______________________________________________ LibreOffice mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice
