31 #include "tdehtml_part.h" 33 #include "tdehtml_pagecache.h" 35 #include "dom/dom_string.h" 36 #include "dom/dom_element.h" 37 #include "dom/dom_exception.h" 38 #include "html/html_documentimpl.h" 39 #include "html/html_baseimpl.h" 40 #include "html/html_objectimpl.h" 41 #include "html/html_miscimpl.h" 42 #include "html/html_imageimpl.h" 43 #include "html/html_objectimpl.h" 44 #include "rendering/render_text.h" 45 #include "rendering/render_frames.h" 46 #include "rendering/render_layer.h" 47 #include "misc/htmlhashes.h" 48 #include "misc/loader.h" 49 #include "xml/dom2_eventsimpl.h" 50 #include "xml/dom2_rangeimpl.h" 51 #include "xml/xml_tokenizer.h" 52 #include "css/cssstyleselector.h" 53 #include "css/csshelper.h" 56 #include "tdehtmlview.h" 57 #include <tdeparts/partmanager.h> 58 #include "ecma/kjs_proxy.h" 59 #include "ecma/kjs_window.h" 60 #include "tdehtml_settings.h" 61 #include "kjserrordlg.h" 63 #include <kjs/function.h> 64 #include <kjs/interpreter.h> 66 #include "htmlpageinfo.h" 68 #include <sys/types.h> 74 #include <dcopclient.h> 76 #include <kstandarddirs.h> 77 #include <kstringhandler.h> 78 #include <tdeio/job.h> 79 #include <tdeio/global.h> 80 #include <tdeio/netaccess.h> 81 #include <tdeprotocolmanager.h> 83 #include <kiconloader.h> 85 #include <kcharsets.h> 86 #include <tdemessagebox.h> 87 #include <kstdaction.h> 88 #include <tdefiledialog.h> 90 #include <kdatastream.h> 91 #include <tdetempfile.h> 92 #include <tdeglobalsettings.h> 94 #include <tdeapplication.h> 95 #include <tdeparts/browserinterface.h> 96 #if !defined(QT_NO_DRAGANDDROP) 97 #include <tdemultipledrag.h> 99 #include "../tdeutils/kfinddialog.h" 100 #include "../tdeutils/kfind.h" 102 #include <ksslcertchain.h> 103 #include <ksslinfodlg.h> 105 #include <tdefileitem.h> 106 #include <kurifilter.h> 107 #include <kstatusbar.h> 108 #include <kurllabel.h> 110 #include <tqclipboard.h> 112 #include <tqtooltip.h> 113 #include <tqmetaobject.h> 114 #include <tqucomextra_p.h> 116 #include "tdehtmlpart_p.h" 117 #include "kpassivepopup.h" 118 #include "tdepopupmenu.h" 119 #include "rendering/render_form.h" 122 #define HINT_UTF8 106 125 class PartStyleSheetLoader :
public CachedObjectClient
131 m_cachedSheet = dl->requestStyleSheet(url, TQString(),
"text/css",
134 m_cachedSheet->ref(
this );
136 virtual ~PartStyleSheetLoader()
138 if ( m_cachedSheet ) m_cachedSheet->deref(
this);
147 virtual void error(
int,
const TQString& ) {
150 TQGuardedPtr<TDEHTMLPart> m_part;
151 tdehtml::CachedCSSStyleSheet *m_cachedSheet;
155 void tdehtml::ChildFrame::liveConnectEvent(
const unsigned long,
const TQString & event,
const KParts::LiveConnectExtension::ArgList & args)
157 if (!m_part || !m_frame || !m_liveconnect)
162 script.sprintf(
"%s(", event.latin1());
164 KParts::LiveConnectExtension::ArgList::const_iterator i = args.begin();
165 const KParts::LiveConnectExtension::ArgList::const_iterator argsBegin = i;
166 const KParts::LiveConnectExtension::ArgList::const_iterator argsEnd = args.end();
168 for ( ; i != argsEnd; ++i) {
171 if ((*i).first == KParts::LiveConnectExtension::TypeString) {
173 script += TQString((*i).second).replace(
'\\',
"\\\\").replace(
'"',
"\\\"");
176 script += (*i).second;
179 kdDebug(6050) <<
"tdehtml::ChildFrame::liveConnectEvent " << script <<
endl;
189 m_jscript->evaluate(TQString(), 1, script, 0L, &cmp);
194 TDEHTMLFrameList::Iterator TDEHTMLFrameList::find(
const TQString &name )
196 Iterator it = begin();
197 const Iterator e =
end();
200 if ( (*it)->m_name==name )
210 TDEHTMLFactory::registerPart(
this );
214 init(
new TDEHTMLView(
this, parentWidget, widgetname ), prof );
221 TDEHTMLFactory::registerPart(
this );
229 void TDEHTMLPart::init(
TDEHTMLView *view, GUIProfile prof )
231 if ( prof == DefaultGUI )
233 else if ( prof == BrowserViewGUI )
236 d =
new TDEHTMLPartPrivate(parent());
241 d->m_guiProfile = prof;
243 d->m_hostExtension =
new TDEHTMLPartBrowserHostExtension(
this );
245 d->m_statusBarIconLabel = 0L;
246 d->m_statusBarPopupLabel = 0L;
247 d->m_openableSuppressedPopups = 0;
249 d->m_bSecurityInQuestion =
false;
250 d->m_paLoadImages = 0;
251 d->m_paDebugScript = 0;
252 d->m_bMousePressed =
false;
253 d->m_bRightMousePressed =
false;
254 d->m_bCleared =
false;
255 d->m_paViewDocument =
new TDEAction( i18n(
"View Do&cument Source" ), CTRL + Key_U,
this, TQT_SLOT( slotViewDocumentSource() ),
actionCollection(),
"viewDocumentSource" );
256 d->m_paViewFrame =
new TDEAction( i18n(
"View Frame Source" ), 0,
this, TQT_SLOT( slotViewFrameSource() ),
actionCollection(),
"viewFrameSource" );
257 d->m_paViewInfo =
new TDEAction( i18n(
"View Document Information" ), CTRL+Key_I,
this, TQT_SLOT( slotViewPageInfo() ),
actionCollection(),
"viewPageInfo" );
258 d->m_paSaveBackground =
new TDEAction( i18n(
"Save &Background Image As..." ), 0,
this, TQT_SLOT( slotSaveBackground() ),
actionCollection(),
"saveBackground" );
262 d->m_paSaveFrame =
new TDEAction( i18n(
"Save &Frame As..." ), 0,
this, TQT_SLOT( slotSaveFrame() ),
actionCollection(),
"saveFrame" );
263 d->m_paSecurity =
new TDEAction( i18n(
"Security..." ),
"decrypted", 0,
this, TQT_SLOT( slotSecurity() ),
actionCollection(),
"security" );
264 d->m_paSecurity->setWhatsThis( i18n(
"Security Settings<p>" 265 "Shows the certificate of the displayed page. Only " 266 "pages that have been transmitted using a secure, encrypted connection have a " 268 "Hint: If the image shows a closed lock, the page has been transmitted over a " 269 "secure connection.") );
270 d->m_paDebugRenderTree =
new TDEAction( i18n(
"Print Rendering Tree to STDOUT" ), ALT + CTRL + SHIFT + Key_A,
this, TQT_SLOT( slotDebugRenderTree() ),
actionCollection(),
"debugRenderTree" );
271 d->m_paDebugDOMTree =
new TDEAction( i18n(
"Print DOM Tree to STDOUT" ), ALT + CTRL + SHIFT + Key_D,
this, TQT_SLOT( slotDebugDOMTree() ),
actionCollection(),
"debugDOMTree" );
272 d->m_paStopAnimations =
new TDEAction( i18n(
"Stop Animated Images" ), 0,
this, TQT_SLOT( slotStopAnimations() ),
actionCollection(),
"stopAnimations" );
275 d->m_paSetEncoding->setDelayed(
false );
279 d->m_automaticDetection->insertItem( i18n(
"Semi-Automatic" ), 0 );
280 d->m_automaticDetection->insertItem( i18n(
"Arabic" ), 1 );
281 d->m_automaticDetection->insertItem( i18n(
"Baltic" ), 2 );
282 d->m_automaticDetection->insertItem( i18n(
"Central European" ), 3 );
284 d->m_automaticDetection->insertItem( i18n(
"Greek" ), 5 );
285 d->m_automaticDetection->insertItem( i18n(
"Hebrew" ), 6 );
286 d->m_automaticDetection->insertItem( i18n(
"Japanese" ), 7 );
288 d->m_automaticDetection->insertItem( i18n(
"Russian" ), 9 );
290 d->m_automaticDetection->insertItem( i18n(
"Turkish" ), 11 );
291 d->m_automaticDetection->insertItem( i18n(
"Ukrainian" ), 12 );
293 d->m_automaticDetection->insertItem( i18n(
"Western European" ), 14 );
295 connect( d->m_automaticDetection, TQT_SIGNAL( activated(
int ) ),
this, TQT_SLOT( slotAutomaticDetectionLanguage(
int ) ) );
297 d->m_paSetEncoding->popupMenu()->insertItem( i18n(
"Automatic Detection" ), d->m_automaticDetection, 0 );
302 d->m_manualDetection =
new TDESelectAction( i18n(
"short for Manual Detection",
"Manual" ), 0,
this, TQT_SLOT( slotSetEncoding() ),
actionCollection(),
"manualDetection" );
304 d->m_manualDetection->setItems( encodings );
305 d->m_manualDetection->setCurrentItem( -1 );
306 d->m_paSetEncoding->insert( d->m_manualDetection );
310 if ( config->
hasGroup(
"HTML Settings" ) ) {
311 config->
setGroup(
"HTML Settings" );
312 tdehtml::Decoder::AutoDetectLanguage language;
313 TQCString name = TQTextCodec::codecForLocale()->name();
316 if ( name ==
"cp1256" || name ==
"iso-8859-6" ) {
317 language = tdehtml::Decoder::Arabic;
319 else if ( name ==
"cp1257" || name ==
"iso-8859-13" || name ==
"iso-8859-4" ) {
320 language = tdehtml::Decoder::Baltic;
322 else if ( name ==
"cp1250" || name ==
"ibm852" || name ==
"iso-8859-2" || name ==
"iso-8859-3" ) {
323 language = tdehtml::Decoder::CentralEuropean;
325 else if ( name ==
"cp1251" || name ==
"koi8-r" || name ==
"iso-8859-5" ) {
326 language = tdehtml::Decoder::Russian;
328 else if ( name ==
"koi8-u" ) {
329 language = tdehtml::Decoder::Ukrainian;
331 else if ( name ==
"cp1253" || name ==
"iso-8859-7" ) {
332 language = tdehtml::Decoder::Greek;
334 else if ( name ==
"cp1255" || name ==
"iso-8859-8" || name ==
"iso-8859-8-i" ) {
335 language = tdehtml::Decoder::Hebrew;
337 else if ( name ==
"jis7" || name ==
"eucjp" || name ==
"sjis" ) {
338 language = tdehtml::Decoder::Japanese;
340 else if ( name ==
"cp1254" || name ==
"iso-8859-9" ) {
341 language = tdehtml::Decoder::Turkish;
343 else if ( name ==
"cp1252" || name ==
"iso-8859-1" || name ==
"iso-8859-15" ) {
344 language = tdehtml::Decoder::WesternEuropean;
347 language = tdehtml::Decoder::SemiautomaticDetection;
349 int _id = config->
readNumEntry(
"AutomaticDetectionLanguage", language );
350 d->m_automaticDetection->setItemChecked( _id,
true );
351 d->m_paSetEncoding->popupMenu()->setItemChecked( 0,
true );
353 d->m_autoDetectLanguage =
static_cast< tdehtml::Decoder::AutoDetectLanguage
>( _id );
359 if ( prof == BrowserViewGUI ) {
360 d->m_paIncZoomFactor =
new TDEHTMLZoomFactorAction(
this,
true, i18n(
361 "Enlarge Font" ),
"zoom-in",
"CTRL++;CTRL+=",
this,
363 d->m_paIncZoomFactor->setWhatsThis( i18n(
"Enlarge Font<p>" 364 "Make the font in this window bigger. " 365 "Click and hold down the mouse button for a menu with all available font sizes." ) );
366 d->m_paDecZoomFactor =
new TDEHTMLZoomFactorAction(
this,
false, i18n(
367 "Shrink Font" ),
"zoom-out", CTRL + Key_Minus,
this,
369 d->m_paDecZoomFactor->setWhatsThis( i18n(
"Shrink Font<p>" 370 "Make the font in this window smaller. " 371 "Click and hold down the mouse button for a menu with all available font sizes." ) );
375 d->m_paFind->setWhatsThis( i18n(
"Find text<p>" 376 "Shows a dialog that allows you to find text on the displayed page." ) );
379 d->m_paFindNext->setWhatsThis( i18n(
"Find next<p>" 380 "Find the next occurrence of the text that you " 381 "have found using the <b>Find Text</b> function" ) );
384 d->m_paFindPrev->setWhatsThis( i18n(
"Find previous<p>" 385 "Find the previous occurrence of the text that you " 386 "have found using the <b>Find Text</b> function" ) );
388 d->m_paFindAheadText =
new TDEAction( i18n(
"Find Text as You Type"),
TDEShortcut(
'/' ),
this, TQT_SLOT( slotFindAheadText()),
390 d->m_paFindAheadLinks =
new TDEAction( i18n(
"Find Links as You Type"),
TDEShortcut(
'\'' ),
this, TQT_SLOT( slotFindAheadLink()),
392 d->m_paFindAheadText->setEnabled(
false );
393 d->m_paFindAheadLinks->setEnabled(
false );
401 d->m_paFindAheadLinks->setShortcut(
TDEShortcut());
404 d->m_paPrintFrame =
new TDEAction( i18n(
"Print Frame..." ),
"frameprint", 0,
this, TQT_SLOT( slotPrintFrame() ),
actionCollection(),
"printFrame" );
405 d->m_paPrintFrame->setWhatsThis( i18n(
"Print Frame<p>" 406 "Some pages have several frames. To print only a single frame, click " 407 "on it and then use this function." ) );
413 d->m_paToggleCaretMode =
new TDEToggleAction(i18n(
"Toggle Caret Mode"),
414 Key_F7,
this, TQT_SLOT(slotToggleCaretMode()),
418 d->m_paToggleCaretMode->setShortcut(
TDEShortcut());
421 d->m_bOpenMiddleClick = d->m_settings->isOpenMiddleClickEnabled();
422 d->m_bBackRightClick = d->m_settings->isBackRightClickEnabled();
423 d->m_bJScriptEnabled = d->m_settings->isJavaScriptEnabled();
424 setDebugScript( d->m_settings->isJavaScriptDebugEnabled() );
425 d->m_bJavaEnabled = d->m_settings->isJavaEnabled();
426 d->m_bPluginsEnabled = d->m_settings->isPluginsEnabled();
429 d->m_metaRefreshEnabled = d->m_settings->isAutoDelayedActionsEnabled ();
431 connect( view, TQT_SIGNAL( zoomView(
int ) ), TQT_SLOT( slotZoomView(
int ) ) );
433 connect(
this, TQT_SIGNAL(
completed() ),
434 this, TQT_SLOT( updateActions() ) );
435 connect(
this, TQT_SIGNAL(
completed(
bool ) ),
436 this, TQT_SLOT( updateActions() ) );
437 connect(
this, TQT_SIGNAL(
started( TDEIO::Job * ) ),
438 this, TQT_SLOT( updateActions() ) );
440 d->m_popupMenuXML = KXMLGUIFactory::readConfigFile(
locate(
"data",
"tdehtml/tdehtml_popupmenu.rc", TDEHTMLFactory::instance() ) );
442 connect( tdehtml::Cache::loader(), TQT_SIGNAL( requestStarted( tdehtml::DocLoader*, tdehtml::CachedObject* ) ),
443 this, TQT_SLOT( slotLoaderRequestStarted( tdehtml::DocLoader*, tdehtml::CachedObject* ) ) );
444 connect( tdehtml::Cache::loader(), TQT_SIGNAL( requestDone( tdehtml::DocLoader*, tdehtml::CachedObject *) ),
445 this, TQT_SLOT( slotLoaderRequestDone( tdehtml::DocLoader*, tdehtml::CachedObject *) ) );
446 connect( tdehtml::Cache::loader(), TQT_SIGNAL( requestFailed( tdehtml::DocLoader*, tdehtml::CachedObject *) ),
447 this, TQT_SLOT( slotLoaderRequestDone( tdehtml::DocLoader*, tdehtml::CachedObject *) ) );
449 connect ( &d->m_progressUpdateTimer, TQT_SIGNAL( timeout() ),
this, TQT_SLOT( slotProgressUpdate() ) );
453 connect( &d->m_redirectionTimer, TQT_SIGNAL( timeout() ),
454 this, TQT_SLOT( slotRedirect() ) );
473 config->
setGroup(
"HTML Settings" );
474 config->
writeEntry(
"AutomaticDetectionLanguage", d->m_autoDetectLanguage );
476 delete d->m_automaticDetection;
477 delete d->m_manualDetection;
481 removeJSErrorExtension();
482 delete d->m_statusBarPopupLabel;
489 d->m_manager->setActivePart( 0 );
494 d->m_redirectionTimer.stop();
499 disconnect( tdehtml::Cache::loader(), TQT_SIGNAL( requestStarted( tdehtml::DocLoader*, tdehtml::CachedObject* ) ),
500 this, TQT_SLOT( slotLoaderRequestStarted( tdehtml::DocLoader*, tdehtml::CachedObject* ) ) );
501 disconnect( tdehtml::Cache::loader(), TQT_SIGNAL( requestDone( tdehtml::DocLoader*, tdehtml::CachedObject *) ),
502 this, TQT_SLOT( slotLoaderRequestDone( tdehtml::DocLoader*, tdehtml::CachedObject *) ) );
503 disconnect( tdehtml::Cache::loader(), TQT_SIGNAL( requestFailed( tdehtml::DocLoader*, tdehtml::CachedObject *) ),
504 this, TQT_SLOT( slotLoaderRequestDone( tdehtml::DocLoader*, tdehtml::CachedObject *) ) );
511 d->m_view->viewport()->hide();
512 d->m_view->m_part = 0;
523 TDEHTMLFactory::deregisterPart(
this );
526 bool TDEHTMLPart::restoreURL(
const KURL &url )
528 kdDebug( 6050 ) <<
"TDEHTMLPart::restoreURL " << url.
url() <<
endl;
530 d->m_redirectionTimer.stop();
542 d->m_bComplete =
false;
543 d->m_bLoadEventEmitted =
false;
544 d->m_workingURL =
url;
547 d->m_bJScriptEnabled = TDEHTMLFactory::defaultHTMLSettings()->isJavaScriptEnabled(url.
host());
548 setDebugScript( TDEHTMLFactory::defaultHTMLSettings()->isJavaScriptDebugEnabled() );
549 d->m_bJavaEnabled = TDEHTMLFactory::defaultHTMLSettings()->isJavaEnabled(url.
host());
550 d->m_bPluginsEnabled = TDEHTMLFactory::defaultHTMLSettings()->isPluginsEnabled(url.
host());
554 d->m_restoreScrollPosition =
true;
555 disconnect(d->m_view, TQT_SIGNAL(finishedLayout()),
this, TQT_SLOT(restoreScrollPosition()));
556 connect(d->m_view, TQT_SIGNAL(finishedLayout()),
this, TQT_SLOT(restoreScrollPosition()));
568 kdDebug( 6050 ) <<
"TDEHTMLPart(" <<
this <<
")::openURL " << url.
url() <<
endl;
570 d->m_redirectionTimer.stop();
578 if( d->m_bJScriptEnabled )
579 d->m_statusBarText[BarOverrideText] = d->m_statusBarText[BarDefaultText] = TQString();
589 if ( urls.count() > 1 ) {
590 KURL mainURL = urls.first();
591 int error = mainURL.
queryItem(
"error" ).toInt();
593 if ( error == 0 ) error = TDEIO::ERR_UNKNOWN;
594 TQString errorText = mainURL.
queryItem(
"errText", HINT_UTF8 );
598 emit d->m_extension->setLocationBarURL( d->m_workingURL.prettyURL() );
599 htmlError( error, errorText, d->m_workingURL );
606 TQString userAgent = KProtocolManager::userAgentForHost(host);
607 if (userAgent != KProtocolManager::userAgentForHost(TQString())) {
608 if (!d->m_statusBarUALabel) {
609 d->m_statusBarUALabel =
new KURLLabel(d->m_statusBarExtension->statusBar());
611 d->m_statusBarUALabel->setSizePolicy(TQSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed));
612 d->m_statusBarUALabel->setUseCursor(
false);
613 d->m_statusBarExtension->addStatusBarItem(d->m_statusBarUALabel, 0,
false);
614 d->m_statusBarUALabel->setPixmap(SmallIcon(
"agent",
instance()));
616 TQToolTip::remove(d->m_statusBarUALabel);
618 TQToolTip::add(d->m_statusBarUALabel, i18n(
"The fake user-agent '%1' is in use.").arg(userAgent));
619 }
else if (d->m_statusBarUALabel) {
620 d->m_statusBarExtension->removeStatusBarItem(d->m_statusBarUALabel);
621 delete d->m_statusBarUALabel;
622 d->m_statusBarUALabel = 0L;
636 bool isFrameSet =
false;
637 if ( d->m_doc && d->m_doc->isHTMLDocument() ) {
638 HTMLDocumentImpl* htmlDoc =
static_cast<HTMLDocumentImpl*
>(d->m_doc);
639 isFrameSet = htmlDoc->body() && (htmlDoc->body()->id() == ID_FRAMESET);
642 if ( url.
hasRef() && !isFrameSet )
644 bool noReloadForced = !args.
reload && !args.redirectedRequest() && !args.doPost();
645 if (noReloadForced && urlcmp( url.
url(),
m_url.
url(),
true, true ))
647 kdDebug( 6050 ) <<
"TDEHTMLPart::openURL, jumping to anchor. m_url = " << url.
url() <<
endl;
654 d->m_bComplete =
true;
656 d->m_doc->setParsing(
false);
667 args.xOffset = d->m_view->contentsX();
668 args.yOffset = d->m_view->contentsY();
669 d->m_extension->setURLArgs(args);
675 d->m_restoreScrollPosition = d->m_restored;
676 disconnect(d->m_view, TQT_SIGNAL(finishedLayout()),
this, TQT_SLOT(restoreScrollPosition()));
677 connect(d->m_view, TQT_SIGNAL(finishedLayout()),
this, TQT_SLOT(restoreScrollPosition()));
688 d->m_workingURL =
m_url;
690 args.metaData().insert(
"main_frame_request",
parentPart() == 0 ?
"TRUE" :
"FALSE" );
691 args.metaData().insert(
"ssl_parent_ip", d->m_ssl_parent_ip);
692 args.metaData().insert(
"ssl_parent_cert", d->m_ssl_parent_cert);
693 args.metaData().insert(
"PropagateHttpHeader",
"true");
694 args.metaData().insert(
"ssl_was_in_use", d->m_ssl_in_use ?
"TRUE" :
"FALSE" );
695 args.metaData().insert(
"ssl_activate_warnings",
"TRUE" );
700 args.metaData().insert(
"referrer", d->m_pageReferrer);
701 d->m_cachePolicy = TDEIO::CC_Cache;
703 else if (args.reload)
704 d->m_cachePolicy = TDEIO::CC_Reload;
706 d->m_cachePolicy = KProtocolManager::cacheControl();
708 if ( args.doPost() && (
m_url.
protocol().startsWith(
"http")) )
710 d->m_job = TDEIO::http_post(
m_url, args.postData,
false );
711 d->m_job->addMetaData(
"content-type", args.contentType() );
715 d->m_job = TDEIO::get(
m_url,
false,
false );
716 d->m_job->addMetaData(
"cache", TDEIO::getCacheControlString(d->m_cachePolicy));
720 d->m_job->setWindow(
widget()->topLevelWidget());
721 d->m_job->addMetaData(args.metaData());
723 connect( d->m_job, TQT_SIGNAL( result( TDEIO::Job* ) ),
724 TQT_SLOT( slotFinished( TDEIO::Job* ) ) );
725 connect( d->m_job, TQT_SIGNAL( data( TDEIO::Job*,
const TQByteArray& ) ),
726 TQT_SLOT( slotData( TDEIO::Job*,
const TQByteArray& ) ) );
727 connect ( d->m_job, TQT_SIGNAL( infoMessage( TDEIO::Job*,
const TQString& ) ),
728 TQT_SLOT( slotInfoMessage(TDEIO::Job*,
const TQString& ) ) );
729 connect( d->m_job, TQT_SIGNAL(redirection(TDEIO::Job*,
const KURL& ) ),
730 TQT_SLOT( slotRedirection(TDEIO::Job*,
const KURL&) ) );
732 d->m_bComplete =
false;
733 d->m_bLoadEventEmitted =
false;
736 if( d->m_bJScriptEnabled )
737 d->m_statusBarText[BarOverrideText] = d->m_statusBarText[BarDefaultText] = TQString();
740 d->m_bJScriptEnabled = TDEHTMLFactory::defaultHTMLSettings()->isJavaScriptEnabled(url.
host());
741 setDebugScript( TDEHTMLFactory::defaultHTMLSettings()->isJavaScriptDebugEnabled() );
742 d->m_bJavaEnabled = TDEHTMLFactory::defaultHTMLSettings()->isJavaEnabled(url.
host());
743 d->m_bPluginsEnabled = TDEHTMLFactory::defaultHTMLSettings()->isPluginsEnabled(url.
host());
746 connect( d->m_job, TQT_SIGNAL( speed( TDEIO::Job*,
unsigned long ) ),
747 this, TQT_SLOT( slotJobSpeed( TDEIO::Job*,
unsigned long ) ) );
749 connect( d->m_job, TQT_SIGNAL( percent( TDEIO::Job*,
unsigned long ) ),
750 this, TQT_SLOT( slotJobPercent( TDEIO::Job*,
unsigned long ) ) );
752 connect( d->m_job, TQT_SIGNAL( result( TDEIO::Job* ) ),
753 this, TQT_SLOT( slotJobDone( TDEIO::Job* ) ) );
759 if ( args.reload && !settings()->userStyleSheet().isEmpty() ) {
760 KURL url( settings()->userStyleSheet() );
761 TDEIO::StatJob *job = TDEIO::stat( url,
false );
762 connect( job, TQT_SIGNAL( result( TDEIO::Job * ) ),
763 this, TQT_SLOT( slotUserSheetStatDone( TDEIO::Job * ) ) );
779 if ( d->m_doc && d->m_doc->isHTMLDocument() ) {
780 HTMLDocumentImpl* hdoc =
static_cast<HTMLDocumentImpl*
>( d->m_doc );
782 if ( hdoc->body() && d->m_bLoadEventEmitted ) {
783 hdoc->body()->dispatchWindowEvent( EventImpl::UNLOAD_EVENT,
false,
false );
785 d->m_doc->updateRendering();
786 d->m_bLoadEventEmitted =
false;
790 d->m_bComplete =
true;
791 d->m_bLoadEventEmitted =
true;
792 d->m_cachePolicy = KProtocolManager::cacheControl();
794 disconnect(d->m_view, TQT_SIGNAL(finishedLayout()),
this, TQT_SLOT(restoreScrollPosition()));
797 if ( d->m_doc && d->m_doc->parsing() )
799 kdDebug( 6050 ) <<
" was still parsing... calling end " <<
endl;
800 slotFinishedParsing();
801 d->m_doc->setParsing(
false);
804 if ( !d->m_workingURL.isEmpty() )
811 d->m_workingURL =
KURL();
813 if ( d->m_doc && d->m_doc->docLoader() )
814 tdehtml::Cache::loader()->cancelRequests( d->m_doc->docLoader() );
818 ConstFrameIt it = d->m_frames.begin();
819 const ConstFrameIt
end = d->m_frames.end();
820 for (; it !=
end; ++it )
823 (*it)->m_run->abort();
824 if ( !( *it )->m_part.isNull() )
825 ( *it )->m_part->closeURL();
830 ConstFrameIt it = d->m_objects.begin();
831 const ConstFrameIt
end = d->m_objects.end();
832 for (; it !=
end; ++it)
834 if ( !( *it )->m_part.isNull() )
835 ( *it )->m_part->closeURL();
839 if ( d && d->m_redirectionTimer.isActive() )
840 d->m_redirectionTimer.stop();
847 d->m_view->closeChildDialogs();
854 if (d->m_doc && d->m_doc->isHTMLDocument())
855 return static_cast<HTMLDocumentImpl*>(d->m_doc);
857 return static_cast<HTMLDocumentImpl*
>(0);
870 TQByteArray sourceArray;
871 TQDataStream dataStream( sourceArray, IO_WriteOnly );
873 TQTextStream stream( sourceArray, IO_ReadOnly );
874 stream.setCodec( TQTextCodec::codecForName(
encoding().latin1() ) );
875 sourceStr = stream.read();
879 if( TDEIO::NetAccess::download(
m_url, tmpFile, NULL ) )
882 if ( f.open( IO_ReadOnly ) )
884 TQTextStream stream( &f );
885 stream.setCodec( TQTextCodec::codecForName(
encoding().latin1() ) );
886 sourceStr = stream.read();
889 TDEIO::NetAccess::removeTempFile( tmpFile );
899 return d->m_extension;
904 return d->m_hostExtension;
914 d->m_statusMessagesEnabled = enable;
919 KJSProxy *proxy = jScript();
920 if (!proxy || proxy->paused())
923 return proxy->interpreter();
928 return d->m_statusMessagesEnabled;
933 if ( !enable &&
jScriptEnabled() && d->m_frame && d->m_frame->m_jscript ) {
934 d->m_frame->m_jscript->clear();
936 d->m_bJScriptForce = enable;
937 d->m_bJScriptOverride =
true;
944 if ( d->m_bJScriptOverride )
945 return d->m_bJScriptForce;
946 return d->m_bJScriptEnabled;
951 d->m_metaRefreshEnabled = enable;
956 return d->m_metaRefreshEnabled;
966 #define DIRECT_LINKAGE_TO_ECMA 968 #ifdef DIRECT_LINKAGE_TO_ECMA 969 extern "C" { KJSProxy *kjs_html_init(tdehtml::ChildFrame * childframe); }
972 static bool createJScript(tdehtml::ChildFrame *frame)
974 #ifndef DIRECT_LINKAGE_TO_ECMA 981 void *sym = lib->
symbol(
"kjs_html_init");
987 typedef KJSProxy* (*initFunction)(tdehtml::ChildFrame *);
988 initFunction initSym = (initFunction) sym;
989 frame->m_jscript = (*initSym)(d->m_frame);
990 frame->m_kjs_lib = lib;
992 frame->m_jscript = kjs_html_init(frame);
998 KJSProxy *TDEHTMLPart::jScript()
1002 if ( !d->m_frame ) {
1005 d->m_frame =
new tdehtml::ChildFrame;
1006 d->m_frame->m_part =
this;
1008 ConstFrameIt it = p->d->m_frames.begin();
1009 const ConstFrameIt
end = p->d->m_frames.end();
1010 for (; it !=
end; ++it)
1011 if ((*it)->m_part.operator->() ==
this) {
1019 if ( !d->m_frame->m_jscript )
1020 if (!createJScript(d->m_frame))
1022 if (d->m_bJScriptDebugEnabled)
1023 d->m_frame->m_jscript->setDebugEnabled(
true);
1025 return d->m_frame->m_jscript;
1028 TQVariant TDEHTMLPart::crossFrameExecuteScript(
const TQString& target,
const TQString& script)
1032 TQString trg = target.lower();
1034 if (target ==
"_top") {
1038 else if (target ==
"_parent") {
1042 else if (target ==
"_self" || target ==
"_blank") {
1052 if (destpart ==
this)
1056 if (destpart->checkFrameAccess(
this))
1066 KJSErrorDlg *TDEHTMLPart::jsErrorExtension() {
1067 if (!d->m_settings->jsErrorsEnabled()) {
1075 if (!d->m_statusBarJSErrorLabel) {
1076 d->m_statusBarJSErrorLabel =
new KURLLabel(d->m_statusBarExtension->statusBar());
1078 d->m_statusBarJSErrorLabel->setSizePolicy(TQSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed));
1079 d->m_statusBarJSErrorLabel->setUseCursor(
false);
1080 d->m_statusBarExtension->addStatusBarItem(d->m_statusBarJSErrorLabel, 0,
false);
1081 TQToolTip::add(d->m_statusBarJSErrorLabel, i18n(
"This web page contains coding errors."));
1082 d->m_statusBarJSErrorLabel->setPixmap(SmallIcon(
"bug",
instance()));
1083 connect(d->m_statusBarJSErrorLabel, TQT_SIGNAL(leftClickedURL()), TQT_SLOT(launchJSErrorDialog()));
1084 connect(d->m_statusBarJSErrorLabel, TQT_SIGNAL(rightClickedURL()), TQT_SLOT(jsErrorDialogContextMenu()));
1087 d->m_jsedlg =
new KJSErrorDlg;
1090 d->m_jsedlg->_clear->setIconSet(SmallIconSet(
"locationbar_erase"));
1091 d->m_jsedlg->_close->setIconSet(SmallIconSet(
"window-close"));
1097 void TDEHTMLPart::removeJSErrorExtension() {
1102 if (d->m_statusBarJSErrorLabel != 0) {
1103 d->m_statusBarExtension->removeStatusBarItem( d->m_statusBarJSErrorLabel );
1104 delete d->m_statusBarJSErrorLabel;
1105 d->m_statusBarJSErrorLabel = 0;
1111 void TDEHTMLPart::disableJSErrorExtension() {
1112 removeJSErrorExtension();
1117 d->m_settings->setJSErrorsEnabled(
false);
1118 DCOPClient::mainClient()->send(
"konqueror*",
"KonquerorIface",
"reparseConfiguration()", TQByteArray());
1121 void TDEHTMLPart::jsErrorDialogContextMenu() {
1123 m->insertItem(i18n(
"&Hide Errors"),
this, TQT_SLOT(removeJSErrorExtension()));
1124 m->insertItem(i18n(
"&Disable Error Reporting"),
this, TQT_SLOT(disableJSErrorExtension()));
1125 m->popup(TQCursor::pos());
1128 void TDEHTMLPart::launchJSErrorDialog() {
1129 KJSErrorDlg *dlg = jsErrorExtension();
1136 void TDEHTMLPart::launchJSConfigDialog() {
1138 args <<
"tdehtml_java_js";
1146 kdDebug(6070) <<
"executeScript: caller='" << name() <<
"' filename=" << filename <<
" baseLine=" << baseLine <<
endl;
1148 KJSProxy *proxy = jScript();
1150 if (!proxy || proxy->paused())
1153 KJS::Completion comp;
1155 TQVariant ret = proxy->evaluate(filename, baseLine, script, n, &comp);
1160 if (comp.complType() == KJS::Throw && !comp.value().isNull()) {
1161 KJSErrorDlg *dlg = jsErrorExtension();
1163 KJS::UString msg = comp.value().toString(proxy->interpreter()->globalExec());
1164 dlg->addError(i18n(
"<b>Error</b>: %1: %2").arg(filename, msg.qstring()));
1169 if ( !d->m_redirectURL.isEmpty() && d->m_delayRedirect == -1 )
1171 kdDebug(6070) <<
"executeScript done, handling immediate redirection NOW" <<
endl;
1173 tdehtml::Tokenizer* t = d->m_doc->tokenizer();
1176 d->m_redirectionTimer.start( 0,
true );
1190 kdDebug(6070) <<
"TDEHTMLPart::executeScript caller='" << name() <<
"' node=" << n.
nodeName().string().latin1() <<
"(" << (n.
isNull() ? 0 : n.
nodeType()) <<
") " << endl;
1192 KJSProxy *proxy = jScript();
1194 if (!proxy || proxy->paused())
1196 ++(d->m_runningScripts);
1197 KJS::Completion comp;
1198 const TQVariant ret = proxy->evaluate( TQString(), 1, script, n, &comp );
1199 --(d->m_runningScripts);
1204 if (comp.complType() == KJS::Throw && !comp.value().isNull()) {
1205 KJSErrorDlg *dlg = jsErrorExtension();
1207 KJS::UString msg = comp.value().toString(proxy->interpreter()->globalExec());
1208 dlg->addError(i18n(
"<b>Error</b>: node %1: %2").arg(n.
nodeName().string()).arg(msg.qstring()));
1212 if (!d->m_runningScripts && d->m_doc && !d->m_doc->parsing() && d->m_submitForm )
1216 kdDebug(6070) <<
"TDEHTMLPart::executeScript - done" <<
endl;
1221 bool TDEHTMLPart::scheduleScript(
const DOM::Node &n,
const TQString& script)
1225 d->scheduledScript = script;
1226 d->scheduledScriptNode = n;
1231 TQVariant TDEHTMLPart::executeScheduledScript()
1233 if( d->scheduledScript.isEmpty() )
1238 TQVariant ret =
executeScript( d->scheduledScriptNode, d->scheduledScript );
1239 d->scheduledScript = TQString();
1247 d->m_bJavaForce = enable;
1248 d->m_bJavaOverride =
true;
1256 if( d->m_bJavaOverride )
1257 return d->m_bJavaForce;
1258 return d->m_bJavaEnabled;
1276 d->m_bPluginsForce = enable;
1277 d->m_bPluginsOverride =
true;
1284 if ( d->m_bPluginsOverride )
1285 return d->m_bPluginsForce;
1286 return d->m_bPluginsEnabled;
1289 static int s_DOMTreeIndentLevel = 0;
1291 void TDEHTMLPart::slotDebugDOMTree()
1293 if ( d->m_doc && d->m_doc->firstChild() )
1294 tqDebug(
"%s", d->m_doc->firstChild()->toString().string().latin1());
1298 const int indentLevel = s_DOMTreeIndentLevel++;
1300 ConstFrameIt it = d->m_frames.begin();
1301 const ConstFrameIt
end = d->m_frames.end();
1302 for (; it !=
end; ++it )
1303 if ( !( *it )->m_part.isNull() && (*it)->m_part->inherits(
"TDEHTMLPart" ) ) {
1305 kdDebug(6050) << TQString().leftJustify(s_DOMTreeIndentLevel*4,
' ') <<
"FRAME " << p->name() <<
" " <<
endl;
1306 static_cast<TDEHTMLPart*
>( p )->slotDebugDOMTree();
1308 s_DOMTreeIndentLevel = indentLevel;
1311 void TDEHTMLPart::slotDebugScript()
1314 jScript()->showDebugWindow();
1317 void TDEHTMLPart::slotDebugRenderTree()
1321 d->m_doc->renderer()->printTree();
1331 void TDEHTMLPart::slotStopAnimations()
1338 if ( d->m_doc && d->m_doc->docLoader()->autoloadImages() == enable )
1342 d->m_doc->docLoader()->setAutoloadImages( enable );
1347 delete d->m_paLoadImages;
1348 d->m_paLoadImages = 0;
1350 else if ( !d->m_paLoadImages )
1351 d->m_paLoadImages =
new TDEAction( i18n(
"Display Images on Page" ),
"images_display", 0,
this, TQT_SLOT( slotLoadImages() ),
actionCollection(),
"loadImages" );
1353 if ( d->m_paLoadImages ) {
1354 TQPtrList<TDEAction> lst;
1355 lst.append( d->m_paLoadImages );
1363 return d->m_doc->docLoader()->autoloadImages();
1368 void TDEHTMLPart::clear()
1370 if ( d->m_bCleared )
1373 d->m_bCleared =
true;
1375 d->m_bClearing =
true;
1378 ConstFrameIt it = d->m_frames.begin();
1379 const ConstFrameIt
end = d->m_frames.end();
1380 for(; it !=
end; ++it )
1384 (*it)->m_run->abort();
1389 ConstFrameIt it = d->m_objects.begin();
1390 const ConstFrameIt
end = d->m_objects.end();
1391 for(; it !=
end; ++it )
1395 (*it)->m_run->abort();
1406 if (d->m_doc->attached())
1411 if ( d->m_frame && d->m_frame->m_jscript )
1412 d->m_frame->m_jscript->clear();
1415 if (d->m_doc && d->m_doc->renderer() && d->m_doc->renderer()->layer())
1416 d->m_doc->renderer()->layer()->suspendMarquees();
1428 delete d->m_decoder;
1434 this, TQT_SLOT( slotActiveFrameChanged(
KParts::Part * ) ) );
1437 if (d->m_frames.count())
1439 TDEHTMLFrameList frames = d->m_frames;
1440 d->m_frames.clear();
1441 ConstFrameIt it = frames.begin();
1442 const ConstFrameIt
end = frames.end();
1443 for(; it !=
end; ++it )
1445 if ( (*it)->m_part )
1453 d->m_suppressedPopupOriginParts.clear();
1455 if (d->m_objects.count())
1457 TDEHTMLFrameList objects = d->m_objects;
1458 d->m_objects.clear();
1459 ConstFrameIt oi = objects.begin();
1460 const ConstFrameIt oiEnd = objects.end();
1462 for (; oi != oiEnd; ++oi )
1469 this, TQT_SLOT( slotActiveFrameChanged(
KParts::Part * ) ) );
1472 d->m_delayRedirect = 0;
1473 d->m_redirectURL = TQString();
1474 d->m_redirectionTimer.stop();
1475 d->m_redirectLockHistory =
true;
1476 d->m_bClearing =
false;
1477 d->m_frameNameId = 1;
1478 d->m_bFirstData =
true;
1480 d->m_bMousePressed =
false;
1484 d->m_startOffset = 0;
1486 #ifndef QT_NO_CLIPBOARD 1487 connect( kapp->clipboard(), TQT_SIGNAL(
selectionChanged()), TQT_SLOT( slotClearSelection()));
1490 d->m_jobPercent = 0;
1492 if ( !d->m_haveEncoding )
1493 d->m_encoding = TQString();
1495 d->m_parsetime.restart();
1504 DOM::HTMLDocumentImpl *TDEHTMLPart::docImpl()
const 1506 if ( d && d->m_doc && d->m_doc->isHTMLDocument() )
1507 return static_cast<HTMLDocumentImpl*>(d->m_doc);
1511 DOM::DocumentImpl *TDEHTMLPart::xmlDocImpl()
const 1518 void TDEHTMLPart::slotInfoMessage(TDEIO::Job* tdeio_job,
const TQString& msg)
1520 assert(d->m_job == tdeio_job);
1523 setStatusBarText(msg, BarDefaultText);
1526 void TDEHTMLPart::setPageSecurity( PageSecurity sec )
1528 emit d->m_extension->setPageSecurity( sec );
1529 if ( sec != NotCrypted && !d->m_statusBarIconLabel && !
parentPart() ) {
1530 d->m_statusBarIconLabel =
new KURLLabel( d->m_statusBarExtension->statusBar() );
1532 d->m_statusBarIconLabel->setSizePolicy(TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ));
1533 d->m_statusBarIconLabel->setUseCursor(
false );
1534 d->m_statusBarExtension->addStatusBarItem( d->m_statusBarIconLabel, 0,
false );
1535 connect( d->m_statusBarIconLabel, TQT_SIGNAL( leftClickedURL() ), TQT_SLOT( slotSecurity() ) );
1536 }
else if (d->m_statusBarIconLabel) {
1537 TQToolTip::remove(d->m_statusBarIconLabel);
1540 if (d->m_statusBarIconLabel) {
1541 if (d->m_ssl_in_use)
1542 TQToolTip::add(d->m_statusBarIconLabel,
1543 i18n(
"Session is secured with %1 bit %2.").arg(d->m_ssl_cipher_used_bits).arg(d->m_ssl_cipher));
1544 else TQToolTip::add(d->m_statusBarIconLabel, i18n(
"Session is not secured."));
1550 iconName =
"decrypted";
1551 if ( d->m_statusBarIconLabel ) {
1552 d->m_statusBarExtension->removeStatusBarItem( d->m_statusBarIconLabel );
1553 delete d->m_statusBarIconLabel;
1554 d->m_statusBarIconLabel = 0L;
1558 iconName =
"encrypted";
1561 iconName =
"halfencrypted";
1564 d->m_paSecurity->setIcon( iconName );
1565 if ( d->m_statusBarIconLabel )
1566 d->m_statusBarIconLabel->setPixmap( SmallIcon( iconName,
instance() ) );
1569 void TDEHTMLPart::slotData( TDEIO::Job* tdeio_job,
const TQByteArray &data )
1571 assert ( d->m_job == tdeio_job );
1575 if ( !d->m_workingURL.isEmpty() )
1582 d->m_job->suspend();
1583 begin( d->m_workingURL, d->m_extension->urlArgs().xOffset, d->m_extension->urlArgs().yOffset );
1586 if (d->m_cachePolicy == TDEIO::CC_Refresh)
1587 d->m_doc->docLoader()->setCachePolicy(TDEIO::CC_Verify);
1589 d->m_doc->docLoader()->setCachePolicy(d->m_cachePolicy);
1591 d->m_workingURL =
KURL();
1596 d->m_httpHeaders = d->m_job->queryMetaData(
"HTTP-Headers");
1597 time_t cacheCreationDate = d->m_job->queryMetaData(
"cache-creation-date").toLong();
1598 d->m_doc->docLoader()->setCacheCreationDate(cacheCreationDate);
1600 d->m_pageServices = d->m_job->queryMetaData(
"PageServices");
1601 d->m_pageReferrer = d->m_job->queryMetaData(
"referrer");
1602 d->m_bSecurityInQuestion =
false;
1603 d->m_ssl_in_use = (d->m_job->queryMetaData(
"ssl_in_use") ==
"TRUE");
1607 if (p && p->d->m_ssl_in_use != d->m_ssl_in_use) {
1610 p->setPageSecurity( Mixed );
1611 p->d->m_bSecurityInQuestion =
true;
1615 setPageSecurity( d->m_ssl_in_use ? Encrypted : NotCrypted );
1618 d->m_ssl_parent_ip = d->m_job->queryMetaData(
"ssl_parent_ip");
1619 d->m_ssl_parent_cert = d->m_job->queryMetaData(
"ssl_parent_cert");
1620 d->m_ssl_peer_certificate = d->m_job->queryMetaData(
"ssl_peer_certificate");
1621 d->m_ssl_peer_chain = d->m_job->queryMetaData(
"ssl_peer_chain");
1622 d->m_ssl_peer_ip = d->m_job->queryMetaData(
"ssl_peer_ip");
1623 d->m_ssl_cipher = d->m_job->queryMetaData(
"ssl_cipher");
1624 d->m_ssl_cipher_desc = d->m_job->queryMetaData(
"ssl_cipher_desc");
1625 d->m_ssl_cipher_version = d->m_job->queryMetaData(
"ssl_cipher_version");
1626 d->m_ssl_cipher_used_bits = d->m_job->queryMetaData(
"ssl_cipher_used_bits");
1627 d->m_ssl_cipher_bits = d->m_job->queryMetaData(
"ssl_cipher_bits");
1628 d->m_ssl_cert_state = d->m_job->queryMetaData(
"ssl_cert_state");
1630 if (d->m_statusBarIconLabel) {
1631 TQToolTip::remove(d->m_statusBarIconLabel);
1632 if (d->m_ssl_in_use) {
1633 TQToolTip::add(d->m_statusBarIconLabel, i18n(
"Session is secured with %1 bit %2.").arg(d->m_ssl_cipher_used_bits).arg(d->m_ssl_cipher));
1635 TQToolTip::add(d->m_statusBarIconLabel, i18n(
"Session is not secured."));
1640 TQString qData = d->m_job->queryMetaData(
"charset");
1641 if ( !qData.isEmpty() && !d->m_haveEncoding )
1642 d->m_encoding = qData;
1646 qData = d->m_job->queryMetaData(
"http-refresh");
1647 if( !qData.isEmpty())
1648 d->m_doc->processHttpEquiv(
"refresh", qData);
1659 TQString language = d->m_job->queryMetaData(
"content-language");
1660 if (!language.isEmpty())
1661 d->m_doc->setContentLanguage(language);
1665 d->m_lastModified = d->m_job->queryMetaData(
"modified");
1667 d->m_lastModified = TQString();
1671 write( data.data(), data.size() );
1672 if (d->m_frame && d->m_frame->m_jscript)
1673 d->m_frame->m_jscript->dataReceived();
1676 void TDEHTMLPart::slotRestoreData(
const TQByteArray &data )
1679 if ( !d->m_workingURL.isEmpty() )
1681 long saveCacheId = d->m_cacheId;
1682 TQString savePageReferrer = d->m_pageReferrer;
1683 TQString saveEncoding = d->m_encoding;
1684 begin( d->m_workingURL, d->m_extension->urlArgs().xOffset, d->m_extension->urlArgs().yOffset );
1685 d->m_encoding = saveEncoding;
1686 d->m_pageReferrer = savePageReferrer;
1687 d->m_cacheId = saveCacheId;
1688 d->m_workingURL =
KURL();
1692 write( data.data(), data.size() );
1694 if (data.size() == 0)
1698 if (d->m_doc && d->m_doc->parsing())
1705 kdDebug(6050) <<
"TDEHTMLPart::showError d->m_bParsing=" << (d->m_doc && d->m_doc->parsing()) <<
" d->m_bComplete=" << d->m_bComplete
1706 <<
" d->m_bCleared=" << d->m_bCleared << endl;
1708 if (job->error() == TDEIO::ERR_NO_CONTENT)
1711 if ( (d->m_doc && d->m_doc->parsing()) || d->m_workingURL.isEmpty() )
1712 job->showErrorDialog( );
1715 htmlError( job->error(), job->errorText(), d->m_workingURL );
1722 kdDebug(6050) <<
"TDEHTMLPart::htmlError errorCode=" << errorCode <<
" text=" << text <<
endl;
1724 bool bJSFO = d->m_bJScriptForce;
1725 bool bJSOO = d->m_bJScriptOverride;
1726 d->m_bJScriptForce =
false;
1727 d->m_bJScriptOverride =
true;
1729 TQString errText = TQString::fromLatin1(
"<HTML dir=%1><HEAD><TITLE>" )
1730 .arg(TQApplication::reverseLayout() ?
"rtl" :
"ltr");
1731 errText += i18n(
"Error while loading %1" ).arg( reqUrl.
htmlURL() );
1732 errText += TQString::fromLatin1(
"</TITLE></HEAD><BODY><P>" );
1733 errText += i18n(
"An error occurred while loading <B>%1</B>:" ).arg( reqUrl.
htmlURL() );
1734 errText += TQString::fromLatin1(
"</P>" );
1735 errText += TQStyleSheet::convertFromPlainText( TDEIO::buildErrorString( errorCode, text ) );
1736 errText += TQString::fromLatin1(
"</BODY></HTML>" );
1740 d->m_bJScriptForce = bJSFO;
1741 d->m_bJScriptOverride = bJSOO;
1747 d->m_workingURL =
KURL();
1753 TQString errorName, techName, description;
1754 TQStringList causes, solutions;
1756 TQByteArray raw = TDEIO::rawErrorDetail( errorCode, text, &reqUrl );
1757 TQDataStream stream(raw, IO_ReadOnly);
1759 stream >> errorName >> techName >> description >> causes >> solutions;
1761 TQString
url, protocol, datetime;
1767 TQString doc = TQString::fromLatin1(
"<html><head><title>" );
1768 doc += i18n(
"Error: " );
1770 doc += TQString::fromLatin1(
" - %1</title></head><body><h1>" ).arg( url );
1771 doc += i18n(
"The requested operation could not be completed" );
1772 doc += TQString::fromLatin1(
"</h1><h2>" );
1774 doc += TQString::fromLatin1(
"</h2>" );
1775 if ( !techName.isNull() ) {
1776 doc += TQString::fromLatin1(
"<h2>" );
1777 doc += i18n(
"Technical Reason: " );
1779 doc += TQString::fromLatin1(
"</h2>" );
1781 doc += TQString::fromLatin1(
"<h3>" );
1782 doc += i18n(
"Details of the Request:" );
1783 doc += TQString::fromLatin1(
"</h3><ul><li>" );
1784 doc += i18n(
"URL: %1" ).arg( url );
1785 doc += TQString::fromLatin1(
"</li><li>" );
1786 if ( !protocol.isNull() ) {
1789 doc += TQString::fromLatin1(
"</li><li>" );
1791 doc += i18n(
"Date and Time: %1" ).arg( datetime );
1792 doc += TQString::fromLatin1(
"</li><li>" );
1793 doc += i18n(
"Additional Information: %1" ).arg( text );
1794 doc += TQString::fromLatin1(
"</li></ul><h3>" );
1795 doc += i18n(
"Description:" );
1796 doc += TQString::fromLatin1(
"</h3><p>" );
1798 doc += TQString::fromLatin1(
"</p>" );
1799 if ( causes.count() ) {
1800 doc += TQString::fromLatin1(
"<h3>" );
1801 doc += i18n(
"Possible Causes:" );
1802 doc += TQString::fromLatin1(
"</h3><ul><li>" );
1803 doc += causes.join(
"</li><li>" );
1804 doc += TQString::fromLatin1(
"</li></ul>" );
1806 if ( solutions.count() ) {
1807 doc += TQString::fromLatin1(
"<h3>" );
1808 doc += i18n(
"Possible Solutions:" );
1809 doc += TQString::fromLatin1(
"</h3><ul><li>" );
1810 doc += solutions.join(
"</li><li>" );
1811 doc += TQString::fromLatin1(
"</li></ul>" );
1813 doc += TQString::fromLatin1(
"</body></html>" );
1819 void TDEHTMLPart::slotFinished( TDEIO::Job * job )
1833 if (job->error() == TDEIO::ERR_IS_DIRECTORY)
1836 emit d->m_extension->openURLRequest( d->m_workingURL, args );
1840 emit
canceled( job->errorString() );
1848 TDEIO::TransferJob *tjob = ::tqqt_cast<TDEIO::TransferJob*>(job);
1849 if (tjob && tjob->isErrorPage()) {
1850 tdehtml::RenderPart *renderPart = d->m_frame ?
static_cast<tdehtml::RenderPart *
>(d->m_frame->m_frame) : 0;
1852 HTMLObjectElementImpl* elt =
static_cast<HTMLObjectElementImpl *
>(renderPart->element());
1855 elt->renderAlternative();
1858 if (d->m_bComplete)
return;
1864 if (d->m_frame && d->m_frame->m_jscript)
1865 d->m_frame->m_jscript->dataReceived();
1867 if ( d->m_doc && d->m_doc->docLoader()->expireDate() &&
m_url.
protocol().lower().startsWith(
"http"))
1868 TDEIO::http_update_cache(
m_url,
false, d->m_doc->docLoader()->expireDate());
1870 d->m_workingURL =
KURL();
1872 if ( d->m_doc && d->m_doc->parsing())
1880 removeJSErrorExtension();
1882 d->m_openableSuppressedPopups = 0;
1883 for ( TQValueListIterator<TQGuardedPtr<TDEHTMLPart> > i = d->m_suppressedPopupOriginParts.begin();
1884 i != d->m_suppressedPopupOriginParts.end(); ++i ) {
1887 KJS::Window *w = KJS::Window::retrieveWindow( part );
1889 w->forgetSuppressedWindows();
1895 d->m_bCleared =
false;
1897 d->m_bComplete =
false;
1898 d->m_bLoadEventEmitted =
false;
1901 TQString urlString = url.
url();
1902 TDEHTMLFactory::vLinks()->insert( urlString );
1904 if ( urlString != urlString2 ) {
1905 TDEHTMLFactory::vLinks()->insert( urlString2 );
1915 args.yOffset = yOffset;
1916 d->m_extension->setURLArgs( args );
1918 d->m_pageReferrer = TQString();
1921 d->m_referrer = ref.
protocol().startsWith(
"http") ? ref.
url() :
"";
1925 bool servedAsXHTML = args.serviceType ==
"application/xhtml+xml";
1926 bool servedAsXML = KMimeType::mimeType(args.serviceType)->is(
"text/xml" );
1928 if ( servedAsXML && !servedAsXHTML ) {
1929 d->m_doc = DOMImplementationImpl::instance()->createDocument( d->m_view );
1931 d->m_doc = DOMImplementationImpl::instance()->createHTMLDocument( d->m_view );
1933 static_cast<HTMLDocumentImpl *
>(d->m_doc)->setHTMLRequested( !servedAsXHTML );
1935 #ifndef TDEHTML_NO_CARET 1941 if (!d->m_doc->attached())
1942 d->m_doc->attach( );
1943 d->m_doc->setBaseURL(
KURL() );
1944 d->m_doc->docLoader()->setShowAnimations( TDEHTMLFactory::defaultHTMLSettings()->showAnimations() );
1947 d->m_paUseStylesheet->setItems(TQStringList());
1948 d->m_paUseStylesheet->setEnabled(
false );
1951 TQString userStyleSheet = TDEHTMLFactory::defaultHTMLSettings()->userStyleSheet();
1952 if ( !userStyleSheet.isEmpty() )
1955 d->m_doc->setRestoreState(args.docState);
1957 connect(d->m_doc,TQT_SIGNAL(finishedParsing()),
this,TQT_SLOT(slotFinishedParsing()));
1959 emit d->m_extension->enableAction(
"print",
true );
1961 d->m_doc->setParsing(
true);
1966 if ( !d->m_decoder )
1967 d->m_decoder = createDecoder();
1970 len = strlen( str );
1975 TQString decoded = d->m_decoder->decode( str, len );
1977 if(decoded.isEmpty())
return;
1979 if(d->m_bFirstData) {
1981 d->m_doc->determineParseMode( decoded );
1982 d->m_bFirstData =
false;
1986 if(d->m_decoder->visuallyOrdered()) d->m_doc->setVisuallyOrdered();
1987 d->m_doc->setDecoderCodec(d->m_decoder->codec());
1988 d->m_doc->recalcStyle( NodeImpl::Force );
1991 tdehtml::Tokenizer* t = d->m_doc->tokenizer();
1993 t->write( decoded,
true );
2001 if(d->m_bFirstData) {
2003 d->m_doc->setParseMode( DocumentImpl::Strict );
2004 d->m_bFirstData =
false;
2006 tdehtml::Tokenizer* t = d->m_doc->tokenizer();
2008 t->write( str,
true );
2015 TQString decoded = d->m_decoder->flush();
2016 if (d->m_bFirstData) {
2017 d->m_bFirstData =
false;
2018 d->m_doc->determineParseMode(decoded);
2022 d->m_doc->finishParsing();
2028 KMimeType::Ptr mime = KMimeType::mimeType(mimeType);
2029 if ( mime->is(
"text/html" ) || mime->is(
"text/xml" ) )
2039 write( data.data(), data.size() );
2052 if (!d->m_view)
return;
2053 d->m_view->paint(p, rc, yOff, more);
2059 d->m_doc->docLoader()->setShowAnimations( TDEHTMLSettings::KAnimationDisabled );
2061 ConstFrameIt it = d->m_frames.begin();
2062 const ConstFrameIt
end = d->m_frames.end();
2063 for (; it !=
end; ++it )
2064 if ( !(*it)->m_part.isNull() && (*it)->m_part->inherits(
"TDEHTMLPart" ) ) {
2070 void TDEHTMLPart::resetFromScript()
2073 d->m_bComplete =
false;
2074 d->m_bLoadEventEmitted =
false;
2075 disconnect(d->m_doc,TQT_SIGNAL(finishedParsing()),
this,TQT_SLOT(slotFinishedParsing()));
2076 connect(d->m_doc,TQT_SIGNAL(finishedParsing()),
this,TQT_SLOT(slotFinishedParsing()));
2077 d->m_doc->setParsing(
true);
2082 void TDEHTMLPart::slotFinishedParsing()
2084 d->m_doc->setParsing(
false);
2085 checkEmitLoadEvent();
2086 disconnect(d->m_doc,TQT_SIGNAL(finishedParsing()),
this,TQT_SLOT(slotFinishedParsing()));
2094 void TDEHTMLPart::slotLoaderRequestStarted( tdehtml::DocLoader* dl, tdehtml::CachedObject *obj )
2096 if ( obj && obj->type() == tdehtml::CachedObject::Image && d->m_doc && d->m_doc->docLoader() == dl ) {
2100 ++(p->d->m_totalObjectCount);
2102 if ( !p && op->d->m_loadedObjects <= op->d->m_totalObjectCount
2103 && !op->d->m_progressUpdateTimer.isActive())
2104 op->d->m_progressUpdateTimer.start( 200,
true );
2109 void TDEHTMLPart::slotLoaderRequestDone( tdehtml::DocLoader* dl, tdehtml::CachedObject *obj )
2111 if ( obj && obj->type() == tdehtml::CachedObject::Image && d->m_doc && d->m_doc->docLoader() == dl ) {
2115 ++(p->d->m_loadedObjects);
2117 if ( !p && op->d->m_loadedObjects <= op->d->m_totalObjectCount && op->d->m_jobPercent <= 100
2118 && !op->d->m_progressUpdateTimer.isActive())
2119 op->d->m_progressUpdateTimer.start( 200,
true );
2126 void TDEHTMLPart::slotProgressUpdate()
2129 if ( d->m_loadedObjects < d->m_totalObjectCount )
2130 percent = d->m_jobPercent / 4 + ( d->m_loadedObjects*300 ) / ( 4*d->m_totalObjectCount );
2132 percent = d->m_jobPercent;
2134 if( d->m_bComplete )
2137 if (d->m_statusMessagesEnabled) {
2138 if( d->m_bComplete )
2139 emit d->m_extension->infoMessage( i18n(
"Page loaded." ));
2140 else if ( d->m_loadedObjects < d->m_totalObjectCount && percent >= 75 )
2141 emit d->m_extension->infoMessage( i18n(
"%n Image of %1 loaded.",
"%n Images of %1 loaded.", d->m_loadedObjects).arg(d->m_totalObjectCount) );
2144 emit d->m_extension->loadingProgress( percent );
2147 void TDEHTMLPart::slotJobSpeed( TDEIO::Job* ,
unsigned long speed )
2149 d->m_jobspeed = speed;
2154 void TDEHTMLPart::slotJobPercent( TDEIO::Job* ,
unsigned long percent )
2156 d->m_jobPercent = percent;
2159 d->m_progressUpdateTimer.start( 0,
true );
2162 void TDEHTMLPart::slotJobDone( TDEIO::Job* )
2164 d->m_jobPercent = 100;
2167 d->m_progressUpdateTimer.start( 0,
true );
2170 void TDEHTMLPart::slotUserSheetStatDone( TDEIO::Job *_job )
2172 using namespace TDEIO;
2174 if ( _job->error() ) {
2179 const UDSEntry entry =
dynamic_cast<TDEIO::StatJob *
>( _job )->statResult();
2180 UDSEntry::ConstIterator it = entry.begin();
2181 const UDSEntry::ConstIterator
end = entry.end();
2182 for ( ; it !=
end; ++it ) {
2183 if ( ( *it ).m_uds == UDS_MODIFICATION_TIME ) {
2191 const time_t
lastModified =
static_cast<time_t
>( ( *it ).m_long );
2192 if ( d->m_userStyleSheetLastModified >= lastModified ) {
2201 void TDEHTMLPart::checkCompleted()
2208 if (d->m_doc && !d->m_doc->parsing() && !d->m_focusNodeRestored)
2210 if (d->m_focusNodeNumber >= 0)
2211 d->m_doc->setFocusNode(d->m_doc->nodeWithAbsIndex(d->m_focusNodeNumber));
2213 d->m_focusNodeRestored =
true;
2216 bool bPendingChildRedirection =
false;
2218 ConstFrameIt it = d->m_frames.begin();
2219 const ConstFrameIt
end = d->m_frames.end();
2220 for (; it !=
end; ++it ) {
2221 if ( !(*it)->m_bCompleted )
2227 if ( (*it)->m_bPendingRedirection )
2228 bPendingChildRedirection =
true;
2233 ConstFrameIt oi = d->m_objects.begin();
2234 const ConstFrameIt oiEnd = d->m_objects.end();
2236 for (; oi != oiEnd; ++oi )
2237 if ( !(*oi)->m_bCompleted )
2241 if ( d->m_bComplete || (d->m_doc && d->m_doc->parsing()) )
2246 if ( d->m_doc && d->m_doc->docLoader() )
2247 requests = tdehtml::Cache::loader()->numRequests( d->m_doc->docLoader() );
2257 d->m_bComplete =
true;
2258 d->m_cachePolicy = KProtocolManager::cacheControl();
2259 d->m_totalObjectCount = 0;
2260 d->m_loadedObjects = 0;
2266 if ( !p && !op->d->m_progressUpdateTimer.isActive())
2267 op->d->m_progressUpdateTimer.start( 0,
true );
2270 checkEmitLoadEvent();
2272 bool pendingAction =
false;
2274 if ( !d->m_redirectURL.isEmpty() )
2280 d->m_redirectionTimer.start( 1000 * d->m_delayRedirect,
true );
2285 pendingAction =
true;
2287 else if ( bPendingChildRedirection )
2289 pendingAction =
true;
2296 d->m_view->complete( pendingAction );
2299 TQStringList sheets;
2301 sheets = d->m_doc->availableStyleSheets();
2302 sheets.prepend( i18n(
"Automatic Detection" ) );
2303 d->m_paUseStylesheet->setItems( sheets );
2305 d->m_paUseStylesheet->setEnabled( sheets.count() > 2);
2306 if (sheets.count() > 2)
2308 d->m_paUseStylesheet->setCurrentItem(kMax(sheets.findIndex(d->m_sheetUsed), 0));
2309 slotUseStylesheet();
2315 kdDebug(6050) <<
"DONE: " <<d->m_parsetime.elapsed() <<
endl;
2319 void TDEHTMLPart::checkEmitLoadEvent()
2321 if ( d->m_bLoadEventEmitted || !d->m_doc || d->m_doc->parsing() )
return;
2323 ConstFrameIt it = d->m_frames.begin();
2324 const ConstFrameIt
end = d->m_frames.end();
2325 for (; it !=
end; ++it )
2326 if ( !(*it)->m_bCompleted )
2329 ConstFrameIt oi = d->m_objects.begin();
2330 const ConstFrameIt oiEnd = d->m_objects.end();
2332 for (; oi != oiEnd; ++oi )
2333 if ( !(*oi)->m_bCompleted )
2340 if ( d->m_doc && d->m_doc->docLoader() )
2341 requests = tdehtml::Cache::loader()->numRequests( d->m_doc->docLoader() );
2346 d->m_bLoadEventEmitted =
true;
2353 return d->m_settings;
2356 #ifndef KDE_NO_COMPAT 2357 KURL TDEHTMLPart::baseURL()
const 2359 if ( !d->m_doc )
return KURL();
2361 return d->m_doc->baseURL();
2364 TQString TDEHTMLPart::baseTarget()
const 2366 if ( !d->m_doc )
return TQString();
2368 return d->m_doc->baseTarget();
2374 if ( !d->m_doc )
return KURL( url );
2377 return KURL(d->m_doc->completeURL(url), d->m_decoder->codec()->mibEnum());
2379 return KURL( d->m_doc->completeURL( url ) );
2386 kdDebug(6050) <<
"TDEHTMLPart::scheduleRedirection delay=" << delay <<
" url=" << url <<
endl;
2387 kdDebug(6050) <<
"current redirectURL=" << d->m_redirectURL <<
" with delay " << d->m_delayRedirect <<
endl;
2388 if( delay < 24*60*60 &&
2389 ( d->m_redirectURL.isEmpty() || delay <= d->m_delayRedirect) ) {
2390 d->m_delayRedirect = delay;
2391 d->m_redirectURL =
url;
2392 d->m_redirectLockHistory = doLockHistory;
2393 kdDebug(6050) <<
" d->m_bComplete=" << d->m_bComplete <<
endl;
2394 if ( d->m_bComplete ) {
2395 d->m_redirectionTimer.stop();
2396 d->m_redirectionTimer.start( kMax(0, 1000 * d->m_delayRedirect),
true );
2401 void TDEHTMLPart::slotRedirect()
2403 kdDebug(6050) <<
this <<
" slotRedirect()" <<
endl;
2404 TQString u = d->m_redirectURL;
2405 d->m_delayRedirect = 0;
2406 d->m_redirectURL = TQString();
2409 if ( u.find( TQString::fromLatin1(
"javascript:" ), 0,
false ) == 0 )
2412 kdDebug( 6050 ) <<
"TDEHTMLPart::slotRedirect script=" << script <<
endl;
2414 if ( res.type() == TQVariant::String ) {
2416 write( res.asString() );
2427 if ( openedByJS() && d->m_opener )
2428 cUrl = d->m_opener->
url();
2430 if (!kapp || !kapp->authorizeURLAction(
"redirect", cUrl, url))
2432 kdWarning(6050) <<
"TDEHTMLPart::scheduleRedirection: Redirection from " << cUrl <<
" to " << url <<
" REJECTED!" <<
endl;
2437 if ( urlcmp( u,
m_url.
url(),
true, true ) )
2439 args.
metaData().insert(
"referrer", d->m_pageReferrer);
2453 d->m_urlSelectedOpenedURL =
true;
2454 urlSelected( u, 0, 0,
"_self", args );
2456 if ( !d->m_urlSelectedOpenedURL )
2460 void TDEHTMLPart::slotRedirection(TDEIO::Job*,
const KURL& url)
2464 emit d->m_extension->setLocationBarURL( url.
prettyURL() );
2465 d->m_workingURL =
url;
2470 d->m_encoding = name;
2471 d->m_haveEncoding =
override;
2478 d->m_restored =
true;
2480 d->m_restored =
false;
2488 if(d->m_haveEncoding && !d->m_encoding.isEmpty())
2489 return d->m_encoding;
2491 if(d->m_decoder && d->m_decoder->encoding())
2492 return TQString(d->m_decoder->encoding());
2494 return defaultEncoding();
2497 TQString TDEHTMLPart::defaultEncoding()
const 2499 TQString
encoding = settings()->encoding();
2500 if ( !encoding.isEmpty() )
2505 return "iso-8859-1";
2512 if ( d->m_doc && d->m_doc->docLoader() )
2513 (
void)
new tdehtml::PartStyleSheetLoader(
this, url.
url(), d->m_doc->docLoader());
2519 d->m_doc->setUserStyleSheet( styleSheet );
2527 HTMLCollectionImpl *anchors =
2528 new HTMLCollectionImpl( d->m_doc, HTMLCollectionImpl::DOC_ANCHORS);
2530 NodeImpl *n = anchors->namedItem(name);
2534 n = d->m_doc->getElementById( name );
2537 d->m_doc->setCSSTarget(n);
2540 bool quirkyName = !n && !d->m_doc->inStrictMode() && (name.isEmpty() || name.lower() ==
"top");
2543 d->m_view->setContentsPos(0, 0);
2546 kdDebug(6050) <<
"TDEHTMLPart::gotoAnchor node '" << name <<
"' not found" <<
endl;
2552 HTMLElementImpl *a =
static_cast<HTMLElementImpl *
>(n);
2554 a->getUpperLeftCorner(x, y);
2555 if (x <= d->m_view->contentsX())
2558 gox = d->m_view->contentsX();
2559 if ( x + 10 > d->m_view->contentsX()+d->m_view->visibleWidth()) {
2560 a->getLowerRightCorner(x, dummy);
2561 gox = x - d->m_view->visibleWidth() + 10;
2565 d->m_view->setContentsPos(gox, y);
2574 d->m_view->focusNextPrevNode (
true );
2583 d->m_view->focusNextPrevNode (
false );
2590 d->m_settings->setStdFontName(name);
2595 d->m_settings->setFixedFontName(name);
2600 d->m_linkCursor = c;
2605 return d->m_linkCursor;
2610 return d->m_onlyLocalReferences;
2615 d->m_onlyLocalReferences = enable;
2618 void TDEHTMLPartPrivate::setFlagRecursively(
2619 bool TDEHTMLPartPrivate::*flag,
bool value)
2622 this->*flag = value;
2626 TQValueList<tdehtml::ChildFrame*>::Iterator it = m_frames.begin();
2627 const TQValueList<tdehtml::ChildFrame*>::Iterator itEnd = m_frames.end();
2628 for (; it != itEnd; ++it) {
2630 if (part->inherits(
"TDEHTMLPart"))
2631 part->d->setFlagRecursively(flag, value);
2636 TQValueList<tdehtml::ChildFrame*>::Iterator it = m_objects.begin();
2637 const TQValueList<tdehtml::ChildFrame*>::Iterator itEnd = m_objects.end();
2638 for (; it != itEnd; ++it) {
2640 if (part->inherits(
"TDEHTMLPart"))
2641 part->d->setFlagRecursively(flag, value);
2648 #ifndef TDEHTML_NO_CARET 2649 kdDebug(6200) <<
"setCaretMode(" << enable <<
")" <<
endl;
2651 d->setFlagRecursively(&TDEHTMLPartPrivate::m_caretMode, enable);
2655 view()->initCaret(
true);
2656 view()->ensureCaretVisible();
2660 #endif // TDEHTML_NO_CARET 2665 return d->m_caretMode;
2670 #ifndef TDEHTML_NO_CARET 2672 d->setFlagRecursively(&TDEHTMLPartPrivate::m_designMode, enable);
2676 view()->initCaret(
true);
2677 view()->ensureCaretVisible();
2681 #endif // TDEHTML_NO_CARET 2686 return d->m_designMode;
2691 #ifndef TDEHTML_NO_CARET 2693 kdDebug(6200) << k_funcinfo <<
"node: " << node.handle() <<
" nodeName: " 2694 << node.
nodeName().string() <<
" offset: " << offset
2695 <<
" extendSelection " << extendSelection <<
endl;
2697 if (
view()->moveCaretTo(node.handle(), offset, !extendSelection))
2698 emitSelectionChanged();
2699 view()->ensureCaretVisible();
2700 #endif // TDEHTML_NO_CARET 2705 #ifndef TDEHTML_NO_CARET 2707 #else // TDEHTML_NO_CARET 2708 return CaretInvisible;
2709 #endif // TDEHTML_NO_CARET 2714 #ifndef TDEHTML_NO_CARET 2715 view()->setCaretDisplayPolicyNonFocused(policy);
2716 #endif // TDEHTML_NO_CARET 2721 #ifndef TDEHTML_NO_CARET 2724 NodeImpl *caretNode = xmlDocImpl()->focusNode();
2726 || (caretNode && caretNode->contentEditable())) {
2735 #endif // TDEHTML_NO_CARET 2742 d->m_findPosEnd = -1;
2743 d->m_findNodeEnd= 0;
2744 d->m_findPosStart = -1;
2745 d->m_findNodeStart = 0;
2746 d->m_findNodePrevious = 0;
2751 bool TDEHTMLPart::initFindNode(
bool selection,
bool reverse,
bool fromCursor )
2756 DOM::NodeImpl* firstNode = 0L;
2757 if (d->m_doc->isHTMLDocument())
2758 firstNode = static_cast<HTMLDocumentImpl*>(d->m_doc)->body();
2760 firstNode = d->m_doc;
2767 if ( firstNode->id() == ID_FRAMESET )
2778 d->m_findNode = reverse ? d->m_selectionEnd.handle() : d->m_selectionStart.handle();
2779 d->m_findPos = reverse ? d->m_endOffset : d->m_startOffset;
2781 d->m_findNodeEnd = reverse ? d->m_selectionStart.handle() : d->m_selectionEnd.handle();
2782 d->m_findPosEnd = reverse ? d->m_startOffset : d->m_endOffset;
2783 d->m_findNodeStart = !reverse ? d->m_selectionStart.handle() : d->m_selectionEnd.handle();
2784 d->m_findPosStart = !reverse ? d->m_startOffset : d->m_endOffset;
2785 d->m_findNodePrevious = d->m_findNodeStart;
2792 d->m_findNode = firstNode;
2793 d->m_findPos = reverse ? -1 : 0;
2795 d->m_findNodeEnd = reverse ? firstNode : 0;
2796 d->m_findPosEnd = reverse ? 0 : -1;
2797 d->m_findNodeStart = !reverse ? firstNode : 0;
2798 d->m_findPosStart = !reverse ? 0 : -1;
2799 d->m_findNodePrevious = d->m_findNodeStart;
2803 tdehtml::RenderObject* obj = d->m_findNode ? d->m_findNode->renderer() : 0;
2807 while ( obj->lastChild() )
2809 obj = obj->lastChild();
2812 while ( !obj->element() && obj->objectAbove() )
2814 obj = obj->objectAbove();
2816 d->m_findNode = obj->element();
2826 if ( !initFindNode(
false, !forward, d->m_findNode ) )
2830 if( (d->m_findNode->nodeType() == Node::TEXT_NODE || d->m_findNode->nodeType() == Node::CDATA_SECTION_NODE) && d->m_findNode->renderer() )
2832 DOMString nodeText = d->m_findNode->nodeValue();
2833 DOMStringImpl *t = nodeText.implementation();
2834 TQConstString s(t->s, t->l);
2838 TQRegExp matcher( str );
2839 matcher.setCaseSensitive( caseSensitive );
2840 d->m_findPos = matcher.search(s.string(), d->m_findPos+1);
2841 if ( d->m_findPos != -1 )
2842 matchLen = matcher.matchedLength();
2845 d->m_findPos = s.string().find(str, d->m_findPos+1, caseSensitive);
2846 matchLen = str.length();
2849 if(d->m_findPos != -1)
2852 if(static_cast<tdehtml::RenderText *>(d->m_findNode->renderer())
2853 ->posOfChar(d->m_findPos, x, y))
2854 d->m_view->setContentsPos(x-50, y-50);
2856 d->m_selectionStart = d->m_findNode;
2857 d->m_startOffset = d->m_findPos;
2858 d->m_selectionEnd = d->m_findNode;
2859 d->m_endOffset = d->m_findPos + matchLen;
2860 d->m_startBeforeEnd =
true;
2862 d->m_doc->setSelection( d->m_selectionStart.handle(), d->m_startOffset,
2863 d->m_selectionEnd.handle(), d->m_endOffset );
2864 emitSelectionChanged();
2874 next = d->m_findNode->firstChild();
2876 if(!next) next = d->m_findNode->nextSibling();
2877 while(d->m_findNode && !next) {
2878 d->m_findNode = d->m_findNode->parentNode();
2879 if( d->m_findNode ) {
2880 next = d->m_findNode->nextSibling();
2886 next = d->m_findNode->lastChild();
2888 if (!next ) next = d->m_findNode->previousSibling();
2889 while ( d->m_findNode && !next )
2891 d->m_findNode = d->m_findNode->parentNode();
2894 next = d->m_findNode->previousSibling();
2899 d->m_findNode = next;
2900 if(!d->m_findNode)
return false;
2905 void TDEHTMLPart::slotFind()
2910 if (!part->inherits(
"TDEHTMLPart") )
2912 kdError(6000) <<
"slotFind: part is a " << part->className() <<
", can't do a search into it" <<
endl;
2918 void TDEHTMLPart::slotFindNext()
2923 if (!part->inherits(
"TDEHTMLPart") )
2925 kdError(6000) <<
"slotFindNext: part is a " << part->className() <<
", can't do a search into it" <<
endl;
2931 void TDEHTMLPart::slotFindPrev()
2936 if (!part->inherits(
"TDEHTMLPart") )
2938 kdError(6000) <<
"slotFindNext: part is a " << part->className() <<
", can't do a search into it" <<
endl;
2944 void TDEHTMLPart::slotFindDone()
2949 void TDEHTMLPart::slotFindAheadText()
2951 #ifndef TDEHTML_NO_TYPE_AHEAD_FIND 2955 if (!part->inherits(
"TDEHTMLPart") )
2957 kdError(6000) <<
"slotFindNext: part is a " << part->className() <<
", can't do a search into it" <<
endl;
2961 #endif // TDEHTML_NO_TYPE_AHEAD_FIND 2964 void TDEHTMLPart::slotFindAheadLink()
2966 #ifndef TDEHTML_NO_TYPE_AHEAD_FIND 2970 if (!part->inherits(
"TDEHTMLPart") )
2972 kdError(6000) <<
"slotFindNext: part is a " << part->className() <<
", can't do a search into it" <<
endl;
2976 #endif // TDEHTML_NO_TYPE_AHEAD_FIND 2979 void TDEHTMLPart::enableFindAheadActions(
bool enable )
2985 p->d->m_paFindAheadText->setEnabled( enable );
2986 p->d->m_paFindAheadLinks->setEnabled( enable );
2989 void TDEHTMLPart::slotFindDialogDestroyed()
2991 d->m_lastFindState.options = d->m_findDialog->options();
2992 d->m_lastFindState.history = d->m_findDialog->findHistory();
2993 d->m_findDialog->deleteLater();
2994 d->m_findDialog = 0L;
3004 if ( d->m_findDialog )
3011 #ifndef QT_NO_CLIPBOARD 3012 disconnect( kapp->clipboard(), TQT_SIGNAL(
selectionChanged()),
this, TQT_SLOT(slotClearSelection()) );
3016 d->m_findDialog =
new KFindDialog(
false ,
widget(),
"tdehtmlfind" );
3018 d->m_findDialog->setHasCursor( d->m_findNode != 0 );
3019 if ( d->m_findNode )
3020 d->m_lastFindState.options |= KFindDialog::FromCursor;
3023 d->m_findDialog->setFindHistory( d->m_lastFindState.history );
3024 d->m_findDialog->setOptions( d->m_lastFindState.options );
3026 d->m_lastFindState.options = -1;
3027 d->m_lastFindState.last_dir = -1;
3029 d->m_findDialog->show();
3030 connect( d->m_findDialog, TQT_SIGNAL(okClicked()),
this, TQT_SLOT(slotFindNext()) );
3031 connect( d->m_findDialog, TQT_SIGNAL(finished()),
this, TQT_SLOT(slotFindDialogDestroyed()) );
3033 findText( d->m_findDialog->pattern(), 0 ,
widget(), d->m_findDialog );
3042 #ifndef QT_NO_CLIPBOARD 3043 connect( kapp->clipboard(), TQT_SIGNAL(
selectionChanged()), TQT_SLOT(slotClearSelection()) );
3048 d->m_find =
new KFind( str, options, parent, findDialog );
3049 d->m_find->closeFindNextDialog();
3050 connect( d->m_find, TQT_SIGNAL( highlight(
const TQString &,
int,
int ) ),
3051 this, TQT_SLOT( slotHighlight(
const TQString &,
int,
int ) ) );
3057 d->m_lastFindState.options = options;
3058 initFindNode( options & KFindDialog::SelectedText,
3059 options & KFindDialog::FindBackwards,
3060 options & KFindDialog::FromCursor );
3079 view()->updateFindAheadTimeout();
3081 if ( d->m_findDialog )
3083 if ( d->m_find->pattern() != d->m_findDialog->pattern() ) {
3084 d->m_find->setPattern( d->m_findDialog->pattern() );
3085 d->m_find->resetCounts();
3087 options = d->m_findDialog->options();
3088 if ( d->m_lastFindState.options != options )
3090 d->m_find->setOptions( options );
3092 if ( options & KFindDialog::SelectedText )
3095 long difference = d->m_lastFindState.options ^ options;
3096 if ( difference & (KFindDialog::SelectedText | KFindDialog::FromCursor ) )
3099 (void) initFindNode( options & KFindDialog::SelectedText,
3100 options & KFindDialog::FindBackwards,
3101 options & KFindDialog::FromCursor );
3103 d->m_lastFindState.options = options;
3106 options = d->m_lastFindState.options;
3108 options = options ^ KFindDialog::FindBackwards;
3109 if( d->m_find->options() != options )
3110 d->m_find->setOptions( options );
3115 if( d->m_lastFindState.last_dir != -1
3116 &&
bool( d->m_lastFindState.last_dir ) !=
bool( options & KFindDialog::FindBackwards ))
3118 tqSwap( d->m_findNodeEnd, d->m_findNodeStart );
3119 tqSwap( d->m_findPosEnd, d->m_findPosStart );
3120 tqSwap( d->m_findNode, d->m_findNodePrevious );
3122 tdehtml::RenderObject* obj = d->m_findNode ? d->m_findNode->renderer() : 0;
3123 tdehtml::RenderObject*
end = d->m_findNodeEnd ? d->m_findNodeEnd->renderer() : 0;
3129 obj = (options & KFindDialog::FindBackwards) ? obj->objectAbove() : obj->objectBelow();
3130 }
while ( obj && ( !obj->element() || obj->isInlineContinuation() ) );
3133 d->m_findNode = obj->element();
3137 d->m_lastFindState.last_dir = ( options & KFindDialog::FindBackwards ) ? 1 : 0;
3139 KFind::Result res = KFind::NoMatch;
3140 tdehtml::RenderObject* obj = d->m_findNode ? d->m_findNode->renderer() : 0;
3141 tdehtml::RenderObject*
end = d->m_findNodeEnd ? d->m_findNodeEnd->renderer() : 0;
3142 tdehtml::RenderTextArea *tmpTextArea=0L;
3144 while( res == KFind::NoMatch )
3146 if ( d->m_find->needData() )
3157 d->m_stringPortions.clear();
3158 bool newLine =
false;
3160 DOM::NodeImpl* lastNode = d->m_findNode;
3161 while ( obj && !newLine )
3165 bool renderAreaText = obj->parent() && (TQCString(obj->parent()->renderName())==
"RenderTextArea");
3166 bool renderLineText = (TQCString(obj->renderName())==
"RenderLineEdit");
3167 if ( renderAreaText )
3169 tdehtml::RenderTextArea *parent=
static_cast<tdehtml::RenderTextArea *
>(obj->parent());
3171 s = s.replace(0xa0,
' ');
3172 tmpTextArea = parent;
3174 else if ( renderLineText )
3176 tdehtml::RenderLineEdit *parentLine=
static_cast<tdehtml::RenderLineEdit *
>(obj);
3177 if (parentLine->widget()->echoMode() == TQLineEdit::Normal)
3178 s = parentLine->widget()->text();
3179 s = s.replace(0xa0,
' ');
3181 else if ( obj->isText() )
3183 bool isLink =
false;
3186 if ( options & FindLinksOnly )
3188 DOM::NodeImpl *parent = obj->element();
3191 if ( parent->nodeType() == Node::ELEMENT_NODE && parent->id() == ID_A )
3196 parent = parent->parentNode();
3204 if ( isLink && obj->parent()!=tmpTextArea )
3206 s =
static_cast<tdehtml::RenderText *
>(obj)->data().string();
3207 s = s.replace(0xa0,
' ');
3210 else if ( obj->isBR() )
3212 else if ( !obj->isInline() && !str.isEmpty() )
3215 if ( lastNode == d->m_findNodeEnd )
3216 s.truncate( d->m_findPosEnd );
3219 newLine = s.find(
'\n' ) != -1;
3220 if( !( options & KFindDialog::FindBackwards ))
3223 d->m_stringPortions.append( TDEHTMLPartPrivate::StringPortion( str.length(), lastNode ) );
3228 for( TQValueList<TDEHTMLPartPrivate::StringPortion>::Iterator it = d->m_stringPortions.begin();
3229 it != d->m_stringPortions.end();
3231 (*it).index += s.length();
3232 d->m_stringPortions.prepend( TDEHTMLPartPrivate::StringPortion( 0, lastNode ) );
3247 obj = (options & KFindDialog::FindBackwards) ? obj->objectAbove() : obj->objectBelow();
3248 }
while ( obj && ( !obj->element() || obj->isInlineContinuation() ) );
3251 lastNode = obj->element();
3256 if ( !str.isEmpty() )
3258 d->m_find->setData( str, d->m_findPos );
3262 d->m_findNodePrevious = d->m_findNode;
3263 d->m_findNode = lastNode;
3265 if ( !d->m_find->needData() )
3268 res = d->m_find->find();
3272 if ( res == KFind::NoMatch )
3275 if ( !(options & FindNoPopups) && d->m_find->shouldRestart() )
3278 initFindNode(
false, options & KFindDialog::FindBackwards,
false );
3279 d->m_find->resetCounts();
3287 initFindNode(
false, options & KFindDialog::FindBackwards,
false );
3288 d->m_find->resetCounts();
3289 slotClearSelection();
3294 return res == KFind::Match;
3297 void TDEHTMLPart::slotHighlight(
const TQString& ,
int index,
int length )
3300 TQValueList<TDEHTMLPartPrivate::StringPortion>::Iterator it = d->m_stringPortions.begin();
3301 const TQValueList<TDEHTMLPartPrivate::StringPortion>::Iterator itEnd = d->m_stringPortions.end();
3302 TQValueList<TDEHTMLPartPrivate::StringPortion>::Iterator prev = it;
3304 while ( it != itEnd && (*it).index <= index )
3309 Q_ASSERT ( prev != itEnd );
3310 DOM::NodeImpl* node = (*prev).node;
3313 d->m_selectionStart = node;
3314 d->m_startOffset = index - (*prev).index;
3316 tdehtml::RenderObject* obj = node->renderer();
3317 tdehtml::RenderTextArea *parent = 0L;
3318 tdehtml::RenderLineEdit *parentLine = 0L;
3319 bool renderLineText =
false;
3321 TQRect highlightedRect;
3322 bool renderAreaText =
false;
3327 renderAreaText = (TQCString(obj->parent()->renderName())==
"RenderTextArea");
3328 renderLineText = (TQCString(obj->renderName())==
"RenderLineEdit");
3331 if( renderAreaText )
3332 parent=
static_cast<tdehtml::RenderTextArea *
>(obj->parent());
3333 if ( renderLineText )
3334 parentLine=
static_cast<tdehtml::RenderLineEdit *
>(obj);
3335 if ( !renderLineText )
3340 static_cast<tdehtml::RenderText *
>(node->renderer())
3341 ->caretPos( d->m_startOffset,
false, x, y, dummy, dummy );
3343 if ( x != -1 || y != -1 )
3345 int gox = d->m_view->contentsX();
3346 if (x+50 > d->m_view->contentsX() + d->m_view->visibleWidth())
3347 gox = x - d->m_view->visibleWidth() + 50;
3348 if (x-10 < d->m_view->contentsX())
3349 gox = x - d->m_view->visibleWidth() - 10;
3350 if (gox < 0) gox = 0;
3351 d->m_view->setContentsPos(gox, y-50);
3352 highlightedRect.setTopLeft( d->m_view->mapToGlobal(TQPoint(x, y)) );
3358 while ( it != itEnd && (*it).index < index + length )
3363 Q_ASSERT ( prev != itEnd );
3365 d->m_selectionEnd = (*prev).node;
3366 d->m_endOffset = index + length - (*prev).index;
3367 d->m_startBeforeEnd =
true;
3370 if(d->m_selectionStart == d->m_selectionEnd)
3372 bool isLink =
false;
3375 DOM::NodeImpl *parent = d->m_selectionStart.handle();
3378 if ( parent->nodeType() == Node::ELEMENT_NODE && parent->id() == ID_A )
3383 parent = parent->parentNode();
3388 d->m_doc->setFocusNode( parent );
3393 kdDebug(6050) <<
"slotHighlight: " << d->m_selectionStart.handle() <<
"," << d->m_startOffset <<
" - " <<
3394 d->m_selectionEnd.handle() <<
"," << d->m_endOffset <<
endl;
3395 it = d->m_stringPortions.begin();
3396 for ( ; it != d->m_stringPortions.end() ; ++it )
3397 kdDebug(6050) <<
" StringPortion: from index=" << (*it).index <<
" -> node=" << (*it).node <<
endl;
3399 if( renderAreaText )
3402 parent->highLightWord( length, d->m_endOffset-length );
3404 else if ( renderLineText )
3407 parentLine->highLightWord( length, d->m_endOffset-length );
3411 d->m_doc->setSelection( d->m_selectionStart.handle(), d->m_startOffset,
3412 d->m_selectionEnd.handle(), d->m_endOffset );
3413 if (d->m_selectionEnd.handle()->renderer() )
3415 int x, y, height, dummy;
3416 static_cast<tdehtml::RenderText *
>(d->m_selectionEnd.handle()->renderer())
3417 ->caretPos( d->m_endOffset,
false, x, y, dummy, height );
3419 if ( x != -1 || y != -1 )
3423 highlightedRect.setBottomRight( d->m_view->mapToGlobal( TQPoint(x, y+height) ) );
3427 emitSelectionChanged();
3430 if ( d->m_findDialog && !highlightedRect.isNull() )
3432 highlightedRect.moveBy( -d->m_view->contentsX(), -d->m_view->contentsY() );
3441 kdDebug() <<
"selectedTextAsHTML(): selection is not valid. Returning empty selection" <<
endl;
3444 if(d->m_startOffset < 0 || d->m_endOffset <0) {
3445 kdDebug() <<
"invalid values for end/startOffset " << d->m_startOffset <<
" " << d->m_endOffset <<
endl;
3449 if(r.isNull() || r.isDetached())
3451 int exceptioncode = 0;
3452 return r.handle()->toHTML(exceptioncode).string();
3457 bool hasNewLine =
true;
3458 bool seenTDTag =
false;
3462 if(n.
nodeType() == DOM::Node::TEXT_NODE && n.handle()->renderer()) {
3463 DOM::DOMStringImpl *dstr =
static_cast<DOM::TextImpl*
>(n.handle())->renderString();
3464 TQString str(dstr->s, dstr->l);
3465 if(!str.isEmpty()) {
3471 if(n == d->m_selectionStart && n == d->m_selectionEnd)
3472 text = str.mid(d->m_startOffset, d->m_endOffset - d->m_startOffset);
3473 else if(n == d->m_selectionStart)
3474 text = str.mid(d->m_startOffset);
3475 else if(n == d->m_selectionEnd)
3476 text += str.left(d->m_endOffset);
3483 unsigned short id = n.elementId();
3486 text +=
static_cast<HTMLTextAreaElementImpl*
>(n.handle())->value().string();
3489 if (static_cast<HTMLInputElementImpl*>(n.handle())->inputType() != HTMLInputElementImpl::PASSWORD)
3490 text += static_cast<HTMLInputElementImpl*>(n.handle())->value().string();
3493 text +=
static_cast<HTMLSelectElementImpl*
>(n.handle())->value().string();
3500 text +=
static_cast<HTMLImageElementImpl*
>(n.handle())->altText().string();
3534 if(n == d->m_selectionEnd)
break;
3540 unsigned short id = n.elementId();
3584 int end = text.length();
3587 while ((start < end) && (text[start] ==
'\n'))
3591 while ((start < (end-1)) && (text[end-1] ==
'\n') && (text[end-2] ==
'\n'))
3594 return text.mid(start, end-start);
3599 if ( d->m_selectionStart.isNull() || d->m_selectionEnd.isNull() )
3601 if ( d->m_selectionStart == d->m_selectionEnd &&
3602 d->m_startOffset == d->m_endOffset )
3609 if( d->m_selectionStart.isNull() || d->m_selectionEnd.isNull() )
3610 return DOM::Range();
3612 RangeImpl *rng = r.handle();
3614 NodeImpl *n = d->m_selectionStart.handle();
3615 if(!n->parentNode() ||
3617 (!n->renderer()->isReplaced() && !n->renderer()->isBR())) {
3618 rng->setStart( n, d->m_startOffset, exception );
3620 kdDebug(6000) <<
"1 -selection() threw the exception " << exception <<
". Returning empty range." <<
endl;
3621 return DOM::Range();
3625 while ((n = n->previousSibling()))
3627 rng->setStart( d->m_selectionStart.parentNode().handle(), o_start + d->m_startOffset, exception );
3629 kdDebug(6000) <<
"2 - selection() threw the exception " << exception <<
". Returning empty range." <<
endl;
3630 return DOM::Range();
3635 n = d->m_selectionEnd.handle();
3636 if(!n->parentNode() ||
3638 (!n->renderer()->isReplaced() && !n->renderer()->isBR())) {
3640 rng->setEnd( n, d->m_endOffset, exception );
3642 kdDebug(6000) <<
"3 - selection() threw the exception " << exception <<
". Returning empty range." <<
endl;
3643 return DOM::Range();
3648 while ((n = n->previousSibling()))
3650 rng->setEnd( d->m_selectionEnd.parentNode().handle(), o_end + d->m_endOffset, exception);
3652 kdDebug(6000) <<
"4 - selection() threw the exception " << exception <<
". Returning empty range." <<
endl;
3653 return DOM::Range();
3663 s = d->m_selectionStart;
3664 so = d->m_startOffset;
3665 e = d->m_selectionEnd;
3666 eo = d->m_endOffset;
3673 if ( r.collapsed() )
3674 slotClearSelection();
3676 d->m_selectionStart = r.startContainer();
3677 d->m_startOffset = r.startOffset();
3678 d->m_selectionEnd = r.endContainer();
3679 d->m_endOffset = r.endOffset();
3680 d->m_doc->setSelection(d->m_selectionStart.handle(),d->m_startOffset,
3681 d->m_selectionEnd.handle(),d->m_endOffset);
3682 #ifndef TDEHTML_NO_CARET 3683 bool v = d->m_view->placeCaret();
3684 emitCaretPositionChanged(v ? d->caretNode() : 0, d->caretOffset());
3689 void TDEHTMLPart::slotClearSelection()
3692 #ifndef TDEHTML_NO_CARET 3697 d->m_selectionStart = 0;
3698 d->m_startOffset = 0;
3699 d->m_selectionEnd = 0;
3702 if ( d->m_doc ) d->m_doc->clearSelection();
3704 emitSelectionChanged();
3705 #ifndef TDEHTML_NO_CARET 3706 bool v = d->m_view->placeCaret();
3707 emitCaretPositionChanged(v ? d->caretNode() : 0, d->caretOffset());
3711 void TDEHTMLPart::resetHoverText()
3713 if( !d->m_overURL.isEmpty() )
3715 d->m_overURL = d->m_overURLTarget = TQString();
3716 emit
onURL( TQString() );
3718 setStatusBarText(TQString(), BarHoverText);
3719 emit d->m_extension->mouseOverInfo(0);
3723 void TDEHTMLPart::overURL(
const TQString &url,
const TQString &target,
bool )
3728 if ( url.isEmpty() )
3733 if ( url.isEmpty() ) {
3734 setStatusBarText(u.
htmlURL(), BarHoverText);
3738 if (url.find( TQString::fromLatin1(
"javascript:" ),0,
false ) == 0 ) {
3741 if (url.startsWith(
"javascript:window.open"))
3742 jscode += i18n(
" (In new window)");
3743 setStatusBarText( TQStyleSheet::escape( jscode ), BarHoverText );
3747 KFileItem item(u, TQString(), KFileItem::Unknown);
3748 emit d->m_extension->mouseOverInfo(&item);
3752 KMimeType::Ptr typ = KMimeType::findByURL( u );
3755 com = typ->comment( u,
false );
3758 setStatusBarText(u.
htmlURL(), BarHoverText);
3766 TQCString path = TQFile::encodeName( u.
path() );
3769 bool ok = !stat( path.data(), &buff );
3772 if (ok) ok = !lstat( path.data(), &lbuff );
3775 TQString text2 = text;
3777 if (ok && S_ISLNK( lbuff.st_mode ) )
3781 tmp = i18n(
"Symbolic Link");
3783 tmp = i18n(
"%1 (Link)").arg(com);
3784 char buff_two[1024];
3786 int n = readlink ( path.data(), buff_two, 1022);
3791 setStatusBarText(text2, BarHoverText);
3800 else if ( ok && S_ISREG( buff.st_mode ) )
3802 if (buff.st_size < 1024)
3803 text = i18n(
"%2 (%1 bytes)").arg((
long) buff.st_size).arg(text2);
3806 float d = (float) buff.st_size/1024.0;
3807 text = i18n(
"%2 (%1 K)").arg(
TDEGlobal::locale()->formatNumber(d, 2)).arg(text2);
3812 else if ( ok && S_ISDIR( buff.st_mode ) )
3822 setStatusBarText(text, BarHoverText);
3827 if (target.lower() ==
"_blank")
3829 extra = i18n(
" (In new window)");
3831 else if (!target.isEmpty() &&
3832 (target.lower() !=
"_top") &&
3833 (target.lower() !=
"_self") &&
3834 (target.lower() !=
"_parent"))
3840 extra = i18n(
" (In new window)");
3842 extra = i18n(
" (In other frame)");
3845 if (u.
protocol() == TQString::fromLatin1(
"mailto")) {
3846 TQString mailtoMsg ;
3848 TQStringList queries = TQStringList::split(
'&', u.
query().mid(1));
3849 TQStringList::Iterator it = queries.begin();
3850 const TQStringList::Iterator itEnd = queries.end();
3851 for (; it != itEnd; ++it)
3852 if ((*it).startsWith(TQString::fromLatin1(
"subject=")))
3854 else if ((*it).startsWith(TQString::fromLatin1(
"cc=")))
3856 else if ((*it).startsWith(TQString::fromLatin1(
"bcc=")))
3858 mailtoMsg = TQStyleSheet::escape(mailtoMsg);
3859 mailtoMsg.replace(TQRegExp(
"([\n\r\t]|[ ]{10})"), TQString());
3860 setStatusBarText(
"<qt>"+mailtoMsg, BarHoverText);
3865 else if (u.
protocol() == TQString::fromLatin1(
"http")) {
3867 while (hrefNode.
nodeName().string() != TQString::fromLatin1(
"A") && !hrefNode.
isNull())
3870 if (!hrefNode.
isNull()) {
3872 if (!hreflangNode.
isNull()) {
3873 TQString countryCode = hreflangNode.
nodeValue().string().lower();
3875 if (countryCode == TQString::fromLatin1(
"en"))
3876 countryCode = TQString::fromLatin1(
"gb");
3877 TQString flagImg = TQString::fromLatin1(
"<img src=%1>").arg(
3878 locate(
"locale", TQString::fromLatin1(
"l10n/")
3880 + TQString::fromLatin1(
"/flag.png")));
3881 emit setStatusBarText(flagImg + u.
prettyURL() + extra);
3886 setStatusBarText(u.
htmlURL() + extra, BarHoverText);
3894 void TDEHTMLPart::urlSelected(
const TQString &url,
int button,
int state,
const TQString &_target,
KParts::URLArgs args )
3899 d->m_urlSelectedOpenedURL = urlSelectedIntern( url, button, state, _target, args );
3903 bool TDEHTMLPart::urlSelectedIntern(
const TQString &url,
int button,
int state,
const TQString &_target,
KParts::URLArgs args )
3905 bool hasTarget =
false;
3907 TQString target = _target;
3908 if ( target.isEmpty() && d->m_doc )
3909 target = d->m_doc->baseTarget();
3910 if ( !target.isEmpty() )
3913 if ( url.find( TQString::fromLatin1(
"javascript:" ), 0,
false ) == 0 )
3921 if ( url.isEmpty() )
3928 kdDebug(6050) <<
this <<
" urlSelected: complete URL:" << cURL.
url() <<
" target=" << target <<
endl;
3930 if ( state & ControlButton )
3933 emit d->m_extension->createNewWindow( cURL, args );
3937 if ( button == Qt::LeftButton && ( state & ShiftButton ) )
3939 TDEIO::MetaData metaData;
3940 metaData[
"referrer"] = d->m_referrer;
3941 TDEHTMLPopupGUIClient::saveURL( d->m_view, i18n(
"Save As" ), cURL, metaData );
3945 if (!checkLinkSecurity(cURL,
3946 i18n(
"<qt>This untrusted page links to<BR><B>%1</B>.<BR>Do you want to follow the link?" ),
3952 args.
metaData().insert(
"main_frame_request",
3954 args.
metaData().insert(
"ssl_parent_ip", d->m_ssl_parent_ip);
3955 args.
metaData().insert(
"ssl_parent_cert", d->m_ssl_parent_cert);
3956 args.
metaData().insert(
"PropagateHttpHeader",
"true");
3957 args.
metaData().insert(
"ssl_was_in_use", d->m_ssl_in_use ?
"TRUE":
"FALSE");
3958 args.
metaData().insert(
"ssl_activate_warnings",
"TRUE");
3960 if ( hasTarget && target !=
"_self" && target !=
"_top" && target !=
"_blank" && target !=
"_parent" )
3963 tdehtml::ChildFrame *frame = recursiveFrameRequest(
this, cURL, args,
false );
3966 args.
metaData()[
"referrer"] = d->m_referrer;
3967 requestObject( frame, cURL, args );
3972 if (!d->m_referrer.isEmpty() && !args.
metaData().contains(
"referrer"))
3973 args.
metaData()[
"referrer"] = d->m_referrer;
3976 if ( button == Qt::NoButton && (state & ShiftButton) && (state & ControlButton) )
3978 emit d->m_extension->createNewWindow( cURL, args );
3982 if ( state & ShiftButton)
3985 winArgs.lowerWindow =
true;
3987 emit d->m_extension->createNewWindow( cURL, args, winArgs, newPart );
3994 if (cURL.
hasRef() && (!hasTarget || target ==
"_self"))
3997 if (urlcmp(cURL.
url(), curUrl.
url(),
4002 emit d->m_extension->openURLNotify();
4010 if ( !d->m_bComplete && !hasTarget )
4013 view()->viewport()->unsetCursor();
4014 emit d->m_extension->openURLRequest( cURL, args );
4018 void TDEHTMLPart::slotViewDocumentSource()
4021 bool isTempFile =
false;
4024 KTempFile sourceFile(TQString(), defaultExtension());
4025 if (sourceFile.
status() == 0)
4034 (void) KRun::runURL( url, TQString::fromLatin1(
"text/plain"), isTempFile );
4037 void TDEHTMLPart::slotViewPageInfo()
4039 TDEHTMLInfoDlg *dlg =
new TDEHTMLInfoDlg(NULL,
"TDEHTML Page Info Dialog",
false, (WFlags)WDestructiveClose);
4040 dlg->_close->setGuiItem(KStdGuiItem::close());
4043 dlg->_title->setText(d->m_doc->title().string());
4046 if (
parentPart() && d->m_doc && d->m_doc->isHTMLDocument() ) {
4047 dlg->setCaption(i18n(
"Frame Information"));
4050 TQString editStr = TQString();
4052 if (!d->m_pageServices.isEmpty())
4053 editStr = i18n(
" <a href=\"%1\">[Properties]</a>").arg(d->m_pageServices);
4056 dlg->_url->setText(
"<a href=\"" +
url().
url() +
"\">" + squeezedURL +
"</a>" + editStr);
4059 dlg->_lastModified->hide();
4060 dlg->_lmLabel->hide();
4066 if (enc.isEmpty()) {
4067 dlg->_eLabel->hide();
4068 dlg->_encoding->hide();
4070 dlg->_encoding->setText(enc);
4073 const TQStringList headers = TQStringList::split(
"\n", d->m_httpHeaders);
4075 TQStringList::ConstIterator it = headers.begin();
4076 const TQStringList::ConstIterator itEnd = headers.end();
4078 for (; it != itEnd; ++it) {
4079 const TQStringList header = TQStringList::split(TQRegExp(
":[ ]+"), *it);
4080 if (header.count() != 2)
4082 new TQListViewItem(dlg->_headers, header[0], header[1]);
4090 void TDEHTMLPart::slotViewFrameSource()
4097 bool isTempFile =
false;
4098 if (!(url.
isLocalFile()) && frame->inherits(
"TDEHTMLPart"))
4100 long cacheId =
static_cast<TDEHTMLPart *
>(frame)->d->m_cacheId;
4104 KTempFile sourceFile(TQString(), defaultExtension());
4105 if (sourceFile.
status() == 0)
4115 (void) KRun::runURL( url, TQString::fromLatin1(
"text/plain"), isTempFile );
4121 if (!d->m_doc || !d->m_doc->isHTMLDocument())
4124 TQString relURL =
static_cast<HTMLDocumentImpl*
>(d->m_doc)->body()->getAttribute( ATTR_BACKGROUND ).string();
4129 void TDEHTMLPart::slotSaveBackground()
4131 TDEIO::MetaData metaData;
4132 metaData[
"referrer"] = d->m_referrer;
4133 TDEHTMLPopupGUIClient::saveURL( d->m_view, i18n(
"Save Background Image As"),
backgroundURL(), metaData );
4136 void TDEHTMLPart::slotSaveDocument()
4140 if ( srcURL.
fileName(
false).isEmpty() )
4141 srcURL.
setFileName(
"index" + defaultExtension() );
4143 TDEIO::MetaData metaData;
4145 TDEHTMLPopupGUIClient::saveURL( d->m_view, i18n(
"Save As" ), srcURL, metaData,
"text/html", d->m_cacheId );
4148 void TDEHTMLPart::slotSecurity()
4168 KSSLInfoDlg *kid =
new KSSLInfoDlg(d->m_ssl_in_use,
widget(),
"kssl_info_dlg",
true );
4170 if (d->m_bSecurityInQuestion)
4171 kid->setSecurityInQuestion(
true);
4173 if (d->m_ssl_in_use) {
4174 KSSLCertificate *x = KSSLCertificate::fromString(d->m_ssl_peer_certificate.local8Bit());
4177 const TQStringList cl = TQStringList::split(TQString(
"\n"), d->m_ssl_peer_chain);
4178 TQPtrList<KSSLCertificate> ncl;
4180 ncl.setAutoDelete(
true);
4181 TQStringList::ConstIterator it = cl.begin();
4182 const TQStringList::ConstIterator itEnd = cl.end();
4183 for (; it != itEnd; ++it) {
4184 KSSLCertificate*
const y = KSSLCertificate::fromString((*it).local8Bit());
4185 if (y) ncl.append(y);
4188 if (ncl.count() > 0)
4189 x->chain().setChain(ncl);
4195 d->m_ssl_cipher_desc,
4196 d->m_ssl_cipher_version,
4197 d->m_ssl_cipher_used_bits.toInt(),
4198 d->m_ssl_cipher_bits.toInt(),
4199 (KSSLCertificate::KSSLValidation) d->m_ssl_cert_state.toInt()
4207 void TDEHTMLPart::slotSaveFrame()
4215 if ( srcURL.fileName(
false).isEmpty() )
4216 srcURL.
setFileName(
"index" + defaultExtension() );
4218 TDEIO::MetaData metaData;
4220 TDEHTMLPopupGUIClient::saveURL( d->m_view, i18n(
"Save Frame As" ), srcURL, metaData,
"text/html" );
4223 void TDEHTMLPart::slotSetEncoding()
4225 d->m_automaticDetection->setItemChecked(
int( d->m_autoDetectLanguage ),
false );
4226 d->m_paSetEncoding->popupMenu()->setItemChecked( 0,
false );
4227 d->m_paSetEncoding->popupMenu()->setItemChecked( d->m_paSetEncoding->popupMenu()->idAt( 2 ), true );
4233 void TDEHTMLPart::slotUseStylesheet()
4237 bool autoselect = (d->m_paUseStylesheet->currentItem() == 0);
4238 d->m_sheetUsed = autoselect ? TQString() : d->m_paUseStylesheet->currentText();
4239 d->m_doc->updateStyleSelector();
4243 void TDEHTMLPart::updateActions()
4245 bool frames =
false;
4247 TQValueList<tdehtml::ChildFrame*>::ConstIterator it = d->m_frames.begin();
4248 const TQValueList<tdehtml::ChildFrame*>::ConstIterator
end = d->m_frames.end();
4249 for (; it !=
end; ++it )
4250 if ( (*it)->m_type == tdehtml::ChildFrame::Frame )
4256 d->m_paViewFrame->setEnabled( frames );
4257 d->m_paSaveFrame->setEnabled( frames );
4260 d->m_paFind->setText( i18n(
"&Find in Frame..." ) );
4262 d->m_paFind->setText( i18n(
"&Find..." ) );
4269 bool enableFindAndSelectAll =
true;
4272 enableFindAndSelectAll = frame->inherits(
"TDEHTMLPart" );
4274 d->m_paFind->setEnabled( enableFindAndSelectAll );
4275 d->m_paSelectAll->setEnabled( enableFindAndSelectAll );
4277 bool enablePrintFrame =
false;
4283 enablePrintFrame = ext->metaObject()->slotNames().contains(
"print()" );
4286 d->m_paPrintFrame->setEnabled( enablePrintFrame );
4291 if ( d->m_doc && d->m_doc->isHTMLDocument() &&
static_cast<HTMLDocumentImpl*
>(d->m_doc)->body() && !d->m_bClearing )
4292 bgURL = static_cast<HTMLDocumentImpl*>(d->m_doc)->body()->getAttribute( ATTR_BACKGROUND ).string();
4294 d->m_paSaveBackground->setEnabled( !bgURL.isEmpty() );
4296 if ( d->m_paDebugScript )
4297 d->m_paDebugScript->setEnabled( d->m_frame ? d->m_frame->m_jscript : 0L );
4301 const ConstFrameIt
end = d->m_objects.end();
4302 for(ConstFrameIt it = d->m_objects.begin(); it !=
end; ++it )
4303 if ((*it)->m_frame == frame)
4304 return (*it)->m_liveconnect;
4308 bool TDEHTMLPart::requestFrame( tdehtml::RenderPart *frame,
const TQString &url,
const TQString &frameName,
4309 const TQStringList ¶ms,
bool isIFrame )
4312 FrameIt it = d->m_frames.find( frameName );
4313 if ( it == d->m_frames.end() )
4315 tdehtml::ChildFrame * child =
new tdehtml::ChildFrame;
4317 child->m_name = frameName;
4318 it = d->m_frames.append( child );
4321 (*it)->m_type = isIFrame ? tdehtml::ChildFrame::IFrame : tdehtml::ChildFrame::Frame;
4322 (*it)->m_frame = frame;
4323 (*it)->m_params = params;
4326 if ( url.find( TQString::fromLatin1(
"javascript:" ), 0,
false ) == 0 )
4328 if ( processObjectRequest(*it,
KURL(
"about:blank"), TQString(
"text/html") ) ) {
4333 if ( res.type() == TQVariant::String ) {
4335 p->
write( res.asString() );
4343 return requestObject( *it, u );
4346 TQString TDEHTMLPart::requestFrameName()
4348 return TQString::fromLatin1(
"<!--frame %1-->").arg(d->m_frameNameId++);
4351 bool TDEHTMLPart::requestObject( tdehtml::RenderPart *frame,
const TQString &url,
const TQString &serviceType,
4352 const TQStringList ¶ms )
4355 tdehtml::ChildFrame *child =
new tdehtml::ChildFrame;
4356 FrameIt it = d->m_objects.append( child );
4357 (*it)->m_frame = frame;
4358 (*it)->m_type = tdehtml::ChildFrame::Object;
4359 (*it)->m_params = params;
4363 if (!requestObject( *it,
completeURL( url ), args ) && !(*it)->m_run) {
4364 (*it)->m_bCompleted =
true;
4370 bool TDEHTMLPart::requestObject( tdehtml::ChildFrame *child,
const KURL &url,
const KParts::URLArgs &_args )
4372 if (!checkLinkSecurity(url))
4374 kdDebug(6005) <<
this <<
" TDEHTMLPart::requestObject checkLinkSecurity refused" <<
endl;
4377 if ( child->m_bPreloaded )
4379 kdDebug(6005) <<
"TDEHTMLPart::requestObject preload" <<
endl;
4380 if ( child->m_frame && child->m_part )
4381 child->m_frame->setWidget( child->m_part->widget() );
4383 child->m_bPreloaded =
false;
4392 child->m_run->abort();
4394 if ( child->m_part && !args.
reload && urlcmp( child->m_part->url().url(), url.
url(),
true, true ) )
4397 child->m_args = args;
4398 child->m_args.
reload = (d->m_cachePolicy == TDEIO::CC_Reload);
4399 child->m_serviceName = TQString();
4400 if (!d->m_referrer.isEmpty() && !child->m_args.metaData().contains(
"referrer" ))
4401 child->m_args.metaData()[
"referrer"] = d->m_referrer;
4403 child->m_args.metaData().insert(
"PropagateHttpHeader",
"true");
4404 child->m_args.metaData().insert(
"ssl_parent_ip", d->m_ssl_parent_ip);
4405 child->m_args.metaData().insert(
"ssl_parent_cert", d->m_ssl_parent_cert);
4406 child->m_args.metaData().insert(
"main_frame_request",
4408 child->m_args.metaData().insert(
"ssl_was_in_use",
4409 d->m_ssl_in_use ?
"TRUE":
"FALSE");
4410 child->m_args.metaData().insert(
"ssl_activate_warnings",
"TRUE");
4411 child->m_args.metaData().insert(
"cross-domain",
toplevelURL().
url());
4415 args.
serviceType = TQString::fromLatin1(
"text/html" );
4418 kdDebug(6050) <<
"Running new TDEHTMLRun for " <<
this <<
" and child=" << child <<
endl;
4419 child->m_run =
new TDEHTMLRun(
this, child, url, child->m_args,
true );
4420 d->m_bComplete =
false;
4423 return processObjectRequest( child, url, args.
serviceType );
4427 bool TDEHTMLPart::processObjectRequest( tdehtml::ChildFrame *child,
const KURL &_url,
const TQString &mimetype )
4437 if ( d->m_onlyLocalReferences || ( url.
isEmpty() && mimetype.isEmpty() ) )
4439 child->m_bCompleted =
true;
4444 if (child->m_bNotify)
4446 child->m_bNotify =
false;
4447 if ( !child->m_args.lockHistory() )
4448 emit d->m_extension->openURLNotify();
4451 if ( child->m_serviceType != mimetype || !child->m_part )
4456 if ( child->m_type != tdehtml::ChildFrame::Object )
4458 TQString suggestedFilename;
4460 suggestedFilename = child->m_run->suggestedFilename();
4463 url, mimetype, suggestedFilename );
4465 case KParts::BrowserRun::Save:
4466 TDEHTMLPopupGUIClient::saveURL(
widget(), i18n(
"Save As" ), url, child->m_args.metaData(), TQString(), 0, suggestedFilename);
4468 case KParts::BrowserRun::Cancel:
4469 child->m_bCompleted =
true;
4478 KParts::ReadOnlyPart *part =
createPart( d->m_view->viewport(), child->m_name.ascii(),
this, child->m_name.ascii(), mimetype, child->m_serviceName, dummy, child->m_params );
4482 if ( child->m_frame )
4483 if (child->m_frame->partLoadingErrorNotify( child, url, mimetype ))
4486 checkEmitLoadEvent();
4491 if ( child->m_part )
4493 if (!::tqqt_cast<TDEHTMLPart*>(child->m_part) && child->m_jscript)
4494 child->m_jscript->clear();
4497 if (child->m_liveconnect) {
4498 disconnect(child->m_liveconnect, TQT_SIGNAL(partEvent(
const unsigned long,
const TQString &,
const KParts::LiveConnectExtension::ArgList &)), child, TQT_SLOT(liveConnectEvent(
const unsigned long,
const TQString&,
const KParts::LiveConnectExtension::ArgList &)));
4499 child->m_liveconnect = 0L;
4503 child->m_serviceType = mimetype;
4504 if ( child->m_frame && part->
widget() )
4505 child->m_frame->setWidget( part->
widget() );
4507 if ( child->m_type != tdehtml::ChildFrame::Object )
4512 child->m_part = part;
4514 if (::tqqt_cast<TDEHTMLPart*>(part)) {
4515 static_cast<TDEHTMLPart*
>(part)->d->m_frame = child;
4516 }
else if (child->m_frame) {
4517 child->m_liveconnect = KParts::LiveConnectExtension::childObject(part);
4518 if (child->m_liveconnect)
4519 connect(child->m_liveconnect, TQT_SIGNAL(partEvent(
const unsigned long,
const TQString &,
const KParts::LiveConnectExtension::ArgList &)), child, TQT_SLOT(liveConnectEvent(
const unsigned long,
const TQString&,
const KParts::LiveConnectExtension::ArgList &)));
4523 sb->
setStatusBar( d->m_statusBarExtension->statusBar() );
4525 connect( part, TQT_SIGNAL(
started( TDEIO::Job *) ),
4526 this, TQT_SLOT( slotChildStarted( TDEIO::Job *) ) );
4527 connect( part, TQT_SIGNAL(
completed() ),
4528 this, TQT_SLOT( slotChildCompleted() ) );
4529 connect( part, TQT_SIGNAL(
completed(
bool) ),
4530 this, TQT_SLOT( slotChildCompleted(
bool) ) );
4531 connect( part, TQT_SIGNAL( setStatusBarText(
const TQString & ) ),
4532 this, TQT_SIGNAL( setStatusBarText(
const TQString & ) ) );
4533 if ( part->inherits(
"TDEHTMLPart" ) )
4535 connect(
this, TQT_SIGNAL(
completed() ),
4536 part, TQT_SLOT( slotParentCompleted() ) );
4537 connect(
this, TQT_SIGNAL(
completed(
bool) ),
4538 part, TQT_SLOT( slotParentCompleted() ) );
4541 connect( part, TQT_SIGNAL( docCreated() ),
4542 this, TQT_SLOT( slotChildDocCreated() ) );
4547 if ( child->m_extension )
4549 connect( child->m_extension, TQT_SIGNAL( openURLNotify() ),
4550 d->m_extension, TQT_SIGNAL( openURLNotify() ) );
4552 connect( child->m_extension, TQT_SIGNAL( openURLRequestDelayed(
const KURL &,
const KParts::URLArgs & ) ),
4555 connect( child->m_extension, TQT_SIGNAL( createNewWindow(
const KURL &,
const KParts::URLArgs & ) ),
4560 connect( child->m_extension, TQT_SIGNAL(
popupMenu(
const TQPoint &,
const KFileItemList & ) ),
4561 d->m_extension, TQT_SIGNAL(
popupMenu(
const TQPoint &,
const KFileItemList & ) ) );
4562 connect( child->m_extension, TQT_SIGNAL(
popupMenu(
KXMLGUIClient *,
const TQPoint &,
const KFileItemList & ) ),
4566 connect( child->m_extension, TQT_SIGNAL(
popupMenu(
const TQPoint &,
const KURL &,
const TQString &, mode_t ) ),
4567 d->m_extension, TQT_SIGNAL(
popupMenu(
const TQPoint &,
const KURL &,
const TQString &, mode_t ) ) );
4568 connect( child->m_extension, TQT_SIGNAL(
popupMenu(
KXMLGUIClient *,
const TQPoint &,
const KURL &,
const TQString &, mode_t ) ),
4573 connect( child->m_extension, TQT_SIGNAL( infoMessage(
const TQString & ) ),
4574 d->m_extension, TQT_SIGNAL( infoMessage(
const TQString & ) ) );
4579 child->m_extension->setBrowserInterface( d->m_extension->browserInterface() );
4582 else if ( child->m_frame && child->m_part &&
4583 child->m_frame->widget() != child->m_part->widget() )
4584 child->m_frame->setWidget( child->m_part->widget() );
4586 checkEmitLoadEvent();
4589 if ( !child->m_part )
4592 if ( child->m_bPreloaded )
4594 if ( child->m_frame && child->m_part )
4595 child->m_frame->setWidget( child->m_part->widget() );
4597 child->m_bPreloaded =
false;
4601 child->m_args.reload = (d->m_cachePolicy == TDEIO::CC_Reload);
4607 child->m_args.serviceType = mimetype;
4610 child->m_bCompleted = child->m_type == tdehtml::ChildFrame::Object;
4612 if ( child->m_extension )
4613 child->m_extension->setURLArgs( child->m_args );
4615 if(url.
protocol() ==
"javascript" || url.
url() ==
"about:blank") {
4616 if (!child->m_part->inherits(
"TDEHTMLPart"))
4622 if (d->m_doc && p->d->m_doc)
4623 p->d->m_doc->setBaseURL(d->m_doc->baseURL());
4624 if (!url.
url().startsWith(
"about:")) {
4629 p->
write(
"<HTML><TITLE></TITLE><BODY></BODY></HTML>");
4637 bool b = child->m_part->openURL( url );
4638 if (child->m_bCompleted)
4644 child->m_bCompleted =
true;
4651 TQObject *parent,
const char *name,
const TQString &mimetype,
4652 TQString &serviceName, TQStringList &serviceTypes,
4653 const TQStringList ¶ms )
4656 if ( !serviceName.isEmpty() )
4657 constr.append( TQString::fromLatin1(
"Name == '%1'" ).arg( serviceName ) );
4659 TDETrader::OfferList offers = TDETrader::self()->query( mimetype,
"KParts/ReadOnlyPart", constr, TQString() );
4661 if ( offers.isEmpty() ) {
4662 int pos = mimetype.find(
"-plugin" );
4665 TQString stripped_mime = mimetype.left( pos );
4666 offers = TDETrader::self()->query( stripped_mime,
"KParts/ReadOnlyPart", constr, TQString() );
4667 if ( offers.isEmpty() )
4671 TDETrader::OfferList::ConstIterator it = offers.begin();
4672 const TDETrader::OfferList::ConstIterator itEnd = offers.end();
4673 for ( ; it != itEnd; ++it )
4675 KService::Ptr service = (*it);
4681 const char *className =
"KParts::ReadOnlyPart";
4682 if ( service->serviceTypes().contains(
"Browser/View" ) )
4683 className =
"Browser/View";
4685 if ( factory->inherits(
"KParts::Factory" ) )
4686 res = static_cast<KParts::ReadOnlyPart *>(static_cast<KParts::Factory *>( factory )->createPart( parentWidget, widgetName, parent, name, className, params ));
4691 serviceTypes = service->serviceTypes();
4692 serviceName = service->name();
4697 kdWarning() << TQString(TQString(
"There was an error loading the module %1.\nThe diagnostics is:\n%2")
4706 if ( !d->m_manager && d->m_view )
4708 d->m_manager =
new KParts::PartManager( d->m_view->topLevelWidget(),
this,
"tdehtml part manager" );
4710 connect( d->m_manager, TQT_SIGNAL( activePartChanged(
KParts::Part * ) ),
4711 this, TQT_SLOT( slotActiveFrameChanged(
KParts::Part * ) ) );
4712 connect( d->m_manager, TQT_SIGNAL( partRemoved(
KParts::Part * ) ),
4716 return d->m_manager;
4719 void TDEHTMLPart::submitFormAgain()
4721 disconnect(
this, TQT_SIGNAL(
completed()),
this, TQT_SLOT(submitFormAgain()));
4722 if( d->m_doc && !d->m_doc->parsing() && d->m_submitForm)
4723 TDEHTMLPart::submitForm( d->m_submitForm->submitAction, d->m_submitForm->submitUrl, d->m_submitForm->submitFormData, d->m_submitForm->target, d->m_submitForm->submitContentType, d->m_submitForm->submitBoundary );
4725 delete d->m_submitForm;
4726 d->m_submitForm = 0;
4729 void TDEHTMLPart::submitFormProxy(
const char *
action,
const TQString &url,
const TQByteArray &formData,
const TQString &_target,
const TQString& contentType,
const TQString& boundary )
4731 submitForm(action, url, formData, _target, contentType, boundary);
4734 void TDEHTMLPart::submitForm(
const char *action,
const TQString &url,
const TQByteArray &formData,
const TQString &_target,
const TQString& contentType,
const TQString& boundary )
4736 kdDebug(6000) <<
this <<
": TDEHTMLPart::submitForm target=" << _target <<
" url=" << url <<
endl;
4737 if (d->m_formNotification == TDEHTMLPart::Only) {
4740 }
else if (d->m_formNotification == TDEHTMLPart::Before) {
4764 if (!d->m_submitForm) {
4766 if (d->m_ssl_in_use) {
4768 "\nA third party may be able to intercept and view this information." 4769 "\nAre you sure you wish to continue?"),
4770 i18n(
"Network Transmission"),
KGuiItem(i18n(
"&Send Unencrypted")));
4771 if (rc == KMessageBox::Cancel)
4774 KSSLSettings kss(
true);
4775 if (kss.warnOnUnencrypted()) {
4777 i18n(
"Warning: Your data is about to be transmitted across the network unencrypted." 4778 "\nAre you sure you wish to continue?"),
4779 i18n(
"Network Transmission"),
4780 KGuiItem(i18n(
"&Send Unencrypted")),
4781 "WarnOnUnencryptedForm");
4784 TQString grpNotifMsgs = TQString::fromLatin1(
"Notification Messages");
4787 if (!config->
readBoolEntry(
"WarnOnUnencryptedForm",
true)) {
4790 kss.setWarnOnUnencrypted(
false);
4793 if (rc == KMessageBox::Cancel)
4801 i18n(
"This site is attempting to submit form data via email.\n" 4802 "Do you want to continue?"),
4803 i18n(
"Network Transmission"),
4805 "WarnTriedEmailSubmit");
4807 if (rc == KMessageBox::Cancel) {
4816 TQString urlstring = u.
url();
4818 if ( urlstring.find( TQString::fromLatin1(
"javascript:" ), 0,
false ) == 0 ) {
4820 crossFrameExecuteScript( _target, urlstring.right( urlstring.length() - 11) );
4824 if (!checkLinkSecurity(u,
4825 i18n(
"<qt>The form will be submitted to <BR><B>%1</B><BR>on your local filesystem.<BR>Do you want to submit the form?" ),
4831 if (!d->m_referrer.isEmpty())
4832 args.
metaData()[
"referrer"] = d->m_referrer;
4834 args.
metaData().insert(
"PropagateHttpHeader",
"true");
4835 args.
metaData().insert(
"ssl_parent_ip", d->m_ssl_parent_ip);
4836 args.
metaData().insert(
"ssl_parent_cert", d->m_ssl_parent_cert);
4837 args.
metaData().insert(
"main_frame_request",
4839 args.
metaData().insert(
"ssl_was_in_use", d->m_ssl_in_use ?
"TRUE":
"FALSE");
4840 args.
metaData().insert(
"ssl_activate_warnings",
"TRUE");
4844 args.
frameName = _target.isEmpty() ? d->m_doc->baseTarget() : _target ;
4849 TQString q = u.
query().mid(1);
4850 TQStringList nvps = TQStringList::split(
"&", q);
4851 bool triedToAttach =
false;
4853 TQStringList::Iterator nvp = nvps.begin();
4854 const TQStringList::Iterator nvpEnd = nvps.end();
4859 while (nvp != nvpEnd) {
4860 const TQStringList pair = TQStringList::split(
"=", *nvp);
4861 if (pair.count() >= 2) {
4862 if (pair.first().lower() ==
"attach") {
4863 nvp = nvps.remove(nvp);
4864 triedToAttach =
true;
4874 KMessageBox::information(NULL, i18n(
"This site attempted to attach a file from your computer in the form submission. The attachment was removed for your protection."), i18n(
"TDE"),
"WarnTriedAttach");
4878 if (contentType.lower() ==
"multipart/form-data") {
4882 }
else if (contentType.lower() ==
"text/plain") {
4884 TQString tmpbody = TQString::fromLatin1(formData.data(),
4886 tmpbody.replace(TQRegExp(
"[&]"),
"\n");
4887 tmpbody.replace(TQRegExp(
"[+]"),
" ");
4895 nvps.append(TQString(
"body=%1").arg(bodyEnc));
4900 if ( strcmp( action,
"get" ) == 0 ) {
4902 u.
setQuery( TQString::fromLatin1( formData.data(), formData.size() ) );
4910 if (contentType.isNull() || contentType ==
"application/x-www-form-urlencoded")
4911 args.
setContentType(
"Content-Type: application/x-www-form-urlencoded" );
4913 args.
setContentType(
"Content-Type: " + contentType +
"; boundary=" + boundary );
4916 if ( d->m_doc->parsing() || d->m_runningScripts > 0 ) {
4917 if( d->m_submitForm ) {
4918 kdDebug(6000) <<
"TDEHTMLPart::submitForm ABORTING!" <<
endl;
4921 d->m_submitForm =
new TDEHTMLPartPrivate::SubmitForm;
4922 d->m_submitForm->submitAction =
action;
4923 d->m_submitForm->submitUrl =
url;
4924 d->m_submitForm->submitFormData = formData;
4925 d->m_submitForm->target = _target;
4926 d->m_submitForm->submitContentType = contentType;
4927 d->m_submitForm->submitBoundary = boundary;
4928 connect(
this, TQT_SIGNAL(
completed()),
this, TQT_SLOT(submitFormAgain()));
4932 emit d->m_extension->openURLRequest( u, args );
4942 KParts::BrowserExtension::PopupFlags itemflags=KParts::BrowserExtension::ShowBookmark | KParts::BrowserExtension::ShowReload;
4944 if ( linkUrl.isEmpty() ) {
4950 popupURL = tdehtmlPart->
url();
4953 itemflags = KParts::BrowserExtension::ShowTextSelectionItems;
4955 itemflags |= KParts::BrowserExtension::ShowNavigationItems;
4958 linkKURL = popupURL;
4961 if (!(d->m_strSelectedURLTarget).isEmpty() &&
4962 (d->m_strSelectedURLTarget.lower() !=
"_top") &&
4963 (d->m_strSelectedURLTarget.lower() !=
"_self") &&
4964 (d->m_strSelectedURLTarget.lower() !=
"_parent")) {
4965 if (d->m_strSelectedURLTarget.lower() ==
"_blank")
4979 TDEHTMLPopupGUIClient* client =
new TDEHTMLPopupGUIClient(
this, d->m_popupMenuXML, linkKURL );
4980 TQGuardedPtr<TQObject> guard( client );
4982 TQString mimetype = TQString::fromLatin1(
"text/html" );
4985 if (!linkUrl.isEmpty())
4989 mimetype = KMimeType::findByURL(popupURL,0,
true,
false)->name();
4993 const TQString fname(popupURL.
fileName(
false));
4994 if (!fname.isEmpty() && !popupURL.
hasRef() && popupURL.
query().isEmpty())
4996 KMimeType::Ptr pmt = KMimeType::findByPath(fname,0,
true);
5002 if (pmt->name() != KMimeType::defaultMimeType() &&
5003 !pmt->is(
"application/x-perl") &&
5004 !pmt->is(
"application/x-perl-module") &&
5005 !pmt->is(
"application/x-php") &&
5006 !pmt->is(
"application/x-python-bytecode") &&
5007 !pmt->is(
"application/x-python") &&
5008 !pmt->is(
"application/x-shellscript"))
5009 mimetype = pmt->name();
5016 emit d->m_extension->popupMenu( client, TQCursor::pos(), popupURL, args, itemflags, S_IFREG );
5018 if ( !guard.isNull() ) {
5020 emit
popupMenu(linkUrl, TQCursor::pos());
5021 d->m_strSelectedURL = d->m_strSelectedURLTarget = TQString();
5025 void TDEHTMLPart::slotParentCompleted()
5028 if ( !d->m_redirectURL.isEmpty() && !d->m_redirectionTimer.isActive() )
5031 d->m_redirectionTimer.start( 1000 * d->m_delayRedirect,
true );
5035 void TDEHTMLPart::slotChildStarted( TDEIO::Job *job )
5037 tdehtml::ChildFrame *child = frame( TQT_TQOBJECT_CONST(sender()) );
5041 child->m_bCompleted =
false;
5043 if ( d->m_bComplete )
5049 emit d->m_extension->openURLNotify();
5052 d->m_bComplete =
false;
5057 void TDEHTMLPart::slotChildCompleted()
5059 slotChildCompleted(
false );
5062 void TDEHTMLPart::slotChildCompleted(
bool pendingAction )
5064 tdehtml::ChildFrame *child = frame( TQT_TQOBJECT_CONST(sender()) );
5067 kdDebug(6050) <<
this <<
" slotChildCompleted child=" << child <<
" m_frame=" << child->m_frame <<
endl;
5068 child->m_bCompleted =
true;
5069 child->m_bPendingRedirection = pendingAction;
5075 void TDEHTMLPart::slotChildDocCreated()
5081 if ( d->m_doc && d->m_doc->isHTMLDocument() )
5083 if ( sender()->inherits(
"TDEHTMLPart") )
5085 DOMString domain =
static_cast<HTMLDocumentImpl*
>(d->m_doc)->domain();
5086 if (htmlFrame->d->m_doc && htmlFrame->d->m_doc->isHTMLDocument() )
5088 static_cast<HTMLDocumentImpl*>(htmlFrame->d->m_doc)->setDomain( domain );
5092 disconnect( htmlFrame, TQT_SIGNAL( docCreated() ),
this, TQT_SLOT( slotChildDocCreated() ) );
5097 tdehtml::ChildFrame *child = frame( TQT_TQOBJECT_CONST(sender())->parent() );
5101 TQString urlStr = url.
url();
5102 if ( urlStr.find( TQString::fromLatin1(
"javascript:" ), 0,
false ) == 0 ) {
5108 TQString frameName = args.
frameName.lower();
5109 if ( !frameName.isEmpty() ) {
5110 if ( frameName == TQString::fromLatin1(
"_top" ) )
5112 emit d->m_extension->openURLRequest( url, args );
5115 else if ( frameName == TQString::fromLatin1(
"_blank" ) )
5117 emit d->m_extension->createNewWindow( url, args );
5120 else if ( frameName == TQString::fromLatin1(
"_parent" ) )
5125 emit d->m_extension->openURLRequest( url, newArgs );
5128 else if ( frameName != TQString::fromLatin1(
"_self" ) )
5130 tdehtml::ChildFrame *_frame = recursiveFrameRequest( callingHtmlPart, url, args );
5134 emit d->m_extension->openURLRequest( url, args );
5142 if ( child && child->m_type != tdehtml::ChildFrame::Object ) {
5144 child->m_bNotify =
true;
5145 requestObject( child, url, args );
5146 }
else if ( frameName==
"_self" )
5150 emit d->m_extension->openURLRequest( url, newArgs );
5156 emit d->m_extension->requestFocus(
this);
5159 tdehtml::ChildFrame *TDEHTMLPart::frame(
const TQObject *obj )
5161 assert( obj->inherits(
"KParts::ReadOnlyPart" ) );
5164 FrameIt it = d->m_frames.begin();
5165 const FrameIt
end = d->m_frames.end();
5166 for (; it !=
end; ++it )
5170 FrameIt oi = d->m_objects.begin();
5171 const FrameIt oiEnd = d->m_objects.end();
5172 for (; oi != oiEnd; ++oi )
5181 bool TDEHTMLPart::checkFrameAccess(
TDEHTMLPart *callingHtmlPart)
5183 if (callingHtmlPart ==
this)
5187 #ifdef DEBUG_FINDFRAME 5188 kdDebug(6050) <<
"TDEHTMLPart::checkFrameAccess: Empty part " <<
this <<
" URL = " <<
m_url <<
endl;
5199 #ifdef DEBUG_FINDFRAME 5200 kdDebug(6050) <<
"TDEHTMLPart::checkFrameAccess: actDomain = '" << actDomain.string() <<
"' destDomain = '" << destDomain.string() <<
"'" <<
endl;
5203 if (actDomain == destDomain)
5206 #ifdef DEBUG_FINDFRAME 5209 kdDebug(6050) <<
"TDEHTMLPart::checkFrameAccess: Unknown part/domain " << callingHtmlPart <<
" tries to access part " <<
this <<
endl;
5218 #ifdef DEBUG_FINDFRAME 5219 kdDebug(6050) <<
"TDEHTMLPart::findFrameParent: this = " <<
this <<
" URL = " <<
m_url <<
" name = " << name() <<
" findFrameParent( " << f <<
" )" <<
endl;
5224 if (!checkFrameAccess(callingHtmlPart))
5228 if (!childFrame && !
parentPart() && (TQString::fromLocal8Bit(name()) == f))
5231 FrameIt it = d->m_frames.find( f );
5232 const FrameIt
end = d->m_frames.end();
5235 #ifdef DEBUG_FINDFRAME 5236 kdDebug(6050) <<
"TDEHTMLPart::findFrameParent: FOUND!" <<
endl;
5243 it = d->m_frames.begin();
5244 for (; it !=
end; ++it )
5247 if ( p && p->inherits(
"TDEHTMLPart" ))
5260 tdehtml::ChildFrame *childFrame;
5265 if ( p && p->inherits(
"TDEHTMLPart" ))
5266 return static_cast<TDEHTMLPart *>(p);
5273 tdehtml::ChildFrame *childFrame;
5283 while ( part && part->inherits(
"TDEHTMLPart") &&
5284 static_cast<TDEHTMLPart *
>(part)->d->m_frames.count() > 0 ) {
5287 if ( !part )
return frameset;
5294 ConstFrameIt it = d->m_frames.find( frameName );
5295 if ( it == d->m_frames.end() )
5301 return (!(*it)->m_frame.isNull());
5308 return kp->jScript();
5310 FrameIt it = d->m_frames.begin();
5311 const FrameIt itEnd = d->m_frames.end();
5313 for (; it != itEnd; ++it)
5314 if (framePart == (*it)->m_part) {
5315 if (!(*it)->m_jscript)
5317 return (*it)->m_jscript;
5327 tdehtml::ChildFrame *TDEHTMLPart::recursiveFrameRequest(
TDEHTMLPart *callingHtmlPart,
const KURL &url,
5330 #ifdef DEBUG_FINDFRAME 5331 kdDebug( 6050 ) <<
"TDEHTMLPart::recursiveFrameRequest this = " <<
this <<
", frame = " << args.
frameName <<
", url = " << url <<
endl;
5333 tdehtml::ChildFrame *childFrame;
5337 if (childPart ==
this)
5340 childPart->requestObject( childFrame, url, args );
5346 tdehtml::ChildFrame *res =
parentPart()->recursiveFrameRequest( callingHtmlPart, url, args, callParent );
5349 parentPart()->requestObject( res, url, args );
5356 static int s_saveStateIndentLevel = 0;
5362 TQString indent = TQString().leftJustify( s_saveStateIndentLevel * 4,
' ' );
5363 const int indentLevel = s_saveStateIndentLevel++;
5364 kdDebug( 6050 ) << indent <<
"saveState this=" <<
this <<
" '" << name() <<
"' saving URL " <<
m_url.
url() <<
endl;
5367 stream <<
m_url << (TQ_INT32)d->m_view->contentsX() << (TQ_INT32)d->m_view->contentsY()
5368 << (TQ_INT32) d->m_view->contentsWidth() << (TQ_INT32) d->m_view->contentsHeight() << (TQ_INT32) d->m_view->marginWidth() << (TQ_INT32) d->m_view->marginHeight();
5371 int focusNodeNumber;
5372 if (!d->m_focusNodeRestored)
5373 focusNodeNumber = d->m_focusNodeNumber;
5374 else if (d->m_doc && d->m_doc->focusNode())
5375 focusNodeNumber = d->m_doc->nodeAbsIndex(d->m_doc->focusNode());
5377 focusNodeNumber = -1;
5378 stream << focusNodeNumber;
5381 stream << d->m_cacheId;
5384 TQStringList docState;
5387 docState = d->m_doc->docState();
5389 stream << d->m_encoding << d->m_sheetUsed << docState;
5391 stream << d->m_zoomFactor;
5393 stream << d->m_httpHeaders;
5394 stream << d->m_pageServices;
5395 stream << d->m_pageReferrer;
5398 stream << d->m_ssl_in_use
5399 << d->m_ssl_peer_certificate
5400 << d->m_ssl_peer_chain
5403 << d->m_ssl_cipher_desc
5404 << d->m_ssl_cipher_version
5405 << d->m_ssl_cipher_used_bits
5406 << d->m_ssl_cipher_bits
5407 << d->m_ssl_cert_state
5408 << d->m_ssl_parent_ip
5409 << d->m_ssl_parent_cert;
5412 TQStringList frameNameLst, frameServiceTypeLst, frameServiceNameLst;
5414 TQValueList<TQByteArray> frameStateBufferLst;
5416 ConstFrameIt it = d->m_frames.begin();
5417 const ConstFrameIt
end = d->m_frames.end();
5418 for (; it !=
end; ++it )
5420 if ( !(*it)->m_part )
5423 frameNameLst << (*it)->m_name;
5424 frameServiceTypeLst << (*it)->m_serviceType;
5425 frameServiceNameLst << (*it)->m_serviceName;
5426 frameURLLst << (*it)->m_part->url();
5429 TQDataStream frameStream( state, IO_WriteOnly );
5431 if ( (*it)->m_extension )
5432 (*it)->m_extension->saveState( frameStream );
5434 frameStateBufferLst << state;
5438 stream << (TQ_UINT32) frameNameLst.count();
5439 stream << frameNameLst << frameServiceTypeLst << frameServiceNameLst << frameURLLst << frameStateBufferLst;
5441 s_saveStateIndentLevel = indentLevel;
5448 TQ_INT32 xOffset, yOffset, wContents, hContents, mWidth, mHeight;
5449 TQ_UINT32 frameCount;
5450 TQStringList
frameNames, frameServiceTypes, docState, frameServiceNames;
5452 TQValueList<TQByteArray> frameStateBuffers;
5453 TQValueList<int> fSizes;
5455 long old_cacheId = d->m_cacheId;
5457 stream >> u >> xOffset >> yOffset >> wContents >> hContents >> mWidth >> mHeight;
5459 d->m_view->setMarginWidth( mWidth );
5460 d->m_view->setMarginHeight( mHeight );
5464 stream >> d->m_focusNodeNumber;
5465 d->m_focusNodeRestored =
false;
5467 stream >> d->m_cacheId;
5469 stream >> encoding >> sheetUsed >> docState;
5472 d->m_sheetUsed = sheetUsed;
5478 stream >> d->m_httpHeaders;
5479 stream >> d->m_pageServices;
5480 stream >> d->m_pageReferrer;
5483 stream >> d->m_ssl_in_use
5484 >> d->m_ssl_peer_certificate
5485 >> d->m_ssl_peer_chain
5488 >> d->m_ssl_cipher_desc
5489 >> d->m_ssl_cipher_version
5490 >> d->m_ssl_cipher_used_bits
5491 >> d->m_ssl_cipher_bits
5492 >> d->m_ssl_cert_state
5493 >> d->m_ssl_parent_ip
5494 >> d->m_ssl_parent_cert;
5496 setPageSecurity( d->m_ssl_in_use ? Encrypted : NotCrypted );
5498 stream >> frameCount >> frameNames >> frameServiceTypes >> frameServiceNames
5499 >> frameURLs >> frameStateBuffers;
5501 d->m_bComplete =
false;
5502 d->m_bLoadEventEmitted =
false;
5508 if (d->m_cacheId == old_cacheId)
5511 d->m_redirectionTimer.stop();
5513 FrameIt fIt = d->m_frames.begin();
5514 const FrameIt fEnd = d->m_frames.end();
5516 for (; fIt != fEnd; ++fIt )
5517 (*fIt)->m_bCompleted =
false;
5519 fIt = d->m_frames.begin();
5521 TQStringList::ConstIterator fNameIt = frameNames.begin();
5522 TQStringList::ConstIterator fServiceTypeIt = frameServiceTypes.begin();
5523 TQStringList::ConstIterator fServiceNameIt = frameServiceNames.begin();
5524 KURL::List::ConstIterator fURLIt = frameURLs.begin();
5525 TQValueList<TQByteArray>::ConstIterator fBufferIt = frameStateBuffers.begin();
5527 for (; fIt != fEnd; ++fIt, ++fNameIt, ++fServiceTypeIt, ++fServiceNameIt, ++fURLIt, ++fBufferIt )
5529 tdehtml::ChildFrame*
const child = *fIt;
5533 if ( child->m_name != *fNameIt || child->m_serviceType != *fServiceTypeIt )
5535 child->m_bPreloaded =
true;
5536 child->m_name = *fNameIt;
5537 child->m_serviceName = *fServiceNameIt;
5538 processObjectRequest( child, *fURLIt, *fServiceTypeIt );
5540 if ( child->m_part )
5542 child->m_bCompleted =
false;
5543 if ( child->m_extension && !(*fBufferIt).isEmpty() )
5545 TQDataStream frameStream( *fBufferIt, IO_ReadOnly );
5546 child->m_extension->restoreState( frameStream );
5549 child->m_part->openURL( *fURLIt );
5557 d->m_extension->setURLArgs( args );
5559 d->m_view->resizeContents( wContents, hContents);
5560 d->m_view->setContentsPos( xOffset, yOffset );
5570 d->m_bCleared =
false;
5573 d->m_sheetUsed = sheetUsed;
5575 TQStringList::ConstIterator fNameIt = frameNames.begin();
5576 const TQStringList::ConstIterator fNameEnd = frameNames.end();
5578 TQStringList::ConstIterator fServiceTypeIt = frameServiceTypes.begin();
5579 TQStringList::ConstIterator fServiceNameIt = frameServiceNames.begin();
5580 KURL::List::ConstIterator fURLIt = frameURLs.begin();
5581 TQValueList<TQByteArray>::ConstIterator fBufferIt = frameStateBuffers.begin();
5583 for (; fNameIt != fNameEnd; ++fNameIt, ++fServiceTypeIt, ++fServiceNameIt, ++fURLIt, ++fBufferIt )
5585 tdehtml::ChildFrame*
const newChild =
new tdehtml::ChildFrame;
5586 newChild->m_bPreloaded =
true;
5587 newChild->m_name = *fNameIt;
5588 newChild->m_serviceName = *fServiceNameIt;
5592 const FrameIt childFrame = d->m_frames.append( newChild );
5594 processObjectRequest( *childFrame, *fURLIt, *fServiceTypeIt );
5596 (*childFrame)->m_bPreloaded =
true;
5598 if ( (*childFrame)->m_part )
5600 if ( (*childFrame)->m_extension ) {
5601 if ( (*childFrame)->m_extension && !(*fBufferIt).isEmpty() )
5603 TQDataStream frameStream( *fBufferIt, IO_ReadOnly );
5604 (*childFrame)->m_extension->restoreState( frameStream );
5607 (*childFrame)->m_part->openURL( *fURLIt );
5618 d->m_extension->setURLArgs( args );
5621 d->m_restored =
true;
5623 d->m_restored =
false;
5647 return d->m_view->nodeUnderMouse();
5652 return d->m_view->nonSharedNodeUnderMouse();
5655 void TDEHTMLPart::emitSelectionChanged()
5657 emit d->m_extension->enableAction(
"copy",
hasSelection() );
5658 if ( d->m_findDialog )
5667 return d->m_zoomFactor;
5671 static const int zoomSizes[] = { 20, 40, 60, 80, 90, 95, 100, 105, 110, 120, 140, 160, 180, 200, 250, 300 };
5672 static const int zoomSizeCount = (
sizeof(zoomSizes) /
sizeof(
int));
5673 static const int minZoom = 20;
5674 static const int maxZoom = 300;
5677 extern const int KDE_NO_EXPORT fastZoomSizes[] = { 20, 50, 75, 90, 100, 120, 150, 200, 300 };
5678 extern const int KDE_NO_EXPORT fastZoomSizeCount =
sizeof fastZoomSizes /
sizeof fastZoomSizes[0];
5680 void TDEHTMLPart::slotIncZoom()
5682 zoomIn(zoomSizes, zoomSizeCount);
5685 void TDEHTMLPart::slotDecZoom()
5687 zoomOut(zoomSizes, zoomSizeCount);
5690 void TDEHTMLPart::slotIncZoomFast()
5692 zoomIn(fastZoomSizes, fastZoomSizeCount);
5695 void TDEHTMLPart::slotDecZoomFast()
5697 zoomOut(fastZoomSizes, fastZoomSizeCount);
5700 void TDEHTMLPart::zoomIn(
const int stepping[],
int count)
5704 if (zoomFactor < maxZoom) {
5706 for (
int i = 0; i < count; ++i)
5707 if (stepping[i] > zoomFactor) {
5708 zoomFactor = stepping[i];
5715 void TDEHTMLPart::zoomOut(
const int stepping[],
int count)
5718 if (zoomFactor > minZoom) {
5720 for (
int i = count-1; i >= 0; --i)
5721 if (stepping[i] < zoomFactor) {
5722 zoomFactor = stepping[i];
5731 if (percent < minZoom) percent = minZoom;
5732 if (percent > maxZoom) percent = maxZoom;
5733 if (d->m_zoomFactor == percent)
return;
5734 d->m_zoomFactor = percent;
5737 TQApplication::setOverrideCursor( tqwaitCursor );
5738 if (d->m_doc->styleSelector())
5739 d->m_doc->styleSelector()->computeFontSizes(d->m_doc->paintDeviceMetrics(), d->m_zoomFactor);
5740 d->m_doc->recalcStyle( NodeImpl::Force );
5741 TQApplication::restoreOverrideCursor();
5744 ConstFrameIt it = d->m_frames.begin();
5745 const ConstFrameIt
end = d->m_frames.end();
5746 for (; it !=
end; ++it )
5747 if ( !( *it )->m_part.isNull() && (*it)->m_part->inherits(
"TDEHTMLPart" ) ) {
5752 if ( d->m_guiProfile == BrowserViewGUI ) {
5753 d->m_paDecZoomFactor->setEnabled( d->m_zoomFactor > minZoom );
5754 d->m_paIncZoomFactor->setEnabled( d->m_zoomFactor < maxZoom );
5758 void TDEHTMLPart::slotZoomView(
int delta )
5766 void TDEHTMLPart::setStatusBarText(
const TQString& text, StatusBarPriority p)
5768 if (!d->m_statusMessagesEnabled)
5771 d->m_statusBarText[p] = text;
5774 TQString tobe = d->m_statusBarText[BarHoverText];
5776 tobe = d->m_statusBarText[BarOverrideText];
5777 if (tobe.isEmpty()) {
5778 tobe = d->m_statusBarText[BarDefaultText];
5779 if (!tobe.isEmpty() && d->m_jobspeed)
5782 tobe += i18n(
"(%1/s)" ).arg( TDEIO::convertSize( d->m_jobspeed ) );
5786 emit ReadOnlyPart::setStatusBarText(tobe);
5792 setStatusBarText(text, BarOverrideText);
5797 setStatusBarText(text, BarDefaultText);
5802 return d->m_statusBarText[BarOverrideText];
5807 return d->m_statusBarText[BarDefaultText];
5812 return d->m_referrer;
5817 KURL referrerURL =
KURL( d->m_pageReferrer );
5820 TQString protocol = referrerURL.
protocol();
5822 if ((protocol ==
"http") ||
5825 referrerURL.
setRef(TQString());
5826 referrerURL.
setUser(TQString());
5827 referrerURL.
setPass(TQString());
5828 return referrerURL.
url();
5843 d->m_lastModified = lastModif.toString( Qt::LocalDate );
5846 return d->m_lastModified;
5849 void TDEHTMLPart::slotLoadImages()
5852 d->m_doc->docLoader()->setAutoloadImages( !d->m_doc->docLoader()->autoloadImages() );
5854 ConstFrameIt it = d->m_frames.begin();
5855 const ConstFrameIt
end = d->m_frames.end();
5856 for (; it !=
end; ++it )
5857 if ( !( *it )->m_part.isNull() && (*it)->m_part->inherits(
"TDEHTMLPart" ) ) {
5863 void TDEHTMLPart::reparseConfiguration()
5870 d->m_doc->docLoader()->setShowAnimations( settings->showAnimations() );
5872 d->m_bOpenMiddleClick = settings->isOpenMiddleClickEnabled();
5873 d->m_bBackRightClick = settings->isBackRightClickEnabled();
5874 d->m_bJScriptEnabled = settings->isJavaScriptEnabled(
m_url.
host());
5875 setDebugScript( settings->isJavaScriptDebugEnabled() );
5876 d->m_bJavaEnabled = settings->isJavaEnabled(
m_url.
host());
5877 d->m_bPluginsEnabled = settings->isPluginsEnabled(
m_url.
host());
5878 d->m_metaRefreshEnabled = settings->isAutoDelayedActionsEnabled ();
5880 delete d->m_settings;
5881 d->m_settings =
new TDEHTMLSettings(*TDEHTMLFactory::defaultHTMLSettings());
5883 TQApplication::setOverrideCursor( tqwaitCursor );
5884 tdehtml::CSSStyleSelector::reparseConfiguration();
5885 if(d->m_doc) d->m_doc->updateStyleSelector();
5886 TQApplication::restoreOverrideCursor();
5888 if (TDEHTMLFactory::defaultHTMLSettings()->isAdFilterEnabled())
5896 ConstFrameIt it = d->m_frames.begin();
5897 const ConstFrameIt
end = d->m_frames.end();
5898 for (; it !=
end; ++it )
5899 if (!(*it)->m_bPreloaded)
5900 res += (*it)->m_name;
5905 TQPtrList<KParts::ReadOnlyPart> TDEHTMLPart::frames()
const 5907 TQPtrList<KParts::ReadOnlyPart> res;
5909 ConstFrameIt it = d->m_frames.begin();
5910 const ConstFrameIt
end = d->m_frames.end();
5911 for (; it !=
end; ++it )
5912 if (!(*it)->m_bPreloaded)
5913 res.append( (*it)->m_part );
5920 kdDebug( 6050 ) <<
this <<
"TDEHTMLPart::openURLInFrame " << url <<
endl;
5921 FrameIt it = d->m_frames.find( urlArgs.
frameName );
5923 if ( it == d->m_frames.end() )
5927 if ( !urlArgs.lockHistory() )
5928 emit d->m_extension->openURLNotify();
5930 requestObject( *it, url, urlArgs );
5945 void TDEHTMLPart::customEvent( TQCustomEvent *event )
5947 if ( tdehtml::MousePressEvent::test( event ) )
5953 if ( tdehtml::MouseDoubleClickEvent::test( event ) )
5959 if ( tdehtml::MouseMoveEvent::test( event ) )
5965 if ( tdehtml::MouseReleaseEvent::test( event ) )
5971 if ( tdehtml::DrawContentsEvent::test( event ) )
5977 KParts::ReadOnlyPart::customEvent( event );
5985 static bool firstRunAt(tdehtml::RenderObject *renderNode,
int y, NodeImpl *&startNode,
long &startOffset)
5987 for (tdehtml::RenderObject *n = renderNode; n; n = n->
nextSibling()) {
5989 tdehtml::RenderText*
const textRenderer =
static_cast<tdehtml::RenderText *
>(n);
5990 const tdehtml::InlineTextBoxArray &runs = textRenderer->inlineTextBoxes();
5991 const unsigned lim = runs.count();
5992 for (
unsigned i = 0; i != lim; ++i) {
5993 if (runs[i]->m_y == y && textRenderer->element()) {
5994 startNode = textRenderer->element();
5995 startOffset = runs[i]->m_start;
6001 if (firstRunAt(n->
firstChild(), y, startNode, startOffset)) {
6014 static bool lastRunAt(tdehtml::RenderObject *renderNode,
int y, NodeImpl *&endNode,
long &endOffset)
6016 tdehtml::RenderObject *n = renderNode;
6020 tdehtml::RenderObject *next;
6021 while ((next = n->nextSibling())) {
6026 if (lastRunAt(n->firstChild(), y, endNode, endOffset)) {
6031 tdehtml::RenderText*
const textRenderer =
static_cast<tdehtml::RenderText *
>(n);
6032 const tdehtml::InlineTextBoxArray &runs = textRenderer->inlineTextBoxes();
6033 for (
int i = (
int)runs.count()-1; i >= 0; --i) {
6034 if (runs[i]->m_y == y && textRenderer->element()) {
6035 endNode = textRenderer->element();
6036 endOffset = runs[i]->m_start + runs[i]->m_len;
6042 if (n == renderNode) {
6046 n = n->previousSibling();
6053 TQMouseEvent *_mouse =
event->qmouseEvent();
6054 DOM::Node innerNode =
event->innerNode();
6055 d->m_mousePressNode = innerNode;
6057 d->m_dragStartPos = _mouse->pos();
6059 if ( !event->url().isNull() ) {
6060 d->m_strSelectedURL =
event->url().string();
6061 d->m_strSelectedURLTarget =
event->target().string();
6064 d->m_strSelectedURL = d->m_strSelectedURLTarget = TQString();
6066 if ( _mouse->button() == Qt::LeftButton ||
6067 _mouse->button() == Qt::MidButton )
6069 d->m_bMousePressed =
true;
6071 #ifndef TDEHTML_NO_SELECTION 6072 if ( _mouse->button() == Qt::LeftButton )
6074 if ( (!d->m_strSelectedURL.isNull() && !
isEditable())
6075 || (!d->m_mousePressNode.isNull() && d->m_mousePressNode.elementId() == ID_IMG) )
6077 if ( !innerNode.
isNull() && innerNode.handle()->renderer()) {
6079 DOM::NodeImpl* node = 0;
6080 tdehtml::RenderObject::SelPointState state;
6081 innerNode.handle()->renderer()->checkSelectionPoint( event->x(),
event->y(),
6082 event->absX()-innerNode.handle()->renderer()->xPos(),
6083 event->absY()-innerNode.handle()->renderer()->yPos(), node, offset, state );
6084 d->m_extendMode = d->ExtendByChar;
6085 #ifdef TDEHTML_NO_CARET 6086 d->m_selectionStart = node;
6087 d->m_startOffset = offset;
6093 d->m_selectionEnd = d->m_selectionStart;
6094 d->m_endOffset = d->m_startOffset;
6095 d->m_doc->clearSelection();
6096 #else // TDEHTML_NO_CARET 6097 d->m_view->moveCaretTo(node, offset, (_mouse->state() & ShiftButton) == 0);
6098 #endif // TDEHTML_NO_CARET 6099 d->m_initialNode = d->m_selectionStart;
6100 d->m_initialOffset = d->m_startOffset;
6105 #ifndef TDEHTML_NO_CARET 6112 emitSelectionChanged();
6116 d->m_dragLastPos = _mouse->globalPos();
6120 if ( _mouse->button() == Qt::RightButton &&
parentPart() != 0 && d->m_bBackRightClick )
6122 d->m_bRightMousePressed =
true;
6123 }
else if ( _mouse->button() == Qt::RightButton )
6132 TQMouseEvent *_mouse =
event->qmouseEvent();
6133 if ( _mouse->button() == Qt::LeftButton )
6135 d->m_bMousePressed =
true;
6136 DOM::Node innerNode =
event->innerNode();
6138 if ( !innerNode.
isNull() && innerNode.handle()->renderer()) {
6140 DOM::NodeImpl* node = 0;
6141 tdehtml::RenderObject::SelPointState state;
6142 innerNode.handle()->renderer()->checkSelectionPoint( event->x(),
event->y(),
6143 event->absX()-innerNode.handle()->renderer()->xPos(),
6144 event->absY()-innerNode.handle()->renderer()->yPos(), node, offset, state);
6148 if ( node && node->renderer() )
6151 bool selectLine = (
event->clickCount() == 3);
6152 d->m_extendMode = selectLine ? d->ExtendByLine : d->ExtendByWord;
6155 if (_mouse->state() & ShiftButton) {
6156 d->caretNode() = node;
6157 d->caretOffset() = offset;
6158 d->m_startBeforeEnd = RangeImpl::compareBoundaryPoints(
6159 d->m_selectionStart.handle(), d->m_startOffset,
6160 d->m_selectionEnd.handle(), d->m_endOffset) <= 0;
6161 d->m_initialNode = d->m_extendAtEnd ? d->m_selectionStart : d->m_selectionEnd;
6162 d->m_initialOffset = d->m_extendAtEnd ? d->m_startOffset : d->m_endOffset;
6164 d->m_selectionStart = d->m_selectionEnd = node;
6165 d->m_startOffset = d->m_endOffset = offset;
6166 d->m_startBeforeEnd =
true;
6167 d->m_initialNode = node;
6168 d->m_initialOffset = offset;
6173 extendSelection( d->m_selectionStart.handle(), d->m_startOffset, d->m_selectionStart, d->m_startOffset, !d->m_startBeforeEnd, selectLine );
6175 extendSelection( d->m_selectionEnd.handle(), d->m_endOffset, d->m_selectionEnd, d->m_endOffset, d->m_startBeforeEnd, selectLine );
6180 emitSelectionChanged();
6182 ->setSelection(d->m_selectionStart.handle(),d->m_startOffset,
6183 d->m_selectionEnd.handle(),d->m_endOffset);
6184 #ifndef TDEHTML_NO_CARET 6185 bool v = d->m_view->placeCaret();
6186 emitCaretPositionChanged(v ? d->caretNode() : 0, d->caretOffset());
6194 void TDEHTMLPart::extendSelection( DOM::NodeImpl* node,
long offset,
DOM::Node& selectionNode,
long& selectionOffset,
bool right,
bool selectLines )
6196 tdehtml::RenderObject* obj = node->renderer();
6198 if (obj->isText() && selectLines) {
6200 tdehtml::RenderText *renderer =
static_cast<tdehtml::RenderText *
>(obj);
6201 tdehtml::InlineTextBox *run = renderer->findInlineTextBox( offset, pos );
6203 DOM::NodeImpl* selNode = 0;
6209 int selectionPointY = run->m_y;
6212 tdehtml::RenderObject *renderNode = renderer;
6213 while (renderNode && renderNode->isInline())
6214 renderNode = renderNode->parent();
6216 renderNode = renderNode->firstChild();
6221 if (!lastRunAt (renderNode, selectionPointY, selNode, selOfs))
6226 if (!firstRunAt (renderNode, selectionPointY, selNode, selOfs))
6230 selectionNode = selNode;
6231 selectionOffset = selOfs;
6237 if ( obj->isText() ) {
6238 str =
static_cast<tdehtml::RenderText *
>(obj)->data().string();
6246 selectionNode = node;
6247 selectionOffset = offset;
6251 while ( obj && ( (right && offset >= len-1) || (!right && offset <= 0) ) )
6253 obj = right ? obj->objectBelow() : obj->objectAbove();
6258 if ( obj->isText() )
6259 str = static_cast<tdehtml::RenderText *>(obj)->data().string();
6260 else if ( obj->isBR() )
6262 else if ( !obj->isInline() ) {
6277 node = obj->element();
6280 Q_ASSERT( offset < len-1 );
6285 Q_ASSERT( offset > 0 );
6290 ch = str[ (int)offset ];
6292 }
while ( !ch.isSpace() && !ch.isPunct() );
6295 if (right) ++selectionOffset;
6298 #ifndef TDEHTML_NO_SELECTION 6299 void TDEHTMLPart::extendSelectionTo(
int x,
int y,
int absX,
int absY,
const DOM::Node &innerNode)
6303 DOM::NodeImpl* node=0;
6304 tdehtml::RenderObject::SelPointState state;
6305 innerNode.handle()->renderer()->checkSelectionPoint( x, y,
6306 absX-innerNode.handle()->renderer()->xPos(),
6307 absY-innerNode.handle()->renderer()->yPos(), node, offset, state);
6308 if (!node || !node->renderer())
return;
6313 bool withinNode = innerNode == node;
6317 if (d->m_selectionStart.isNull() || d->m_selectionEnd.isNull() ||
6318 d->m_initialNode.isNull() ||
6319 !d->m_selectionStart.handle()->renderer() ||
6320 !d->m_selectionEnd.handle()->renderer())
return;
6322 if (d->m_extendMode != d->ExtendByChar) {
6324 bool caretBeforeInit = RangeImpl::compareBoundaryPoints(
6325 d->caretNode().handle(), d->caretOffset(),
6326 d->m_initialNode.handle(), d->m_initialOffset) <= 0;
6327 bool nodeBeforeInit = RangeImpl::compareBoundaryPoints(node, offset,
6328 d->m_initialNode.handle(), d->m_initialOffset) <= 0;
6330 if (caretBeforeInit != nodeBeforeInit) {
6332 extendSelection(d->m_initialNode.handle(), d->m_initialOffset,
6333 d->m_extendAtEnd ? d->m_selectionStart : d->m_selectionEnd,
6334 d->m_extendAtEnd ? d->m_startOffset : d->m_endOffset,
6335 nodeBeforeInit, d->m_extendMode == d->ExtendByLine);
6339 d->caretNode() = node;
6340 d->caretOffset() = offset;
6343 d->m_startBeforeEnd = RangeImpl::compareBoundaryPoints(
6344 d->m_selectionStart.handle(), d->m_startOffset,
6345 d->m_selectionEnd.handle(), d->m_endOffset) <= 0;
6347 if ( !d->m_selectionStart.isNull() && !d->m_selectionEnd.isNull() )
6350 if (d->m_extendMode != d->ExtendByChar && withinNode)
6351 extendSelection( node, offset, d->caretNode(), d->caretOffset(), d->m_startBeforeEnd ^ !d->m_extendAtEnd, d->m_extendMode == d->ExtendByLine );
6353 if (d->m_selectionEnd == d->m_selectionStart && d->m_endOffset < d->m_startOffset)
6355 ->setSelection(d->m_selectionStart.handle(),d->m_endOffset,
6356 d->m_selectionEnd.handle(),d->m_startOffset);
6357 else if (d->m_startBeforeEnd)
6359 ->setSelection(d->m_selectionStart.handle(),d->m_startOffset,
6360 d->m_selectionEnd.handle(),d->m_endOffset);
6363 ->setSelection(d->m_selectionEnd.handle(),d->m_endOffset,
6364 d->m_selectionStart.handle(),d->m_startOffset);
6366 #ifndef TDEHTML_NO_CARET 6367 d->m_view->placeCaret();
6371 bool TDEHTMLPart::isExtendingSelection()
const 6376 return d->m_bMousePressed;
6378 #endif // TDEHTML_NO_SELECTION 6382 TQMouseEvent *_mouse =
event->qmouseEvent();
6384 if( d->m_bRightMousePressed &&
parentPart() != 0 && d->m_bBackRightClick )
6387 d->m_strSelectedURL = d->m_strSelectedURLTarget = TQString();
6388 d->m_bRightMousePressed =
false;
6393 DOM::Node innerNode =
event->innerNode();
6395 #ifndef QT_NO_DRAGANDDROP 6396 if( d->m_bDnd && d->m_bMousePressed &&
6397 ( (!d->m_strSelectedURL.isEmpty() && !
isEditable())
6398 || (!d->m_mousePressNode.isNull() && d->m_mousePressNode.elementId() == ID_IMG) ) ) {
6403 HTMLImageElementImpl *img = 0L;
6404 TQDragObject *drag = 0;
6411 if ( url.length() == 0 && innerNode.handle() && innerNode.handle()->id() == ID_IMG )
6413 img =
static_cast<HTMLImageElementImpl *
>(innerNode.handle());
6414 u =
KURL(
completeURL( tdehtml::parseURL(img->getAttribute(ATTR_SRC)).
string() ) );
6427 if ( !d->m_referrer.isEmpty() )
6428 urlDrag->
metaData()[
"referrer"] = d->m_referrer;
6430 if( img && img->complete()) {
6432 mdrag->
addDragObject(
new TQImageDrag( img->currentImage(), 0L ) );
6439 if ( !pix.isNull() )
6440 drag->setPixmap( pix );
6447 d->m_bMousePressed =
false;
6448 d->m_strSelectedURL = d->m_strSelectedURLTarget = TQString();
6454 if ( !d->m_bMousePressed )
6459 bool shiftPressed = ( _mouse->state() & ShiftButton );
6462 if ( !innerNode.
isNull() && innerNode.elementId() == ID_IMG )
6464 HTMLImageElementImpl *i =
static_cast<HTMLImageElementImpl *
>(innerNode.handle());
6465 if ( i && i->isServerMap() )
6467 tdehtml::RenderObject *r = i->renderer();
6470 int absx, absy, vx, vy;
6471 r->absolutePosition(absx, absy);
6472 view()->contentsToViewport( absx, absy, vx, vy );
6474 int x(_mouse->x() - vx), y(_mouse->y() - vy);
6476 d->m_overURL = url.string() + TQString(
"?%1,%2").arg(x).arg(y);
6477 d->m_overURLTarget = target.string();
6478 overURL( d->m_overURL, target.string(), shiftPressed );
6485 if ( d->m_overURL.isEmpty() || d->m_overURL != url || d->m_overURLTarget != target )
6487 d->m_overURL = url.string();
6488 d->m_overURLTarget = target.string();
6489 overURL( d->m_overURL, target.string(), shiftPressed );
6499 #ifndef TDEHTML_NO_SELECTION 6501 if( d->m_bMousePressed && innerNode.handle() && innerNode.handle()->renderer() &&
6502 ( (_mouse->state() & Qt::LeftButton) != 0 )) {
6503 extendSelectionTo(event->x(),
event->y(),
6504 event->absX(),
event->absY(), innerNode);
6506 if ( d->m_doc && d->m_view ) {
6507 TQPoint diff( _mouse->globalPos() - d->m_dragLastPos );
6509 if ( abs( diff.x() ) > 64 || abs( diff.y() ) > 64 ) {
6510 d->m_view->scrollBy( -diff.x(), -diff.y() );
6511 d->m_dragLastPos = _mouse->globalPos();
6521 DOM::Node innerNode =
event->innerNode();
6524 if ( d->m_bMousePressed ) {
6525 setStatusBarText(TQString(), BarHoverText);
6531 d->m_bMousePressed =
false;
6533 TQMouseEvent *_mouse =
event->qmouseEvent();
6534 if ( _mouse->button() == Qt::RightButton &&
parentPart() != 0 && d->m_bBackRightClick )
6536 d->m_bRightMousePressed =
false;
6539 tmp_iface->
callMethod(
"goHistory(int)", -1 );
6542 #ifndef QT_NO_CLIPBOARD 6543 if ((d->m_guiProfile == BrowserViewGUI) && (_mouse->button() == Qt::MidButton) && (event->url().isNull())) {
6544 kdDebug( 6050 ) <<
"TDEHTMLPart::tdehtmlMouseReleaseEvent() MMB shouldOpen=" 6545 << d->m_bOpenMiddleClick <<
endl;
6547 if (d->m_bOpenMiddleClick) {
6550 p->d->m_extension->pasteRequest();
6555 #ifndef TDEHTML_NO_SELECTION 6557 if(d->m_selectionStart == d->m_selectionEnd && d->m_startOffset == d->m_endOffset) {
6558 #ifndef TDEHTML_NO_CARET 6559 d->m_extendAtEnd =
true;
6561 d->m_selectionStart = 0;
6562 d->m_selectionEnd = 0;
6563 d->m_startOffset = 0;
6566 emitSelectionChanged();
6571 d->m_startBeforeEnd =
false;
6572 if( d->m_selectionStart == d->m_selectionEnd ) {
6573 if( d->m_startOffset < d->m_endOffset )
6574 d->m_startBeforeEnd =
true;
6578 if(n == d->m_selectionEnd) {
6579 d->m_startBeforeEnd =
true;
6592 if (d->m_selectionStart.isNull() || d->m_selectionEnd.isNull() ||
6593 !d->m_selectionStart.handle()->renderer() ||
6594 !d->m_selectionEnd.handle()->renderer())
return;
6595 d->m_startBeforeEnd = RangeImpl::compareBoundaryPoints(
6596 d->m_selectionStart.handle(), d->m_startOffset,
6597 d->m_selectionEnd.handle(), d->m_endOffset) <= 0;
6600 if(!d->m_startBeforeEnd)
6602 DOM::Node tmpNode = d->m_selectionStart;
6603 int tmpOffset = d->m_startOffset;
6604 d->m_selectionStart = d->m_selectionEnd;
6605 d->m_startOffset = d->m_endOffset;
6606 d->m_selectionEnd = tmpNode;
6607 d->m_endOffset = tmpOffset;
6608 d->m_startBeforeEnd =
true;
6609 d->m_extendAtEnd = !d->m_extendAtEnd;
6611 #ifndef TDEHTML_NO_CARET 6612 bool v = d->m_view->placeCaret();
6613 emitCaretPositionChanged(v ? d->caretNode() : 0, d->caretOffset());
6616 #ifndef QT_NO_CLIPBOARD 6618 text.replace(TQChar(0xa0),
' ');
6619 disconnect( kapp->clipboard(), TQT_SIGNAL(
selectionChanged()),
this, TQT_SLOT( slotClearSelection()));
6620 kapp->clipboard()->setText(text,TQClipboard::Selection);
6621 connect( kapp->clipboard(), TQT_SIGNAL(
selectionChanged()), TQT_SLOT( slotClearSelection()));
6624 emitSelectionChanged();
6628 d->m_initialNode = 0;
6629 d->m_initialOffset = 0;
6639 if ( event->activated() )
6641 emitSelectionChanged();
6642 emit d->m_extension->enableAction(
"print", d->m_doc != 0 );
6644 if ( !d->m_settings->autoLoadImages() && d->m_paLoadImages )
6646 TQPtrList<TDEAction> lst;
6647 lst.append( d->m_paLoadImages );
6653 void TDEHTMLPart::slotPrintFrame()
6655 if ( d->m_frames.count() == 0 )
6667 TQMetaObject *mo = ext->metaObject();
6669 int idx = mo->findSlot(
"print()",
true );
6672 ext->tqt_invoke( idx, o );
6676 void TDEHTMLPart::slotSelectAll()
6679 if (part && part->inherits(
"TDEHTMLPart"))
6680 static_cast<TDEHTMLPart *>(part)->selectAll();
6683 void TDEHTMLPart::startAutoScroll()
6685 connect(&d->m_scrollTimer, TQT_SIGNAL( timeout() ),
this, TQT_SLOT( slotAutoScroll() ));
6686 d->m_scrollTimer.start(100,
false);
6689 void TDEHTMLPart::stopAutoScroll()
6691 disconnect(&d->m_scrollTimer, TQT_SIGNAL( timeout() ),
this, TQT_SLOT( slotAutoScroll() ));
6692 if (d->m_scrollTimer.isActive())
6693 d->m_scrollTimer.stop();
6697 void TDEHTMLPart::slotAutoScroll()
6700 d->m_view->doAutoScroll();
6705 void TDEHTMLPart::runAdFilter()
6713 TQPtrDictIterator<tdehtml::CachedObject> it( d->m_doc->docLoader()->m_docObjects );
6714 for ( ; it.current(); ++it )
6715 if ( it.current()->type() == tdehtml::CachedObject::Image ) {
6716 tdehtml::CachedImage *image =
static_cast<tdehtml::CachedImage *
>(it.current());
6717 bool wasBlocked = image->m_wasBlocked;
6718 image->m_wasBlocked = TDEHTMLFactory::defaultHTMLSettings()->isAdFiltered( d->m_doc->completeURL( (*it).url().string() ) );
6719 if ( image->m_wasBlocked != wasBlocked )
6720 image->do_notify(image->pixmap(), image->valid_rect());
6723 if ( TDEHTMLFactory::defaultHTMLSettings()->isHideAdsEnabled() ) {
6724 for ( NodeImpl *nextNode, *node = d->m_doc; node; node = nextNode ) {
6727 nextNode = node->traverseNextNode();
6729 if ( node->id() == ID_IMG ||
6730 node->id() == ID_IFRAME ||
6731 (node->id() == ID_INPUT &&
static_cast<HTMLInputElementImpl *
>(node)->inputType() == HTMLInputElementImpl::IMAGE ))
6733 if ( TDEHTMLFactory::defaultHTMLSettings()->isAdFiltered( d->m_doc->completeURL( static_cast<ElementImpl *>(node)->getAttribute(ATTR_SRC).string() ) ) )
6737 NodeImpl *parent = node->parent();
6741 parent->removeChild(node, exception);
6752 if (!d->m_doc)
return;
6755 if (d->m_doc->isHTMLDocument())
6756 first = static_cast<HTMLDocumentImpl*>(d->m_doc)->body();
6763 while ( first && !(first->renderer()
6764 && ((first->nodeType() == Node::TEXT_NODE || first->nodeType() == Node::CDATA_SECTION_NODE)
6765 || (first->renderer()->isReplaced() && !first->renderer()->firstChild()))))
6767 next = first->firstChild();
6768 if ( !next ) next = first->nextSibling();
6769 while( first && !next )
6771 first = first->parentNode();
6773 next = first->nextSibling();
6779 if (d->m_doc->isHTMLDocument())
6780 last = static_cast<HTMLDocumentImpl*>(d->m_doc)->body();
6787 while ( last && !(last->renderer()
6788 && ((last->nodeType() == Node::TEXT_NODE || last->nodeType() == Node::CDATA_SECTION_NODE)
6789 || (last->renderer()->isReplaced() && !last->renderer()->lastChild()))))
6791 next = last->lastChild();
6792 if ( !next ) next = last->previousSibling();
6793 while ( last && !next )
6795 last = last->parentNode();
6797 next = last->previousSibling();
6802 if ( !first || !last )
6804 Q_ASSERT(first->renderer());
6805 Q_ASSERT(last->renderer());
6806 d->m_selectionStart = first;
6807 d->m_startOffset = 0;
6808 d->m_selectionEnd = last;
6809 d->m_endOffset = last->nodeValue().length();
6810 d->m_startBeforeEnd =
true;
6812 d->m_doc->setSelection( d->m_selectionStart.handle(), d->m_startOffset,
6813 d->m_selectionEnd.handle(), d->m_endOffset );
6815 emitSelectionChanged();
6818 bool TDEHTMLPart::checkLinkSecurity(
const KURL &linkURL,
const TQString &message,
const TQString &button)
6820 bool linkAllowed =
true;
6823 linkAllowed = kapp && kapp->authorizeURLAction(
"redirect",
url(), linkURL);
6825 if ( !linkAllowed ) {
6826 tdehtml::Tokenizer *tokenizer = d->m_doc->tokenizer();
6828 tokenizer->setOnHold(
true);
6830 int response = KMessageBox::Cancel;
6831 if (!message.isEmpty())
6834 message.arg(linkURL.
htmlURL()),
6835 i18n(
"Security Warning" ),
6841 i18n(
"<qt>Access by untrusted page to<BR><B>%1</B><BR> denied.").arg(linkURL.
htmlURL()),
6842 i18n(
"Security Alert" ));
6846 tokenizer->setOnHold(
false);
6847 return (response==KMessageBox::Continue);
6852 void TDEHTMLPart::slotPartRemoved(
KParts::Part *part )
6855 if ( part == d->m_activeFrame )
6857 d->m_activeFrame = 0L;
6858 if ( !part->inherits(
"TDEHTMLPart" ) )
6870 void TDEHTMLPart::slotActiveFrameChanged(
KParts::Part *part )
6875 kdError(6050) <<
"strange error! we activated ourselves" <<
endl;
6880 if ( d->m_activeFrame && d->m_activeFrame->widget() && d->m_activeFrame->widget()->inherits( TQFRAME_OBJECT_NAME_STRING ) )
6882 TQFrame *frame =
static_cast<TQFrame *
>( d->m_activeFrame->widget() );
6883 if (frame->frameStyle() != TQFrame::NoFrame)
6885 frame->setFrameStyle( TQFrame::StyledPanel | TQFrame::Sunken);
6890 if( d->m_activeFrame && !d->m_activeFrame->inherits(
"TDEHTMLPart" ) )
6897 if( part && !part->inherits(
"TDEHTMLPart" ) )
6906 d->m_activeFrame = part;
6908 if ( d->m_activeFrame && d->m_activeFrame->widget()->inherits( TQFRAME_OBJECT_NAME_STRING ) )
6910 TQFrame *frame =
static_cast<TQFrame *
>( d->m_activeFrame->widget() );
6911 if (frame->frameStyle() != TQFrame::NoFrame)
6913 frame->setFrameStyle( TQFrame::StyledPanel | TQFrame::Plain);
6916 kdDebug(6050) <<
"new active frame " << d->m_activeFrame <<
endl;
6927 if (!d->m_doc || !d->m_view)
6931 d->m_doc->setFocusNode(node.handle());
6934 TQRect rect = node.handle()->getRect();
6935 d->m_view->ensureVisible(rect.right(), rect.bottom());
6936 d->m_view->ensureVisible(rect.left(), rect.top());
6941 return DOM::Node(d->m_doc?d->m_doc->focusNode():0);
6944 DOM::EventListener *TDEHTMLPart::createHTMLEventListener( TQString code, TQString name, NodeImpl* node )
6946 KJSProxy *proxy = jScript();
6951 return proxy->createHTMLEventHandler(
m_url.
url(), name, code, node );
6961 d->m_opener = _opener;
6964 bool TDEHTMLPart::openedByJS()
6966 return d->m_openedByJS;
6969 void TDEHTMLPart::setOpenedByJS(
bool _openedByJS)
6971 d->m_openedByJS = _openedByJS;
6976 tdehtml::Cache::preloadStyleSheet(url, stylesheet);
6981 tdehtml::Cache::preloadScript(url, script);
6984 TQCString TDEHTMLPart::dcopObjectId()
const 6987 id.sprintf(
"html-widget%d", d->m_dcop_counter);
6991 long TDEHTMLPart::cacheId()
const 6993 return d->m_cacheId;
6996 bool TDEHTMLPart::restored()
const 6998 return d->m_restored;
7001 bool TDEHTMLPart::pluginPageQuestionAsked(
const TQString& mimetype)
const 7006 return parent->pluginPageQuestionAsked(mimetype);
7008 return d->m_pluginPageQuestionAsked.contains(mimetype);
7011 void TDEHTMLPart::setPluginPageQuestionAsked(
const TQString& mimetype)
7014 parentPart()->setPluginPageQuestionAsked(mimetype);
7016 d->m_pluginPageQuestionAsked.append(mimetype);
7019 void TDEHTMLPart::slotAutomaticDetectionLanguage(
int _id )
7021 d->m_automaticDetection->setItemChecked( _id,
true );
7025 d->m_autoDetectLanguage = tdehtml::Decoder::SemiautomaticDetection;
7028 d->m_autoDetectLanguage = tdehtml::Decoder::Arabic;
7031 d->m_autoDetectLanguage = tdehtml::Decoder::Baltic;
7034 d->m_autoDetectLanguage = tdehtml::Decoder::CentralEuropean;
7037 d->m_autoDetectLanguage = tdehtml::Decoder::Chinese;
7040 d->m_autoDetectLanguage = tdehtml::Decoder::Greek;
7043 d->m_autoDetectLanguage = tdehtml::Decoder::Hebrew;
7046 d->m_autoDetectLanguage = tdehtml::Decoder::Japanese;
7049 d->m_autoDetectLanguage = tdehtml::Decoder::Korean;
7052 d->m_autoDetectLanguage = tdehtml::Decoder::Russian;
7055 d->m_autoDetectLanguage = tdehtml::Decoder::Thai;
7058 d->m_autoDetectLanguage = tdehtml::Decoder::Turkish;
7061 d->m_autoDetectLanguage = tdehtml::Decoder::Ukrainian;
7064 d->m_autoDetectLanguage = tdehtml::Decoder::Unicode;
7067 d->m_autoDetectLanguage = tdehtml::Decoder::WesternEuropean;
7070 d->m_autoDetectLanguage = tdehtml::Decoder::SemiautomaticDetection;
7074 for (
int i = 0; i <= 14; ++i ) {
7076 d->m_automaticDetection->setItemChecked( i,
false );
7079 d->m_paSetEncoding->popupMenu()->setItemChecked( 0,
true );
7083 if( d->m_manualDetection )
7084 d->m_manualDetection->setCurrentItem( -1 );
7085 d->m_paSetEncoding->popupMenu()->setItemChecked( d->m_paSetEncoding->popupMenu()->idAt( 2 ), false );
7088 tdehtml::Decoder *TDEHTMLPart::createDecoder()
7090 tdehtml::Decoder *dec =
new tdehtml::Decoder();
7091 if( !d->m_encoding.isNull() )
7092 dec->setEncoding( d->m_encoding.latin1(),
7093 d->m_haveEncoding ? tdehtml::Decoder::UserChosenEncoding : tdehtml::Decoder::EncodingFromHTTPHeader);
7097 ?
parentPart()->d->m_decoder->encoding() : settings()->encoding().latin1();
7098 dec->setEncoding(defaultEncoding, tdehtml::Decoder::DefaultEncoding);
7100 #ifdef APPLE_CHANGES 7102 d->m_doc->setDecoder(d->m_decoder);
7104 dec->setAutoDetectLanguage( d->m_autoDetectLanguage );
7108 void TDEHTMLPart::emitCaretPositionChanged(
const DOM::Node &node,
long offset) {
7112 void TDEHTMLPart::restoreScrollPosition()
7117 if ( !d->m_doc || !d->m_doc->parsing() )
7118 disconnect(d->m_view, TQT_SIGNAL(finishedLayout()),
this, TQT_SLOT(restoreScrollPosition()));
7128 if (d->m_view->contentsHeight() - d->m_view->visibleHeight() >= args.
yOffset 7129 || d->m_bComplete) {
7131 disconnect(d->m_view, TQT_SIGNAL(finishedLayout()),
this, TQT_SLOT(restoreScrollPosition()));
7136 void TDEHTMLPart::openWallet(DOM::HTMLFormElementImpl *form)
7138 #ifndef TDEHTML_NO_WALLET 7145 p->openWallet(form);
7154 if (d->m_bWalletOpened) {
7155 if (d->m_wallet->isOpen()) {
7156 form->walletOpened(d->m_wallet);
7159 d->m_wallet->deleteLater();
7161 d->m_bWalletOpened =
false;
7166 TDEWallet::Wallet *wallet = TDEWallet::Wallet::openWallet(TDEWallet::Wallet::NetworkWallet(),
widget() ?
widget()->topLevelWidget()->winId() : 0, TDEWallet::Wallet::Asynchronous);
7167 d->m_wq =
new TDEHTMLWalletQueue(
this);
7168 d->m_wq->wallet = wallet;
7169 connect(wallet, TQT_SIGNAL(walletOpened(
bool)), d->m_wq, TQT_SLOT(walletOpened(
bool)));
7170 connect(d->m_wq, TQT_SIGNAL(walletOpened(TDEWallet::Wallet*)),
this, TQT_SLOT(walletOpened(TDEWallet::Wallet*)));
7173 d->m_wq->callers.append(TDEHTMLWalletQueue::Caller(form, form->getDocument()));
7174 #endif // TDEHTML_NO_WALLET 7178 void TDEHTMLPart::saveToWallet(
const TQString& key,
const TQMap<TQString,TQString>& data)
7180 #ifndef TDEHTML_NO_WALLET 7187 p->saveToWallet(key, data);
7192 if (d->m_bWalletOpened) {
7193 if (d->m_wallet->isOpen()) {
7194 if (!d->m_wallet->hasFolder(TDEWallet::Wallet::FormDataFolder())) {
7195 d->m_wallet->createFolder(TDEWallet::Wallet::FormDataFolder());
7197 d->m_wallet->setFolder(TDEWallet::Wallet::FormDataFolder());
7198 d->m_wallet->writeMap(key, data);
7201 d->m_wallet->deleteLater();
7203 d->m_bWalletOpened =
false;
7208 TDEWallet::Wallet *wallet = TDEWallet::Wallet::openWallet(TDEWallet::Wallet::NetworkWallet(),
widget() ?
widget()->topLevelWidget()->winId() : 0, TDEWallet::Wallet::Asynchronous);
7209 d->m_wq =
new TDEHTMLWalletQueue(
this);
7210 d->m_wq->wallet = wallet;
7211 connect(wallet, TQT_SIGNAL(walletOpened(
bool)), d->m_wq, TQT_SLOT(walletOpened(
bool)));
7212 connect(d->m_wq, TQT_SIGNAL(walletOpened(TDEWallet::Wallet*)),
this, TQT_SLOT(walletOpened(TDEWallet::Wallet*)));
7214 d->m_wq->savers.append(qMakePair(key, data));
7215 #endif // TDEHTML_NO_WALLET 7219 void TDEHTMLPart::dequeueWallet(DOM::HTMLFormElementImpl *form) {
7220 #ifndef TDEHTML_NO_WALLET 7227 p->dequeueWallet(form);
7232 d->m_wq->callers.remove(TDEHTMLWalletQueue::Caller(form, form->getDocument()));
7234 #endif // TDEHTML_NO_WALLET 7238 void TDEHTMLPart::walletOpened(TDEWallet::Wallet *wallet) {
7239 #ifndef TDEHTML_NO_WALLET 7240 assert(!d->m_wallet);
7243 d->m_wq->deleteLater();
7247 d->m_bWalletOpened =
false;
7251 d->m_wallet = wallet;
7252 d->m_bWalletOpened =
true;
7253 connect(d->m_wallet, TQT_SIGNAL(walletClosed()), TQT_SLOT(slotWalletClosed()));
7255 if (!d->m_statusBarWalletLabel) {
7256 d->m_statusBarWalletLabel =
new KURLLabel(d->m_statusBarExtension->statusBar());
7258 d->m_statusBarWalletLabel->
setSizePolicy(TQSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed));
7259 d->m_statusBarWalletLabel->setUseCursor(
false);
7260 d->m_statusBarExtension->addStatusBarItem(d->m_statusBarWalletLabel, 0,
false);
7261 d->m_statusBarWalletLabel->setPixmap(SmallIcon(
"wallet_open",
instance()));
7262 connect(d->m_statusBarWalletLabel, TQT_SIGNAL(leftClickedURL()), TQT_SLOT(launchWalletManager()));
7263 connect(d->m_statusBarWalletLabel, TQT_SIGNAL(rightClickedURL()), TQT_SLOT(walletMenu()));
7265 TQToolTip::remove(d->m_statusBarWalletLabel);
7267 TQToolTip::add(d->m_statusBarWalletLabel, i18n(
"The wallet '%1' is open and being used for form data and passwords.").arg(TDEWallet::Wallet::NetworkWallet()));
7268 #endif // TDEHTML_NO_WALLET 7272 TDEWallet::Wallet *TDEHTMLPart::wallet()
7274 #ifndef TDEHTML_NO_WALLET 7283 #endif // TDEHTML_NO_WALLET 7288 void TDEHTMLPart::slotWalletClosed()
7290 #ifndef TDEHTML_NO_WALLET 7292 d->m_wallet->deleteLater();
7295 d->m_bWalletOpened =
false;
7296 if (d->m_statusBarWalletLabel) {
7297 d->m_statusBarExtension->removeStatusBarItem(d->m_statusBarWalletLabel);
7298 delete d->m_statusBarWalletLabel;
7299 d->m_statusBarWalletLabel = 0L;
7301 #endif // TDEHTML_NO_WALLET 7304 void TDEHTMLPart::launchWalletManager()
7306 #ifndef TDEHTML_NO_WALLET 7307 if (!DCOPClient::mainClient()->isApplicationRegistered(
"tdewalletmanager")) {
7310 DCOPRef r(
"tdewalletmanager",
"tdewalletmanager-mainwindow#1");
7314 #endif // TDEHTML_NO_WALLET 7317 void TDEHTMLPart::walletMenu()
7319 #ifndef TDEHTML_NO_WALLET 7321 m->insertItem(i18n(
"&Close Wallet"),
this, TQT_SLOT(slotWalletClosed()));
7322 m->popup(TQCursor::pos());
7323 #endif // TDEHTML_NO_WALLET 7326 void TDEHTMLPart::slotToggleCaretMode()
7332 d->m_formNotification = fn;
7336 return d->m_formNotification;
7356 return d->m_doc->unsubmittedFormChanges();
7359 void TDEHTMLPart::setDebugScript(
bool enable )
7363 if (!d->m_paDebugScript) {
7364 d->m_paDebugScript =
new TDEAction( i18n(
"JavaScript &Debugger" ), 0,
this, TQT_SLOT( slotDebugScript() ),
actionCollection(),
"debugScript" );
7366 d->m_paDebugScript->setEnabled( d->m_frame ? d->m_frame->m_jscript : 0L );
7367 TQPtrList<TDEAction> lst;
7368 lst.append( d->m_paDebugScript );
7371 d->m_bJScriptDebugEnabled = enable;
7386 if ( enable && originPart ) {
7387 d->m_openableSuppressedPopups++;
7388 if ( d->m_suppressedPopupOriginParts.findIndex( originPart ) == -1 )
7389 d->m_suppressedPopupOriginParts.append( originPart );
7392 if ( enable && !d->m_statusBarPopupLabel ) {
7393 d->m_statusBarPopupLabel =
new KURLLabel( d->m_statusBarExtension->statusBar() );
7395 d->m_statusBarPopupLabel->
setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ));
7396 d->m_statusBarPopupLabel->setUseCursor(
false );
7397 d->m_statusBarExtension->addStatusBarItem( d->m_statusBarPopupLabel, 0,
false );
7398 d->m_statusBarPopupLabel->setPixmap( SmallIcon(
"window_suppressed",
instance() ) );
7399 TQToolTip::add( d->m_statusBarPopupLabel, i18n(
"This page was prevented from opening a new window via JavaScript." ) );
7401 connect(d->m_statusBarPopupLabel, TQT_SIGNAL(leftClickedURL()), TQT_SLOT(suppressedPopupMenu()));
7402 if (d->m_settings->jsPopupBlockerPassivePopup()) {
7404 px = MainBarIcon(
"window_suppressed" );
7405 KPassivePopup::message(i18n(
"Popup Window Blocked"),i18n(
"This page has attempted to open a popup window but was blocked.\nYou can click on this icon in the status bar to control this behavior\nor to open the popup."),px,d->m_statusBarPopupLabel);
7407 }
else if ( !enable && d->m_statusBarPopupLabel ) {
7408 TQToolTip::remove( d->m_statusBarPopupLabel );
7409 d->m_statusBarExtension->removeStatusBarItem( d->m_statusBarPopupLabel );
7410 delete d->m_statusBarPopupLabel;
7411 d->m_statusBarPopupLabel = 0L;
7415 void TDEHTMLPart::suppressedPopupMenu() {
7417 m->setCheckable(
true);
7418 if ( d->m_openableSuppressedPopups )
7419 m->insertItem(i18n(
"&Show Blocked Popup Window",
"Show %n Blocked Popup Windows", d->m_openableSuppressedPopups),
this, TQT_SLOT(showSuppressedPopups()));
7420 m->insertItem(i18n(
"Show Blocked Window Passive Popup &Notification"),
this, TQT_SLOT(togglePopupPassivePopup()),0,57);
7421 m->setItemChecked(57,d->m_settings->jsPopupBlockerPassivePopup());
7422 m->insertItem(i18n(
"&Configure JavaScript New Window Policies..."),
this, TQT_SLOT(launchJSConfigDialog()));
7423 m->popup(TQCursor::pos());
7426 void TDEHTMLPart::togglePopupPassivePopup() {
7428 d->m_settings->setJSPopupBlockerPassivePopup( !d->m_settings->jsPopupBlockerPassivePopup() );
7429 DCOPClient::mainClient()->send(
"konqueror*",
"KonquerorIface",
"reparseConfiguration()", TQByteArray());
7432 void TDEHTMLPart::showSuppressedPopups() {
7433 for ( TQValueListIterator<TQGuardedPtr<TDEHTMLPart> > i = d->m_suppressedPopupOriginParts.begin();
7434 i != d->m_suppressedPopupOriginParts.end(); ++i ) {
7436 KJS::Window *w = KJS::Window::retrieveWindow( part );
7438 w->showSuppressedWindows();
7439 w->forgetSuppressedWindows();
7444 d->m_openableSuppressedPopups = 0;
7445 d->m_suppressedPopupOriginParts.clear();
7450 TQString TDEHTMLPart::defaultExtension()
const 7454 if ( !d->m_doc->isHTMLDocument() )
7456 return d->m_doc->htmlMode() == DOM::DocumentImpl::XHtml ?
".xhtml" :
".html";
7459 bool TDEHTMLPart::inProgress()
const 7461 if (d->m_runningScripts || (d->m_doc && d->m_doc->parsing()))
7465 ConstFrameIt it = d->m_frames.begin();
7466 const ConstFrameIt
end = d->m_frames.end();
7467 for (; it !=
end; ++it ) {
7468 if ((*it)->m_run || !(*it)->m_bCompleted)
7472 return d->m_submitForm || !d->m_redirectURL.isEmpty() || d->m_redirectionTimer.isActive() || d->m_job;
7476 #include "tdehtml_part.moc" 7477 #include "tdehtmlpart_p.moc" void setQuery(const TQString &_txt, int encoding_hint=0)
DCOP interface for TDEHTML.
TDEAction * findPrev(const TQObject *recvr, const char *slot, TDEActionCollection *parent, const char *name=0)
virtual KParts::ReadOnlyPart * createPart(TQWidget *parentWidget, const char *widgetName, TQObject *parent, const char *name, const TQString &mimetype, TQString &serviceName, TQStringList &serviceTypes, const TQStringList ¶ms)
This method is called when a new embedded object (include html frames) is to be created.
void show()
Convenience method to show the document's view.
static void error(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, int options=Notify)
static BrowserExtension * childObject(TQObject *obj)
static TQString rsqueeze(const TQString &str, uint maxlen=40)
void setRef(const TQString &_txt)
bool metaRefreshEnabled() const
Returns true if automatic forwarding is enabled.
CaretDisplayPolicy caretDisplayPolicyNonFocused() const
Returns the current caret policy when the view is not focused.
void setStatusMessagesEnabled(bool enable)
Enable/disable statusbar messages.
virtual void setXMLFile(const TQString &file, bool merge=false, bool setXMLDoc=true)
KURL completeURL(const TQString &url)
returns a KURL object for the given url.
void setCaretPosition(DOM::Node node, long offset, bool extendSelection=false)
Sets the caret to the given position.
TQString queryItem(const TQString &item) const
int zoomFactor() const
Returns the current zoom factor.
void setSuppressedPopupIndicator(bool enable)
Shows or hides the suppressed popup indicator.
The Node interface is the primary datatype for the entire Document Object Model.
static StatusBarExtension * childObject(TQObject *obj)
bool readBoolEntry(const TQString &pKey, bool bDefault=false) const
virtual Part * activePart() const
An HTMLDocument is the root of the HTML hierarchy and holds the entire content.
void saveData(long id, TQDataStream *str)
Save the data of cache entry id to the datastream str.
KParts::ReadOnlyPart * currentFrame() const
Return the current frame (the one that has focus) Not necessarily a direct child of ours...
virtual bool doOpenStream(const TQString &mimeType)
Implements the streaming API of KParts::ReadOnlyPart.
TQString url(int _trailing=0, int encoding_hint=0) const
Settings for the HTML view.
static TQString csqueeze(const TQString &str, uint maxlen=40)
bool nextAnchor()
Go to the next anchor.
void removeClient(KXMLGUIClient *client)
bool statusMessagesEnabled() const
Returns true if status messages are enabled.
TQDataStream * dataStream()
void removeChildClient(KXMLGUIClient *child)
void onURL(const TQString &url)
Emitted if the cursor is moved over an URL.
void started(TDEIO::Job *)
TQString documentSource() const
Returns the content of the source document.
void setGroup(const TQString &group)
void selectionChanged()
This signal is emitted when the selection changes.
TQString protocol() const
DOM::Range selection() const
Returns the selected part of the HTML.
void addClient(KXMLGUIClient *client)
static bool showIconsOnPushButtons()
kdbgstream kdError(int area=0)
void setZoomFactor(int percent)
Sets the Zoom factor.
virtual void removePart(Part *part)
void callMethod(const char *name, const TQVariant &argument)
FormNotification formNotification() const
Determine if signal should be emitted before, instead or never when a submitForm() happens...
static bool avoidArea(TQWidget *widget, const TQRect &area, int screen=-1)
static int dndEventDelay()
void stopAnimations()
Stops all animated images on the current and child pages.
TDEAction * findNext(const TQObject *recvr, const char *slot, TDEActionCollection *parent, const char *name=0)
const TQPtrList< KXMLGUIClient > * childClients()
bool javaEnabled() const
Return true if Java applet support is enabled, false if disabled.
virtual void restoreState(TQDataStream &stream)
Restores the TDEHTMLPart's previously saved state (including child frame objects) from the provided T...
void findTextBegin()
Initiates a text search.
virtual void tdehtmlDrawContentsEvent(tdehtml::DrawContentsEvent *)
Eventhandler for the tdehtml::DrawContentsEvent.
virtual TDEActionCollection * actionCollection() const
static AskSaveResult askEmbedOrSave(const KURL &url, const TQString &mimeType, const TQString &suggestedFilename=TQString::null, int flags=0)
virtual TQWidget * widget()
TQStringList descriptiveEncodingNames()
TQString lastModified() const
Last-modified date (in raw string format), if received in the [HTTP] headers.
virtual bool openFile()
Internal empty reimplementation of KParts::ReadOnlyPart::openFile .
TDEHTMLPart * findFrame(const TQString &f)
Finds a frame by name.
kdbgstream kdDebug(int area=0)
void setCaretDisplayPolicyNonFocused(CaretDisplayPolicy policy)
Sets the caret display policy when the view is not focused.
DOM::Node nonSharedNodeUnderMouse() const
Returns the Node currently under the mouse that is not shared.
void setDoPost(bool enable)
virtual void begin(const KURL &url=KURL(), int xOffset=0, int yOffset=0)
Clears the widget and prepares it for new content.
void scheduleRedirection(int delay, const TQString &url, bool lockHistory=true)
Schedules a redirection after delay seconds.
void setContentType(const TQString &contentType)
void formSubmitNotification(const char *action, const TQString &url, const TQByteArray &formData, const TQString &target, const TQString &contentType, const TQString &boundary)
If form notification is on, this will be emitted either for a form submit or before the form submit a...
DOM::Document document() const
Returns a reference to the DOM document.
void setFixedFont(const TQString &name)
Sets the fixed font style.
void endData(long id)
Signal end of data for the cache entry with id id.
Range createRange()
Introduced in DOM Level 2 This method is from the DocumentRange interface.
TQCursor urlCursor() const
Returns the cursor which is used when the cursor is on a link.
void setUser(const TQString &_txt)
static List split(const TQString &_url)
static int tdeinitExec(const TQString &name, const TQStringList &args, TQString *error, int *pid, const TQCString &startup_id)
bool setEncoding(const TQString &name, bool override=false)
Sets the encoding the page uses.
void preloadStyleSheet(const TQString &url, const TQString &stylesheet)
Loads a style sheet into the stylesheet cache.
void caretPositionChanged(const DOM::Node &node, long offset)
This signal is emitted whenever the caret position has been changed.
long createCacheEntry()
Create a new cache entry.
void removeCatalogue(const TQString &catalog)
static int startServiceByDesktopName(const TQString &_name, const TQString &URL, TQString *error=0, TQCString *dcopService=0, int *pid=0, const TQCString &startup_id="", bool noWait=false)
virtual void guiActivateEvent(KParts::GUIActivateEvent *event)
Internal reimplementation of KParts::Part::guiActivateEvent .
virtual void setWidget(TQWidget *widget)
void setJScriptEnabled(bool enable)
Enable/disable Javascript support.
TQObject * create(TQObject *parent=0, const char *name=0, const char *classname=TQOBJECT_OBJECT_NAME_STRING, const TQStringList &args=TQStringList())
void setJavaEnabled(bool enable)
Enables/disables Java applet support.
void setSelection(const DOM::Range &)
Sets the current selection.
void cancelFetch(TQObject *recvObj)
Cancel sending data to recvObj.
virtual bool doWriteStream(const TQByteArray &data)
Implements the streaming API of KParts::ReadOnlyPart.
void setUserStyleSheet(const KURL &url)
Sets a user defined style sheet to be used on top of the HTML 4 default style sheet.
void * symbol(const char *name) const
static TDEHTMLPageCache * self()
static "constructor".
TQString jsDefaultStatusBarText() const
Called by KJS.
virtual void setSizePolicy(TQSizePolicy)
bool isCaretMode() const
Returns whether caret mode is on/off.
virtual ~TDEHTMLPart()
Destructor.
void unplugActionList(const TQString &name)
void setFileName(const TQString &_txt)
bool onlyLocalReferences() const
Returns whether only file:/ or data:/ references are allowed to be loaded ( default false )...
void setPass(const TQString &_txt)
virtual void tdehtmlMousePressEvent(tdehtml::MousePressEvent *event)
Eventhandler of the tdehtml::MousePressEvent.
TDEAction * saveAs(const TQObject *recvr, const char *slot, TDEActionCollection *parent, const char *name=0)
const TDEShortcut & end()
void findText()
Starts a new search by popping up a dialog asking the user what he wants to search for...
void setURLCursor(const TQCursor &c)
Sets the cursor to use when the cursor is on a link.
void setOnlyLocalReferences(bool enable)
Security option.
void setForcesNewWindow(bool forcesNewWindow)
void writeEntry(const TQString &pKey, const TQString &pValue, bool bPersistent=true, bool bGlobal=false, bool bNLS=false)
TQString jsStatusBarText() const
Called by KJS.
TQString referrer() const
Referrer used for links in this page.
bool hasSelection() const
Has the user selected anything?
TQString pageReferrer() const
Referrer used to obtain this page.
void setLockHistory(bool lock)
bool prevAnchor()
Go to previous anchor.
virtual void showError(TDEIO::Job *job)
Called when a certain error situation (i.e.
virtual bool doCloseStream()
Implements the streaming API of KParts::ReadOnlyPart.
kdbgstream kdWarning(int area=0)
static KCharsets * charsets()
void htmlError(int errorCode, const TQString &text, const KURL &reqUrl)
presents a detailed error message to the user.
void setPath(const TQString &path)
static void information(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, const TQString &dontShowAgainName=TQString::null, int options=Notify)
void init()
Called by constructor and reparseConfiguration.
bool isEditable() const
Returns true if the document is editable, false otherwise.
Node parentNode() const
The parent of this node.
This class implements the basic string we use in the DOM.
void setEditable(bool enable)
Makes the document editable.
The Document interface represents the entire HTML or XML document.
void setCaretVisible(bool show)
Sets the visibility of the caret.
virtual bool closeURL()
Stops loading the document and kills all data requests (for images, etc.)
TDEHTMLPart * findFrameParent(KParts::ReadOnlyPart *callingPart, const TQString &f, tdehtml::ChildFrame **childFrame=0)
Recursively finds the part containing the frame with name f and checks if it is accessible by calling...
KURL backgroundURL() const
Returns the URL for the background Image (used by save background)
DOMString nodeName() const
The name of this node, depending on its type; see the table above.
bool pluginsEnabled() const
Returns true if plugins are enabled/disabled.
void paint(TQPainter *, const TQRect &, int=0, bool *=0)
Paints the HTML page to a TQPainter.
virtual TDEInstance * instance() const
TQString prettyURL(int _trailing=0) const
KJS::Interpreter * jScriptInterpreter()
Returns the JavaScript interpreter the part is using.
NamedNodeMap attributes() const
A NamedNodeMap containing the attributes of this node (if it is an Element ) or null otherwise...
void setAutoloadImages(bool enable)
Specifies whether images contained in the document should be loaded automatically or not...
TQString encodingForName(const TQString &descriptiveName)
void setCaretMode(bool enable)
Enables/disables caret mode.
bool dndEnabled() const
Returns whether Dragn'n'Drop support is enabled or not.
Node getNamedItem(const DOMString &name) const
Retrieves a node specified by name.
void setFormNotification(FormNotification fn)
Determine if signal should be emitted before, instead or never when a submitForm() happens...
TQString fileName(bool _ignore_trailing_slash_in_path=true) const
static int warningContinueCancel(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, const KGuiItem &buttonContinue=KStdGuiItem::cont(), const TQString &dontAskAgainName=TQString::null, int options=Notify)
KParts::BrowserExtension * browserExtension() const
Returns a pointer to the KParts::BrowserExtension.
virtual KLibrary * library(const char *libname)
KXMLGUIFactory * factory() const
const char * encoding() const
void fetchData(long id, TQObject *recvObj, const char *recvSlot)
Fetch data for cache entry id and send it to slot recvSlot in the object recvObj. ...
virtual bool openURL(const KURL &url)
Opens the specified URL url.
void hide()
Convenience method to hide the document's view.
TQString encodedHtmlRef() const
virtual void tdehtmlMouseMoveEvent(tdehtml::MouseMoveEvent *event)
Eventhandler for the tdehtml::MouseMouseMoveEvent.
KURL toplevelURL()
Returns the toplevel (origin) URL of this document, even if this part is a frame or an iframe...
virtual void addPart(Part *part, bool setActive=true)
void setNewTab(bool newTab)
static TQString encode_string(const TQString &str, int encoding_hint=0)
virtual void end()
Call this after your last call to write().
Introduced in DOM Level 2.
The Document Object Model (DOM) is divided into two parts, the COREDOM core DOM, specifying some core...
static KLibLoader * self()
TQMap< TQString, TQString > & metaData()
DOMString domain() const
The domain name of the server that served the document, or a null string if the server cannot be iden...
bool autoloadImages() const
Returns whether images contained in the document are loaded automatically or not. ...
TQVariant executeScript(const DOM::Node &n, const TQString &script)
Same as executeScript( const TQString & ) except with the Node parameter specifying the 'this' value...
void setJSDefaultStatusBarText(const TQString &text)
Called by KJS.
bool jScriptEnabled() const
Returns true if Javascript support is enabled or false otherwise.
static TDELocale * locale()
void preloadScript(const TQString &url, const TQString &script)
Loads a script into the script cache.
DOM::Node nodeUnderMouse() const
Returns the Node currently under the mouse.
bool hasGroup(const TQString &group) const
virtual void tdehtmlMouseReleaseEvent(tdehtml::MouseReleaseEvent *event)
Eventhandler for the tdehtml::MouseMouseReleaseEvent.
virtual void setInstance(TDEInstance *instance)
void popupMenu(const TQString &url, const TQPoint &point)
Emitted when the user clicks the right mouse button on the document.
TDEAction * action(const char *name) const
static void activateWindow(WId win, long time=0)
TDEAction * find(const TQObject *recvr, const char *slot, TDEActionCollection *parent, const char *name=0)
void selectAll()
Marks all text in the document as selected.
KJavaAppletContext * createJavaContext()
Returns the java context of the applets.
TDEAction * selectAll(const TQObject *recvr, const char *slot, TDEActionCollection *parent, const char *name=0)
static TQString decode_string(const TQString &str, int encoding_hint=0)
void addData(long id, const TQByteArray &data)
Add data to the cache entry with id id.
void addDragObject(TQDragObject *dragObject)
virtual void write(const char *str, int len=-1)
Writes another part of the HTML code to the widget.
KLibFactory * factory(const char *libname)
void nodeActivated(const DOM::Node &)
This signal is emitted when an element retrieves the keyboard focus.
void canceled(const TQString &errMsg)
virtual TQString selectedText() const
Returns the text the user has marked.
TQStringList frameNames() const
Returns a list of names of all frame (including iframe) objects of the current document.
void setAllowNestedParts(bool allow)
void setMetaRefreshEnabled(bool enable)
Enable/disable automatic forwarding by <meta http-equiv="refresh" ....
Node nextSibling() const
The node immediately following this node.
TQString encoding() const
Returns the encoding the page currently uses.
Node firstChild() const
The first child of this node.
bool isNull() const
tests if this Node is 0.
TQMap< TQString, TQString > & metaData()
void cancelEntry(long id)
Cancel the entry.
void setStandardFont(const TQString &name)
Sets the standard font style.
This class is tdehtml's main class.
void deleteEntry(const TQString &pKey, bool bNLS=false, bool bGlobal=false)
void plugActionList(const TQString &name, const TQPtrList< TDEAction > &actionList)
TQString lastErrorMessage() const
virtual void saveState(TQDataStream &stream)
Saves the TDEHTMLPart's complete state (including child frame objects) to the provided TQDataStream...
virtual void tdehtmlMouseDoubleClickEvent(tdehtml::MouseDoubleClickEvent *)
Eventhandler for the tdehtml::MouseDoubleClickEvent.
Renders and displays HTML in a TQScrollView.
TQString formatDateTime(const TQDateTime &pDateTime, bool shortFormat=true, bool includeSecs=false) const
void insertChildClient(KXMLGUIClient *child)
This is the BrowserExtension for a TDEHTMLPart document.
static TDEConfig * config()
kndbgstream & endl(kndbgstream &s)
TQString locate(const char *type, const TQString &filename, const TDEInstance *instance=TDEGlobal::instance())
KJSProxy * framejScript(KParts::ReadOnlyPart *framePart)
Returns child frame framePart its script interpreter.
bool gotoAnchor(const TQString &name)
Finds the anchor named name.
DOM::HTMLDocument htmlDocument() const
Returns a reference to the DOM HTML document (for non-HTML documents, returns null) ...
void setPluginsEnabled(bool enable)
Enables or disables plugins, default is enabled.
void setDNDEnabled(bool b)
Enables or disables Drag'n'Drop support.
int readNumEntry(const TQString &pKey, int nDefault=0) const
TDEHTMLView * view() const
Returns a pointer to the HTML document's view.
DOM::Node activeNode() const
Returns the node that has the keyboard focus.
bool findTextNext()
Finds the next occurence of a string set by findText()
CaretDisplayPolicy
Enumeration for displaying the caret.
static KURL join(const List &_list)
bool frameExists(const TQString &frameName)
Returns whether a frame with the specified name is exists or not.
KParts::PartManager * partManager()
Returns a reference to the partmanager instance which manages html frame objects. ...
KParts::ReadOnlyPart * findFramePart(const TQString &f)
Finds a frame by name.
TDEHTMLPart * parentPart()
Returns a pointer to the parent TDEHTMLPart if the part is a frame in an HTML frameset.
KJavaAppletContext * javaContext()
Returns the java context of the applets.
void setStatusBar(KStatusBar *status)
void setJSStatusBarText(const TQString &text)
Called by KJS.
bool isModified() const
Checks whether the page contains unsubmitted form changes.
void setActiveNode(const DOM::Node &node)
Sets the focused node of the document to the specified node.
unsigned short nodeType() const
A code representing the type of the underlying object, as defined above.
TQString selectedTextAsHTML() const
Return the text the user has marked.
DOMString nodeValue() const
The value of this node, depending on its type; see the table above.
TDEHTMLPart(TQWidget *parentWidget=0, const char *widgetname=0, TQObject *parent=0, const char *name=0, GUIProfile prof=DefaultGUI)
Constructs a new TDEHTMLPart.