krdc: fixed handling of keyboard grab/release. This resolves issue #27.

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit 63ead30414)
pull/38/head r14.0.9
Michele Calgaro 4 years ago
parent fba84de0d2
commit 969a166df1
Signed by: MicheleC
GPG Key ID: 2A75B7CA8ADED5CF

@ -48,7 +48,7 @@ const int XKeyRelease = KeyRelease;
KeyCaptureDialog::KeyCaptureDialog(TQWidget *parent, const char *name) KeyCaptureDialog::KeyCaptureDialog(TQWidget *parent, const char *name)
: KDialogBase(parent, name, true, i18n( "Enter Key Combination" ), : KDialogBase(parent, name, true, i18n( "Enter Key Combination" ),
Cancel, Cancel, true), m_grabbed(false) { Cancel, Cancel, true) {
TQFrame *main = makeMainWidget(); TQFrame *main = makeMainWidget();
TQVBoxLayout *layout = new TQVBoxLayout( main, 0, KDialog::spacingHint() ); TQVBoxLayout *layout = new TQVBoxLayout( main, 0, KDialog::spacingHint() );
m_captureWidget = new KeyCaptureWidget( main, "m_captureWidget" ); m_captureWidget = new KeyCaptureWidget( main, "m_captureWidget" );
@ -57,15 +57,13 @@ KeyCaptureDialog::KeyCaptureDialog(TQWidget *parent, const char *name)
} }
KeyCaptureDialog::~KeyCaptureDialog() { KeyCaptureDialog::~KeyCaptureDialog() {
if (m_grabbed) releaseKeyboard();
releaseKeyboard();
} }
void KeyCaptureDialog::execute() { void KeyCaptureDialog::execute() {
m_captureWidget->keyLabel->setText(""); m_captureWidget->keyLabel->setText("");
exec(); exec();
if (m_grabbed) releaseKeyboard();
releaseKeyboard();
} }
bool KeyCaptureDialog::x11Event(XEvent *pEvent) bool KeyCaptureDialog::x11Event(XEvent *pEvent)
@ -76,17 +74,25 @@ bool KeyCaptureDialog::x11Event(XEvent *pEvent)
x11EventKeyPress( pEvent ); x11EventKeyPress( pEvent );
return true; return true;
case XFocusIn: case XFocusIn:
if (!m_grabbed) {
grabKeyboard(); XFocusInEvent *fie = (XFocusInEvent*)pEvent;
return true; if (fie->mode != NotifyGrab && fie->mode != NotifyUngrab) {
grabKeyboard();
}
}
break;
case XFocusOut: case XFocusOut:
if (m_grabbed) {
releaseKeyboard(); XFocusOutEvent *foe = (XFocusOutEvent*)pEvent;
return true; if (foe->mode != NotifyGrab && foe->mode != NotifyUngrab) {
releaseKeyboard();
}
}
break;
default: default:
break; break;
} }
return TQWidget::x11Event( pEvent ); return KDialogBase::x11Event( pEvent );
} }
void KeyCaptureDialog::x11EventKeyPress( XEvent *pEvent ) void KeyCaptureDialog::x11EventKeyPress( XEvent *pEvent )

@ -30,8 +30,6 @@ class KeyCaptureWidget;
class KeyCaptureDialog : public KDialogBase { class KeyCaptureDialog : public KDialogBase {
Q_OBJECT Q_OBJECT
bool m_grabbed;
public: public:
KeyCaptureDialog(TQWidget * parent= 0, const char *name = 0); KeyCaptureDialog(TQWidget * parent= 0, const char *name = 0);
~KeyCaptureDialog(); ~KeyCaptureDialog();

Loading…
Cancel
Save