aboutsummaryrefslogtreecommitdiff
path: root/src/FbTk/SignalHandler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/FbTk/SignalHandler.cc')
-rw-r--r--src/FbTk/SignalHandler.cc79
1 files changed, 0 insertions, 79 deletions
diff --git a/src/FbTk/SignalHandler.cc b/src/FbTk/SignalHandler.cc
deleted file mode 100644
index 5f06210..0000000
--- a/src/FbTk/SignalHandler.cc
+++ /dev/null
@@ -1,79 +0,0 @@
1// SignalHandler.cc for FbTk - Fluxbox ToolKit
2// Copyright (c) 2002 - 2006 Henrik Kinnunen (fluxgen at fluxbox dot org)
3//
4// Permission is hereby granted, free of charge, to any person obtaining a
5// copy of this software and associated documentation files (the "Software"),
6// to deal in the Software without restriction, including without limitation
7// the rights to use, copy, modify, merge, publish, distribute, sublicense,
8// and/or sell copies of the Software, and to permit persons to whom the
9// Software is furnished to do so, subject to the following conditions:
10//
11// The above copyright notice and this permission notice shall be included in
12// all copies or substantial portions of the Software.
13//
14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20// DEALINGS IN THE SOFTWARE.
21
22#include "SignalHandler.hh"
23
24namespace FbTk {
25
26SignalEventHandler *SignalHandler::s_signal_handler[NSIG];
27
28SignalHandler::SignalHandler() {
29 // clear signal list
30 for (int i=0; i < NSIG; ++i)
31 s_signal_handler[i] = 0;
32}
33
34SignalHandler &SignalHandler::instance() {
35 static SignalHandler singleton;
36 return singleton;
37}
38
39bool SignalHandler::registerHandler(int signum, SignalEventHandler *eh,
40 SignalEventHandler **oldhandler_ret) {
41 // must be less than NSIG
42 if (signum >= NSIG)
43 return false;
44
45 // get old signal handler for this signum
46 if (oldhandler_ret != 0)
47 *oldhandler_ret = s_signal_handler[signum];
48
49#ifdef HAVE_SIGACTION
50 struct sigaction sa;
51 // set callback
52 sa.sa_handler = SignalHandler::handleSignal;
53 sigemptyset (&sa.sa_mask);
54 sa.sa_flags = 0;
55
56 if (sigaction(signum, &sa, 0) == -1)
57 return false;
58#else
59 // Fallback code for Windows and other platforms lacking sigaction.
60 if (signal(signum, &SignalHandler::handleSignal) == SIG_ERR) {
61 return false;
62 }
63#endif
64 s_signal_handler[signum] = eh;
65
66 return true;
67}
68
69void SignalHandler::handleSignal(int signum) {
70 if (signum >= NSIG)
71 return;
72 // make sure we got a handler for this signal
73 if (s_signal_handler[signum] != 0) {
74 s_signal_handler[signum]->handleSignal(signum);
75 }
76}
77
78}
79