Merge lp:~tintou/switchboard-plug-keyboard/less-hardcode into lp:~elementary-pantheon/switchboard-plug-keyboard/trunk

Proposed by Corentin Noël
Status: Merged
Approved by: Danielle Foré
Approved revision: 395
Merged at revision: 396
Proposed branch: lp:~tintou/switchboard-plug-keyboard/less-hardcode
Merge into: lp:~elementary-pantheon/switchboard-plug-keyboard/trunk
Diff against target: 940 lines (+143/-681)
7 files modified
CMakeLists.txt (+0/-5)
data/layouts.txt (+0/-482)
debian/control (+2/-2)
src/Pages/Layout/add_layout.vala (+47/-15)
src/Pages/Layout/display.vala (+5/-16)
src/Pages/Layout/handler.vala (+89/-147)
src/Pages/layout.vala (+0/-14)
To merge this branch: bzr merge lp:~tintou/switchboard-plug-keyboard/less-hardcode
Reviewer Review Type Date Requested Status
Danielle Foré Needs Fixing
Review via email: mp+292331@code.launchpad.net

Commit message

* Get layouts from xkb-data instead of hardcoding a list
* Allow translations

Description of the change

Less hardcode
Use system layouts
Allow translations

To post a comment you must log in.
Revision history for this message
Felipe Escoto (philip.scott) wrote :

Before mergin, the keyboard indicator needs to be updated to use this new backend. It depends on that layouts.txt file

Revision history for this message
Danielle Foré (danrabbit) wrote :

This branch also currently has the problem that languages and layouts aren't being properly matched. Corentin seemed to think it was because of the alphabetical sort

review: Needs Fixing
Revision history for this message
Danielle Foré (danrabbit) wrote :

The keyboard indicator has been updated

395. By Corentin Noël

Use the system keyboard layouts

Revision history for this message
Corentin Noël (tintou) wrote :

