Closed Bug 162081 Opened 22 years ago Closed 20 years ago

Wrong letter is underlined as accesskey / mnemonic when widget direction is RTL

Categories

(Core :: Layout: Text and Fonts, defect)

x86
All
defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: tsahi_75, Assigned: smontagu)

References

(Blocks 1 open bug)

Details

(Keywords: helpwanted, intl, rtl)

Attachments

(12 files, 9 obsolete files)

947 bytes, application/vnd.mozilla.xul+xml
Details
982 bytes, application/vnd.mozilla.xul+xml
Details
7.06 KB, image/png
Details
982 bytes, application/vnd.mozilla.xul+xml
Details
1.77 KB, image/png
Details
1.40 KB, patch
Details | Diff | Splinter Review
1.64 KB, application/vnd.mozilla.xul+xml
Details
1.64 KB, application/vnd.mozilla.xul+xml
Details
37.91 KB, image/png
Details
3.03 KB, image/png
Details
19.05 KB, image/png
Details
17.43 KB, patch
Details | Diff | Splinter Review
Description: when the interface is aligned to the right, e.g. when using a RTL
language (like hebrew or arabic), the wrong letter in menues, buttons etc. is
underlined instead of the the real access key. e.g. if F is the access key for
File, then e is underlined. this happens only with an RTL language (i tested it
on hebrew), and it looks like Mozilla is counting the letters starting from the
left in order to find the letter to be underlined, instead of from the beginning
of the string.

Steps to reproduce:
1. aligning the interface to the right: add these lines to the file intl.css, in
the locale\en-US\global, in the en-US.jar file (the language pack file, in the
chrome folder):

window,dialog,wizard,page {
  direction: rtl;
}

menu { direction: rtl; }

outliner { direction: rtl; }

2. localize a menu item, like the word "File" in the main navigator menu (you
will probably need a hebrew/arabic/other RTL enabled OS for that). this item is
in locale/en-US/communicator/utilityOverlay.dtd.
3. start mozilla
4. look at localized UI element

Actual Results: underlined letter is at the opposite side of the string to the
access key.

Expected results: well, the access key should be underlined of course.
Attached file testcase
Attached image screenshot (obsolete) —
WORKSFORME Mozilla 2002081508, Classic Theme, Windows 98
> XP Toolkit/Widgets: Menus
Component: BiDi Hebrew & Arabic → XP Toolkit/Widgets: Menus
> XP Toolkit/Widgets: Menus
Assignee: mkaply → hyatt
QA Contact: zach → shrir
cc: me, Simon
The code that finds the accesskey is here.

http://lxr.mozilla.org/mozilla/source/layout/xul/base/src/nsTextBoxFrame.cpp#759

So we probably need to do different searches depending on what the direction is.
 So something like:

PRBool found;
if (!AlwaysAppendAccessKey()) {
  if Direction == LTR then
    found = FindInReadable;
  else
    found = RFindInReadable;

  if (!found)
    if Direction == LTR then
      found = FindInReadable(caseinsensitive);
    else
      found = RFindInReadable(caseinsensitive);
} else {
  if Direction == LTR then
    found = RFindInReadable(caseinsensitive);
  else
    found = FindInReadable(caseinsensitive);
}

The last chunk there, where AlwaysAppendAccessKey is true, raises the point that
nsTextBoxFrame::UpdateAccessTitle() doesn't respect RTL direction when appending
the accesskey, it always throws it at the end.  Should it put it at the start if
RTL?
per comment 2, it works if you use english, but if you use the hebrew word for
"File", and make it's first letter the access key, you would still have the
left-most letter underlined, although in hebrew (and arabic etc.) the first
letter is the right-most letter. i can't put a screenshot now, but maybe tomorrow.
Attached file localized testcase
this is the testcase Daniel attached, only localised to hebrew. you can see how
the left-most letter is underlined, although the right-most letter is the
accesskey.

