--------------Boundary-00=_8UWX2R6EIPTP92BYTEFT Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Dear list, I have implemented keyboard navigation of the kicker menu - see the attat= ched=20 patch (but note focus problem below). I'm posting this here to see if=20 everyone is ok with applying it before 3.0; I'm happy for it to wait if n= eed=20 be. The navigation works as follows. The first item from the top with the mat= ching=20 first letter is selected. If it is the only match on the menu, it is=20 executed; otherwise, further presses of the same key cycle between matchi= ng=20 entries. There is one problem at the moment. The menu currently loses keyboard foc= us=20 after the first keypress - this appears to be a regression of=20 http://lists.kde.org/?l=3Dkde-core-devel&m=3D98120358401987&w=3D2 . Even = grabbing=20 the keyboard with grabKeyboard() doesn't fix this. I haven't been able t= o=20 figure this one out - could someone more knowledgeable about kwin take a=20 look? For those who want to test the navigation patch now, because of the issue= =20 above you will need to make a change to=20 kdebase/kicker/core/container_panel.cpp - in PanelContainer::PanelContain= er,=20 comment out KWin::setType( winId(), NET::Dock ); This will allow kicker=20 itself to take focus, and the keyboard navigation will work. To give kick= er=20 focus, change virtual desktops with the mouse, or use the scrollwheel ove= r=20 kicker. Note that this produces side-effects (kicker itself can be=20 minimized). Notes: - performance is fine on a fast computer. I don't have a slow one to test= with=20 unfortunately - post if there are issues. - different response patterns would not be hard to implement, just descri= be=20 them to me (this could be configurable). - a few implementation questions are in the patch's comments. - if there are locale problems please post. Cheers, Hamish PS. you may remember I wanted to work on X translucency effects; it was a= bove=20 me and I wanted to learn c++ more than c... --------------Boundary-00=_8UWX2R6EIPTP92BYTEFT Content-Type: text/x-diff; charset="us-ascii"; name="keyboard.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="keyboard.patch" SW5kZXg6IHVpL3NlcnZpY2VfbW51LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUv a2RlYmFzZS9raWNrZXIvdWkvc2VydmljZV9tbnUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx LjMwCmRpZmYgLXUgLTMgLXAgLXUgLXIxLjMwIHNlcnZpY2VfbW51LmNwcAotLS0gdWkvc2Vydmlj ZV9tbnUuY3BwCTIwMDEvMTIvMDggMDY6Mjg6MDQJMS4zMAorKysgdWkvc2VydmljZV9tbnUuY3Bw CTIwMDEvMTIvMjYgMDc6NTI6NTkKQEAgLTM2OCw2ICszNjgsMTMwIEBAIHZvaWQgUGFuZWxTZXJ2 aWNlTWVudTo6bW91c2VNb3ZlRXZlbnQoUU0KICAgICBzdGFydFBvc18gPSBRUG9pbnQoLTEsLTEp OwogfQoKKy8qKgorICogVGhpcyBpcyByZS1pbXBsZW1lbnRlZCBmb3Iga2V5Ym9hcmQgbmF2aWdh dGlvbi4KKyAqLwordm9pZCBQYW5lbFNlcnZpY2VNZW51OjprZXlQcmVzc0V2ZW50KFFLZXlFdmVu dCogZSkKK3sKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBUaGUgZm9sbG93aW5nIHRyaWVzIHRvIGJlIHNv bWV3aGF0IGVmZmljaWVudC4uLgorCSAqICAgIC4uLiBidXQgbm90IHNvIGVmZmljaWVudCB0aGF0 IHRoZSBjb2RlIGlzICh0b28pIGNvbXBsZXguCisJICoKKwkgKiBGSVhNRSBzaG91bGQgd2UgY2F0 ZXIgZm9yIG11bHRpcGxlIGtleXN0cm9rZXMgaW4gdGhlIHNhbWUgZXZlbnQ/CisJICoKKwkgKiBU b2RvOgorCSAqICAtIFZlcmlmeSB0aGlzIHdvcmtzIGluIGludGVyZXN0aW5nIGxvY2FsZXMKKwkg KiAgLSBEaWZmZXJlbnQgcmVhY3Rpb24gcGF0dGVybnMgb24gcmVxdWVzdAorCSAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworCisJaW50IGkgPSAwOworCisJLy8gdGhpcyB3YXMgY2hvc2VuIHRvIGhvbm91ciB1bmljb2Rl IHN0cm9rZXMgY29ycmVjdGx5IC0gaXMgdGhpcyBjb3JyZWN0PworCVFTdHJpbmcgbG93ZXIgPSBl LT50ZXh0KCkubG93ZXIoKTsKKworCS8vIGNoZWNrIGZvciBjb21tb24gY29tbWFuZHMgZGVhbHQg d2l0aCBieSBRUG9wdXAKKwlpbnQga2V5ID0gZS0+a2V5KCk7CisJaWYgKGtleSA9PSBLZXlfRXNj YXBlIHx8IGtleSA9PSBLZXlfUmV0dXJuIHx8IGtleSA9PSBLZXlfRW50ZXIKKwkJCXx8IGtleSA9 PSBLZXlfVXAgfHwga2V5ID09IEtleV9Eb3duIHx8IGtleSA9PSBLZXlfTGVmdAorCQkJfHwga2V5 ID09IEtleV9SaWdodCB8fCBrZXkgPT0gS2V5X0YxKSB7CisJCWUtPmlnbm9yZSgpOworCQkvLyBj b250aW51ZSBldmVudCBwcm9jZXNzaW5nIGJ5IFFwb3B1cAorCQlLUGFuZWxNZW51OjprZXlQcmVz c0V2ZW50KGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxhc3RDaGFyID09IGxvd2VyKSB7CisJ CS8vIHNhbWUgY2hhcmFjdGVyIHByZXNzZWQgYXMgbGFzdCB0aW1lCisJCWlmIChub01hdGNoZXMp IHsKKwkJCWUtPmlnbm9yZSgpOworCQkJS1BhbmVsTWVudTo6a2V5UHJlc3NFdmVudChlKTsKKwkJ CXJldHVybjsKKwkJfSBlbHNlIGlmIChtb3JlVGhhbk9uZSkgeworCQkJLy8gd2UgaGFkIHRvIGNo ZWNrIGZvciB0aGlzIGxhc3QgdGltZQorCQkJc2V0QWN0aXZlSXRlbShuZXh0SGl0SW5kZXgpOwor CisJCQlsYXN0SGl0SW5kZXggPSBuZXh0SGl0SW5kZXg7CisJCQlpID0gbmV4dEhpdEluZGV4ICsg MTsKKwkJfSBlbHNlIHsKKwkJCS8vIGFscmVhZHkgb24gdGhlIG9ubHkgbWF0Y2hpbmcgZW50cnkK KwkJCS8vIHRoaXMgd2lsbCBvbmx5IGJlIHJlYWNoZWQgd2l0aDoKKwkJCS8vICAxKSBhIG5vbi1h dXRvLWV4ZWN1dGluZyBwb2xpY3kKKwkJCS8vICAyKSB0aGUgdXNlciByZXR1cm5pbmcgdG8gdGhp cyBtZW51LCBhbmQgcHJlc3NpbmcgdGhlIHNhbWUga2V5CisJCQkvLyBGb3Igbm93LCBleGVjdXRl IGl0IGFnYWluCisJCQlzZXRBY3RpdmVJdGVtKGxhc3RIaXRJbmRleCk7CisJCQlyZXR1cm47CisJ CX0KKwl9IGVsc2UgeworCQkvLyByZXNldCBhbGwgdmFyaWFibGVzCisJCWxhc3RIaXRJbmRleCA9 IG5leHRIaXRJbmRleCA9IC0xOworCQltb3JlVGhhbk9uZSA9IG5vTWF0Y2hlcyA9ICBmYWxzZTsK KworCQkvLyByZW1lbWJlciB0aGlzIGtleXByZXNzIGZvciBuZXh0IHRpbWUKKwkJbGFzdENoYXIg PSBsb3dlcjsKKwl9CisKKwlRU3RyaW5nIHVwcGVyID0gZS0+dGV4dCgpLnVwcGVyKCk7CisKKwli b29sIGZpcnN0cGFzcyA9IHRydWU7CisJLy8gbG9vcCBtZW51IGl0ZW1zOiAtMSBpcyB0byBub3Qg ZG8gYSBzZWFyY2ggb24gdGhlIHRlYXJvZmYKKwlmb3IgKDsgaSA8IGNvdW50KCkgLSAxOyBpKysp IHsKKwkJLy8gY29tcGFyZSB0eXBlZCB0ZXh0IHdpdGggdGV4dCBvZiB0aGlzIGVudHJ5CisJCWlu dCBqID0gaWRBdChpKTsKKwkJaWYgKHRleHQoaikuc3RhcnRzV2l0aCh1cHBlcikgfHwgdGV4dChq KS5zdGFydHNXaXRoKGxvd2VyKSkgeworCQkJLy8gbWF0Y2gKKwkJCWlmIChtb3JlVGhhbk9uZSkg eworCQkJCS8vIHNhdmUgZm9yIG5leHQgdGltZQorCQkJCW5leHRIaXRJbmRleCA9IGk7CisJCQkJ cmV0dXJuOworCQkJfSBlbHNlIGlmIChmaXJzdHBhc3MpIHsKKwkJCQkvLyB3ZSBkb24ndCBrbm93 IGlmIHRoZXJlIGlzIGFub3RoZXIgaGl0IG9yIG5vdCB5ZXQKKwkJCQkvLyB3ZSBuZWVkIHRvIGtu b3cgc28gdGhhdCB3ZSBjYW4gZXhlY3V0ZSB0aGUgaXRlbSBpZgorCQkJCS8vIGl0IGlzIHVuaXF1 ZSwgc28gY29udGludWUgb24uLi4KKwkJCQlmaXJzdHBhc3MgPSBmYWxzZTsKKwkJCQlsYXN0SGl0 SW5kZXggPSBpOworCQkJfSBlbHNlIHsKKwkJCQkvLyBXZSd2ZSBmb3VuZCBhIHNlY29uZCBpdGVt LiBzZWxlY3QgaXQgb25seS4KKwkJCQlzZXRBY3RpdmVJdGVtKGxhc3RIaXRJbmRleCk7CisKKwkJ CQltb3JlVGhhbk9uZSA9IHRydWU7CisJCQkJbmV4dEhpdEluZGV4ID0gaTsKKwkJCQlyZXR1cm47 CisJCQl9CisJCX0KKwl9CisKKwlpZiAobW9yZVRoYW5PbmUpIHsKKwkJLy8gdGhlIG5leHQgZW50 cnkgbXVzdCBiZSB1cCBmdXJ0aGVyLiBGaW5kIGl0IG5leHQgdGltZS4KKwkJLy8gdGhpcyBjYXVz ZXMgYSByZXNldCBvbiB0aGUgbmV4dCBwYXNzLgorCQlsYXN0Q2hhciA9IFFTdHJpbmc6Om51bGw7 CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKCFmaXJzdHBhc3MpIHsKKwkJLy8gd2UgZm91bmQgYSB1 bmlxdWUgZW50cnksIGFjdGl2YXRlIGl0CisJCXNldEFjdGl2ZUl0ZW0obGFzdEhpdEluZGV4KTsK KworCQkvLyBDcmVhdGUgYW5kIHBhc3MgYW4gRW50ZXIga2V5c3Ryb2tlIHRvIGFjdHVhbGx5IGFj dGl2YXRlIHRoZSBpdGVtLgorCQkvLyBUaGlzIGlzIHRoZSBiZXN0IG1ldGhvZCBJIGNvdWxkIGZp bmQuLi4KKwkJUUtleUV2ZW50ICplbnRlclByZXNzID0KKwkJCW5ldyBRS2V5RXZlbnQoUUtleUV2 ZW50OjpLZXlQcmVzcywgS2V5X0VudGVyLAorCQkJCQlLZXlfRW50ZXIsIDAsIFFTdHJpbmcoUUNo YXIoS2V5X0VudGVyKSkpOworCQlRS2V5RXZlbnQgKmVudGVyUmVsZWFzZSA9CisJCQluZXcgUUtl eUV2ZW50KFFLZXlFdmVudDo6S2V5UmVsZWFzZSwgS2V5X0VudGVyLAorCQkJCQlLZXlfRW50ZXIs IDAsIFFTdHJpbmcoUUNoYXIoS2V5X0VudGVyKSkpOworCisJCS8vIEZJWE1FIGlzIHRoaXMgdHJv dWJsZSB3aGVyZSBrZXlldmVudHMgY291bGQgYmUgd2FpdGluZz8KKwkJLy8gaXMgc2VuZEV2ZW50 KCkgbW9yZSBhcHByb3ByaWF0ZT8KKwkJUUFwcGxpY2F0aW9uOjpwb3N0RXZlbnQodGhpcywgZW50 ZXJQcmVzcyk7CisJCVFBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KHRoaXMsIGVudGVyUmVsZWFzZSk7 CisKKwkJcmV0dXJuOworCX0KKworCS8vIG5vIG1hdGNoZXMgd2hhdHNvZXZlciwgY2xlYW4gdXAK Kwlub01hdGNoZXMgPSB0cnVlOworCWUtPmlnbm9yZSgpOworCUtQYW5lbE1lbnU6OmtleVByZXNz RXZlbnQoZSk7Cit9CisKIFBhbmVsU2VydmljZU1lbnUgKlBhbmVsU2VydmljZU1lbnU6Om5ld1N1 Yk1lbnUoY29uc3QgUVN0cmluZyAmIGxhYmVsLCBjb25zdCBRU3RyaW5nICYgcmVsUGF0aCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCAqIHBh cmVudCwgY29uc3QgY2hhciAqIG5hbWUpCiB7CkluZGV4OiB1aS9zZXJ2aWNlX21udS5oCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGViYXNlL2tpY2tlci91aS9zZXJ2aWNlX21udS5o LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzCmRpZmYgLXUgLTMgLXAgLXUgLXIxLjEzIHNlcnZp Y2VfbW51LmgKLS0tIHVpL3NlcnZpY2VfbW51LmgJMjAwMS8xMi8wOCAwNjoyODowNAkxLjEzCisr KyB1aS9zZXJ2aWNlX21udS5oCTIwMDEvMTIvMjYgMDc6NTI6NTkKQEAgLTgyLDYgKzgyLDE2IEBA IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50 ICopOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVFdmVudChRTW91c2VFdmVudCAqKTsKICAg ICB2aXJ0dWFsIHZvaWQgY2xvc2VFdmVudChRQ2xvc2VFdmVudCAqKTsKKwl2aXJ0dWFsIHZvaWQg a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGUpOworCisJLy8gdmFyaWFibGVzIGZvciBrZXlib2Fy ZCBuYXZpZ2F0aW9uCisJUVN0cmluZyBsYXN0Q2hhcjsKKwkvLyB2YXJpYWJsZXMgYmVsb3cgYXBw bHkgb25seSB3aGVuIGxhc3QgY2hhcmFjdGVyIHR5cGVkID09IG5ldyBjaGFyYWN0ZXIgYmVpbmcg cHJvY2Vzc2VkCisJaW50IGxhc3RIaXRJbmRleDsKKwlpbnQgbmV4dEhpdEluZGV4OworCWJvb2wg bW9yZVRoYW5PbmU7CisJYm9vbCBub01hdGNoZXM7CisKCiAgICAgUVN0cmluZyByZWxQYXRoXzsK Cg== --------------Boundary-00=_8UWX2R6EIPTP92BYTEFT--