I fixed the addition mish-mash, it's now okay for review

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CMakeLists.txt'
2--- CMakeLists.txt 2015-05-08 09:32:04 +0000
3+++ CMakeLists.txt 2016-04-20 22:56:03 +0000
4@@ -31,15 +31,10 @@
5 configure_file (${CMAKE_SOURCE_DIR}/config.vala.cmake ${CMAKE_BINARY_DIR}/src/config.vala)
6 add_definitions (-DGETTEXT_PACKAGE=\"${GETTEXT_PACKAGE}\")
7
8-# Files
9-file (GLOB resources "${CMAKE_CURRENT_SOURCE_DIR}/data/*")
10-
11 # Comment this out to enable C compiler warnings
12 add_definitions (-w)
13
14 # Traslation stuff
15 add_subdirectory (po)
16-# Info-plug
17-install (FILES ${resources} DESTINATION ${PKGDATADIR})
18
19 add_subdirectory(src)
20
21=== removed directory 'data'
22=== removed file 'data/layouts.txt'
23--- data/layouts.txt 2013-01-03 16:19:15 +0000
24+++ data/layouts.txt 1970-01-01 00:00:00 +0000
25@@ -1,482 +0,0 @@
26-#Afghani:af
27-Pashto (Afghanistan, OLPC):olpc-ps
28-Pashto:ps
29-Persian (Afghanistan, Dari OLPC):fa-olpc
30-Uzbek (Afghanistan):uz
31-Uzbek (Afghanistan, OLPC):uz-olpc
32-#Albanian:al
33-#Amharic:et
34-#Arabic (Morocco):ma
35-Berber (Morocco, Tifinagh alternative phonetic):tifinagh-alt-phonetic
36-Berber (Morocco, Tifinagh alternative):tifinagh-alt
37-Berber (Morocco, Tifinagh extended phonetic):tifinagh-extended-phonetic
38-Berber (Morocco, Tifinagh extended):tifinagh-extended
39-Berber (Morocco, Tifinagh phonetic):tifinagh-phonetic
40-Berber (Morocco, Tifinagh):tifinagh
41-French (Morocco):french
42-#Arabic (Syria):sy
43-Kurdish (Syria, F):ku_f
44-Kurdish (Syria, Latin Alt-Q):ku_alt
45-Kurdish (Syria, Latin Q):ku
46-Syriac (phonetic):syc_phonetic
47-Syriac:syc
48-#Arabic:ara
49-Arabic (Buckwalter):buckwalter
50-Arabic (azerty):azerty
51-Arabic (azerty/digits):azerty_digits
52-Arabic (digits):digits
53-Arabic (qwerty):qwerty
54-Arabic (qwerty/digits):qwerty_digits
55-#Armenian:am
56-Armenian (alternative eastern):eastern-alt
57-Armenian (alternative phonetic):phonetic-alt
58-Armenian (eastern):eastern
59-Armenian (phonetic):phonetic
60-Armenian (western):western
61-#Azerbaijani:az
62-Azerbaijani (Cyrillic):cyrillic
63-#Bambara:ml
64-English (Mali, US Macintosh):us-mac
65-English (Mali, US international):us-intl
66-French (Mali, alternative):fr-oss
67-#Belarusian:by
68-Belarusian (Latin):latin
69-Belarusian (legacy):legacy
70-#Belgian:be
71-Belgian (ISO alternate):iso-alternate
72-Belgian (Sun dead keys):sundeadkeys
73-Belgian (Wang model 724 azerty):wang
74-Belgian (alternative):oss
75-Belgian (alternative, Sun dead keys):oss_sundeadkeys
76-Belgian (alternative, latin-9 only):oss_latin9
77-Belgian (eliminate dead keys):nodeadkeys
78-#Bengali:bd
79-Bengali (Probhat):probhat
80-#Bosnian:ba
81-Bosnian (US keyboard with Bosnian digraphs):unicodeus
82-Bosnian (US keyboard with Bosnian letters):us
83-Bosnian (use Bosnian digraphs):unicode
84-Bosnian (use guillemets for quotes):alternatequotes
85-#Braille:brai
86-Braille (left hand):left_hand
87-Braille (right hand):right_hand
88-#Bulgarian:bg
89-Bulgarian (new phonetic):bas_phonetic
90-Bulgarian (traditional phonetic):phonetic
91-#Burmese:mm
92-#Catalan:ad
93-#Chinese:cn
94-Tibetan (with ASCII numerals):tib_asciinum
95-Tibetan:tib
96-Uyghur:uig
97-#Croatian:hr
98-Croatian (US keyboard with Croatian digraphs):unicodeus
99-Croatian (US keyboard with Croatian letters):us
100-Croatian (use Croatian digraphs):unicode
101-Croatian (use guillemets for quotes):alternatequotes
102-#Czech:cz
103-Czech (UCW layout, accented letters only):ucw
104-Czech (US Dvorak with CZ UCW support):dvorak-ucw
105-Czech (qwerty):qwerty
106-Czech (qwerty, extended Backslash):qwerty_bksl
107-Czech (with <\|> key):bksl
108-#Danish:dk
109-Danish (Dvorak):dvorak
110-Danish (Macintosh):mac
111-Danish (Macintosh, eliminate dead keys):mac_nodeadkeys
112-Danish (eliminate dead keys):nodeadkeys
113-#Dhivehi:mv
114-#Dutch:nl
115-Dutch (Macintosh):mac
116-Dutch (Sun dead keys):sundeadkeys
117-Dutch (standard):std
118-#Dzongkha:bt
119-#English (Cameroon):cm
120-Cameroon Multilingual (Dvorak):dvorak
121-Cameroon Multilingual (azerty):azerty
122-Cameroon Multilingual (qwerty):qwerty
123-French (Cameroon):french
124-#English (Ghana):gh
125-Akan:akan
126-Avatime:avn
127-English (Ghana, GILLBT):gillbt
128-English (Ghana, multilingual):generic
129-Ewe:ewe
130-Fula:fula
131-Ga:ga
132-Hausa:hausa
133-#English (Nigeria):ng
134-Hausa:hausa
135-Igbo:igbo
136-Yoruba:yoruba
137-#English (South Africa):za
138-#English (UK):gb
139-English (UK, Colemak):colemak
140-English (UK, Dvorak with UK punctuation):dvorakukp
141-English (UK, Dvorak):dvorak
142-English (UK, Macintosh international):mac_intl
143-English (UK, Macintosh):mac
144-English (UK, extended WinKeys):extd
145-English (UK, international with dead keys):intl
146-#English (US):us
147-Cherokee:chr
148-English (Colemak):colemak
149-English (Dvorak alternative international no dead keys):dvorak-alt-intl
150-English (Dvorak international with dead keys):dvorak-intl
151-English (Dvorak):dvorak
152-English (Macintosh):mac
153-English (US, alternative international):alt-intl
154-English (US, international with dead keys):intl
155-English (US, with euro on 5):euro
156-English (classic Dvorak):dvorak-classic
157-English (international AltGr dead keys):altgr-intl
158-English (layout toggle on multiply/divide key):olpc2
159-English (left handed Dvorak):dvorak-l
160-English (programmer Dvorak):dvp
161-English (right handed Dvorak):dvorak-r
162-Russian (US, phonetic):rus
163-Serbo-Croatian (US):hbs
164-#Esperanto:epo
165-Esperanto (displaced semicolon and quote, obsolete):legacy
166-#Estonian:ee
167-Estonian (Dvorak):dvorak
168-Estonian (US keyboard with Estonian letters):us
169-Estonian (eliminate dead keys):nodeadkeys
170-#Faroese:fo
171-Faroese (eliminate dead keys):nodeadkeys
172-#Filipino:ph
173-Filipino (Capewell-Dvorak Baybayin):capewell-dvorak-bay
174-Filipino (Capewell-Dvorak Latin):capewell-dvorak
175-Filipino (Capewell-QWERF 2006 Baybayin):capewell-qwerf2k6-bay
176-Filipino (Capewell-QWERF 2006 Latin):capewell-qwerf2k6
177-Filipino (Colemak Baybayin):colemak-bay
178-Filipino (Colemak Latin):colemak
179-Filipino (Dvorak Baybayin):dvorak-bay
180-Filipino (Dvorak Latin):dvorak
181-Filipino (QWERTY Baybayin):qwerty-bay
182-#Finnish:fi
183-Finnish (Macintosh):mac
184-Finnish (classic):classic
185-Finnish (classic, eliminate dead keys):nodeadkeys
186-Northern Saami (Finland):smi
187-#French (Canada):ca
188-Canadian Multilingual (first part):multi
189-Canadian Multilingual (second part):multi-2gr
190-Canadian Multilingual:multix
191-English (Canada):eng
192-French (Canada, Dvorak):fr-dvorak
193-French (Canada, legacy):fr-legacy
194-Inuktitut:ike
195-#French (Democratic Republic of the Congo):cd
196-#French (Guinea):gn
197-#French:fr
198-French (Bepo, ergonomic, Dvorak way):bepo
199-French (Bepo, ergonomic, Dvorak way, latin-9 only):bepo_latin9
200-French (Breton):bre
201-French (Dvorak):dvorak
202-French (Macintosh):mac
203-French (Sun dead keys):sundeadkeys
204-French (alternative):oss
205-French (alternative, Sun dead keys):oss_sundeadkeys
206-French (alternative, eliminate dead keys):oss_nodeadkeys
207-French (alternative, latin-9 only):oss_latin9
208-French (eliminate dead keys):nodeadkeys
209-French (legacy, alternative):latin9
210-French (legacy, alternative, Sun dead keys):latin9_sundeadkeys
211-French (legacy, alternative, eliminate dead keys):latin9_nodeadkeys
212-Georgian (France, AZERTY Tskapo):geo
213-Occitan:oci
214-#Georgian:ge
215-Georgian (MESS):mess
216-Georgian (ergonomic):ergonomic
217-Ossetian (Georgia):os
218-Russian (Georgia):ru
219-#German (Austria):at
220-German (Austria, Macintosh):mac
221-German (Austria, Sun dead keys):sundeadkeys
222-German (Austria, eliminate dead keys):nodeadkeys
223-#German (Switzerland):ch
224-French (Switzerland):fr
225-French (Switzerland, Macintosh):fr_mac
226-French (Switzerland, Sun dead keys):fr_sundeadkeys
227-French (Switzerland, eliminate dead keys):fr_nodeadkeys
228-German (Switzerland, Macintosh):de_mac
229-German (Switzerland, Sun dead keys):de_sundeadkeys
230-German (Switzerland, eliminate dead keys):de_nodeadkeys
231-German (Switzerland, legacy):legacy
232-#German:de
233-German (Dvorak):dvorak
234-German (Macintosh):mac
235-German (Macintosh, eliminate dead keys):mac_nodeadkeys
236-German (Neo 2):neo
237-German (Sun dead keys):sundeadkeys
238-German (dead acute):deadacute
239-German (dead grave acute):deadgraveacute
240-German (eliminate dead keys):nodeadkeys
241-Lower Sorbian (qwertz):dsb_qwertz
242-Lower Sorbian:dsb
243-Romanian (Germany):ro
244-Romanian (Germany, eliminate dead keys):ro_nodeadkeys
245-Russian (Germany, phonetic):ru
246-#Greek:gr
247-Greek (eliminate dead keys):nodeadkeys
248-Greek (extended):extended
249-Greek (polytonic):polytonic
250-Greek (simple):simple
251-#Hebrew:il
252-Hebrew (Biblical, Tiro):biblical
253-Hebrew (lyx):lyx
254-Hebrew (phonetic):phonetic
255-#Hungarian:hu
256-Hungarian (101/qwerty/comma/dead keys):101_qwerty_comma_dead
257-Hungarian (101/qwerty/comma/eliminate dead keys):101_qwerty_comma_nodead
258-Hungarian (101/qwerty/dot/dead keys):101_qwerty_dot_dead
259-Hungarian (101/qwerty/dot/eliminate dead keys):101_qwerty_dot_nodead
260-Hungarian (101/qwertz/comma/dead keys):101_qwertz_comma_dead
261-Hungarian (101/qwertz/comma/eliminate dead keys):101_qwertz_comma_nodead
262-Hungarian (101/qwertz/dot/dead keys):101_qwertz_dot_dead
263-Hungarian (101/qwertz/dot/eliminate dead keys):101_qwertz_dot_nodead
264-Hungarian (102/qwerty/comma/dead keys):102_qwerty_comma_dead
265-Hungarian (102/qwerty/comma/eliminate dead keys):102_qwerty_comma_nodead
266-Hungarian (102/qwerty/dot/dead keys):102_qwerty_dot_dead
267-Hungarian (102/qwerty/dot/eliminate dead keys):102_qwerty_dot_nodead
268-Hungarian (102/qwertz/comma/dead keys):102_qwertz_comma_dead
269-Hungarian (102/qwertz/comma/eliminate dead keys):102_qwertz_comma_nodead
270-Hungarian (102/qwertz/dot/dead keys):102_qwertz_dot_dead
271-Hungarian (102/qwertz/dot/eliminate dead keys):102_qwertz_dot_nodead
272-Hungarian (eliminate dead keys):nodeadkeys
273-Hungarian (qwerty):qwerty
274-Hungarian (standard):standard
275-#Icelandic:is
276-Icelandic (Dvorak):dvorak
277-Icelandic (Macintosh):mac
278-Icelandic (Sun dead keys):Sundeadkeys
279-Icelandic (eliminate dead keys):nodeadkeys
280-#Indian:in
281-Bengali (India):ben
282-Bengali (India, Baishakhi Inscript):ben_inscript
283-Bengali (India, Baishakhi):ben_baishakhi
284-Bengali (India, Bornona):ben_bornona
285-Bengali (India, Probhat):ben_probhat
286-Bengali (India, Uni Gitanjali):ben_gitanjali
287-English (India, with RupeeSign):eng
288-Gujarati:guj
289-Hindi (Bolnagri):bolnagri
290-Hindi (Wx):hin-wx
291-Kannada:kan
292-Malayalam (Lalitha):mal_lalitha
293-Malayalam (enhanced Inscript with Rupee Sign):mal_enhanced
294-Malayalam:mal
295-Oriya:ori
296-Punjabi (Gurmukhi Jhelum):jhelum
297-Punjabi (Gurmukhi):guru
298-Tamil (TAB typewriter):tam_TAB
299-Tamil (TSCII typewriter):tam_TSCII
300-Tamil (Unicode):tam_unicode
301-Tamil (keyboard with numerals):tam_keyboard_with_numerals
302-Tamil:tam
303-Telugu:tel
304-Urdu (WinKeys):urd-winkeys
305-Urdu (alternative phonetic):urd-phonetic3
306-Urdu (phonetic):urd-phonetic
307-#Iraqi:iq
308-Kurdish (Iraq, Arabic-Latin):ku_ara
309-Kurdish (Iraq, F):ku_f
310-Kurdish (Iraq, Latin Alt-Q):ku_alt
311-Kurdish (Iraq, Latin Q):ku
312-#Irish:ie
313-CloGaelach:CloGaelach
314-Irish (UnicodeExpert):UnicodeExpert
315-Ogham (IS434):ogam_is434
316-Ogham:ogam
317-#Italian:it
318-Georgian (Italy):geo
319-Italian (Macintosh):mac
320-Italian (US keyboard with Italian letters):us
321-Italian (eliminate dead keys):nodeadkeys
322-#Japanese (PC-98xx Series):nec_vndr/jp
323-#Japanese:jp
324-Japanese (Kana 86):kana86
325-Japanese (Kana):kana
326-Japanese (Macintosh):mac
327-Japanese (OADG 109A):OADG109A
328-#Kazakh:kz
329-Kazakh (with Russian):kazrus
330-Russian (Kazakhstan, with Kazakh):ruskaz
331-#Khmer (Cambodia):kh
332-#Korean:kr
333-Korean (101/104 key compatible):kr104
334-#Kyrgyz:kg
335-Kyrgyz (phonetic):phonetic
336-#Lao:la
337-Lao (STEA proposed standard layout):stea
338-#Latvian:lv
339-Latvian (F variant):fkey
340-Latvian (adapted):adapted
341-Latvian (apostrophe variant):apostrophe
342-Latvian (ergonomic, ŪGJRMV):ergonomic
343-Latvian (modern):modern
344-Latvian (tilde variant):tilde
345-#Lithuanian:lt
346-Lithuanian (IBM LST 1205-92):ibm
347-Lithuanian (LEKP):lekp
348-Lithuanian (LEKPa):lekpa
349-Lithuanian (US keyboard with Lithuanian letters):us
350-Lithuanian (standard):std
351-#Macedonian:mk
352-Macedonian (eliminate dead keys):nodeadkeys
353-#Maltese:mt
354-Maltese (with US layout):us
355-#Maori:mao
356-#Mongolian:mn
357-#Montenegrin:me
358-Montenegrin (Cyrillic with guillemets):cyrillicalternatequotes
359-Montenegrin (Cyrillic):cyrillic
360-Montenegrin (Cyrillic, Z and ZHE swapped):cyrillicyz
361-Montenegrin (Latin Unicode qwerty):latinunicodeyz
362-Montenegrin (Latin Unicode):latinunicode
363-Montenegrin (Latin qwerty):latinyz
364-Montenegrin (Latin with guillemets):latinalternatequotes
365-#Nepali:np
366-#Norwegian:no
367-Northern Saami (Norway):smi
368-Northern Saami (Norway, eliminate dead keys):smi_nodeadkeys
369-Norwegian (Dvorak):dvorak
370-Norwegian (Macintosh):mac
371-Norwegian (Macintosh, eliminate dead keys):mac_nodeadkeys
372-Norwegian (eliminate dead keys):nodeadkeys
373-#Persian:ir
374-Kurdish (Iran, Arabic-Latin):ku_ara
375-Kurdish (Iran, F):ku_f
376-Kurdish (Iran, Latin Alt-Q):ku_alt
377-Kurdish (Iran, Latin Q):ku
378-Persian (with Persian Keypad):pes_keypad
379-#Polish:pl
380-Kashubian:csb
381-Polish (Dvorak):dvorak
382-Polish (Dvorak, Polish quotes on key 1):dvorak_altquotes
383-Polish (Dvorak, Polish quotes on quotemark key):dvorak_quotes
384-Polish (programmer Dvorak):dvp
385-Polish (qwertz):qwertz
386-Russian (Poland, phonetic Dvorak):ru_phonetic_dvorak
387-#Portuguese (Brazil):br
388-Portuguese (Brazil, Dvorak):dvorak
389-Portuguese (Brazil, eliminate dead keys):nodeadkeys
390-Portuguese (Brazil, nativo for Esperanto):nativo-epo
391-Portuguese (Brazil, nativo for USA keyboards):nativo-us
392-Portuguese (Brazil, nativo):nativo
393-#Portuguese:pt
394-Esperanto (Portugal, Nativo):nativo-epo
395-Portuguese (Macintosh):mac
396-Portuguese (Macintosh, Sun dead keys):mac_sundeadkeys
397-Portuguese (Macintosh, eliminate dead keys):mac_nodeadkeys
398-Portuguese (Nativo for USA keyboards):nativo-us
399-Portuguese (Nativo):nativo
400-Portuguese (Sun dead keys):sundeadkeys
401-Portuguese (eliminate dead keys):nodeadkeys
402-#Romanian:ro
403-Romanian (WinKeys):winkeys
404-Romanian (cedilla):cedilla
405-Romanian (standard cedilla):std_cedilla
406-Romanian (standard):std
407-#Russian:ru
408-Bashkirian:bak
409-Chuvash (Latin):cv_latin
410-Chuvash:cv
411-Kalmyk:xal
412-Komi:kom
413-Mari:chm
414-Ossetian (WinKeys):os_winkeys
415-Ossetian (legacy):os_legacy
416-Russian (DOS):dos
417-Russian (legacy):legacy
418-Russian (phonetic WinKeys):phonetic_winkeys
419-Russian (phonetic):phonetic
420-Russian (typewriter):typewriter
421-Russian (typewriter, legacy):typewriter-legacy
422-Serbian (Russia):srp
423-Tatar:tt
424-Udmurt:udm
425-Yakut:sah
426-#Serbian (Cyrillic):rs
427-Pannonian Rusyn (homophonic):rue
428-Serbian (Cyrillic with guillemets):alternatequotes
429-Serbian (Cyrillic, Z and ZHE swapped):yz
430-Serbian (Latin Unicode qwerty):latinunicodeyz
431-Serbian (Latin Unicode):latinunicode
432-Serbian (Latin qwerty):latinyz
433-Serbian (Latin with guillemets):latinalternatequotes
434-Serbian (Latin):latin
435-#Sinhala (phonetic):lk
436-Tamil (Sri Lanka, TAB Typewriter):tam_TAB
437-Tamil (Sri Lanka, Unicode):tam_unicode
438-#Slovak:sk
439-Slovak (extended Backslash):bksl
440-Slovak (qwerty):qwerty
441-Slovak (qwerty, extended Backslash):qwerty_bksl
442-#Slovenian:si
443-Slovenian (US keyboard with Slovenian letters):us
444-Slovenian (use guillemets for quotes):alternatequotes
445-#Spanish (Latin American):latam
446-Spanish (Latin American, Sun dead keys):sundeadkeys
447-Spanish (Latin American, eliminate dead keys):nodeadkeys
448-Spanish (Latin American, include dead tilde):deadtilde
449-#Spanish:es
450-Asturian (Spain, with bottom-dot H and bottom-dot L):ast
451-Catalan (Spain, with middle-dot L):cat
452-Spanish (Dvorak):dvorak
453-Spanish (Macintosh):mac
454-Spanish (Sun dead keys):sundeadkeys
455-Spanish (eliminate dead keys):nodeadkeys
456-Spanish (include dead tilde):deadtilde
457-#Swahili (Kenya):ke
458-Kikuyu:kik
459-#Swahili (Tanzania):tz
460-#Swedish:se
461-Northern Saami (Sweden):smi
462-Russian (Sweden, phonetic):rus
463-Russian (Sweden, phonetic, eliminate dead keys):rus_nodeadkeys
464-Swedish (Dvorak):dvorak
465-Swedish (Macintosh):mac
466-Swedish (Svdvorak):svdvorak
467-Swedish (eliminate dead keys):nodeadkeys
468-Swedish Sign Language:swl
469-#Taiwanese:tw
470-Saisiyat (Taiwan):saisiyat
471-Taiwanese (indigenous):indigenous
472-#Tajik:tj
473-Tajik (legacy):legacy
474-#Thai:th
475-Thai (Pattachote):pat
476-Thai (TIS-820.2538):tis
477-#Tswana:bw
478-#Turkish:tr
479-Crimean Tatar (Turkish Alt-Q):crh_alt
480-Crimean Tatar (Turkish F):crh_f
481-Crimean Tatar (Turkish Q):crh
482-Kurdish (Turkey, F):ku_f
483-Kurdish (Turkey, Latin Alt-Q):ku_alt
484-Kurdish (Turkey, Latin Q):ku
485-Turkish (Alt-Q):alt
486-Turkish (F):f
487-Turkish (Sun dead keys):sundeadkeys
488-Turkish (international with dead keys):intl
489-#Turkmen:tm
490-Turkmen (Alt-Q):alt
491-#Ukrainian:ua
492-Russian (Ukraine, standard RSTU):rstu_ru
493-Ukrainian (WinKeys):winkeys
494-Ukrainian (homophonic):homophonic
495-Ukrainian (legacy):legacy
496-Ukrainian (phonetic):phonetic
497-Ukrainian (standard RSTU):rstu
498-Ukrainian (typewriter):typewriter
499-#Urdu (Pakistan):pk
500-Arabic (Pakistan):ara
501-Sindhi:snd
502-Urdu (Pakistan, CRULP):urd-crulp
503-Urdu (Pakistan, NLA):urd-nla
504-#Uzbek:uz
505-Uzbek (Latin):latin
506-#Vietnamese:vn
507-#Wolof:sn
508
509=== modified file 'debian/control'
510--- debian/control 2014-01-09 23:07:40 +0000
511+++ debian/control 2016-04-20 22:56:03 +0000
512@@ -8,7 +8,7 @@
513
514 Package: switchboard-plug-keyboard
515 Architecture: any
516-Depends: ${shlibs:Depends}, ${misc:Depends}
517+Depends: ${shlibs:Depends}, ${misc:Depends}, xkb-data, xkb-data-i18n
518 Enhances: switchboard
519 Description: Switchboard plug for keyboard settings
520 This plug can be used to change several keyboard settings, for example the delay and speed of the key repetition, or the cursor blinking speed. You can change your keyboard layout, and use multiple layouts at the same time. Keyboard shortcuts are also part of this plug.
521@@ -20,4 +20,4 @@
522 Depends: switchboard-plug-keyboard (= ${binary:Version}), ${misc:Depends}
523 Enhances: switchboard-plug-keyboard
524 Description: Switchboard plug for keyboard settings (debugging symbols)
525- This package contains debugging symbols for switchboard-plug-keyboard.
526\ No newline at end of file
527+ This package contains debugging symbols for switchboard-plug-keyboard.
528
529=== modified file 'src/Pages/Layout/add_layout.vala'
530--- src/Pages/Layout/add_layout.vala 2015-10-26 23:56:54 +0000
531+++ src/Pages/Layout/add_layout.vala 2016-04-20 22:56:03 +0000
532@@ -3,7 +3,7 @@
533 // pop over widget to add a new keyboard layout
534 class AddLayout : Gtk.Popover
535 {
536- public signal void layout_added (int language, int layout = 0);
537+ public signal void layout_added (string language, string layout);
538
539 public AddLayout()
540 {
541@@ -26,32 +26,33 @@
542 grid.attach (label_layout, 0, 1, 1, 1);
543
544 // list stores
545- var lang_list = create_list_store (handler.get_layouts ());
546- var layout_list = create_list_store (handler.get_variants (0));
547-
548- // combo boxes to select language and layout
549+ var lang_list = create_list_store (handler.languages);
550 var language_box = new Gtk.ComboBox.with_model (lang_list);
551+ language_box.id_column = 0;
552+ language_box.active = 0;
553+
554+ var layout_list = create_list_store (handler.get_variants_for_language (language_box.active_id));
555 var layout_box = new Gtk.ComboBox.with_model (layout_list);
556+ layout_box.id_column = 0;
557+ layout_box.active = 0;
558
559 var renderer = new Gtk.CellRendererText ();
560
561 language_box.pack_start (renderer, true);
562- language_box.add_attribute (renderer, "text", 0);
563+ language_box.add_attribute (renderer, "text", 1);
564 language_box.active = 0;
565
566 layout_box.pack_start (renderer, true);
567- layout_box.add_attribute (renderer, "text", 0);
568+ layout_box.add_attribute (renderer, "text", 1);
569 layout_box.active = 0;
570
571 grid.attach (language_box, 1, 0, 1, 1);
572 grid.attach (layout_box, 1, 1, 1, 1);
573
574- language_box.changed.connect( () =>
575- {
576- var active = language_box.active;
577- layout_box.model = create_list_store (handler.get_variants (active));
578+ language_box.changed.connect(() => {
579+ layout_box.model = create_list_store (handler.get_variants_for_language (language_box.active_id));
580 layout_box.active = 0;
581- } );
582+ });
583
584 // add buttons
585 var button_box = new Gtk.ButtonBox (Gtk.Orientation.HORIZONTAL);
586@@ -70,11 +71,42 @@
587 this.hide ();
588 } );
589
590- button_add.clicked.connect (() =>
591- {
592+ button_add.clicked.connect (() => {
593 this.hide ();
594- layout_added (language_box.active, layout_box.active);
595+ layout_added (language_box.active_id, layout_box.active_id);
596 } );
597 }
598+
599+ // creates a list store from a string vector
600+ Gtk.ListStore create_list_store (HashTable<string, string> values)
601+ {
602+ Gtk.ListStore list_store = new Gtk.ListStore (2, typeof (string), typeof (string));
603+ list_store.set_default_sort_func (compare_func);
604+ list_store.set_sort_column_id (Gtk.TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, Gtk.SortType.ASCENDING);
605+
606+ values.foreach ((key, val) => {
607+ Gtk.TreeIter iter;
608+ list_store.append (out iter);
609+ list_store.set (iter, 0, key, 1, val);
610+ });
611+
612+ return list_store;
613+ }
614+
615+ int compare_func (Gtk.TreeModel model, Gtk.TreeIter a, Gtk.TreeIter b) {
616+ Value val_a;
617+ Value val_b;
618+ model.get_value (a, 1, out val_a);
619+ model.get_value (b, 1, out val_b);
620+ if (((string) val_a) == _("Default")) {
621+ return -1;
622+ }
623+
624+ if (((string) val_b) == _("Default")) {
625+ return 1;
626+ }
627+
628+ return ((string) val_a).collate ((string) val_b);
629+ }
630 }
631 }
632
633=== modified file 'src/Pages/Layout/display.vala'
634--- src/Pages/Layout/display.vala 2015-10-27 00:02:07 +0000
635+++ src/Pages/Layout/display.vala 2016-04-20 22:56:03 +0000
636@@ -160,21 +160,15 @@
637 }
638
639 Gtk.ListStore build_store () {
640- Gtk.ListStore list_store = new Gtk.ListStore (3, typeof (string), typeof(uint), typeof(uint));
641+ Gtk.ListStore list_store = new Gtk.ListStore (2, typeof (string), typeof(string));
642 Gtk.TreeIter iter;
643-
644- uint layout = 0, variant = 0;
645-
646 for (uint i = 0; i < settings.layouts.length; i++) {
647 string item = settings.layouts.get_layout (i).name;
648- handler.from_code (item, out layout, out variant);
649- item = handler.get_name (layout, variant);
650-
651 list_store.append (out iter);
652- list_store.set (iter, 0, item);
653- list_store.set (iter, 1, layout);
654- list_store.set (iter, 2, variant);
655+ list_store.set (iter, 0, handler.get_display_name (item));
656+ list_store.set (iter, 1, item);
657 }
658+
659 return list_store;
660 }
661
662@@ -193,12 +187,7 @@
663 void add_item (LayoutPage.AddLayout pop)
664 {
665 pop.layout_added.connect ((layout, variant) => {
666-
667- var name = handler.get_name (layout, variant);
668- var code = handler.get_code (layout, variant);
669-
670- // TODO variant
671- settings.layouts.add_layout (new Layout.XKB (code, ""));
672+ settings.layouts.add_layout (new Layout.XKB (layout, variant));
673 rebuild_list ();
674 });
675 }
676
677=== modified file 'src/Pages/Layout/handler.vala'
678--- src/Pages/Layout/handler.vala 2014-08-10 19:29:15 +0000
679+++ src/Pages/Layout/handler.vala 2016-04-20 22:56:03 +0000
680@@ -1,147 +1,89 @@
681-namespace Pantheon.Keyboard.LayoutPage
682-{
683- // class that parses the layout file, provides lists of languages and
684- // variants, and converts between layout names and their gsettings codes
685- class LayoutHandler : GLib.Object
686- {
687- InternalLayout[] layouts;
688-
689- private string[] names;
690- private string[] codes;
691-
692- public LayoutHandler ()
693- {
694- foreach (var l in parse_layouts ())
695- {
696- var parts = l.split(":", 2);
697-
698- names += parts[0];
699- codes += parts[1];
700-
701- layouts += new InternalLayout (parse_variants (l));
702- }
703- }
704-
705- public string[] get_layouts () {
706- return names;
707- }
708-
709- public string[] get_variants (uint index) {
710- return layouts[index].names;
711- }
712-
713- public string get_code (uint l, uint v)
714- {
715- if (v != 0)
716- return codes[l] + "+" + layouts[l].codes[v];
717- return codes[l];
718- }
719-
720- public string get_name (uint l, uint v)
721- {
722- if (v != 0)
723- return layouts[l].names[v];
724- return names[l];
725- }
726-
727- public bool from_code (string code, out uint l, out uint v)
728- {
729- var parts = code.split("+", 2);
730-
731- l = v = 0;
732-
733- if (parts[0] == null) return false;
734-
735- while (codes[l] != parts[0])
736- if (l++ > codes.length)
737- return false;
738-
739- if (parts[1] == null) return true;
740-
741- while (layouts[l].codes[v] != parts[1])
742- if (v++ > layouts[l].codes.length)
743- return false;
744-
745- return true;
746- }
747-
748- // private class that contains the variants of one language
749- private class InternalLayout : GLib.Object {
750- public string[] names;
751- public string[] codes;
752-
753- public InternalLayout (string[] variants )
754- {
755- names += _("Default");
756- codes += "";
757-
758- foreach (var v in variants)
759- {
760- var parts = v.split(":", 2);
761-
762- names += parts[0];
763- codes += parts[1];
764- }
765- }
766- }
767-
768- // private functions to parse the files
769- private string[]? parse_layouts ()
770- {
771- string[] return_val = null;
772-
773- var file = File.new_for_path (Build.PKGDATADIR + "/layouts.txt");
774-
775- if (!file.query_exists ()) {
776- warning ("File '%s' doesn't exist.\n", file.get_path ());
777- return return_val;
778- }
779-
780- try {
781- var dis = new DataInputStream (file.read ());
782-
783- string line;
784-
785- while ((line = dis.read_line (null)) != null)
786- if( "#" in line )
787- return_val += line.replace ("#", "");
788- } catch (Error e) {
789- error ("%s", e.message);
790- }
791-
792- return return_val;
793- }
794-
795- private string[]? parse_variants (string language)
796- {
797- string[] return_val = null;
798-
799- var file = File.new_for_path (Build.PKGDATADIR + "/layouts.txt");
800-
801- if (!file.query_exists ()) {
802- warning ("File '%s' doesn't exist.\n", file.get_path ());
803- return null;
804- }
805-
806- try {
807- var dis = new DataInputStream (file.read ());
808-
809- string line;
810-
811- while ((line = dis.read_line (null)) != null) {
812- if (line == "#" + language) {
813- while ((line = dis.read_line (null)) != null) {
814- if( "#" in line ) break;
815- return_val += line;
816- }
817- break;
818- }
819- }
820- } catch (Error e) {
821- error ("%s", e.message);
822- }
823-
824- return return_val;
825- }
826- }
827-}
828\ No newline at end of file
829+public class Pantheon.Keyboard.LayoutPage.LayoutHandler : GLib.Object {
830+ public HashTable<string, string> languages { public get; private set; }
831+
832+ public LayoutHandler () {
833+ parse_layouts ();
834+ }
835+
836+ construct {
837+ languages = new HashTable<string, string> (str_hash, str_equal);
838+ }
839+
840+ private void parse_layouts () {
841+ var file = File.new_for_path ("/usr/share/X11/xkb/rules/evdev.lst");
842+
843+ if (!file.query_exists ()) {
844+ critical ("File '%s' doesn't exist.", file.get_path ());
845+ return;
846+ }
847+
848+ try {
849+ var dis = new DataInputStream (file.read ());
850+ string line;
851+ bool layout_found = false;
852+ while ((line = dis.read_line (null)) != null) {
853+ if (layout_found) {
854+ if ("!" in line || line == "") {
855+ break;
856+ }
857+
858+ var parts = line.chug ().split (" ", 2);
859+ languages.set (parts[0], dgettext ("xkeyboard-config", parts[1].chug ()));
860+ } else {
861+ if ("!" in line && "layout" in line) {
862+ layout_found = true;
863+ }
864+ }
865+ }
866+ } catch (Error e) {
867+ error (e.message);
868+ }
869+ }
870+
871+ public HashTable<string, string> get_variants_for_language (string language) {
872+ var returned_table = new HashTable<string, string> (str_hash, str_equal);
873+ returned_table.set ("", _("Default"));
874+ var file = File.new_for_path ("/usr/share/X11/xkb/rules/evdev.lst");
875+
876+ if (!file.query_exists ()) {
877+ critical ("File '%s' doesn't exist.", file.get_path ());
878+ return returned_table;
879+ }
880+
881+ try {
882+ var dis = new DataInputStream (file.read ());
883+ string line;
884+ bool variant_found = false;
885+ while ((line = dis.read_line (null)) != null) {
886+ if (variant_found) {
887+ if ("!" in line || line == "") {
888+ break;
889+ }
890+
891+ var parts = line.chug ().split (" ", 2);
892+ var subparts = parts[1].chug ().split (":", 2);
893+ if (subparts[0] == language) {
894+ returned_table.set (parts[0], dgettext ("xkeyboard-config", subparts[1].chug ()));
895+ }
896+ } else {
897+ if ("!" in line && "variant" in line) {
898+ variant_found = true;
899+ }
900+ }
901+ }
902+ } catch (Error e) {
903+ error (e.message);
904+ }
905+
906+ return returned_table;
907+ }
908+
909+ public string get_display_name (string variant) {
910+ if ("+" in variant) {
911+ var parts = variant.split ("+", 2);
912+ return get_variants_for_language (parts[0]).get (parts[1]);
913+ } else {
914+ return languages.get (variant);
915+ }
916+ }
917+}
918
919=== modified file 'src/Pages/layout.vala'
920--- src/Pages/layout.vala 2015-10-22 15:32:43 +0000
921+++ src/Pages/layout.vala 2016-04-20 22:56:03 +0000
922@@ -60,18 +60,4 @@
923 this.attach (entry_test, 4, 3, 3, 1);
924 }
925 }
926-
927- // creates a list store from a string vector
928- Gtk.ListStore create_list_store (string[] strv)
929- {
930- Gtk.ListStore list_store = new Gtk.ListStore (1, typeof (string));
931- Gtk.TreeIter iter;
932-
933- foreach (string item in strv) {
934- list_store.append (out iter);
935- list_store.set (iter, 0, item);
936- }
937-
938- return list_store;
939- }
940 }

Subscribers

People subscribed via source and target branches

to all changes: