WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
32200
Web Inspector: provide custom context menu in the front-end window.
https://bugs.webkit.org/show_bug.cgi?id=32200
Summary
Web Inspector: provide custom context menu in the front-end window.
Pavel Feldman
Reported
2009-12-06 12:38:58 PST
Created
attachment 44365
[details]
[IMAGE] Screenshot while running with patch. This patch extends ContextMenuController in order to allow custom context menus on pages. So far, inspector is the only client of the new API, but this might change once HTML5's contextmenu is implemented.
Attachments
[IMAGE] Screenshot while running with patch.
(76.23 KB, image/png)
2009-12-06 12:38 PST
,
Pavel Feldman
no flags
Details
[PATCH] Proposed change
(30.92 KB, patch)
2009-12-06 12:48 PST
,
Pavel Feldman
timothy
: review+
pfeldman
: commit-queue-
Details
Formatted Diff
Diff
View All
Add attachment
proposed patch, testcase, etc.
Pavel Feldman
Comment 1
2009-12-06 12:48:45 PST
Created
attachment 44366
[details]
[PATCH] Proposed change
Timothy Hatcher
Comment 2
2009-12-07 10:48:40 PST
Comment on
attachment 44366
[details]
[PATCH] Proposed change
> + class MenuSelectionHandler : public ContextMenuSelectionHandler > + {
Brace should be on the same line.
> + virtual ~MenuSelectionHandler() {}
I think we informally like a space between the braces. { } vs {}.
> + MenuSelectionHandler(InspectorFrontendHost* frontendHost) > + : m_frontendHost(frontendHost) > + { > + }
We informally like to put empty constructors on one line.
> + this._appendItem(WebInspector.UIString("Edit as HTML"), this._noop.bind(this)); > + this._appendItem(WebInspector.UIString("Add attribute"), this._noop.bind(this)); > + this._appendSeparator(); > + this._appendItem(WebInspector.UIString("Copy"), this._copy.bind(this)); > + this._appendItem(WebInspector.UIString("Delete"), this._delete.bind(this));
This confused me, since those file is generic. We should land this file mostly empty until it is ready to work.
> + _appendItem: function(label, handler) > + { > + var id = this._items.length; > + this._items.push({id: id, label: label}); > + this._handlers[id] = handler; > + }, > + > + _appendSeparator: function() > + { > + this._items.push({}); > + },
I think in the end these functions will be publicly used and should drop the underscore. But maybe I don't understand how the final design will work.
> +WebInspector.documentContextMenu = function(event)
Maybe contextMenuEventFired is a more descriptive name.
> + if (item->action() >= ContextMenuItemBaseCustomTag) { > + ASSERT(m_selectionHandler); > + m_selectionHandler->contextMenuItemSelected(item); > + return; > + }
Does ContextMenuItemBaseApplicationTag get handled before this block? What prevents another tag higher that isn't a "ContextMenuItemBaseCustomTag" from hitting this?
> + class ContextMenuSelectionHandler : public RefCounted<ContextMenuSelectionHandler> > + {
Brace should be on the same line.
> + ContextMenuSelectionHandler() {} > + virtual ~ContextMenuSelectionHandler() {};
Put a space in the braces.
Pavel Feldman
Comment 3
2009-12-07 12:12:03 PST
(In reply to
comment #2
)
> (From update of
attachment 44366
[details]
) > > > + class MenuSelectionHandler : public ContextMenuSelectionHandler > > + { > > Brace should be on the same line. >
Done.
> > > + virtual ~MenuSelectionHandler() {} > > I think we informally like a space between the braces. { } vs {}.
> Done.
> > > + MenuSelectionHandler(InspectorFrontendHost* frontendHost) > > + : m_frontendHost(frontendHost) > > + { > > + } > > We informally like to put empty constructors on one line. >
Done.
> > > + this._appendItem(WebInspector.UIString("Edit as HTML"), this._noop.bind(this)); > > + this._appendItem(WebInspector.UIString("Add attribute"), this._noop.bind(this)); > > + this._appendSeparator(); > > + this._appendItem(WebInspector.UIString("Copy"), this._copy.bind(this)); > > + this._appendItem(WebInspector.UIString("Delete"), this._delete.bind(this)); > > This confused me, since those file is generic. We should land this file mostly > empty until it is ready to work. >
I'll migrate to a context-per view schema in subsequent change. So far this context menu triggering is anyway commented out.
> > > + _appendItem: function(label, handler) > > + { > > + var id = this._items.length; > > + this._items.push({id: id, label: label}); > > + this._handlers[id] = handler; > > + }, > > + > > + _appendSeparator: function() > > + { > > + this._items.push({}); > > + }, > > I think in the end these functions will be publicly used and should drop the > underscore. But maybe I don't understand how the final design will work. >
They will be public, yes.
> > > +WebInspector.documentContextMenu = function(event) > > Maybe contextMenuEventFired is a more descriptive name. > >
Done.
> > + if (item->action() >= ContextMenuItemBaseCustomTag) { > > + ASSERT(m_selectionHandler); > > + m_selectionHandler->contextMenuItemSelected(item); > > + return; > > + } > > Does ContextMenuItemBaseApplicationTag get handled before this block? What > prevents another tag higher that isn't a "ContextMenuItemBaseCustomTag" from > hitting this? >
There is a following check above: if (item->action() >= ContextMenuItemBaseApplicationTag) { m_client->contextMenuItemSelected(item, m_contextMenu.get()); return; }
> > > + class ContextMenuSelectionHandler : public RefCounted<ContextMenuSelectionHandler> > > + { > > Brace should be on the same line. > >
Done.
> > + ContextMenuSelectionHandler() {} > > + virtual ~ContextMenuSelectionHandler() {}; > > Put a space in the braces.
Done.
Pavel Feldman
Comment 4
2009-12-07 12:16:32 PST
Comment on
attachment 44366
[details]
[PATCH] Proposed change I'll land manually with v8's [Custom] stub for showContextMenu.
Pavel Feldman
Comment 5
2009-12-08 02:20:09 PST
Committing to
http://svn.webkit.org/repository/webkit/trunk
... C WebCore/inspector/InspectorFrontendHost.idl => WebCore/inspector/front-end/ContextMenu.js C WebCore/inspector/InspectorFrontendHost.idl => WebCore/page/ContextMenuSelectionHandler.h M WebCore/ChangeLog M WebCore/English.lproj/localizedStrings.js M WebCore/GNUmakefile.am M WebCore/WebCore.gypi M WebCore/WebCore.pro M WebCore/WebCore.vcproj/WebCore.vcproj M WebCore/WebCore.xcodeproj/project.pbxproj M WebCore/bindings/js/JSInspectorFrontendHostCustom.cpp M WebCore/bindings/v8/custom/V8CustomBinding.h M WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp M WebCore/inspector/InspectorFrontend.cpp M WebCore/inspector/InspectorFrontend.h M WebCore/inspector/InspectorFrontendHost.cpp M WebCore/inspector/InspectorFrontendHost.h M WebCore/inspector/InspectorFrontendHost.idl M WebCore/inspector/front-end/WebKit.qrc M WebCore/inspector/front-end/inspector.html M WebCore/inspector/front-end/inspector.js M WebCore/page/ContextMenuController.cpp M WebCore/page/ContextMenuController.h M WebCore/platform/ContextMenu.cpp M WebCore/platform/ContextMenuItem.h Committed
r51839
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug