[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/xsmfns.c [lexbind]
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/src/xsmfns.c [lexbind] |
Date: |
Thu, 28 Oct 2004 22:27:37 -0400 |
Index: emacs/src/xsmfns.c
diff -c emacs/src/xsmfns.c:1.3.2.4 emacs/src/xsmfns.c:1.3.2.5
*** emacs/src/xsmfns.c:1.3.2.4 Tue Jul 6 10:17:22 2004
--- emacs/src/xsmfns.c Fri Oct 29 02:05:10 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|
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/src/xsmfns.c [lexbind],
Miles Bader <=