Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 314526 Details for
Bug 459476
krdc: Doesn't send AltGR/ALT_R correctly to remote host
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
Patch for KDE bug #168015
kdenetwork-4.1.0-bug168015.patch (text/plain), 4.14 KB, created by
Stefan Becker
on 2008-08-19 09:51:51 UTC
(
hide
)
Description:
Patch for KDE bug #168015
Filename:
MIME Type:
Creator:
Stefan Becker
Created:
2008-08-19 09:51:51 UTC
Size:
4.14 KB
patch
obsolete
>diff -up kdenetwork-4.1.0/krdc/vnc/vncview.cpp.bug168015 kdenetwork-4.1.0/krdc/vnc/vncview.cpp >--- kdenetwork-4.1.0/krdc/vnc/vncview.cpp.bug168015 2008-07-18 00:32:54.000000000 +0300 >+++ kdenetwork-4.1.0/krdc/vnc/vncview.cpp 2008-08-19 12:18:20.000000000 +0300 >@@ -39,10 +39,18 @@ > #include <QPainter> > #include <QMouseEvent> > >+// Definition of key modifier mask constants >+#define KMOD_Alt_R 0x01 >+#define KMOD_Alt_L 0x02 >+#define KMOD_Meta_L 0x04 >+#define KMOD_Control_L 0x08 >+#define KMOD_Shift_L 0x10 >+ > VncView::VncView(QWidget *parent, const KUrl &url) > : RemoteView(parent), > m_initDone(false), > m_buttonMask(0), >+ m_modifiersMask(0), > m_repaint(false), > m_quitFlag(false), > m_firstPasswordTry(true), >@@ -444,6 +452,8 @@ void VncView::wheelEvent(QWheelEvent *ev > > void VncView::keyEvent(QKeyEvent *e) > { >+ int mask = 0; >+ > rfbKeySym k = 0; > switch (e->key()) { > case Qt::Key_Backspace: k = XK_BackSpace; break; >@@ -483,30 +493,52 @@ void VncView::keyEvent(QKeyEvent *e) > case Qt::Key_NumLock: k = XK_Num_Lock; break; > case Qt::Key_CapsLock: k = XK_Caps_Lock; break; > case Qt::Key_ScrollLock: k = XK_Scroll_Lock; break; >- case Qt::Key_Shift: k = XK_Shift_L; break; >- case Qt::Key_Control: k = XK_Control_L; break; >- case Qt::Key_AltGr: k = XK_Alt_R; break; >- case Qt::Key_Alt: k = XK_Alt_L; break; >- case Qt::Key_Meta: k = XK_Meta_L; break; >+ case Qt::Key_Shift: k = XK_Shift_L; mask |= KMOD_Shift_L; break; >+ case Qt::Key_Control: k = XK_Control_L; mask |= KMOD_Control_L; break; >+ case Qt::Key_AltGr: k = XK_ISO_Level3_Shift; mask |= KMOD_Alt_R; break; >+ case Qt::Key_Alt: k = XK_Alt_L; mask |= KMOD_Alt_L; break; >+ case Qt::Key_Meta: k = XK_Meta_L; mask |= KMOD_Meta_L; break; > case Qt::Key_Mode_switch: k = XK_Mode_switch; break; > case Qt::Key_Help: k = XK_Help; break; > case Qt::Key_Print: k = XK_Print; break; > case Qt::Key_SysReq: k = XK_Sys_Req; break; > default: break; > } >+ >+ // Transform dead keys >+ if (e->key() >= Qt::Key_Dead_Grave && e->key() <= Qt::Key_Dead_Horn) { >+ k = e->key() - Qt::Key_Dead_Grave + XK_dead_grave; >+ } >+ >+ bool pressed = (e->type() == QEvent::KeyPress) ? true : false; >+ m_modifiersMask = pressed ? m_modifiersMask | mask : m_modifiersMask & ~mask; >+ >+ bool hasShift = m_modifiersMask & KMOD_Shift_L; >+ bool hasOtherMod = m_modifiersMask & (KMOD_Alt_R | KMOD_Alt_L | KMOD_Meta_L | KMOD_Control_L); >+ bool isUpper = e->key() >= 'A' && e->key() <= 'Z'; >+ // bool isLower = e->key() >= 'a' && e->key() <= 'z'; >+ // bool isLetter = isLower || isUpper; >+ >+ // If shift is pressed, we receive Alt as Meta, but we want to actually send Alt. >+ if (k == XK_Meta_L && hasShift) k = XK_Alt_L; > > if (k == 0) { >- if (e->key() < 0x100 && e->text().length() > 0) >- k = QChar(e->text().at(0)).unicode(); //respect upper- / lowercase >- else >- rfbClientLog("Unknown keysym: %d\n", e->key()); >+ if (hasOtherMod && (! isUpper || hasShift)) { >+ k = e->key(); >+ } else { >+ if (e->key() < 0x100 && e->text().length() > 0) >+ k = QChar(e->text().at(0)).unicode(); //respect upper- / lowercase >+ else >+ rfbClientLog("Unknown keysym: 0x%x\n", e->key()); >+ } > } > > if (k < 26) // workaround for modified keys by pressing CTRL > k += 96; > >- vncThread.keyEvent(k, (e->type() == QEvent::KeyPress) ? true : false); >+ //rfbClientLog("Key event(%s): orig: 0x%x, sent: 0x%x\n", pressed ? "P" : "R", e->key(), k); > >+ vncThread.keyEvent(k, pressed); > RemoteView::keyEvent(e); > } > >diff -up kdenetwork-4.1.0/krdc/vnc/vncview.h.bug168015 kdenetwork-4.1.0/krdc/vnc/vncview.h >--- kdenetwork-4.1.0/krdc/vnc/vncview.h.bug168015 2008-06-10 14:41:26.000000000 +0300 >+++ kdenetwork-4.1.0/krdc/vnc/vncview.h 2008-08-19 12:18:28.000000000 +0300 >@@ -79,6 +79,7 @@ private: > QClipboard *m_clipboard; > bool m_initDone; > int m_buttonMask; >+ int m_modifiersMask; // Stores the currently pressed modifier keys > int m_x, m_y, m_w, m_h; > bool m_repaint; > bool m_quitFlag;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 459476
: 314526