From 0788310aab7611eccb2212faa33ac22c41e97915 Mon Sep 17 00:00:00 2001
From: koroal <98806009+koroal@users.noreply.github.com>
Date: Thu, 1 Dec 2022 10:54:53 +0300
Subject: [PATCH 4/4] CHG: do not close sticky windows when pressing ESC

It is still possible to close a sticky window by pressing the [X] button
in its title bar or by right-clicking the corresponding toolbar icon.
---
 src/simutrans/gui/simwin.cc     | 5 ++++-
 src/simutrans/gui/simwin.h      | 2 +-
 src/simutrans/siminteraction.cc | 2 +-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/simutrans/gui/simwin.cc b/src/simutrans/gui/simwin.cc
index 9d1439f9f..4e2478e1d 100644
--- a/src/simutrans/gui/simwin.cc
+++ b/src/simutrans/gui/simwin.cc
@@ -1009,10 +1009,13 @@ bool destroy_win(const ptrdiff_t magic)
 }
 
 
-bool destroy_win(const gui_frame_t *gui)
+bool destroy_win(const gui_frame_t *gui, bool destroy_sticky)
 {
 	for(  uint i=0;  i<wins.get_count();  i++  ) {
 		if(wins[i].gui == gui) {
+			if(wins[i].sticky && !destroy_sticky) {
+				return false;
+			}
 			if(inside_event_handling==wins[i].gui) {
 				kill_list.append_unique(wins[i]);
 			}
diff --git a/src/simutrans/gui/simwin.h b/src/simutrans/gui/simwin.h
index 57dd42494..8d0420423 100644
--- a/src/simutrans/gui/simwin.h
+++ b/src/simutrans/gui/simwin.h
@@ -173,7 +173,7 @@ bool win_is_top(const gui_frame_t *ig);
 
 
 // return true if actually window was destroyed (or marked for destruction)
-bool destroy_win(const gui_frame_t *ig);
+bool destroy_win(const gui_frame_t *ig, bool destroy_sticky=true);
 bool destroy_win(const ptrdiff_t magic);
 
 void destroy_all_win(bool destroy_sticky);
diff --git a/src/simutrans/siminteraction.cc b/src/simutrans/siminteraction.cc
index ca3caf818..160f46472 100644
--- a/src/simutrans/siminteraction.cc
+++ b/src/simutrans/siminteraction.cc
@@ -152,7 +152,7 @@ void interaction_t::interactive_event( const event_t &ev )
 			case 127:
 				if( !IS_CONTROL_PRESSED( &ev ) && !IS_SHIFT_PRESSED( &ev ) ) {
 					// close topmost win
-					destroy_win( win_get_top() );
+					destroy_win( win_get_top(), false );
 				}
 				break;
 
-- 
2.38.1

