Merge lp:~djaler1/audience/fix-1235489 into lp:~audience-members/audience/trunk

Proposed by Kirill Romanov
Status: Merged
Approved by: Leonardo Lemos
Approved revision: 596
Merged at revision: 598
Proposed branch: lp:~djaler1/audience/fix-1235489
Merge into: lp:~audience-members/audience/trunk
Diff against target: 91 lines (+36/-25)
1 file modified
src/Window.vala (+36/-25)
To merge this branch: bzr merge lp:~djaler1/audience/fix-1235489
Reviewer Review Type Date Requested Status
Audience Members Pending
Review via email: mp+300268@code.launchpad.net

Commit message

Fix Ctrl+Q support for non-Latin keyboard layouts

Description of the change

Fix bug#1235489

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/Window.vala'
2--- src/Window.vala 2016-06-12 13:04:20 +0000
3+++ src/Window.vala 2016-07-17 08:57:45 +0000
4@@ -95,22 +95,49 @@
5 });
6 }
7
8+ /** Returns true if the code parameter matches the keycode of the keyval parameter for
9+ * any keyboard group or level (in order to allow for non-QWERTY keyboards) **/
10+ protected bool match_keycode (int keyval, uint code) {
11+ Gdk.KeymapKey [] keys;
12+ Gdk.Keymap keymap = Gdk.Keymap.get_default ();
13+ if (keymap.get_entries_for_keyval (keyval, out keys)) {
14+ foreach (var key in keys) {
15+ if (code == key.keycode)
16+ return true;
17+ }
18+ }
19+
20+ return false;
21+ }
22+
23 public override bool key_press_event (Gdk.EventKey e) {
24- switch (e.keyval) {
25- case Gdk.Key.o:
26+ uint keycode = e.hardware_keycode;
27+ if ((e.state & Gdk.ModifierType.CONTROL_MASK) != 0) {
28+ if (match_keycode (Gdk.Key.o, keycode)) {
29 run_open_file ();
30 return true;
31- case Gdk.Key.q:
32+ } else if (match_keycode (Gdk.Key.q, keycode)) {
33 destroy ();
34 return true;
35+ }
36 }
37
38 if (main_stack.get_visible_child () == player_page) {
39+ if (match_keycode (Gdk.Key.p, keycode) || match_keycode (Gdk.Key.space, keycode)) {
40+ player_page.playing = !player_page.playing;
41+ } else if (match_keycode (Gdk.Key.a, keycode)) {
42+ player_page.next_audio ();
43+ } else if (match_keycode (Gdk.Key.s, keycode)) {
44+ player_page.next_text ();
45+ } else if (match_keycode (Gdk.Key.f, keycode)) {
46+ if (player_page.fullscreened) {
47+ unfullscreen ();
48+ } else {
49+ fullscreen ();
50+ }
51+ }
52+
53 switch (e.keyval) {
54- case Gdk.Key.p:
55- case Gdk.Key.space:
56- player_page.playing = !player_page.playing;
57- break;
58 case Gdk.Key.Escape:
59 if (player_page.fullscreened) {
60 unfullscreen ();
61@@ -163,28 +190,12 @@
62 player_page.seek_jump_seconds (600); // 10 mins
63 player_page.reveal_control ();
64 break;
65- case Gdk.Key.a:
66- player_page.next_audio ();
67- break;
68- case Gdk.Key.s:
69- player_page.next_text ();
70- break;
71- case Gdk.Key.f:
72- if (player_page.fullscreened) {
73- unfullscreen ();
74- } else {
75- fullscreen ();
76- }
77-
78- break;
79 default:
80 break;
81 }
82 } else {
83- switch (e.keyval) {
84- case Gdk.Key.p:
85- case Gdk.Key.space:
86- resume_last_videos ();
87+ if (match_keycode (Gdk.Key.p, keycode) || match_keycode (Gdk.Key.space, keycode)) {
88+ resume_last_videos ();
89 return true;
90 }
91 }

Subscribers

People subscribed via source and target branches