From 5a4dc86cee03a92bf1b67fe8e71e08af6ce55879 Mon Sep 17 00:00:00 2001 From: Ray-V Date: Fri, 16 Oct 2020 19:41:39 +0100 Subject: [PATCH] Kvkbd fixes .. Add LSGT key for non-US keyboards Add RWIN key with option to set both Win keys to non-toggle for xmodmap use Fix keycodes for evdev mapping Show ampersand when on lower level of key Fix Num pad numbers keycodes where 0-9 are not on lower level of keyboard key Abbreviate num pad keys text Fix size of keys for keyboard right side alignment Use icons for quit and num pad show/hide buttons Resize quit, num pad show/hide, configure buttons Add a tooltip for the panel icon Add help file --- Apps/kvkbd/README | 9 + Apps/kvkbd/doc/en/config-btn.png | Bin 0 -> 900 bytes Apps/kvkbd/doc/en/config-menu.png | Bin 0 -> 7054 bytes Apps/kvkbd/doc/en/exit-btn.png | Bin 0 -> 795 bytes Apps/kvkbd/doc/en/index.docbook | 325 +++++++++++++++++++++++++ Apps/kvkbd/doc/en/kvkbd.png | Bin 0 -> 22784 bytes Apps/kvkbd/doc/en/kvkbds.png | Bin 0 -> 27354 bytes Apps/kvkbd/doc/en/num-pad-btn.png | Bin 0 -> 416 bytes Apps/kvkbd/doc/en/num-pad.png | Bin 0 -> 12669 bytes Apps/kvkbd/kvkbd.SlackBuild | 387 +++++++++++++++++++++++++++++- BUILD-TDE.sh | 18 ++ 11 files changed, 735 insertions(+), 4 deletions(-) create mode 100644 Apps/kvkbd/README create mode 100644 Apps/kvkbd/doc/en/config-btn.png create mode 100644 Apps/kvkbd/doc/en/config-menu.png create mode 100644 Apps/kvkbd/doc/en/exit-btn.png create mode 100644 Apps/kvkbd/doc/en/index.docbook create mode 100644 Apps/kvkbd/doc/en/kvkbd.png create mode 100644 Apps/kvkbd/doc/en/kvkbds.png create mode 100644 Apps/kvkbd/doc/en/num-pad-btn.png create mode 100644 Apps/kvkbd/doc/en/num-pad.png diff --git a/Apps/kvkbd/README b/Apps/kvkbd/README new file mode 100644 index 0000000..bac489b --- /dev/null +++ b/Apps/kvkbd/README @@ -0,0 +1,9 @@ +Known issues with Kvkbd are: + +Where the shift character is not the upper case of the lower alpha character, the upper case character will be shown on the key. +For example, on the French azerty keyboard, Shift eacute should show as 2, but shows as Eacute. + +Where the KeyPad '.' character on the Del key is mapped as a comma for a particular locale, it stills shows on the key as a period. + +These are only problems with the characters displayed on the keys - the correct characters are printed. + diff --git a/Apps/kvkbd/doc/en/config-btn.png b/Apps/kvkbd/doc/en/config-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c78e82f910ac211b015e3e192fdd623af16303 GIT binary patch literal 900 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 literal 0 HcmV?d00001 diff --git a/Apps/kvkbd/doc/en/exit-btn.png b/Apps/kvkbd/doc/en/exit-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..b0d6ee6110f0d40965233b42b18bebc778bd6136 GIT binary patch literal 795 zcmV+$1LXXPP)K@^<5JKN{8tzf{Gz>H58{4)&2dbZEr^*m%~jg zW+&G+HNnYu7e_}BhllV`g=(6RSeqcjL{CElLZhRoX=}sh)m5Z-c2Mv2LU%ZDPE}fO zFWwFe;0G^r?(Rb2F0qQqda{WG%B2zl-QD=KybQ6nhI&4GJ3En$M4%;;aBghidUF$v zJv~Sm1_TvKEd8)-gR1)akk4cgUtEMMm4bD5hv3i zx~mk65RZ>9T@jLiB`N<1P3D!jORQ2NtAn7_=_%?uI*=uqL-w9gS(O=3T`pVxEpuyi z9TIDsC;^%6ZMZxhR8LLW02#mO_V=wV_}B?KO#0*`G#Yrfw+A;bHEj>bB9lve8DC#V zCzHO)GM1KL&CEb&onHFkoS1+?L%*>bk&_b$s@2=;h*Y+1QweG?b{^$3Xx9002ovPDHLkV1gBSRl)!O literal 0 HcmV?d00001 diff --git a/Apps/kvkbd/doc/en/index.docbook b/Apps/kvkbd/doc/en/index.docbook new file mode 100644 index 0000000..726194e --- /dev/null +++ b/Apps/kvkbd/doc/en/index.docbook @@ -0,0 +1,325 @@ + +Kvkbd"> + xmodmap"> + Alt Gr"> + + + + + +]> + + + + +The &kvkbd; Handbook + + + +TodorGyumyushevyodor1@gmail.com + + +GuillaumeMartressmarter@ubuntu.com + + + + + +2007-2014 +Todor Gyumyushev + + +2008 +Guillaume Martres + + +&FDLNotice; + +2020 +0.4.8 &tde; + + +&kvkbd; is a virtual keyboard for &tde; + + + +TDE +Kvkbd +keyboard +virtual +accessibility + + + + + +Introduction + +&kvkbd; is a simple virtual keyboard for &tde;. +It can be used instead of a physical keyboard or for devices with a touch screen but no keyboard. +It is also useful to quickly test a keyboard mapping to locate some keys. + + + + +Using &kvkbd; + + +&kvkbd; interface + +When first launched, &kvkbd; will appear in the bottom-right corner of the screen. +It can be moved by clicking and dragging on any part of the background area. +Resize it by clicking and dragging on the stripes at the bottom right. +The button on the top right is used to hide the keyboard - to show it again, just click on the tray icon. + + +French keyboard: +The AD11 key, ringed, is a dead key. + + + + +To use the numeric keypad, click the double arrow on the right. +The Num pad display can be toggled by clicking on the Num Lock key . + + + + +To display and select the shift characters, use both &Shift; keys: + • Click either &Shift; key, which will 'lock', and then the other &Shift; key and the shift characters will be displayed. + • Then click on the character to print it. +Otherwise, if you know which key the shift character is on, then the expected behaviour applies, and &Shift; 'key' will print it. + + +Spanish keyboard shift characters: + + + + + + +The configuration menu + +The &kvkbd; configuration menu is accessible by clicking on the configuration button or by right clicking on the tray icon. +Select "Font ..." to choose the font used to display the characters on the keys. +Check "Auto Resize Font" to resize the font when &kvkbd; is resized. +Check "Dock Widget" to display a small dock which can be placed anywhere on screen. +Click on it to hide or show the virtual keyboard. + + + + + + + +Keys + +The &kvkbd; keyboard is based on the US layout with an extra key to the right of Left &Shift; for non-US keyboards - the extra key duplicates < and > characters on the US keyboard. + +For non-US keyboards, the key which is normally lower left of the &Enter; key is placed above the &Enter; key. + +Where set up in the keyboard mapping file, &AltGr; will enable selection of the character mapped to the lower right of any key, and &AltGr; &Shift; for any upper right character. + +The &Shift;, &Ctrl;, Alt* buttons 'lock' when clicked to simulate holding down a key on a physical keyboard. + +Whether the *Win buttons 'lock' will depend on the build time option chosen. + + + +Dead Keys + +Using &Shift; and/or &AltGr; which need press and hold on a physical keyboard will need click only for &kvkbd;. +For example, using the AD11 key [ ˆ ] on the oss variant of the French[fr]/azerty keyboard: +setxkbmap fr -variant oss + + + Character: + dead_circumflex  + dead_diaeresis + dead_tilde + dead_abovering + + + K/B press: + ˆ o + &Shift;+ˆ u + &AltGr;+ˆ e + &AltGr;+&Shift;+ˆ a + + + &kvkbd; click:  + ˆ o + &Shift; ˆ u  + &AltGr; ˆ e  + &AltGr; &Shift; ˆ a + + + Printed: + ô + ü + + å + + + +Note that &kvkbd; is compiled for keycodes defined by evdev » /etc/X11/xkb/keycodes/evdev. +&kvkbd; will have reduced functionality in systems using another keycode definitions file which can be checked by: + • running xev in a konsole + • pressing or clicking Menu + • looking for keycode 135 among the output + + + + + + + + +Using &kvkbd; with &tdm; + +&kvkbd; doesn't work with &tdm;. +Use with other Display Managers by editing /etc/.../Xsetup. +Add this: +HOME=/root kvkbd --loginhelper +There is no configuration button in the loginhelper mode. +To change the default config, launch &kvkbd; as root: +tdesu kvkbd + +and make the changes there from the configuration menu. +&kvkbd; is run without the --loginhelper option when run from a konsole. + + + + +Autostart + +Add kvkbd.desktop to the &tde; Autostart directory for &kvkbd; to run when &tde; starts. + +For a specific keyboard layout: + + Exec=setxkbmap <xx>;kvkbd + + +Or, with &xmmp;: [as in the example] + + Exec=setxkbmap <xx>;&xmmp; -e 'keycode 133=quotedbl';&xmmp; -e 'keycode 134=asterisk';kvkbd + + +Or, including the setxkbmap compose option: + + Exec=setxkbmap -option compose:menu <xx>;xmodmap -e 'keycode 133=quotedbl';xmodmap -e 'keycode 134=asterisk';kvkbd + + + + + + + + +Layout switching + +&kvkbd; will dynamically switch keyboard layouts as they are changed, either through the command line or using the &tde; Keyboard Tool. + + +Refer to the Keyboard Layouts Handbook for details on how to set up different and switchable keyboard layouts. + + + + + + + + +Customizing &kvkbd; + + +Key mapping + +Using the compose option for setxkbmap, it could be useful for example to set the Menu key as the compose key to set up user specified characters or character strings. + + +Examples + + +Add the Euro symbol for a US keyboard [¹] + • Add <Multi_key> <e> <r> : U20AC # "€" EuroSign to ~/.XCompose [²] + • Run setxkbmap -option compose:menu us + • Start new konsole or editor + • Click Menu e r + .. and should be displayed + + +Add a shortcut for a frequently used text string + • Add <Multi_key> <t> <r> : "&tde; rocks" to ~/.XCompose + • Run setxkbmap -option compose:menu <xx> + • Start new konsole or editor + • Click Menu t r + .. and &tde; rocks should be displayed + + +Assign keycodes +&xmmp; can be used to assign keycodes to any key. +If &kvkbd; has been built for the Win keys to function as non-control keys, they can conveniently be used for frequently used characters which might otherwise be more cumbersome to generate. +For example, the " and * characters on a gb keyboard are &Shift;+2 and &Shift;+8, and they could be assigned to the Win keys: +&xmmp; -e 'keycode 133=quotedbl' +&xmmp; -e 'keycode 134=asterisk' + +Then LWin would print " and RWin would print * + + +[¹] To emulate a keyboard where the Euro sign is engraved on the 5 key, setxkbmap us -variant euro and &AltGr; 5 would be more appropriate. + +[²] +This is an easier combination to enter than the other Euro options in /usr/share/X11/locale/<LOCALE>/Compose, which doesn't include this combination. +    However, if ~/.XCompose 'includes' /usr/share/X11/locale/<LOCALE>/Compose, any duplicated compose sequences in ~/.XCompose will have priority. + + + +Composite Characters + +Create a character that doesn't have a direct unicode mapping, but is composed of unicode characters in the font being used. + +As an example -- a-ogonek [U0105] + combining acute [U0301] -- ą́́ + + +Add the character and chosen key combination to the ~/.XCompose file: + + • echo "<Multi_key> <space> <a> : \"$(printf '\u0105\u0301')\" # aogonek + combining acute" >> ~/.XCompose + +Test: + + • Start new editor + + • Print the character:   Menu space a + + + + + + + +Credits and License + +&kvkbd; +Program Copyright © 2007-2014 Todor Gyumyushev yodor1@gmail.com +Program and Documentation Copyright © 2008 Guillaume Martres smarter@ubuntu.com + + +&underFDL; + + +&underGPL; + + + +Installation +For your own build of &kvkbd;, see the INSTALL file. + + +&documentation.index; + + diff --git a/Apps/kvkbd/doc/en/kvkbd.png b/Apps/kvkbd/doc/en/kvkbd.png new file mode 100644 index 0000000000000000000000000000000000000000..b258267a203103784169238ea22365828cf389e9 GIT binary patch literal 22784 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� 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 literal 0 HcmV?d00001 diff --git a/Apps/kvkbd/doc/en/num-pad-btn.png b/Apps/kvkbd/doc/en/num-pad-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..b61475e78960de32777c66e444eb246cabdad587 GIT binary patch literal 416 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4rXaO+x!*+3D_0*}aI z1_o|n5N2eUHAey{$X?><>&kwWS(aDGcnL><1yD$~#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2AtWPJ!QIn0;C+f}9s>g-i>HfYh{fr(lN7f%8A!DKjbG=G=*l(4x=GoBoAa=0 z;z1)W5g`%XU)u3E85kWu%&Ff0W3KJ{&xf|%{PX;dJpZ2eOQ!s=dQi4^k&S)(Q5+Ng6ruA!-ZF-M}ry7ml<(+ZbGPOT{mqER&Vle~_u>{K2dnrLi}**~%A59$GGUZ+qJD(haK#dQ8#ac6^6k2?k-JT`$n{O@Ouwv=i%^POjtC2a_dvn!U?hUi#zL~BmD~rB;Ve9tO z*HfvEb6+g6>~7}+1{{N@tDnm{ Hr-UW|I3lC( literal 0 HcmV?d00001 diff --git a/Apps/kvkbd/doc/en/num-pad.png b/Apps/kvkbd/doc/en/num-pad.png new file mode 100644 index 0000000000000000000000000000000000000000..79cd2747ce3bb0edb89e1e3436ef84317d0f2d84 GIT binary patch literal 12669 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 literal 0 HcmV?d00001 diff --git a/Apps/kvkbd/kvkbd.SlackBuild b/Apps/kvkbd/kvkbd.SlackBuild index d236370..e100426 100755 --- a/Apps/kvkbd/kvkbd.SlackBuild +++ b/Apps/kvkbd/kvkbd.SlackBuild @@ -33,6 +33,385 @@ getsource_fn untar_fn +## copy the helpfile docs to the build tree +cp -a $SRCDIR/doc . +## not in this version - introduced for the later qt4 build +sed -i '/CSS Color themes/d' README +## remove meinproc check - there are a number of validity errors relating to the use of etc., +## which I feel provides a better presentation. The help file displays as intended. +sed -i 's|--check --cache index.cache.bz2|--cache index.cache.bz2|' cmake/modules/TDEMacros.cmake + +## These patches are applied in chunks to identify the changes being made and allow any particular change to be easily identified and removed if required + +## Add a key, LSGT, between 'left shift' and 'z' for non-US keyboards. +## This duplicates '<' and '>' characters for US keyboards, but otherwise leaves the US keyboard fully functional. +## The key which is normally lower left of Enter on non-US keyboards is above the Enter key. +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +# +## add a key[code] to row 4 +@@ -46 +46 @@ +-#define R4LEN 7 ++#define R4LEN 8 +# +## add keycode 94 key between l-shift and z key +## gb=\| fr=<> de=<>| [us=<>] etc +@@ -72,3 +72,3 @@ +- //TQString k4="zxcvbnm"; //,./"; +- //TQString k4s="ZXCVBNM"; +- unsigned int kc4[R4LEN] = {52,53,54,55,56,57,58};//59,60,61}; ++ //TQString k4="resize ( 80,30 ); ++ lshft->resize ( 45,30 ); +# +## remove one key space after left shift +## and fix spacing +@@ -262 +262 @@ +- v->move ( stx+35+16+35+ ( 35*a ),sty+ ( 4*35 ) ); ++ v->move ( stx+35+15+ ( 35*a ),sty+ ( 4*35 ) ); +EOF + +## Replace text on Num pad keys for a better fit +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -402 +402 @@ +- TQString txt[9] = { "Ho\nme", TQString::fromUtf8("▲"), "Pg\nUp", ++ TQString txt[9] = { TQString::fromUtf8("H\u2190"), TQString::fromUtf8("▲"), TQString::fromUtf8("P\u2191"), +@@ -404 +404 @@ +- "End", TQString::fromUtf8("▼"), "Pg\nDn" }; ++ TQString::fromUtf8("E\u2192"), TQString::fromUtf8("▼"), TQString::fromUtf8("P\u2193") }; +@@ -448 +448 @@ +- numl->setText("Num\nLock"); ++ numl->setText(TQString::fromUtf8("\u2116")); +#+ numl->setText("N#"); +EOF + +## Set a more realistic initial font size +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -676 +676 @@ +- double rp = (8.0/600.0)*width(); ++ double rp = (10.0/600.0)*width(); +EOF + +## Fix keycodes for evdev mapping: +## Right shift, LWin, AltGr, Menu, Right Ctrl, Num pad divide, Num pad Enter +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -296 +296 @@ +- rshft->setKeyCode ( 50 ); ++ rshft->setKeyCode ( 62 ); +@@ -321 +321 @@ +- win->setKeyCode ( 115 ); ++ win->setKeyCode ( 133 ); +@@ -349 +349 @@ +- ralt->setKeyCode ( 113 ); ++ ralt->setKeyCode ( 108 ); +@@ -359 +359 @@ +- mnu->setKeyCode ( 117 ); ++ mnu->setKeyCode ( 135 ); +@@ -370 +370 @@ +- rctrl->setKeyCode ( 37 ); ++ rctrl->setKeyCode ( 105 ); +@@ -459 +459 @@ +- div->setKeyCode(112); ++ div->setKeyCode(106); +@@ -476 +476 @@ +- ent->setKeyCode(36); ++ ent->setKeyCode(104); +EOF + +## dead_* characters don't display on keys, so add single click printable character equivalents +## to display on keys - the printed character remains as dead_ +## Only need for levels 0 and 1 - higher levels don't show on keys +## NoSymbol shows as an outline square on keys - replace with space=blank +## Re: MainWidget.cpp "* therefore keysymtab[] must remain SORTED by keysym value." +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -999,2 +1021,3 @@ + } keysymtab[] = { ++ { 0x0000, 0x0020 }, /* NoSymbol -> <- space */ + { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */ +@@ -1772,2 +1795,18 @@ + { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */ ++ { 0xfe50, 0x0060 }, /* dead_grave \` */ ++ { 0xfe51, 0x00b4 }, /* dead_acute ´ */ ++ { 0xfe52, 0x02c6 }, /* dead_circumflex ˆ */ ++ { 0xfe53, 0x02dc }, /* dead_tilde ˜ small tilde */ ++ { 0xfe54, 0x00af }, /* dead_macron ¯ */ ++ { 0xfe55, 0x02d8 }, /* dead_breve ˘ */ ++ { 0xfe56, 0x02d9 }, /* dead_abovedot ˙ */ ++ { 0xfe57, 0x00a8 }, /* dead_diaeresis ¨ */ ++ { 0xfe58, 0x02da }, /* dead_abovering ° */ ++ { 0xfe59, 0x02dd }, /* dead_doubleacute ˝ */ ++ { 0xfe5a, 0x02c7 }, /* dead_caron ˇ */ ++ { 0xfe5b, 0x00b8 }, /* dead_cedilla ¸ */ ++ { 0xfe5c, 0x02db }, /* dead_ogonek ˛ */ ++ { 0xfe5d, 0x0269 }, /* dead_iota ɩ Latin small iota */ ++ { 0xfe64, 0x1fbf }, /* dead_abovecomma ᾽ Greek Psili */ ++ { 0xfe65, 0x1ffe }, /* dead_abovereversedcomma ῾ Greek Dasia */ + }; +EOF + +## add a tooltip for the panel icon +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -1825,3 +1825,3 @@ + { +- ++ TQToolTip::add ( this, "Virtual keyboard" ); + } +EOF + +## Fix Num pad numbers where 0-9 aren't the non-shift characters on the keyboard +## E.g. for fr, the num pad '1' [KP_1 keycode 87] appears as '&' [keycode 10] when Num Lock is on +## And fix Del keycode so that KP_Separator prints correctly, eg for gr = comma +## This is a quick-and-dirty fix because it effectively means that this routine is redundant. +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -407 +407 @@ +- int nval[9] = {16,17,18,13,14,15,10,11,12}; ++ int nval[9] = {79,80,81,83,84,85,87,88,89}; +@@ -427 +427 @@ +- ins->setKeyCode(19,90); ++ ins->setKeyCode(90,90); +@@ -439 +439 @@ +- del->setKeyCode(60,91); ++ del->setKeyCode(91,91); +EOF + +## Cosmetic changes: +## Set F4-F5 spacing as per F8-F9 +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -97 +97 @@ +- f->move ( stx+esc->width() + ( 35*a ) +20,sty ); ++ f->move ( stx+esc->width() +3 + ( 35*a ) +25,sty ); +@@ -107 +107 @@ +- f->move ( stx+esc->width() + ( 35*a ) +40+ ( 4*35 ),sty ); ++ f->move ( stx+esc->width() +3 + ( 35*a ) +40+ ( 4*35 ),sty ); +@@ -118 +118 @@ +- f->move ( stx+esc->width() + ( 35*a ) +45+ ( 8*35 ) +10,sty ); ++ f->move ( stx+esc->width() +3 + ( 35*a ) +45+ ( 8*35 ) +10,sty ); +# +## resize keys for alignment on right side of keyboard +@@ -139 +139 @@ +- bksp->resize ( 46,30 ); ++ bksp->resize ( 48,30 ); +@@ -149 +149 @@ +- tab->resize ( 47,30 ); ++ tab->resize ( 48,30 ); +EOF + +## use icons for quit and num pad show/hide buttons +## these are the 16x16/actions icons used for the system selected icon set +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +# +## num pad show button +@@ -388 +388 @@ +- extent->setText(">>"); ++ extent->setPixmap(TQIconSet(SmallIcon("media-seek-forward")).pixmap()); +@@ -689 +689 @@ +- extent->setText(">>"); ++ extent->setPixmap(TQIconSet(SmallIcon("media-seek-forward")).pixmap()); +# +## num pad hide button +@@ -693 +693 @@ +- extent->setText("<<"); ++ extent->setPixmap(TQIconSet(SmallIcon("media-seek-backward")).pixmap()); +# +## quit button +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -380 +380 @@ +- quit->setPaletteBackgroundColor ( TQt::red ); ++ quit->setPixmap(TQIconSet(SmallIcon("application-exit")).pixmap()); +EOF + +## Display '&' where it is the lower key character on the key +## E.g. fr be azerty keyboards +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -886,5 +897,9 @@ + TQString btn_text(TQChar((uint)ret)); + +- v.setText(btn_text); ++ TQChar c((uint)ret); ++ if (c=='&') ++ v.setText("&&"); ++ else ++ v.setText(btn_text); + + TQString btn_upper(btn_text.upper()); +EOF + +## Add RWin button +patch -N -p0 << EOF || true +## new button added +--- src/MainWidget.h ++++ src/MainWidget.h +@@ -96,2 +96,3 @@ + VButton *win; ++ VButton *rwin; + VButton *mnu; +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +# +## differentiate between Win keys for documentation +@@ -320 +320 @@ +- win->setText ( "Win" ); ++ win->setText ( "LWin" ); +# +## reduce the width of the space bar by 45=RWin width and 5=space between keys +@@ -339 +339 @@ +- space->resize ( 5*35+28,30 ); ++ space->resize ( 5*35+28-45-5,30 ); +# +## RWin 'locks' with mouse click +@@ -353,2 +354,11 @@ + ++ rwin = new VButton ( this,"" ); ++ rwin->resize ( 45,30 ); ++ rwin->move ( 5+ralt->x() +ralt->width(), sty+ ( 5*35 ) ); ++ rwin->setText ( "RWin" ); ++ rwin->setKeyCode ( 134 ); ++ rwin->setToggleButton ( true ); ++ mod_keys.append( rwin ); ++ rwin->res(); ++ + +# +## Menu now follows RWin not Alt Gr +@@ -357 +367 @@ +- mnu->move ( 5+ralt->x() +ralt->width(), sty+ ( 5*35 ) ); ++ mnu->move ( 5+rwin->x() +rwin->width(), sty+ ( 5*35 ) ); +EOF + +## resize quit, num pad show/hide, configure buttons to see the icons better at reduced size of keyboard +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -387,2 +387,2 @@ +- quit->resize ( 15,30 ); +- quit->move ( 525,15 ); ++ quit->resize ( 20,30 ); ++ quit->move ( 526,15 ); +@@ -395,2 +395,2 @@ +- extent->resize( 15,65 ); +- extent->move(525, 85 ); ++ extent->resize ( 20,65 ); ++ extent->move(526, 85 ); +@@ -551,2 +551,2 @@ +- popup_menu->resize ( 15,30 ); +- popup_menu->move ( 525,15+35 ); ++ popup_menu->resize ( 20,30 ); ++ popup_menu->move ( 526,15+35 ); +# +## move numpad after resizing buttons +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -410 +410 @@ +- int padx= 550; ++ int padx= 552; +# +## move and resize keyboard +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -76 +76 @@ +- int stx=15; ++ int stx=17; +@@ -593 +593 @@ +- int d_width=550; ++ int d_width=552; +@@ -639,2 +639,2 @@ +- sdxs = width() - (width() * (150.0/700.0)); +- VButton::pw=700.0; ++ sdxs = width() - (width() * (150.0/702.0)); ++ VButton::pw=702.0; +@@ -642 +642 @@ +- setMinimumSize(700/3,235/3); ++ setMinimumSize(702/3,235/3); +@@ -646,2 +646,2 @@ +- sdxb = width() + (width() * (150.0/550.0)); +- VButton::pw=550.0; ++ sdxb = width() + (width() * (150.0/552.0)); ++ VButton::pw=552.0; +@@ -649 +649 @@ +- setMinimumSize(550/3,235/3); ++ setMinimumSize(552/3,235/3); +--- src/VButton.cpp +--- src/VButton.cpp +@@ -5 +5 @@ +-double VButton::pw=550.0; ++double VButton::pw=552.0; +EOF + +## missing characters in keysymtab[] - for AC12 -> AD13 key on ua keyboard +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +@@ -1251,2 +1251,3 @@ + { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */ ++ { 0x06ad, 0x0491 }, /* Ukrainian_ghe_with_upturn ґ CYRILLIC SMALL LETTER GHE WITH UPTURN */ + { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */ +@@ -1266,2 +1267,3 @@ + { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */ ++ { 0x06bd, 0x0490 }, /* Ukrainian_GHE_WITH_UPTURN Ґ CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ + { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */ +EOF + +## generate keycode for Win keys with single click so that they can be used for xmodmap +## User option, set in ./BUILD-TDE.sh +[[ $WinLock != 1 ]] && { +echo -e "\033[36;1m"'patching for Win keys no-lock ..'"\033[0m" +patch -N -p0 << EOF || true +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +# +## don't lock the LWin button +@@ -322 +322 @@ +- win->setToggleButton ( true ); ++ win->setToggleButton ( false ); +## don't lock the RWin button +@@ -359 +359 @@ +- rwin->setToggleButton ( true ); ++ rwin->setToggleButton ( false ); +# +## generate keycode on click rather than wait for next key-click for keycode +--- src/MainWidget.cpp ++++ src/MainWidget.cpp +# +## for LWin +@@ -323 +323,2 @@ +- mod_keys.append ( win ); ++ connect ( win, TQT_SIGNAL ( keyClick ( unsigned int ) ), this, TQT_SLOT ( keyPress ( unsigned int ) ) ); ++ other_keys.append( win ); +# +## for RWin +@@ -360 +361,2 @@ +- mod_keys.append( rwin ); ++ connect ( rwin, TQT_SIGNAL ( keyClick ( unsigned int ) ), this, TQT_SLOT ( keyPress ( unsigned int ) ) ); ++ other_keys.append( rwin ); +EOF +} + + # for 14.0.8, set support for additional language(s) as per I18N variable # but only for languages available with this package ## for later versions, use the env variable LINGUAS=$I18N - set in BUILD-TDE.sh @@ -86,15 +465,15 @@ echo " |-----handy-ruler------------------------------------------------------| $PRGNAM: A virtual keyboard for TDE $PRGNAM: -$PRGNAM: Re: kvkbd --help -$PRGNAM: loginhelper Stand alone version for use with TDM or XDM. -$PRGNAM: You should Add : HOME=/root kvkbd --loginhelper & -$PRGNAM: to Xsetup to run in xdm/tdm $PRGNAM: $PRGNAM: $PRGNAM: With language support for: $PRGNAM: en $langs $PRGNAM: +$PRGNAM: +$PRGNAM: +$PRGNAM: +$PRGNAM: " > $PKG/install/slack-desc makepkg_fn diff --git a/BUILD-TDE.sh b/BUILD-TDE.sh index b18c708..5c5a647 100755 --- a/BUILD-TDE.sh +++ b/BUILD-TDE.sh @@ -548,6 +548,23 @@ sed -i 's|Apps/koffice|Misc/libpng &|' $TMPVARS/TDEbuilds } +## only run this if kvkbd has been selected +rm -f $TMPVARS/WinLock +[[ $(grep -o kvkbd $TMPVARS/TDEbuilds) ]] && { +dialog --cr-wrap --no-shadow --yes-label "No Lock" --no-label "Lock" --colors --defaultno --title " Kvkbd Win Keys " --yesno \ +" +The \Zb\Z6LWin\Zn and \Zb\Z6RWin\Zn keys on the \Zb\Z6Kvkbd\Zn keyboard are set to 'lock' for the next key click. + +If they're to be used as control keys to map a number of characters or functions, then they need to be set to \Zr\Z4\ZbLock\Zn while the next key is clicked - this is to simulate holding down the key on a physical keyboard. + +If they will only be used as alternately mapped keys using xmodmap, then they will need to be set to generate a keycode on a single click - \Z1N\Zb\Z0o Lock\Zn. +" \ +17 75 +[[ $? == 0 ]] && 2> $TMPVARS/WinLock +[[ $? == 1 ]] && echo 1 > $TMPVARS/WinLock +} + + ## option to prefix some package names ## get a list of packages that have SlackBuilds set up to use the prefix 'tde' grep TDEPFX [ACDL]???/*/*SlackBuild | grep PKGNAM | cut -d/ -f2 > $TMPVARS/TDEPFX_packages @@ -700,6 +717,7 @@ export KEEP_BUILD=$(cat $TMPVARS/KEEP_BUILD) export RUNLEVEL=$(cat $TMPVARS/RUNLEVEL) export PRE_DOWNLOAD=$(cat $TMPVARS/PRE_DOWNLOAD) export TDEPFX=$(cat $TMPVARS/TDEPFX) +export WinLock=$(cat $TMPVARS/WinLock) ## Set installation directory for tqt TQTDIR=$INSTALL_TDE