aboutsummaryrefslogtreecommitdiff
path: root/src/FbTk
diff options
context:
space:
mode:
Diffstat (limited to 'src/FbTk')
-rw-r--r--src/FbTk/Makefile.am2
-rw-r--r--src/FbTk/SignalHandler.cc79
-rw-r--r--src/FbTk/SignalHandler.hh66
3 files changed, 1 insertions, 146 deletions
diff --git a/src/FbTk/Makefile.am b/src/FbTk/Makefile.am
index d54eaae..610859c 100644
--- a/src/FbTk/Makefile.am
+++ b/src/FbTk/Makefile.am
@@ -33,7 +33,7 @@ libFbTk_a_SOURCES = App.hh App.cc \
33 MultiButtonMenuItem.hh MultiButtonMenuItem.cc \ 33 MultiButtonMenuItem.hh MultiButtonMenuItem.cc \
34 MenuTheme.hh MenuTheme.cc NotCopyable.hh \ 34 MenuTheme.hh MenuTheme.cc NotCopyable.hh \
35 BorderTheme.hh BorderTheme.cc TextTheme.hh TextTheme.cc \ 35 BorderTheme.hh BorderTheme.cc TextTheme.hh TextTheme.cc \
36 RefCount.hh SimpleCommand.hh SignalHandler.cc SignalHandler.hh \ 36 RefCount.hh SimpleCommand.hh \
37 TextUtils.hh TextUtils.cc Orientation.hh \ 37 TextUtils.hh TextUtils.cc Orientation.hh \
38 Texture.cc Texture.hh TextureRender.hh TextureRender.cc \ 38 Texture.cc Texture.hh TextureRender.hh TextureRender.cc \
39 Shape.hh Shape.cc \ 39 Shape.hh Shape.cc \
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
diff --git a/src/FbTk/SignalHandler.hh b/src/FbTk/SignalHandler.hh
deleted file mode 100644
index 774f4b1..0000000
--- a/src/FbTk/SignalHandler.hh
+++ /dev/null
@@ -1,66 +0,0 @@
1// SignalHandler.hh for FbTk
2// Copyright (c) 2002 - 2003 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#ifndef FBTK_SIGNALHANDLER_HH
23#define FBTK_SIGNALHANDLER_HH
24
25#include <signal.h>
26
27namespace FbTk {
28
29/// Base class that SignalHandler calls when it gets a signal
30/// Use this to catch system signals
31class SignalEventHandler {
32public:
33 virtual void handleSignal(int signum) = 0;
34 virtual ~SignalEventHandler() { }
35};
36
37/// Handles system signals, singleton.
38/**
39 Usage: inherit the class SignalEventHandler and then register
40 it to SignalHandler by calling registerHandler with
41 a signal number
42*/
43class SignalHandler {
44public:
45 /// get singleton object
46 static SignalHandler &instance();
47 /**
48 Register an event handler
49 @return true on success else false
50 @param signum signal number
51 @param eh event handler
52 @param oldhandler_ret return handler to old sighandler
53 */
54 bool registerHandler(int signum, SignalEventHandler *eh, SignalEventHandler **oldhandler_ret = 0);
55
56private:
57 SignalHandler();
58
59 static void handleSignal(int signum);
60
61 static SignalEventHandler *s_signal_handler[NSIG]; ///< NSIG defined in signal.h
62};
63
64} // end namespace FbTk
65
66#endif // FBTK_SIGNALHANDLER_HH