Mercurial > emacs
annotate src/xsmfns.c @ 107819:834292200403
xfns.c (Fx_show_tip): Subtract last glyph's width only when it is for padding.
author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
---|---|
date | Sat, 10 Apr 2010 19:59:46 +0900 |
parents | c7c70f9fa3d7 |
children | e6266e624471 f01ecb2cea43 |
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 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
45 /* The user login name. */ |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
46 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
47 extern Lisp_Object Vuser_login_name; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
48 |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
49 /* 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
|
50 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
51 static struct input_event emacs_event; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
52 |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
53 /* 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
|
54 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
55 static int ice_fd; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
56 |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
57 /* 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
|
58 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
59 static int doing_interact; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
60 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
61 /* 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
|
62 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
63 static SmcConn smc_conn; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
64 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
65 /* 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
|
66 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
67 static char *client_id; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
68 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
69 /* 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
|
70 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
71 static char *emacs_program; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
72 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
73 /* 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
|
74 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
75 Lisp_Object Vx_session_id; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
76 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
77 /* 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
|
78 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
|
79 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
80 Lisp_Object Vx_session_previous_id; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
81 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
82 /* 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
|
83 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
|
84 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
85 #define SMID_OPT "--smid=" |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
86 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
87 |
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
|
88 /* 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
|
89 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
|
90 |
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 #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
|
92 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
93 static void |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
94 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
|
95 { |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
96 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
|
97 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
|
98 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
|
99 } |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
100 |
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
|
101 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
102 /* 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
|
103 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
|
104 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
|
105 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
106 int |
54172
6851117e8d89
(x_session_check_input): Remove numchars arg.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
107 x_session_check_input (bufp) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
108 struct input_event *bufp; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
109 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
110 SELECT_TYPE read_fds; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
111 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
|
112 int ret; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
113 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
114 if (ice_fd == -1) return 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
115 FD_ZERO (&read_fds); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
116 FD_SET (ice_fd, &read_fds); |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
117 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
118 tmout.tv_sec = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
119 tmout.tv_usec = 0; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
120 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
121 /* 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
|
122 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
|
123 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
|
124 will be called. */ |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
125 emacs_event.kind = NO_EVENT; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
126 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
127 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
|
128 (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
|
129 |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
130 if (ret < 0) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
131 { |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
132 ice_connection_closed (); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
133 } |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
134 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
|
135 { |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
136 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
|
137 (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
|
138 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
|
139 { |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
140 /* 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
|
141 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
|
142 IceCloseConnection (SmcGetIceConnection (smc_conn)); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
143 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
144 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
|
145 } |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
146 } |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
147 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
148 /* 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
|
149 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
|
150 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
|
151 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
|
152 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
153 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
|
154 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
155 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
156 /* 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
|
157 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
158 int |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
159 x_session_have_connection () |
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 return ice_fd != -1; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
162 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
163 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
164 /* 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
|
165 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
|
166 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
|
167 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
168 static void |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
169 smc_interact_CB (smcConn, clientData) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
170 SmcConn smcConn; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
171 SmPointer clientData; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
172 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
173 doing_interact = True; |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43919
diff
changeset
|
174 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
|
175 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
176 |
49421
381ccbf15cd9
*** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents:
47942
diff
changeset
|
177 /* 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
|
178 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
|
179 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
|
180 are started in the correct directory. |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
181 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
182 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
|
183 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
|
184 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
185 static void |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
186 smc_save_yourself_CB (smcConn, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
187 clientData, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
188 saveType, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
189 shutdown, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
190 interactStyle, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
191 fast) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
192 SmcConn smcConn; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
193 SmPointer clientData; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
194 int saveType; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
195 Bool shutdown; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
196 int interactStyle; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
197 Bool fast; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
198 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
199 #define NR_PROPS 5 |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
200 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
201 SmProp *props[NR_PROPS]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
202 SmProp prop_ptr[NR_PROPS]; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
203 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
204 SmPropValue values[20]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
205 int val_idx = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
206 int props_idx = 0; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
207 |
65412
3a9693f993b2
(smc_save_yourself_CB): Use get_current_dir_name.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
208 char *cwd = NULL; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
209 char *smid_opt; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
210 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
211 /* 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
|
212 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
|
213 props[props_idx]->name = SmCloneCommand; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
214 props[props_idx]->type = SmLISTofARRAY8; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
215 props[props_idx]->num_vals = 1; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
216 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
|
217 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
|
218 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
|
219 ++props_idx; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
220 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
221 /* The name of the program. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
222 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
|
223 props[props_idx]->name = SmProgram; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
224 props[props_idx]->type = SmARRAY8; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
225 props[props_idx]->num_vals = 1; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
226 props[props_idx]->vals = &values[val_idx++]; |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
227 props[props_idx]->vals[0].length = strlen (SDATA (Vinvocation_name)); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
228 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
|
229 ++props_idx; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
230 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
231 /* How to restart Emacs (i.e.: /path/to/emacs --smid=xxxx --no-splash). */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
232 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
|
233 props[props_idx]->name = SmRestartCommand; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
234 props[props_idx]->type = SmLISTofARRAY8; |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
235 props[props_idx]->num_vals = 3; /* /path/to/emacs, --smid=xxx --no-splash */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
236 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
|
237 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
|
238 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
|
239 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
240 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
|
241 strcpy (smid_opt, SMID_OPT); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
242 strcat (smid_opt, client_id); |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
243 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
244 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
|
245 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
|
246 |
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].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
|
248 props[props_idx]->vals[2].value = 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
|
249 val_idx += 3; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
250 ++props_idx; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
251 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
252 /* User id. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
253 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
|
254 props[props_idx]->name = SmUserID; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
255 props[props_idx]->type = SmARRAY8; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
256 props[props_idx]->num_vals = 1; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
257 props[props_idx]->vals = &values[val_idx++]; |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
258 props[props_idx]->vals[0].length = strlen (SDATA (Vuser_login_name)); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
259 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
|
260 ++props_idx; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
261 |
65412
3a9693f993b2
(smc_save_yourself_CB): Use get_current_dir_name.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
262 cwd = get_current_dir_name (); |
3a9693f993b2
(smc_save_yourself_CB): Use get_current_dir_name.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
263 |
3a9693f993b2
(smc_save_yourself_CB): Use get_current_dir_name.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
264 if (cwd) |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
265 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
266 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
|
267 props[props_idx]->name = SmCurrentDirectory; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
268 props[props_idx]->type = SmARRAY8; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
269 props[props_idx]->num_vals = 1; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
270 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
|
271 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
|
272 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
|
273 ++props_idx; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
274 } |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
275 |
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
276 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
277 SmcSetProperties (smcConn, props_idx, props); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
278 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
279 xfree (smid_opt); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
280 |
95479
9588c3703f38
remove useless if-before-free tests
Jim Meyering <jim@meyering.net>
parents:
95252
diff
changeset
|
281 free (cwd); |
65412
3a9693f993b2
(smc_save_yourself_CB): Use get_current_dir_name.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
282 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
283 /* 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
|
284 if (interactStyle != SmInteractStyleAny |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
285 || ! shutdown |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
286 || saveType == SmSaveLocal |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
287 || ! 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
|
288 { |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
289 /* 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
|
290 SmcSaveYourselfDone (smcConn, True); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
291 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
292 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
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 /* 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
|
295 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
296 static void |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
297 smc_die_CB (smcConn, clientData) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
298 SmcConn smcConn; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
299 SmPointer clientData; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
300 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
301 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
|
302 ice_connection_closed (); |
43810
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 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
305 /* 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
|
306 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
|
307 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
|
308 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
|
309 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
|
310 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
311 static void |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
312 smc_save_complete_CB (smcConn, clientData) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
313 SmcConn smcConn; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
314 SmPointer clientData; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
315 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
316 /* Empty */ |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
317 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
318 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
319 static void |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
320 smc_shutdown_cancelled_CB (smcConn, clientData) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
321 SmcConn smcConn; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
322 SmPointer clientData; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
323 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
324 /* Empty */ |
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 |
49421
381ccbf15cd9
*** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents:
47942
diff
changeset
|
327 /* 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
|
328 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
|
329 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
330 static void |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
331 smc_error_handler (smcConn, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
332 swap, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
333 offendingMinorOpcode, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
334 offendingSequence, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
335 errorClass, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
336 severity, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
337 values) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
338 SmcConn smcConn; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
339 Bool swap; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
340 int offendingMinorOpcode; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
341 unsigned long offendingSequence; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
342 int errorClass; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
343 int severity; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
344 SmPointer values; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
345 { |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
346 /* Empty */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
347 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
348 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
349 static void |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
350 ice_error_handler (iceConn, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
351 swap, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
352 offendingMinorOpcode, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
353 offendingSequence, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
354 errorClass, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
355 severity, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
356 values) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
357 IceConn iceConn; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
358 Bool swap; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
359 int offendingMinorOpcode; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
360 unsigned long offendingSequence; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
361 int errorClass; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
362 int severity; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
363 IcePointer values; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
364 { |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
365 /* Empty */ |
43810
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 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
368 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
369 static void |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
370 ice_io_error_handler (iceConn) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
371 IceConn iceConn; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
372 { |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
373 /* 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
|
374 ice_connection_closed (); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
375 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
376 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
377 /* 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
|
378 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
|
379 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
380 static void |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
381 ice_conn_watch_CB (iceConn, clientData, opening, watchData) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
382 IceConn iceConn; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
383 IcePointer clientData; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
384 Bool opening; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
385 IcePointer *watchData; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
386 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
387 if (! opening) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
388 { |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
389 ice_connection_closed (); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
390 return; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
391 } |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
392 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
393 ice_fd = IceConnectionNumber (iceConn); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
394 #ifdef F_SETOWN |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
395 fcntl (ice_fd, F_SETOWN, getpid ()); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
396 #endif /* ! defined (F_SETOWN) */ |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
397 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
398 #ifdef SIGIO |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
399 if (interrupt_input) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
400 init_sigio (ice_fd); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
401 #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
|
402 |
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
403 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
|
404 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
405 |
52298
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
406 /* 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
|
407 |
52298
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
408 static void |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
409 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
|
410 struct x_display_info *dpyinfo; |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
411 char *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
|
412 { |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
413 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
|
414 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
|
415 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
|
416 |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
417 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
|
418 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
|
419 -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
|
420 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
|
421 |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
422 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
|
423 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
|
424 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
|
425 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
|
426 |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
427 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
|
428 XChangeProperty (dpyinfo->display, w, sm_id, XA_STRING, 8, PropModeReplace, |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
429 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
|
430 |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
431 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
|
432 } |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
433 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
434 /* 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
|
435 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
436 void |
52298
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
437 x_session_initialize (dpyinfo) |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
438 struct x_display_info *dpyinfo; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
439 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
440 #define SM_ERRORSTRING_LEN 512 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
441 char errorstring[SM_ERRORSTRING_LEN]; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
442 char* previous_id = NULL; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
443 SmcCallbacks callbacks; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
444 int name_len = 0; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
445 |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
446 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
|
447 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
|
448 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
449 /* 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
|
450 have a previous id. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
451 if (! EQ (Vx_session_previous_id, Qnil) && STRINGP (Vx_session_previous_id)) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
452 previous_id = SDATA (Vx_session_previous_id); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
453 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
454 /* 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
|
455 if (! EQ (Vinvocation_directory, Qnil)) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
456 name_len += strlen (SDATA (Vinvocation_directory)); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
457 name_len += strlen (SDATA (Vinvocation_name)); |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
458 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
459 /* 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
|
460 not very large */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
461 emacs_program = xmalloc (name_len + 1); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
462 emacs_program[0] = '\0'; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
463 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
464 if (! EQ (Vinvocation_directory, Qnil)) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
465 strcpy (emacs_program, SDATA (Vinvocation_directory)); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
466 strcat (emacs_program, SDATA (Vinvocation_name)); |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
467 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
468 /* 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
|
469 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
|
470 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
|
471 callbacks.save_yourself.client_data = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
472 callbacks.die.callback = smc_die_CB; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
473 callbacks.die.client_data = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
474 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
|
475 callbacks.save_complete.client_data = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
476 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
|
477 callbacks.shutdown_cancelled.client_data = 0; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
478 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
479 /* Set error handlers. */ |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
480 SmcSetErrorHandler (smc_error_handler); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
481 IceSetErrorHandler (ice_error_handler); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
482 IceSetIOErrorHandler (ice_io_error_handler); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
483 |
57704
4ff1d695430a
* xsmfns.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56135
diff
changeset
|
484 /* 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
|
485 IceAddConnectionWatch (ice_conn_watch_CB, 0); |
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 /* 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
|
488 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
|
489 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
|
490 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
|
491 (SmcSaveYourselfProcMask| |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
492 SmcDieProcMask| |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
493 SmcSaveCompleteProcMask| |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
494 SmcShutdownCancelledProcMask), |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
495 &callbacks, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
496 previous_id, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
497 &client_id, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
498 SM_ERRORSTRING_LEN, |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
499 errorstring); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
500 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
501 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
|
502 { |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
503 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
|
504 |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
505 #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
|
506 /* 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
|
507 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
|
508 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
|
509 #else |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
510 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
|
511 #endif |
1a4bd2bec861
Create and initialize a client leader window so session management
Jan Djärv <jan.h.d@swipnet.se>
parents:
50016
diff
changeset
|
512 } |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
513 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
514 |
83350
e7d5238afe52
Work around crashes in X session management after normal shutdown of X server.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
515 /* 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
|
516 |
e7d5238afe52
Work around crashes in X session management after normal shutdown of X server.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
517 void |
e7d5238afe52
Work around crashes in X session management after normal shutdown of X server.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
518 x_session_close () |
e7d5238afe52
Work around crashes in X session management after normal shutdown of X server.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
519 { |
107121
c7c70f9fa3d7
Fix for bug#5512, don't rely on SIGIO alone.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
520 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
|
521 } |
e7d5238afe52
Work around crashes in X session management after normal shutdown of X server.
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
522 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
523 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
524 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
|
525 Shandle_save_session, 1, 1, "e", |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
526 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
|
527 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
|
528 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
|
529 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
|
530 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
|
531 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
|
532 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
|
533 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
|
534 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
535 Do not call this function yourself. */) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
536 (event) |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
537 Lisp_Object event; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
538 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
539 /* 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
|
540 this at the wrong time. */ |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
541 if (doing_interact) |
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 Bool cancel_shutdown = False; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
544 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
545 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
|
546 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
547 SmcInteractDone (smc_conn, cancel_shutdown); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
548 SmcSaveYourselfDone (smc_conn, True); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
549 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
550 doing_interact = False; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
551 } |
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
|
552 |
833c0585a612
Added return value to Fhandle_save_session to avoid compiler warning.
Jan Djärv <jan.h.d@swipnet.se>
parents:
43848
diff
changeset
|
553 return Qnil; |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
554 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
555 |
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 /*********************************************************************** |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
558 Initialization |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
559 ***********************************************************************/ |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
560 void |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
561 syms_of_xsmfns () |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
562 { |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
563 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
|
564 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
|
565 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
|
566 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
|
567 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
|
568 `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
|
569 Vx_session_id = Qnil; |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
570 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
571 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
|
572 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
|
573 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
|
574 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
|
575 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
|
576 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
|
577 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
|
578 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
|
579 |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
580 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
|
581 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
|
582 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
|
583 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
|
584 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
|
585 |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
586 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
|
587 `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
|
588 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
|
589 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
590 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
|
591 `emacs-session-restore'." */); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
592 Vx_session_previous_id = Qnil; |
47942
080b4586492b
Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
46370
diff
changeset
|
593 |
43810
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
594 defsubr (&Shandle_save_session); |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
595 } |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
596 |
3d8039f847f5
New file for X session management.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
597 #endif /* HAVE_X_SM */ |
52401 | 598 |
599 /* arch-tag: 56a2c58c-adfa-430a-b772-130abd29fd2e | |
600 (do not change this comment) */ |