Bug 166542 - krdc does not send the '=' character on vnc
Summary: krdc does not send the '=' character on vnc
Status: RESOLVED FIXED
Alias: None
Product: krdc
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR normal
Target Milestone: ---
Assignee: Urs Wolfer
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-07-14 16:09 UTC by George Kiagiadakis
Modified: 2008-07-17 22:53 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description George Kiagiadakis 2008-07-14 16:09:20 UTC
Version:           4.0.84 (using Devel)
Installed from:    Compiled sources
Compiler:          gcc version 4.3.1 (Debian 4.3.1-5) 
OS:                Linux

I am running several virtual machines here using kvm and the internal qemu vnc server. I tried connecting with all of them using krdc and in all of them, I notice that it is not possible to send the '=' (equal) character. However, using vncviewer, it is possible, so this is probably a bug in krdc.

Except from krdc 4.0.84 that I normally use, I have confirmed this bug also exists in trunk (kde 4.1.60, r832359).
Comment 1 Urs Wolfer 2008-07-15 20:10:27 UTC
I cannot reproduce this crash here. What keyboard layout are you using? Can you please try with another one to see if it will also happen there?
Comment 2 George Kiagiadakis 2008-07-15 23:17:46 UTC
I am using us (altgr-intl) and greek (basic) layouts. The bug appeared first using us, but it is also possible to reproduce with greek too. This is the relevant configuration from my xorg.conf:

Section "InputDevice"
        Identifier      "Generic Keyboard"
        Driver          "kbd"
        Option          "XkbRules"      "xorg"
        Option          "XkbModel"      "pc104"
        Option          "XkbLayout"     "us,gr"
        Option          "XkbVariant"    "altgr-intl,basic"
        Option          "XkbOptions"    "grp:alt_shift_toggle,lv3:ralt_switch,grp_led:scroll"
EndSection

Now, I just tried changing layout from kde's systemsettings and I am getting really weird results.

First, at some point I was able to type '=' (using us default) but I had to press shift+= (which should give +, because + is above = on my keyboard (greek keyboard)). I managed that by having my linux guest (to which I am connecting using vnc) in a linux console. Then I run kde on the guest and I got again (normally) a + on the guest and no =. Anyway, the result is that this key (the +,= key next to backspace) never sends a character without shift!

Second, typing various letters with greek on the host sends strange characters to the guest (but I guess this is expected).

Third, pressing alt+shift to change layout while krdc has focus, results in assertion failure (probably a different bug, though; do I need to file another bug for that?). Backtrace here:

#0  0x00007f728af9aeb5 in raise () from /lib/libc.so.6
#1  0x00007f728af9c3d3 in abort () from /lib/libc.so.6
#2  0x00007f728f708809 in qt_message_output (msgType=QtFatalMsg,
    buf=0x7fff99955e90 "ASSERT: \"i >= 0 && i < size()\" in file /home/gkiagia/qt-copy/include/QtCore/../../src/corelib/tools/qstring.h, line 650")
    at global/qglobal.cpp:2058
#3  0x00007f728f708918 in qFatal (msg=0x7f728f84d118 "ASSERT: \"%s\" in file %s, line %d") at global/qglobal.cpp:2260
#4  0x00007f728f708d25 in qt_assert (assertion=0x439f36 "i >= 0 && i < size()",
    file=0x439ee0 "/home/gkiagia/qt-copy/include/QtCore/../../src/corelib/tools/qstring.h", line=650) at global/qglobal.cpp:1828
#5  0x0000000000420fe7 in QString::at (this=0x7fff99958000, i=0) at /home/gkiagia/qt-copy/include/QtCore/../../src/corelib/tools/qstring.h:650
#6  0x000000000041ef59 in VncView::keyEvent (this=0x161cf80, e=0x7fff99958950) at /home/gkiagia/kde/src/KDE/kdenetwork/krdc/vnc/vncview.cpp:500
#7  0x000000000041e9c6 in VncView::keyPressEvent (this=0x161cf80, event=0x7fff99958950)
    at /home/gkiagia/kde/src/KDE/kdenetwork/krdc/vnc/vncview.cpp:517
#8  0x00007f728c4b7a70 in QWidget::event (this=0x161cf80, event=0x7fff99958950) at kernel/qwidget.cpp:6962
#9  0x00007f728c45fcd1 in QApplicationPrivate::notify_helper (this=0x13c6150, receiver=0x161cf80, e=0x7fff99958950) at kernel/qapplication.cpp:3772
#10 0x00007f728c460375 in QApplication::notify (this=0x7fff99959a00, receiver=0x161cf80, e=0x7fff99958950) at kernel/qapplication.cpp:3420
#11 0x00007f7290bdf55a in KApplication::notify (this=0x7fff99959a00, receiver=0x161cf80, event=0x7fff99958950)
    at /home/gkiagia/kde/src/KDE/kdelibs/kdeui/kernel/kapplication.cpp:311
