emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/xsmfns.c [emacs-unicode-2]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/src/xsmfns.c [emacs-unicode-2]
Date: Wed, 27 Oct 2004 02:06:26 -0400

Index: emacs/src/xsmfns.c
diff -c emacs/src/xsmfns.c:1.8.4.2 emacs/src/xsmfns.c:1.8.4.3
*** emacs/src/xsmfns.c:1.8.4.2  Mon Jun 28 07:29:26 2004
--- emacs/src/xsmfns.c  Wed Oct 27 05:42:01 2004
***************
*** 73,105 ****
  
  static int doing_interact = False;
  
! /* The session manager object for the session manager connection */
  
  static SmcConn smc_conn;
  
! /* The client session id for this session */
  static char *client_id;
  
! /* The full path name to the Emacs program */
  static char *emacs_program;
  
! /* The client session id for this session as a lisp object. */
  
  Lisp_Object Vx_session_id;
  
  /* The id we had the previous session.  This is only available if we
!    have been started by the session manager with SMID_OPT. */
  
  Lisp_Object Vx_session_previous_id;
  
  /* The option we tell the session manager to start Emacs with when
!    restarting Emacs.  The client_id is appended. */
  
  #define SMID_OPT "--smid="
  
  
  /* The option to start Emacs without the splash screen when
!    restarting Emacs. */
  
  #define NOSPLASH_OPT "--no-splash"
  
--- 73,107 ----
  
  static int doing_interact = False;
  
! /* The session manager object for the session manager connection.  */
  
  static SmcConn smc_conn;
  
! /* The client session id for this session.  */
! 
  static char *client_id;
  
! /* The full path name to the Emacs program.  */
! 
  static char *emacs_program;
  
! /* The client session id for this session as a lisp object.  */
  
  Lisp_Object Vx_session_id;
  
  /* The id we had the previous session.  This is only available if we
!    have been started by the session manager with SMID_OPT.  */
  
  Lisp_Object Vx_session_previous_id;
  
  /* The option we tell the session manager to start Emacs with when
!    restarting Emacs.  The client_id is appended.  */
  
  #define SMID_OPT "--smid="
  
  
  /* The option to start Emacs without the splash screen when
!    restarting Emacs.  */
  
  #define NOSPLASH_OPT "--no-splash"
  
***************
*** 107,112 ****
--- 109,115 ----
  /* Handle any messages from the session manager.  If no connection is
     open to a session manager, just return 0.
     Otherwise returns 1 if SAVE_SESSION_EVENT is stored in buffer BUFP.  */
+ 
  int
  x_session_check_input (bufp)
       struct input_event *bufp;
