summaryrefslogtreecommitdiff
path: root/src/xsmfns.c
diff options
context:
space:
mode:
authorKaroly Lorentey <lorentey@elte.hu>2004-10-31 02:05:24 +0000
committerKaroly Lorentey <lorentey@elte.hu>2004-10-31 02:05:24 +0000
commite0bc17abe6979d607e8de4684dddb96e53c60065 (patch)
treeb7cb7bc5df9f12138937fd958cdf4b9c2d19ee3a /src/xsmfns.c
parentf158167a84475d5fc41931531406821e6413afd7 (diff)
parent707994d2626cf0f01c3ece4028d73835068d64dc (diff)
downloademacs-e0bc17abe6979d607e8de4684dddb96e53c60065.tar.gz
Merged in changes from CVS trunk.
Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-639 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-640 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-641 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-642 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-643 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-644 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-645 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-646 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-647 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-648 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-649 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-650 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-651 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-652 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-59 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-60 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-61 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-62 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-63 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-263
Diffstat (limited to 'src/xsmfns.c')
-rw-r--r--src/xsmfns.c82
1 files changed, 47 insertions, 35 deletions
diff --git a/src/xsmfns.c b/src/xsmfns.c
index 080f998e779..27ab90c5432 100644
--- a/src/xsmfns.c
+++ b/src/xsmfns.c
@@ -74,33 +74,35 @@ static int ice_fd = -1;
static int doing_interact = False;
-/* The session manager object for the session manager connection */
+/* The session manager object for the session manager connection. */
static SmcConn smc_conn;
-/* The client session id for this session */
+/* The client session id for this session. */
+
static char *client_id;
-/* The full path name to the Emacs program */
+/* The full path name to the Emacs program. */
+
static char *emacs_program;
-/* The client session id for this session as a lisp object. */
+/* 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. */
+ 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. */
+ restarting Emacs. The client_id is appended. */
#define SMID_OPT "--smid="
/* The option to start Emacs without the splash screen when
- restarting Emacs. */
+ restarting Emacs. */
#define NOSPLASH_OPT "--no-splash"
@@ -108,6 +110,7 @@ Lisp_Object Vx_session_previous_id;
/* 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;
@@ -126,7 +129,7 @@ x_session_check_input (bufp)
/* 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. */
+ will be called. */
emacs_event.kind = NO_EVENT;
if (select (ice_fd+1, &read_fds,
@@ -143,7 +146,7 @@ x_session_check_input (bufp)
/* Check if smc_interact_CB was called and we shall generate a
- SAVE_SESSION_EVENT. */
+ SAVE_SESSION_EVENT. */
if (emacs_event.kind == NO_EVENT)
return 0;
@@ -151,7 +154,8 @@ x_session_check_input (bufp)
return 1;
}
-/* Return non-zero if we have a connection to a session manager.*/
+/* Return non-zero if we have a connection to a session manager. */
+
int
x_session_have_connection ()
{
@@ -160,7 +164,8 @@ x_session_have_connection ()
/* 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. */
+ Then lisp code can interact with the user. */
+
static void
smc_interact_CB (smcConn, clientData)
SmcConn smcConn;
@@ -176,7 +181,8 @@ smc_interact_CB (smcConn, clientData)
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. */
+ we do so, because we don't know what the lisp code might do. */
+
static void
smc_save_yourself_CB (smcConn,
clientData,
@@ -203,7 +209,7 @@ smc_save_yourself_CB (smcConn,
char cwd[MAXPATHLEN+1];
char *smid_opt;
- /* How to start a new instance of Emacs */
+ /* 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;
@@ -213,7 +219,7 @@ smc_save_yourself_CB (smcConn,
props[props_idx]->vals[0].value = emacs_program;
++props_idx;
- /* The name of the program */
+ /* The name of the program. */
props[props_idx] = &prop_ptr[props_idx];
props[props_idx]->name = SmProgram;
props[props_idx]->type = SmARRAY8;
@@ -223,11 +229,11 @@ smc_save_yourself_CB (smcConn,
props[props_idx]->vals[0].value = SDATA (Vinvocation_name);
++props_idx;
- /* How to restart Emacs (i.e.: /path/to/emacs --smid=xxxx --no-splash). */
+ /* 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]->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;
@@ -244,7 +250,7 @@ smc_save_yourself_CB (smcConn,
val_idx += 3;
++props_idx;
- /* User id */
+ /* User id. */
props[props_idx] = &prop_ptr[props_idx];
props[props_idx]->name = SmUserID;
props[props_idx]->type = SmARRAY8;
@@ -254,7 +260,7 @@ smc_save_yourself_CB (smcConn,
props[props_idx]->vals[0].value = SDATA (Vuser_login_name);
++props_idx;
- /* The current directory property, not mandatory */
+ /* The current directory property, not mandatory. */
#ifdef HAVE_GETCWD
if (getcwd (cwd, MAXPATHLEN+1) != 0)
#else
@@ -276,18 +282,19 @@ smc_save_yourself_CB (smcConn,
xfree (smid_opt);
- /* See if we maybe shall interact with the user. */
+ /* 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. */
+ /* No interaction, we are done saving ourself. */
SmcSaveYourselfDone (smcConn, True);
}
}
-/* According to the SM specification, this shall close the connection */
+/* According to the SM specification, this shall close the connection. */
+
static void
smc_die_CB (smcConn, clientData)
SmcConn smcConn;
@@ -301,7 +308,8 @@ smc_die_CB (smcConn, clientData)
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. */
+ even seem necessary. */
+
static void
smc_save_complete_CB (smcConn, clientData)
SmcConn smcConn;
@@ -319,7 +327,8 @@ smc_shutdown_cancelled_CB (smcConn, clientData)
}
/* Error handlers for SM and ICE. We don't want to exit Emacs just
- because there is some error in the session management. */
+ because there is some error in the session management. */
+
static void
smc_error_handler (smcConn,
swap,
@@ -336,7 +345,7 @@ smc_error_handler (smcConn,
int severity;
SmPointer values;
{
- /* Empty */
+ /* Empty */
}
static void
@@ -355,7 +364,7 @@ ice_error_handler (iceConn,
int severity;
IcePointer values;
{
- /* Empty */
+ /* Empty */
}
@@ -363,12 +372,13 @@ static void
ice_io_error_handler (iceConn)
IceConn iceConn;
{
- /* Connection probably gone. */
+ /* 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. */
+ uses ICE as it transport protocol. */
+
static void
ice_conn_watch_CB (iceConn, clientData, opening, watchData)
IceConn iceConn;
@@ -401,6 +411,7 @@ ice_conn_watch_CB (iceConn, clientData, opening, watchData)
}
/* Create the client leader window. */
+
static void
create_client_leader_window (dpyinfo, client_id)
struct x_display_info *dpyinfo;
@@ -427,7 +438,8 @@ create_client_leader_window (dpyinfo, client_id)
dpyinfo->client_leader_window = w;
}
-/* Try to open a connection to the session manager. */
+/* Try to open a connection to the session manager. */
+
void
x_session_initialize (dpyinfo)
struct x_display_info *dpyinfo;
@@ -439,17 +451,17 @@ x_session_initialize (dpyinfo)
int name_len = 0;
/* Check if we where started by the session manager. If so, we will
- have a previous id. */
+ 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. */
+ /* 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 */
+ not very large */
emacs_program = xmalloc (name_len + 1);
emacs_program[0] = '\0';
@@ -458,7 +470,7 @@ x_session_initialize (dpyinfo)
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 */
+ 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;
@@ -468,17 +480,17 @@ x_session_initialize (dpyinfo)
callbacks.shutdown_cancelled.callback = smc_shutdown_cancelled_CB;
callbacks.shutdown_cancelled.client_data = 0;
- /* Set error handlers. */
+ /* Set error handlers. */
SmcSetErrorHandler (smc_error_handler);
IceSetErrorHandler (ice_error_handler);
IceSetIOErrorHandler (ice_io_error_handler);
- /* Install callback for when connection status changes. */
+ /* 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. */
+ The errorstring is here for debugging. */
smc_conn = SmcOpenConnection (NULL, NULL, 1, 0,
(SmcSaveYourselfProcMask|
SmcDieProcMask|