diff --git a/font-list.csv b/font-list.csv
new file mode 100644
index 0000000..5834028
--- /dev/null
+++ b/font-list.csv
@@ -0,0 +1,377 @@
+FONT;DESCRIPTION
+Agafari-12;
+Agafari-14;
+Agafari-16;
+aply16;
+cp850-8x8;
+cp850-8x14;
+cp850-8x16;
+cp865-8x8;
+cp865-8x14;
+cp865-8x16;
+cp866-8x8;
+cp866-8x14;
+cp866-8x16;
+cp1250;
+cyr-sun16;Fonts that support Cyrillic characters
+Cyr_a8x8;Fonts that support Cyrillic characters
+Cyr_a8x14;Fonts that support Cyrillic characters
+Cyr_a8x16;Fonts that support Cyrillic characters
+default8x9;
+default8x16;
+drdos8x6;
+drdos8x8;
+drdos8x14;
+drdos8x16;
+eurlatgr;
+GohaClassic-12;
+GohaClassic-14;
+GohaClassic-16;
+Goha-12;
+Goha-14;
+Goha-16;
+gr737a-8x8;
+gr737a-9x14;
+gr737a-9x16;
+gr737b-8x11;
+gr737b-9x16-medieval;
+gr737c-8x6;
+gr737c-8x7;
+gr737c-8x8;
+gr737c-8x14;
+gr737c-8x16;
+gr737d-8x16;
+gr928a-8x14;
+gr928a-8x16;
+gr928b-8x14;
+gr928b-8x16;
+gr928-8x16-thin;
+gr928-9x14;
+gr928-9x16;
+greek-polytonic;
+iso01-12x22;
+iso02-12x22;
+iso07u-16;
+koi8r.8x8;Fonts that support Cyrillic characters
+koi8u_8x8;Fonts that support Cyrillic characters
+koi8u_8x14;Fonts that support Cyrillic characters
+koi8u_8x16;Fonts that support Cyrillic characters
+koi8-14;Fonts that support Cyrillic characters
+lat0-08;
+lat0-10;
+lat0-12;
+lat0-14;
+lat0-16;
+lat0-sun16;
+lat1-08;
+lat1-10;
+lat1-12;
+lat1-14;
+lat1-16;
+lat2a-16;
+lat2-08;
+lat2-10;
+lat2-12;
+lat2-14;
+lat2-16;
+lat2-sun16;
+Lat2-Terminus16;
+lat4a-08;
+lat4a-10;
+lat4a-12;
+lat4a-14;
+lat4a-16+;
+lat4a-16;
+lat4a-19;
+lat4-08;
+lat4-10;
+lat4-12;
+lat4-14;
+lat4-16+;
+lat4-16;
+lat4-19;
+lat5-12;
+lat5-14;
+lat5-16;
+lat7a-14;
+lat7a-16;
+lat7-14;
+lat9u-08;
+lat9u-10;
+lat9u-12;
+lat9u-14;
+lat9u-16;
+lat9v-08;
+lat9v-10;
+lat9v-12;
+lat9v-14;
+lat9v-16;
+lat9w-08;
+lat9w-10;
+lat9w-12;
+lat9w-14;
+lat9w-16;
+lat9-08;
+lat9-10;
+lat9-12;
+lat9-14;
+lat9-16;
+LatArCyrHeb-08;Fonts that support Latin Arabic Cyrillic Hebrew characters
+LatArCyrHeb-14;Fonts that support Latin Arabic Cyrillic Hebrew characters
+LatArCyrHeb-16+;Fonts that support Latin Arabic Cyrillic Hebrew characters
+LatArCyrHeb-16;Fonts that support Latin Arabic Cyrillic Hebrew characters
+LatArCyrHeb-19;Fonts that support Latin Arabic Cyrillic Hebrew characters
+latarcyrheb-sun16;Fonts that support Latin Arabic Cyrillic Hebrew characters
+latarcyrheb-sun32;Fonts that support Latin Arabic Cyrillic Hebrew characters
+LatGrkCyr-8x16;Fonts that support Latin Greek Cyrillic characters
+LatGrkCyr-12x22;Fonts that support Latin Greek Cyrillic characters
+LatKaCyrHeb-14;
+pancyrillic.f16;
+ruscii_8x8;Fonts that support Cyrillic characters
+ruscii_8x16;Fonts that support Cyrillic characters
+solar24x32;
+sun12x22;
+tcvn8x16;
+ter-112n;Terminus fonts that support Cyrillic characters
+ter-114b;
+ter-114n;
+ter-116b;
+ter-116n;
+ter-118b;
+ter-118n;
+ter-120b;
+ter-120n;
+ter-122b;
+ter-122n;
+ter-124b;
+ter-124n;
+ter-128b;
+ter-128n;
+ter-132b;
+ter-132n;
+ter-212n;
+ter-214b;
+ter-214n;
+ter-216b;
+ter-216n;
+ter-218b;
+ter-218n;
+ter-220b;
+ter-220n;
+ter-222b;
+ter-222n;
+ter-224b;
+ter-224n;
+ter-228b;
+ter-228n;
+ter-232b;
+ter-232n;
+ter-712n;
+ter-714b;
+ter-714n;
+ter-716b;
+ter-716n;
+ter-718b;
+ter-718n;
+ter-720b;
+ter-720n;
+ter-722b;
+ter-722n;
+ter-724b;
+ter-724n;
+ter-728b;
+ter-728n;
+ter-732b;
+ter-732n;
+ter-912n;
+ter-914b;
+ter-914n;
+ter-916b;
+ter-916n;
+ter-918b;
+ter-918n;
+ter-920b;
+ter-920n;
+ter-922b;
+ter-922n;
+ter-924b;
+ter-924n;
+ter-928b;
+ter-928n;
+ter-932b;
+ter-932n;
+ter-c12n;
+ter-c14b;
+ter-c14n;
+ter-c16b;
+ter-c16n;
+ter-c18b;
+ter-c18n;
+ter-c20b;
+ter-c20n;
+ter-c22b;
+ter-c22n;
+ter-c24b;
+ter-c24n;
+ter-c28b;
+ter-c28n;
+ter-c32b;
+ter-c32n;
+ter-d12n;
+ter-d14b;
+ter-d14n;
+ter-d16b;
+ter-d16n;
+ter-d18b;
+ter-d18n;
+ter-d20b;
+ter-d20n;
+ter-d22b;
+ter-d22n;
+ter-d24b;
+ter-d24n;
+ter-d28b;
+ter-d28n;
+ter-d32b;
+ter-d32n;
+ter-g12n;
+ter-g14b;
+ter-g14n;
+ter-g16b;
+ter-g16n;
+ter-g18b;
+ter-g18n;
+ter-g20b;
+ter-g20n;
+ter-g22b;
+ter-g22n;
+ter-g24b;
+ter-g24n;
+ter-g28b;
+ter-g28n;
+ter-g32b;
+ter-g32n;
+ter-h12n;
+ter-h14b;
+ter-h14n;
+ter-h16b;
+ter-h16n;
+ter-h18b;
+ter-h18n;
+ter-h20b;
+ter-h20n;
+ter-h22b;
+ter-h22n;
+ter-h24b;
+ter-h24n;
+ter-h28b;
+ter-h28n;
+ter-h32b;
+ter-h32n;
+ter-i12n;
+ter-i14b;
+ter-i14n;
+ter-i16b;
+ter-i16n;
+ter-i18b;
+ter-i18n;
+ter-i20b;
+ter-i20n;
+ter-i22b;
+ter-i22n;
+ter-i24b;
+ter-i24n;
+ter-i28b;
+ter-i28n;
+ter-i32b;
+ter-i32n;
+ter-k12n;
+ter-k14b;
+ter-k14n;
+ter-k16b;
+ter-k16n;
+ter-k18b;
+ter-k18n;
+ter-k20b;
+ter-k20n;
+ter-k22b;
+ter-k22n;
+ter-k24b;
+ter-k24n;
+ter-k28b;
+ter-k28n;
+ter-k32b;
+ter-k32n;
+ter-m12n;
+ter-m14b;
+ter-m14n;
+ter-m16b;
+ter-m16n;
+ter-m18b;
+ter-m18n;
+ter-m20b;
+ter-m20n;
+ter-m22b;
+ter-m22n;
+ter-m24b;
+ter-m24n;
+ter-m28b;
+ter-m28n;
+ter-m32b;
+ter-m32n;
+ter-p12n;
+ter-p14b;
+ter-p14n;
+ter-p16b;
+ter-p16n;
+ter-p18b;
+ter-p18n;
+ter-p20b;
+ter-p20n;
+ter-p22b;
+ter-p22n;
+ter-p24b;
+ter-p24n;
+ter-p28b;
+ter-p28n;
+ter-p32b;
+ter-p32n;
+ter-u12n;
+ter-u14b;
+ter-u14n;
+ter-u16b;
+ter-u16n;
+ter-u18b;
+ter-u18n;
+ter-u20b;
+ter-u20n;
+ter-u22b;
+ter-u22n;
+ter-u24b;
+ter-u24n;
+ter-u28b;
+ter-u28n;
+ter-u32b;
+ter-u32n;
+ter-v12n;
+ter-v14b;
+ter-v14n;
+ter-v16b;
+ter-v16n;
+ter-v18b;
+ter-v18n;
+ter-v20b;
+ter-v20n;
+ter-v22b;
+ter-v22n;
+ter-v24b;
+ter-v24n;
+ter-v28b;
+ter-v28n;
+ter-v32b;
+ter-v32n;
+UniCyrExt_8x16;
+UniCyr_8x8;
+UniCyr_8x14;
+UniCyr_8x16;
+viscii10-8x16;
\ No newline at end of file
diff --git a/gresource.xml b/gresource.xml
index 507d914..056455f 100644
--- a/gresource.xml
+++ b/gresource.xml
@@ -4,11 +4,14 @@
ubl-settings-keyboard.glade
ubl-settings-keyboard-layouts.glade
ubl-settings-keyboard-options.glade
+ ubl-settings-keyboard-keymaps.glade
+ ubl-settings-keyboard-font.glade
ubl-settings-keyboard.css
- layouts.csv
+ keymap-list.csv
+ font-list.csv
\ No newline at end of file
diff --git a/keymap-list.csv b/keymap-list.csv
new file mode 100644
index 0000000..ad2f730
--- /dev/null
+++ b/keymap-list.csv
@@ -0,0 +1,248 @@
+KEYMAP;GROUP;DESCRIPTION
+3l;;
+adnw;;
+amiga-de;amiga;
+amiga-us;amiga;
+ANSI-dvorak;;
+apple-a1048-sv;mac;
+apple-a1243-sv-fn-reverse;mac;
+apple-a1243-sv;mac;
+apple-internal-0x0253-sv-fn-reverse;mac;
+apple-internal-0x0253-sv;mac;
+applkey;;
+atari-de;atari;
+atari-se;atari;
+atari-uk-falcon;atari;
+atari-us;atari;
+azerty;;
+backspace;;
+bashkir;;
+be-latin1;;
+bg-cp855;;
+bg-cp1251;;
+bg_bds-cp1251;;
+bg_bds-utf8;;
+bg_pho-cp1251;;
+bg_pho-utf8;;
+bone;;
+br-abnt2;;
+br-abnt;;
+br-latin1-abnt2;;
+br-latin1-us;;
+bywin-cp1251;;
+by-cp1251;;
+by;;
+carpalx-full;;
+carpalx;;
+ca;;
+cf;;
+colemak;;
+croat;;
+ctrl;;
+cz-cp1250;;
+cz-lat2-prog;;
+cz-lat2;;
+cz-qwertz;;
+cz-us-qwertz;;
+cz;;
+defkeymap;;
+defkeymap_V1.0;;
+de-latin1-nodeadkeys;;
+de-latin1;;
+de-mobii;;
+de;;
+de_alt_UTF-8;;
+de_CH-latin1;;
+dk-latin1;;
+dk;;
+dvorak-ca-fr;;
+dvorak-de;;
+dvorak-es;;
+dvorak-fr;;
+dvorak-la;;
+dvorak-l;;
+dvorak-no;;
+dvorak-programmer;;
+dvorak-ru;;
+dvorak-r;;
+dvorak-sv-a1;;
+dvorak-sv-a5;;
+dvorak-ukp;;
+dvorak-uk;;
+dvorak;;
+emacs2;;
+emacs;;
+en;pine;
+es-cp850;;
+es-olpc;;
+es;;
+et-nodeadkeys;;
+et;;
+euro1;;
+euro2;;
+euro;;
+fa;qwerty;Persian ISIRI-2901 Unicode console. Toggled by Shift+AltGr key.
+fi;;
+fr-bepo-latin9;;
+fr-bepo;;
+fr-latin1;;
+fr-latin9;;
+fr-pc;;
+fr;;
+fr_CH-latin1;;
+fr_CH;;
+gr-pc;;
+gr;;
+hu101;;
+hu;;
+ie;;
+il-heb;;
+il-phonetic;;
+il;;
+is-latin1-us;;
+is-latin1;;
+it2;;
+it-ibm;;
+it;;
+jp106;;
+kazakh;;
+keypad;;
+koy;;
+kyrgyz;;
+ky_alt_sh-UTF-8;;
+la-latin1;;
+lt.baltic;;
+lt.l4;;
+lt;;
+lv-tilde;;
+lv;;
+mac-be;mac;
+mac-de-latin1-nodeadkeys;mac;
+mac-de-latin1;mac;
+mac-de_CH;mac;
+mac-dk-latin1;mac;
+mac-dvorak;mac;
+mac-es;mac;
+mac-euro2;mac;
+mac-euro;mac;
+mac-fi-latin1;mac;
+mac-fr-legacy;mac;
+mac-fr;mac;
+mac-fr_CH-latin1;mac;
+mac-it;mac;
+mac-no-latin1;mac;
+mac-pl;mac;
+mac-pt-latin1;mac;
+mac-se;mac;
+mac-template;mac;
+mac-uk;mac;
+mac-us;mac;
+mk0;;
+mk-cp1251;;
+mk-utf;;
+mk;;
+mod-dh-ansi-us-awing;;
+mod-dh-ansi-us-fatz-wide;;
+mod-dh-ansi-us-fatz;;
+mod-dh-ansi-us-wide;;
+mod-dh-ansi-us;;
+mod-dh-iso-uk-wide;;
+mod-dh-iso-uk;;
+mod-dh-iso-us-wide;;
+mod-dh-iso-us;;
+mod-dh-matrix-us;;
+neoqwertz;;
+neo;;
+nl2;;
+nl;;
+no-latin1;;
+no;;
+pc110;;
+pl1;;
+pl2;;
+pl3;;
+pl4;;
+pl;;
+pt-latin1;;
+pt-latin9;;
+pt-olpc;;
+ro;;
+ro_std;;
+ro_win;;
+ru1;qwerty;
+ru2;qwerty;
+ru3;qwerty;
+ru4;qwerty;
+ruwin_alt-CP1251;qwerty;
+ruwin_alt-KOI8-R;qwerty;
+ruwin_alt-UTF-8;qwerty;
+ruwin_alt_sh-UTF-8;qwerty;
+ruwin_cplk-CP1251;qwerty;
+ruwin_cplk-KOI8-R;qwerty;
+ruwin_cplk-UTF-8;qwerty;
+ruwin_ctrl-CP1251;qwerty;
+ruwin_ctrl-KOI8-R;qwerty;
+ruwin_ctrl-UTF-8;qwerty;
+ruwin_ct_sh-CP1251;qwerty;
+ruwin_ct_sh-KOI8-R;qwerty;
+ruwin_ct_sh-UTF-8;qwerty;
+ru-cp1251;qwerty;Russian CP1251 Cyrillic keyboard.map. "Cyrillic" mode is toggled by Right_Ctrl key and shifted by AltGr key.
+ru-ms;qwerty;
+ru-yawerty;qwerty;
+ru;qwerty;Only Russian UTF-8 keymap (GOST 19768-74) for a 102 key keyboard. Both Ctrl+Shift is used to change rus/lat.
+ru_win;qwerty;
+se-fi-ir209;;
+se-fi-lat6;;
+se-ir209;;
+se-lat6;;
+sg-latin1-lk450;;
+sg-latin1;;
+sg;;
+sk-prog-qwerty;;
+sk-prog-qwertz;;
+sk-qwerty;;
+sk-qwertz;;
+slovene;;
+sr-cy;;
+sr-latin;;
+sundvorak;sun;
+sunkeymap;sun;
+sunt4-es;sun;
+sunt4-fi-latin1;sun;
+sunt4-no-latin1;sun;
+sunt5-cz-us;sun;
+sunt5-de-latin1;sun;
+sunt5-es;sun;
+sunt5-fi-latin1;sun;
+sunt5-fr-latin1;sun;
+sunt5-ru;sun;
+sunt5-uk;sun;
+sunt5-us-cz;sun;
+sunt6-uk;sun;
+sun-pl-altgraph;sun;
+sun-pl;sun;
+sv-latin1;;
+tj_alt-UTF8;;
+tralt;;
+trf-fgGIod;;
+trf;;
+trq;;
+tr_f-latin5;;
+tr_q-latin5;;
+ttwin_alt-UTF-8;;
+ttwin_cplk-UTF-8;;
+ttwin_ctrl-UTF-8;;
+ttwin_ct_sh-UTF-8;;
+ua-cp1251;;
+ua-utf-ws;;
+ua-utf;;
+ua-ws;;
+ua;;
+uk;;
+unicode;;
+us1;;
+us-acentos;;
+us;;
+wangbe2;;
+wangbe;;
+windowkeys;;
\ No newline at end of file
diff --git a/locale/ubl-settings-keyboard-options.pot b/locale/ubl-settings-keyboard-options.pot
index 21d1ef8..96ca08d 100644
--- a/locale/ubl-settings-keyboard-options.pot
+++ b/locale/ubl-settings-keyboard-options.pot
@@ -422,4 +422,124 @@ msgid "Sun key compatibility"
msgstr ""
msgid "Ctrl+Alt+Backspace"
+msgstr ""
+
+msgid "Right Alt (while pressed)"
+msgstr ""
+
+msgid "Left Alt (while pressed)"
+msgstr ""
+
+msgid "Left Win (while pressed)"
+msgstr ""
+
+msgid "Right Win (while pressed)"
+msgstr ""
+
+msgid "Any Win (while pressed)"
+msgstr ""
+
+msgid "Menu (while pressed), Shift+Menu for Menu"
+msgstr ""
+
+msgid "Caps Lock (while pressed), Alt+Caps Lock for the original Caps Lock action"
+msgstr ""
+
+msgid "Right Ctrl (while pressed)"
+msgstr ""
+
+msgid "Right Alt"
+msgstr ""
+
+msgid "Left Alt"
+msgstr ""
+
+msgid "Caps Lock"
+msgstr ""
+
+msgid "Shift+Caps Lock"
+msgstr ""
+
+msgid "Caps Lock to first layout; Shift+Caps Lock to second layout"
+msgstr ""
+
+msgid "Left Win to first layout; Right Win/Menu to second layout"
+msgstr ""
+
+msgid "Left Ctrl to first layout; Right Ctrl to second layout"
+msgstr ""
+
+msgid "Alt+Caps Lock"
+msgstr ""
+
+msgid "Both Shifts together"
+msgstr ""
+
+msgid "Both Alts together"
+msgstr ""
+
+msgid "Both Alts together; AltGr alone chooses third level"
+msgstr ""
+
+msgid "Both Ctrls together"
+msgstr ""
+
+msgid "Ctrl+Shift"
+msgstr ""
+
+msgid "Left Ctrl+Left Shift"
+msgstr ""
+
+msgid "Right Ctrl+Right Shift"
+msgstr ""
+
+msgid "Alt+Ctrl"
+msgstr ""
+
+msgid "Alt+Shift"
+msgstr ""
+
+msgid "Left Alt+Left Shift"
+msgstr ""
+
+msgid "Right Alt+Right Shift"
+msgstr ""
+
+msgid "Menu"
+msgstr ""
+
+msgid "Left Win"
+msgstr ""
+
+msgid "Alt+Space"
+msgstr ""
+
+msgid "Win+Space"
+msgstr ""
+
+msgid "Ctrl+Space"
+msgstr ""
+
+msgid "Right Win"
+msgstr ""
+
+msgid "Left Shift"
+msgstr ""
+
+msgid "Right Shift"
+msgstr ""
+
+msgid "Left Ctrl"
+msgstr ""
+
+msgid "Right Ctrl"
+msgstr ""
+
+msgid "Scroll Lock"
+msgstr ""
+
+msgid "Ctrl+Left Win to first layout; Ctrl+Menu to second layout"
+msgstr ""
+
+msgid "Left Ctrl+Left Win"
msgstr ""
\ No newline at end of file
diff --git a/locale/ubl-settings-keyboard-options_ru.po b/locale/ubl-settings-keyboard-options_ru.po
index 1eba714..cd1775f 100644
--- a/locale/ubl-settings-keyboard-options_ru.po
+++ b/locale/ubl-settings-keyboard-options_ru.po
@@ -420,4 +420,98 @@ msgid "Sun key compatibility"
msgstr "Совместимость с клавишей Sun"
msgid "Ctrl+Alt+Backspace"
-msgstr "Ctrl+Alt+Backspac"
\ No newline at end of file
+msgstr "Ctrl+Alt+Backspac"
+
+msgid "Right Alt (while pressed)"
+msgstr "Правый Alt (удерживая нажатой)"
+
+msgid "Left Alt (while pressed)"
+msgstr "Левый Alt (удерживая нажатой)"
+
+msgid "Left Win (while pressed)"
+msgstr "Левая Win (удерживая нажатой)"
+
+msgid "Right Win (while pressed)"
+msgstr "Правая Win (удерживая нажатой)"
+
+msgid "Any Win (while pressed)"
+msgstr "Любая Win (удерживая нажатой)"
+
+msgid "Menu (while pressed), Shift+Menu for Menu"
+msgstr "Меню (удерживая нажатой), Shift+Menu для меню"
+
+msgid "Caps Lock (while pressed), Alt+Caps Lock for the original Caps Lock action"
+msgstr "Caps Lock (удерживая нажатой), Alt+Caps Lock для исходного действия Caps Lock"
+
+msgid "Right Ctrl (while pressed)"
+msgstr "Правый Ctrl (удерживая нажатой)"
+
+msgid "Shift+Caps Lock"
+msgstr "Shift+Caps Lock"
+
+msgid "Caps Lock to first layout; Shift+Caps Lock to second layout"
+msgstr "Caps Lock на первую раскладку; Shift+Caps Lock на вторую раскладку"
+
+msgid "Left Win to first layout; Right Win/Menu to second layout"
+msgstr "Левая Win на первую раскладку; Правая Win/Menu на вторую раскладку"
+
+msgid "Left Ctrl to first layout; Right Ctrl to second layout"
+msgstr "Левый Ctrl на первую раскладку; Правый Ctrl на вторую раскладку"
+
+msgid "Alt+Caps Lock"
+msgstr "Alt+Caps Lock"
+
+msgid "Both Shifts together"
+msgstr "Оба Shift одновременно"
+
+msgid "Both Alts together"
+msgstr "Оба Alt одновременно"
+
+msgid "Both Alts together; AltGr alone chooses third level"
+msgstr "Оба Alt одновременно; AltGr отдельно выбирает третий уровень"
+
+msgid "Both Ctrls together"
+msgstr "Оба Ctrl вместе"
+
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Shift"
+
+msgid "Left Ctrl+Left Shift"
+msgstr "Левый Ctrl+Левый Shift"
+
+msgid "Right Ctrl+Right Shift"
+msgstr "Правый Ctrl+Правый Shift"
+
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
+
+msgid "Alt+Shift"
+msgstr "Alt+Shift"
+
+msgid "Left Alt+Left Shift"
+msgstr "Левый Alt+Левый Shift"
+
+msgid "Right Alt+Right Shift"
+msgstr "Правый Alt+Правый Shift"
+
+msgid "Alt+Space"
+msgstr "Alt+Пробел"
+
+msgid "Win+Space"
+msgstr "Win+Пробел"
+
+msgid "Ctrl+Space"
+msgstr "Ctrl+Пробел"
+
+msgid "Left Shift"
+msgstr "Левый Shift"
+
+msgid "Right Shift"
+msgstr "Правый Shift"
+
+
+msgid "Ctrl+Left Win to first layout; Ctrl+Menu to second layout"
+msgstr "Ctrl+Левый Win на первую раскладку; Ctrl+Меню на вторую раскладку"
+
+msgid "Left Ctrl+Left Win"
+msgstr "Левый Ctrl+Левый Win"
\ No newline at end of file
diff --git a/locale/ubl-settings-keyboard.pot b/locale/ubl-settings-keyboard.pot
index 490493d..d58bcb3 100644
--- a/locale/ubl-settings-keyboard.pot
+++ b/locale/ubl-settings-keyboard.pot
@@ -161,3 +161,15 @@ msgstr ""
#: source/ubl-strings.h:20
msgid "Font:"
msgstr ""
+
+#: source/ubl-strings.h:20
+msgid "Group"
+msgstr ""
+
+#: source/ubl-strings.h:20
+msgid "Second keyboard layout"
+msgstr ""
+
+#: source/ubl-strings.h:20
+msgid "Font"
+msgstr ""
diff --git a/locale/ubl-settings-keyboard_ru.po b/locale/ubl-settings-keyboard_ru.po
index 74aeb7b..0284af2 100644
--- a/locale/ubl-settings-keyboard_ru.po
+++ b/locale/ubl-settings-keyboard_ru.po
@@ -163,3 +163,15 @@ msgstr "Вторая раскладка клавиш для клавиатуры
#: source/ubl-strings.h:20
msgid "Font:"
msgstr "Шрифт:"
+
+#: source/ubl-strings.h:20
+msgid "Group"
+msgstr "Группа"
+
+#: source/ubl-strings.h:20
+msgid "Second keyboard layout"
+msgstr "Вторая раскладка клавиш для клавиатуры"
+
+#: source/ubl-strings.h:20
+msgid "Font"
+msgstr "Шрифт"
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index 416c8fd..f6ef902 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -34,7 +34,10 @@ set(DEPENDFILES
../ubl-settings-keyboard.glade
../ubl-settings-keyboard-layouts.glade
../ubl-settings-keyboard-options.glade
- ../layouts.csv
+ ../ubl-settings-keyboard-keymaps.glade
+ ../ubl-settings-keyboard-font.glade
+ ../keymap-list.csv
+ ../font-list.csv
../gresource.xml
../ubl-settings-keyboard.css
)
@@ -77,6 +80,8 @@ set(SOURCE_FILES
ubl-settings-keyboard-layouts.c
ubl-settings-keyboard-options.c
ubl-settings-keyboard-save.c
+ ubl-settings-keyboard-font.c
+ ubl-settings-keyboard-keymaps.c
ubl-settings-keyboard.h
ubl-strings.h
)
diff --git a/source/ubl-settings-keyboard-font.c b/source/ubl-settings-keyboard-font.c
new file mode 100644
index 0000000..c61470c
--- /dev/null
+++ b/source/ubl-settings-keyboard-font.c
@@ -0,0 +1,87 @@
+#include "ubl-settings-keyboard.h"
+
+void on_font_accept(GtkWidget *, layouts_window *window){
+ GtkWidget *output_widget = g_object_get_data(G_OBJECT(window->Window),"output");
+ if (gtk_switch_get_active(GTK_SWITCH(window->OptionsFilterCombo))){
+ gtk_entry_set_text(GTK_ENTRY(output_widget),"");
+ yon_config_remove_by_key(console_keymap_parameter);
+ on_subwindow_close(window->Window);
+ return;
+ }
+ char *target = (char*)gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry));
+ if (yon_char_is_empty(target)){
+ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
+ return;
+ }
+ gtk_entry_set_text(GTK_ENTRY(output_widget),target);
+ yon_config_register(console_font_parameter,console_font_parameter_command,target);
+ on_subwindow_close(window->Window);
+}
+
+void on_font_selection_changed(GtkWidget *,layouts_window *window){
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &iter)){
+ char *target;
+ gtk_tree_model_get(model,&iter,0,&target,-1);
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),target);
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),"");
+ }
+}
+
+layouts_window *yon_font_window_new(){
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_font_path);
+ layouts_window *window = malloc(sizeof(layouts_window));
+ memset(window,0,sizeof(layouts_window));
+ window->Window = yon_gtk_builder_get_widget(builder,"Window");
+ window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
+ window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
+ window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
+ window->MainTree = yon_gtk_builder_get_widget(builder,"FontTree");
+ window->OptionsEntry = yon_gtk_builder_get_widget(builder,"ManualEntry");
+ window->OptionsFilterCombo = yon_gtk_builder_get_widget(builder,"DefaultSwitch");
+ window->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"FontList"));
+ window->parameters = yon_char_new(config(keyboard_layout_parameter));
+
+ g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->MainTree);
+ g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->OptionsEntry);
+ g_signal_connect(G_OBJECT(window->MainTree),"cursor-changed",G_CALLBACK(on_font_selection_changed),window);
+ g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
+ int font_size;
+ int size;
+ config_str fonts = yon_resource_open_file(font_list_path, &font_size);
+ for (int i=0;iOptionsList),&iter);
+ gtk_list_store_set(GTK_LIST_STORE(window->OptionsList),&iter,0,parsed[0],1,parsed[1],-1);
+ if (!yon_char_is_empty(config_value)&&!strcmp(parsed[0],config_value)){
+ gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&iter);
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),config_value);
+ }
+ }
+ }
+ if (yon_char_is_empty(config_value)){
+ gtk_switch_set_active(GTK_SWITCH(window->OptionsFilterCombo),1);
+ }
+ return window;
+}
+
+void yon_font_open(GtkWidget *,main_window *widgets){
+ layouts_window *window = yon_font_window_new();
+ g_object_set_data(G_OBJECT(window->Window),"output",widgets->TTYFontEntry);
+ yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),FONT_TITLE_LABEL,icon_path,"font-window");
+
+ g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
+ g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_font_accept),window);
+}
\ No newline at end of file
diff --git a/source/ubl-settings-keyboard-keymaps.c b/source/ubl-settings-keyboard-keymaps.c
new file mode 100644
index 0000000..f0cbbaa
--- /dev/null
+++ b/source/ubl-settings-keyboard-keymaps.c
@@ -0,0 +1,105 @@
+#include "ubl-settings-keyboard.h"
+
+void on_keymaps_accept(GtkWidget *, layouts_window *window){
+ main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
+ GtkWidget *output_widget = g_object_get_data(G_OBJECT(window->Window),"output");
+ if (gtk_switch_get_active(GTK_SWITCH(window->OptionsFilterCombo))){
+ gtk_entry_set_text(GTK_ENTRY(output_widget),"");
+ yon_config_remove_by_key(console_keymap_parameter);
+ on_subwindow_close(window->Window);
+ return;
+ }
+ char *target = (char*)gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry));
+ if (yon_char_is_empty(target)){
+ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
+ return;
+ }
+ if (output_widget == widgets->TTYLayoutEntry){
+ gtk_entry_set_text(GTK_ENTRY(output_widget),target);
+ yon_config_register(console_keymap_parameter,console_keymap_parameter_command,target);
+
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(output_widget),target);
+ yon_config_register(console_keymap_toggle_parameter,console_keymap_parameter_command,target);
+
+ }
+ on_subwindow_close(window->Window);
+}
+
+void on_keymaps_selection_changed(GtkWidget *,layouts_window *window){
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &iter)){
+ char *target;
+ gtk_tree_model_get(model,&iter,0,&target,-1);
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),target);
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),"");
+ }
+}
+
+layouts_window *yon_keymaps_window_new(){
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_keymaps_path);
+ layouts_window *window = malloc(sizeof(layouts_window));
+ memset(window,0,sizeof(layouts_window));
+ window->Window = yon_gtk_builder_get_widget(builder,"Window");
+ window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
+ window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
+ window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
+ window->MainTree = yon_gtk_builder_get_widget(builder,"KeymapTree");
+ window->parameters = yon_char_new(config(keyboard_layout_parameter));
+ window->OptionsEntry = yon_gtk_builder_get_widget(builder,"ManualEntry");
+ window->OptionsFilterCombo = yon_gtk_builder_get_widget(builder,"DefaultSwitch");
+ window->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KeymapList"));
+
+ g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->MainTree);
+ g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->OptionsEntry);
+ g_signal_connect(G_OBJECT(window->MainTree),"cursor-changed",G_CALLBACK(on_keymaps_selection_changed),window);
+ g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
+ return window;
+}
+
+void yon_keymaps_open(GtkWidget *self,main_window *widgets){
+ layouts_window *window = yon_keymaps_window_new();
+ if (self == widgets->TTYLayoutButton){
+ yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEYBOARD_LAYOUT_LABEL,icon_path,"font-window");
+ g_object_set_data(G_OBJECT(window->Window),"output",widgets->TTYLayoutEntry);
+ } else {
+ yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEYMAP_TITLE_LABEL,icon_path,"font-window");
+ g_object_set_data(G_OBJECT(window->Window),"output",widgets->TTYSecondLayoutEntry);
+ }
+ g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
+ g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_keymaps_accept),window);
+
+ int keymap_size;
+ int size;
+ config_str keymaps = yon_resource_open_file(keymap_list_path, &keymap_size);
+ for (int i=0;iTTYLayoutButton){
+ config_value = config(console_keymap_parameter);
+ } else {
+ config_value = config(console_keymap_toggle_parameter);
+ }
+ for (int i=0;iOptionsList),&iter);
+ gtk_list_store_set(GTK_LIST_STORE(window->OptionsList),&iter,0,parsed[0],1,parsed[1],2,parsed[2],-1);
+ if (!yon_char_is_empty(config_value)&&!strcmp(parsed[0],config_value)){
+ gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&iter);
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),config_value);
+ }
+ }
+ }
+ if (yon_char_is_empty(config_value)){
+ gtk_switch_set_active(GTK_SWITCH(window->OptionsFilterCombo),1);
+ }
+}
\ No newline at end of file
diff --git a/source/ubl-settings-keyboard.c b/source/ubl-settings-keyboard.c
index 740ab83..4b8b262 100644
--- a/source/ubl-settings-keyboard.c
+++ b/source/ubl-settings-keyboard.c
@@ -8,7 +8,7 @@ gboolean yon_interface_update(main_window *widgets){
g_signal_handlers_block_by_func(G_OBJECT(widgets->OptionsEditButton),G_CALLBACK(on_options_open),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->NumLockCombo),G_CALLBACK(on_num_lock_changed),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->LayoutChangingCombo),G_CALLBACK(on_options_save),widgets);
- g_signal_handlers_block_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets);
+ // g_signal_handlers_block_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),0);
@@ -45,24 +45,24 @@ gboolean yon_interface_update(main_window *widgets){
}
}
- char *tty_keymap = config(console_keymap_parameter);
- if (!yon_char_is_empty(tty_keymap)){
- gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYLayoutCombo),tty_keymap);
- } else {
- gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYLayoutCombo),0);
- }
- char *tty_keymap_change = config(console_keymap_toggle_parameter);
- if (!yon_char_is_empty(tty_keymap_change)){
- gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYKeymapCombo),tty_keymap_change);
- } else {
- gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYKeymapCombo),0);
- }
- char *tty_font = config(console_font_parameter);
- if (!yon_char_is_empty(tty_font)){
- gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYFontCombo),tty_font);
- } else {
- gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYFontCombo),0);
- }
+ // char *tty_keymap = config(console_keymap_parameter);
+ // if (!yon_char_is_empty(tty_keymap)){
+ // gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYLayoutCombo),tty_keymap);
+ // } else {
+ // gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYLayoutCombo),0);
+ // }
+ // char *tty_keymap_change = config(console_keymap_toggle_parameter);
+ // if (!yon_char_is_empty(tty_keymap_change)){
+ // gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYKeymapCombo),tty_keymap_change);
+ // } else {
+ // gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYKeymapCombo),0);
+ // }
+ // char *tty_font = config(console_font_parameter);
+ // if (!yon_char_is_empty(tty_font)){
+ // gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYFontCombo),tty_font);
+ // } else {
+ // gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYFontCombo),0);
+ // }
}
{
gtk_list_store_clear(widgets->OptionsList);
@@ -97,7 +97,7 @@ gboolean yon_interface_update(main_window *widgets){
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->OptionsEditButton),G_CALLBACK(on_options_open),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->NumLockCombo),G_CALLBACK(on_num_lock_changed),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->LayoutChangingCombo),G_CALLBACK(on_options_save),widgets);
- g_signal_handlers_unblock_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets);
+ // g_signal_handlers_unblock_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets);
return G_SOURCE_REMOVE;
}
@@ -217,32 +217,32 @@ void on_scroll_lock_switch(GtkWidget *,int status,main_window *widgets){
yon_interface_update(widgets);
}
-void on_tty_changed(GtkWidget *, main_window *widgets){
- char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYLayoutCombo));
- if (!yon_char_is_empty(tty_layout)){
- yon_config_register(console_keymap_parameter,console_keymap_parameter_command,tty_layout);
- } else {
- yon_config_remove_by_key(console_keymap_parameter);
- }
-}
-
-void on_tty_keymap_changed(GtkWidget *, main_window *widgets){
- char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYKeymapCombo));
- if (!yon_char_is_empty(tty_layout)){
- yon_config_register(console_keymap_toggle_parameter,console_keymap_toggle_parameter_command,tty_layout);
- } else {
- yon_config_remove_by_key(console_keymap_toggle_parameter);
- }
-}
-
-void on_tty_font_changed(GtkWidget *, main_window *widgets){
- char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYFontCombo));
- if (!yon_char_is_empty(tty_layout)){
- yon_config_register(console_font_parameter,console_font_parameter_command,tty_layout);
- } else {
- yon_config_remove_by_key(console_font_parameter);
- }
-}
+// void on_tty_changed(GtkWidget *, main_window *widgets){
+// char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYLayoutCombo));
+// if (!yon_char_is_empty(tty_layout)){
+// yon_config_register(console_keymap_parameter,console_keymap_parameter_command,tty_layout);
+// } else {
+// yon_config_remove_by_key(console_keymap_parameter);
+// }
+// }
+
+// void on_tty_keymap_changed(GtkWidget *, main_window *widgets){
+// char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYKeymapCombo));
+// if (!yon_char_is_empty(tty_layout)){
+// yon_config_register(console_keymap_toggle_parameter,console_keymap_toggle_parameter_command,tty_layout);
+// } else {
+// yon_config_remove_by_key(console_keymap_toggle_parameter);
+// }
+// }
+
+// void on_tty_font_changed(GtkWidget *, main_window *widgets){
+// char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYFontCombo));
+// if (!yon_char_is_empty(tty_layout)){
+// yon_config_register(console_font_parameter,console_font_parameter_command,tty_layout);
+// } else {
+// yon_config_remove_by_key(console_font_parameter);
+// }
+// }
void yon_main_window_complete(main_window *widgets){
widgets = yon_remalloc(widgets,sizeof(main_window));
@@ -265,9 +265,13 @@ void yon_main_window_complete(main_window *widgets){
widgets->ComposeSwitch = yon_gtk_builder_get_widget(builder,"ComposeSwitch");
widgets->ScrollLockSwitch = yon_gtk_builder_get_widget(builder,"ScrollLockSwitch");
widgets->NumLockCombo = yon_gtk_builder_get_widget(builder,"NumLockCombo");
- widgets->TTYLayoutCombo = yon_gtk_builder_get_widget(builder,"TTYLayoutCombo");
- widgets->TTYKeymapCombo = yon_gtk_builder_get_widget(builder,"TTYKeymapCombo");
- widgets->TTYFontCombo = yon_gtk_builder_get_widget(builder,"TTYFontCombo");
+
+ widgets->TTYLayoutEntry = yon_gtk_builder_get_widget(builder,"TTYLayoutEntry");
+ widgets->TTYLayoutButton = yon_gtk_builder_get_widget(builder,"TTYLayoutButton");
+ widgets->TTYSecondLayoutEntry = yon_gtk_builder_get_widget(builder,"TTYSecondLayoutEntry");
+ widgets->TTYSecondLayoutButton = yon_gtk_builder_get_widget(builder,"TTYSecondLayoutButton");
+ widgets->TTYFontEntry = yon_gtk_builder_get_widget(builder,"TTYFontEntry");
+ widgets->TTYFontButton = yon_gtk_builder_get_widget(builder,"TTYFontButton");
widgets->LayoutsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LayoutsList"));
widgets->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"OptionsList"));
@@ -278,9 +282,9 @@ void yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->LayoutAddButton),"clicked",G_CALLBACK(on_system_layouts_add),widgets);
g_signal_connect(G_OBJECT(widgets->LayoutRemoveButton),"clicked",G_CALLBACK(on_system_layouts_remove),widgets);
- g_signal_connect(G_OBJECT(widgets->TTYLayoutCombo),"changed",G_CALLBACK(on_tty_changed),widgets);
- g_signal_connect(G_OBJECT(widgets->TTYKeymapCombo),"changed",G_CALLBACK(on_tty_keymap_changed),widgets);
- g_signal_connect(G_OBJECT(widgets->TTYFontCombo),"changed",G_CALLBACK(on_tty_font_changed),widgets);
+ g_signal_connect(G_OBJECT(widgets->TTYLayoutButton),"clicked",G_CALLBACK(yon_keymaps_open),widgets);
+ g_signal_connect(G_OBJECT(widgets->TTYSecondLayoutButton),"clicked",G_CALLBACK(yon_keymaps_open),widgets);
+ g_signal_connect(G_OBJECT(widgets->TTYFontButton),"clicked",G_CALLBACK(yon_font_open),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardModelCombo),"changed",G_CALLBACK(on_model_changed),widgets);
g_signal_connect(G_OBJECT(widgets->OptionsEditButton),"clicked",G_CALLBACK(on_options_open),widgets);
g_signal_connect(G_OBJECT(widgets->OptionsRemoveButton),"clicked",G_CALLBACK(on_option_remove),widgets);
@@ -335,30 +339,30 @@ void yon_main_window_complete(main_window *widgets){
}
yon_char_parsed_free(models,size);
- {
- config_str parsed = yon_config_load(tty_layout_command,&size);
- for (int i=0;iTTYLayoutCombo),parsed[i],parsed[i]);
- }
- yon_char_parsed_free(parsed,size);
- }
- {
- config_str parsed = yon_config_load(tty_keymap_command,&size);
- for (int i=0;iTTYKeymapCombo),parsed[i],parsed[i]);
- }
- yon_char_parsed_free(parsed,size);
- }
- {
- config_str parsed = yon_config_load(tty_font_command,&size);
- for (int i=0;iTTYFontCombo),parsed[i],parsed[i]);
- }
- yon_char_parsed_free(parsed,size);
- }
+ // {
+ // config_str parsed = yon_config_load(tty_layout_command,&size);
+ // for (int i=0;iTTYLayoutCombo),parsed[i],parsed[i]);
+ // }
+ // yon_char_parsed_free(parsed,size);
+ // }
+ // {
+ // config_str parsed = yon_config_load(tty_keymap_command,&size);
+ // for (int i=0;iTTYKeymapCombo),parsed[i],parsed[i]);
+ // }
+ // yon_char_parsed_free(parsed,size);
+ // }
+ // {
+ // config_str parsed = yon_config_load(tty_font_command,&size);
+ // for (int i=0;iTTYFontCombo),parsed[i],parsed[i]);
+ // }
+ // yon_char_parsed_free(parsed,size);
+ // }
yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size);
yon_save_window_set_postsave_function(on_save_done,widgets);
gtk_tree_view_column_clicked(GTK_TREE_VIEW_COLUMN(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->LayoutTree),0)));
diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h
index 6de6fa3..ebbee16 100644
--- a/source/ubl-settings-keyboard.h
+++ b/source/ubl-settings-keyboard.h
@@ -21,27 +21,33 @@
#define glade_path "/com/ublinux/ui/ubl-settings-keyboard.glade"
#define glade_layouts_path "/com/ublinux/ui/ubl-settings-keyboard-layouts.glade"
#define glade_options_path "/com/ublinux/ui/ubl-settings-keyboard-options.glade"
+#define glade_keymaps_path "/com/ublinux/ui/ubl-settings-keyboard-keymaps.glade"
+#define glade_font_path "/com/ublinux/ui/ubl-settings-keyboard-font.glade"
#define banner_path "/com/ublinux/images/ubl-settings-keyboard-banner.png"
#define CssPath "/com/ublinux/css/ubl-settings-keyboard.css"
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
#define icon_path "com.ublinux.ubl-settings-keyboard"
+#define keymap_list_path "resource://com/ublinux/csv/keymap-list.csv"
+#define font_list_path "resource://com/ublinux/csv/font-list.csv"
+
#define LocaleName "ubl-settings-keyboard"
#define model_parameter "XKBMODEL"
-#define model_parameter_command "ubconfig --source global get keyboard XKBMODEL"
+#define model_parameter_command "ubconfig --source global get [keyboard] XKBMODEL"
#define keyboard_layout_parameter "XKBLAYOUT"
-#define keyboard_layout_parameter_command "ubconfig --source global get keyboard XKBLAYOUT"
+#define keyboard_layout_parameter_command "ubconfig --source global get [keyboard] XKBLAYOUT"
#define options_parameter "XKBOPTIONS"
-#define options_parameter_command "ubconfig --source global get keyboard XKBOPTIONS"
+#define options_parameter_command "ubconfig --source global get [keyboard] XKBOPTIONS"
#define num_lock_boot_parameter "NUMLOCK"
-#define num_lock_boot_parameter_command "ubconfig --source global get keyboard NUMLOCK"
+#define num_lock_boot_parameter_command "ubconfig --source global get [keyboard] NUMLOCK"
+
#define console_keymap_parameter "CONSOLE_KEYMAP"
-#define console_keymap_parameter_command "ubconfig --source global get keyboard CONSOLE_KEYMAP"
+#define console_keymap_parameter_command "ubconfig --source global get [keyboard] CONSOLE_KEYMAP"
#define console_keymap_toggle_parameter "CONSOLE_KEYMAP_TOGGLE"
-#define console_keymap_toggle_parameter_command "ubconfig --source global get keyboard CONSOLE_KEYMAP_TOGGLE"
+#define console_keymap_toggle_parameter_command "ubconfig --source global get [keyboard] CONSOLE_KEYMAP_TOGGLE"
#define console_font_parameter "CONSOLE_FONT"
-#define console_font_parameter_command "ubconfig --source global get keyboard CONSOLE_FONT"
+#define console_font_parameter_command "ubconfig --source global get [locale] CONSOLE_FONT"
#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK",NULL)
#define config_get_local_command "ubconfig --source system get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK"
@@ -162,9 +168,12 @@ typedef struct {
GtkWidget *ComposeSwitch;
GtkWidget *ScrollLockSwitch;
GtkWidget *NumLockCombo;
- GtkWidget *TTYLayoutCombo;
- GtkWidget *TTYKeymapCombo;
- GtkWidget *TTYFontCombo;
+ GtkWidget *TTYLayoutEntry;
+ GtkWidget *TTYLayoutButton;
+ GtkWidget *TTYSecondLayoutEntry;
+ GtkWidget *TTYSecondLayoutButton;
+ GtkWidget *TTYFontEntry;
+ GtkWidget *TTYFontButton;
GtkListStore *LayoutsList;
GtkListStore *OptionsList;
} main_window;
@@ -184,6 +193,7 @@ typedef struct {
typedef struct {
GtkWidget *Window;
+ GtkWidget *StatusBox;
GtkWidget *MainTree;
GtkWidget *CancelButton;
GtkWidget *AcceptButton;
@@ -254,4 +264,13 @@ void on_layout_dnd_inserted(GtkTreeModel *, GtkTreePath* path, GtkTreeIter* it
void on_layout_dnd_deleted(GtkTreeModel *, GtkTreePath* path, GtkTreeIter* iter, main_window *widgets);
void on_tty_changed(GtkWidget *, main_window *widgets);
void on_tty_keymap_changed(GtkWidget *, main_window *widgets);
-void on_tty_font_changed(GtkWidget *, main_window *widgets);
\ No newline at end of file
+void on_tty_font_changed(GtkWidget *, main_window *widgets);
+void yon_keymaps_open(GtkWidget *,main_window *widgets);
+layouts_window *yon_keymaps_window_new();
+void on_keymaps_accept(GtkWidget *, layouts_window *window);
+void on_font_accept(GtkWidget *, layouts_window *window);
+layouts_window *yon_font_window_new();
+void yon_font_open(GtkWidget *,main_window *widgets);
+void on_keymaps_selection_changed(GtkWidget *,layouts_window *window);
+void on_font_accept(GtkWidget *, layouts_window *window);
+void on_font_selection_changed(GtkWidget *,layouts_window *window);
\ No newline at end of file
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index a5fa9f2..2b265c5 100644
--- a/source/ubl-strings.h
+++ b/source/ubl-strings.h
@@ -40,4 +40,8 @@
#define DESCRIPTION_LABEL _("Description")
#define OPTIONS_LABEL _("Options:")
#define KEYMAP_LABEL _("Second keyboard layout:")
-#define FONT_LABEL _("Font:")
\ No newline at end of file
+#define FONT_LABEL _("Font:")
+
+#define GROUP_LABEL _("Group")
+#define KEYMAP_TITLE_LABEL _("Second keyboard layout")
+#define FONT_TITLE_LABEL _("Font")
\ No newline at end of file
diff --git a/ubl-settings-keyboard-font.glade b/ubl-settings-keyboard-font.glade
new file mode 100644
index 0000000..7a336ad
--- /dev/null
+++ b/ubl-settings-keyboard-font.glade
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.accept-symbolic
+
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic
+
+
diff --git a/ubl-settings-keyboard-keymaps.glade b/ubl-settings-keyboard-keymaps.glade
new file mode 100644
index 0000000..b6788ac
--- /dev/null
+++ b/ubl-settings-keyboard-keymaps.glade
@@ -0,0 +1,254 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 450
+ 550
+ True
+ False
+ com.ublinux.ubl-settings-keyboard
+
+
+ True
+ False
+ 5
+ vertical
+ 5
+
+
+ True
+ False
+ vertical
+ 5
+
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ 5
+ 5
+ 5
+
+
+ True
+ True
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ Default
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ True
+ 5
+ 5
+ in
+
+
+ True
+ True
+ KeymapList
+ 1
+ both
+
+
+ Name
+ 0
+
+
+
+ 0
+
+
+
+
+
+
+ Group
+
+
+
+ 1
+
+
+
+
+
+
+ Description
+
+
+ word
+ 120
+
+
+ 2
+
+
+
+
+
+
+
+
+ True
+ True
+ 2
+
+
+
+
+ True
+ False
+ 5
+ 5
+ 5
+
+
+ True
+ False
+ Manual input:
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ True
+
+
+ True
+ True
+ 1
+
+
+
+
+ False
+ True
+ 3
+
+
+
+
+
+
+
+
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.accept-symbolic
+
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic
+
+
diff --git a/ubl-settings-keyboard.glade b/ubl-settings-keyboard.glade
index 2531f56..4c5cb4f 100644
--- a/ubl-settings-keyboard.glade
+++ b/ubl-settings-keyboard.glade
@@ -73,6 +73,21 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
False
com.ublinux.libublsettingsui-gtk3.trash-symbolic
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.edit-symbolic
+
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.edit-symbolic
+
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.edit-symbolic
+
True
False
@@ -772,13 +787,37 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
+
True
False
- 0
-
- - Default
-
+ 5
+
+
+ True
+ True
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ True
+ True
+ image9
+
+
+
+ False
+ True
+ 1
+
+
True
@@ -812,13 +851,37 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
+
True
False
- 0
-
- - Default
-
+ 5
+
+
+ True
+ True
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ True
+ True
+ image8
+
+
+
+ False
+ True
+ 1
+
+
True
@@ -852,13 +915,37 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
+
True
False
- 0
-
- - Default
-
+ 5
+
+
+ True
+ True
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ True
+ True
+ image7
+
+
+
+ False
+ True
+ 1
+
+
True