***************
*** 125,131 ****
    /* Reset this so wo can check kind after callbacks have been called by
       IceProcessMessages.  The smc_interact_CB sets the kind to
       SAVE_SESSION_EVENT, but we don't know beforehand if that callback
!      will be called. */
    emacs_event.kind = NO_EVENT;
  
    if (select (ice_fd+1, &read_fds,
--- 128,134 ----
    /* Reset this so wo can check kind after callbacks have been called by
       IceProcessMessages.  The smc_interact_CB sets the kind to
       SAVE_SESSION_EVENT, but we don't know beforehand if that callback
!      will be called.  */
    emacs_event.kind = NO_EVENT;
  
    if (select (ice_fd+1, &read_fds,
***************
*** 142,148 ****
  
  
    /* Check if smc_interact_CB was called and we shall generate a
!      SAVE_SESSION_EVENT. */
    if (emacs_event.kind == NO_EVENT)
      return 0;
  
--- 145,151 ----
  
  
    /* Check if smc_interact_CB was called and we shall generate a
!      SAVE_SESSION_EVENT.  */
    if (emacs_event.kind == NO_EVENT)
      return 0;
  
***************
*** 150,156 ****
    return 1;
  }
  
! /* Return non-zero if we have a connection to a session manager.*/
  int
  x_session_have_connection ()
  {
--- 153,160 ----
    return 1;
  }
  
! /* Return non-zero if we have a connection to a session manager.  */
! 
  int
  x_session_have_connection ()
  {
***************
*** 159,165 ****
  
  /* This is called when the session manager says it is OK to interact with the
     user.  Here we set the kind to SAVE_SESSION_EVENT so an event is generated.
!    Then lisp code can interact with the user. */
  static void
  smc_interact_CB (smcConn, clientData)
       SmcConn smcConn;
--- 163,170 ----
  
  /* This is called when the session manager says it is OK to interact with the
     user.  Here we set the kind to SAVE_SESSION_EVENT so an event is generated.
!    Then lisp code can interact with the user.  */
! 
  static void
  smc_interact_CB (smcConn, clientData)
       SmcConn smcConn;
***************
*** 175,181 ****
     are started in the correct directory.
  
     If this is a shutdown and we can request to interact with the user,
!    we do so, because we don't know what the lisp code might do. */
  static void
  smc_save_yourself_CB (smcConn,
                        clientData,
--- 180,187 ----
     are started in the correct directory.
  
     If this is a shutdown and we can request to interact with the user,
!    we do so, because we don't know what the lisp code might do.  */
! 
  static void
  smc_save_yourself_CB (smcConn,
                        clientData,
***************
*** 202,208 ****
    char cwd[MAXPATHLEN+1];
    char *smid_opt;
  
!   /* How to start a new instance of Emacs */
    props[props_idx] = &prop_ptr[props_idx];
    props[props_idx]->name = SmCloneCommand;
    props[props_idx]->type = SmLISTofARRAY8;
--- 208,214 ----
    char cwd[MAXPATHLEN+1];
    char *smid_opt;
  
!   /* How to start a new instance of Emacs.  */
    props[props_idx] = &prop_ptr[props_idx];
    props[props_idx]->name = SmCloneCommand;
    props[props_idx]->type = SmLISTofARRAY8;
***************
*** 212,218 ****
    props[props_idx]->vals[0].value = emacs_program;
    ++props_idx;
  
!   /* The name of the program */
    props[props_idx] = &prop_ptr[props_idx];
    props[props_idx]->name = SmProgram;
    props[props_idx]->type = SmARRAY8;
--- 218,224 ----
    props[props_idx]->vals[0].value = emacs_program;
    ++props_idx;
  
!   /* The name of the program.  */
    props[props_idx] = &prop_ptr[props_idx];
    props[props_idx]->name = SmProgram;
    props[props_idx]->type = SmARRAY8;
***************
*** 222,232 ****
    props[props_idx]->vals[0].value = SDATA (Vinvocation_name);
    ++props_idx;
  
!   /* How to restart Emacs (i.e.: /path/to/emacs --smid=xxxx --no-splash). */
    props[props_idx] = &prop_ptr[props_idx];
    props[props_idx]->name = SmRestartCommand;
    props[props_idx]->type = SmLISTofARRAY8;
!   props[props_idx]->num_vals = 3; /* /path/to/emacs, --smid=xxx --no-splash */
    props[props_idx]->vals = &values[val_idx];
    props[props_idx]->vals[0].length = strlen (emacs_program);
    props[props_idx]->vals[0].value = emacs_program;
--- 228,238 ----
    props[props_idx]->vals[0].value = SDATA (Vinvocation_name);
    ++props_idx;
  
!   /* How to restart Emacs (i.e.: /path/to/emacs --smid=xxxx --no-splash).  */
    props[props_idx] = &prop_ptr[props_idx];
    props[props_idx]->name = SmRestartCommand;
    props[props_idx]->type = SmLISTofARRAY8;
!   props[props_idx]->num_vals = 3; /* /path/to/emacs, --smid=xxx --no-splash  
*/
    props[props_idx]->vals = &values[val_idx];
    props[props_idx]->vals[0].length = strlen (emacs_program);
    props[props_idx]->vals[0].value = emacs_program;
***************
*** 243,249 ****
    val_idx += 3;
    ++props_idx;
  
!   /* User id */
    props[props_idx] = &prop_ptr[props_idx];
    props[props_idx]->name = SmUserID;
    props[props_idx]->type = SmARRAY8;
--- 249,255 ----
    val_idx += 3;
    ++props_idx;
  
!   /* User id.  */
    props[props_idx] = &prop_ptr[props_idx];
    props[props_idx]->name = SmUserID;
    props[props_idx]->type = SmARRAY8;
***************
*** 253,259 ****
    props[props_idx]->vals[0].value = SDATA (Vuser_login_name);
    ++props_idx;
  
!   /* The current directory property, not mandatory */
  #ifdef HAVE_GETCWD
    if (getcwd (cwd, MAXPATHLEN+1) != 0)
  #else
--- 259,265 ----
    props[props_idx]->vals[0].value = SDATA (Vuser_login_name);
    ++props_idx;
  
!   /* The current directory property, not mandatory.  */
  #ifdef HAVE_GETCWD
    if (getcwd (cwd, MAXPATHLEN+1) != 0)
  #else
***************
*** 275,292 ****
  
    xfree (smid_opt);
  
!   /* See if we maybe shall interact with the user. */
    if (interactStyle != SmInteractStyleAny
        || ! shutdown
        || saveType == SmSaveLocal
        || ! SmcInteractRequest (smcConn, SmDialogNormal, smc_interact_CB, 0))
      {
!       /* No interaction, we are done saving ourself. */
        SmcSaveYourselfDone (smcConn, True);
      }
  }
  
! /* According to the SM specification, this shall close the connection */
  static void
  smc_die_CB (smcConn, clientData)
       SmcConn smcConn;
--- 281,299 ----
  
    xfree (smid_opt);
  
!   /* See if we maybe shall interact with the user.  */
    if (interactStyle != SmInteractStyleAny
        || ! shutdown
        || saveType == SmSaveLocal
        || ! SmcInteractRequest (smcConn, SmDialogNormal, smc_interact_CB, 0))
      {
!       /* No interaction, we are done saving ourself.  */
        SmcSaveYourselfDone (smcConn, True);
      }
  }
  
! /* According to the SM specification, this shall close the connection.  */
! 
  static void
  smc_die_CB (smcConn, clientData)
       SmcConn smcConn;
***************
*** 300,306 ****
     According to the SM specification, we should not interact with the
     user between smc_save_yourself_CB is called and until smc_save_complete_CB
     is called.  It seems like a lot of job to implement this and it doesn't
!    even seem necessary. */
  static void
  smc_save_complete_CB (smcConn, clientData)
       SmcConn smcConn;
--- 307,314 ----
     According to the SM specification, we should not interact with the
     user between smc_save_yourself_CB is called and until smc_save_complete_CB
     is called.  It seems like a lot of job to implement this and it doesn't
!    even seem necessary.  */
! 
  static void
  smc_save_complete_CB (smcConn, clientData)
       SmcConn smcConn;
***************
*** 318,324 ****
  }
  
  /* Error handlers for SM and ICE.  We don't want to exit Emacs just
!    because there is some error in the session management. */
  static void
  smc_error_handler (smcConn,
                     swap,
--- 326,333 ----
  }
  
  /* Error handlers for SM and ICE.  We don't want to exit Emacs just
!    because there is some error in the session management.  */
! 
  static void
  smc_error_handler (smcConn,
                     swap,
***************
*** 335,341 ****
       int severity;
       SmPointer values;
  {
!   /* Empty */
  }
  
  static void
--- 344,350 ----
       int severity;
       SmPointer values;
  {
!   /* Empty  */
  }
  
  static void
***************
*** 354,360 ****
       int severity;
       IcePointer values;
  {
!   /* Empty */
  }
  
  
--- 363,369 ----
       int severity;
       IcePointer values;
  {
!   /* Empty  */
  }
  
  
***************
*** 362,373 ****
  ice_io_error_handler (iceConn)
       IceConn iceConn;
  {
!   /* Connection probably gone. */
    ice_fd = -1;
  }
  
  /* This is called when the ICE connection is created or closed.  The SM 
library
!    uses ICE as it transport protocol. */
  static void
  ice_conn_watch_CB (iceConn, clientData, opening, watchData)
       IceConn iceConn;
--- 371,383 ----
  ice_io_error_handler (iceConn)
       IceConn iceConn;
  {
!   /* Connection probably gone.  */
    ice_fd = -1;
  }
  
  /* This is called when the ICE connection is created or closed.  The SM 
library
!    uses ICE as it transport protocol.  */
! 
  static void
  ice_conn_watch_CB (iceConn, clientData, opening, watchData)
       IceConn iceConn;
***************
*** 400,405 ****
--- 410,416 ----
  }
  
  /* Create the client leader window.  */
+ 
  static void
  create_client_leader_window (dpyinfo, client_id)
       struct x_display_info *dpyinfo;
***************
*** 426,432 ****
    dpyinfo->client_leader_window = w;
  }
  
! /* Try to open a connection to the session manager. */
  void
  x_session_initialize (dpyinfo)
       struct x_display_info *dpyinfo;
--- 437,444 ----
    dpyinfo->client_leader_window = w;
  }
  
! /* Try to open a connection to the session manager.  */
! 
  void
  x_session_initialize (dpyinfo)
       struct x_display_info *dpyinfo;
***************
*** 438,454 ****
    int  name_len = 0;
  
    /* Check if we where started by the session manager.  If so, we will
!      have a previous id. */
    if (! EQ (Vx_session_previous_id, Qnil) && STRINGP (Vx_session_previous_id))
      previous_id = SDATA (Vx_session_previous_id);
  
!   /* Construct the path to the Emacs program. */
    if (! EQ (Vinvocation_directory, Qnil))
      name_len += strlen (SDATA (Vinvocation_directory));
    name_len += strlen (SDATA (Vinvocation_name));
  
    /* This malloc will not be freed, but it is only done once, and hopefully
!      not very large  */
    emacs_program = xmalloc (name_len + 1);
    emacs_program[0] = '\0';
  
--- 450,466 ----
    int  name_len = 0;
  
    /* Check if we where started by the session manager.  If so, we will
!      have a previous id.  */
    if (! EQ (Vx_session_previous_id, Qnil) && STRINGP (Vx_session_previous_id))
      previous_id = SDATA (Vx_session_previous_id);
  
!   /* Construct the path to the Emacs program.  */
    if (! EQ (Vinvocation_directory, Qnil))
      name_len += strlen (SDATA (Vinvocation_directory));
    name_len += strlen (SDATA (Vinvocation_name));
  
    /* This malloc will not be freed, but it is only done once, and hopefully
!      not very large   */
    emacs_program = xmalloc (name_len + 1);
    emacs_program[0] = '\0';
  
***************
*** 457,463 ****
    strcat (emacs_program, SDATA (Vinvocation_name));
  
    /* The SM protocol says all callbacks are mandatory, so set up all
!      here and in the mask passed to SmcOpenConnection */
    callbacks.save_yourself.callback = smc_save_yourself_CB;
    callbacks.save_yourself.client_data = 0;
    callbacks.die.callback = smc_die_CB;
--- 469,475 ----
    strcat (emacs_program, SDATA (Vinvocation_name));
  
    /* The SM protocol says all callbacks are mandatory, so set up all
!      here and in the mask passed to SmcOpenConnection.  */
    callbacks.save_yourself.callback = smc_save_yourself_CB;
    callbacks.save_yourself.client_data = 0;
    callbacks.die.callback = smc_die_CB;
***************
*** 467,483 ****
    callbacks.shutdown_cancelled.callback = smc_shutdown_cancelled_CB;
    callbacks.shutdown_cancelled.client_data = 0;
  
!   /* Set error handlers. */
    SmcSetErrorHandler (smc_error_handler);
    IceSetErrorHandler (ice_error_handler);
    IceSetIOErrorHandler (ice_io_error_handler);
  
!   /* Install callback for when connection status changes. */
    IceAddConnectionWatch (ice_conn_watch_CB, 0);
  
    /* Open the connection to the session manager.  A failure is not
       critical, it usually means that no session manager is running.
!      The errorstring is here for debugging. */
    smc_conn = SmcOpenConnection (NULL, NULL, 1, 0,
                                  (SmcSaveYourselfProcMask|
                                   SmcDieProcMask|
--- 479,495 ----
    callbacks.shutdown_cancelled.callback = smc_shutdown_cancelled_CB;
    callbacks.shutdown_cancelled.client_data = 0;
  
!   /* Set error handlers.  */
    SmcSetErrorHandler (smc_error_handler);
    IceSetErrorHandler (ice_error_handler);
    IceSetIOErrorHandler (ice_io_error_handler);
  
!   /* Install callback for when connection status changes.  */
    IceAddConnectionWatch (ice_conn_watch_CB, 0);
  
    /* Open the connection to the session manager.  A failure is not
       critical, it usually means that no session manager is running.
!      The errorstring is here for debugging.  */
    smc_conn = SmcOpenConnection (NULL, NULL, 1, 0,
                                  (SmcSaveYourselfProcMask|
                                   SmcDieProcMask|




reply via email to

[Prev in Thread] Current Thread [Next in Thread]