Merge pull request #34305

backport: fix(windows): don't set window icon on SIGHUP
This commit is contained in:
Justin M. Keyes
2025-06-04 10:20:05 -07:00
committed by GitHub
3 changed files with 23 additions and 15 deletions

View File

@ -811,7 +811,7 @@ void getout(int exitval)
#ifdef MSWIN
// Restore Windows console icon before exiting.
os_icon_set(NULL, NULL);
os_icon_reset();
os_title_reset();
#endif

View File

@ -29,6 +29,11 @@ int os_open_conin_fd(void)
return conin_fd;
}
void os_clear_hwnd(void)
{
hWnd = NULL;
}
void os_replace_stdin_to_conin(void)
{
close(STDIN_FILENO);
@ -53,20 +58,17 @@ void os_replace_stdout_and_stderr_to_conout(void)
assert(conerr_fd == STDERR_FILENO);
}
/// Sets Windows console icon, or pass NULL to restore original icon.
void os_icon_set(HICON hIconSmall, HICON hIcon)
{
/// Resets Windows console icon if we got an original one on startup.
void os_icon_reset(void) {
if (hWnd == NULL) {
return;
}
hIconSmall = hIconSmall ? hIconSmall : hOrigIconSmall;
hIcon = hIcon ? hIcon : hOrigIcon;
if (hIconSmall != NULL) {
SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_SMALL, (LPARAM)hIconSmall);
if (hOrigIconSmall) {
SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_SMALL, (LPARAM)hOrigIconSmall);
}
if (hIcon != NULL) {
SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_BIG, (LPARAM)hIcon);
if (hOrigIcon) {
SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_BIG, (LPARAM)hOrigIcon);
}
}
@ -78,9 +80,6 @@ void os_icon_init(void)
if ((hWnd = GetConsoleWindow()) == NULL) {
return;
}
// Save Windows console icon to be restored later.
hOrigIconSmall = (HICON)SendMessage(hWnd, WM_GETICON, (WPARAM)ICON_SMALL, (LPARAM)0);
hOrigIcon = (HICON)SendMessage(hWnd, WM_GETICON, (WPARAM)ICON_BIG, (LPARAM)0);
const char *vimruntime = os_getenv("VIMRUNTIME");
if (vimruntime != NULL) {
@ -90,7 +89,8 @@ void os_icon_init(void)
} else {
HICON hVimIcon = LoadImage(NULL, NameBuff, IMAGE_ICON, 64, 64,
LR_LOADFROMFILE | LR_LOADMAP3DCOLORS);
os_icon_set(hVimIcon, hVimIcon);
hOrigIconSmall = (HICON)SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_SMALL, (LPARAM)hVimIcon);
hOrigIcon = (HICON)SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_BIG, (LPARAM)hVimIcon);
}
}
}

View File

@ -22,6 +22,11 @@
#endif
static SignalWatcher spipe, shup, squit, sterm, susr1, swinch;
#ifdef MSWIN
# include "nvim/os/os_win_console.h"
#endif
#ifdef SIGPWR
static SignalWatcher spwr;
#endif
@ -195,12 +200,15 @@ static void on_signal(SignalWatcher *handle, int signum, void *data)
case SIGPIPE:
// Ignore
break;
#endif
case SIGHUP:
#ifdef MSWIN
os_clear_hwnd();
#endif
case SIGTERM:
#ifdef SIGQUIT
case SIGQUIT:
#endif
case SIGHUP:
if (!rejecting_deadly) {
deadly_signal(signum);
}