diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2021-10-15 04:52:24 +0300 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2021-10-15 04:52:24 +0300 |
commit | 18a0543d0a5959c50c4b30f8aed5387465fbaa8a (patch) | |
tree | 58f92559b1621f6baa9dc357c794b88535bc2f70 | |
parent | 50679b111d10b21dae655123b219d51e5f5b17ef (diff) | |
download | sciteco-18a0543d0a5959c50c4b30f8aed5387465fbaa8a.tar.gz |
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.
-rw-r--r-- | TODO | 15 | ||||
-rw-r--r-- | src/cmdline.c | 7 | ||||
-rw-r--r-- | src/interface-gtk/interface.c | 9 |
3 files changed, 18 insertions, 13 deletions
@@ -80,6 +80,21 @@ Known Bugs: logging system. * Out-of-tree builds are broken. See contrib/scintilla.am. + * Gtk on Unix: 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. + Unfortunately, it is also not trivial to get notified when + the window has really been hidden/unrealized. + Even if everything worked, it might well be annoying if + you accidentally suspend your instance while not being + connected to a terminal. + Suspension from the command-line has therefore been disabled + on Gtk for the time being. Features: * Auto-indention could be implemented via context-sensitive 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'): /* - * <CTL/Z> does not raise signal if handling of + * <CTL/Z> 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); |