summaryrefslogtreecommitdiff
path: root/news/tin/patches/patch-ak
blob: 26547f8be6c30f2a5b9c8e6448f5fc2a3dbd323c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
$NetBSD: patch-ak,v 1.1 2009/10/22 22:01:26 wiz Exp $

--- src/signal.c.orig	2008-12-30 20:26:25.000000000 +0100
+++ src/signal.c
@@ -104,6 +104,8 @@ int need_resize = cNo;
  */
 int NOTESLINES;
 
+static t_bool redraw_after_suspend;
+
 
 #ifndef __LCLINT__ /* lclint doesn't like it */
 static const struct {
@@ -268,7 +270,7 @@ handle_resize(
 	switch (signal_context) {
 		case cArt:
 			ClearScreen();
-			show_art_msg(curr_group->name);
+			show_art_msg(CURR_GROUP.name);
 			break;
 
 		case cConfig:
@@ -303,14 +305,24 @@ handle_resize(
 			gl_redraw();
 			break;
 
+		case cPromptCONT:
+			if (redraw_after_suspend)
+				info_message(_(txt_return_key));
+			break;
+
 		case cPromptSLK:
 			prompt_slk_redraw();
 			break;
 
+		case cPromptYN:
+			prompt_yn_redraw();
+			break;
+
 		default:
 			break;
 	}
 	my_fflush(stdout);
+	redraw_after_suspend = FALSE;
 #endif /* SIGWINCH || SIGTSTP */
 }
 
@@ -320,22 +332,34 @@ static void
 handle_suspend(
 	void)
 {
+	t_bool save_cmd_line = cmd_line;
+	t_bool save_state = (!batch_mode || !cmd_line);
+
 	TRACE(("handle_suspend(%d)", signal_context));
 
 	set_keypad_off();
 	if (!cmd_line)
 		set_xclick_off();
 
-	Raw(FALSE);
+	if (save_state) {
+		EndWin();
+		Raw(FALSE);
+	}
+
 	wait_message(0, _(txt_suspended_message), tin_progname);
 
 	kill(0, SIGSTOP);				/* Put ourselves to sleep */
 
 	RESTORE_HANDLER(SIGTSTP, signal_handler);
 
-	if (!batch_mode) {
+	if (save_state) {
 		Raw(TRUE);
+		InitWin();
+		cmd_line = save_cmd_line;
+		if (!cmd_line)
+			my_retouch();
 		need_resize = cRedraw;		/* Flag a redraw */
+		redraw_after_suspend = TRUE;
 	}
 	set_keypad_on();
 	if (!cmd_line)