LADI Room support
[klaudia.git] / patches / rosegarden_10.04.2.patch
blob8130599738b4b0f7f507aa42f0c871c658615788
1 diff -ru -- rosegarden/src/gui/application/RosegardenMainWindow.cpp rosegarden_lv1/src/gui/application/RosegardenMainWindow.cpp
2 --- rosegarden/src/gui/application/RosegardenMainWindow.cpp 2010-04-29 10:07:13.000000000 +0100
3 +++ rosegarden_lv1/src/gui/application/RosegardenMainWindow.cpp 2010-07-28 09:25:23.000000000 +0100
4 @@ -226,6 +226,13 @@
5 #include <QFontDialog>
6 #include <QPageSetupDialog>
8 +// Ladish lv1 support
9 +#include <cerrno> // for errno
10 +#include <csignal> // for sigaction()
11 +#include <cstring> // for strerror()
12 +#include <unistd.h> // for pipe()
13 +#include <QSocketNotifier>
16 namespace Rosegarden
18 @@ -469,6 +476,9 @@
20 connectOutsideCtorHack();
21 checkAudioPath();
23 + if (!installSignalHandlers())
24 + qWarning("%s", "Signal handlers not installed!");
27 RosegardenMainWindow::~RosegardenMainWindow()
28 @@ -503,6 +513,71 @@
29 Profiles::getInstance()->dump();
32 +int RosegardenMainWindow::sigpipe[2];
34 +/* Handler for system signals (SIGUSR1, SIGINT...)
35 + * Write a message to the pipe and leave as soon as possible
36 + */
37 +void
38 +RosegardenMainWindow::handleSignal(int sig)
40 + if (write(sigpipe[1], &sig, sizeof(sig)) == -1) {
41 + qWarning("write() failed: %s", std::strerror(errno));
42 + }
45 +/* Install signal handlers (may be more than one; called from the
46 + * constructor of your MainWindow class*/
47 +bool
48 +RosegardenMainWindow::installSignalHandlers()
50 + /*install pipe to forward received system signals*/
51 + if (pipe(sigpipe) < 0) {
52 + qWarning("pipe() failed: %s", std::strerror(errno));
53 + return false;
54 + }
56 + /*install notifier to handle pipe messages*/
57 + QSocketNotifier* signalNotifier = new QSocketNotifier(sigpipe[0],
58 + QSocketNotifier::Read, this);
59 + connect(signalNotifier, SIGNAL(activated(int)),
60 + this, SLOT(signalAction(int)));
62 + /*install signal handlers*/
63 + struct sigaction action;
64 + memset(&action, 0, sizeof(action));
65 + action.sa_handler = handleSignal;
67 + if (sigaction(SIGUSR1, &action, NULL) == -1) {
68 + qWarning("sigaction() failed: %s", std::strerror(errno));
69 + return false;
70 + }
72 + return true;
75 +/* Slot to give response to the incoming pipe message;
76 + e.g.: save current file */
77 +void
78 +RosegardenMainWindow::signalAction(int fd)
80 + int message;
82 + if (read(fd, &message, sizeof(message)) == -1) {
83 + qWarning("read() failed: %s", std::strerror(errno));
84 + return;
85 + }
87 + switch (message) {
88 + case SIGUSR1:
89 + slotFileSave();
90 + break;
91 + default:
92 + qWarning("Unexpected signal received: %d", message);
93 + break;
94 + }
97 void
98 RosegardenMainWindow::connectOutsideCtorHack()
100 diff -ru -- rosegarden/src/gui/application/RosegardenMainWindow.h rosegarden_lv1/src/gui/application/RosegardenMainWindow.h
101 --- rosegarden/src/gui/application/RosegardenMainWindow.h 2010-04-29 10:07:13.000000000 +0100
102 +++ rosegarden_lv1/src/gui/application/RosegardenMainWindow.h 2010-07-28 09:22:12.000000000 +0100
103 @@ -1692,6 +1692,14 @@
104 DeviceManagerDialog *m_deviceManager;
106 WarningWidget *m_warningWidget;
108 + // Ladish lv1 support
109 + static int sigpipe[2];
110 + static void handleSignal(int);
111 + bool installSignalHandlers();
113 +private slots:
114 + void signalAction(int);