Closed
Bug 157397
Opened 22 years ago
Closed 22 years ago
Unable to enter national language data on AIX 4.3
Categories
(Core :: Internationalization, defect)
Tracking
()
VERIFIED
FIXED
People
(Reporter: lkemmel, Assigned: tetsuroy)
References
Details
(Keywords: intl)
Attachments
(1 file, 6 obsolete files)
4.15 KB,
patch
|
tetsuroy
:
review+
kinmoz
:
superreview+
asa
:
approval+
|
Details | Diff | Splinter Review |
In appropriate locales on AIX 4.3, switching keyboard layer is usually done by pressing and releasing Alt+Shift keys. This works for different applications, for example, aixterm or Netscape 4.7. In mozilla, however, switching keyboard layer has no effect; ASCII characters are always produced. Experienced in the iw_IL (hebrew) or ar_AA (arabic) locales, but most likely should happen in other national locales.
Reporter | ||
Comment 1•22 years ago
|
||
nsConvertCharCodeToUnicode(..) - http://lxr.mozilla.org/mozilla/source/widget/src/gtk/nsGtkEventHandler.cpp#329 - is used to convert keysym to Unicode. The problem on AIX 4.3 is that it doesn't receive correct keysym. According to the GDK documentation - http://developer.gnome.org/doc/API/gdk/gdk-event-structures.html#GDKEVENTKEY - the gchar *string member of GdkEventKey* is: "a null-terminated multi-byte string containing the composed characters resulting from the key press. When text is being input, in a GtkEntry for example, it is these characters which should be added to the input buffer. When using Input Methods to support internationalized text input, the composed characters appear here after the pre-editing has been completed. " So my suggestion is to convert to Unicode from the *string* (native encoding) instead of *keysym*.
Comment 2•22 years ago
|
||
The suggested fix causes all shortcut keys to stop functioning. (Tested under LANG=C and LANG=en_US - most likely occurs in other locales as well) If you apply the patch, then start the browser and try to issue commands like Ctrl+Q to quit, Ctrl+N to create a new browser window, or Ctrl+T to create a new tab, nothing seems to have an effect.
Reporter | ||
Comment 3•22 years ago
|
||
Hopefully the problem with shortcuts is fixed. I'm going to attach 2 patches: 1) for the code already patched with the previous patch. 2) full patch.
Reporter | ||
Comment 4•22 years ago
|
||
Reporter | ||
Comment 5•22 years ago
|
||
Assignee | ||
Comment 6•22 years ago
|
||
simon: i see some #ifdef bidi in the patch. Can you take a look at it? cc shanjian for gtk code
Reporter | ||
Comment 7•22 years ago
|
||
Attachment #91277 -
Attachment is obsolete: true
Attachment #92565 -
Attachment is obsolete: true
Attachment #92569 -
Attachment is obsolete: true
Updated•22 years ago
|
Status: UNCONFIRMED → NEW
Ever confirmed: true
removing "branchOEM+", till patch gets r=/sr= for trunk
Whiteboard: branchOEM+ → branchOEM
Comment 9•22 years ago
|
||
Is anyone available to review the latest patch? We would like to get this fixed on the Netscape 7 OEM branch, but this can't happen until it gets accepted for the trunk.
Comment 10•22 years ago
|
||
In Bug 161581, we are seeing similar behavior with gdk receiving invalid keysyms from the x-server. This causes users who start the browser in the ru_RU or zh_CN locales (probably others as well) to not be able to input characters which require the shift key. This is because the GdkEventKey->keyval does not correspond to the GdkEventKey->string. I have looked at the gdk source, and the keyval and string members are initialized by a call to XmbLookupString. The manpage for XmbLookupString (http://www.x.org/consortium/R6doc/man/X11/XmbLookupString) specifically states that "If both a string and a KeySym are returned, the KeySym value does not necessarily correspond to the string returned." To solve both of these problems, I think we need to extend this patch to use the GdkEventKey->string value when no control/alt/meta characters are used. For example, we currently use GdkEventKey->string when GdkEventKey->state is not defined. We should change the behavior to use GdkEventKey->string when !(GdkEventKey->state & GDK_CONTROL_MASK || GdkEventKey->state & GDK_MOD1_MASK || GdkEventKey->state & GDK_MOD4_MASK). In addition, I don't believe this bug is BIDI specific, so all references to IBMBIDI can be removed.
Comment 11•22 years ago
|
||
*** Bug 161581 has been marked as a duplicate of this bug. ***
Comment 12•22 years ago
|
||
This patch cleans up the previous one, and also fixed the problems discussed in Bug 161581. I have confirmed that mode switch functionality works in ar_AA and he_IL, and also that typing uppercase characters in ru_RU and zh_CN works properly.
Updated•22 years ago
|
Attachment #93148 -
Attachment is obsolete: true
Comment 13•22 years ago
|
||
This patch is identical to the last one, except GetUnichars() can now be defined const.
Attachment #96344 -
Attachment is obsolete: true
Assignee | ||
Comment 14•22 years ago
|
||
Comment on attachment 100016 [details] [diff] [review] Hopefully final patch. /r=yokoyama Though I am not familiar with AIX, the patch looks good.
Attachment #100016 -
Flags: review+
Comment 15•22 years ago
|
||
Comment on attachment 100016 [details] [diff] [review] Hopefully final patch. ==== Use C++ style comments "//" like the rest of the file does: + /* On AIX, GDK doesn't get correct keysyms from XIM. Follow GDK + reference recommending to use the 'string' member of GdkEventKey + instead. See: + + developer.gnome.org/doc/API/gdk/gdk-event-structures.html#GDKEVENTKEY + */ + /* + Use 'string' as opposed to 'keyval' when control, alt, or meta is + not pressed. This allows keyboard shortcuts to continue to function + properly, while fixing input problems and mode switching in certain + locales where the 'keyval' does not correspond to the actual input. + See Bug #157397 and Bug #161581 for more details. + */ ==== So if |MultiByteToUnicode()| destroys the buffer |mUnichars| points to, and it reallocates a new buffer, what resets |mUnichars| to point to the new buffer? Shouldn't there be a call to something like |IMEHelper->SetUnichars(unichars)| here? + if (unichar_size > 0) { + IMEHelper->SetUnicharsSize(unilen); + return (long)*unichars; + }
Comment 16•22 years ago
|
||
==== Use C++ style comments "//" like the rest of the file does: Sure. ==== So if |MultiByteToUnicode()| destroys the buffer |mUnichars| points to, and it reallocates a new buffer, what resets |mUnichars| to point to the new buffer? Shouldn't there be a call to something like |IMEHelper->SetUnichars(unichars)| here? You are correct. It looks as if MultiByteToUnicode deletes previous memory, and allocates a new buffer if the buffer passed as a parameter is not large enough to hold the converted characters. I will add a new SetUnichars function as you suggest to work around any potential problems.
Comment 17•22 years ago
|
||
Adds SetUnichars() function, fixes misspelling in comment.
Attachment #100016 -
Attachment is obsolete: true
Attachment #103342 -
Flags: superreview+
Comment 18•22 years ago
|
||
Comment on attachment 103342 [details] [diff] [review] Address kin's comments sr=kin@netscape.com ==== Turn the empty comment into a blank line: + // + PRBool controlChar = (aGEK->state & GDK_CONTROL_MASK || ==== Put a blank line after the comment so that it's more readable: + // See Bug #157397 and Bug #161581 for more details. + if (!controlChar && gdk_im_ready() && aGEK->length > 0 ==== Just add a comment to this method saying that it is the responsibility of the caller to free any data in |mUnichars| prior to calling |SetUnichars()|. + void SetUnichars(PRUnichar *aUnichars) { mUnichars = aUnichars; }
Assignee | ||
Comment 19•22 years ago
|
||
Comment on attachment 103342 [details] [diff] [review] Address kin's comments /r=YOKOYAMA
Attachment #103342 -
Flags: review+
Comment 20•22 years ago
|
||
Comment on attachment 103342 [details] [diff] [review] Address kin's comments a=asa for checkin to 1.2 (on behalf of drivers).
Attachment #103342 -
Flags: approval+
Comment 21•22 years ago
|
||
Checked in: Checking in nsGtkEventHandler.cpp; /cvsroot/mozilla/widget/src/gtk/nsGtkEventHandler.cpp,v <-- nsGtkEventHandler.cpp new revision: 1.173; previous revision: 1.172 done Checking in nsGtkIMEHelper.cpp; /cvsroot/mozilla/widget/src/gtk/nsGtkIMEHelper.cpp,v <-- nsGtkIMEHelper.cpp new revision: 1.45; previous revision: 1.44 done Checking in nsGtkIMEHelper.h; /cvsroot/mozilla/widget/src/gtk/nsGtkIMEHelper.h,v <-- nsGtkIMEHelper.h new revision: 1.14; previous revision: 1.13 done
Status: NEW → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•