[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-accessibility
Subject: [Kde-accessibility] Keyboard gestures for enabling AccessX features
From: Gunnar Schmi Dt <gunnar () schmi-dt ! de>
Date: 2004-12-15 15:38:39
Message-ID: 200412151638.47915.gunnar () schmi-dt ! de
[Download RAW message or body]
[Attachment #2 (multipart/signed)]
[Attachment #4 (multipart/mixed)]
Hello,
Attached you can find a patch that enables keyboard gestures for AccessX
features:
Mouse Keys: Press Alt+left Shift+Num Lock simultaneously
Sticky keys: Press Shift key 5 consecutive times
Slow keys: Hold down Shift for 8 seconds
These gestures are also available under GNOME and other window managers
(actually they are defined by X).
If there are no objections I will commit this patch tomorrow evening (so
that is in CVS before the freeze starts).
Gunnar Schmi Dt
P.S.
Sorry for the cross-posting, but this is relevant to two mailing lists.
--
Co-maintainer of the KDE Accessibility Project
Maintainer of the kdeaccessibility package
http://accessibility.kde.org/
["accessx.patch" (text/x-diff)]
Index: kcontrol/access/kaccess.cpp
===================================================================
RCS file: /home/kde/kdebase/kcontrol/access/kaccess.cpp,v
retrieving revision 1.20
diff -u -p -r1.20 kaccess.cpp
--- kcontrol/access/kaccess.cpp 26 Oct 2003 23:38:39 -0000 1.20
+++ kcontrol/access/kaccess.cpp 15 Dec 2004 15:23:51 -0000
@@ -4,11 +4,12 @@
#include <qtimer.h>
#include <qpainter.h>
-
+#include <kmessagebox.h>
#include <kdebug.h>
#include <kaudioplayer.h>
#include <kconfig.h>
#include <kglobal.h>
+#include <klocale.h>
#include <netwm.h>
@@ -46,6 +47,8 @@ KAccessApp::KAccessApp(bool allowStyles,
artsBellTimer = new QTimer( this );
connect( artsBellTimer, SIGNAL( timeout() ), SLOT( slotArtsBellTimeout() ));
+
+ features = 0;
}
int KAccessApp::newInstance()
@@ -112,22 +115,21 @@ void KAccessApp::readSettings()
// slow keys
if (config->readBoolEntry("SlowKeys", false))
- {
- xkb->ctrls->slow_keys_delay = config->readNumEntry("SlowKeysDelay", 500);
xkb->ctrls->enabled_ctrls |= XkbSlowKeysMask;
- }
else
xkb->ctrls->enabled_ctrls &= ~XkbSlowKeysMask;
+ xkb->ctrls->slow_keys_delay = config->readNumEntry("SlowKeysDelay", 500);
// bounce keys
if (config->readBoolEntry("BounceKeys", false))
- {
- xkb->ctrls->debounce_delay = config->readNumEntry("BounceKeysDelay", 500);
xkb->ctrls->enabled_ctrls |= XkbBounceKeysMask;
- }
else
xkb->ctrls->enabled_ctrls &= ~XkbBounceKeysMask;
+ xkb->ctrls->debounce_delay = config->readNumEntry("BounceKeysDelay", 500);
+ // gestures for enabling the other features
+ if (config->readBoolEntry("Gestures", true))
+ xkb->ctrls->enabled_ctrls |= XkbAccessXKeysMask;
// mouse-by-keyboard ----------------------------------------------
@@ -147,11 +149,18 @@ void KAccessApp::readSettings()
else
xkb->ctrls->enabled_ctrls &= ~XkbMouseKeysMask;
+ features = xkb->ctrls->enabled_ctrls & (XkbSlowKeysMask | XkbBounceKeysMask | \
XkbStickyKeysMask | XkbMouseKeysMask); // set state
- XkbSetControls(qt_xdisplay(), XkbControlsEnabledMask | XkbMouseKeysAccelMask | \
XkbStickyKeysMask, xkb); + XkbSetControls(qt_xdisplay(), XkbControlsEnabledMask | \
XkbMouseKeysAccelMask | XkbStickyKeysMask | XkbAccessXKeysMask, xkb); +
+ // select AccessX events if we need them
+ config->setGroup("Keyboard");
+ bool gestures = config->readBoolEntry("Gestures", true);
+ state = gestures ? XkbControlsNotifyMask : 0;
+ XkbSelectEvents(qt_xdisplay(), XkbUseCoreKbd, XkbControlsNotifyMask, state);
// reset them after program exit
- uint ctrls = XkbStickyKeysMask | XkbSlowKeysMask | XkbBounceKeysMask | \
XkbMouseKeysMask | XkbAudibleBellMask; + uint ctrls = XkbStickyKeysMask | \
XkbSlowKeysMask | XkbBounceKeysMask | XkbMouseKeysMask | XkbAudibleBellMask | \
XkbControlsNotifyMask; uint values = XkbAudibleBellMask;
XkbSetAutoResetControls(qt_xdisplay(), ctrls, &ctrls, &values);
@@ -169,6 +178,8 @@ bool KAccessApp::x11EventFilter(XEvent *
if (ev->xkb_type == XkbBellNotify)
xkbBellNotify((XkbBellNotifyEvent*)event);
+ else if (ev->xkb_type == XkbControlsNotify)
+ xkbControlsNotify((XkbControlsNotifyEvent*)event);
return true;
}
@@ -239,6 +250,138 @@ void KAccessApp::xkbBellNotify(XkbBellNo
}
}
+void KAccessApp::xkbControlsNotify(XkbControlsNotifyEvent *event)
+{
+ unsigned int newFeatures = event->enabled_ctrls & (XkbSlowKeysMask | \
XkbBounceKeysMask | XkbStickyKeysMask | XkbMouseKeysMask); + if (newFeatures != \
features) { + unsigned int enabled = newFeatures & ~features;
+ unsigned int disabled = features & ~newFeatures;
+ features = newFeatures;
+
+ QString message;
+ if (disabled == 0) {
+ switch (enabled) {
+ case 0:
+ message = i18n("Nothing happend?");
+ break;
+ case XkbSlowKeysMask:
+ message = i18n("Slow keys is now enabled.\n"
+ "This may be because you hold down the Shift key for 8 seconds "
+ "or because some application has enabed this feature.\n"
+ "You can configure slow keys and similar features in the "
+ "Regional & Accessibility->Accessibility module of the "
+ "KDE Control Center.\n"
+ "To quickly disable slow keys, press the Shift key for another 8 \
seconds."); + break;
+ case XkbBounceKeysMask:
+ message = i18n("Bounce keys is now enabled.\n"
+ "This may be because some application has enabed this feature.\n"
+ "You can configure bounce keys and similar features in the "
+ "Regional & Accessibility->Accessibility module of the "
+ "KDE Control Center.");
+ break;
+ case XkbStickyKeysMask:
+ message = i18n("Sticky keys is now enabled.\n"
+ "This may be because you pressed the Shift key 5 consecutive "
+ "times or because some application has enabed this feature.\n"
+ "You can configure sticky keys and similar features in the "
+ "Regional & Accessibility->Accessibility module of the "
+ "KDE Control Center.\n"
+ "To quickly disable sticky keys, press the Shift key for another 5 \
times."); + break;
+ case XkbMouseKeysMask:
+ message = i18n("Mouse keys is now enabled.\n"
+ "This may be because you pressed Alt+left Shift+Num Lock "
+ "or because some application has enabed this feature.\n"
+ "You can configure sticky keys and similar features in the "
+ "Regional & Accessibility->Accessibility module of the "
+ "KDE Control Center.\n"
+ "To quickly disable mouse keys, press Alt+left Shift+Num Lock again.");
+ break;
+ default:
+ message = i18n("Multiple AccessX features have been enabled.\n"
+ "This may be because some application has enabed these features.\n"
+ "You can configure them in the "
+ "Regional & Accessibility->Accessibility module of the "
+ "KDE Control Center.");
+ }
+ }
+ else if (enabled == 0) {
+ switch (disabled) {
+ case XkbSlowKeysMask:
+ message = i18n("Slow keys is now disabled.\n"
+ "This may be because you hold down the Shift key for 8 seconds "
+ "or because some application has disabed this feature.\n"
+ "You can configure slow keys and similar features in the "
+ "Regional & Accessibility->Accessibility module of the "
+ "KDE Control Center.");
+ break;
+ case XkbBounceKeysMask:
+ message = i18n("Bounce keys is now disabled.\n"
+ "This may be because some application has disabed this feature.\n"
+ "You can configure bounce keys and similar features in the "
+ "Regional & Accessibility->Accessibility module of the "
+ "KDE Control Center.");
+ break;
+ case XkbStickyKeysMask:
+ message = i18n("Sticky keys is now disabled.\n"
+ "This may be because you pressed the Shift key 5 consecutive "
+ "times or because some application has disabed this feature.\n"
+ "You can configure sticky keys and similar features in the "
+ "Regional & Accessibility->Accessibility module of the "
+ "KDE Control Center.");
+ break;
+ case XkbMouseKeysMask:
+ message = i18n("Mouse keys is now disabled.\n"
+ "This may be because you pressed Alt+left Shift+Num Lock "
+ "or because some application has disabed this feature.\n"
+ "You can configure sticky keys and similar features in the "
+ "Regional & Accessibility->Accessibility module of the "
+ "KDE Control Center.");
+ break;
+ default:
+ message = i18n("Multiple AccessX features have been disabled.\n"
+ "This may be because some application has disabed these features.\n"
+ "You can configure them in the "
+ "Regional & Accessibility->Accessibility module of the "
+ "KDE Control Center.");
+ }
+ }
+ else
+ message = i18n("Multiple AccessX features have been changed.");
+
+ KMessageBox::information (0, message, "Accessibility");
+
+ KConfig *config = KGlobal::config();
+
+ config->setGroup("Keyboard");
+
+ if (enabled & XkbSlowKeysMask)
+ config->writeEntry("SlowKeys", true);
+ else if (enabled & XkbSlowKeysMask)
+ config->writeEntry("SlowKeys", false);
+
+ if (enabled & XkbBounceKeysMask)
+ config->writeEntry("BounceKeys", true);
+ else if (enabled & XkbBounceKeysMask)
+ config->writeEntry("BounceKeys", false);
+
+ if (enabled & XkbStickyKeysMask)
+ config->writeEntry("StickyKeys", true);
+ else if (enabled & XkbStickyKeysMask)
+ config->writeEntry("StickyKeys", false);
+
+ config->setGroup("Mouse");
+
+ if (enabled & XkbMouseKeysMask)
+ config->writeEntry("MouseKeys", true);
+ else if (disabled & XkbMouseKeysMask)
+ config->writeEntry("MouseKeys", false);
+
+ config->sync();
+ }
+}
+
void KAccessApp::slotArtsBellTimeout()
{
_artsBellBlocked = false;
Index: kcontrol/access/kaccess.h
===================================================================
RCS file: /home/kde/kdebase/kcontrol/access/kaccess.h,v
retrieving revision 1.8
diff -u -p -r1.8 kaccess.h
--- kcontrol/access/kaccess.h 9 Oct 2003 12:35:59 -0000 1.8
+++ kcontrol/access/kaccess.h 15 Dec 2004 15:23:51 -0000
@@ -34,6 +34,7 @@ protected:
void readSettings();
void xkbBellNotify(XkbBellNotifyEvent *event);
+ void xkbControlsNotify(XkbControlsNotifyEvent *event);
private slots:
@@ -45,6 +46,7 @@ private slots:
private:
int xkb_opcode;
+ unsigned int features;
bool _systemBell, _artsBell, _visibleBell, _visibleBellInvert;
bool _artsBellBlocked;
Index: kcontrol/access/kcmaccess.cpp
===================================================================
RCS file: /home/kde/kdebase/kcontrol/access/kcmaccess.cpp,v
retrieving revision 1.38
diff -u -p -r1.38 kcmaccess.cpp
--- kcontrol/access/kcmaccess.cpp 22 Nov 2004 03:00:06 -0000 1.38
+++ kcontrol/access/kcmaccess.cpp 15 Dec 2004 15:23:51 -0000
@@ -235,6 +235,18 @@ KAccessConfig::KAccessConfig(QWidget *pa
bounceKeysDelay->setLabel(i18n("D&elay:"));
hbox->addWidget(bounceKeysDelay);
+ grp = new QGroupBox(i18n("Activation Gestures"), keys);
+ grp->setColumnLayout( 0, Qt::Horizontal );
+ vbox->addWidget(grp);
+
+ vvbox = new QVBoxLayout(grp->layout(), KDialog::spacingHint());
+
+ gestures = new QCheckBox(i18n("Use gestures for activating the above features"), \
grp); + vvbox->addWidget(gestures);
+ QWhatsThis::add( gestures, i18n("Here you can activate keyboard gestures that turn \
on the following features: \n" + "Mouse Keys: Press Alt+left Shift+Num Lock \
simultaneously\n" + "Sticky keys: Press Shift key 5 consecutive times\n"
+ "Slow keys: Hold down Shift for 8 seconds") );
connect(stickyKeys, SIGNAL(clicked()), this, SLOT(configChanged()));
connect(stickyKeysLock, SIGNAL(clicked()), this, SLOT(configChanged()));
@@ -247,6 +259,8 @@ KAccessConfig::KAccessConfig(QWidget *pa
connect(bounceKeys, SIGNAL(clicked()), this, SLOT(configChanged()));
connect(bounceKeys, SIGNAL(clicked()), this, SLOT(checkAccess()));
+ connect(gestures, SIGNAL(clicked()), this, SLOT(configChanged()));
+
vbox->addStretch();
tab->addTab(keys, i18n("&Keyboard"));
@@ -312,6 +326,7 @@ void KAccessConfig::load()
slowKeysDelay->setValue(config->readNumEntry("SlowKeysDelay", 500));
bounceKeys->setChecked(config->readBoolEntry("BounceKeys", false));
bounceKeysDelay->setValue(config->readNumEntry("BounceKeysDelay", 500));
+ gestures->setChecked(config->readBoolEntry("Gestures", true));
delete config;
@@ -349,6 +364,8 @@ void KAccessConfig::save()
config->writeEntry("BounceKeys", bounceKeys->isChecked());
config->writeEntry("BounceKeysDelay", bounceKeysDelay->value());
+
+ config->writeEntry("Gestures", gestures->isChecked());
config->sync();
@@ -398,9 +415,11 @@ void KAccessConfig::defaults()
bounceKeys->setChecked(false);
bounceKeysDelay->setValue(500);
- stickyKeys->setChecked(true);
+ stickyKeys->setChecked(false);
stickyKeysLock->setChecked(true);
+ gestures->setChecked(true);
+
checkAccess();
emit changed(true);
Index: kcontrol/access/kcmaccess.h
===================================================================
RCS file: /home/kde/kdebase/kcontrol/access/kcmaccess.h,v
retrieving revision 1.7
diff -u -p -r1.7 kcmaccess.h
--- kcontrol/access/kcmaccess.h 18 Jul 2004 23:05:37 -0000 1.7
+++ kcontrol/access/kcmaccess.h 15 Dec 2004 15:23:51 -0000
@@ -59,7 +59,8 @@ private:
QCheckBox *slowKeys, *bounceKeys;
KIntNumInput *slowKeysDelay, *bounceKeysDelay;
-
+
+ QCheckBox *gestures;
};
[Attachment #8 (application/pgp-signature)]
_______________________________________________
kde-accessibility mailing list
kde-accessibility@kde.org
https://mail.kde.org/mailman/listinfo/kde-accessibility
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic