📄 kwqkhtmlpartbrowserextension.cpp
字号:
/*
* Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
* Portions Copyright (c) 2005 Nokia Corporation, Inc. All rights reserved.
*
* 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 "KWQKHTMLPartBrowserExtension.h"
#include "KWQExceptions.h"
#include "WebCoreBridge.h"
#include "khtml_part.h"
#if !KHTML_NO_SCRIPTING
#include "kjs_binding.h"
#include "kjs_proxy.h"
using KJS::Interpreter;
#endif
KHTMLPartBrowserExtension::KHTMLPartBrowserExtension(KHTMLPart *part)
: _part(KWQ(part)), _browserInterface(_part)
{
}
void KHTMLPartBrowserExtension::openURLRequest(const KURL &url,
const KParts::URLArgs &args)
{
if (url.protocol().lower() == "javascript") {
_part->createEmptyDocument();
_part->replaceContentsWithScriptResult(url);
} else {
_part->openURLRequest(url, args);
}
}
void KHTMLPartBrowserExtension::openURLNotify()
{
}
void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
const KParts::URLArgs &urlArgs)
{
createNewWindow(url, urlArgs, KParts::WindowArgs(), (KParts::ReadOnlyPart**)0 );
}
void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
const KParts::URLArgs &urlArgs,
const KParts::WindowArgs &winArgs,
KParts::ReadOnlyPart *&part)
{
createNewWindow(url, urlArgs, winArgs, &part);
}
void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
const KParts::URLArgs &urlArgs,
const KParts::WindowArgs &winArgs,
KParts::ReadOnlyPart **partResult)
{
QString frameName = urlArgs.frameName;
CWebCoreBridge* bridge;
TPtrC referrer;
QString argsReferrer = urlArgs.metaData()["referrer"];
if (argsReferrer.length() > 0) {
referrer.Set(argsReferrer.Des());
} else {
referrer.Set(_part->bridge()->Referrer());
}
if (!frameName.isEmpty()) {
bridge = _part->bridge()->Client().FindFrameNamed(frameName.Des());
if (bridge != 0) {
if (!url.isEmpty()) {
bridge->Client().LoadUrl(url.Des(), referrer, urlArgs.reload, ETrue, KNullDesC, EEventNull);
}
bridge->Client().FocusWindow();
if (partResult) {
*partResult = bridge->Part();
}
return;
}
}
bool wasRunByUser = false;
if (_part->jScript() && _part->jScript()->interpreter()) {
KJS::ScriptInterpreter *interpreter = static_cast<KJS::ScriptInterpreter *>(KJSProxy::proxy(_part)->interpreter());
wasRunByUser = interpreter->wasRunByUserGesture();
}
bridge = _part->bridge()->Client().CreateWindowWithUrl(url.Des(), frameName.Des(), wasRunByUser);
if (!bridge)
{
if (partResult)
*partResult = 0;
return;
}
if (!winArgs.toolBarsVisible) {
bridge->Client().SetToolbarsVisible(EFalse);
}
if (!winArgs.statusBarVisible) {
bridge->Client().SetStatusBarVisible(EFalse);
}
if (!winArgs.scrollbarsVisible) {
bridge->Client().SetScrollbarsVisible(EFalse);
}
if (!winArgs.resizable) {
bridge->Client().SetWindowIsResizable(EFalse);
}
if (winArgs.xSet || winArgs.ySet || winArgs.widthSet || winArgs.heightSet) {
TRect frame = bridge->Client().WindowFrame();
TRect contentRect = bridge->Client().WindowContentRect();
// #### FIXME NOKIA some window resizing stuff, maybe not needed?
/*
if (winArgs.xSet) {
frame.origin.x = winArgs.x;
}
if (winArgs.ySet) {
// float heightForFlip = NSMaxY([[[NSScreen screens] objectAtIndex:0] frame]);
// frame.origin.y = heightForFlip - (winArgs.y + frame.size.height);
frame.origin.y = winArgs.y;
}
if (winArgs.widthSet) {
frame.size.width += winArgs.width - contentRect.size.width;
}
if (winArgs.heightSet) {
int heightDelta = winArgs.height - contentRect.size.height;
frame.size.height += heightDelta;
frame.origin.y -= heightDelta;
}
*/
bridge->Client().SetWindowFrame(frame);
}
bridge->Client().ShowWindow();
if (bridge->Part()) {
bridge->Part()->setName(urlArgs.frameName);
}
if (partResult) {
*partResult = bridge->Part();
}
return;
}
void KHTMLPartBrowserExtension::setIconURL(const KURL &url)
{
_part->bridge()->Client().SetIconURL(url.Des());
}
void KHTMLPartBrowserExtension::setTypedIconURL(const KURL &url, const QString &type)
{
_part->bridge()->Client().SetIconURL(url.Des(), type.Des());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -