Support SIGUSR1/2 for immediate(ish) quit-and-save
Respond to a SIGUSR1 or SIGUSR2 signal by configuring itself for autosave, saving a new file, or overwriting the current, respectively, and sending itself a SIGTERM (which _generally_ causes Tux Paint to quit, depending on where you are in the UI). Closes https://sourceforge.net/p/tuxpaint/feature-requests/188/
This commit is contained in:
parent
d70c587077
commit
99b566ae26
5 changed files with 109 additions and 24 deletions
|
|
@ -2,13 +2,13 @@ CHANGES.txt for Tux Paint
|
|||
|
||||
Tux Paint - A simple drawing program for children.
|
||||
|
||||
Copyright (c) 2002-2018
|
||||
Copyright (c) 2002-2019
|
||||
Various contributors (see below, and AUTHORS.txt)
|
||||
http://www.tuxpaint.org/
|
||||
|
||||
$Id$
|
||||
|
||||
2018.Dec.18 (0.9.24)
|
||||
2019.Apr.3 (0.9.24)
|
||||
* Bug Fixes
|
||||
---------
|
||||
* Correct issue that prevented Tux Paint from lauching on Mac OS X 10.7.
|
||||
|
|
@ -34,6 +34,14 @@ $Id$
|
|||
Use "--newcolorslast" option.
|
||||
(Suggested by Bernard Verhaeghe)
|
||||
|
||||
* Recognize signals (SIGUSR1 and SIGUSR2) on POSIX systems,
|
||||
which causes Tux Paint to quit, first saving the current drawing
|
||||
(if unsaved) (like "--autosave"), either saving a new image
|
||||
(like "--saveovernew") (via SIGUSR1), or overwritting the current
|
||||
drawing (like "--saveover") (via SIGUSR2).
|
||||
(Thanks to Flavio Airundo for the idea; closes
|
||||
https://sourceforge.net/p/tuxpaint/feature-requests/188/)
|
||||
|
||||
* Documentation updates
|
||||
---------------------
|
||||
* Mended link to MinGW/MSYS instructions at John Popplewell's website.
|
||||
|
|
@ -41,6 +49,10 @@ $Id$
|
|||
|
||||
* Improved and expanded usage info (e.g., "tuxpaint --help" output)
|
||||
|
||||
* Documentation on POSIX signals recognized by Tux Paint (e.g.,
|
||||
the new "SIGUSR1" & "SIGUSR2") added to a new doc file,
|
||||
"SIGNALS.txt".
|
||||
|
||||
* Misc
|
||||
----
|
||||
* Verbose debugging, and "DEBUG_PRINTF()" macro now available;
|
||||
|
|
|
|||
|
|
@ -3,22 +3,22 @@
|
|||
|
||||
A simple drawing program for children
|
||||
|
||||
Copyright 2002-2018 by various contributors; see AUTHORS.txt
|
||||
Copyright 2002-2019 by various contributors; see AUTHORS.txt
|
||||
http://www.tuxpaint.org/
|
||||
|
||||
June 14, 2002 - December 18, 2018
|
||||
June 14, 2002 - April 3, 2019
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
+------------------------------------------------------------------------+
|
||||
|Table of Contents |
|
||||
|------------------------------------------------------------------------|
|
||||
| * About |
|
||||
| * Using Tux Paint |
|
||||
| * Loading Other Pictures into Tux Paint |
|
||||
| * Further Reading |
|
||||
| * How to Get Help |
|
||||
+------------------------------------------------------------------------+
|
||||
+-------------------------------------------+
|
||||
|Table of Contents |
|
||||
|-------------------------------------------|
|
||||
| * About |
|
||||
| * Using Tux Paint |
|
||||
| * Loading Other Pictures into Tux Paint |
|
||||
| * Further Reading |
|
||||
| * How to Get Help |
|
||||
+-------------------------------------------+
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
|
|
@ -97,8 +97,8 @@ Loading Tux Paint
|
|||
|
||||
Windows Users
|
||||
|
||||
[Icon]
|
||||
Tux Paint
|
||||
[Icon]
|
||||
Tux Paint
|
||||
|
||||
If you installed Tux Paint on your computer using the
|
||||
'Tux Paint Installer,' it will have asked you whether you wanted a
|
||||
|
|
@ -876,6 +876,8 @@ Doing it Manually
|
|||
Notes on creating PNG format bitmapped images for use in Tux Paint.
|
||||
* SVG.txt
|
||||
Notes on creating SVG format vector images for use in Tux Paint.
|
||||
* SIGNALS.txt
|
||||
Information about POSIX signals Tux Paint responds to.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
|
|
|
|||
50
docs/en/SIGNALS.txt
Normal file
50
docs/en/SIGNALS.txt
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
SIGNALS.txt for Tux Paint
|
||||
|
||||
Tux Paint - A simple drawing program for children.
|
||||
|
||||
Copyright 2019 by Bill Kendrick and others
|
||||
bill@newbreedsoftware.com
|
||||
http://www.tuxpaint.org/
|
||||
|
||||
April 3, 2019
|
||||
|
||||
Tux Paint responds to the following signals (which can be
|
||||
sent to the program's process via `kill` or `killall`, for
|
||||
example).
|
||||
|
||||
* SIGTERM (also, [Ctrl]+[C] from a terminal running "tuxpaint")
|
||||
|
||||
Tux Paint responds as if the "Quit" button were pressed,
|
||||
or the desktop environment was told to close Tux Paint
|
||||
(e.g., by clicking a window close button, or pressing
|
||||
[Alt]+[F4] on most systems).
|
||||
|
||||
From the main interface, Tux Paint will prompt whether or
|
||||
not you wish to quit, and (unless overridden by "--autosave")
|
||||
if you'd like to save the current drawing (if unsaved),
|
||||
and if so, and it's a modified version of an existing drawing
|
||||
(unless overridden by "--saveover" or "--saveovernew"),
|
||||
whether or not to overwrite the existing drawing, or save
|
||||
to a new file.
|
||||
|
||||
From other parts of the interface, the signal is currently
|
||||
interpreted as a request to go back (e.g., from the
|
||||
"New" dialog back to the main interface), as if a "Back"
|
||||
button in Tux Paint were clicked, or the [Esc] key pressed.
|
||||
|
||||
* SIGUSR1 & SIGUSR2
|
||||
|
||||
Tux Paint responds by setting its "--autosave" option, and either
|
||||
"--saveovernew" (for SIGUSR1) or "--saveover" (for SIGUSR2),
|
||||
and sending itself a SIGTERM signal.
|
||||
|
||||
So, from the main interface, Tux Paint should quit almost immediately,
|
||||
with no questions asked.
|
||||
|
||||
From other parts of the interface, unfortunately, Tux Paint
|
||||
will go back one level in the interface. Therefore, at this time,
|
||||
it may be necessary to send this signal to Tux Paint a few times,
|
||||
for it to quit completely.
|
||||
|
||||
e.g., `killall -s SIGUSR1 tuxpaint`
|
||||
|
||||
|
|
@ -17,12 +17,12 @@ version
|
|||
</h1>
|
||||
<h3>A simple drawing program for children</h3>
|
||||
|
||||
<p>Copyright 2002-2018 by various contributors; see AUTHORS.txt<br>
|
||||
<p>Copyright 2002-2019 by various contributors; see AUTHORS.txt<br>
|
||||
<a href="http://www.tuxpaint.org/">http://www.tuxpaint.org/</a></p>
|
||||
|
||||
<p>June 14, 2002 -
|
||||
|
||||
December 18, 2018</p>
|
||||
April 3, 2019</p>
|
||||
|
||||
</center>
|
||||
|
||||
|
|
@ -1159,6 +1159,9 @@ version
|
|||
<li><a href="../SVG.txt">SVG.txt</a><br>
|
||||
Notes on creating SVG format vector images for use in Tux Paint.
|
||||
|
||||
<li><a href="../SIGNALS.txt">SIGNALS.txt</a><br>
|
||||
Information about POSIX signals Tux Paint responds to.
|
||||
|
||||
</ul>
|
||||
</blockquote>
|
||||
|
||||
|
|
|
|||
|
|
@ -1197,6 +1197,7 @@ static int disable_save;
|
|||
static int ok_to_use_lockfile = 1;
|
||||
static int start_blank;
|
||||
static int autosave_on_quit;
|
||||
static int no_prompt_on_quit = 0;
|
||||
|
||||
static int dont_do_xor;
|
||||
static int dont_load_stamps;
|
||||
|
|
@ -7732,13 +7733,19 @@ static int generate_fontconfig_cache(void *vp)
|
|||
((c) >= 'a' && (c) <= 'f') ? ((c) - 'a' + 10) : 0)
|
||||
|
||||
#ifndef WIN32
|
||||
/**
|
||||
* FIXME
|
||||
*/
|
||||
static void signal_handler(int sig)
|
||||
{
|
||||
(void)sig;
|
||||
// It is not legal to call printf or most other functions here!
|
||||
if (sig == SIGUSR1 || sig == SIGUSR2) {
|
||||
autosave_on_quit = 1;
|
||||
no_prompt_on_quit = 1;
|
||||
if (sig == SIGUSR1) {
|
||||
promptless_save = SAVE_OVER_NO;
|
||||
} else {
|
||||
promptless_save = SAVE_OVER_ALWAYS;
|
||||
}
|
||||
raise(SIGTERM);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -13808,9 +13815,16 @@ static int do_quit(int tool)
|
|||
{
|
||||
int done, tmp_tool;
|
||||
|
||||
done = do_prompt_snd(PROMPT_QUIT_TXT,
|
||||
PROMPT_QUIT_YES, PROMPT_QUIT_NO, SND_AREYOUSURE,
|
||||
(TOOL_QUIT % 2) * 48 + 24, (TOOL_QUIT / 2) * 48 + 40 + 24);
|
||||
if (!no_prompt_on_quit)
|
||||
{
|
||||
done = do_prompt_snd(PROMPT_QUIT_TXT,
|
||||
PROMPT_QUIT_YES, PROMPT_QUIT_NO, SND_AREYOUSURE,
|
||||
(TOOL_QUIT % 2) * 48 + 24, (TOOL_QUIT / 2) * 48 + 40 + 24);
|
||||
}
|
||||
else
|
||||
{
|
||||
done = 1;
|
||||
}
|
||||
|
||||
if (done && !been_saved && !disable_save)
|
||||
{
|
||||
|
|
@ -24209,6 +24223,10 @@ static void setup(void)
|
|||
instead of 'Ok') */
|
||||
|
||||
signal(SIGPIPE, signal_handler);
|
||||
|
||||
/* Set up signal for no-questions-asked remote closing of app */
|
||||
signal(SIGUSR1, signal_handler);
|
||||
signal(SIGUSR2, signal_handler);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue