summaryrefslogtreecommitdiffstats
path: root/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm')
-rw-r--r--Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm47
1 files changed, 33 insertions, 14 deletions
diff --git a/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm b/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm
index 481e8c5..61713fc 100644
--- a/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm
+++ b/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,13 +23,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebPopupMenuProxyMac.h"
+#import "config.h"
+#import "WebPopupMenuProxyMac.h"
-#include "PageClientImpl.h"
-#include "PlatformPopupMenuData.h"
-#include "WKView.h"
-#include "WebPopupItem.h"
-#include <WebKitSystemInterface.h>
+#import "PageClientImpl.h"
+#import "PlatformPopupMenuData.h"
+#import "WKView.h"
+#import "WebPopupItem.h"
+#import <WebKitSystemInterface.h>
using namespace WebCore;
@@ -47,7 +48,7 @@ WebPopupMenuProxyMac::~WebPopupMenuProxyMac()
[m_popup.get() setControlView:nil];
}
-void WebPopupMenuProxyMac::populate(const Vector<WebPopupItem>& items)
+void WebPopupMenuProxyMac::populate(const Vector<WebPopupItem>& items, TextDirection menuTextDirection)
{
if (m_popup)
[m_popup.get() removeAllItems];
@@ -63,20 +64,38 @@ void WebPopupMenuProxyMac::populate(const Vector<WebPopupItem>& items)
if (items[i].m_type == WebPopupItem::Seperator)
[[m_popup.get() menu] addItem:[NSMenuItem separatorItem]];
else {
- [m_popup.get() addItemWithTitle:nsStringFromWebCoreString(items[i].m_text)];
- NSMenuItem* menuItem = [m_popup.get() lastItem];
+ [m_popup.get() addItemWithTitle:@""];
+ NSMenuItem *menuItem = [m_popup.get() lastItem];
+
+ RetainPtr<NSMutableParagraphStyle> paragraphStyle(AdoptNS, [[NSParagraphStyle defaultParagraphStyle] mutableCopy]);
+ NSWritingDirection writingDirection = items[i].m_textDirection == LTR ? NSWritingDirectionLeftToRight : NSWritingDirectionRightToLeft;
+ [paragraphStyle.get() setBaseWritingDirection:writingDirection];
+ [paragraphStyle.get() setAlignment:menuTextDirection == LTR ? NSLeftTextAlignment : NSRightTextAlignment];
+ RetainPtr<NSMutableDictionary> attributes(AdoptNS, [[NSMutableDictionary alloc] initWithObjectsAndKeys:
+ paragraphStyle.get(), NSParagraphStyleAttributeName,
+ [m_popup.get() font], NSFontAttributeName,
+ nil]);
+ if (items[i].m_hasTextDirectionOverride) {
+ RetainPtr<NSNumber> writingDirectionValue(AdoptNS, [[NSNumber alloc] initWithInteger:writingDirection + NSTextWritingDirectionOverride]);
+ RetainPtr<NSArray> writingDirectionArray(AdoptNS, [[NSArray alloc] initWithObjects:writingDirectionValue.get(), nil]);
+ [attributes.get() setObject:writingDirectionArray.get() forKey:NSWritingDirectionAttributeName];
+ }
+ RetainPtr<NSAttributedString> string(AdoptNS, [[NSAttributedString alloc] initWithString:nsStringFromWebCoreString(items[i].m_text) attributes:attributes.get()]);
+
+ [menuItem setAttributedTitle:string.get()];
[menuItem setEnabled:items[i].m_isEnabled];
[menuItem setToolTip:nsStringFromWebCoreString(items[i].m_toolTip)];
}
}
}
-void WebPopupMenuProxyMac::showPopupMenu(const IntRect& rect, const Vector<WebPopupItem>& items, const PlatformPopupMenuData&, int32_t selectedIndex)
+void WebPopupMenuProxyMac::showPopupMenu(const IntRect& rect, TextDirection textDirection, const Vector<WebPopupItem>& items, const PlatformPopupMenuData&, int32_t selectedIndex)
{
- populate(items);
+ populate(items, textDirection);
[m_popup.get() attachPopUpWithFrame:rect inView:m_webView];
[m_popup.get() selectItemAtIndex:selectedIndex];
+ [m_popup.get() setUserInterfaceLayoutDirection:textDirection == LTR ? NSUserInterfaceLayoutDirectionLeftToRight : NSUserInterfaceLayoutDirectionRightToLeft];
NSMenu* menu = [m_popup.get() menu];
@@ -97,7 +116,8 @@ void WebPopupMenuProxyMac::showPopupMenu(const IntRect& rect, const Vector<WebPo
[m_popup.get() dismissPopUp];
[dummyView.get() removeFromSuperview];
- m_client->valueChangedForPopupMenu(this, [m_popup.get() indexOfSelectedItem]);
+ if (m_client)
+ m_client->valueChangedForPopupMenu(this, [m_popup.get() indexOfSelectedItem]);
}
void WebPopupMenuProxyMac::hidePopupMenu()
@@ -105,5 +125,4 @@ void WebPopupMenuProxyMac::hidePopupMenu()
[m_popup.get() dismissPopUp];
}
-
} // namespace WebKit