Git commit 28c06c28b393b032267955514298a2abfe110235 by Albert Astals Cid.
Committed on 30/04/2012 at 22:21.
Pushed by nalvarez into branch 'master'.
Remember if we were enabled or not on load
M +2 -0 CMakeLists.txt
A +12 -0 ktouchpadenabler.kcfg
M +49 -17 ktouchpadenabler_daemon.cpp
A +5 -0 settings.kcfgc
http://commits.kde.org/kde-workspace/28c06c28b393b032267955514298a2abfe1102=
35
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f73b5cc..472eec4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,6 +11,8 @@ set(kded_ktouchpadenabler_SRCS
ktouchpadenabler_daemon.cpp
)
=
+kde4_add_kcfg_files(kded_ktouchpadenabler_SRCS settings.kcfgc )
+
kde4_add_plugin(kded_ktouchpadenabler
${kded_ktouchpadenabler_SRCS}
)
diff --git a/ktouchpadenabler.kcfg b/ktouchpadenabler.kcfg
new file mode 100644
index 0000000..dc69bfc
--- /dev/null
+++ b/ktouchpadenabler.kcfg
@@ -0,0 +1,12 @@
+
+
+
+
+
+ true
+
+
+
diff --git a/ktouchpadenabler_daemon.cpp b/ktouchpadenabler_daemon.cpp
index 559cc83..af270f9 100644
--- a/ktouchpadenabler_daemon.cpp
+++ b/ktouchpadenabler_daemon.cpp
@@ -1,5 +1,5 @@
/*************************************************************************=
**
- * Copyright (C) 2011 Albert Astals Cid =
*
+ * Copyright (C) 2011, 2012 Albert Astals Cid =
*
* =
*
* This program is free software; you can redistribute it and/or modify =
*
* it under the terms of the GNU General Public License as published by =
*
@@ -19,6 +19,8 @@
=
#include "ktouchpadenabler_daemon.h"
=
+#include "settings.h"
+
#include
#include
#include
@@ -45,6 +47,9 @@ class TouchpadEnablerDaemonPrivate : public QWidget
enum TouchpadKey { ToggleKey =3D 0, OnKey, OffKey };
static const int nKeys =3D OffKey + 1;
=
+ bool getEnabled(bool *currentValue) const;
+ void setEnabled(bool enabled) const;
+ =
Display *m_display;
KeyCode m_keyCode[nKeys];
int m_deviceId;
@@ -106,6 +111,14 @@ TouchpadEnablerDaemonPrivate::TouchpadEnablerDaemonPri=
vate()
if (grabResult =3D=3D BadAccess || grabResult =3D=3D B=
adValue || grabResult =3D=3D BadWindow) {
kDebug() << "Could not grab ktouchpadenabler key i=
ndex" << i <<". You probably have some other program grabbig it, if you are=
sure you don't have any, please report a bug against ktouchpadenabler in h=
ttp://bugs.kde.org";
m_keyCode[i] =3D 0;
+ } else {
+ bool currentlyEnabled;
+ if (getEnabled(¤tlyEnabled)) {
+ const bool newValue =3D ktouchpadenabler::Sett=
ings::self()->touchpadEnabled();
+ if (newValue !=3D currentlyEnabled) {
+ setEnabled(newValue);
+ }
+ }
}
} else {
kWarning() << "Could not match ktouchpadenabler key in=
dex" << i << "to a Keycode. This should never happen. Please report a bug a=
gainst ktouchpadenabler in http://bugs.kde.org";
@@ -134,26 +147,23 @@ bool TouchpadEnablerDaemonPrivate::x11Event(XEvent *e=
vent)
if (event->type =3D=3D KeyPress) {
for (int i =3D 0; i < nKeys; ++i) {
if (event->xkey.keycode =3D=3D m_keyCode[i]) {
- unsigned char newValue;
- =
- Atom realtype;
- int realformat;
- unsigned long nitems, bytes_after;
- unsigned char *currentValue;
- if ((XIGetProperty (m_display, m_deviceId, m_enabledProper=
ty, 0, 1, False, XA_INTEGER, &realtype, &realformat, &nitems, &bytes_after,=
¤tValue) =3D=3D Success) && (realtype !=3D None)) {
+ bool currentlyEnabled;
+ if (getEnabled(¤tlyEnabled)) {
+ bool newValue;
switch (i) {
- case ToggleKey: newValue =3D (*currentValue =3D=3D=
0) ? 1 : 0; break;
- case OnKey: newValue =3D 1; break;
- case OffKey: newValue =3D 0; break;
+ case ToggleKey: newValue =3D !currentlyEnabled; br=
eak;
+ case OnKey: newValue =3D true; break;
+ case OffKey: newValue =3D false; break;
}
- if (newValue !=3D *currentValue) {
- XIChangeProperty (m_display, m_deviceId, m_enabled=
Property, XA_INTEGER, 8, PropModeReplace, &newValue, 1);
- XFlush(m_display);
- =
- KNotification *notification =3D KNotification::eve=
nt(KNotification::Notification, i18n("Touchpad status"), newValue =3D=3D 1 =
? i18n("Touchpad enabled") : i18n("Touchpad disabled"));
+ if (newValue !=3D currentlyEnabled) {
+ setEnabled(newValue);
+ =
+ KNotification *notification =3D KNotification::eve=
nt(KNotification::Notification, i18n("Touchpad status"), newValue ? i18n("T=
ouchpad enabled") : i18n("Touchpad disabled"));
notification->sendEvent();
+ =
+ ktouchpadenabler::Settings::self()->setTouchpadEna=
bled(newValue);
+ ktouchpadenabler::Settings::self()->writeConfig();
}
- XFree (currentValue);
return true;
}
}
@@ -162,6 +172,28 @@ bool TouchpadEnablerDaemonPrivate::x11Event(XEvent *ev=
ent)
return false;
}
=
+bool TouchpadEnablerDaemonPrivate::getEnabled(bool *enabled) const
+{
+ Atom realtype;
+ int realformat;
+ unsigned long nitems, bytes_after;
+ unsigned char *value;
+ if ((XIGetProperty(m_display, m_deviceId, m_enabledProperty, 0, 1, Fal=
se, XA_INTEGER, &realtype, &realformat, &nitems, &bytes_after, &value) =3D=
=3D Success) && (realtype !=3D None)) {
+ *enabled =3D (*value =3D=3D 1);
+ XFree(value);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void TouchpadEnablerDaemonPrivate::setEnabled(bool enabled) const
+{
+ unsigned char newValue =3D enabled ? 1 : 0;
+ XIChangeProperty(m_display, m_deviceId, m_enabledProperty, XA_INTEGER,=
8, PropModeReplace, &newValue, 1);
+ XFlush(m_display);
+}
+
TouchpadEnablerDaemon::TouchpadEnablerDaemon(QObject *parent, const QList<=
QVariant>&)
: KDEDModule(parent)
{
diff --git a/settings.kcfgc b/settings.kcfgc
new file mode 100644
index 0000000..9e49060
--- /dev/null
+++ b/settings.kcfgc
@@ -0,0 +1,5 @@
+ClassName=3DSettings
+Namespace=3Dktouchpadenabler
+File=3Dktouchpadenabler.kcfg
+Mutators=3Dtrue
+Singleton=3Dtrue