#12 0x00007f728f7fc19f in QCoreApplication::notifyInternal (this=0x7fff99959a00, receiver=0x161cf80, event=0x7fff99958950)
    at kernel/qcoreapplication.cpp:583
#13 0x00007f728c46bd8d in QCoreApplication::sendSpontaneousEvent (receiver=0x161cf80, event=0x7fff99958950)
    at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:218
#14 0x00007f728c4c423e in qt_sendSpontaneousEvent (receiver=0x161cf80, event=0x7fff99958950) at kernel/qapplication_x11.cpp:4680
#15 0x00007f728c4f85dc in QKeyMapper::sendKeyEvent (keyWidget=0x161cf80, grab=false, type=QEvent::KeyPress, code=-1, modifiers={i = -1718251920},
    text=@0x7fff99958e10, autorepeat=false, count=1, nativeScanCode=50, nativeVirtualKey=65034, nativeModifiers=8) at kernel/qkeymapper_x11.cpp:1656
#16 0x00007f728c4f9972 in QKeyMapperPrivate::translateKeyEvent (this=0x13f4990, keyWidget=0x161cf80, event=0x7fff99959570, grab=false)
    at kernel/qkeymapper_x11.cpp:1627
#17 0x00007f728c4d34ae in QApplication::x11ProcessEvent (this=0x7fff99959a00, event=0x7fff99959570) at kernel/qapplication_x11.cpp:3148
#18 0x00007f728c4fbfea in x11EventSourceDispatch (s=0x13c97d0, callback=0, user_data=0x0) at kernel/qguieventdispatcher_glib.cpp:148
#19 0x00007f728a1fb82b in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#20 0x00007f728a1feffd in ?? () from /usr/lib/libglib-2.0.so.0
#21 0x00007f728a1ff1bb in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#22 0x00007f728f828cf2 in QEventDispatcherGlib::processEvents (this=0x13c2b50, flags={i = -1718249424}) at kernel/qeventdispatcher_glib.cpp:325
#23 0x00007f728c4fb80f in QGuiEventDispatcherGlib::processEvents (this=0x13c2b50, flags={i = -1718249328}) at kernel/qguieventdispatcher_glib.cpp:204
#24 0x00007f728f7f9407 in QEventLoop::processEvents (this=0x7fff99959940, flags={i = -1718249232}) at kernel/qeventloop.cpp:149
#25 0x00007f728f7f9602 in QEventLoop::exec (this=0x7fff99959940, flags={i = -1718249136}) at kernel/qeventloop.cpp:196
#26 0x00007f728f7fca04 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:845
#27 0x00007f728c45fa2e in QApplication::exec () at kernel/qapplication.cpp:3304
#28 0x00000000004350f1 in main (argc=1, argv=0x7fff99959ea8) at /home/gkiagia/kde/src/KDE/kdenetwork/krdc/main.cpp:95
Comment 3 Urs Wolfer 2008-07-15 23:30:10 UTC
SVN commit 832970 by uwolfer:

prevent assertion
CCBUG:166542

 M  +1 -1      vncview.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=832970
Comment 4 George Kiagiadakis 2008-07-17 22:42:22 UTC
After some hacking into the code, I managed to find out what the problem is...
It seems that when = is pressed, krdc sends XK_KP_Equal over vnc, which it proves to be the wrong keysym to send... The correct key is XK_equal.

Here is a patch that fixes my problem:

Index: vnc/vncview.cpp
===================================================================
--- vnc/vncview.cpp     (revision 834013)
+++ vnc/vncview.cpp     (working copy)
@@ -455,7 +455,7 @@
     case Qt::Key_Space: k = XK_space; break;
     case Qt::Key_Delete: k = XK_Delete; break;
     case Qt::Key_Enter: k = XK_KP_Enter; break;
-    case Qt::Key_Equal: k = XK_KP_Equal; break;
+    case Qt::Key_Equal: k = XK_equal; break;
     case Qt::Key_Up: k = XK_Up; break;
     case Qt::Key_Down: k = XK_Down; break;
     case Qt::Key_Right: k = XK_Right; break;
Comment 5 Urs Wolfer 2008-07-17 22:53:58 UTC
SVN commit 834031 by uwolfer:

Fix sending '=' char in some environments.
Thanks to George Kiagiadakis for investigating and patch.
BUG:166542

 M  +1 -1      vncview.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=834031