diff options
author | Ben Murdoch <benm@google.com> | 2011-06-02 12:07:03 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-06-10 10:47:21 +0100 |
commit | 2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch) | |
tree | e4964fbd1cb70599f7718ff03e50ea1dab33890b /Tools/MiniBrowser | |
parent | 87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff) | |
download | external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.zip external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.gz external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.bz2 |
Merge WebKit at r84325: Initial merge by git.
Change-Id: Ic1a909300ecc0a13ddc6b4e784371d2ac6e3d59b
Diffstat (limited to 'Tools/MiniBrowser')
18 files changed, 257 insertions, 48 deletions
diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserProduction.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserProduction.vsprops index 75195e3..4c5e11b 100644 --- a/Tools/MiniBrowser/Configurations/MiniBrowserProduction.vsprops +++ b/Tools/MiniBrowser/Configurations/MiniBrowserProduction.vsprops @@ -5,7 +5,7 @@ Name="MiniBrowserProduction" InheritedPropertySheets=" $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops; - $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops; + $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\releaseproduction.vsprops; $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\production.vsprops; .\MiniBrowserCoreFoundation.vsprops; .\MiniBrowserCommon.vsprops" diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserRelease.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserRelease.vsprops index 27af48a..653d847 100644 --- a/Tools/MiniBrowser/Configurations/MiniBrowserRelease.vsprops +++ b/Tools/MiniBrowser/Configurations/MiniBrowserRelease.vsprops @@ -5,6 +5,7 @@ Name="MiniBrowserRelease" InheritedPropertySheets=" $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops; + $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\releaseproduction.vsprops; $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops; .\MiniBrowserCoreFoundation.vsprops; .\MiniBrowserCommon.vsprops" diff --git a/Tools/MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops b/Tools/MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops index a50d5b7..bf485fc 100644 --- a/Tools/MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops +++ b/Tools/MiniBrowser/Configurations/MiniBrowserReleaseCairoCFLite.vsprops @@ -5,6 +5,7 @@ Name="MiniBrowserReleaseCairoCFLite" InheritedPropertySheets=" $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops; + $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\releaseproduction.vsprops; $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops; $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops; .\MiniBrowserCFLite.vsprops; diff --git a/Tools/MiniBrowser/DerivedSources.pro b/Tools/MiniBrowser/DerivedSources.pro deleted file mode 100644 index 8674beb..0000000 --- a/Tools/MiniBrowser/DerivedSources.pro +++ /dev/null @@ -1,33 +0,0 @@ -# DerivedSources - qmake build info - -CONFIG -= debug_and_release - -TEMPLATE = lib -TARGET = dummy - -QMAKE_EXTRA_TARGETS += generated_files - -isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../.. -SRC_ROOT_DIR = $$replace(PWD, "/Tools/MiniBrowser", "") - -!exists($$OUTPUT_DIR/MiniBrowser/qt): system($$QMAKE_MKDIR $$OUTPUT_DIR/MiniBrowser/qt) - -ualist_copier.input = $$SRC_ROOT_DIR/Tools/QtTestBrowser/useragentlist.txt -ualist_copier.output = $$OUTPUT_DIR/MiniBrowser/qt/useragentlist.txt -ualist_copier.tempNames = $$ualist_copier.input $$ualist_copier.output -ualist_copier.commands = $$QMAKE_COPY $$replace(ualist_copier.tempNames, "/", $$QMAKE_DIR_SEP) -ualist_copier.depends = $$ualist_copier.input -generated_files.depends += ualist_copier -QMAKE_EXTRA_TARGETS += ualist_copier - -# We have to copy the resource file to the build directory -# to use the useragentlist.txt file of QtTestBrowser without -# polluting the source tree. - -qrc_copier.input = $$SRC_ROOT_DIR/Tools/MiniBrowser/MiniBrowser.qrc -qrc_copier.output = $$OUTPUT_DIR/MiniBrowser/qt/MiniBrowser.qrc -qrc_copier.tempNames = $$qrc_copier.input $$qrc_copier.output -qrc_copier.commands = $$QMAKE_COPY $$replace(qrc_copier.tempNames, "/", $$QMAKE_DIR_SEP) -qrc_copier.depends = ualist_copier $$qrc_copier.input -generated_files.depends += qrc_copier -QMAKE_EXTRA_TARGETS += qrc_copier diff --git a/Tools/MiniBrowser/gtk/GNUmakefile.am b/Tools/MiniBrowser/gtk/GNUmakefile.am new file mode 100644 index 0000000..24da0ad --- /dev/null +++ b/Tools/MiniBrowser/gtk/GNUmakefile.am @@ -0,0 +1,33 @@ +bin_PROGRAMS += \ + Programs/MiniBrowser + +Programs_MiniBrowser_CPPFLAGS = \ + -I$(srcdir)/Source \ + -I$(top_builddir)/DerivedSources/WebKit2/include \ + $(global_cppflags) \ + $(GLIB_CFLAGS) \ + $(GTK_CFLAGS) + +Programs_MiniBrowser_SOURCES = \ + Tools/MiniBrowser/gtk/main.c + +BUILT_SOURCES += \ + generate-minibrowser-forward-headers + +MiniBrowser := $(srcdir)/Tools/MiniBrowser/gtk +MiniBrowserFwdHeaders := $(GENSOURCES_WEBKIT2)/include +generate-minibrowser-forward-headers: $(WebKit2)/Scripts/generate-forwarding-headers.pl $(Programs_MiniBrowser_SOURCES) + $(AM_V_GEN)$(PERL) $< $(MiniBrowser) $(MiniBrowserFwdHeaders) gtk + $(AM_V_GEN)$(PERL) $< $(MiniBrowser) $(MiniBrowserFwdHeaders) soup + +Programs_MiniBrowser_LDADD = \ + libwebkit2gtk-@WEBKITGTK_API_MAJOR_VERSION@.@WEBKITGTK_API_MINOR_VERSION@.la \ + $(GLIB_LIBS) \ + $(GTK_LIBS) + +Programs_MiniBrowser_LDFLAGS = \ + -no-fast-install \ + -no-install + +CLEANFILES += \ + $(top_builddir)/Programs/MiniBrowser diff --git a/Tools/MiniBrowser/gtk/main.c b/Tools/MiniBrowser/gtk/main.c new file mode 100644 index 0000000..0c32510 --- /dev/null +++ b/Tools/MiniBrowser/gtk/main.c @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2006, 2007 Apple Inc. + * Copyright (C) 2007 Alp Toker <alp@atoker.com> + * Copyright (C) 2011 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <WebKit2/WebKit2.h> +#include <gtk/gtk.h> + +static void activateUriEntryCallback(GtkWidget *entry, gpointer data) +{ + WKViewRef webView = g_object_get_data(G_OBJECT(entry), "web-view"); + const gchar *uri = gtk_entry_get_text(GTK_ENTRY(entry)); + WKPageLoadURL(WKViewGetPage(webView), WKURLCreateWithURL(uri)); +} + +static void destroyCallback(GtkWidget *widget, GtkWidget *window) +{ + gtk_main_quit(); +} + +static void goBackCallback(GtkWidget *widget, WKViewRef webView) +{ + WKPageGoBack(WKViewGetPage(webView)); +} + +static void goForwardCallback(GtkWidget *widget, WKViewRef webView) +{ + WKPageGoForward(WKViewGetPage(webView)); +} + +static GtkWidget *createToolbar(GtkWidget *uriEntry, WKViewRef webView) +{ + GtkWidget *toolbar = gtk_toolbar_new(); + +#if GTK_CHECK_VERSION(2, 15, 0) + gtk_orientable_set_orientation(GTK_ORIENTABLE(toolbar), GTK_ORIENTATION_HORIZONTAL); +#else + gtk_toolbar_set_orientation(GTK_TOOLBAR(toolbar), GTK_ORIENTATION_HORIZONTAL); +#endif + gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH_HORIZ); + + GtkToolItem *item = gtk_tool_button_new_from_stock(GTK_STOCK_GO_BACK); + g_signal_connect(item, "clicked", G_CALLBACK(goBackCallback), (gpointer)webView); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); + + item = gtk_tool_button_new_from_stock(GTK_STOCK_GO_FORWARD); + g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(goForwardCallback), (gpointer)webView); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); + + item = gtk_tool_item_new(); + gtk_tool_item_set_expand(item, TRUE); + gtk_container_add(GTK_CONTAINER(item), uriEntry); + g_signal_connect(uriEntry, "activate", G_CALLBACK(activateUriEntryCallback), NULL); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); + + g_object_set_data(G_OBJECT(uriEntry), "web-view", (gpointer)webView); + item = gtk_tool_button_new_from_stock(GTK_STOCK_OK); + g_signal_connect_swapped(item, "clicked", G_CALLBACK(activateUriEntryCallback), (gpointer)uriEntry); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); + + return toolbar; +} + +static WKViewRef createWebView() +{ + return WKViewCreate(WKContextGetSharedProcessContext(), 0); +} + +static GtkWidget *createWindow(WKViewRef webView) +{ + GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_default_size(GTK_WINDOW(window), 800, 600); + gtk_widget_set_name(window, "MiniBrowser"); + + GtkWidget *uriEntry = gtk_entry_new(); + + GtkWidget *vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), createToolbar(uriEntry, webView), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), WKViewGetWindow(webView), TRUE, TRUE, 0); + + gtk_container_add(GTK_CONTAINER(window), vbox); + + g_signal_connect(window, "destroy", G_CALLBACK(destroyCallback), NULL); + + return window; +} + +static gchar *argumentToURL(const char *filename) +{ + GFile *gfile = g_file_new_for_commandline_arg(filename); + gchar *fileURL = g_file_get_uri(gfile); + g_object_unref(gfile); + + return fileURL; +} + +int main(int argc, char *argv[]) +{ + gtk_init(&argc, &argv); + + if (!g_thread_supported()) + g_thread_init(NULL); + + WKViewRef webView = createWebView(); + GtkWidget *mainWindow = createWindow(webView); + + gchar* url = argumentToURL(argc > 1 ? argv[1] : "http://www.webkitgtk.org/"); + WKPageLoadURL(WKViewGetPage(webView), WKURLCreateWithURL(url)); + g_free(url); + + gtk_widget_grab_focus(WKViewGetWindow(webView)); + gtk_widget_show_all(mainWindow); + gtk_main(); + + return 0; +} diff --git a/Tools/MiniBrowser/mac/BrowserWindowController.m b/Tools/MiniBrowser/mac/BrowserWindowController.m index 1f6fc04..f6b4d1d 100644 --- a/Tools/MiniBrowser/mac/BrowserWindowController.m +++ b/Tools/MiniBrowser/mac/BrowserWindowController.m @@ -618,6 +618,9 @@ static void runOpenPanel(WKPageRef page, WKFrameRef frame, WKOpenPanelParameters createNewPage, showPage, closePage, + 0, /* takeFocus */ + 0, /* focus */ + 0, /* unfocus */ runJavaScriptAlert, runJavaScriptConfirm, runJavaScriptPrompt, diff --git a/Tools/MiniBrowser/qt/BrowserWindow.cpp b/Tools/MiniBrowser/qt/BrowserWindow.cpp index 53f7de9..a8a2226 100644 --- a/Tools/MiniBrowser/qt/BrowserWindow.cpp +++ b/Tools/MiniBrowser/qt/BrowserWindow.cpp @@ -28,6 +28,7 @@ #include "BrowserWindow.h" +#include "UrlLoader.h" #include "qwkpreferences.h" static QWKPage* newPageFunction(QWKPage* page) @@ -41,6 +42,7 @@ QVector<qreal> BrowserWindow::m_zoomLevels; BrowserWindow::BrowserWindow(QWKContext* context, WindowOptions* options) : m_isZoomTextOnly(false) , m_currentZoom(1) + , m_urlLoader(0) , m_context(context) { if (options) @@ -106,6 +108,8 @@ BrowserWindow::BrowserWindow(QWKContext* context, WindowOptions* options) toggleFrameFlattening->setChecked(false); toolsMenu->addSeparator(); toolsMenu->addAction("Change User Agent", this, SLOT(showUserAgentDialog())); + toolsMenu->addSeparator(); + toolsMenu->addAction("Load URLs from file", this, SLOT(loadURLListFromFile())); QMenu* settingsMenu = menuBar()->addMenu("&Settings"); QAction* toggleAutoLoadImages = settingsMenu->addAction("Disable Auto Load Images", this, SLOT(toggleAutoLoadImages(bool))); @@ -137,7 +141,10 @@ BrowserWindow::BrowserWindow(QWKContext* context, WindowOptions* options) m_zoomLevels << 1.1 << 1.2 << 1.33 << 1.5 << 1.7 << 2 << 2.4 << 3; } - resize(800, 600); + if (m_windowOptions.startMaximized) + setWindowState(windowState() | Qt::WindowMaximized); + else + resize(800, 600); show(); } @@ -294,10 +301,9 @@ void BrowserWindow::toggleZoomTextOnly(bool b) void BrowserWindow::toggleFullScreenMode(bool enable) { - if (enable) - setWindowState(Qt::WindowFullScreen); - else - setWindowState(Qt::WindowNoState); + bool alreadyEnabled = windowState() & Qt::WindowFullScreen; + if (enable ^ alreadyEnabled) + setWindowState(windowState() ^ Qt::WindowFullScreen); } void BrowserWindow::toggleFrameFlattening(bool toggle) @@ -335,6 +341,20 @@ void BrowserWindow::showUserAgentDialog() page()->setCustomUserAgent(combo->currentText()); } +void BrowserWindow::loadURLListFromFile() +{ + QString selectedFile; +#ifndef QT_NO_FILEDIALOG + selectedFile = QFileDialog::getOpenFileName(this, tr("Load URL list from file") + , QString(), tr("Text Files (*.txt);;All Files (*)")); +#endif + if (selectedFile.isEmpty()) + return; + + m_urlLoader = new UrlLoader(this, selectedFile, 0, 0); + m_urlLoader->loadNext(); +} + void BrowserWindow::printURL(const QUrl& url) { QTextStream output(stdout); @@ -380,6 +400,7 @@ void BrowserWindow::applyZoom() BrowserWindow::~BrowserWindow() { + delete m_urlLoader; delete m_addressBar; delete m_browser; } diff --git a/Tools/MiniBrowser/qt/BrowserWindow.h b/Tools/MiniBrowser/qt/BrowserWindow.h index 6ad8f27..06da2a2 100644 --- a/Tools/MiniBrowser/qt/BrowserWindow.h +++ b/Tools/MiniBrowser/qt/BrowserWindow.h @@ -35,6 +35,8 @@ #include <QStringList> #include <QtGui> +class UrlLoader; + class BrowserWindow : public QMainWindow { Q_OBJECT @@ -69,6 +71,8 @@ protected slots: void toggleFrameFlattening(bool); void showUserAgentDialog(); + void loadURLListFromFile(); + void printURL(const QUrl&); void toggleAutoLoadImages(bool); @@ -83,6 +87,7 @@ private: bool m_isZoomTextOnly; qreal m_currentZoom; + UrlLoader* m_urlLoader; QWKContext* m_context; WindowOptions m_windowOptions; BrowserView* m_browser; diff --git a/Tools/MiniBrowser/qt/MiniBrowser.pro b/Tools/MiniBrowser/qt/MiniBrowser.pro index 809c934..7836e53 100644 --- a/Tools/MiniBrowser/qt/MiniBrowser.pro +++ b/Tools/MiniBrowser/qt/MiniBrowser.pro @@ -58,7 +58,5 @@ contains(QT_CONFIG, opengl) { DEFINES -= QT_ASCII_CAST_WARNINGS -# We copy the resource file to the build directory. -# The copier is defined in Tools/MiniBrowser/DerivedSources.pro. -RESOURCES += \ - $$OUTPUT_DIR/MiniBrowser/qt/MiniBrowser.qrc +# Use the MiniBrowser.qrc file from the sources. +RESOURCES += MiniBrowser.qrc diff --git a/Tools/MiniBrowser/MiniBrowser.qrc b/Tools/MiniBrowser/qt/MiniBrowser.qrc index ffe77b0..ffe77b0 100644 --- a/Tools/MiniBrowser/MiniBrowser.qrc +++ b/Tools/MiniBrowser/qt/MiniBrowser.qrc diff --git a/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp b/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp index f40c870..912419b 100644 --- a/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp +++ b/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp @@ -55,6 +55,7 @@ void MiniBrowserApplication::handleUserOptions() if (args.contains("-help")) { qDebug() << "Usage:" << programName.toLatin1().data() + << "[-maximize]" << "[-r list]" << "[-robot-timeout seconds]" << "[-robot-extra-time seconds]" @@ -65,6 +66,9 @@ void MiniBrowserApplication::handleUserOptions() appQuit(0); } + if (args.contains("-maximize")) + m_windowOptions.startMaximized = true; + int robotIndex = args.indexOf("-r"); if (robotIndex != -1) { QString listFile = takeOptionValue(&args, robotIndex); diff --git a/Tools/MiniBrowser/qt/MiniBrowserApplication.h b/Tools/MiniBrowser/qt/MiniBrowserApplication.h index 5a78820..2eba9b5 100644 --- a/Tools/MiniBrowser/qt/MiniBrowserApplication.h +++ b/Tools/MiniBrowser/qt/MiniBrowserApplication.h @@ -37,12 +37,18 @@ struct WindowOptions { : useTiledBackingStore(true) , useSeparateWebProcessPerWindow(false) , printLoadedUrls(false) +#if defined(Q_OS_SYMBIAN) + , startMaximized(true) +#else + , startMaximized(false) +#endif { } bool useTiledBackingStore; bool useSeparateWebProcessPerWindow; bool printLoadedUrls; + bool startMaximized; }; class MiniBrowserApplication : public QApplication { diff --git a/Tools/MiniBrowser/qt/UrlLoader.cpp b/Tools/MiniBrowser/qt/UrlLoader.cpp index 600d477..54854c8 100644 --- a/Tools/MiniBrowser/qt/UrlLoader.cpp +++ b/Tools/MiniBrowser/qt/UrlLoader.cpp @@ -47,7 +47,7 @@ UrlLoader::UrlLoader(BrowserWindow* browserWindow, const QString& inputFileName, if (timeoutSeconds) { m_timeoutTimer.setInterval(timeoutSeconds * 1000); m_timeoutTimer.setSingleShot(true); - connect(m_browserWindow, SIGNAL(loadStarted()), &m_timeoutTimer, SLOT(start())); + connect(m_browserWindow->page(), SIGNAL(loadStarted()), &m_timeoutTimer, SLOT(start())); connect(&m_timeoutTimer, SIGNAL(timeout()), this, SLOT(loadNext())); } if (extraTimeSeconds) { diff --git a/Tools/MiniBrowser/qt/main.cpp b/Tools/MiniBrowser/qt/main.cpp index 8f4c1ea..8b38912 100644 --- a/Tools/MiniBrowser/qt/main.cpp +++ b/Tools/MiniBrowser/qt/main.cpp @@ -51,9 +51,9 @@ int main(int argc, char** argv) QStringList urls = app.urls(); if (urls.isEmpty()) { - QString defaultUrl = QString("file://%1/%2").arg(QDir::homePath()).arg(QLatin1String("index.html")); - if (QDir(defaultUrl).exists()) - urls.append(defaultUrl); + QString defaultIndexFile = QString("%1/%2").arg(QDir::homePath()).arg(QLatin1String("index.html")); + if (QFile(defaultIndexFile).exists()) + urls.append(QString("file://") + defaultIndexFile); else urls.append("http://www.google.com"); } diff --git a/Tools/MiniBrowser/qt/useragentlist.txt b/Tools/MiniBrowser/qt/useragentlist.txt new file mode 100644 index 0000000..0b29d40 --- /dev/null +++ b/Tools/MiniBrowser/qt/useragentlist.txt @@ -0,0 +1,11 @@ +Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/533.3 (KHTML, like Gecko) QtTestBrowser/0.1 Safari/533.3 +Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0; en-GB) AppleWebKit/533.3 (KHTML, like Gecko) QtTestBrowser/0.1 Mobile Safari/533.3 +Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.2 (KHTML, like Gecko) Safari/125.8 +Mozilla/5.0 (Linux; U; Android 1.1; en-gb; dream) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2 +Mozilla/5.0 (Unknown; like Android 2.2; U; Intel Mac OS X 10_6; en-gb) AppleWebKit/533.3 (KHTML, like Gecko) Version/4.0.3 Mobile Safari/533.3 +Mozilla/5.0 (iPhone; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 +Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7 +Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10 +Opera/9.25 (Windows NT 6.0; U; en) +Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Nokia5800d-1b/20.2.014; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413 +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) diff --git a/Tools/MiniBrowser/win/BrowserView.cpp b/Tools/MiniBrowser/win/BrowserView.cpp index f9ccfe7..76b8d04 100644 --- a/Tools/MiniBrowser/win/BrowserView.cpp +++ b/Tools/MiniBrowser/win/BrowserView.cpp @@ -98,6 +98,9 @@ void BrowserView::create(RECT webViewRect, BrowserWindow* parentWindow) createNewPage, showPage, closePage, + 0, /* takeFocus */ + 0, /* focus */ + 0, /* unfocus */ runJavaScriptAlert, runJavaScriptConfirm, runJavaScriptPrompt, diff --git a/Tools/MiniBrowser/win/main.cpp b/Tools/MiniBrowser/win/main.cpp index 0c125ba..93b47ce 100644 --- a/Tools/MiniBrowser/win/main.cpp +++ b/Tools/MiniBrowser/win/main.cpp @@ -41,6 +41,22 @@ #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='" PROCESSORARCHITECTURE "' publicKeyToken='6595b64144ccf1df' language='*'\"") +static bool shouldTranslateMessage(const MSG& msg) +{ + // Only these four messages are actually translated by ::TranslateMessage or ::TranslateAccelerator. + // It's useless (though harmless) to call those functions for other messages, so we always allow other messages to be translated. + if (msg.message != WM_KEYDOWN && msg.message != WM_SYSKEYDOWN && msg.message != WM_KEYUP && msg.message != WM_SYSKEYUP) + return true; + + wchar_t className[256]; + if (!::GetClassNameW(msg.hwnd, className, ARRAYSIZE(className))) + return true; + + // Don't call TranslateMessage() on key events destined for a WebKit2 view, WebKit will do this if it doesn't handle the message. + // It would be nice to use some API here instead of hard-coding the window class name. + return wcscmp(className, L"WebKit2WebViewWindowClass"); +} + int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpstrCmdLine, int nCmdShow) { MiniBrowser::shared().initialize(hInstance); @@ -52,7 +68,9 @@ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpstrC while (BOOL result = ::GetMessage(&message, 0, 0, 0)) { if (result == -1) break; - ::TranslateMessage(&message); + + if (shouldTranslateMessage(message)) + ::TranslateMessage(&message); if (!MiniBrowser::shared().handleMessage(&message)) ::DispatchMessage(&message); |