mirror of
https://github.com/neovim/neovim
synced 2025-07-16 01:01:49 +00:00
Merge pull request #34305
backport: fix(windows): don't set window icon on SIGHUP
This commit is contained in:
@ -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
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user