From 18a0543d0a5959c50c4b30f8aed5387465fbaa8a Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Fri, 15 Oct 2021 04:52:24 +0300 Subject: Gtk: disabled ^Z suspension on Unix for the time being * This has always been broken as Gtk will not hide the window before suspending. * It has been deemed to complicated to implement at the moment. Even if we can catch SIGTSTP (not that trivial), it seems to be impossible - at least without some lower level Xlib interaction - to hide the program window before raising SIGTSTP. * Even if everything worked, it is unclear whether it is actually desirable to suspend a GUI application - ^Z may be pressed accidentally and it will be inconvenient to resume the job. So we would additionally have to check for the existence of an attached console. --- src/cmdline.c | 7 +++---- src/interface-gtk/interface.c | 9 --------- 2 files changed, 3 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/cmdline.c b/src/cmdline.c index 018998e..5c080af 100644 --- a/src/cmdline.c +++ b/src/cmdline.c @@ -398,13 +398,12 @@ teco_state_process_edit_cmd(teco_machine_t *ctx, teco_machine_t *parent_ctx, gch } return TRUE; -#ifdef SIGTSTP +#if !defined(INTERFACE_GTK) && defined(SIGTSTP) case TECO_CTL_KEY('Z'): /* - * does not raise signal if handling of + * does not automatically raise signal if handling of * special characters temporarily disabled in terminal - * (Curses), or command-line is detached from - * terminal (GTK+). + * (Curses), or the actual input is detached from terminal (GTK+). * This does NOT change the state of the popup window. */ raise(SIGTSTP); diff --git a/src/interface-gtk/interface.c b/src/interface-gtk/interface.c index 154c950..104bb89 100644 --- a/src/interface-gtk/interface.c +++ b/src/interface-gtk/interface.c @@ -1052,15 +1052,6 @@ teco_interface_event_loop(GError **error) * closing the window if supported by this version of glib. * Note that this replaces SciTECO's default SIGTERM handler * so it will additionally raise(SIGINT). - * - * FIXME: On ^Z, we do not suspend properly. The window is still shown. - * Perhaps we should try to catch SIGTSTP? - * This does not work with g_unix_signal_add(), though, so any - * workaround would be tricky. - * We could create a pipe via g_unix_open_pipe() which we - * write to using write() in a normal signal handler. - * We can then add a watcher using g_unix_fd_add() which will - * hide the main window. */ #ifdef G_OS_UNIX g_unix_signal_add(SIGTERM, teco_interface_sigterm_handler, NULL); -- cgit v1.2.3