if you want to view the code of this testcase, be sure to use a viewer that
supports RTL.
any work done here? this is a major issue for RTL localizers, and been lying
around for too long.
Attached image Screenshot of misaligned mnemonics (obsolete) —
I've tested this bug under WinXP with 1.1 he-IL (20020826) and the problem
seems more severe than the summary suggests. As long as Hebrew input is used,
mnemonics are completely broken. The fact that they are also misaligned is
indeed a major problem, but is secondary.

I suggest to change the summary of this bug accordingly.

Prog.
i think there's no point to fix the hebrew input problem before we get the
correct access key underlined. you can open a seperate bug for it, depending on
this one (or have this one depend on the new one).
This bug in all OS, please change the OS box
Ahmad, can you verify this on operating systems other than Windows?

Prog.
see screenshots from debian linux at
http://www.mozilla.org.il/board/viewtopic.php?t=481. mac doesn't have any
accesskeys.

since i reported this, i changed to WinXP, and i get it there too. changing.
OS: Windows 98 → All
Yes , I am using Linux and I have this problem
Reassign to nobody. :-/
Assignee: hyatt → nobody
question: do hebrew/arabic mnemonic work in Mozilla? I mean, even if
Tsadik-Sofit is marked as the mnemonic, does alt+Kuf opens the File menu?

another one: do we have the same problem for other widgets (buttons, links. etc.)?
Keywords: helpwanted, intl
QA Contact: shrir → xslf
Summary: wrong letter is underlined as accesskey when UI is aligned to the right → wrong letter is underlined as accesskey / mnemonic when UI is aligned to the right
In answer to my first question: they do.
Attached patch patch (obsolete) — Splinter Review
First of all, not as I said in my last comment, i see some problems using the
mnemonics, sometimes - at least when i test the localized testcase. When a menu
is opened, the mnemonics (for the opened menu of course) work fine, but: the
top level mnemonics haven't worked-for-me in the suite, but they did work in
firefox, maybe there is a problem in the testcase...

