From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Ken Brown Newsgroups: gmane.emacs.bugs Subject: bug#23483: 24.5; cygwin emacs w32 doesn not ask to save files when windows shuts down Date: Thu, 12 May 2016 09:57:58 -0400 Message-ID: <86773dca-93da-e643-74df-a80cafcbf716@cornell.edu> References: <83a8k0e6l3.fsf@gnu.org> <83y47hc1r9.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------CAEB524CA94C1283CFB04E19" X-Trace: ger.gmane.org 1463062196 19706 80.91.229.3 (12 May 2016 14:09:56 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 12 May 2016 14:09:56 +0000 (UTC) Cc: strozzi2@llnl.gov, 23483@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu May 12 16:09:47 2016 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1b0rJ5-0004TB-3U for geb-bug-gnu-emacs@m.gmane.org; Thu, 12 May 2016 16:09:39 +0200 Original-Received: from localhost ([::1]:57647 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b0rIz-0005UQ-BV for geb-bug-gnu-emacs@m.gmane.org; Thu, 12 May 2016 10:09:33 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:40912) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b0r8u-0000kd-VN for bug-gnu-emacs@gnu.org; Thu, 12 May 2016 09:59:10 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b0r8o-0001qT-4F for bug-gnu-emacs@gnu.org; Thu, 12 May 2016 09:59:07 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:36769) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b0r8o-0001qN-2L for bug-gnu-emacs@gnu.org; Thu, 12 May 2016 09:59:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1b0r8n-0004L6-Qh for bug-gnu-emacs@gnu.org; Thu, 12 May 2016 09:59:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Ken Brown Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 12 May 2016 13:59:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 23483 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 23483-submit@debbugs.gnu.org id=B23483.146306148716616 (code B ref 23483); Thu, 12 May 2016 13:59:01 +0000 Original-Received: (at 23483) by debbugs.gnu.org; 12 May 2016 13:58:07 +0000 Original-Received: from localhost ([127.0.0.1]:49106 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b0r7u-0004Jw-SO for submit@debbugs.gnu.org; Thu, 12 May 2016 09:58:07 -0400 Original-Received: from limerock04.mail.cornell.edu ([128.84.13.244]:56465) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b0r7t-0004JS-Bg for 23483@debbugs.gnu.org; Thu, 12 May 2016 09:58:05 -0400 X-CornellRouted: This message has been Routed already. Original-Received: from authusersmtp.mail.cornell.edu (granite4.serverfarm.cornell.edu [10.16.197.9]) by limerock04.mail.cornell.edu (8.14.4/8.14.4_cu) with ESMTP id u4CDvxnM002844; Thu, 12 May 2016 09:57:59 -0400 Original-Received: from [192.168.1.3] (mta-68-175-148-36.twcny.rr.com [68.175.148.36] (may be forged)) (authenticated bits=0) by authusersmtp.mail.cornell.edu (8.14.4/8.12.10) with ESMTP id u4CDvvwK024950 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Thu, 12 May 2016 09:57:58 -0400 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.0 In-Reply-To: <83y47hc1r9.fsf@gnu.org> X-PMX-Cornell-Gauge: Gauge=XXXXX X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:118166 Archived-At: This is a multi-part message in MIME format. --------------CAEB524CA94C1283CFB04E19 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit On 5/10/2016 12:32 PM, Eli Zaretskii wrote: > What I think we need to do instead is send a message to the main > thread that will produce a special event, and then bind that event to > kill-emacs (probably in special-event-map). Thanks. My attempt to implement this is attached. Ken --------------CAEB524CA94C1283CFB04E19 Content-Type: text/plain; charset=UTF-8; name="endsession.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="endsession.patch" diff --git a/src/keyboard.c b/src/keyboard.c index 92d5c30..fe04b3f 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3893,6 +3893,16 @@ kbd_buffer_get_event (KBOARD **kbp, kbd_fetch_ptr = event + 1; } #endif + +#ifdef HAVE_NTGUI + else if (event->kind == END_SESSION_EVENT) + { + /* Make an event (end-session). */ + obj = list1 (Qend_session); + kbd_fetch_ptr = event + 1; + } +#endif + #if defined (HAVE_X11) || defined (HAVE_NTGUI) \ || defined (HAVE_NS) else if (event->kind == ICONIFY_EVENT) @@ -10984,6 +10994,7 @@ syms_of_keyboard (void) #ifdef HAVE_NTGUI DEFSYM (Qlanguage_change, "language-change"); + DEFSYM (Qend_session, "end-session"); #endif #ifdef HAVE_DBUS @@ -11758,6 +11769,10 @@ keys_of_keyboard (void) initial_define_lispy_key (Vspecial_event_map, "delete-frame", "handle-delete-frame"); +#ifdef HAVE_NTGUI + initial_define_lispy_key (Vspecial_event_map, "end-session", + "kill-emacs"); +#endif initial_define_lispy_key (Vspecial_event_map, "ns-put-working-text", "ns-put-working-text"); initial_define_lispy_key (Vspecial_event_map, "ns-unput-working-text", diff --git a/src/termhooks.h b/src/termhooks.h index d21d6ce..ff74d99 100644 --- a/src/termhooks.h +++ b/src/termhooks.h @@ -158,6 +158,9 @@ enum event_kind SELECTION_CLEAR_EVENT, /* Another X client cleared our selection. */ BUFFER_SWITCH_EVENT, /* A process filter has switched buffers. */ DELETE_WINDOW_EVENT, /* An X client said "delete this window". */ +#ifdef HAVE_NTGUI + END_SESSION_EVENT, /* The user is logging out or shutting down. */ +#endif MENU_BAR_EVENT, /* An event generated by the menu bar. The frame_or_window field's cdr holds the Lisp-level event value. diff --git a/src/w32fns.c b/src/w32fns.c index ede8f6b..7a1f84a 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -4795,6 +4795,11 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) my_post_msg (&wmsg, hwnd, msg, wParam, lParam); return 0; + case WM_ENDSESSION: + my_post_msg (&wmsg, hwnd, msg, wParam, lParam); + /* If we return, the process will be terminated immediately. */ + sleep (1000); + case WM_WINDOWPOSCHANGING: /* Don't restrict the sizing of any kind of frames. If the window manager doesn't, there's no reason to do it ourselves. */ diff --git a/src/w32term.c b/src/w32term.c index 74ea6b5..72e1245 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -5260,6 +5260,10 @@ w32_read_socket (struct terminal *terminal, } break; + case WM_ENDSESSION: + inev.kind = END_SESSION_EVENT; + break; + case WM_INITMENU: f = x_window_to_frame (dpyinfo, msg.msg.hwnd); --------------CAEB524CA94C1283CFB04E19--