WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
70315
[Qt][WK2] Rewrite MiniBrowser in QML
https://bugs.webkit.org/show_bug.cgi?id=70315
Summary
[Qt][WK2] Rewrite MiniBrowser in QML
Zeno Albisser
Reported
2011-10-18 02:19:39 PDT
The current MiniBrowser is not working properly on most platforms. On Linux the address bar is usually not responsive and on Mac no content is being displayed at all. The reason for that are mostly the refactorings in Qt5. We should therefore rewrite the MiniBrowser and use the latest technology provided in Qt5.
Attachments
Patch to remove QAction.
(29.33 KB, patch)
2011-10-20 10:29 PDT
,
Zeno Albisser
no flags
Details
Formatted Diff
Diff
patch for review.
(17.55 KB, patch)
2011-10-20 13:22 PDT
,
Zeno Albisser
no flags
Details
Formatted Diff
Diff
patch for review.
(17.30 KB, patch)
2011-10-20 13:24 PDT
,
Zeno Albisser
no flags
Details
Formatted Diff
Diff
patch for review.
(20.17 KB, patch)
2011-10-21 10:20 PDT
,
Zeno Albisser
vestbo
: review-
Details
Formatted Diff
Diff
patch for review.
(21.82 KB, patch)
2011-10-23 06:58 PDT
,
Zeno Albisser
vestbo
: review+
Details
Formatted Diff
Diff
patch for landing. - subordinated patches (tasks that are blocking this task) should be merged first!
(27.76 KB, patch)
2011-10-24 04:17 PDT
,
Zeno Albisser
no flags
Details
Formatted Diff
Diff
patch for landing. - Adding a temporary solution for TouchWebView.
(27.53 KB, patch)
2011-10-25 08:43 PDT
,
Zeno Albisser
no flags
Details
Formatted Diff
Diff
Show Obsolete
(6)
View All
Add attachment
proposed patch, testcase, etc.
Gopal Raghavan
Comment 1
2011-10-19 05:22:11 PDT
duplicate of
https://bugs.webkit.org/show_bug.cgi?id=70368
Zeno Albisser
Comment 2
2011-10-20 10:05:23 PDT
***
Bug 70368
has been marked as a duplicate of this bug. ***
Zeno Albisser
Comment 3
2011-10-20 10:29:50 PDT
Created
attachment 111805
[details]
Patch to remove QAction. This is the first in a series of patches to rewrite QtWebKit MiniBrowser.
Zeno Albisser
Comment 4
2011-10-20 13:22:05 PDT
Created
attachment 111836
[details]
patch for review.
Zeno Albisser
Comment 5
2011-10-20 13:24:02 PDT
Created
attachment 111837
[details]
patch for review. fixed ChangeLog diff
Tor Arne Vestbø
Comment 6
2011-10-21 01:37:50 PDT
Comment on
attachment 111837
[details]
patch for review. View in context:
https://bugs.webkit.org/attachment.cgi?id=111837&action=review
> Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:334 > + forceActiveFocus();
This change should probably be landed by its own, in both the touch and desktop webview, with an explaination of the reasoning.
> Tools/MiniBrowser/qt/BrowserWindow.cpp:47 > + rootObject()->setProperty("printLoadedUrls", options->printLoadedUrls);
We probably want to expose one single "options" QObject so we can easily add more options.
> Tools/MiniBrowser/qt/MiniBrowserApplication.cpp:152 > + qmlRegisterType<QTouchWebView>("QtQuick", 2, 0, "BrowserView"); > + } else > + qmlRegisterType<QDesktopWebView>("QtQuick", 2, 0, "BrowserView");
We should use the public QML apis, not the C++ APIs.
> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:28 > + anchors.top: parent.top > + anchors.left: parent.left > + anchors.right: parent.right
Style: whenever there's more than one property set, used grouped syntax anchors { }
> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:37 > + width: height
Style, no aligning of variables (remove extra space)
> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:63 > + width: height
style
> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:88 > + height: navigationBar.height-2
Style, spacing, same rules as c++
> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:94 > + source: navigation.canStop ? "../icons/stop.png" : "../icons/refresh.png"
You don't need ../ here, the icon should be available through qrc as "icons/stop.png"
> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:116 > + anchors.left: controlsRow.right > + anchors.right: parent.right > + anchors.margins: 2 > + anchors.verticalCenter: parent.verticalCenter
Style: whenever there's more than one property set, used grouped syntax anchors { }
> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:117 > + height: navigationBar.height-4
Spacing
> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:123 > + width: parent.width/100*browserView.loadProgress
Spacing
Zeno Albisser
Comment 7
2011-10-21 10:20:10 PDT
Created
attachment 111980
[details]
patch for review.
Kenneth Rohde Christiansen
Comment 8
2011-10-21 14:27:30 PDT
Comment on
attachment 111980
[details]
patch for review. View in context:
https://bugs.webkit.org/attachment.cgi?id=111980&action=review
> Source/WebKit2/ChangeLog:6 > + Add a first QML based implementation of MiniBrowser.
Bit weird English. Add the first QML based implementation of MiniBrowser
> Tools/ChangeLog:6 > + > +
remove double newline
> Tools/MiniBrowser/qt/BrowserWindow.cpp:64 > +{ > + QObject* webView = rootObject()->property("webView").value<QDesktopWebView*>(); > + if (!webView) > + webView = rootObject()->property("webView").value<QTouchWebView*>(); > + return webView; > +}
I guess a comment would be good here. Why would there not always be a desktop view?
> Tools/MiniBrowser/qt/BrowserWindow.cpp:87 > + QMetaObject::invokeMethod(rootObject(), "setFocusToAddressBar", Qt::DirectConnection);
focusAddressBar?
> Tools/MiniBrowser/qt/MiniBrowserApplication.h:48 > + WindowOptions(QObject * parent = 0)
Style
> Tools/MiniBrowser/qt/MiniBrowserApplication.h:50 > + , m_printLoadedUrls(false)
I would call it printUrlsLoaded.... but maybe that is just me
> Tools/MiniBrowser/qt/MiniBrowserApplication.h:56 > + void setPrintLoadedUrls(bool p) { m_printLoadedUrls = p; }
I think something like 'enabled' would serve better than p. It is not obvious what p means.
> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:5 > + //do not define anchors or a initialisize here! This would messup with QSGViewSizeRootObjetToView.
// Do ... I am not faminilar with the word initialisize, but I guess you mean 'an initializer' . There is also missing a C in Object (QSGView....)
> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:167 > + source: options.useTouchWebView ? "TouchView.qml" : "DesktopView.qml"
Ah that is where it comes from.
Tor Arne Vestbø
Comment 9
2011-10-21 14:31:53 PDT
Comment on
attachment 111980
[details]
patch for review. View in context:
https://bugs.webkit.org/attachment.cgi?id=111980&action=review
> Tools/MiniBrowser/qt/BrowserWindow.cpp:37 > +#include <QtDeclarative/QDeclarativeEngine>
#include <QDeclarativeEngine> should be enough
> Tools/MiniBrowser/qt/BrowserWindow.cpp:40 > +Q_DECLARE_METATYPE(QDesktopWebView*) > +Q_DECLARE_METATYPE(QTouchWebView*)
Do we still need these?
> Tools/MiniBrowser/qt/BrowserWindow.cpp:90 > + if ((event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_L) > + || event->key() == Qt::Key_F6) { > + QMetaObject::invokeMethod(rootObject(), "setFocusToAddressBar", Qt::DirectConnection); > + event->accept(); > + } else > + QSGView::keyPressEvent(event);
Can we do this using
http://doc.qt.nokia.com/4.7-snapshot/qml-keys.html
?
> Tools/MiniBrowser/qt/MiniBrowserApplication.cpp:76 > + qmlRegisterType<QWebNavigationController>();
We don't register this in the qml plugin?
> Tools/MiniBrowser/qt/MiniBrowserApplication.h:48 > + WindowOptions(QObject * parent = 0)
style: star
> Tools/MiniBrowser/qt/MiniBrowserApplication.h:61 > + void setPrintLoadedUrls(bool p) { m_printLoadedUrls = p; } > + bool printLoadedUrls() const { return m_printLoadedUrls; } > + void setUseTouchWebView(bool t) { m_useTouchWebView = t; } > + bool useTouchWebView() const { return m_useTouchWebView; } > + void setStartMaximized(bool m) { m_startMaximized = m; } > + bool startMaximized() const { return m_startMaximized; }
use words, not single characters for the arguments
> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:5 > + //do not define anchors or a initialisize here! This would messup with QSGViewSizeRootObjetToView.
initial size, "mess up".
Zeno Albisser
Comment 10
2011-10-23 06:58:26 PDT
Created
attachment 112110
[details]
patch for review.
Zeno Albisser
Comment 11
2011-10-23 07:09:56 PDT
Comment on
attachment 111980
[details]
patch for review. View in context:
https://bugs.webkit.org/attachment.cgi?id=111980&action=review
>> Source/WebKit2/ChangeLog:6 >> + Add a first QML based implementation of MiniBrowser. > > Bit weird English. Add the first QML based implementation of MiniBrowser
fixed.
>> Tools/ChangeLog:6 >> + > > remove double newline
done.
>> Tools/MiniBrowser/qt/BrowserWindow.cpp:37 >> +#include <QtDeclarative/QDeclarativeEngine> > > #include <QDeclarativeEngine> should be enough
yes, right.
>> Tools/MiniBrowser/qt/BrowserWindow.cpp:40 >> +Q_DECLARE_METATYPE(QTouchWebView*) > > Do we still need these?
Yes we still need those to be able to access the webView, that was created in QML, in C++ code. But i put these lines into the respective headers and made it a separate commit.
https://bugs.webkit.org/show_bug.cgi?id=70693
>> Tools/MiniBrowser/qt/BrowserWindow.cpp:90 >> + QSGView::keyPressEvent(event); > > Can we do this using
http://doc.qt.nokia.com/4.7-snapshot/qml-keys.html
?
Yes we can. But we need a separate Keys handler in the TextInput element to allow for a consistent behavior. - done.
>> Tools/MiniBrowser/qt/MiniBrowserApplication.cpp:76 >> + qmlRegisterType<QWebNavigationController>(); > > We don't register this in the qml plugin?
Yes we do. - removed.
>>> Tools/MiniBrowser/qt/MiniBrowserApplication.h:48 >>> + WindowOptions(QObject * parent = 0) >> >> Style > > style: star
done.
>> Tools/MiniBrowser/qt/MiniBrowserApplication.h:50 >> + , m_printLoadedUrls(false) > > I would call it printUrlsLoaded.... but maybe that is just me
sounds a bit synthetic to me... i would prefer to leave it the way it is, unless there is a rule in coding style that applies or something similar.
>> Tools/MiniBrowser/qt/MiniBrowserApplication.h:56 >> + void setPrintLoadedUrls(bool p) { m_printLoadedUrls = p; } > > I think something like 'enabled' would serve better than p. It is not obvious what p means.
done
>> Tools/MiniBrowser/qt/MiniBrowserApplication.h:61 >> + bool startMaximized() const { return m_startMaximized; } > > use words, not single characters for the arguments
yes - done. ;-)
>>> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:5 >>> + //do not define anchors or a initialisize here! This would messup with QSGViewSizeRootObjetToView. >> >> // Do ... >> >> I am not faminilar with the word initialisize, but I guess you mean 'an initializer' . There is also missing a C in Object (QSGView....) > > initial size, "mess up".
Okay... that was really messed up. I agree. - fixed.
>> Tools/MiniBrowser/qt/qml/BrowserWindow.qml:167 >> + source: options.useTouchWebView ? "TouchView.qml" : "DesktopView.qml" > > Ah that is where it comes from.
Yes it is. :)
Tor Arne Vestbø
Comment 12
2011-10-23 12:53:29 PDT
Comment on
attachment 112110
[details]
patch for review. Good stuf! r=me
Alexis Menard (darktears)
Comment 13
2011-10-23 22:29:12 PDT
Comment on
attachment 111805
[details]
Patch to remove QAction. View in context:
https://bugs.webkit.org/attachment.cgi?id=111805&action=review
> Source/WebKit2/UIProcess/API/qt/qwebnavigationcontroller.h:41 > + Q_PROPERTY(bool canReload READ canReload NOTIFY navigationStateChanged)
FINAL is still valid here. This class will never be subclassed.
> Source/WebKit2/UIProcess/API/qt/qwebnavigationcontroller.h:-51 > - QAction* navigationAction(QtWebKit::NavigationAction which) const;
If you remove this C++ API then you also want to move the QtWebKit namespace private as it is the only place we use it in a public header.
> Source/WebKit2/UIProcess/API/qt/qwebnavigationcontroller.h:52 > + Q_INVOKABLE void goBack();
There is no need for Q_INVOKABLE. slots works out of the box.
Zeno Albisser
Comment 14
2011-10-24 02:58:06 PDT
Comment on
attachment 111805
[details]
Patch to remove QAction. View in context:
https://bugs.webkit.org/attachment.cgi?id=111805&action=review
>> Source/WebKit2/UIProcess/API/qt/qwebnavigationcontroller.h:41 >> + Q_PROPERTY(bool canReload READ canReload NOTIFY navigationStateChanged) > > FINAL is still valid here. This class will never be subclassed.
Changed that.
>> Source/WebKit2/UIProcess/API/qt/qwebnavigationcontroller.h:-51 >> - QAction* navigationAction(QtWebKit::NavigationAction which) const; > > If you remove this C++ API then you also want to move the QtWebKit namespace private as it is the only place we use it in a public header.
good point. :)
>> Source/WebKit2/UIProcess/API/qt/qwebnavigationcontroller.h:52 >> + Q_INVOKABLE void goBack(); > > There is no need for Q_INVOKABLE. slots works out of the box.
fixed. There is a separate bug for this refactoring now. ->
https://bugs.webkit.org/show_bug.cgi?id=70525
Zeno Albisser
Comment 15
2011-10-24 04:17:11 PDT
Created
attachment 112172
[details]
patch for landing. - subordinated patches (tasks that are blocking this task) should be merged first! This patch also includes the binary diff of the icons used for MiniBrowser.
Balazs Kelemen
Comment 16
2011-10-24 12:19:06 PDT
Comment on
attachment 112172
[details]
patch for landing. - subordinated patches (tasks that are blocking this task) should be merged first! View in context:
https://bugs.webkit.org/attachment.cgi?id=112172&action=review
> Tools/MiniBrowser/qt/BrowserWindow.cpp:67 > +QObject* BrowserWindow::webView() const > +{ > + QObject* webView = rootObject()->property("webView").value<QDesktopWebView*>(); > + // The webView is created in QML, therefore it might not exist yet. > + if (!webView) > + webView = rootObject()->property("webView").value<QTouchWebView*>(); > + return webView; > +}
I don't get this. If the view doesn't exist when this is called than you don't know whether it is the desktop or the touch view, do you?
Zeno Albisser
Comment 17
2011-10-24 14:14:30 PDT
(In reply to
comment #16
)
> (From update of
attachment 112172
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=112172&action=review
> > > Tools/MiniBrowser/qt/BrowserWindow.cpp:67 > > +QObject* BrowserWindow::webView() const > > +{ > > + QObject* webView = rootObject()->property("webView").value<QDesktopWebView*>(); > > + // The webView is created in QML, therefore it might not exist yet. > > + if (!webView) > > + webView = rootObject()->property("webView").value<QTouchWebView*>(); > > + return webView; > > +} > > I don't get this. If the view doesn't exist when this is called than you don't know whether it is the desktop or the touch view, do you?
Well, you can't really know of which type an inexistent object is. So... no. But let's go it through: In case there has no view been created so far. The porperty("webView) will return an invalid QVariant. Therfore the value function will not be able to convert to the required type and return a default constructed pointer. - So the return value of webView() will be a nullptr.
Kenneth Rohde Christiansen
Comment 18
2011-10-24 14:25:52 PDT
(In reply to
comment #17
)
> (In reply to
comment #16
) > > (From update of
attachment 112172
[details]
[details]) > > View in context:
https://bugs.webkit.org/attachment.cgi?id=112172&action=review
> > > > > Tools/MiniBrowser/qt/BrowserWindow.cpp:67 > > > +QObject* BrowserWindow::webView() const > > > +{ > > > + QObject* webView = rootObject()->property("webView").value<QDesktopWebView*>(); > > > + // The webView is created in QML, therefore it might not exist yet. > > > + if (!webView) > > > + webView = rootObject()->property("webView").value<QTouchWebView*>(); > > > + return webView; > > > +} > > > > I don't get this. If the view doesn't exist when this is called than you don't know whether it is the desktop or the touch view, do you? > > Well, you can't really know of which type an inexistent object is. So... no. > But let's go it through: In case there has no view been created so far. The porperty("webView) will return an invalid QVariant. Therfore the value function will not be able to convert to the required type and return a default constructed pointer. - So the return value of webView() will be a nullptr.
We could make the code more clear: QObject* BrowserWindow::webView() const { { QVariant view = rootObject()->property("webView"); // The view is either a QDesktopWebView or a QTouchWebView, depending on how MiniBrowser was started. if (view.canConvert<QDesktopWebView>()) return view.value<QDesktopWebView>(); else return view.value<QTouchWebView>(); }
Zeno Albisser
Comment 19
2011-10-25 06:45:51 PDT
***
Bug 69258
has been marked as a duplicate of this bug. ***
Zeno Albisser
Comment 20
2011-10-25 08:43:19 PDT
Created
attachment 112341
[details]
patch for landing. - Adding a temporary solution for TouchWebView. Simon: I fixed the issue as discussed and amended the existing patch accordingly. Could you please commit all the changes in one go? - Thanks. :)
Simon Hausmann
Comment 21
2011-10-26 01:30:14 PDT
Committed
r98450
: <
http://trac.webkit.org/changeset/98450
>
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