The attached patch fixes the mnemonic placement for RTL text rects (which is
the only case that is going to be tested...). It doesn't fix cases where you
have LTR gui in a RTL langauge (see XXX: comment).
Assignee: nobody → bugs.mano
Status: NEW → ASSIGNED
Attachment #154896 - Flags: review?(mkaply)
(...and i checked, and there is no problem with not-first-letter mnemonic
:-)...)
Attachment #95799 - Attachment is obsolete: true
Attachment #120970 - Attachment is obsolete: true
Attachment #154896 - Flags: superreview?(roc)
Component: XP Toolkit/Widgets: Menus → Layout: BiDi Hebrew & Arabic
Summary: wrong letter is underlined as accesskey / mnemonic when UI is aligned to the right → Wrong letter is underlined as accesskey / mnemonic when widget direction is RTL
(In reply to comment #17)
> question: do hebrew/arabic mnemonic work in Mozilla? I mean, even if
> Tsadik-Sofit is marked as the mnemonic, does alt+Kuf opens the File menu?
> 

to put things strait, if Kuf is maked in the XUL code as the access key, it will
open the Kovets menu, even if the actual letter underlined is the Tsadik, due to
this bug.

> another one: do we have the same problem for other widgets (buttons, links. etc.)?

it happenes on buttons too. by links, do you mean links in the content area (web
pages)?

(In reply to comment #20)
> (...and i checked, and there is no problem with not-first-letter mnemonic
> :-)...)

are you sure about this? from what i've seen, the underline is simply counted
from the left, regardless of the direction. if the second letter is the access
key, then the second letter from the left is underlined, even if the word starts
at the right (as it is the case in RTL).

i'll upload a testcase in a minute.
this test case shows that even when the access key is not the first letter, the
problem persists. the access key for the first menu is Vav, the second letter.
however, the underlined letter is the Beit, which is second from left. the line
itself is narrow, to accomodate the thin Vav.
(In reply to comment #21)
> (In reply to comment #17)
> > question: do hebrew/arabic mnemonic work in Mozilla? I mean, even if
> > Tsadik-Sofit is marked as the mnemonic, does alt+Kuf opens the File menu?
> > 
> 
> to put things strait, if Kuf is maked in the XUL code as the access key, it will
> open the Kovets menu, even if the actual letter underlined is the Tsadik, due to
> this bug.

Anyway, i didn't change the reg. code of the accesskeys. If there is a problem
(And for me: there is, at least with the testcase), we'll file another bug...

> > another one: do we have the same problem for other widgets (buttons, links.
etc.)?
> 
> it happenes on buttons too. by links, do you mean links in the content area (web
> pages)?
> 

Yep

> (In reply to comment #20)
> > (...and i checked, and there is no problem with not-first-letter mnemonic
> > :-)...)
> 
> are you sure about this? from what i've seen, the underline is simply counted
> from the left, regardless of the direction. if the second letter is the access
> key, then the second letter from the left is underlined, even if the word starts
> at the right (as it is the case in RTL).
> 
> i'll upload a testcase in a minute.

I meant *after* patching (see last screenshot)
(In reply to comment #24)
> (In reply to comment #21)
> > 
> > it happenes on buttons too. by links, do you mean links in the content area (web
> > pages)?
> > 
> 
> Yep
> 

well, accesskeys in web pages are not underlined by default, unless you
explicitly use the <u> tag, so it's not a problem there.
(In reply to comment #19)
> First of all, not as I said in my last comment, i see some problems using the
> mnemonics, sometimes - at least when i test the localized testcase. When a menu
> is opened, the mnemonics (for the opened menu of course) work fine, but: the
> top level mnemonics haven't worked-for-me in the suite, but they did work in
> firefox, maybe there is a problem in the testcase...

You might have been seeing bug 177508 some of the time...

> The attached patch fixes the mnemonic placement for RTL text rects (which is
> the only case that is going to be tested...). It doesn't fix cases where you
> have LTR gui in a RTL langauge (see XXX: comment).

Does RTL gui in a LTR language work correctly? This is important because the
Hebrew localization has menu items in English (Chatzilla, DOM Inspector, etc.)
Good point Simon....

I shoould also check if we deal with a BiDi char (the accesskey)... Do we have
any method for checking this in bidiutils? or should I check the unicode values?
Attachment #154896 - Flags: superreview?(roc)
Attachment #154896 - Flags: review?(mkaply)
Attached patch workaroundSplinter Review
This fixes rtl accesskeys for the following cases:
* RTL l10n in RTL GUI
* LTR l10n in RTL GUI
* RTL l10n in LTR GUI

..and in a better way (we already store if-frame-is-bidi).
Attachment #154896 - Attachment is obsolete: true
Attachment #154950 - Flags: superreview?(roc)
Attachment #154950 - Flags: review?(smontagu)
Comment on attachment 154950 [details] [diff] [review]
workaround

This is still only going to work for text in a single direction. Tsahi, do you
think we can assume that individual menu item labels will always be either RTL
or LTR but never mixed[1]? If not, we will need a Bidi-aware version of
nsTextBoxFrame::CalculateUnderline(); if so, that would be overkill and I think
this will be the best solution.

[1] One obvious case where we get mixed-directional text is where the access
key is not localized and we get something like
(F) קובץ
but an isolated LTR character doesn't break this patch.
(In reply to comment #32)
> Tsahi, do you think we can assume that individual menu item labels will 
> always be either RTL or LTR but never mixed[1]?

to put things strait, even if it we have something like "חלון Window קטן", and
the mnemonic will be "ל" for example, it will still work, it should also work
for "ק" , "ט" or "ן" , the problematic case is likely to be mixed-direction
string with a LTR mnemonic (only when it is *exist* in the string).
we have mixed direction text in file > new > Navigator Window/Navigator
Tab/Composer Page. i left Navigator and Composer in english, because they are
component names that don't have much meaning in english too, in the sense that
they are like brand names. i did translate Address Book and Mail & Newsgroups.

the current access keys for them are english - e.g. P for Composer. i suppose i
could choose hebrew access keys for them to workaroud this problem. are there
any rules on how to select access keys? i think it would be easier to remember
the N in Navigator than the Lamed in Halon.
Correct me if i'm wrong, the strings yoyu mentioned are not mixed with two
directions (you don't have any bidi charcter there).

we mean smoething like "חלון Composer חדש". "Composer" itself (even if the box
is RTLed) is not broken.
the string is "חלון Navigator" or "דף Composer", if that's mixed enough for you.

please stick to unicode when writing hebrew here. we started with it, and i hate
swiching encodings all the time.
You won't have a problem with "[hebrew]+ [english]+", because you are still
counting only in one direction... the problem can come for strings like
"[hebrew]+ [english]+ [hebrew]+" where the accesskey is on "[english]+"

As far as i know, we don't have any string in this form.
This sacrifices elegance for performance: the logical place to do this would be
in nsTextBoxFrame::CalculateUnderline() but that would mean duplicating all the
calls to the Bidi engine. It would also be cleaner to pass mAccessKeyInfo
instead of individual members, but the class isn't defined in any public
header, and I'm not sure if there is an appropriate one to move it into.
Attachment #154950 - Attachment is obsolete: true
Attachment #154954 - Attachment is obsolete: true
Attached file testcase, rtl version
Attachment #154950 - Flags: superreview?(roc)
Attachment #154950 - Flags: review?(smontagu)
(In reply to comment #37)
> You won't have a problem with "[hebrew]+ [english]+", because you are still
> counting only in one direction...

I don't think this is correct. In the case of "חלון Navigator", with access key
"N", the accesskeyIndex will be 5, but the N is visually at the far left if
direction is rtl. I've included this case in the "חדש" submenu in the rightmost
menu in attachment 155036 [details].
Comment on attachment 155034 [details] [diff] [review]
Patch for multi-directional texts

My debug tree is a little out of date. I'll request reviews as soon as I'm sure
that the whole tree builds OK with this patch.
(In reply to comment #42)
> (From update of attachment 155034 [details] [diff] [review])
> My debug tree is a little out of date. I'll request reviews as soon as I'm sure
> that the whole tree builds OK with this patch.
> 

I have up-to-dat tree... I will check it soon...
Comment on attachment 155034 [details] [diff] [review]
Patch for multi-directional texts

No hunks on patching:
patching file layout/base/public/nsBidiPresUtils.h
patching file layout/base/src/nsBidiPresUtils.cpp
patching file layout/html/base/src/nsPageFrame.cpp
patching file layout/xul/base/src/nsTextBoxFrame.cpp
patching file layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp
I'm afraid to say, but the patch doesn't work for me. The status is just like it
was before patching, maybae you patched another file(s) and missed him on "diffing"?
The patch works for me on a clean tree. Maybe there was a problem with your build?
Well, on My WinXP Box, i "make"ed with a clean build, on both "mozilla/layout" and even just "mozilla/"

In both cases, no change :-/
Thanks to bz for this screenshot. More investigation is needed.
Assignee: bugs.mano → smontagu
Status: ASSIGNED → NEW
what's up with this bug? we will need this to create good looking official
localized builds, starting Firefox 1.0.
(In reply to comment #50)
> what's up with this bug? we will need this to create good looking official
> localized builds, starting Firefox 1.0.

We need help from someone with a debug build on a system where the patch doesn't
work.
(In reply to comment #51)

> We need help from someone with a debug build on a system where the patch doesn't
> work.

...building now.
I dunno what was the problem in previous attempts.
Looks like the problem might be linux-only.
Comment on attachment 154950 [details] [diff] [review]
workaround

if this one does work as expected on linux, we may want it as a workaround for
ff/tb 1.0.
Attachment #154950 - Attachment description: better patch → workaround
Attachment #154950 - Attachment is obsolete: false
Indeed broken on X (exactly the same problem as in the screenshot).
The only point to blame is nsBidiPresUtils::RenderText calling 
aRenderingContext.GetWidth, since this eventually goes to per-platform Gfx code.
The Gtk gfx code returns oversized font metrics, it seems.

It gets even more complicated, since Gtk's has different font metrics
implementations: core X, Xft and Pango. Go figure which one works well and which
one we need to fix.
gfx/gtk isn't broken. The bug was in the patch. In the RTL case, gfx/gtk was
receiving a "left" string with incorrect width, and starting on the incorrect
start offset. No wonder it miscalculated the width; it was calculating the width
of a NUL terminator!

The fix:
  if (level & 1) {
    aRenderingContext.GetWidth(aText + start,
                               (subRunLength - (aAccessKeyIndex - start + 1)),
                               subWidth, nsnull);
  }

Explanation:
1st argument: aText is in visual order, so we shall begin the string from the
start (e.g. <*start*><TZADI><BET><VAV><KUF> -- where <KUF> is the mnemonic).
2nd argument: aAccessKeyIndex is a logical position within the entire string;
   1. We subtract the start of our run from it (aAccessKeyIndex - start)
   2. We add +1 to it, since aAccessKeyIndex is zero-based.
   3. We subtract the resulting logical position from the start of the run, from
the run's length, to get the visual position within the run.
ie. <TZADI><BET><VAV><*end*><KUF>

Result:
We get the metrics for [<TZADI><BET><VAV>]<KUF>.
Few more comments about the RenderText function:

1. I wrote that "aText is in visual order". Well, it's passed in logical order
(the function's documentation could as well say so), but the function has a
side-effect of log2vis-ing the string its passed *for input*. We should either
not have this (non-trivial) side-effect, or document it.

2. The two arguments (related to mnemonics) you've added seem a bit ad-hoc here.
Aren't we better off adding something more generic to such a function?
Resolving of logical positions is not a "natural" use of a RenderText function
either, but for sake of optimization (since we do BiDi at this point anyway), we
can offer this functionality in this function.

I propose something like (very similar to the addition parameters to fribidi's
log2vis function):

  struct nsBidiPositionResolve
  {
     // [in] Logical position within string
     PRInt32 logicalPosition;
     // [out] Visual position within string
     PRInt32 visualPosition;
     // [out] Visual metric in twips
     PRInt32 visualMetricTwips;
  };

  /*
   * @param aPosResolve array of logical positions to resolve into visual
positions; can be nsnull if this functionality is not required
   * @param aPosResolveCount number of items in the aPosResolve array
   */
  nsresult RenderText(PRUnichar*           aText,
                      PRInt32              aLength,
                      nsBidiDirection      aBaseDirection,
                      nsPresContext*      aPresContext,
                      nsIRenderingContext& aRenderingContext,
                      nscoord              aX,
                      nscoord              aY,
                      nsBidiPositionResolve* aPosResolve,
                      PRInt32              aPosResolveCount);

This patch implements 3 changes on top of smontagu's work:
1. A more generic form of RenderText (as I've described in my previous
comment). Resolves an arbitrary number of logical indexes into visual indexes +
left width metric.
2. A minor change in the length passed to GetWidth.
3. RenderText no longer has side-effect on the aText. This forces me to keep a
copy of each run, so I hope it won't affect performance considerably.
Attachment #155034 - Attachment is obsolete: true
(In reply to comment #59)

> 3. RenderText no longer has side-effect on the aText. This forces me to keep a
> copy of each run, so I hope it won't affect performance considerably.

Currently nsTextBoxFrame creates a temporary copy |buffer| to pass to RenderText
to avoid the side effect. You could eliminate that.

Other than that I like the patch, and I can confirm that it works correctly on
Win32.
Attachment #162316 - Flags: superreview?(bzbarsky)
Attachment #162316 - Flags: review?(bzbarsky)
Comment on attachment 162316 [details] [diff] [review]
Patch (for both reordering and non-reordering gfx-s)

>Index: xul/base/src/nsTextBoxFrame.cpp

>+          posResolve.logicalIndex = mAccessKeyInfo->mAccesskeyIndex;

I'm crashing on this line when entering hebrew in the URI bar. You probably
need to null-check mAccessKeyInfo.
Changes from previous patch:
1. Don't keep unnecessary copy, since RenderText no longer modifies the input
string.
2. Check for null mAccessKeyInfo
Attachment #162316 - Attachment is obsolete: true
Attachment #162925 - Flags: superreview?(bzbarsky)
Attachment #162925 - Flags: review?(bzbarsky)
It's quite likely I'll need someone on irc to talk me through this patch in
order to review it properly... I don't really know this code, and more
importantly don't really know what it does.  In any case, I'm not going to be
able to look until at least tuesday.
Attachment #162316 - Flags: superreview?(bzbarsky)
Attachment #162316 - Flags: review?(bzbarsky)
Comment on attachment 162925 [details] [diff] [review]
Patch with smontagu's comment #60 and #61

>Index: base/public/nsBidiPresUtils.h

>+  nsresult RenderText(const PRUnichar*     aText,

Check whether there are other callers who no longer have to allocate and fix
them?

>Index: base/src/nsBidiPresUtils.cpp
>+  for(int nPosResolve=0; nPosResolve<aPosResolveCount; ++nPosResolve)

Space around the '<' please.

>-
>+      

Don't make random whitespace changes?

>+       * If aAccessKeyLeftWidth is not null, we return the width 
of the string

....

Remove this comment, as discussed.

>+          /*
>+           * If this run is only one character long, the width is the x-coord

What width?  You mean the visual position?  May be better to call it that.

>+          /*
>+           * Otherwise, we need to calculate the width of the part of the run to
>+           * the left of the mnemnonic.

"visually to the left of the character whose logical position is
posResolve->logicalIndex" perhaps?

 If the run is right-to-left, this will be
>+           * the substring from the character after the mnemonic up to the end of

"the width of the substring from the character after ..."

>+           * the run; if it is left-to-right it will be the substring from the

Again, "the width of the substring".


>+           * start of the run up to the character before the mnemonic.

Again, we don't really have a mnemonic in sight....  Rephrase the comment
accordingly?

>+              aRenderingContext.GetWidth(aText + posResolve->logicalIndex + 1,
>+                                         start + subRunLength - (posResolve->logicalIndex + 1),

I think the second arg would be clearer as |posResolve->visualIndex -
visualStart|.

>+                                         posResolve->logicalIndex - start,

Same here.  That makes it clearer that we really are looking at the same thing
in both cases...

For that matter, it may be a good idea to put the first arg of the GetWidth()
call in a suitably named local in each branch of that if, and only make one
GetWidth() call.  It would help in two ways: probably smaller code, and more
clarity as to what this magic "aText + posResolve->logicalIndex + 1" quantity
is (the logical start of the string we're measuring).

>Index: xul/base/src/nsTextBoxFrame.cpp

>+           mAccessKeyInfo->mBeforeWidth = posResolve.visualLeftTwips;

Given this, the code in nsTextBoxFrame::CalculateUnderline is somewhat
redundant.  Can part of it be skipped for the case when this code calculates an
mBeforeWidth?
Implements suggestions by comment #62.

I didn't find any more places where the string passed to RenderText is
duplicated to avoid the "side effect" which RenderText used to have. I only
changed all functions which used RenderText to pass a const PRUnichar*, since
the function now accepts a const string.
Attachment #162925 - Attachment is obsolete: true
Attachment #163634 - Flags: superreview?(bzbarsky)
Attachment #163634 - Flags: review?(bzbarsky)
Attachment #162925 - Flags: superreview?(bzbarsky)
Attachment #162925 - Flags: review?(bzbarsky)
Comment on attachment 163634 [details] [diff] [review]
Patch with bzbarsky's comment #62

>Index: base/src/nsBidiPresUtils.cpp
>+            nscoord subWidth;
>+            if (level & 1) {
...
>+              // The delta between the end of the run and the left part's beginning.
>+              PRInt32 visualLeftLength = posResolve->visualIndex - visualStart;
>+              aRenderingContext.GetWidth(visualLeftPart,
>+                                         visualLeftLength,
>+                                         subWidth, nsnull);
>+            }
>+            else {
....
>+              // The delta between the start of the run and the left part's end.
>+              PRInt32 visualLeftLength = posResolve->visualIndex - visualStart;
>+              aRenderingContext.GetWidth(visualLeftPart,
>+                                         visualLeftLength,
>+                                         subWidth, nsnull);
>+            }

The point was that the visuaLeftLength setting and the GetWidth() call are now
identical between the two branches and can be hoisted out of the if/else
entirely.  So you set the visualIndex and visualLeftPart differently (declare
before the if, set in the two branches), then use them.

>Index: xul/base/src/nsTextBoxFrame.cpp
>+        nsBidiDirection direction =
>+                                  (NS_STYLE_DIRECTION_RTL == 

No need for the linebreak after the '=' sign, methinks.  If the line is too
long, you need to outdent more on the line following the equals....

>+               aRenderingContext.GetWidth(mCroppedTitle.get(), mAccessKeyInfo->mAccesskeyIndex,
>+                                      mAccessKeyInfo->mBeforeWidth);

Fix the indent here.

r+sr=bzbarsky with those changes.
Attachment #163634 - Flags: superreview?(bzbarsky)
Attachment #163634 - Flags: superreview+
Attachment #163634 - Flags: review?(bzbarsky)
Attachment #163634 - Flags: review+
Attachment #163634 - Attachment is obsolete: true
Attachment #163812 - Attachment is obsolete: true
Comment on attachment 163816 [details] [diff] [review]
Better patch with bzbarsky's comment #66

Checking in base/public/nsBidiPresUtils.h;
/cvsroot/mozilla/layout/base/public/nsBidiPresUtils.h,v  <--  nsBidiPresUtils.h
new revision: 1.15; previous revision: 1.14
done
Checking in base/src/nsBidiPresUtils.cpp;
/cvsroot/mozilla/layout/base/src/nsBidiPresUtils.cpp,v	<-- 
nsBidiPresUtils.cpp

new revision: 1.56; previous revision: 1.55
done
Checking in html/base/src/nsPageFrame.cpp;
/cvsroot/mozilla/layout/html/base/src/nsPageFrame.cpp,v  <--  nsPageFrame.cpp
new revision: 3.141; previous revision: 3.140
done
Checking in xul/base/src/nsTextBoxFrame.cpp;
/cvsroot/mozilla/layout/xul/base/src/nsTextBoxFrame.cpp,v  <-- 
nsTextBoxFrame.c
pp
new revision: 1.76; previous revision: 1.75
done
Checking in xul/base/src/tree/src/nsTreeBodyFrame.cpp;
/cvsroot/mozilla/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp,v  <-- 
nsTree
BodyFrame.cpp
new revision: 1.234; previous revision: 1.233
done
Forgive me if this is a stupid question (I'm not a developer), but is it
possible to apply this patch to the aviary1.0 branch? It seems like this would
be a major usability enhancement. 
Comment on attachment 163816 [details] [diff] [review]
Better patch with bzbarsky's comment #66

Judging from the he-IL nightly builds of Firefox (in which the mnemonics bug is
clearly visible), this fix would be desired for the upcoming Firefox 1.0. Can
it be approved?
Attachment #163816 - Flags: approval-aviary?
Comment on attachment 163816 [details] [diff] [review]
Better patch with bzbarsky's comment #66

too late for 1.0
Attachment #163816 - Flags: approval-aviary? → approval-aviary-
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
*** Bug 291453 has been marked as a duplicate of this bug. ***
Blocks: Persian
Comment on attachment 163816 [details] [diff] [review]
Better patch with bzbarsky's comment #66

Requesting branch approval. This is important for all localizations in right-to-left languages
Attachment #163816 - Flags: approval-branch-1.8.1?(roc)
Comment on attachment 163816 [details] [diff] [review]
Better patch with bzbarsky's comment #66

Sorry, this is already in the 1.8 branch
Attachment #163816 - Flags: approval-branch-1.8.1?(roc)
Mass-assigning the new rtl keyword to RTL-related (see bug 349193).
Keywords: rtl
Component: Layout: BiDi Hebrew & Arabic → Layout: Text
QA Contact: xslf → layout.fonts-and-text
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: