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 152077 Details for
Bug 192016
[FC5] LTC23920-SCIM XIM server returns unexpected data
[?]
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.
LTC23920.patch
LTC23920.patch (text/plain), 10.16 KB, created by
IBM Bug Proxy
on 2007-04-10 01:15:43 UTC
(
hide
)
Description:
LTC23920.patch
Filename:
MIME Type:
Creator:
IBM Bug Proxy
Created:
2007-04-10 01:15:43 UTC
Size:
10.16 KB
patch
obsolete
>diff -upr scim-1.4.4.orig/modules/FrontEnd/IMdkit/i18nIMProto.c scim-1.4.4/modules/FrontEnd/IMdkit/i18nIMProto.c >--- scim-1.4.4.orig/modules/FrontEnd/IMdkit/i18nIMProto.c 2002-07-02 12:55:38.000000000 +0900 >+++ scim-1.4.4/modules/FrontEnd/IMdkit/i18nIMProto.c 2006-03-24 11:56:39.000000000 +0900 >@@ -511,6 +511,23 @@ xim_externaldef XimFrameRec forward_even > _FRAME(EOL), > }; > >+xim_externaldef XimFrameRec wire_keyevent_fr[] = { >+ _FRAME(BIT8), /* type */ >+ _FRAME(BIT8), /* detail */ >+ _FRAME(BIT16), /* serial number */ >+ _FRAME(BIT32), /* time */ >+ _FRAME(BIT32), /* root */ >+ _FRAME(BIT32), /* window */ >+ _FRAME(BIT32), /* subwindow */ >+ _FRAME(BIT16), /* rootX */ >+ _FRAME(BIT16), /* rootY */ >+ _FRAME(BIT16), /* X */ >+ _FRAME(BIT16), /* Y */ >+ _FRAME(BIT16), /* state */ >+ _FRAME(BIT8), /* sameScreen */ >+ _FRAME(EOL), >+}; >+ > xim_externaldef XimFrameRec sync_fr[] = > { > _FRAME(BIT16), /* input-method-ID */ >diff -upr scim-1.4.4.orig/modules/FrontEnd/IMdkit/i18nIc.c scim-1.4.4/modules/FrontEnd/IMdkit/i18nIc.c >--- scim-1.4.4.orig/modules/FrontEnd/IMdkit/i18nIc.c 2004-08-14 12:26:38.000000000 +0900 >+++ scim-1.4.4/modules/FrontEnd/IMdkit/i18nIc.c 2006-03-24 11:56:39.000000000 +0900 >@@ -571,6 +571,54 @@ static int GetICValue (Xi18n i18n_core, > return n; > } > >+static void SwapAttributes (XICAttribute *list, >+ int number){ >+ FrameMgr fm; >+ CARD16 c16; >+ extern XimFrameRec short_fr[]; >+ CARD32 c32; >+ extern XimFrameRec long_fr[]; >+ XPoint xpoint; >+ extern XimFrameRec xpoint_fr[]; >+ XRectangle xrect; >+ extern XimFrameRec xrectangle_fr[]; >+ int i; >+ >+ for (i = 0; i < number; ++i, ++list) { >+ if (list->value == NULL) >+ continue; >+ switch (list->type) { >+ case XimType_CARD16: >+ fm = FrameMgrInit (short_fr, (char *)list->value, 1); >+ FrameMgrGetToken (fm, c16); >+ memmove(list->value, &c16, sizeof(CARD16)); >+ FrameMgrFree (fm); >+ break; >+ case XimType_CARD32: >+ case XimType_Window: >+ fm = FrameMgrInit (long_fr, (char *)list->value, 1); >+ FrameMgrGetToken (fm, c32); >+ memmove(list->value, &c32, sizeof(CARD32)); >+ FrameMgrFree (fm); >+ break; >+ case XimType_XRectangle: >+ fm = FrameMgrInit (xrectangle_fr, (char *)list->value, 1); >+ FrameMgrGetToken (fm, xrect); >+ memmove(list->value, &xrect, sizeof(XRectangle)); >+ FrameMgrFree (fm); >+ break; >+ case XimType_XPoint: >+ fm = FrameMgrInit (xpoint_fr, (char *)list->value, 1); >+ FrameMgrGetToken (fm, xpoint); >+ memmove(list->value, &xpoint, sizeof(XPoint)); >+ FrameMgrFree (fm); >+ break; >+ default: >+ break; >+ } >+ } >+} >+ > /* called from CreateICMessageProc and SetICValueMessageProc */ > void _Xi18nChangeIC (XIMS ims, > IMProtocol *call_data, >@@ -928,6 +976,8 @@ void _Xi18nGetIC (XIMS ims, IMProtocol * > if (!(i18n_core->address.improto (ims, call_data))) > return; > /*endif*/ >+ if (_Xi18nNeedSwap (i18n_core, connect_id)) >+ SwapAttributes(getic->ic_attr, getic->ic_attr_num); > } > /*endif*/ > iter_count = getic->ic_attr_num; >diff -upr scim-1.4.4.orig/modules/FrontEnd/IMdkit/i18nMethod.c scim-1.4.4/modules/FrontEnd/IMdkit/i18nMethod.c >--- scim-1.4.4.orig/modules/FrontEnd/IMdkit/i18nMethod.c 2004-08-14 11:28:07.000000000 +0900 >+++ scim-1.4.4/modules/FrontEnd/IMdkit/i18nMethod.c 2006-03-24 12:12:40.000000000 +0900 >@@ -816,38 +816,54 @@ static char *xi18n_getIMValues (XIMS ims > return NULL; > } > >-static void EventToWireEvent (XEvent *ev, xEvent *event, CARD16 *serial) >+static void EventToWireEvent (XEvent *ev, xEvent *event, >+ CARD16 *serial, Bool byte_swap) > { >- *serial = (CARD16) (ev->xany.serial >> 16); >- event->u.u.sequenceNumber = >- (CARD16) (ev->xany.serial & (unsigned long) 0xFFFF); >- >- switch (ev->type) >- { >- case KeyPress: >- case KeyRelease: >- { >- XKeyEvent *kev = (XKeyEvent *) ev; >- >- event->u.u.type = ev->type; >- event->u.keyButtonPointer.root = kev->root; >- event->u.keyButtonPointer.state = kev->state; >- event->u.keyButtonPointer.time = kev->time; >- event->u.keyButtonPointer.event = kev->window; >- event->u.keyButtonPointer.child = kev->subwindow; >- event->u.keyButtonPointer.eventX = kev->x; >- event->u.keyButtonPointer.eventY = kev->y; >- event->u.keyButtonPointer.rootX = kev->x_root; >- event->u.keyButtonPointer.rootY = kev->y_root; >- event->u.keyButtonPointer.sameScreen = kev->same_screen; >- event->u.u.detail = kev->keycode; >- } >+ FrameMgr fm; >+ extern XimFrameRec wire_keyevent_fr[]; >+ extern XimFrameRec short_fr[]; >+ BYTE b; >+ CARD16 c16; >+ CARD32 c32; >+ >+ *serial = (CARD16)(ev->xany.serial >> 16); >+ switch (ev->type) { >+ case KeyPress: >+ case KeyRelease: >+ { >+ XKeyEvent *kev = (XKeyEvent*)ev; >+ /* create FrameMgr */ >+ fm = FrameMgrInit(wire_keyevent_fr, (char *)(&(event->u)), byte_swap); >+ >+ /* set values */ >+ b = (BYTE)kev->type; FrameMgrPutToken(fm, b); >+ b = (BYTE)kev->keycode; FrameMgrPutToken(fm, b); >+ c16 = (CARD16)(kev->serial & (unsigned long)0xffff); >+ FrameMgrPutToken(fm, c16); >+ c32 = (CARD32)kev->time; FrameMgrPutToken(fm, c32); >+ c32 = (CARD32)kev->root; FrameMgrPutToken(fm, c32); >+ c32 = (CARD32)kev->window; FrameMgrPutToken(fm, c32); >+ c32 = (CARD32)kev->subwindow; FrameMgrPutToken(fm, c32); >+ c16 = (CARD16)kev->x_root; FrameMgrPutToken(fm, c16); >+ c16 = (CARD16)kev->y_root; FrameMgrPutToken(fm, c16); >+ c16 = (CARD16)kev->x; FrameMgrPutToken(fm, c16); >+ c16 = (CARD16)kev->y; FrameMgrPutToken(fm, c16); >+ c16 = (CARD16)kev->state; FrameMgrPutToken(fm, c16); >+ b = (BYTE)kev->same_screen; FrameMgrPutToken(fm, b); >+ } >+ break; >+ default: >+ /* create FrameMgr */ >+ fm = FrameMgrInit(short_fr, (char *)(&(event->u.u.sequenceNumber)), >+ byte_swap); >+ c16 = (CARD16)(ev->xany.serial & (unsigned long)0xffff); >+ FrameMgrPutToken(fm, c16); >+ break; > } >- /*endswitch*/ >+ /* free FrameMgr */ >+ FrameMgrFree(fm); > } > >-#define Swap16(n) (((n) << 8 & 0xff00) | ((n) >> 8 & 0xff)) >- > static Status xi18n_forwardEvent (XIMS ims, XPointer xp) > { > Xi18n i18n_core = ims->protocol; >@@ -894,10 +910,10 @@ static Status xi18n_forwardEvent (XIMS i > FrameMgrPutToken (fm, call_data->sync_bit); > > replyp += total_size; >- if (_Xi18nNeedSwap(i18n_core, call_data->connect_id) != 0) { >- call_data->event.xkey.state = Swap16(call_data->event.xkey.state); >- } >- EventToWireEvent (&(call_data->event), (xEvent *) replyp, &serial); >+ EventToWireEvent (&(call_data->event), >+ (xEvent *) replyp, >+ &serial, >+ _Xi18nNeedSwap (i18n_core, call_data->connect_id)); > > FrameMgrPutToken (fm, serial); > >diff -upr scim-1.4.4.orig/modules/FrontEnd/IMdkit/i18nPtHdr.c scim-1.4.4/modules/FrontEnd/IMdkit/i18nPtHdr.c >--- scim-1.4.4.orig/modules/FrontEnd/IMdkit/i18nPtHdr.c 2004-08-14 12:26:38.000000000 +0900 >+++ scim-1.4.4/modules/FrontEnd/IMdkit/i18nPtHdr.c 2006-03-24 12:13:24.000000000 +0900 >@@ -51,8 +51,6 @@ static void DebugLog(char * msg) > } > #endif > >-#define Swap16(n) (((n) << 8 & 0xff00) | ((n) >> 8 & 0xff)) >- > extern Xi18nClient *_Xi18nFindClient (Xi18n, CARD16); > > static void GetProtocolVersion (CARD16 client_major, >@@ -1055,29 +1053,61 @@ static int WireEventToEvent (Xi18n i18n_ > XEvent *ev, > Bool byte_swap) > { >- if (byte_swap != 0) { >- event->u.keyButtonPointer.state = Swap16(event->u.keyButtonPointer.state); >- } >- ev->xany.serial = event->u.u.sequenceNumber & ((unsigned long) 0xFFFF); >+ FrameMgr fm; >+ extern XimFrameRec wire_keyevent_fr[]; >+ BYTE b; >+ CARD16 c16; >+ CARD32 c32; >+ int ret = False; >+ >+ /* create FrameMgr */ >+ fm = FrameMgrInit(wire_keyevent_fr, (char *)(&(event->u)), byte_swap); >+ >+ >+ /* get & set type */ >+ FrameMgrGetToken(fm, b); >+ ev->type = (unsigned int)b; >+ /* get detail */ >+ FrameMgrGetToken(fm, b); >+ /* get & set serial */ >+ FrameMgrGetToken(fm, c16); >+ ev->xany.serial = (unsigned long)c16; > ev->xany.serial |= serial << 16; > ev->xany.send_event = False; > ev->xany.display = i18n_core->address.dpy; >- switch (ev->type = event->u.u.type & 0x7F) >- { >- case KeyPress: >- case KeyRelease: >- ((XKeyEvent *) ev)->keycode = event->u.u.detail; >- ((XKeyEvent *) ev)->window = event->u.keyButtonPointer.event; >- ((XKeyEvent *) ev)->state = event->u.keyButtonPointer.state; >- ((XKeyEvent *) ev)->time = event->u.keyButtonPointer.time; >- ((XKeyEvent *) ev)->root = event->u.keyButtonPointer.root; >- ((XKeyEvent *) ev)->x = event->u.keyButtonPointer.eventX; >- ((XKeyEvent *) ev)->y = event->u.keyButtonPointer.eventY; >- ((XKeyEvent *) ev)->x_root = 0; >- ((XKeyEvent *) ev)->y_root = 0; >- return True; >- } >- return False; >+ >+ /* Remove SendEvent flag from event type to emulate KeyPress/Release */ >+ ev->type &= 0x7F; >+ >+ switch (ev->type) { >+ case KeyPress: >+ case KeyRelease: >+ { >+ XKeyEvent *kev = (XKeyEvent*)ev; >+ >+ /* set keycode (detail) */ >+ kev->keycode = (unsigned int)b; >+ >+ /* get & set values */ >+ FrameMgrGetToken(fm, c32); kev->time = (Time)c32; >+ FrameMgrGetToken(fm, c32); kev->root = (Window)c32; >+ FrameMgrGetToken(fm, c32); kev->window = (Window)c32; >+ FrameMgrGetToken(fm, c32); kev->subwindow = (Window)c32; >+ FrameMgrGetToken(fm, c16); kev->x_root = (int)c16; >+ FrameMgrGetToken(fm, c16); kev->y_root = (int)c16; >+ FrameMgrGetToken(fm, c16); kev->x = (int)c16; >+ FrameMgrGetToken(fm, c16); kev->y = (int)c16; >+ FrameMgrGetToken(fm, c16); kev->state = (unsigned int)c16; >+ FrameMgrGetToken(fm, b); kev->same_screen = (Bool)b; >+ } >+ ret = True; >+ break; >+ default: >+ break; >+ } >+ /* free FrameMgr */ >+ FrameMgrFree(fm); >+ return ret; > } > > static void ForwardEventMessageProc (XIMS ims, > > >
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 Raw
Actions:
View
Attachments on
bug 192016
:
129268
| 152077