[meld] Check for modifier keysyms only on first level (closes bgo#683534)
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld] Check for modifier keysyms only on first level (closes bgo#683534)
- Date: Tue, 2 Oct 2012 20:59:15 +0000 (UTC)
commit 72b9ff55d53fa05e3558ba4f16bb7b5f0c5f2e8a
Author: Stephan Hilb <stephan ecshi net>
Date: Wed Sep 26 18:08:34 2012 +0200
Check for modifier keysyms only on first level (closes bgo#683534)
There is a problem when checking for keypress/release events on
modifier keys as they do not necessarily have the modifier keysym
on that level as expected (see bugs #683534 and #584342).
By checking for the keysym on the first level (and thereby assuming
a modifier key has its appropriate keysym set on the first level)
we can gracefully circumvent this problem.
This might not be the ideal solution, but considering there is no
good way to retrieve the current modifier state in PyGTK it is at
least better than previously.
The ugly workaround for #584342 is thereby obsolete.
We use translate_keyboard_state method instead of lookup_key, as
the latter one returns wrong values in some cases with multiple
layouts.
meld/filediff.py | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
---
diff --git a/meld/filediff.py b/meld/filediff.py
index 38e6bad..ae1295c 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -712,19 +712,20 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
self.refresh_comparison()
def on_key_press_event(self, object, event):
- x = self.keylookup.get(event.keyval, 0)
+ keymap = gtk.gdk.keymap_get_default()
+ x = self.keylookup.get(keymap.translate_keyboard_state(
+ event.hardware_keycode, 0, event.group)[0], 0)
if self.keymask | x != self.keymask:
self.keymask |= x
elif event.keyval == gtk.keysyms.Escape:
self.findbar.hide()
def on_key_release_event(self, object, event):
- x = self.keylookup.get(event.keyval, 0)
+ keymap = gtk.gdk.keymap_get_default()
+ x = self.keylookup.get(keymap.translate_keyboard_state(
+ event.hardware_keycode, 0, event.group)[0], 0)
if self.keymask & ~x != self.keymask:
self.keymask &= ~x
- # Ugly workaround for bgo#584342
- elif event.keyval == gtk.keysyms.ISO_Prev_Group:
- self.keymask = 0
def on_delete_event(self, appquit=0):
response = gtk.RESPONSE_OK
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]