Mercurial > emacs
annotate src/xsmfns.c @ 109153:978941230a7c
* fringe.c (draw_fringe_bitmap_1): Use lookup_named_face to get
fringe face id, so face-remapping-alist works (Bug#6091).
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Tue, 06 Jul 2010 16:24:57 -0400 |
parents | fa173b9bd9ce |
children | 750db9f3e6d8 |
rev | line source |
---|---|
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
1 /* Session management module for systems which understand the X Session |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
2 management protocol. |
106815 | 3 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 |
79759 | 4 Free Software Foundation, Inc. |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
5 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
6 This file is part of GNU Emacs. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
7 |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91702
diff
changeset
|
8 GNU Emacs is free software: you can redistribute it and/or modify |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
9 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91702
diff
changeset
|
10 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91702
diff
changeset
|
11 (at your option) any later version. |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
12 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
13 GNU Emacs is distributed in the hope that it will be useful, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
14 but WITHOUT ANY WARRANTY; without even the implied warranty of |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
16 GNU General Public License for more details. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
17 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
18 You should have received a copy of the GNU General Public License |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91702
diff
changeset
|
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
20 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
21 #include <config.h> |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
22 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
23 #ifdef HAVE_X_SM |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
24 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
25 #include <X11/SM/SMlib.h> |
52298
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
26 #include <X11/Xlib.h> |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
27 #include <X11/Xutil.h> |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
28 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
29 #ifdef HAVE_UNISTD_H |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
30 #include <unistd.h> |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
31 #endif |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
32 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
33 #include <sys/param.h> |
43848
1690ab476469
Include stdio.h because termhooks.h needs it.
Gerd Moellmann <gerd@gnu.org>
parents:
43810
diff
changeset
|
34 #include <stdio.h> |
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100951
diff
changeset
|
35 #include <setjmp.h> |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
36 |
65764
375ab086d366
* image.c (slurp_file, xbm_read_bitmap_data): Cast to the correct
Dan Nicolaescu <dann@ics.uci.edu>
parents:
65421
diff
changeset
|
37 #include "lisp.h" |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
38 #include "systime.h" |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
39 #include "sysselect.h" |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
52401
diff
changeset
|
40 #include "frame.h" |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
41 #include "termhooks.h" |
43848
1690ab476469
Include stdio.h because termhooks.h needs it.
Gerd Moellmann <gerd@gnu.org>
parents:
43810
diff
changeset
|
42 #include "termopts.h" |
52298
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
43 #include "xterm.h" |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
44 |
109141
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
45 /* Avoid "differ in sign" warnings */ |
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
46 #define SSDATA(x) ((char *) SDATA (x)) |
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
47 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
48 /* The user login name. */ |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
49 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
50 extern Lisp_Object Vuser_login_name; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
51 |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
52 /* This is the event used when SAVE_SESSION_EVENT occurs. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
53 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
54 static struct input_event emacs_event; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
55 |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
56 /* The descriptor that we use to check for data from the session manager. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
57 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
58 static int ice_fd; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
59 |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
60 /* A flag that says if we are in shutdown interactions or not. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
61 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
62 static int doing_interact; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
63 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
64 /* The session manager object for the session manager connection. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
65 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
66 static SmcConn smc_conn; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
67 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
68 /* The client session id for this session. */ |
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
69 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
70 static char *client_id; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
71 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
72 /* The full path name to the Emacs program. */ |
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
73 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
74 static char *emacs_program; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
75 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
76 /* The client session id for this session as a lisp object. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
77 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
78 Lisp_Object Vx_session_id; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
79 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
80 /* The id we had the previous session. This is only available if we |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
81 have been started by the session manager with SMID_OPT. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
82 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
83 Lisp_Object Vx_session_previous_id; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
84 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
85 /* The option we tell the session manager to start Emacs with when |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
86 restarting Emacs. The client_id is appended. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
87 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
88 #define SMID_OPT "--smid=" |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
89 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
90 |
50016
03e0aadb68a0
xsmfns.c (smc_save_yourself_CB): Add --no-splash to options
Jan Djärv <jan.h.d@swipnet.se>
parents:
49421
diff
changeset
|
91 /* The option to start Emacs without the splash screen when |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
92 restarting Emacs. */ |
50016
03e0aadb68a0
xsmfns.c (smc_save_yourself_CB): Add --no-splash to options
Jan Djärv <jan.h.d@swipnet.se>
parents:
49421
diff
changeset
|
93 |
03e0aadb68a0
xsmfns.c (smc_save_yourself_CB): Add --no-splash to options
Jan Djärv <jan.h.d@swipnet.se>
parents:
49421
diff
changeset
|
94 #define NOSPLASH_OPT "--no-splash" |
03e0aadb68a0
xsmfns.c (smc_save_yourself_CB): Add --no-splash to options
Jan Djärv <jan.h.d@swipnet.se>
parents:
49421
diff
changeset
|
95 |
108213
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
96 /* The option to make Emacs start in the given directory. */ |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
97 |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
98 #define CHDIR_OPT "--chdir=" |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
99 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
100 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
101 ice_connection_closed (void) |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
102 { |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
103 if (ice_fd >= 0) |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
104 delete_keyboard_wait_descriptor (ice_fd); |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
105 ice_fd = -1; |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
106 } |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
107 |
50016
03e0aadb68a0
xsmfns.c (smc_save_yourself_CB): Add --no-splash to options
Jan Djärv <jan.h.d@swipnet.se>
parents:
49421
diff
changeset
|
108 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
109 /* Handle any messages from the session manager. If no connection is |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
110 open to a session manager, just return 0. |
54172
6851117e8d89
(x_session_check_input): Remove numchars arg.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
111 Otherwise returns 1 if SAVE_SESSION_EVENT is stored in buffer BUFP. */ |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
112 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
113 int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
114 x_session_check_input (struct input_event *bufp) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
115 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
116 SELECT_TYPE read_fds; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
117 EMACS_TIME tmout; |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
118 int ret; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
119 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
120 if (ice_fd == -1) return 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
121 FD_ZERO (&read_fds); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
122 FD_SET (ice_fd, &read_fds); |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
123 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
124 tmout.tv_sec = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
125 tmout.tv_usec = 0; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
126 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
127 /* Reset this so wo can check kind after callbacks have been called by |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
128 IceProcessMessages. The smc_interact_CB sets the kind to |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
129 SAVE_SESSION_EVENT, but we don't know beforehand if that callback |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
130 will be called. */ |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
131 emacs_event.kind = NO_EVENT; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
132 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
133 ret = select (ice_fd+1, &read_fds, |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
134 (SELECT_TYPE *)0, (SELECT_TYPE *)0, &tmout); |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
135 |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
136 if (ret < 0) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
137 { |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
138 ice_connection_closed (); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
139 } |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
140 else if (ret > 0 && FD_ISSET (ice_fd, &read_fds)) |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
141 { |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
142 ret = IceProcessMessages (SmcGetIceConnection (smc_conn), |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
143 (IceReplyWaitInfo *)0, (Bool *)0); |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
144 if (ret != IceProcessMessagesSuccess) |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
145 { |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
146 /* Either IO error or Connection closed. */ |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
147 if (ret == IceProcessMessagesIOError) |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
148 IceCloseConnection (SmcGetIceConnection (smc_conn)); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
149 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
150 ice_connection_closed (); |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
151 } |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
152 } |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
153 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
154 /* Check if smc_interact_CB was called and we shall generate a |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
155 SAVE_SESSION_EVENT. */ |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
156 if (emacs_event.kind != NO_EVENT) |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
157 bcopy (&emacs_event, bufp, sizeof (struct input_event)); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
158 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
159 return emacs_event.kind != NO_EVENT ? 1 : 0; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
160 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
161 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
162 /* Return non-zero if we have a connection to a session manager. */ |
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
163 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
164 int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
165 x_session_have_connection (void) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
166 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
167 return ice_fd != -1; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
168 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
169 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
170 /* This is called when the session manager says it is OK to interact with the |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
171 user. Here we set the kind to SAVE_SESSION_EVENT so an event is generated. |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
172 Then lisp code can interact with the user. */ |
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
173 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
174 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
175 smc_interact_CB (SmcConn smcConn, SmPointer clientData) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
176 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
177 doing_interact = True; |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
178 emacs_event.kind = SAVE_SESSION_EVENT; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
179 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
180 |
49421
381ccbf15cd9
*** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents:
47942
diff
changeset
|
181 /* This is called when the session manager tells us to save ourselves. |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
182 We set the required properties so the session manager can restart us, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
183 plus the current working directory property (not mandatory) so we |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
184 are started in the correct directory. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
185 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
186 If this is a shutdown and we can request to interact with the user, |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
187 we do so, because we don't know what the lisp code might do. */ |
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
188 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
189 static void |
109139
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
190 smc_save_yourself_CB (SmcConn smcConn, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
191 SmPointer clientData, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
192 int saveType, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
193 Bool shutdown, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
194 int interactStyle, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
195 Bool fast) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
196 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
197 #define NR_PROPS 5 |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
198 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
199 SmProp *props[NR_PROPS]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
200 SmProp prop_ptr[NR_PROPS]; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
201 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
202 SmPropValue values[20]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
203 int val_idx = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
204 int props_idx = 0; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
205 |
65412
3a9693f993b2
(smc_save_yourself_CB): Use get_current_dir_name.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
206 char *cwd = NULL; |
108213
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
207 char *smid_opt, *chdir_opt = NULL; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
208 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
209 /* How to start a new instance of Emacs. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
210 props[props_idx] = &prop_ptr[props_idx]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
211 props[props_idx]->name = SmCloneCommand; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
212 props[props_idx]->type = SmLISTofARRAY8; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
213 props[props_idx]->num_vals = 1; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
214 props[props_idx]->vals = &values[val_idx++]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
215 props[props_idx]->vals[0].length = strlen (emacs_program); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
216 props[props_idx]->vals[0].value = emacs_program; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
217 ++props_idx; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
218 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
219 /* The name of the program. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
220 props[props_idx] = &prop_ptr[props_idx]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
221 props[props_idx]->name = SmProgram; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
222 props[props_idx]->type = SmARRAY8; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
223 props[props_idx]->num_vals = 1; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
224 props[props_idx]->vals = &values[val_idx++]; |
109141
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
225 props[props_idx]->vals[0].length = strlen (SSDATA (Vinvocation_name)); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
226 props[props_idx]->vals[0].value = SDATA (Vinvocation_name); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
227 ++props_idx; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
228 |
108213
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
229 /* How to restart Emacs. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
230 props[props_idx] = &prop_ptr[props_idx]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
231 props[props_idx]->name = SmRestartCommand; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
232 props[props_idx]->type = SmLISTofARRAY8; |
108213
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
233 /* /path/to/emacs, --smid=xxx --no-splash --chdir=dir */ |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
234 props[props_idx]->num_vals = 4; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
235 props[props_idx]->vals = &values[val_idx]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
236 props[props_idx]->vals[0].length = strlen (emacs_program); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
237 props[props_idx]->vals[0].value = emacs_program; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
238 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
239 smid_opt = xmalloc (strlen (SMID_OPT) + strlen (client_id) + 1); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
240 strcpy (smid_opt, SMID_OPT); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
241 strcat (smid_opt, client_id); |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
242 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
243 props[props_idx]->vals[1].length = strlen (smid_opt); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
244 props[props_idx]->vals[1].value = smid_opt; |
50016
03e0aadb68a0
xsmfns.c (smc_save_yourself_CB): Add --no-splash to options
Jan Djärv <jan.h.d@swipnet.se>
parents:
49421
diff
changeset
|
245 |
03e0aadb68a0
xsmfns.c (smc_save_yourself_CB): Add --no-splash to options
Jan Djärv <jan.h.d@swipnet.se>
parents:
49421
diff
changeset
|
246 props[props_idx]->vals[2].length = strlen (NOSPLASH_OPT); |
03e0aadb68a0
xsmfns.c (smc_save_yourself_CB): Add --no-splash to options
Jan Djärv <jan.h.d@swipnet.se>
parents:
49421
diff
changeset
|
247 props[props_idx]->vals[2].value = NOSPLASH_OPT; |
108213
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
248 |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
249 cwd = get_current_dir_name (); |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
250 if (cwd) |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
251 { |
108237
4f8f06b9b90b
xsmfns.c (smc_save_yourself_CB): strlen(client_id) => strlen(cwd).
Jan D. <jan.h.d@swipnet.se>
parents:
108213
diff
changeset
|
252 chdir_opt = xmalloc (strlen (CHDIR_OPT) + strlen (cwd) + 1); |
108213
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
253 strcpy (chdir_opt, CHDIR_OPT); |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
254 strcat (chdir_opt, cwd); |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
255 |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
256 props[props_idx]->vals[3].length = strlen (chdir_opt); |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
257 props[props_idx]->vals[3].value = chdir_opt; |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
258 } |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
259 |
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
260 val_idx += cwd ? 4 : 3; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
261 ++props_idx; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
262 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
263 /* User id. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
264 props[props_idx] = &prop_ptr[props_idx]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
265 props[props_idx]->name = SmUserID; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
266 props[props_idx]->type = SmARRAY8; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
267 props[props_idx]->num_vals = 1; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
268 props[props_idx]->vals = &values[val_idx++]; |
109141
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
269 props[props_idx]->vals[0].length = strlen (SSDATA (Vuser_login_name)); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
270 props[props_idx]->vals[0].value = SDATA (Vuser_login_name); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
271 ++props_idx; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
272 |
65412
3a9693f993b2
(smc_save_yourself_CB): Use get_current_dir_name.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
273 |
3a9693f993b2
(smc_save_yourself_CB): Use get_current_dir_name.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
274 if (cwd) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
275 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
276 props[props_idx] = &prop_ptr[props_idx]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
277 props[props_idx]->name = SmCurrentDirectory; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
278 props[props_idx]->type = SmARRAY8; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
279 props[props_idx]->num_vals = 1; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
280 props[props_idx]->vals = &values[val_idx++]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
281 props[props_idx]->vals[0].length = strlen (cwd); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
282 props[props_idx]->vals[0].value = cwd; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
283 ++props_idx; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
284 } |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
285 |
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
286 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
287 SmcSetProperties (smcConn, props_idx, props); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
288 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
289 xfree (smid_opt); |
108213
e6266e624471
Run kill-emacs when exiting for display closed or SIGTERM/HUP.
Jan D. <jan.h.d@swipnet.se>
parents:
107121
diff
changeset
|
290 xfree (chdir_opt); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
291 |
95479
9588c3703f38
remove useless if-before-free tests
Jim Meyering <jim@meyering.net>
parents:
95252
diff
changeset
|
292 free (cwd); |
65412
3a9693f993b2
(smc_save_yourself_CB): Use get_current_dir_name.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
293 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
294 /* See if we maybe shall interact with the user. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
295 if (interactStyle != SmInteractStyleAny |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
296 || ! shutdown |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
297 || saveType == SmSaveLocal |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
298 || ! SmcInteractRequest (smcConn, SmDialogNormal, smc_interact_CB, 0)) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
299 { |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
300 /* No interaction, we are done saving ourself. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
301 SmcSaveYourselfDone (smcConn, True); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
302 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
303 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
304 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
305 /* According to the SM specification, this shall close the connection. */ |
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
306 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
307 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
308 smc_die_CB (SmcConn smcConn, SmPointer clientData) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
309 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
310 SmcCloseConnection (smcConn, 0, 0); |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
311 ice_connection_closed (); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
312 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
313 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
314 /* We don't use the next two but they are mandatory, leave them empty. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
315 According to the SM specification, we should not interact with the |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
316 user between smc_save_yourself_CB is called and until smc_save_complete_CB |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
317 is called. It seems like a lot of job to implement this and it doesn't |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
318 even seem necessary. */ |
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
319 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
320 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
321 smc_save_complete_CB (SmcConn smcConn, SmPointer clientData) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
322 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
323 /* Empty */ |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
324 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
325 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
326 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
327 smc_shutdown_cancelled_CB (SmcConn smcConn, SmPointer clientData) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
328 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
329 /* Empty */ |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
330 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
331 |
49421
381ccbf15cd9
*** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents:
47942
diff
changeset
|
332 /* Error handlers for SM and ICE. We don't want to exit Emacs just |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
333 because there is some error in the session management. */ |
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
334 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
335 static void |
109139
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
336 smc_error_handler (SmcConn smcConn, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
337 Bool swap, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
338 int offendingMinorOpcode, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
339 unsigned long offendingSequence, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
340 int errorClass, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
341 int severity, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
342 SmPointer values) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
343 { |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
344 /* Empty */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
345 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
346 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
347 static void |
109139
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
348 ice_error_handler (IceConn iceConn, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
349 Bool swap, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
350 int offendingMinorOpcode, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
351 unsigned long offendingSequence, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
352 int errorClass, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
353 int severity, |
c25c24812fb1
Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109126
diff
changeset
|
354 IcePointer values) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
355 { |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
356 /* Empty */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
357 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
358 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
359 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
360 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
361 ice_io_error_handler (IceConn iceConn) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
362 { |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
363 /* Connection probably gone. */ |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
364 ice_connection_closed (); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
365 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
366 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
367 /* This is called when the ICE connection is created or closed. The SM library |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
368 uses ICE as it transport protocol. */ |
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
369 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
370 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
371 ice_conn_watch_CB (IceConn iceConn, IcePointer clientData, int opening, IcePointer *watchData) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
372 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
373 if (! opening) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
374 { |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
375 ice_connection_closed (); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
376 return; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
377 } |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
378 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
379 ice_fd = IceConnectionNumber (iceConn); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
380 #ifdef F_SETOWN |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
381 fcntl (ice_fd, F_SETOWN, getpid ()); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
382 #endif /* ! defined (F_SETOWN) */ |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
383 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
384 #ifdef SIGIO |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
385 if (interrupt_input) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
386 init_sigio (ice_fd); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
387 #endif /* ! defined (SIGIO) */ |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
388 |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
389 add_keyboard_wait_descriptor (ice_fd); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
390 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
391 |
52298
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
392 /* Create the client leader window. */ |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
393 |
109141
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
394 #ifndef USE_GTK |
52298
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
395 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
396 create_client_leader_window (struct x_display_info *dpyinfo, char *client_id) |
52298
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
397 { |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
398 Window w; |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
399 XClassHint class_hints; |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
400 Atom sm_id; |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
401 |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
402 w = XCreateSimpleWindow (dpyinfo->display, |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
403 dpyinfo->root_window, |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
404 -1, -1, 1, 1, |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
405 CopyFromParent, CopyFromParent, CopyFromParent); |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
406 |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
407 class_hints.res_name = (char *) SDATA (Vx_resource_name); |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
408 class_hints.res_class = (char *) SDATA (Vx_resource_class); |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
409 XSetClassHint (dpyinfo->display, w, &class_hints); |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
410 XStoreName (dpyinfo->display, w, class_hints.res_name); |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
411 |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
412 sm_id = XInternAtom (dpyinfo->display, "SM_CLIENT_ID", False); |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
413 XChangeProperty (dpyinfo->display, w, sm_id, XA_STRING, 8, PropModeReplace, |
109141
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
414 (unsigned char *)client_id, strlen (client_id)); |
52298
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
415 |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
416 dpyinfo->client_leader_window = w; |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
417 } |
109141
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
418 #endif /* ! USE_GTK */ |
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
419 |
52298
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
420 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
421 /* Try to open a connection to the session manager. */ |
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
422 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
423 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
424 x_session_initialize (struct x_display_info *dpyinfo) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
425 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
426 #define SM_ERRORSTRING_LEN 512 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
427 char errorstring[SM_ERRORSTRING_LEN]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
428 char* previous_id = NULL; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
429 SmcCallbacks callbacks; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
430 int name_len = 0; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
431 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
432 ice_fd = -1; |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
433 doing_interact = False; |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
434 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
435 /* Check if we where started by the session manager. If so, we will |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
436 have a previous id. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
437 if (! EQ (Vx_session_previous_id, Qnil) && STRINGP (Vx_session_previous_id)) |
109141
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
438 previous_id = SSDATA (Vx_session_previous_id); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
439 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
440 /* Construct the path to the Emacs program. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
441 if (! EQ (Vinvocation_directory, Qnil)) |
109141
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
442 name_len += strlen (SSDATA (Vinvocation_directory)); |
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
443 name_len += strlen (SSDATA (Vinvocation_name)); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
444 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
445 /* This malloc will not be freed, but it is only done once, and hopefully |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
446 not very large */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
447 emacs_program = xmalloc (name_len + 1); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
448 emacs_program[0] = '\0'; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
449 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
450 if (! EQ (Vinvocation_directory, Qnil)) |
109141
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
451 strcpy (emacs_program, SSDATA (Vinvocation_directory)); |
fa173b9bd9ce
Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents:
109139
diff
changeset
|
452 strcat (emacs_program, SSDATA (Vinvocation_name)); |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
453 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
454 /* The SM protocol says all callbacks are mandatory, so set up all |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
455 here and in the mask passed to SmcOpenConnection. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
456 callbacks.save_yourself.callback = smc_save_yourself_CB; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
457 callbacks.save_yourself.client_data = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
458 callbacks.die.callback = smc_die_CB; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
459 callbacks.die.client_data = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
460 callbacks.save_complete.callback = smc_save_complete_CB; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
461 callbacks.save_complete.client_data = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
462 callbacks.shutdown_cancelled.callback = smc_shutdown_cancelled_CB; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
463 callbacks.shutdown_cancelled.client_data = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
464 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
465 /* Set error handlers. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
466 SmcSetErrorHandler (smc_error_handler); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
467 IceSetErrorHandler (ice_error_handler); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
468 IceSetIOErrorHandler (ice_io_error_handler); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
469 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
470 /* Install callback for when connection status changes. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
471 IceAddConnectionWatch (ice_conn_watch_CB, 0); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
472 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
473 /* Open the connection to the session manager. A failure is not |
49421
381ccbf15cd9
*** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents:
47942
diff
changeset
|
474 critical, it usually means that no session manager is running. |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
475 The errorstring is here for debugging. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
476 smc_conn = SmcOpenConnection (NULL, NULL, 1, 0, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
477 (SmcSaveYourselfProcMask| |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
478 SmcDieProcMask| |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
479 SmcSaveCompleteProcMask| |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
480 SmcShutdownCancelledProcMask), |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
481 &callbacks, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
482 previous_id, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
483 &client_id, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
484 SM_ERRORSTRING_LEN, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
485 errorstring); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
486 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
487 if (smc_conn != 0) |
52298
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
488 { |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
489 Vx_session_id = make_string (client_id, strlen (client_id)); |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
490 |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
491 #ifdef USE_GTK |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
492 /* GTK creats a leader window by itself, but we need to tell |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
493 it about our client_id. */ |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
494 gdk_set_sm_client_id (client_id); |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
495 #else |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
496 create_client_leader_window (dpyinfo, client_id); |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
497 #endif |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
498 } |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
499 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
500 |
83350
e7d5238afe52
Work around crashes in X session management after normal shutdown of X server.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
501 /* Ensure that the session manager is not contacted again. */ |
e7d5238afe52
Work around crashes in X session management after normal shutdown of X server.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
502 |
e7d5238afe52
Work around crashes in X session management after normal shutdown of X server.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
503 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
504 x_session_close (void) |
83350
e7d5238afe52
Work around crashes in X session management after normal shutdown of X server.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
505 { |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
506 ice_connection_closed (); |
83350
e7d5238afe52
Work around crashes in X session management after normal shutdown of X server.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
507 } |
e7d5238afe52
Work around crashes in X session management after normal shutdown of X server.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
508 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
509 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
510 DEFUN ("handle-save-session", Fhandle_save_session, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
511 Shandle_save_session, 1, 1, "e", |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
512 doc: /* Handle the save_yourself event from a session manager. |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
513 A session manager can tell Emacs that the window system is shutting down |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
514 by sending Emacs a save_yourself message. Emacs executes this function when |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
515 such an event occurs. This function then executes `emacs-session-save'. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
516 After that, this function informs the session manager that it can continue |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
517 or abort shutting down the window system depending on the return value |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
518 from `emacs-session-save' If the return value is non-nil the session manager |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
519 is told to abort the window system shutdown. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
520 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
521 Do not call this function yourself. */) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
522 (event) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
523 Lisp_Object event; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
524 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
525 /* Check doing_interact so that we don't do anything if someone called |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
526 this at the wrong time. */ |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
527 if (doing_interact) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
528 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
529 Bool cancel_shutdown = False; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
530 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
531 cancel_shutdown = ! EQ (call0 (intern ("emacs-session-save")), Qnil); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
532 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
533 SmcInteractDone (smc_conn, cancel_shutdown); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
534 SmcSaveYourselfDone (smc_conn, True); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
535 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
536 doing_interact = False; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
537 } |
43919
833c0585a612
Added return value to Fhandle_save_session to avoid compiler warning.
Jan Djärv <jan.h.d@swipnet.se>
parents:
43848
diff
changeset
|
538 |
833c0585a612
Added return value to Fhandle_save_session to avoid compiler warning.
Jan Djärv <jan.h.d@swipnet.se>
parents:
43848
diff
changeset
|
539 return Qnil; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
540 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
541 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
542 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
543 /*********************************************************************** |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
544 Initialization |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
545 ***********************************************************************/ |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
546 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108237
diff
changeset
|
547 syms_of_xsmfns (void) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
548 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
549 DEFVAR_LISP ("x-session-id", &Vx_session_id, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
550 doc: /* The session id Emacs got from the session manager for this session. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
551 Changing the value does not change the session id used by Emacs. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
552 The value is nil if no session manager is running. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
553 See also `x-session-previous-id', `emacs-save-session-functions', |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
554 `emacs-session-save' and `emacs-session-restore'." */); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
555 Vx_session_id = Qnil; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
556 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
557 DEFVAR_LISP ("x-session-previous-id", &Vx_session_previous_id, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
558 doc: /* The previous session id Emacs got from session manager. |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
559 If Emacs is running on a window system that has a session manager, the |
73801
14ab09766fec
(syms_of_xsmfns): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
560 session manager gives Emacs a session id. It is feasible for Emacs Lisp |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
561 code to use the session id to save configuration in, for example, a file |
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
562 with a file name based on the session id. If Emacs is running when the |
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
563 window system is shut down, the session manager remembers that Emacs was |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
564 running and saves the session id Emacs had. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
565 |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
566 When the window system is started again, the session manager restarts |
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
567 Emacs and hands Emacs the session id it had the last time it was |
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
568 running. This is now the previous session id and the value of this |
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
569 variable. If configuration was saved in a file as stated above, the |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
570 previous session id shall be used to reconstruct the file name. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
571 |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
572 The session id Emacs has while it is running is in the variable |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
573 `x-session-id'. The value of this variable and `x-session-id' may be the |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
574 same, depending on how the session manager works. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
575 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
576 See also `emacs-save-session-functions', `emacs-session-save' and |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
577 `emacs-session-restore'." */); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
578 Vx_session_previous_id = Qnil; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
579 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
580 defsubr (&Shandle_save_session); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
581 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
582 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
583 #endif /* HAVE_X_SM */ |
52401 | 584 |
585 /* arch-tag: 56a2c58c-adfa-430a-b772-130abd29fd2e | |
586 (do not change this comment) */ |