Changeset 94979 in webkit
- Timestamp:
- Sep 12, 2011 2:41:06 PM (13 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r94960 r94979 1 2011-09-12 Igor Oliveira <igor.oliveira@openbossa.org> 2 3 [Qt] [WK2] implement support to upload files in Qt WebKit2 4 https://bugs.webkit.org/show_bug.cgi?id=67228 5 6 This patch implements support to upload files in the Desktop Qt WebKit2 implementation. 7 8 Reviewed by Andreas Kling. 9 10 * Shared/WebOpenPanelParameters.h: 11 (WebKit::WebOpenPanelParameters::selectedFileNames): 12 * UIProcess/API/qt/qdesktopwebview.cpp: 13 (QDesktopWebViewPrivate::chooseFiles): 14 (QDesktopWebViewPrivate::onOpenPanelFilesSelected): 15 (QDesktopWebViewPrivate::onOpenPanelFinished): 16 * UIProcess/API/qt/qdesktopwebview_p.h: 17 * UIProcess/qt/ClientImpl.cpp: 18 19 qt_wk_runOpenPanel supports single and multiple files selection. 20 21 (qt_wk_runOpenPanel): 22 * UIProcess/qt/ClientImpl.h: 23 * UIProcess/qt/QtWebPageProxy.cpp: 24 (QtWebPageProxy::init): 25 * UIProcess/qt/TouchViewInterface.h: 26 (WebKit::TouchViewInterface::chooseFiles): 27 * UIProcess/qt/ViewInterface.h: 28 1 29 2011-09-12 Alexis Menard <alexis.menard@openbossa.org> 2 30 -
trunk/Source/WebKit2/Shared/WebOpenPanelParameters.h
r74139 r94979 56 56 57 57 bool allowMultipleFiles() const { return m_data.allowMultipleFiles; } 58 Vector<String> selectedFileNames() const { return m_data.filenames; } 58 59 59 60 private: -
trunk/Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp
r93784 r94979 29 29 #include <QtDeclarative/qsgitem.h> 30 30 #include <QtGui/QCursor> 31 #include <QtGui/QFileDialog> 31 32 #include <QtGui/QFocusEvent> 32 33 #include <QtGui/QGraphicsSceneEvent> … … 36 37 #include <QtGui/QTouchEvent> 37 38 #include <QtGui/QWheelEvent> 39 #include <WKOpenPanelResultListener.h> 38 40 39 41 QDesktopWebViewPrivate::QDesktopWebViewPrivate(QDesktopWebView* q, WKContextRef contextRef, WKPageGroupRef pageGroupRef) … … 381 383 } 382 384 385 void QDesktopWebViewPrivate::chooseFiles(WKOpenPanelResultListenerRef listenerRef, const QStringList& selectedFileNames, ViewInterface::FileChooserType type) 386 { 387 #ifndef QT_NO_FILEDIALOG 388 openPanelResultListener = listenerRef; 389 390 // Qt does not support multiple files suggestion, so we get just the first suggestion. 391 QString selectedFileName; 392 if (!selectedFileNames.isEmpty()) 393 selectedFileName = selectedFileNames.at(0); 394 395 QWidget* widget = q->canvas(); 396 fileDialog = new QFileDialog(widget, QString(), selectedFileName); 397 fileDialog->open(this, SLOT(onOpenPanelFilesSelected())); 398 399 connect(fileDialog, SIGNAL(finished(int)), this, SLOT(onOpenPanelFinished(int))); 400 #endif 401 } 402 403 void QDesktopWebViewPrivate::onOpenPanelFilesSelected() 404 { 405 const QStringList fileList = fileDialog->selectedFiles(); 406 Vector<RefPtr<APIObject> > wkFiles(fileList.size()); 407 408 for (unsigned i = 0; i < fileList.size(); ++i) 409 wkFiles[i] = WebURL::create(QUrl::fromLocalFile(fileList.at(i)).toString()); 410 411 WKOpenPanelResultListenerChooseFiles(openPanelResultListener, toAPI(ImmutableArray::adopt(wkFiles).leakRef())); 412 } 413 414 void QDesktopWebViewPrivate::onOpenPanelFinished(int result) 415 { 416 if (result == QDialog::Rejected) 417 WKOpenPanelResultListenerCancel(openPanelResultListener); 418 419 fileDialog->deleteLater(); 420 fileDialog = 0; 421 } 422 383 423 static PolicyInterface::PolicyAction toPolicyAction(QDesktopWebView::NavigationPolicy policy) 384 424 { -
trunk/Source/WebKit2/UIProcess/API/qt/qdesktopwebview_p.h
r93427 r94979 26 26 #include "ViewInterface.h" 27 27 28 #include <QtCore/QObject> 29 28 30 class QDesktopWebView; 31 class QFileDialog; 29 32 30 class QDesktopWebViewPrivate : public WebKit::ViewInterface, public WebKit::PolicyInterface33 class QDesktopWebViewPrivate : public QObject, public WebKit::ViewInterface, public WebKit::PolicyInterface 31 34 { 35 Q_OBJECT 32 36 public: 33 37 QDesktopWebViewPrivate(QDesktopWebView*, WKContextRef = 0, WKPageGroupRef = 0); … … 40 44 bool isCrashed; 41 45 QWebNavigationController* navigationController; 46 47 private Q_SLOTS: 48 void onOpenPanelFilesSelected(); 49 void onOpenPanelFinished(int result); 42 50 43 51 private: … … 73 81 virtual void didRelaunchProcess(); 74 82 83 virtual void chooseFiles(WKOpenPanelResultListenerRef, const QStringList& selectedFileNames, ViewInterface::FileChooserType); 84 75 85 // PolicyInterface. 76 86 virtual PolicyInterface::PolicyAction navigationPolicyForURL(const QUrl&, Qt::MouseButton, Qt::KeyboardModifiers); 77 87 78 88 QSharedPointer<QMenu> activeMenu; 89 90 QFileDialog* fileDialog; 91 WKOpenPanelResultListenerRef openPanelResultListener; 79 92 }; 80 93 -
trunk/Source/WebKit2/UIProcess/qt/ClientImpl.cpp
r93784 r94979 30 30 #include <QtWebPageProxy.h> 31 31 #include <ViewInterface.h> 32 #include <WKArray.h> 32 33 #include <WKFrame.h> 33 34 #include <WKFramePolicyListener.h> 35 #include <WKOpenPanelParameters.h> 36 #include <WKOpenPanelResultListener.h> 34 37 #include <WKType.h> 35 38 #include <WKURLRequest.h> … … 146 149 QString qText = WKStringCopyQString(text); 147 150 toViewInterface(clientInfo)->didChangeStatusText(qText); 151 } 152 153 void qt_wk_runOpenPanel(WKPageRef, WKFrameRef, WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener, const void* clientInfo) 154 { 155 Vector<String> wkSelectedFileNames = toImpl(parameters)->selectedFileNames(); 156 157 QStringList selectedFileNames; 158 if (!wkSelectedFileNames.isEmpty()) 159 for (unsigned i = 0; wkSelectedFileNames.size(); ++i) 160 selectedFileNames += wkSelectedFileNames.at(i); 161 162 ViewInterface::FileChooserType allowMultipleFiles = WKOpenPanelParametersGetAllowsMultipleFiles(parameters) ? ViewInterface::MultipleFilesSelection : ViewInterface::SingleFileSelection; 163 toViewInterface(clientInfo)->chooseFiles(listener, selectedFileNames, allowMultipleFiles); 148 164 } 149 165 -
trunk/Source/WebKit2/UIProcess/qt/ClientImpl.h
r93784 r94979 41 41 // ui client 42 42 void qt_wk_setStatusText(WKPageRef page, WKStringRef text, const void *clientInfo); 43 void qt_wk_runOpenPanel(WKPageRef, WKFrameRef, WKOpenPanelParametersRef, WKOpenPanelResultListenerRef, const void* clientInfo); 43 44 44 45 // Policy client. -
trunk/Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp
r94960 r94979 141 141 uiClient.clientInfo = m_viewInterface; 142 142 uiClient.setStatusText = qt_wk_setStatusText; 143 uiClient.runOpenPanel = qt_wk_runOpenPanel; 143 144 WKPageSetPageUIClient(toAPI(m_webPageProxy.get()), &uiClient); 144 145 -
trunk/Source/WebKit2/UIProcess/qt/TouchViewInterface.h
r94672 r94979 76 76 virtual void didRelaunchProcess(); 77 77 78 virtual void chooseFiles(WKOpenPanelResultListenerRef, const QStringList&, FileChooserType) { } 79 78 80 private: 79 81 QTouchWebView* const m_viewportView; -
trunk/Source/WebKit2/UIProcess/qt/ViewInterface.h
r93407 r94979 25 25 #include <QtCore/QSize> 26 26 #include <QtGui/QMenu> 27 #include <WebKit2/WKBase.h> 27 28 28 29 class QWebError; … … 48 49 { 49 50 public: 51 enum FileChooserType { 52 SingleFileSelection, 53 MultipleFilesSelection 54 }; 55 50 56 virtual void setViewNeedsDisplay(const QRect&) = 0; 51 57 … … 78 84 virtual void processDidCrash() = 0; 79 85 virtual void didRelaunchProcess() = 0; 86 87 virtual void chooseFiles(WKOpenPanelResultListenerRef, const QStringList& selectedFileNames, FileChooserType) = 0; 80 88 }; 81 89
Note: See TracChangeset
for help on using the changeset viewer.