On Thu, 3 Jun 2010 19:14:39 +0300% Dimitar Zhekov dimitar.zhekov@gmail.com wrote:
On Wed, 2 Jun 2010 22:17:02 +0400 Eugene Arshinov earshinov@gmail.com wrote:
On Wed, 2 Jun 2010 20:33:37 +0300% Dimitar Zhekov dimitar.zhekov@gmail.com wrote:
The "startup time" between which two events? The SM does not know when a program is started, and does not care when/if it's first window will be displayed. You can even write a console program with SM support. :)
Between, for example, establishing the connection and the time when we can handle the first message from session manager (i.e., the time message loop starts working). Again, it's just a wild guess.
I read the above and was enlightened. The first message a SM sends to a newly registered application, when adding it to a session, is a "SaveYourself(SaveLocal)".
With the sm_set_runtime_props() call in sm_save_yourself_callback() commented out, 4968 does not kill the session on startup.
Interesting. It's worth debugging sm_set_runtime_props() with gdb step-by-step and see when session is killed.
While reading sm.c, however, I noticed what looks like two more bugs.
if (cl_options.load_session) /* Files will be restored by Geany session management facilities. */ store_project = store_files = FALSE;
If I'm not mistaken, this code leaves the file/project list save/restore to Geany, for a main instance only. But what if you have 2+ main instances? They will all try to save their file list or active project in geany.conf; even with race .lock protection, only one will succeed; and on session restore, there will be 2+ identical instances.
The fix is pretty easy, just remove the above check. Any per-file settings for project-less instances will be lost, but they are lost for the secondary project-less instances anyway...
Well, in addition to removing the check I will have to forbid reading file list from config when an instance is started by session manager. Not too hard, though.
To speak truth, when I wrote this code I didn't think about several main instances. I still does not understand why they are needed. Lex explained me why opening one project in several instances can be useful, but opening several main instances seems to be even more crazy stuff :)
if (project_prefs.project_session) /* Files will be restored when the project is reopened. */ store_files = FALSE;
This assumes that the value of project_prefs.project_session is identical at the time when Geany is stopped and then restarted. But with your sm, on restart, all geany-s read their options from the single geany.conf. What if I have 3 instances running, choose Edit -> Preferences in one of them, and (un)check "Project based session files"? The other 2 instances will not be aware of the change when being stopped, and will get the new value when restarted.
Good catch. Seems that always storing files in command-line and not loading them from project file on restore would fix this "boundary case".
Best regards, Eugene.