Changeset 74964 in webkit
- Timestamp:
- Jan 4, 2011 3:53:24 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r74963 r74964 1 2011-01-04 Benjamin Poulain <benjamin.poulain@nokia.com> 2 3 Reviewed by Kenneth Rohde Christiansen. 4 5 [Qt] [WK2] create an initial implementation of the context menu handling for WebKit 2 6 https://bugs.webkit.org/show_bug.cgi?id=51825 7 8 Implement contextMenuItemVector() for Qt, this method is used in WebKit 2 to get the 9 platform independent menu informations. 10 11 * platform/qt/ContextMenuQt.cpp: 12 (WebCore::contextMenuItemVector): 13 1 14 2011-01-04 Sheriff Bot <webkit.review.bot@gmail.com> 2 15 -
trunk/WebCore/platform/qt/ContextMenuQt.cpp
r73535 r74964 74 74 } 75 75 76 Vector<ContextMenuItem> contextMenuItemVector( PlatformMenuDescription)76 Vector<ContextMenuItem> contextMenuItemVector(const QList<ContextMenuItem>* items) 77 77 { 78 // FIXME - Implement 79 return Vector<ContextMenuItem>(); 78 int itemCount = items->size(); 79 Vector<ContextMenuItem> menuItemVector(itemCount); 80 for (int i = 0; i < itemCount; ++i) 81 menuItemVector.append(items->at(i)); 82 return menuItemVector; 80 83 } 81 84 -
trunk/WebKit2/ChangeLog
r74941 r74964 1 2011-01-04 Benjamin Poulain <benjamin.poulain@nokia.com> 2 3 Reviewed by Kenneth Rohde Christiansen. 4 5 [Qt] [WK2] create an initial implementation of the context menu handling for WebKit 2 6 https://bugs.webkit.org/show_bug.cgi?id=51825 7 8 Implement the necessary methods to get a basic context menu working for Qt. 9 10 Only 4 basic WebAction have been added on the UIProcess side: back, forward, stop and reload. 11 12 * UIProcess/API/qt/qgraphicswkview.cpp: 13 (QGraphicsWKView::QGraphicsWKView): 14 (QGraphicsWKView::showContextMenu): 15 (QGraphicsWKViewPrivate::QGraphicsWKViewPrivate): 16 * UIProcess/API/qt/qgraphicswkview.h: 17 * UIProcess/API/qt/qwkpage.cpp: 18 (QWKPagePrivate::createContextMenuProxy): 19 * UIProcess/API/qt/qwkpage.h: 20 * UIProcess/qt/WebContextMenuProxyQt.cpp: 21 (WebKit::webActionForContextMenuAction): 22 (WebKit::WebContextMenuProxyQt::WebContextMenuProxyQt): 23 (WebKit::WebContextMenuProxyQt::create): 24 (WebKit::WebContextMenuProxyQt::showContextMenu): 25 (WebKit::WebContextMenuProxyQt::hideContextMenu): 26 (WebKit::WebContextMenuProxyQt::createContextMenu): 27 * UIProcess/qt/WebContextMenuProxyQt.h: 28 1 29 2011-01-03 Yi Shen <yi.4.shen@nokia.com> 2 30 -
trunk/WebKit2/UIProcess/API/qt/qgraphicswkview.cpp
r74284 r74964 29 29 #include "qwkpage.h" 30 30 #include "qwkpage_p.h" 31 #include <QApplication> 31 32 #include <QCursor> 32 33 #include <QGraphicsSceneMouseEvent> 33 34 #include <QGraphicsView> 35 #include <QMenu> 34 36 #include <QPainter> 35 37 #include <QScrollBar> … … 53 55 QGraphicsWKView* q; 54 56 QWKPage* page; 57 QMenu* activeMenu; 55 58 RunLoop::Timer<QGraphicsWKViewPrivate> m_scaleCommitTimer; 56 59 bool m_isChangingScale; … … 90 93 connect(d->page, SIGNAL(cursorChanged(const QCursor&)), this, SLOT(updateCursor(const QCursor&))); 91 94 connect(d->page, SIGNAL(focusNextPrevChild(bool)), this, SLOT(focusNextPrevChildCallback(bool))); 95 connect(d->page, SIGNAL(showContextMenu(QMenu*)), this, SLOT(showContextMenu(QMenu*))); 92 96 } 93 97 … … 323 327 } 324 328 329 void QGraphicsWKView::showContextMenu(QMenu* menu) 330 { 331 // Remove the active menu in case this function is called twice. 332 if (d->activeMenu) 333 d->activeMenu->hide(); 334 335 d->activeMenu = menu; 336 337 QWidget* view = 0; 338 if (QGraphicsScene* myScene = scene()) { 339 const QList<QGraphicsView*> views = myScene->views(); 340 for (unsigned i = 0; i < views.size(); ++i) { 341 if (views.at(i) == QApplication::focusWidget()) { 342 view = views.at(i); 343 break; 344 } 345 } 346 if (!view) 347 view = views.value(0, 0); 348 } 349 if (view) 350 menu->setParent(view, menu->windowFlags()); 351 menu->exec(view->mapToGlobal(menu->pos())); 352 if (d->activeMenu == menu) 353 d->activeMenu = 0; 354 } 355 325 356 void QGraphicsWKView::takeSnapshot(const QSize& size, const QRect& contentsRect) 326 357 { … … 336 367 QGraphicsWKViewPrivate::QGraphicsWKViewPrivate(QGraphicsWKView* view) 337 368 : q(view) 369 , activeMenu(0) 338 370 , m_scaleCommitTimer(RunLoop::current(), this, &QGraphicsWKViewPrivate::commitScale) 339 371 , m_isChangingScale(false) -
trunk/WebKit2/UIProcess/API/qt/qgraphicswkview.h
r73716 r74964 89 89 virtual void focusOutEvent(QFocusEvent*); 90 90 91 private Q_SLOTS: 92 void showContextMenu(QMenu*); 93 91 94 private: 92 95 Q_PRIVATE_SLOT(d, void onScaleChanged()); -
trunk/WebKit2/UIProcess/API/qt/qwkpage.cpp
r74418 r74964 144 144 PassRefPtr<WebContextMenuProxy> QWKPagePrivate::createContextMenuProxy(WebPageProxy*) 145 145 { 146 return WebContextMenuProxyQt::create( );146 return WebContextMenuProxyQt::create(q); 147 147 } 148 148 -
trunk/WebKit2/UIProcess/API/qt/qwkpage.h
r73716 r74964 122 122 Q_SIGNAL void zoomableAreaFound(const QRect&); 123 123 Q_SIGNAL void focusNextPrevChild(bool); 124 Q_SIGNAL void showContextMenu(QMenu*); 124 125 125 126 protected: -
trunk/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp
r71585 r74964 27 27 #include "WebContextMenuProxyQt.h" 28 28 29 #include "NotImplemented.h" 29 #include <IntPoint.h> 30 #include <WebContextMenuItemData.h> 31 #include <qmenu.h> 32 #include <qwkpage.h> 30 33 31 34 using namespace WebCore; … … 33 36 namespace WebKit { 34 37 35 inline WebContextMenuProxyQt::WebContextMenuProxyQt() 38 static QWKPage::WebAction webActionForContextMenuAction(WebCore::ContextMenuAction action) 39 { 40 switch (action) { 41 case WebCore::ContextMenuItemTagGoBack: 42 return QWKPage::Back; 43 case WebCore::ContextMenuItemTagGoForward: 44 return QWKPage::Forward; 45 case WebCore::ContextMenuItemTagStop: 46 return QWKPage::Stop; 47 case WebCore::ContextMenuItemTagReload: 48 return QWKPage::Reload; 49 default: 50 break; 51 } 52 return QWKPage::NoWebAction; 53 } 54 55 WebContextMenuProxyQt::WebContextMenuProxyQt(QWKPage* page) 56 : m_page(page) 36 57 { 37 58 } 38 59 39 PassRefPtr<WebContextMenuProxyQt> WebContextMenuProxyQt::create( )60 PassRefPtr<WebContextMenuProxyQt> WebContextMenuProxyQt::create(QWKPage* page) 40 61 { 41 return adoptRef(new WebContextMenuProxyQt );62 return adoptRef(new WebContextMenuProxyQt(page)); 42 63 } 43 64 44 void WebContextMenuProxyQt::showContextMenu(const IntPoint& , const Vector<WebContextMenuItemData>&)65 void WebContextMenuProxyQt::showContextMenu(const IntPoint& position, const Vector<WebContextMenuItemData>& items) 45 66 { 46 notImplemented(); 67 if (QMenu* menu = createContextMenu(items)) { 68 menu->move(position); 69 emit m_page->showContextMenu(menu); 70 } 47 71 } 48 72 49 73 void WebContextMenuProxyQt::hideContextMenu() 50 74 { 51 notImplemented(); 75 } 76 77 QMenu* WebContextMenuProxyQt::createContextMenu(const Vector<WebContextMenuItemData>& items) 78 { 79 QMenu* menu = new QMenu; 80 for (int i = 0; i < items.size(); ++i) { 81 const WebContextMenuItemData& item = items.at(i); 82 switch (item.type()) { 83 case WebCore::CheckableActionType: /* fall through */ 84 case WebCore::ActionType: { 85 QWKPage::WebAction action = webActionForContextMenuAction(item.action()); 86 QAction* qtAction = m_page->action(action); 87 if (qtAction) { 88 qtAction->setEnabled(item.enabled()); 89 qtAction->setChecked(item.checked()); 90 qtAction->setCheckable(item.type() == WebCore::CheckableActionType); 91 92 menu->addAction(qtAction); 93 } 94 break; 95 } 96 case WebCore::SeparatorType: 97 menu->addSeparator(); 98 break; 99 case WebCore::SubmenuType: 100 if (QMenu *subMenu = createContextMenu(item.submenu())) { 101 subMenu->setTitle(item.title()); 102 menu->addAction(subMenu->menuAction()); 103 } 104 105 break; 106 } 107 } 108 109 // Do not show sub-menus with just disabled actions. 110 if (menu->isEmpty()) { 111 delete menu; 112 return 0; 113 } 114 bool isAnyActionEnabled = false; 115 QList<QAction *> actions = menu->actions(); 116 for (int i = 0; i < actions.count(); ++i) { 117 if (actions.at(i)->isVisible()) 118 isAnyActionEnabled |= actions.at(i)->isEnabled(); 119 } 120 if (!isAnyActionEnabled) { 121 delete menu; 122 return 0; 123 } 124 125 return menu; 52 126 } 53 127 -
trunk/WebKit2/UIProcess/qt/WebContextMenuProxyQt.h
r71585 r74964 30 30 #include "WebContextMenuProxy.h" 31 31 32 class QMenu; 33 class QWKPage; 34 class WebContextMenuItemData; 35 32 36 namespace WebKit { 33 37 34 38 class WebContextMenuProxyQt : public WebContextMenuProxy { 35 39 public: 36 static PassRefPtr<WebContextMenuProxyQt> create( );40 static PassRefPtr<WebContextMenuProxyQt> create(QWKPage*); 37 41 38 42 private: 39 WebContextMenuProxyQt( );43 WebContextMenuProxyQt(QWKPage*); 40 44 41 45 virtual void showContextMenu(const WebCore::IntPoint&, const Vector<WebContextMenuItemData>&); 42 46 virtual void hideContextMenu(); 47 48 QMenu* createContextMenu(const Vector<WebContextMenuItemData>& items); 49 50 QWKPage* const m_page; 43 51 }; 44 52
Note: See TracChangeset
for help on using the changeset viewer.