Merge lp:~mconley/globalmenu-extension/bug710149-escape-underscores into lp:globalmenu-extension

Proposed by Mike Conley
Status: Merged
Merged at revision: 81
Proposed branch: lp:~mconley/globalmenu-extension/bug710149-escape-underscores
Merge into: lp:globalmenu-extension
Diff against target: 53 lines (+18/-7)
1 file modified
extensions/globalmenu/components/src/uGlobalMenuObject.cpp (+18/-7)
To merge this branch: bzr merge lp:~mconley/globalmenu-extension/bug710149-escape-underscores
Reviewer Review Type Date Requested Status
Chris Coulson Approve
Review via email: mp+48652@code.launchpad.net

Description of the change

Here's a patch for bug 710149 (underscores are not being escaped properly). Any/all feedback welcome.

To post a comment you must log in.
Revision history for this message
Chris Coulson (chrisccoulson) wrote :

Thanks!

Feel free to push this to lp:globalmenu-extension, with 1 minor adjustment though - could you please use PRBool rather than bool for foundAccessKey?

Thanks

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'extensions/globalmenu/components/src/uGlobalMenuObject.cpp'
2--- extensions/globalmenu/components/src/uGlobalMenuObject.cpp 2011-02-03 00:44:41 +0000
3+++ extensions/globalmenu/components/src/uGlobalMenuObject.cpp 2011-02-04 19:26:11 +0000
4@@ -478,6 +478,7 @@
5 // Gecko stores the label and access key in separate attributes
6 // so we need to convert label="Foo"/accesskey="F" in to
7 // label="_Foo" for dbusmenu
8+
9 nsAutoString label;
10 mContent->GetAttr(kNameSpaceID_None, uWidgetAtoms::label, label);
11
12@@ -489,24 +490,34 @@
13 PRUnichar *end = label.EndWriting();
14 int length = label.Length();
15 int pos = 0;
16+ bool foundAccessKey = false;
17
18 while(cur < end) {
19- if(*cur != *key) {
20- cur++;
21- pos++;
22- } else {
23+ if((*cur == *key && !foundAccessKey) || *cur == PRUnichar('_')) {
24+
25 length += 1;
26 label.SetLength(length);
27 int newLength = label.Length();
28 if(length != newLength)
29- break;
30+ break;
31+
32 cur = label.BeginWriting() + pos;
33+ end = label.EndWriting();
34 memmove(cur + 1, cur, (length - 1 - pos) * sizeof(PRUnichar));
35 // \^/
36 *cur = PRUnichar('_'); // Yeah!
37 // v
38- break;
39- }
40+
41+ if(*cur == *key)
42+ foundAccessKey = true;
43+
44+ cur += 2;
45+ pos += 2;
46+
47+ } else {
48+ cur++;
49+ pos++;
50+ }
51 }
52
53 // Ellipsize long labels. I've picked an arbitrary length here

Subscribers

People subscribed via source and target branches