diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index 8f3fcebb2b6..f4d14bc73b1 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -1490,9 +1490,21 @@ static nsresult NSAPI nsContextMenuListener_OnShowContextMenu(nsIContextMenuList
switch(aContextFlags) {
case CONTEXT_NONE:
case CONTEXT_DOCUMENT:
- case CONTEXT_TEXT:
- dwID = CONTEXT_MENU_DEFAULT;
+ case CONTEXT_TEXT: {
+ nsISelection *selection;
+
+ nsres = nsIDOMHTMLDocument_GetSelection(This->doc->basedoc.doc_node->nsdoc, &selection);
+ if(NS_SUCCEEDED(nsres) && selection) {
+ cpp_bool is_collapsed;
+
+ /* FIXME: Check if the click was inside selection. */
+ nsres = nsISelection_GetIsCollapsed(selection, &is_collapsed);
+ nsISelection_Release(selection);
+ if(NS_SUCCEEDED(nsres) && !is_collapsed)
+ dwID = CONTEXT_MENU_TEXTSELECT;
+ }
break;
+ }
case CONTEXT_IMAGE:
case CONTEXT_IMAGE|CONTEXT_LINK:
dwID = CONTEXT_MENU_IMAGE;