summarylogtreecommitdiffstats
path: root/alternate-screen.patch
blob: 7816814ab496795848199b1a2ca7b524b7ecfb95 (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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
From a5272e25f5b8f95b341ec9682a0cdd7cb24b87b1 Mon Sep 17 00:00:00 2001
From: gnunn1 <gerald.b.nunn@gmail.com>
Date: Sat, 20 Aug 2016 14:25:54 -0400
Subject: [PATCH] Add terminal-screen-changed signal

---
 src/vte/vteterminal.h |  6 ++++--
 src/vtegtk.cc         | 19 +++++++++++++++++++
 src/vtegtk.hh         |  1 +
 src/vteinternal.hh    |  2 ++
 src/vteseq.cc         | 14 ++++++++++++++
 5 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/src/vte/vteterminal.h b/src/vte/vteterminal.h
index 12ecf181..bc953e21 100644
--- a/src/vte/vteterminal.h
+++ b/src/vte/vteterminal.h
@@ -116,11 +116,13 @@ struct _VteTerminalClass {
 
         /* Add new vfuncs here, and subtract from the padding below. */
 
+        void (*terminal_screen_changed)(VteTerminal* terminal);
+
         /* Padding for future expansion. */
 #if _VTE_GTK == 3
-        gpointer _padding[13];
+        gpointer _padding[12];
 #elif _VTE_GTK == 4
-        gpointer _padding[16];
+        gpointer _padding[15];
 #endif /* _VTE_GTK */
 
 // FIXMEgtk4 use class private data instead
diff --git a/src/vtegtk.cc b/src/vtegtk.cc
index 1c5a4983..4a5688fa 100644
--- a/src/vtegtk.cc
+++ b/src/vtegtk.cc
@@ -1306,6 +1306,8 @@ vte_terminal_class_init(VteTerminalClass *klass)
 
         klass->bell = NULL;
 
+        klass->terminal_screen_changed = NULL;
+
         /* GtkScrollable interface properties */
         g_object_class_override_property (gobject_class, PROP_HADJUSTMENT, "hadjustment");
         g_object_class_override_property (gobject_class, PROP_VADJUSTMENT, "vadjustment");
@@ -2000,6 +2002,23 @@ vte_terminal_class_init(VteTerminalClass *klass)
                                    G_OBJECT_CLASS_TYPE(klass),
                                    g_cclosure_marshal_VOID__VOIDv);
 
+        /**
+         * VteTerminal::screen-changed:
+         * @vteterminal: the object which received the signal
+         *
+         * This signal is emitted when the terminal screen changes between
+         * normal and alternate screen.
+         */
+        signals[SIGNAL_TERMINAL_SCREEN_CHANGED] =
+                g_signal_new(I_("terminal-screen-changed"),
+                             G_OBJECT_CLASS_TYPE(klass),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET(VteTerminalClass, bell),
+                             NULL,
+                             NULL,
+                             g_cclosure_marshal_VOID__INT,
+                             G_TYPE_NONE, 1, G_TYPE_INT);
+
         /**
          * VteTerminal:allow-bold:
          *
diff --git a/src/vtegtk.hh b/src/vtegtk.hh
index 0a31d205..64cb46f5 100644
--- a/src/vtegtk.hh
+++ b/src/vtegtk.hh
@@ -57,6 +57,7 @@ enum {
         SIGNAL_SHELL_PREEXEC,
         SIGNAL_NOTIFICATION_RECEIVED,
 #endif
+        SIGNAL_TERMINAL_SCREEN_CHANGED,
         SIGNAL_WINDOW_TITLE_CHANGED,
         LAST_SIGNAL
 };
diff --git a/src/vteinternal.hh b/src/vteinternal.hh
index 0c52442b..0f0243a3 100644
--- a/src/vteinternal.hh
+++ b/src/vteinternal.hh
@@ -1587,6 +1587,8 @@ public:
 #undef _VTE_CMD_HANDLER
 #undef _VTE_CMD_HANDLER_NOP
 #undef _VTE_CMD_HANDLER_R
+
+        void emit_terminal_screen_changed(int screen);
 };
 
 } // namespace terminal
diff --git a/src/vteseq.cc b/src/vteseq.cc
index 8a7f5b34..5ec0448a 100644
--- a/src/vteseq.cc
+++ b/src/vteseq.cc
@@ -220,6 +220,14 @@ Terminal::emit_resize_window(guint columns,
         g_signal_emit(m_terminal, signals[SIGNAL_RESIZE_WINDOW], 0, columns, rows);
 }
 
+/* Emit a "terminal-screen-changed" signal */
+void
+Terminal::emit_terminal_screen_changed(int screen)
+{
+        _vte_debug_print(VTE_DEBUG_SIGNALS, "Emitting `terminal_screen_changed'.\n");
+        g_signal_emit(m_terminal, signals[SIGNAL_TERMINAL_SCREEN_CHANGED], 0, screen);
+}
+
 /* Some common functions */
 
 /* In Xterm, upon printing a character in the last column the cursor doesn't
@@ -392,6 +400,9 @@ void
 Terminal::switch_normal_screen()
 {
         switch_screen(&m_normal_screen);
+
+        /* Emit signal */
+        emit_terminal_screen_changed(0);
 }
 
 void
@@ -426,6 +437,9 @@ void
 Terminal::switch_alternate_screen()
 {
         switch_screen(&m_alternate_screen);
+
+        /* Emit signal */
+        emit_terminal_screen_changed(1);
 }
 
 void
-- 
2.39.2.13.g1fb56cf030