]> granicus.if.org Git - vim/commitdiff
patch 8.2.2898: QuitPre and ExitPre not triggered when GUI window is closed v8.2.2898
authorBram Moolenaar <Bram@vim.org>
Sat, 29 May 2021 10:21:58 +0000 (12:21 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 29 May 2021 10:21:58 +0000 (12:21 +0200)
Problem:    QuitPre and ExitPre not triggered when GUI window is closed.
Solution:   Call before_quit_autocmds(). (closes #8242)

src/ex_docmd.c
src/gui.c
src/proto/ex_docmd.pro
src/version.c

index 8d8ef08dfb774a9c63d4319e2a06601fb3e61167..58dad657ce64b346435d90e756e1ee70f005844f 100644 (file)
@@ -5498,7 +5498,7 @@ not_exiting(void)
     settmode(TMODE_RAW);
 }
 
-    static int
+    int
 before_quit_autocmds(win_T *wp, int quit_all, int forceit)
 {
     apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, wp->w_buffer);
@@ -5572,7 +5572,7 @@ ex_quit(exarg_T *eap)
 #endif
 
     /*
-     * If there are more files or windows we won't exit.
+     * If there is only one relevant window we will exit.
      */
     if (check_more(FALSE, eap->forceit) == OK && only_one_window())
        exiting = TRUE;
index c0374c561dad1c1214562ef28370735caae144a7..2539a4f6422764b0d40fcc969ac8dd6b0782914a 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -857,9 +857,10 @@ gui_exit(int rc)
     void
 gui_shell_closed(void)
 {
-    cmdmod_T       save_cmdmod;
+    cmdmod_T       save_cmdmod = cmdmod;
 
-    save_cmdmod = cmdmod;
+    if (before_quit_autocmds(curwin, TRUE, FALSE))
+       return;
 
     // Only exit when there are no changed files
     exiting = TRUE;
index 848106350f0bca6635b31adc2a29ebc396bcbb5b..959f209ac17e28f2333709c5fe28a86add8dca94 100644 (file)
@@ -7,13 +7,13 @@ int getline_equal(char_u *(*fgetline)(int, void *, int, getline_opt_T), void *co
 void *getline_cookie(char_u *(*fgetline)(int, void *, int, getline_opt_T), void *cookie);
 char_u *getline_peek(char_u *(*fgetline)(int, void *, int, getline_opt_T), void *cookie);
 char *ex_errmsg(char *msg, char_u *arg);
+int checkforcmd(char_u **pp, char *cmd, int len);
 int parse_command_modifiers(exarg_T *eap, char **errormsg, cmdmod_T *cmod, int skip_only);
 int has_cmdmod(cmdmod_T *cmod);
 int cmdmod_error(void);
 void apply_cmdmod(cmdmod_T *cmod);
 void undo_cmdmod(cmdmod_T *cmod);
 int parse_cmd_address(exarg_T *eap, char **errormsg, int silent);
-int checkforcmd(char_u **pp, char *cmd, int len);
 char_u *skip_option_env_lead(char_u *start);
 char_u *find_ex_command(exarg_T *eap, int *full, int (*lookup)(char_u *, size_t, int cmd, cctx_T *), cctx_T *cctx);
 int modifier_len(char_u *cmd);
@@ -33,6 +33,7 @@ char_u *find_nextcmd(char_u *p);
 char_u *check_nextcmd(char_u *p);
 char_u *get_command_name(expand_T *xp, int idx);
 void not_exiting(void);
+int before_quit_autocmds(win_T *wp, int quit_all, int forceit);
 void ex_quit(exarg_T *eap);
 void tabpage_close(int forceit);
 void tabpage_close_other(tabpage_T *tp, int forceit);
index da315bf138cac3dfe84bb59c238ddd1e0fdd74a0..4b1a7aec9ae766e61619d4bed6108f605b0c5b88 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2898,
 /**/
     2897,
 /**/