[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Exit hooks not run at logout on w32
From: |
Lennart Borgman |
Subject: |
Re: Exit hooks not run at logout on w32 |
Date: |
Wed, 28 Jun 2006 19:17:15 +0200 |
User-agent: |
Thunderbird 1.5.0.4 (Windows/20060516) |
Jason Rumney wrote:
Lennart Borgman <address@hidden> writes:
Where is the code that discovers that WM_CLOSE has been sent to the
last frame and that Emacs should be killed?
WM_CLOSE is received in w32fns.c and passed on to lisp in w32term.c,
the same as most other windows messages. But I think you will find
that the system does not send a WM_CLOSE in these circumstances,
because that would trigger the exit hooks if it was the case.
Yes, you are right. There was no WM_CLOSE and indeed also no
WM_QUERYENDSESSION. At least not in the case that I have been looking
at: starting emacs.exe from cmd.exe. I believe that this might be due to
that MS Windows believes that emacs.exe is a console app.
Actually emacs recieve a control event instead, CTRL_LOGOFF_EVENT during
my testing. (It could also be CTRL_SHUTDOWN_EVENT and probably
CTRL_CLOSE_EVENT.) This event can be catched in ctrl_c_handler in
w32console.c. I have tried that and then used PostThreadMessage
(dwWindowsThreadId, WM_EMACS_KILL, 0, 0) to be able to call
save-buffers-kill-emacs later on.
WM_EMACS_KILL seems ok to use here, it is not used anywhere else as far
as I can see. It is passed on and shows up in w32_msg_pump. There I am
trying to use my_post_msg to pass it to the lisp thread. However it does
not show up in w32_read_socket so I guess I am doing something wrong. My
call to my_post_msg looks like this:
static void
w32_msg_pump (deferred_msg * msg_buf)
{
MSG msg;
int result;
HWND focus_window;
BOOL bRet;
msh_mousewheel = RegisterWindowMessage (MSH_MOUSEWHEEL);
while ( (bRet = GetMessage (&msg, NULL, 0, 0)) != 0)
{
if (-1 == bRet) {
// error, handle?
} else {
if (msg.hwnd == NULL)
{
switch (msg.message)
{
case WM_EMACS_KILL:
{
W32Msg wmsg;
printf("w32_msg_pump: WM_EMACS_KILL\n"); fflush(stdout);
my_post_msg (&wmsg, 0, msg, 0, 0);
break;
}
Should it show up in w32_read_socket after this or am I misunderstanding
something? In w32_read_socket I do
case WM_EMACS_KILL:
printf("w32_read_socket WM_EMACS_KILL\n"); fflush(stdout);
I would appreciate some help here.
- Exit hooks not run at logout on w32, Lennart Borgman, 2006/06/26
- Re: Exit hooks not run at logout on w32, Jason Rumney, 2006/06/26
- Re: Exit hooks not run at logout on w32, Lennart Borgman, 2006/06/26
- Re: Exit hooks not run at logout on w32, Lennart Borgman, 2006/06/26
- Re: Exit hooks not run at logout on w32, Jason Rumney, 2006/06/26
- Re: Exit hooks not run at logout on w32, Lennart Borgman, 2006/06/27
- Re: Exit hooks not run at logout on w32,
Lennart Borgman <=
- Re: Exit hooks not run at logout on w32, Jason Rumney, 2006/06/28
- Re: Exit hooks not run at logout on w32, Lennart Borgman, 2006/06/28
- Re: Exit hooks not run at logout on w32, Lennart Borgman, 2006/06/28
- Re: Exit hooks not run at logout on w32, Jason Rumney, 2006/06/29
- Re: Exit hooks not run at logout on w32, Lennart Borgman, 2006/06/29
- Re: Exit hooks not run at logout on w32, David Kastrup, 2006/06/29
- Re: Exit hooks not run at logout on w32, Lennart Borgman, 2006/06/29
- Re: Exit hooks not run at logout on w32, Mathias Dahl, 2006/06/30
- Re: Exit hooks not run at logout on w32, Lennart Borgman, 2006/06/29