summaryrefslogtreecommitdiffstats
path: root/webkit/glue/context_menu_client_impl.cc
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-28 18:39:02 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-28 18:39:02 +0000
commit124646932219f4cd17a3dc80393485e923deb1ba (patch)
tree9e20a8428541fb543b21503ce76e7a71251a8722 /webkit/glue/context_menu_client_impl.cc
parent96c622f5a85c0a745b5f66856aea419032c934af (diff)
downloadchromium_src-124646932219f4cd17a3dc80393485e923deb1ba.zip
chromium_src-124646932219f4cd17a3dc80393485e923deb1ba.tar.gz
chromium_src-124646932219f4cd17a3dc80393485e923deb1ba.tar.bz2
Context menus for text selections in editable boxes and links should include the Search menu item. Original patch by Brian Duff (see http://codereview.chromium.org/16510 ), r=me.
BUG=1925 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8815 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/context_menu_client_impl.cc')
-rw-r--r--webkit/glue/context_menu_client_impl.cc69
1 files changed, 35 insertions, 34 deletions
diff --git a/webkit/glue/context_menu_client_impl.cc b/webkit/glue/context_menu_client_impl.cc
index e2fbfcf..30f5e1a 100644
--- a/webkit/glue/context_menu_client_impl.cc
+++ b/webkit/glue/context_menu_client_impl.cc
@@ -108,23 +108,23 @@ void ContextMenuClientImpl::contextMenuDestroyed() {
// Figure out the URL of a page or subframe. Returns |page_type| as the type,
// which indicates page or subframe, or ContextNode::NONE if the URL could not
// be determined for some reason.
-static ContextNode::Type GetTypeAndURLFromFrame(WebCore::Frame* frame,
- GURL* url,
- ContextNode::Type page_type) {
- ContextNode::Type type = ContextNode::NONE;
+static ContextNode GetTypeAndURLFromFrame(WebCore::Frame* frame,
+ GURL* url,
+ ContextNode page_node) {
+ ContextNode node;
if (frame) {
WebCore::DocumentLoader* dl = frame->loader()->documentLoader();
if (dl) {
WebDataSource* ds = static_cast<WebDocumentLoaderImpl*>(dl)->
GetDataSource();
if (ds) {
- type = page_type;
+ node = page_node;
*url = ds->HasUnreachableURL() ? ds->GetUnreachableURL()
: ds->GetRequest().GetURL();
}
}
}
- return type;
+ return node;
}
WebCore::PlatformMenuDescription
@@ -144,19 +144,17 @@ WebCore::PlatformMenuDescription
WebCore::IntPoint menu_point =
selected_frame->view()->contentsToWindow(r.point());
- ContextNode::Type type = ContextNode::NONE;
+ ContextNode node;
// Links, Images and Image-Links take preference over all else.
WebCore::KURL link_url = r.absoluteLinkURL();
if (!link_url.isEmpty()) {
- type = ContextNode::LINK;
+ node.type |= ContextNode::LINK;
}
WebCore::KURL image_url = r.absoluteImageURL();
if (!image_url.isEmpty()) {
- type = ContextNode::IMAGE;
+ node.type |= ContextNode::IMAGE;
}
- if (!image_url.isEmpty() && !link_url.isEmpty())
- type = ContextNode::IMAGE_LINK;
// If it's not a link, an image or an image link, show a selection menu or a
// more generic page menu.
@@ -168,37 +166,40 @@ WebCore::PlatformMenuDescription
std::wstring frame_encoding;
// Send the frame and page URLs in any case.
- ContextNode::Type frame_type = ContextNode::NONE;
- ContextNode::Type page_type =
+ ContextNode frame_node = ContextNode(ContextNode::NONE);
+ ContextNode page_node =
GetTypeAndURLFromFrame(webview_->main_frame()->frame(),
&page_url,
- ContextNode::PAGE);
+ ContextNode(ContextNode::PAGE));
if (selected_frame != webview_->main_frame()->frame()) {
- frame_type = GetTypeAndURLFromFrame(selected_frame,
+ frame_node = GetTypeAndURLFromFrame(selected_frame,
&frame_url,
- ContextNode::FRAME);
+ ContextNode(ContextNode::FRAME));
frame_encoding = webkit_glue::StringToStdWString(
selected_frame->loader()->encoding());
}
+
+ if (r.isSelected()) {
+ node.type |= ContextNode::SELECTION;
+ selection_text_string = CollapseWhitespace(
+ webkit_glue::StringToStdWString(selected_frame->selectedText()),
+ false);
+ }
+
+ if (r.isContentEditable()) {
+ node.type |= ContextNode::EDITABLE;
+ if (webview_->GetFocusedWebCoreFrame()->editor()->
+ isContinuousSpellCheckingEnabled()) {
+ misspelled_word_string = GetMisspelledWord(default_menu,
+ selected_frame);
+ }
+ }
- if (type == ContextNode::NONE) {
- if (r.isContentEditable()) {
- type = ContextNode::EDITABLE;
- if (webview_->GetFocusedWebCoreFrame()->editor()->
- isContinuousSpellCheckingEnabled()) {
- misspelled_word_string = GetMisspelledWord(default_menu,
- selected_frame);
- }
- } else if (r.isSelected()) {
- type = ContextNode::SELECTION;
- selection_text_string =
- CollapseWhitespace(
- webkit_glue::StringToStdWString(selected_frame->selectedText()),
- false);
- } else if (selected_frame != webview_->main_frame()->frame()) {
- type = frame_type;
+ if (node.type == ContextNode::NONE) {
+ if (selected_frame != webview_->main_frame()->frame()) {
+ node = frame_node;
} else {
- type = page_type;
+ node = page_node;
}
}
@@ -232,7 +233,7 @@ WebCore::PlatformMenuDescription
WebViewDelegate* d = webview_->delegate();
if (d) {
d->ShowContextMenu(webview_,
- type,
+ node,
menu_point.x(),
menu_point.y(),
webkit_glue::KURLToGURL(link_url),