New Upstream Snapshot - qjoypad

Ready changes

Summary

Merged new upstream version: 4.3.1+git20220716.1.0844b4a (was: 4.3.1).

Resulting package

Built on 2023-01-19T04:55 (took 6m11s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots qjoypad-dbgsymapt install -t fresh-snapshots qjoypad

Lintian Result

Diff

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index fbf32cd..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.*
-build
-build-*
-CMakeLists.txt.user
diff --git a/README.md b/README.md
index 0bd50e4..83e0494 100644
--- a/README.md
+++ b/README.md
@@ -178,7 +178,7 @@ The top of this menu shows you which joystick devices are
 currently available (see [Joystick recognition](#joystick-recognition)
 if not all your devices are listed). Below that are the options
 to update the layout list or the joystick devices; use these if
-you have just put a new layout in ~/.qjoypad3 by hand or if
+you have just put a new layout in ~/.config/qjoypad4 by hand or if
 you've plugged in a new joystick device. Below even farther is
 a list of the available layouts and the option to quit.
 
@@ -312,17 +312,17 @@ You probably won't need to adjust the sensitivity unless you
 are having trouble getting QJoyPad to generate key presses
 when you want it to (see [Joystick adjustment](#joystick-adjustment)).
 
-#### Making an axis "Gradient"
+#### Set an axis to 0-max, relative (gradient), or absolute movement
 
-On the upper half of this dialog, you will see a checkbox
-marked Gradient. Checking this box means that instead of just
-generating one key press when the axis is moved, QJoyPad will
-start flickering that key on and off as soon as the axis is
-out of the Dead Zone (when the colored bar turns blue). How
+On the upper half of the dialog, you will see another drop-down
+set to relative movement. In 0-max mode QJoyPad generates just one
+key press when the axis is moved. In case of relative and absolute
+QJoyPad will start flickering that key on and off as soon as the
+axis is out of the Dead Zone (when the colored bar turns blue). How
 far the axis is pushed determines what percent of the time the
 simulated key will be depressed. As soon as the axis enters
 its Extreme Zone (when the colored bar turns red), the key
-will be down 100% of the time. Making an axis Gradient is
+will be down 100% of the time. Setting an axis to relative is
 useful if you want to use it as an accelerator in a game so
 how fast you go is controlled by how far the axis is moved.
 Also, it's nice to use this when the axis is set to move the
@@ -342,8 +342,10 @@ the mouse down or visa versa.
 
 **Tip**
 
-Usually you want an axis to be Gradient if it's going to move
-the mouse.
+Usually you want an axis to be relative or absolute if it's going
+to move the mouse. Relative to pass relative mouse movements, and
+absolute to place the mouse on the screen according to the axis
+position.
 
 #### Adjusting mouse speed
 
@@ -465,7 +467,7 @@ named "Layout" will be considered distinct from a layout named
 and there should be no serious limits on name length.
 
 Whenever you create a new layout, QJoyPad makes a new file
-called Name.lyt in `~/.qjoypad3`, where Name is the name that
+called Name.lyt in `~/.config/qjoypad4`, where Name is the name that
 you provided. Whenever you update that layout, it overwrites
 that file to reflect your changes, whenever you revert, it
 rereads that file, and if you ever remove that layout, it will
@@ -476,7 +478,7 @@ you can edit them by hand if you like. The numbers used to
 represent keys are standard X11 keycodes.
 
 It's also easy to share QJoyPad layout files; just copy them
-from one user's `~/.qjoypad3` directory to another and either
+from one user's `~/.config/qjoypad4` directory to another and either
 tell QJoyPad to update the layout list by right clicking on
 the tray icon, or just restart QJoyPad. If you switch layouts
 through the command line, you don't even need to do that.
diff --git a/debian/changelog b/debian/changelog
index b25eeea..a4d1aff 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+qjoypad (4.3.1+git20220716.1.0844b4a-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Thu, 19 Jan 2023 04:51:39 -0000
+
 qjoypad (4.3.1-3) unstable; urgency=medium
 
   * Fix the watch file.
diff --git a/src/axis.cpp b/src/axis.cpp
index 1a9417b..1a454ca 100644
--- a/src/axis.cpp
+++ b/src/axis.cpp
@@ -12,8 +12,11 @@ Axis::Axis( int i, QObject *parent ) : QObject(parent) {
     index = i;
     isOn = false;
     isDown = false;
+    useMouse = false;
     state = 0;
+    interpretation = ZeroOne;
     gradient = false;
+    absolute = false;
     toDefault();
     tick = 0;
 }
@@ -117,8 +120,20 @@ bool Axis::read( QTextStream &stream ) {
             else return false;
         }
         //the rest of the options are keywords without integers
+        else if (*it == "zeroone") {
+	    interpretation = ZeroOne;
+            gradient = false;
+            absolute = false;
+	}
+        else if (*it == "absolute") {
+            interpretation = AbsolutePos;
+            gradient = true;
+            absolute = true;
+	}
         else if (*it == "gradient") {
+            interpretation = Gradient;
             gradient = true;
+            absolute = false;
         }
         else if (*it == "throttle+") {
             throttle = 1;
@@ -157,7 +172,8 @@ void Axis::timerCalled() {
 
 void Axis::write( QTextStream &stream ) {
     stream << "\tAxis " << (index+1) << ": ";
-    if (gradient) stream << "gradient, ";
+    stream << ((interpretation == ZeroOne)?"ZeroOne":
+               (interpretation == Gradient)?"Gradient":"Absolute") << ", ";
     if (throttle > 0) stream << "throttle+, ";
     else if (throttle < 0) stream << "throttle-, ";
     if (dZone != DZONE) stream << "dZone " << dZone << ", ";
@@ -235,7 +251,9 @@ void Axis::jsevent( int value ) {
 
 void Axis::toDefault() {
     release();
+    interpretation = ZeroOne;
     gradient = false;
+    absolute = false;
     throttle = 0;
     maxSpeed = 100;
     transferCurve = Quadratic;
@@ -254,7 +272,9 @@ void Axis::toDefault() {
 }
 
 bool Axis::isDefault() {
-    return (gradient == false) &&
+    return (interpretation == ZeroOne) &&
+           (gradient == false) &&
+           (absolute == false) &&
            (throttle == 0) &&
            (maxSpeed == 100) &&
            (dZone == DZONE) &&
@@ -359,10 +379,12 @@ void Axis::move( bool press ) {
         //dialog being open and blocking events from happening.
         if (isDown == press) return;
         isDown = press;
-        bool useMouse = (state > 0)?puseMouse:nuseMouse;
+        if (state != 0) {
+            useMouse = (state > 0) ? puseMouse : nuseMouse;
+        }
         if (press) {
             e.type = useMouse ? FakeEvent::MouseDown : FakeEvent::KeyDown;
-            downkey = (state > 0)?pkeycode:nkeycode;
+            downkey = (state > 0) ? pkeycode : nkeycode;
         }
         else {
             e.type = useMouse ? FakeEvent::MouseUp : FakeEvent::KeyUp;
@@ -414,7 +436,7 @@ void Axis::move( bool press ) {
  		//if not gradient, always go full speed.
  		else dist = maxSpeed;
  
- 		e.type = FakeEvent::MouseMove;
+ 		e.type = absolute ? FakeEvent::MouseMoveAbsolute : FakeEvent::MouseMove;
  		if (mode == MousePosVert) {
  			e.move.x = 0;
  			e.move.y = dist;
diff --git a/src/axis.h b/src/axis.h
index 50c3e26..f7e2a5f 100644
--- a/src/axis.h
+++ b/src/axis.h
@@ -22,6 +22,7 @@ class Axis : public QObject {
     Q_OBJECT
 
     //each axis can create a key press or move the mouse in one of four directions.
+    enum Interpretation { ZeroOne, Gradient, AbsolutePos };
     enum Mode {Keyboard, MousePosVert, MouseNegVert, MousePosHor, MouseNegHor};
     enum TransferCurve {Linear, Quadratic, Cubic, QuadraticExtreme,
                         PowerFunction};
@@ -71,12 +72,16 @@ class Axis : public QObject {
 		virtual void move( bool press );
 		//is a key currently depressed?
 		bool isDown;
+		//is a mouse button currently in use?
+		bool useMouse;
 
 		//variables for calculating quadratic used for gradient mouse axes
 		float inverseRange;
  
  		//actual axis settings:
+ 		Interpretation interpretation;
  		bool gradient;
+ 		bool absolute;
  		int maxSpeed; //0..MAXMOUSESPEED
 		unsigned int transferCurve;
 		float sensitivity;
diff --git a/src/axis_edit.cpp b/src/axis_edit.cpp
index e17797b..816447a 100644
--- a/src/axis_edit.cpp
+++ b/src/axis_edit.cpp
@@ -23,9 +23,12 @@ AxisEdit::AxisEdit( Axis* ax )
     QVBoxLayout* v2 = new QVBoxLayout();
     v2->setMargin(5);
     v2->setSpacing(5);
-    chkGradient = new QCheckBox(tr("&Gradient"), this);
-    chkGradient->setChecked(axis->gradient);
-    connect(chkGradient, SIGNAL(toggled(bool)), this, SLOT( gradientChanged( bool )));
+    chkGradient = new QComboBox(this);
+    chkGradient->insertItem((int) Axis::ZeroOne, tr("Use 0 or max always"), Qt::DisplayRole);
+    chkGradient->insertItem((int) Axis::Gradient, tr("Relative movement (previously gradient)"), Qt::DisplayRole);
+    chkGradient->insertItem((int) Axis::AbsolutePos, tr("Absolute movement (direct position)"), Qt::DisplayRole);
+    chkGradient->setCurrentIndex( axis->interpretation );
+    connect(chkGradient, SIGNAL(activated(int)), this, SLOT( gradientChanged( int )));
     v2->addWidget(chkGradient);
 
     cmbMode = new QComboBox(this);
@@ -103,6 +106,7 @@ AxisEdit::AxisEdit( Axis* ax )
     connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
     v->addWidget(buttonBox);
 
+    gradientChanged( axis->interpretation );
     modeChanged( axis->mode );
     transferCurveChanged( axis->transferCurve );
     throttleChanged( axis->throttle + 1 );
@@ -116,9 +120,10 @@ void AxisEdit::show() {
 void AxisEdit::setState( int val ) {
     slider->setValue( val );
 }
-void AxisEdit::gradientChanged( bool on ) {
-    cmbTransferCurve->setEnabled(on);
-	if (on) {
+void AxisEdit::gradientChanged( int index ) {
+    bool gradient = index != Axis::ZeroOne;
+    cmbTransferCurve->setEnabled(gradient);
+	if (gradient) {
         transferCurveChanged( axis->transferCurve );
 	}
 	else {
@@ -135,7 +140,7 @@ void AxisEdit::modeChanged( int index ) {
     else {
         mouseBox->setEnabled(true);
         keyBox->setEnabled(false);
-        if (chkGradient->isChecked()) {
+        if ((Axis::Interpretation)chkGradient->currentIndex() != Axis::ZeroOne) {
             cmbTransferCurve->setEnabled(true);
             transferCurveChanged( axis->transferCurve );
 		}
@@ -172,7 +177,9 @@ void AxisEdit::throttleChanged( int index ) {
 }
 
 void AxisEdit::accept() {
-    axis->gradient = chkGradient->isChecked();
+    axis->interpretation = (Axis::Interpretation)chkGradient->currentIndex(); 
+    axis->gradient = axis->interpretation != Axis::ZeroOne;
+    axis->absolute = axis->interpretation == Axis::AbsolutePos;
     axis->maxSpeed = spinSpeed->value();
     axis->transferCurve = (Axis::TransferCurve)cmbTransferCurve->currentIndex();
     axis->sensitivity = spinSensitivity->value();
diff --git a/src/axis_edit.h b/src/axis_edit.h
index 4d8319b..6a708b3 100644
--- a/src/axis_edit.h
+++ b/src/axis_edit.h
@@ -24,7 +24,7 @@ class AxisEdit : public QDialog {
 		void setState( int val );
 	protected slots:
 		//slots for GUI events
-		void gradientChanged( bool on );
+		void gradientChanged( int index );
 		void modeChanged( int index );
 		void transferCurveChanged( int index );
 		void throttleChanged( int index );
@@ -33,8 +33,7 @@ class AxisEdit : public QDialog {
 		//the associated Axis that needs to be set.
 		Axis *axis;
 		//the important parts of the dialog:
-		QCheckBox *chkGradient;
-		QComboBox *cmbMode, *cmbThrottle, *cmbTransferCurve;
+		QComboBox *chkGradient, *cmbMode, *cmbThrottle, *cmbTransferCurve;
 		QFrame *mouseBox, *keyBox;
 		QSpinBox *spinSpeed;
 		QLabel *lblSensitivity;
diff --git a/src/event.cpp b/src/event.cpp
index dc07786..08d3a37 100644
--- a/src/event.cpp
+++ b/src/event.cpp
@@ -11,6 +11,19 @@ void sendevent(const FakeEvent &e) {
         XTestFakeRelativeMotionEvent(display, e.move.x, e.move.y, 0);
         break;
 
+    case FakeEvent::MouseMoveAbsolute:
+      {
+        Screen* screen = XDefaultScreenOfDisplay(display);
+        static int rememberX = 0, rememberY = 0;
+        if (e.move.x) rememberX = e.move.x;
+        if (e.move.y) rememberY = e.move.y;
+        const int scaledX100 = rememberX * (XWidthOfScreen(screen)/2) / 100;
+        const int scaledY100 = rememberY * (XHeightOfScreen(screen)/2) / 100;
+        XTestFakeMotionEvent(display, DefaultScreen(display),
+                             XWidthOfScreen(screen)/2 + scaledX100,
+                             XHeightOfScreen(screen)/2 + scaledY100, 0);
+        break;
+      }
     case FakeEvent::KeyUp:
         if (e.keycode == 0) return;
         XTestFakeKeyEvent(display, e.keycode, false, 0);
diff --git a/src/event.h b/src/event.h
index 7b8ca3a..584756c 100644
--- a/src/event.h
+++ b/src/event.h
@@ -8,7 +8,7 @@
 struct FakeEvent {
     //types of events QJoyPad can create.
     //KeyRelease, KeyPress, ButtonRelease, ButtonPress, and MouseMove
-    enum EventType {KeyUp, KeyDown, MouseUp, MouseDown, MouseMove};
+    enum EventType {KeyUp, KeyDown, MouseUp, MouseDown, MouseMove, MouseMoveAbsolute};
 
     EventType type;
     union {
diff --git a/src/flash.cpp b/src/flash.cpp
index 9d5b4a0..67231ed 100644
--- a/src/flash.cpp
+++ b/src/flash.cpp
@@ -18,6 +18,7 @@ FlashButton::FlashButton(const QString &text, const QString &name, QWidget* pare
     flashing = false;
 
     setAutoDefault( false );
+    setAutoFillBackground( true );
     setFocusPolicy(Qt::NoFocus);
     
 }
@@ -27,11 +28,13 @@ void FlashButton::flash()
     emit( flashed( !flashing ) );
     if (flashing)
     {
+        setFlat( false );
         setPalette( normalPalette );
         flashing = false;
     }
     else
     {
+        setFlat( true );
         setPalette( flashPalette );
         flashing = true;
     }
diff --git a/src/layout.cpp b/src/layout.cpp
index 00a8ccb..b7111ca 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -15,6 +15,7 @@ LayoutManager::LayoutManager( bool useTrayIcon, const QString &devdir, const QSt
       layoutGroup(new QActionGroup(this)),
       updateDevicesAction(new QAction(QIcon::fromTheme("view-refresh"),tr("Update &Joystick Devices"),this)),
       updateLayoutsAction(new QAction(QIcon::fromTheme("view-refresh"),tr("Update &Layout List"),this)),
+      addNewConfiguration(new QAction(QIcon::fromTheme("list-add"),tr("Add new configuration"),this)),
       quitAction(new QAction(QIcon::fromTheme("application-exit"),tr("&Quit"),this)),
       le(0) {
 
@@ -51,6 +52,7 @@ LayoutManager::LayoutManager( bool useTrayIcon, const QString &devdir, const QSt
 
     connect(updateLayoutsAction, SIGNAL(triggered()), this, SLOT(fillPopup()));
     connect(updateDevicesAction, SIGNAL(triggered()), this, SLOT(updateJoyDevs()));
+    connect(addNewConfiguration,  SIGNAL(triggered()), this, SLOT(addNewConfig()));
     connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
 
     //no layout loaded at start.
@@ -389,7 +391,7 @@ void LayoutManager::importLayout() {
         if (QFile::exists(filename)) {
             if (QMessageBox::warning(le,
                                      QString("%1 - %2").arg(tr("Layout exists"), QJOYPAD_NAME),
-                                     tr("Layout %1 exists. Do you want to overwrite it?"),
+                                     tr("Layout \"%1\" exists. Do you want to overwrite it?").arg(layoutName),
                                      tr("Over&write"), tr("&Cancel"), QString(), 0, 1) == 1) {
                 return;
             }
@@ -520,20 +522,9 @@ void LayoutManager::iconClick() {
         errorBox(tr("No joystick devices available"),
                  tr("No joystick devices are currently available to configure.\nPlease plug in a gaming device and select\n\"Update Joystick Devices\" from the popup menu."),
                  le);
-        return;
-    }
-    if (le) {
-        if (le->isActiveWindow()) {
-            le->close();
-        }
-        else {
-            le->activateWindow();
-        }
-        return;
+    } else {
+        addNewConfig();
     }
-    //otherwise, make a new LayoutEdit dialog and show it.
-    le = new LayoutEdit(this);
-    le->setLayout(currentLayout);
 }
 
 void LayoutManager::trayClick(QSystemTrayIcon::ActivationReason reason) {
@@ -585,6 +576,9 @@ void LayoutManager::fillPopup() {
     }
     trayMenu.addSeparator();
 
+    trayMenu.addAction(addNewConfiguration);
+    trayMenu.addSeparator();
+
     //and, at the end, quit!
     trayMenu.addAction(quitAction);
 }
@@ -680,6 +674,24 @@ void LayoutManager::updateJoyDevs() {
     debug_mesg("done updating joydevs\n");
 }
 
+void LayoutManager::addNewConfig() {
+    if (!le) {
+        // make a new LayoutEdit dialog and show it.
+        le = new LayoutEdit(this);
+        le->setLayout(currentLayout);
+    } 
+    if (le) {
+        if (le->isActiveWindow()) {
+            le->hide();
+        }
+        else {
+            le->show();
+            le->activateWindow();
+            le->raise();
+        }
+    }
+}
+
 void LayoutManager::addJoyPad(int index) {
     addJoyPad(index, QString("%1/js%2").arg(devdir, index));
 }
diff --git a/src/layout.h b/src/layout.h
index af1f869..e17fa6a 100644
--- a/src/layout.h
+++ b/src/layout.h
@@ -75,6 +75,8 @@ class LayoutManager : public QObject {
 		void fillPopup();
 		//update the list of available joystick devices
 		void updateJoyDevs();
+                // open dialog to be able to add new configurations
+                void addNewConfig();
     private slots:
         //when the user selects an item on the tray's popup menu
         void layoutTriggered();
@@ -97,6 +99,7 @@ class LayoutManager : public QObject {
         QActionGroup *layoutGroup;
         QAction *updateDevicesAction;
         QAction *updateLayoutsAction;
+        QAction *addNewConfiguration;
         QAction *quitAction;
 
 		//if there is a LayoutEdit open, this points to it. Otherwise, NULL.	
diff --git a/src/main.cpp b/src/main.cpp
index 4bb7c7a..83af64f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,4 +1,4 @@
-//for ouput when there is no GUI going
+//for output when there is no GUI going
 #include <stdio.h>
 #include <unistd.h>
 //to create and handle signals for various events
@@ -25,7 +25,7 @@ QPointer<LayoutManager> layoutManagerPtr;
 
 //signal handler for SIGUSR2
 //SIGUSR2 means that a new layout should be loaded. It is saved in
-// ~/.qjoypad/layout, where the last used layout is put.
+// ~/.config/qjoypad4/layout, where the last used layout is put.
 void catchSIGUSR2( int sig ) {
     if (layoutManagerPtr) layoutManagerPtr->load();
     //remember to catch this signal again next time.
@@ -59,24 +59,39 @@ int main( int argc, char **argv )
         debug_mesg("no translation for locale: %s\n", qPrintable(QLocale::system().name()));
     }
 
-
     //where QJoyPad saves its settings!
-    const QString settingsDir(QDir::homePath() + "/.qjoypad3/");
+    const QString settingsDir(QDir::homePath() + "/.config/qjoypad4/");
 
     //where to look for settings. If it does not exist, it will be created
     QDir dir(settingsDir);
 
-    //the directory in wich the joystick devices are (e.g. "/dev/input")
+    //legacy QJoyPad settings location
+    const QString legacySettingsDir(QDir::homePath() + "/.qjoypad3/");
+    //where to look for legacy settings. If it exists, it will be moved
+    QDir legacyDir(legacySettingsDir);
+
+
+    if (legacyDir.exists()) {
+        errorBox(app.translate("main","Legacy settings directory detected"),
+                 app.translate("main","We've detected settings in ~/.qjoypad3/. For standardization purposes, we're moving them to ~/.config/qjoypad4\n\nQJoyPad will continue to work as expected"));
+    
+        if(!dir.rename(legacySettingsDir, settingsDir)) {
+            errorBox(app.translate("main","Could not move settings"),
+                    app.translate("main","We could not move your settings - This likely means \"%1\" already exists on your system.\n\nPlease move files from \"%2\" to \"%1\" manually, then restart the application.").arg(settingsDir).arg(legacySettingsDir));
+            return 1;
+        }
+    }
+
+    //the directory in which the joystick devices are (e.g. "/dev/input")
     QString devdir = QJOYPAD_DEVDIR;
 
     //if there is no new directory and we can't make it, complain
     if (!dir.exists() && !dir.mkdir(settingsDir)) {
         errorBox(app.translate("main","Couldn't create the QJoyPad save directory"),
-                 app.translate("main","Couldn't create the QJoyPad save directory: %s").arg(settingsDir));
+                 app.translate("main","Couldn't create the QJoyPad save directory: %1").arg(settingsDir));
         return 1;
     }
 
-
     //start out with no special layout.
     QString layout;
     //by default, we use a tray icon
@@ -202,7 +217,7 @@ int main( int argc, char **argv )
                     errorBox(app.translate("main","Instance Error"),
                              app.translate("main","There is already a running instance of QJoyPad; please close\nthe old instance before starting a new one."));
                 else {
-                    //if one of these is the case, send the approrpriate signal!
+                    //if one of these is the case, send the appropriate signal!
                     if (update) {
                         kill(pid,SIGUSR1);
                     }
diff --git a/translations/qjoypad_nl.ts b/translations/qjoypad_nl.ts
new file mode 100644
index 0000000..e4cd4f6
--- /dev/null
+++ b/translations/qjoypad_nl.ts
@@ -0,0 +1,666 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="nl">
+<context>
+    <name>Axis</name>
+    <message>
+        <location filename="../src/axis.cpp" line="270"/>
+        <source>Axis %1</source>
+        <translation>As %1</translation>
+    </message>
+    <message>
+        <location filename="../src/axis.cpp" line="289"/>
+        <source>KEYBOARD/MOUSE</source>
+        <translation>TOETSENBORD/MUIS</translation>
+    </message>
+    <message>
+        <location filename="../src/axis.cpp" line="292"/>
+        <location filename="../src/axis.cpp" line="303"/>
+        <source>MOUSE</source>
+        <translation>MUIS</translation>
+    </message>
+    <message>
+        <location filename="../src/axis.cpp" line="295"/>
+        <source>KEYBOARD</source>
+        <translation>TOETSENBORD</translation>
+    </message>
+    <message>
+        <location filename="../src/axis.cpp" line="299"/>
+        <source>THROTTLE</source>
+        <translation>BEPERKEN</translation>
+    </message>
+</context>
+<context>
+    <name>AxisEdit</name>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="26"/>
+        <source>&amp;Gradient</source>
+        <translation>&amp;Verloop</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="32"/>
+        <source>Keyboard/Mouse Button</source>
+        <translation>Toetsenbord-/muisknop</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="33"/>
+        <source>Mouse (Vert.)</source>
+        <translation>Muis (vert.)</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="34"/>
+        <source>Mouse (Vert. Rev.)</source>
+        <translation>Muis (vert. omgekeerd)</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="35"/>
+        <source>Mouse (Hor.)</source>
+        <translation>Muis (hor.)</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="36"/>
+        <source>Mouse (Hor. Rev.)</source>
+        <translation>Muis (hor. omgekeerd)</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="41"/>
+        <source>Linear</source>
+        <translation>Linear</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="42"/>
+        <source>Quadratic</source>
+        <translation>Quadratisch</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="43"/>
+        <source>Cubic</source>
+        <translation>Cubisch</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="44"/>
+        <source>Quadratic Extreme</source>
+        <translation>Quadratisch (extreem)</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="45"/>
+        <source>Power Function</source>
+        <translation>Energiefunctie</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="58"/>
+        <source>&amp;Mouse Speed</source>
+        <translation>&amp;Muissnelheid</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="65"/>
+        <source>&amp;Sensitivity</source>
+        <translation>&amp;Gevoeligheid</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="89"/>
+        <source>Neg. Throttle</source>
+        <translation>Neg. beperking</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="90"/>
+        <source>No Throttle</source>
+        <translation>Geen beperking</translation>
+    </message>
+    <message>
+        <location filename="../src/axis_edit.cpp" line="91"/>
+        <source>Pos. Throttle</source>
+        <translation>Pos. beperking</translation>
+    </message>
+</context>
+<context>
+    <name>Button</name>
+    <message>
+        <location filename="../src/button.cpp" line="127"/>
+        <source>Button %1</source>
+        <translation>Knop %1</translation>
+    </message>
+    <message>
+        <location filename="../src/button.cpp" line="132"/>
+        <source>%1 : Mouse %2</source>
+        <translation>%1: Muis %2</translation>
+    </message>
+    <message>
+        <location filename="../src/button.cpp" line="135"/>
+        <source>%1 : %2</source>
+        <translation>%1: %2</translation>
+    </message>
+</context>
+<context>
+    <name>ButtonEdit</name>
+    <message>
+        <location filename="../src/button_edit.cpp" line="12"/>
+        <source>Set %1</source>
+        <translation>%1 instellen</translation>
+    </message>
+    <message>
+        <location filename="../src/button_edit.cpp" line="23"/>
+        <source>&amp;Sticky</source>
+        <translation>Plaktoet&amp;s</translation>
+    </message>
+    <message>
+        <location filename="../src/button_edit.cpp" line="26"/>
+        <source>&amp;Rapid Fire</source>
+        <translation>&amp;Snelvuren</translation>
+    </message>
+</context>
+<context>
+    <name>FloatingIcon</name>
+    <message>
+        <location filename="../src/icon.cpp" line="12"/>
+        <source>%1 Floating Icon</source>
+        <translation>%1 zwevend pictogram</translation>
+    </message>
+</context>
+<context>
+    <name>GetKey</name>
+    <message>
+        <location filename="../src/getkey.cpp" line="21"/>
+        <source>Choose a key</source>
+        <translation>Kies een toets</translation>
+    </message>
+    <message>
+        <location filename="../src/getkey.cpp" line="27"/>
+        <source>Choose a new key or mouse button for %1</source>
+        <translation>Kies een toets of muisknop voor %1</translation>
+    </message>
+    <message>
+        <location filename="../src/getkey.cpp" line="27"/>
+        <source>Choose a new key for %1</source>
+        <translation>Kies een toets voor %1</translation>
+    </message>
+    <message>
+        <location filename="../src/getkey.cpp" line="33"/>
+        <source>
+(Ctrl-X for no key)</source>
+        <translation>
+(Ctrl-X om geen toets te gebruiken)</translation>
+    </message>
+</context>
+<context>
+    <name>JoyPad</name>
+    <message>
+        <location filename="../src/joypad.cpp" line="109"/>
+        <source>Joystick %1 (%2)</source>
+        <translation>Joystick %1 (%2)</translation>
+    </message>
+    <message>
+        <location filename="../src/joypad.cpp" line="152"/>
+        <location filename="../src/joypad.cpp" line="159"/>
+        <location filename="../src/joypad.cpp" line="172"/>
+        <location filename="../src/joypad.cpp" line="179"/>
+        <location filename="../src/joypad.cpp" line="185"/>
+        <source>Layout file error</source>
+        <translation>Fout in indelingsbestand</translation>
+    </message>
+    <message>
+        <location filename="../src/joypad.cpp" line="152"/>
+        <location filename="../src/joypad.cpp" line="172"/>
+        <source>Expected &apos;:&apos;, found &apos;%1&apos;.</source>
+        <translation>&apos;;&apos; verwacht; &apos;%1&apos; aangetroffen.</translation>
+    </message>
+    <message>
+        <location filename="../src/joypad.cpp" line="159"/>
+        <source>Error reading Button %1</source>
+        <translation>Fout tijdens uitlezen van knop %1</translation>
+    </message>
+    <message>
+        <location filename="../src/joypad.cpp" line="179"/>
+        <source>Error reading Axis %1</source>
+        <translation>Fout tijdens uitlezen van as %1</translation>
+    </message>
+    <message>
+        <location filename="../src/joypad.cpp" line="185"/>
+        <source>Error while reading layout. Unrecognized word: %1</source>
+        <translation>Fout tijdens uitlezen van indeling. Onbekend woord: %1</translation>
+    </message>
+</context>
+<context>
+    <name>JoyPadWidget</name>
+    <message>
+        <location filename="../src/joypadw.cpp" line="38"/>
+        <source>Clear</source>
+        <translation>Wissen</translation>
+    </message>
+    <message>
+        <location filename="../src/joypadw.cpp" line="42"/>
+        <source>Quick Set</source>
+        <translation>Snel instellen</translation>
+    </message>
+</context>
+<context>
+    <name>KeyButton</name>
+    <message>
+        <location filename="../src/keycode.cpp" line="83"/>
+        <location filename="../src/keycode.cpp" line="103"/>
+        <source>Mouse %1</source>
+        <translation>Muis %1</translation>
+    </message>
+</context>
+<context>
+    <name>LayoutEdit</name>
+    <message>
+        <location filename="../src/layout_edit.cpp" line="40"/>
+        <source>Add Layout</source>
+        <translation>Indeling toevoegen</translation>
+    </message>
+    <message>
+        <location filename="../src/layout_edit.cpp" line="52"/>
+        <source>Remove Layout</source>
+        <translation>Indeling verwijderen</translation>
+    </message>
+    <message>
+        <location filename="../src/layout_edit.cpp" line="56"/>
+        <source>&amp;Rename</source>
+        <translation>&amp;Naam wijzigen</translation>
+    </message>
+    <message>
+        <location filename="../src/layout_edit.cpp" line="57"/>
+        <source>Rename Layout</source>
+        <translation>Indelingsnaam wijzigen</translation>
+    </message>
+    <message>
+        <location filename="../src/layout_edit.cpp" line="67"/>
+        <source>&amp;Import</source>
+        <translation>&amp;Importeren</translation>
+    </message>
+    <message>
+        <location filename="../src/layout_edit.cpp" line="71"/>
+        <source>E&amp;xport</source>
+        <translation>E&amp;xporteren</translation>
+    </message>
+    <message>
+        <location filename="../src/layout_edit.cpp" line="75"/>
+        <source>&amp;Save</source>
+        <translation>Op&amp;slaan</translation>
+    </message>
+    <message>
+        <location filename="../src/layout_edit.cpp" line="79"/>
+        <source>Re&amp;vert</source>
+        <translation>&amp;Terugdraaien</translation>
+    </message>
+    <message>
+        <location filename="../src/layout_edit.cpp" line="121"/>
+        <source>&amp;Close Dialog</source>
+        <translation>&amp;Venster sluiten</translation>
+    </message>
+    <message>
+        <location filename="../src/layout_edit.cpp" line="124"/>
+        <source>&amp;Quit</source>
+        <translation>&amp;Afsluiten</translation>
+    </message>
+    <message>
+        <location filename="../src/layout_edit.cpp" line="155"/>
+        <source>[NO LAYOUT]</source>
+        <translation>[GEEN INDELING]</translation>
+    </message>
+</context>
+<context>
+    <name>LayoutManager</name>
+    <message>
+        <location filename="../src/layout.cpp" line="17"/>
+        <source>Update &amp;Joystick Devices</source>
+        <translation>Zoeken naar &amp;joysticks</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="18"/>
+        <source>Update &amp;Layout List</source>
+        <translation>Inde&amp;lingslijst verversen</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="19"/>
+        <source>&amp;Quit</source>
+        <translation>&amp;Afsluiten</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="28"/>
+        <source>UDev Error</source>
+        <translation>UDev-fout</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="28"/>
+        <source>Error creating UDev monitor. QJoyPad will still work, but it won&apos;t automatically update the joypad device list.</source>
+        <translation>Fout tijdens creëren van UDev-monitor. QJoypad werkt nog steeds, maar de joypadlijst wordt niet automatisch bijgewerkt.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="174"/>
+        <location filename="../src/layout.cpp" line="180"/>
+        <location filename="../src/layout.cpp" line="211"/>
+        <location filename="../src/layout.cpp" line="221"/>
+        <location filename="../src/layout.cpp" line="235"/>
+        <location filename="../src/layout.cpp" line="250"/>
+        <source>Load error</source>
+        <translation>Fout tijdens laden</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="174"/>
+        <source>Failed to find a layout named %1.</source>
+        <translation>Geen indeling aangetroffen met de naam &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="180"/>
+        <source>Error reading from file: %1</source>
+        <translation>Fout tijdens uitlezen van bestand: %1</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="212"/>
+        <source>Error reading joystick definition. Unexpected token &quot;%1&quot;. Expected a positive number.</source>
+        <translation>Fout tijdens uitlezen van joystick-definitie. Onverwachte sleutel &apos;%1&apos;. Er had een positief getal moeten staan.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="222"/>
+        <source>Error reading joystick definition. Unexpected character &quot;%1&quot;. Expected &apos;{&apos;.</source>
+        <translation>Fout tijdens uitlezen van joystick-definitie. Onverwacht teken &apos;%1&apos;. Er had &apos;{&apos; moeten staan.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="235"/>
+        <source>Error reading definition for joystick %1.</source>
+        <translation>Fout tijdens uitlezen van joystick-definitie &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="251"/>
+        <source>Error reading joystick definition. Unexpected token &quot;%1&quot;. Expected &quot;Joystick&quot;.</source>
+        <translation>Fout tijdens uitlezen van joystick-definitie. Onverwachte sleutel &apos;%1&apos;. Er had &apos;Joystick&apos; moeten staan.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="323"/>
+        <location filename="../src/layout.cpp" line="338"/>
+        <location filename="../src/layout.cpp" line="342"/>
+        <location filename="../src/layout.cpp" line="348"/>
+        <source>Save error</source>
+        <translation>Fout tijdens opslaan</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="323"/>
+        <source>Could not open file %1, layout not saved.</source>
+        <translation>Kan &apos;%1&apos; niet openen; de indeling is niet opgeslagen.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="331"/>
+        <source>Name new layout - %1</source>
+        <translation>Geef de indeling een nieuwe naam - %1</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="367"/>
+        <source>Import layout - %1</source>
+        <translation>Indeling importeren - %1</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="371"/>
+        <location filename="../src/layout.cpp" line="417"/>
+        <source>QJoyPad layout files (*.lyt)</source>
+        <translation>QJoyPad-indelingsbestanden (*.lyt)</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="372"/>
+        <location filename="../src/layout.cpp" line="418"/>
+        <source>Any files (*)</source>
+        <translation>Alle bestanden (*)</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="387"/>
+        <source>Import error</source>
+        <translation>Fout tijdens importeren</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="387"/>
+        <source>Cannot import file from QJoyPad settings directory.</source>
+        <translation>Kan het bestand uit de QJoyPad-instellingenmap niet importeren.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="393"/>
+        <source>Layout exists</source>
+        <translation>Indeling bestaat al</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="394"/>
+        <source>Layout %1 exists. Do you want to overwrite it?</source>
+        <translation>De indeling &apos;%1&apos; bestaat al. Wil je deze overschrijven?</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="395"/>
+        <source>Over&amp;write</source>
+        <translation>Over&amp;schrijven</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="395"/>
+        <location filename="../src/layout.cpp" line="437"/>
+        <source>&amp;Cancel</source>
+        <translation>&amp;Annuleren</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="413"/>
+        <source>Export layout - %1</source>
+        <translation>Indeling exporteren - %1</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="436"/>
+        <source>Delete layout? - %1</source>
+        <translation>Wil je de indeling verwijderen? - %1</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="437"/>
+        <source>&amp;Delete</source>
+        <translation>Verwij&amp;deren</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="332"/>
+        <source>Enter a name for the new layout:</source>
+        <translation>Voer een naam in voor de nieuwe indeling:</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="338"/>
+        <location filename="../src/layout.cpp" line="463"/>
+        <source>Layout name cannot be empty.</source>
+        <translation>De indeling moet een naam hebben.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="342"/>
+        <location filename="../src/layout.cpp" line="467"/>
+        <source>Layout name may not contain a &apos;/&apos; (slash).</source>
+        <translation>De naam mag geen &apos;/&apos; (schuine streep) bevatten.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="348"/>
+        <source>That name&apos;s already taken!</source>
+        <translation>Die naam is al in gebruik!</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="437"/>
+        <source>Remove layout %1 permanently from your hard drive?</source>
+        <translation>Wil je de indeling &apos;%1&apos; permanent van je computer verwijderen?</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="442"/>
+        <source>Remove error</source>
+        <translation>Fout tijdens verwijderen</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="442"/>
+        <source>Could not remove file %1</source>
+        <translation>Kan &apos;%1&apos; niet verwijderen</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="456"/>
+        <source>Rename layout - %1</source>
+        <translation>Indelingsnaam wijzigen - %1</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="457"/>
+        <source>Enter a new name for the layout:</source>
+        <translation>Voer een naam in voor de indeling:</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="463"/>
+        <location filename="../src/layout.cpp" line="467"/>
+        <location filename="../src/layout.cpp" line="474"/>
+        <location filename="../src/layout.cpp" line="479"/>
+        <source>Rename error</source>
+        <translation>Fout tijdens naamswijziging</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="474"/>
+        <source>Layout with name %1 already exists.</source>
+        <translation>Er bestaat al een indeling genaamd &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="479"/>
+        <source>Error renaming layout.</source>
+        <translation>Fout tijdens naamswijziging.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="522"/>
+        <source>No joystick devices available</source>
+        <translation>Geen joysticks beschikbaar</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="523"/>
+        <source>No joystick devices are currently available to configure.
+Please plug in a gaming device and select
+&quot;Update Joystick Devices&quot; from the popup menu.</source>
+        <translation>Er zijn geen in te stellen joysticks beschikbaar.
+Koppel een apparaat aan en kies
+&quot;Zoeken naar joysticks&quot; in het pop-upmenu.</translation>
+    </message>
+    <message>
+        <location filename="../src/layout.cpp" line="583"/>
+        <source>[NO LAYOUT]</source>
+        <translation>[GEEN INDELING]</translation>
+    </message>
+</context>
+<context>
+    <name>QuickSet</name>
+    <message>
+        <location filename="../src/quickset.cpp" line="7"/>
+        <source>Set %1</source>
+        <translation>%1 instellen</translation>
+    </message>
+    <message>
+        <location filename="../src/quickset.cpp" line="13"/>
+        <source>Press any button or axis and
+you will be prompted for a key.</source>
+        <translation>Druk op een knop of as om
+gevraagd te worden om een toets.</translation>
+    </message>
+    <message>
+        <location filename="../src/quickset.cpp" line="15"/>
+        <source>Done</source>
+        <translation>Klaar</translation>
+    </message>
+    <message>
+        <location filename="../src/quickset.cpp" line="52"/>
+        <source>%1, positive</source>
+        <translation>%1, positief</translation>
+    </message>
+    <message>
+        <location filename="../src/quickset.cpp" line="52"/>
+        <source>%1, negative</source>
+        <translation>%1, negatief</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../src/main.cpp" line="74"/>
+        <source>Couldn&apos;t create the QJoyPad save directory</source>
+        <translation>Kan geen map creëren voor het opslaan van QJoyPad-instellingen</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="75"/>
+        <source>Couldn&apos;t create the QJoyPad save directory: %s</source>
+        <translation>Kan geen map creëren voor het opslaan van QJoyPad-instellingen: %s</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="106"/>
+        <source>%1
+Usage: %2 [--device=&quot;/device/path&quot;] [--notray|--force-tray] [&quot;layout name&quot;]
+
+Options:
+  -h, --help            Print this help message.
+  -d, --device=PATH     Look for joystick devices in PATH. This should
+                        be something like &quot;/dev/input&quot; if your game
+                        devices are in /dev/input/js0, /dev/input/js1, etc.
+  -t, --force-tray      Force to use a system tray icon.
+  -T, --notray          Do not use a system tray icon. This is useful for
+                        window managers that don&apos;t support this feature.
+  -u, --update          Force a running instance of QJoyPad to update its
+                        list of devices and layouts.
+  &quot;layout name&quot;         Load the given layout in an already running
+                        instance of QJoyPad, or start QJoyPad using the
+                        given layout.
+</source>
+        <translation>%1
+Gebruik: %2 [--device=&quot;/Apparaat/Pad&quot;] [--notray|--force-tray] [&quot;Indelingsnaam&quot;]
+
+Opties:
+  -h, --help            Toont deze hulptekst.
+  -d, --device=PAD      Zoek naar joysticks in het opgegeven pad. Dit moet zoiets als
+                        &quot;/dev/input&quot; zijn als je joysticks in
+                        /dev/input/js0, /dev/input/js1 staan.
+  -t, --force-tray      Systeemvakpictogram afdwingen.
+  -T, --notray          Geen systeemvakpictogram gebruiken. Dit is nuttig
+                        als je vensterbeheerder hier geen ondersteuning voor heeft.
+  -u, --update          Werk de apparaatlijst -en indeling bij van een actief
+                        QJoyPad-proces.
+  &quot;indelingsnaam&quot;         Laad de opgegeven indeling in een actief
+                        QJoyPad-proces of start QJoyPad met de opgegeven
+                        indeling.
+</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="129"/>
+        <source>Not a directory</source>
+        <translation>Is geen map</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="130"/>
+        <source>Path is not a directory: %1</source>
+        <translation>Het pad is geen map: %1</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="149"/>
+        <source>Illeagal argument.
+See `%1 --help` for more information
+</source>
+        <translation>Ongeldig argument.
+Bekijk `%1 --help` voor meer informatie
+</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="160"/>
+        <source>Too many arguments.
+See `%1 --help` for more information
+</source>
+        <translation>Te veel argumenten.
+Bekijk `%1 --help` voor meer informatie
+</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="202"/>
+        <source>Instance Error</source>
+        <translation>Procesfout</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="203"/>
+        <source>There is already a running instance of QJoyPad; please close
+the old instance before starting a new one.</source>
+        <translation>Er draait al een proces van QJoyPad. Breek het andere proces
+af voordat je een nieuw proces start.</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="231"/>
+        <source>System tray isn&apos;t loading</source>
+        <translation>Systeemvak laad niet</translation>
+    </message>
+    <message>
+        <location filename="../src/main.cpp" line="232"/>
+        <source>Waited more than 20 seconds for the system tray to load. Giving up.</source>
+        <translation>Er is meer dan 20 seconden gewacht op het systeemvak. Actie afgebroken.</translation>
+    </message>
+</context>
+</TS>

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/debug/.build-id/b8/032df3f7b41645d2165996fe516259b2f82e21.debug
-rw-r--r--  root/root   /usr/share/qjoypad/translations/qjoypad_nl.qm

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/debug/.build-id/3a/7c82da0dd0092e780e19195eff27348da63bbb.debug

No differences were encountered between the control files of package qjoypad

Control files of package qjoypad-dbgsym: lines which differ (wdiff format)

  • Build-Ids: 3a7c82da0dd0092e780e19195eff27348da63bbb b8032df3f7b41645d2165996fe516259b2f82e21

More details

Full run details