session management tweaking

edscott wilson garcia edscott at xfce.org
Mon Oct 11 21:19:19 CEST 2004


El lun, 11-10-2004 a las 12:47, Benedikt Meurer escribió:
> edscott wilson garcia wrote:
> > Hey Benny,
> > 
> > El lun, 11-10-2004 a las 09:21, Benedikt Meurer escribió:
> > 
> >>Have a look at libxfcegui4/session.c, it includes a simple 
> >>implementation of X11R6 client-side session management.
> >>
> > 
> > 
> > I looked into it and am now setting the sm property but it is not
> > working. This is what I did:
> > 
> >    session_client = client_session_new (argc,argv,
> > NULL,SESSION_RESTART_IMMEDIATELY,10);
> >     session_init(session_client);
> > 
> > followed by a call to the routine:
> > 
> > void set_restart_command (int argc, char **argv){
> > #ifdef HAVE_LIBSM
> >       int i=0;
> >        SmProp prop1,*props[1];
> >        SmPropValue *vals = g_new (SmPropValue, argc);
> >        
> >        props[0] = &prop1;
> > 
> > 	prop1.name = SmRestartCommand;
> > 	prop1.type = SmLISTofARRAY8;
> > 	prop1.vals = vals;
> > 	for (i=0;i<argc;i++){
> > 	    if (!argv[i]) {
> > 		argc=i;
> > 		break;
> > 	    }
> > 	    vals[i].value = argv[i];
> > 	    vals[i].length = strlen(argv[i]);
> > 	}
> > 	prop1.num_vals = argc;
> > 	SmcSetProperties ((SmcConn) session_client->session_connection, 1,
> > props);
> > 	g_free(vals);
> > #endif
> > 
> > }
> > 
> > Can you see anything wrong with the above?
> 
> Your code is correct (but useless). The problem is the session-client in 
> libxfcegui4. Once the session manager sends a SaveYourself request to 
> the client, the session_client code sends the old restart command to the 
> session manager (see session-client.c:445). You could get around this by 
> setting session_client->restart_command manually after the call to 
> client_session_new(). The session-client code will then send the correct 
> RestartCommand when the SM asks the client to save its state. This 
> should do the trick.

It should, but something is not right. I still get the original startup
command using:

void set_restart_command (int argc, char **argv){
      int i=0;
      static gchar **rstart=NULL;
      static int rargc=-1;

      if (rargc != argc) {
	  g_strfreev (rstart);
	  rstart = (gchar **)malloc((argc+1)*sizeof(gchar *));
      }
      for(i=0;i<argc;i++){
	rstart[i]=g_strdup(argv[i]);
      }
      rstart[argc]=NULL;
      session_client->restart_command=rstart;
      session_client->clone_command=rstart;
}

This is strange :-\

regards,

Edscott





More information about the Xfce4-dev mailing list