aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/interface-curses
diff options
context:
space:
mode:
authorRobin Haberkorn <rhaberkorn@fmsbw.de>2026-01-05 00:56:11 +0300
committerRobin Haberkorn <rhaberkorn@fmsbw.de>2026-01-05 00:56:11 +0300
commitb697806bfd5a6756bb4b40776c4499577671a167 (patch)
tree588b6a3eb3d319c382f786d7e729572464d10053 /src/interface-curses
parentc825c2fd4441ac29f6775ef5bed4143d03da3c97 (diff)
Curses: fixed mouse interactions on PDCurses
* There is yet another PDCurses vs. ncurses incompatibility: ncurses has a mouse event queue so you must call getmouse() repeatedly for every KEY_MOUSE, while PDCurses apparently doesn't queue and would end up in an infinite loop. I.e. the program would hang once you press any mouse button. * This forced us to add an PDCurses-specific version of teco_interface_getmouse().
Diffstat (limited to 'src/interface-curses')
-rw-r--r--src/interface-curses/interface.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/interface-curses/interface.c b/src/interface-curses/interface.c
index 010515c..0764db3 100644
--- a/src/interface-curses/interface.c
+++ b/src/interface-curses/interface.c
@@ -1967,6 +1967,20 @@ teco_interface_process_mevent(MEVENT *event, GError **error)
return teco_cmdline_keymacro("MOUSE", -1, error);
}
+#ifdef __PDCURSES__
+
+static gboolean
+teco_interface_getmouse(GError **error)
+{
+ MEVENT event;
+
+ /* in contrast to ncurses, there is no separate mouse event queue */
+ return getmouse(&event) != OK ||
+ teco_interface_process_mevent(&event, error);
+}
+
+#else /* __PDCURSES__ */
+
static gboolean
teco_interface_getmouse(GError **error)
{
@@ -1979,6 +1993,8 @@ teco_interface_getmouse(GError **error)
return TRUE;
}
+#endif /* !__PDCURSES__ */
+
#endif /* NCURSES_MOUSE_VERSION >= 2 */
static gint