• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdehtml
 

tdehtml

  • tdehtml
tdehtml_ext.cpp
1 /* This file is part of the KDE project
2  *
3  * Copyright (C) 2000-2003 Simon Hausmann <hausmann@kde.org>
4  * 2001-2003 George Staikos <staikos@kde.org>
5  * 2001-2003 Laurent Montel <montel@kde.org>
6  * 2001-2003 Dirk Mueller <mueller@kde.org>
7  * 2001-2003 Waldo Bastian <bastian@kde.org>
8  * 2001-2003 David Faure <faure@kde.org>
9  * 2001-2003 Daniel Naber <dnaber@kde.org>
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Library General Public
13  * License as published by the Free Software Foundation; either
14  * version 2 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Library General Public License for more details.
20  *
21  * You should have received a copy of the GNU Library General Public License
22  * along with this library; see the file COPYING.LIB. If not, write to
23  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24  * Boston, MA 02110-1301, USA.
25  */
26 
27 #include <assert.h>
28 #include "tdehtml_ext.h"
29 #include "tdehtmlview.h"
30 #include "tdehtml_pagecache.h"
31 #include "rendering/render_form.h"
32 #include "rendering/render_image.h"
33 #include "html/html_imageimpl.h"
34 #include "misc/loader.h"
35 #include "dom/html_form.h"
36 #include "dom/html_image.h"
37 #include <tqclipboard.h>
38 #include <tqfileinfo.h>
39 #include <tqpopupmenu.h>
40 #include <tqurl.h>
41 #include <tqmetaobject.h>
42 #include <tqucomextra_p.h>
43 #include <tqdragobject.h>
44 
45 #include <kdebug.h>
46 #include <tdelocale.h>
47 #include <tdefiledialog.h>
48 #include <tdeio/job.h>
49 #include <kprocess.h>
50 #include <tdetoolbarbutton.h>
51 #include <tdetoolbar.h>
52 #include <ksavefile.h>
53 #include <kurldrag.h>
54 #include <kstringhandler.h>
55 #include <tdeapplication.h>
56 #include <tdemessagebox.h>
57 #include <kstandarddirs.h>
58 #include <krun.h>
59 #include <kurifilter.h>
60 #include <kiconloader.h>
61 #include <kdesktopfile.h>
62 #include <tdemultipledrag.h>
63 #include <kinputdialog.h>
64 
65 #include "tdehtml_factory.h"
66 
67 #include "dom/dom_element.h"
68 #include "misc/htmltags.h"
69 
70 #include "tdehtmlpart_p.h"
71 
72 TDEHTMLPartBrowserExtension::TDEHTMLPartBrowserExtension( TDEHTMLPart *parent, const char *name )
73 : KParts::BrowserExtension( parent, name )
74 {
75  m_part = parent;
76  setURLDropHandlingEnabled( true );
77 
78  enableAction( "cut", false );
79  enableAction( "copy", false );
80  enableAction( "paste", false );
81 
82  m_connectedToClipboard = false;
83 }
84 
85 int TDEHTMLPartBrowserExtension::xOffset()
86 {
87  return m_part->view()->contentsX();
88 }
89 
90 int TDEHTMLPartBrowserExtension::yOffset()
91 {
92  return m_part->view()->contentsY();
93 }
94 
95 void TDEHTMLPartBrowserExtension::saveState( TQDataStream &stream )
96 {
97  //kdDebug( 6050 ) << "saveState!" << endl;
98  m_part->saveState( stream );
99 }
100 
101 void TDEHTMLPartBrowserExtension::restoreState( TQDataStream &stream )
102 {
103  //kdDebug( 6050 ) << "restoreState!" << endl;
104  m_part->restoreState( stream );
105 }
106 
107 void TDEHTMLPartBrowserExtension::editableWidgetFocused( TQWidget *widget )
108 {
109  m_editableFormWidget = widget;
110  updateEditActions();
111 
112  if ( !m_connectedToClipboard && m_editableFormWidget )
113  {
114  connect( TQApplication::clipboard(), TQT_SIGNAL( dataChanged() ),
115  this, TQT_SLOT( updateEditActions() ) );
116 
117  if ( m_editableFormWidget->inherits( TQLINEEDIT_OBJECT_NAME_STRING ) || m_editableFormWidget->inherits( TQTEXTEDIT_OBJECT_NAME_STRING ) )
118  connect( m_editableFormWidget, TQT_SIGNAL( selectionChanged() ),
119  this, TQT_SLOT( updateEditActions() ) );
120 
121  m_connectedToClipboard = true;
122  }
123  editableWidgetFocused();
124 }
125 
126 void TDEHTMLPartBrowserExtension::editableWidgetBlurred( TQWidget * /*widget*/ )
127 {
128  TQWidget *oldWidget = m_editableFormWidget;
129 
130  m_editableFormWidget = 0;
131  enableAction( "cut", false );
132  enableAction( "paste", false );
133  m_part->emitSelectionChanged();
134 
135  if ( m_connectedToClipboard )
136  {
137  disconnect( TQApplication::clipboard(), TQT_SIGNAL( dataChanged() ),
138  this, TQT_SLOT( updateEditActions() ) );
139 
140  if ( oldWidget )
141  {
142  if ( oldWidget->inherits( TQLINEEDIT_OBJECT_NAME_STRING ) || oldWidget->inherits( TQTEXTEDIT_OBJECT_NAME_STRING ) )
143  disconnect( oldWidget, TQT_SIGNAL( selectionChanged() ),
144  this, TQT_SLOT( updateEditActions() ) );
145  }
146 
147  m_connectedToClipboard = false;
148  }
149  editableWidgetBlurred();
150 }
151 
152 void TDEHTMLPartBrowserExtension::setExtensionProxy( KParts::BrowserExtension *proxy )
153 {
154  if ( m_extensionProxy )
155  {
156  disconnect( m_extensionProxy, TQT_SIGNAL( enableAction( const char *, bool ) ),
157  this, TQT_SLOT( extensionProxyActionEnabled( const char *, bool ) ) );
158  if ( m_extensionProxy->inherits( "TDEHTMLPartBrowserExtension" ) )
159  {
160  disconnect( m_extensionProxy, TQT_SIGNAL( editableWidgetFocused() ),
161  this, TQT_SLOT( extensionProxyEditableWidgetFocused() ) );
162  disconnect( m_extensionProxy, TQT_SIGNAL( editableWidgetBlurred() ),
163  this, TQT_SLOT( extensionProxyEditableWidgetBlurred() ) );
164  }
165  }
166 
167  m_extensionProxy = proxy;
168 
169  if ( m_extensionProxy )
170  {
171  connect( m_extensionProxy, TQT_SIGNAL( enableAction( const char *, bool ) ),
172  this, TQT_SLOT( extensionProxyActionEnabled( const char *, bool ) ) );
173  if ( m_extensionProxy->inherits( "TDEHTMLPartBrowserExtension" ) )
174  {
175  connect( m_extensionProxy, TQT_SIGNAL( editableWidgetFocused() ),
176  this, TQT_SLOT( extensionProxyEditableWidgetFocused() ) );
177  connect( m_extensionProxy, TQT_SIGNAL( editableWidgetBlurred() ),
178  this, TQT_SLOT( extensionProxyEditableWidgetBlurred() ) );
179  }
180 
181  enableAction( "cut", m_extensionProxy->isActionEnabled( "cut" ) );
182  enableAction( "copy", m_extensionProxy->isActionEnabled( "copy" ) );
183  enableAction( "paste", m_extensionProxy->isActionEnabled( "paste" ) );
184  }
185  else
186  {
187  updateEditActions();
188  enableAction( "copy", false ); // ### re-check this
189  }
190 }
191 
192 void TDEHTMLPartBrowserExtension::cut()
193 {
194  if ( m_extensionProxy )
195  {
196  callExtensionProxyMethod( "cut()" );
197  return;
198  }
199 
200  if ( !m_editableFormWidget )
201  return;
202 
203  if ( m_editableFormWidget->inherits( TQLINEEDIT_OBJECT_NAME_STRING ) )
204  static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->cut();
205  else if ( m_editableFormWidget->inherits( TQTEXTEDIT_OBJECT_NAME_STRING ) )
206  static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->cut();
207 }
208 
209 void TDEHTMLPartBrowserExtension::copy()
210 {
211  if ( m_extensionProxy )
212  {
213  callExtensionProxyMethod( "copy()" );
214  return;
215  }
216 
217  kdDebug( 6050 ) << "************! TDEHTMLPartBrowserExtension::copy()" << endl;
218  if ( !m_editableFormWidget )
219  {
220  // get selected text and paste to the clipboard
221  TQString text= m_part->selectedText();
222  text.replace( TQChar( 0xa0 ), ' ' );
223 
224 
225  TQClipboard *cb = TQApplication::clipboard();
226  disconnect( cb, TQT_SIGNAL( selectionChanged() ), m_part, TQT_SLOT( slotClearSelection() ) );
227 #ifndef QT_NO_MIMECLIPBOARD
228  TQString htmltext;
229  /*
230  * When selectionModeEnabled, that means the user has just selected
231  * the text, not ctrl+c to copy it. The selection clipboard
232  * doesn't seem to support mime type, so to save time, don't calculate
233  * the selected text as html.
234  * optomisation disabled for now until everything else works.
235  */
236  //if(!cb->selectionModeEnabled())
237  htmltext = m_part->selectedTextAsHTML();
238  TQTextDrag *textdrag = new TQTextDrag(text, 0L);
239  KMultipleDrag *drag = new KMultipleDrag( m_editableFormWidget );
240  drag->addDragObject( textdrag );
241  if(!htmltext.isEmpty()) {
242  htmltext.replace( TQChar( 0xa0 ), ' ' );
243  TQTextDrag *htmltextdrag = new TQTextDrag(htmltext, 0L);
244  htmltextdrag->setSubtype("html");
245  drag->addDragObject( htmltextdrag );
246  }
247  cb->setData(drag);
248 #else
249  cb->setText(text);
250 #endif
251 
252  connect( cb, TQT_SIGNAL( selectionChanged() ), m_part, TQT_SLOT( slotClearSelection() ) );
253  }
254  else
255  {
256  if ( m_editableFormWidget->inherits( TQLINEEDIT_OBJECT_NAME_STRING ) )
257  static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->copy();
258  else if ( m_editableFormWidget->inherits( TQTEXTEDIT_OBJECT_NAME_STRING ) )
259  static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->copy();
260  }
261 }
262 
263 void TDEHTMLPartBrowserExtension::searchProvider()
264 {
265  // action name is of form "previewProvider[<searchproviderprefix>:]"
266  const TQString searchProviderPrefix = TQString( TQT_TQOBJECT_CONST(sender())->name() ).mid( 14 );
267 
268  KURIFilterData data;
269  TQStringList list;
270  data.setData( searchProviderPrefix + m_part->selectedText() );
271  list << "kurisearchfilter" << "kuriikwsfilter";
272 
273  if( !KURIFilter::self()->filterURI(data, list) )
274  {
275  KDesktopFile file("searchproviders/google.desktop", true, "services");
276  TQString encodedSearchTerm = m_part->selectedText();
277  TQUrl::encode(encodedSearchTerm);
278  data.setData(file.readEntry("Query").replace("\\{@}", encodedSearchTerm));
279  }
280 
281  KParts::URLArgs args;
282  args.frameName = "_blank";
283 
284  emit m_part->browserExtension()->openURLRequest( data.uri(), args );
285 }
286 
287 void TDEHTMLPartBrowserExtension::openSelection()
288 {
289  KParts::URLArgs args;
290  args.frameName = "_blank";
291 
292  emit m_part->browserExtension()->openURLRequest( m_part->selectedText(), args );
293 }
294 
295 void TDEHTMLPartBrowserExtension::paste()
296 {
297  if ( m_extensionProxy )
298  {
299  callExtensionProxyMethod( "paste()" );
300  return;
301  }
302 
303  if ( !m_editableFormWidget )
304  return;
305 
306  if ( m_editableFormWidget->inherits( TQLINEEDIT_OBJECT_NAME_STRING ) )
307  static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->paste();
308  else if ( m_editableFormWidget->inherits( TQTEXTEDIT_OBJECT_NAME_STRING ) )
309  static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->paste();
310 }
311 
312 void TDEHTMLPartBrowserExtension::callExtensionProxyMethod( const char *method )
313 {
314  if ( !m_extensionProxy )
315  return;
316 
317  int slot = m_extensionProxy->metaObject()->findSlot( method );
318  if ( slot == -1 )
319  return;
320 
321  TQUObject o[ 1 ];
322  m_extensionProxy->tqt_invoke( slot, o );
323 }
324 
325 void TDEHTMLPartBrowserExtension::updateEditActions()
326 {
327  if ( !m_editableFormWidget )
328  {
329  enableAction( "cut", false );
330  enableAction( "copy", false );
331  enableAction( "paste", false );
332  return;
333  }
334 
335  // ### duplicated from KonqMainWindow::slotClipboardDataChanged
336 #ifndef QT_NO_MIMECLIPBOARD // Handle minimalized versions of Qt Embedded
337  TQMimeSource *data = TQApplication::clipboard()->data();
338  enableAction( "paste", data->provides( "text/plain" ) );
339 #else
340  TQString data=TQApplication::clipboard()->text();
341  enableAction( "paste", data.contains("://"));
342 #endif
343  bool hasSelection = false;
344 
345  if( m_editableFormWidget) {
346  if ( ::tqqt_cast<TQLineEdit*>(m_editableFormWidget))
347  hasSelection = static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->hasSelectedText();
348  else if(::tqqt_cast<TQTextEdit*>(m_editableFormWidget))
349  hasSelection = static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->hasSelectedText();
350  }
351 
352  enableAction( "copy", hasSelection );
353  enableAction( "cut", hasSelection );
354 }
355 
356 void TDEHTMLPartBrowserExtension::extensionProxyEditableWidgetFocused() {
357  editableWidgetFocused();
358 }
359 
360 void TDEHTMLPartBrowserExtension::extensionProxyEditableWidgetBlurred() {
361  editableWidgetBlurred();
362 }
363 
364 void TDEHTMLPartBrowserExtension::extensionProxyActionEnabled( const char *action, bool enable )
365 {
366  // only forward enableAction calls for actions we actually do forward
367  if ( strcmp( action, "cut" ) == 0 ||
368  strcmp( action, "copy" ) == 0 ||
369  strcmp( action, "paste" ) == 0 ) {
370  enableAction( action, enable );
371  }
372 }
373 
374 void TDEHTMLPartBrowserExtension::reparseConfiguration()
375 {
376  m_part->reparseConfiguration();
377 }
378 
379 void TDEHTMLPartBrowserExtension::print()
380 {
381  m_part->view()->print();
382 }
383 
384 void TDEHTMLPartBrowserExtension::disableScrolling()
385 {
386  TQScrollView *scrollView = m_part->view();
387  if (scrollView) {
388  scrollView->setVScrollBarMode(TQScrollView::AlwaysOff);
389  scrollView->setHScrollBarMode(TQScrollView::AlwaysOff);
390  }
391 }
392 
393 class TDEHTMLPopupGUIClient::TDEHTMLPopupGUIClientPrivate
394 {
395 public:
396  TDEHTMLPart *m_tdehtml;
397  KURL m_url;
398  KURL m_imageURL;
399  TQPixmap m_pixmap;
400  TQString m_suggestedFilename;
401 };
402 
403 
404 TDEHTMLPopupGUIClient::TDEHTMLPopupGUIClient( TDEHTMLPart *tdehtml, const TQString &doc, const KURL &url )
405  : TQObject( tdehtml )
406 {
407  d = new TDEHTMLPopupGUIClientPrivate;
408  d->m_tdehtml = tdehtml;
409  d->m_url = url;
410  bool isImage = false;
411  bool hasSelection = tdehtml->hasSelection();
412  setInstance( tdehtml->instance() );
413 
414  DOM::Element e;
415  e = tdehtml->nodeUnderMouse();
416 
417  if ( !e.isNull() && (e.elementId() == ID_IMG ||
418  (e.elementId() == ID_INPUT && !static_cast<DOM::HTMLInputElement>(e).src().isEmpty())))
419  {
420  if (e.elementId() == ID_IMG) {
421  DOM::HTMLImageElementImpl *ie = static_cast<DOM::HTMLImageElementImpl*>(e.handle());
422  tdehtml::RenderImage *ri = dynamic_cast<tdehtml::RenderImage*>(ie->renderer());
423  if (ri && ri->contentObject()) {
424  d->m_suggestedFilename = static_cast<tdehtml::CachedImage*>(ri->contentObject())->suggestedFilename();
425  }
426  }
427  isImage=true;
428  }
429 
430  if (hasSelection)
431  {
432  TDEAction* copyAction = KStdAction::copy( d->m_tdehtml->browserExtension(), TQT_SLOT( copy() ), actionCollection(), "copy" );
433  copyAction->setText(i18n("&Copy Text"));
434  copyAction->setEnabled(d->m_tdehtml->browserExtension()->isActionEnabled( "copy" ));
435  actionCollection()->insert( tdehtml->actionCollection()->action( "selectAll" ) );
436 
437 
438  // Fill search provider entries
439  TDEConfig config("kuriikwsfilterrc");
440  config.setGroup("General");
441  const TQString defaultEngine = config.readEntry("DefaultSearchEngine", "google");
442  const char keywordDelimiter = config.readNumEntry("KeywordDelimiter", ':');
443 
444  // search text
445  TQString selectedText = tdehtml->selectedText();
446  selectedText.replace("&", "&&");
447  if ( selectedText.length()>18 ) {
448  selectedText.truncate(15);
449  selectedText+="...";
450  }
451 
452  // default search provider
453  KService::Ptr service = KService::serviceByDesktopPath(TQString("searchproviders/%1.desktop").arg(defaultEngine));
454 
455  // search provider icon
456  TQPixmap icon;
457  KURIFilterData data;
458  TQStringList list;
459  data.setData( TQString("some keyword") );
460  list << "kurisearchfilter" << "kuriikwsfilter";
461 
462  TQString name;
463  if ( KURIFilter::self()->filterURI(data, list) )
464  {
465  TQString iconPath = locate("cache", KMimeType::favIconForURL(data.uri()) + ".png");
466  if ( iconPath.isEmpty() )
467  icon = SmallIcon("edit-find");
468  else
469  icon = TQPixmap( iconPath );
470  name = service->name();
471  }
472  else
473  {
474  icon = SmallIcon("google");
475  name = "Google";
476  }
477 
478  // using .arg(foo, bar) instead of .arg(foo).arg(bar), as foo can contain %x
479  new TDEAction( i18n( "Search for '%1' with %2" ).arg( selectedText, name ), icon, 0, d->m_tdehtml->browserExtension(),
480  TQT_SLOT( searchProvider() ), actionCollection(), "searchProvider" );
481 
482  // favorite search providers
483  TQStringList favoriteEngines;
484  favoriteEngines << "google" << "google_groups" << "google_news" << "webster" << "dmoz" << "wikipedia";
485  favoriteEngines = config.readListEntry("FavoriteSearchEngines", favoriteEngines);
486 
487  if ( !favoriteEngines.isEmpty()) {
488  TDEActionMenu* providerList = new TDEActionMenu( i18n( "Search for '%1' with" ).arg( selectedText ), actionCollection(), "searchProviderList" );
489 
490  TQStringList::ConstIterator it = favoriteEngines.begin();
491  for ( ; it != favoriteEngines.end(); ++it ) {
492  if (*it==defaultEngine)
493  continue;
494  service = KService::serviceByDesktopPath(TQString("searchproviders/%1.desktop").arg(*it));
495  if (!service)
496  continue;
497  const TQString searchProviderPrefix = *(service->property("Keys").toStringList().begin()) + keywordDelimiter;
498  data.setData( searchProviderPrefix + "some keyword" );
499 
500  if ( KURIFilter::self()->filterURI(data, list) )
501  {
502  TQString iconPath = locate("cache", KMimeType::favIconForURL(data.uri()) + ".png");
503  if ( iconPath.isEmpty() )
504  icon = SmallIcon("edit-find");
505  else
506  icon = TQPixmap( iconPath );
507  name = service->name();
508 
509  providerList->insert( new TDEAction( name, icon, 0, d->m_tdehtml->browserExtension(),
510  TQT_SLOT( searchProvider() ), actionCollection(), TQString( "searchProvider" + searchProviderPrefix ).latin1() ) );
511  }
512  }
513  }
514 
515 
516  if ( selectedText.contains("://") && KURL(selectedText).isValid() )
517  new TDEAction( i18n( "Open '%1'" ).arg( selectedText ), "window-new", 0,
518  d->m_tdehtml->browserExtension(), TQT_SLOT( openSelection() ), actionCollection(), "openSelection" );
519  }
520  else if ( url.isEmpty() && !isImage )
521  {
522  actionCollection()->insert( tdehtml->actionCollection()->action( "security" ) );
523  actionCollection()->insert( tdehtml->actionCollection()->action( "setEncoding" ) );
524  new TDEAction( i18n( "Stop Animations" ), 0, this, TQT_SLOT( slotStopAnimations() ),
525  actionCollection(), "stopanimations" );
526  }
527 
528  if ( !url.isEmpty() )
529  {
530  if (url.protocol() == "mailto")
531  {
532  new TDEAction( i18n( "Copy Email Address" ), 0, this, TQT_SLOT( slotCopyLinkLocation() ),
533  actionCollection(), "copylinklocation" );
534  }
535  else
536  {
537  new TDEAction( i18n( "&Save Link As..." ), 0, this, TQT_SLOT( slotSaveLinkAs() ),
538  actionCollection(), "savelinkas" );
539  new TDEAction( i18n( "Copy &Link Address" ), 0, this, TQT_SLOT( slotCopyLinkLocation() ),
540  actionCollection(), "copylinklocation" );
541  }
542  }
543 
544  // frameset? -> add "Reload Frame" etc.
545  if (!hasSelection)
546  {
547  if ( tdehtml->parentPart() )
548  {
549  new TDEAction( i18n( "Open in New &Window" ), "window-new", 0, this, TQT_SLOT( slotFrameInWindow() ),
550  actionCollection(), "frameinwindow" );
551  new TDEAction( i18n( "Open in &This Window" ), 0, this, TQT_SLOT( slotFrameInTop() ),
552  actionCollection(), "frameintop" );
553  new TDEAction( i18n( "Open in &New Tab" ), "tab_new", 0, this, TQT_SLOT( slotFrameInTab() ),
554  actionCollection(), "frameintab" );
555  new TDEAction( i18n( "Reload Frame" ), 0, this, TQT_SLOT( slotReloadFrame() ),
556  actionCollection(), "reloadframe" );
557 
558  if ( TDEHTMLFactory::defaultHTMLSettings()->isAdFilterEnabled() ) {
559  if ( tdehtml->d->m_frame->m_type == tdehtml::ChildFrame::IFrame )
560  new TDEAction( i18n( "Block IFrame..." ), 0, this, TQT_SLOT( slotBlockIFrame() ), actionCollection(), "blockiframe" );
561  }
562 
563  new TDEAction( i18n( "View Frame Source" ), 0, d->m_tdehtml, TQT_SLOT( slotViewDocumentSource() ),
564  actionCollection(), "viewFrameSource" );
565  new TDEAction( i18n( "View Frame Information" ), 0, d->m_tdehtml, TQT_SLOT( slotViewPageInfo() ), actionCollection(), "viewFrameInfo" );
566  // This one isn't in tdehtml_popupmenu.rc anymore, because Print isn't either,
567  // and because print frame is already in the toolbar and the menu.
568  // But leave this here, so that it's easy to read it.
569  new TDEAction( i18n( "Print Frame..." ), "frameprint", 0, d->m_tdehtml->browserExtension(), TQT_SLOT( print() ), actionCollection(), "printFrame" );
570  new TDEAction( i18n( "Save &Frame As..." ), 0, d->m_tdehtml, TQT_SLOT( slotSaveFrame() ), actionCollection(), "saveFrame" );
571 
572  actionCollection()->insert( tdehtml->parentPart()->actionCollection()->action( "viewDocumentSource" ) );
573  actionCollection()->insert( tdehtml->parentPart()->actionCollection()->action( "viewPageInfo" ) );
574  } else {
575  actionCollection()->insert( tdehtml->actionCollection()->action( "viewDocumentSource" ) );
576  actionCollection()->insert( tdehtml->actionCollection()->action( "viewPageInfo" ) );
577  }
578  } else if (isImage || !url.isEmpty()) {
579  actionCollection()->insert( tdehtml->actionCollection()->action( "viewDocumentSource" ) );
580  actionCollection()->insert( tdehtml->actionCollection()->action( "viewPageInfo" ) );
581  new TDEAction( i18n( "Stop Animations" ), 0, this, TQT_SLOT( slotStopAnimations() ),
582  actionCollection(), "stopanimations" );
583  }
584 
585  if (isImage)
586  {
587  if ( e.elementId() == ID_IMG ) {
588  d->m_imageURL = KURL( static_cast<DOM::HTMLImageElement>( e ).src().string() );
589  DOM::HTMLImageElementImpl *imageimpl = static_cast<DOM::HTMLImageElementImpl *>( e.handle() );
590  Q_ASSERT(imageimpl);
591  if(imageimpl) // should be true always. right?
592  {
593  if(imageimpl->complete()) {
594  d->m_pixmap = imageimpl->currentPixmap();
595  }
596  }
597  }
598  else
599  d->m_imageURL = KURL( static_cast<DOM::HTMLInputElement>( e ).src().string() );
600  new TDEAction( i18n( "Save Image As..." ), 0, this, TQT_SLOT( slotSaveImageAs() ),
601  actionCollection(), "saveimageas" );
602  new TDEAction( i18n( "Send Image..." ), 0, this, TQT_SLOT( slotSendImage() ),
603  actionCollection(), "sendimage" );
604 
605 
606 #ifndef QT_NO_MIMECLIPBOARD
607  (new TDEAction( i18n( "Copy Image" ), 0, this, TQT_SLOT( slotCopyImage() ),
608  actionCollection(), "copyimage" ))->setEnabled(!d->m_pixmap.isNull());
609 #endif
610 
611  if(d->m_pixmap.isNull()) { //fallback to image location if still loading the image. this will always be true if ifdef QT_NO_MIMECLIPBOARD
612  new TDEAction( i18n( "Copy Image Location" ), 0, this, TQT_SLOT( slotCopyImageLocation() ),
613  actionCollection(), "copyimagelocation" );
614  }
615 
616  TQString name = KStringHandler::csqueeze(d->m_imageURL.fileName()+d->m_imageURL.query(), 25);
617  new TDEAction( i18n( "View Image (%1)" ).arg(d->m_suggestedFilename.isEmpty() ? name.replace("&", "&&") : d->m_suggestedFilename.replace("&", "&&")), 0, this, TQT_SLOT( slotViewImage() ),
618  actionCollection(), "viewimage" );
619 
620  if (TDEHTMLFactory::defaultHTMLSettings()->isAdFilterEnabled())
621  {
622  new TDEAction( i18n( "Block Image..." ), 0, this, TQT_SLOT( slotBlockImage() ),
623  actionCollection(), "blockimage" );
624 
625  if (!d->m_imageURL.host().isEmpty() &&
626  !d->m_imageURL.protocol().isEmpty())
627  {
628  new TDEAction( i18n( "Block Images From %1" ).arg(d->m_imageURL.host()), 0, this, TQT_SLOT( slotBlockHost() ),
629  actionCollection(), "blockhost" );
630  }
631  }
632  }
633 
634  setXML( doc );
635  setDOMDocument( TQDomDocument(), true ); // ### HACK
636 
637  TQDomElement menu = domDocument().documentElement().namedItem( "Menu" ).toElement();
638 
639  if ( actionCollection()->count() > 0 )
640  menu.insertBefore( domDocument().createElement( "separator" ), menu.firstChild() );
641 }
642 
643 TDEHTMLPopupGUIClient::~TDEHTMLPopupGUIClient()
644 {
645  delete d;
646 }
647 
648 void TDEHTMLPopupGUIClient::slotSaveLinkAs()
649 {
650  TDEIO::MetaData metaData;
651  metaData["referrer"] = d->m_tdehtml->referrer();
652  saveURL( d->m_tdehtml->widget(), i18n( "Save Link As" ), d->m_url, metaData );
653 }
654 
655 void TDEHTMLPopupGUIClient::slotSendImage()
656 {
657  TQStringList urls;
658  urls.append( d->m_imageURL.url());
659  TQString subject = d->m_imageURL.url();
660  kapp->invokeMailer(TQString::null, TQString::null, TQString::null, subject,
661  TQString::null, //body
662  TQString::null,
663  urls); // attachments
664 
665 
666 }
667 
668 void TDEHTMLPopupGUIClient::slotSaveImageAs()
669 {
670  TDEIO::MetaData metaData;
671  metaData["referrer"] = d->m_tdehtml->referrer();
672  saveURL( d->m_tdehtml->widget(), i18n( "Save Image As" ), d->m_imageURL, metaData, TQString::null, 0, d->m_suggestedFilename );
673 }
674 
675 void TDEHTMLPopupGUIClient::slotBlockHost()
676 {
677  TQString name=d->m_imageURL.protocol()+"://"+d->m_imageURL.host()+"/*";
678  TDEHTMLFactory::defaultHTMLSettings()->addAdFilter( name );
679  d->m_tdehtml->reparseConfiguration();
680 }
681 
682 void TDEHTMLPopupGUIClient::slotBlockImage()
683 {
684  bool ok = false;
685 
686  TQString url = KInputDialog::getText( i18n("Add URL to Filter"),
687  i18n("Enter the URL:"),
688  d->m_imageURL.url(),
689  &ok);
690  if ( ok ) {
691  TDEHTMLFactory::defaultHTMLSettings()->addAdFilter( url );
692  d->m_tdehtml->reparseConfiguration();
693  }
694 }
695 
696 void TDEHTMLPopupGUIClient::slotBlockIFrame()
697 {
698  bool ok = false;
699  TQString url = KInputDialog::getText( i18n( "Add URL to Filter"),
700  i18n("Enter the URL:"),
701  d->m_tdehtml->url().url(),
702  &ok );
703  if ( ok ) {
704  TDEHTMLFactory::defaultHTMLSettings()->addAdFilter( url );
705  d->m_tdehtml->reparseConfiguration();
706  }
707 }
708 
709 void TDEHTMLPopupGUIClient::slotCopyLinkLocation()
710 {
711  KURL safeURL(d->m_url);
712  safeURL.setPass(TQString::null);
713 #ifndef QT_NO_MIMECLIPBOARD
714  // Set it in both the mouse selection and in the clipboard
715  KURL::List lst;
716  lst.append( safeURL );
717  TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Clipboard );
718  TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Selection );
719 #else
720  TQApplication::clipboard()->setText( safeURL.url() ); //FIXME(E): Handle multiple entries
721 #endif
722 }
723 
724 void TDEHTMLPopupGUIClient::slotStopAnimations()
725 {
726  d->m_tdehtml->stopAnimations();
727 }
728 
729 void TDEHTMLPopupGUIClient::slotCopyImage()
730 {
731 #ifndef QT_NO_MIMECLIPBOARD
732  KURL safeURL(d->m_imageURL);
733  safeURL.setPass(TQString::null);
734 
735  KURL::List lst;
736  lst.append( safeURL );
737  KMultipleDrag *drag = new KMultipleDrag(d->m_tdehtml->view(), "Image");
738 
739  drag->addDragObject( new TQImageDrag(d->m_pixmap.convertToImage()) );
740  drag->addDragObject( new KURLDrag(lst, d->m_tdehtml->view(), "Image URL") );
741 
742  // Set it in both the mouse selection and in the clipboard
743  TQApplication::clipboard()->setData( drag, TQClipboard::Clipboard );
744  TQApplication::clipboard()->setData( new KURLDrag(lst), TQClipboard::Selection );
745 #else
746  kdDebug() << "slotCopyImage called when the clipboard does not support this. This should not be possible." << endl;
747 #endif
748 }
749 
750 void TDEHTMLPopupGUIClient::slotCopyImageLocation()
751 {
752  KURL safeURL(d->m_imageURL);
753  safeURL.setPass(TQString::null);
754 #ifndef QT_NO_MIMECLIPBOARD
755  // Set it in both the mouse selection and in the clipboard
756  KURL::List lst;
757  lst.append( safeURL );
758  TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Clipboard );
759  TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Selection );
760 #else
761  TQApplication::clipboard()->setText( safeURL.url() ); //FIXME(E): Handle multiple entries
762 #endif
763 }
764 
765 void TDEHTMLPopupGUIClient::slotViewImage()
766 {
767  d->m_tdehtml->browserExtension()->createNewWindow(d->m_imageURL);
768 }
769 
770 void TDEHTMLPopupGUIClient::slotReloadFrame()
771 {
772  KParts::URLArgs args( d->m_tdehtml->browserExtension()->urlArgs() );
773  args.reload = true;
774  args.metaData()["referrer"] = d->m_tdehtml->pageReferrer();
775  // reload document
776  d->m_tdehtml->closeURL();
777  d->m_tdehtml->browserExtension()->setURLArgs( args );
778  d->m_tdehtml->openURL( d->m_tdehtml->url() );
779 }
780 
781 void TDEHTMLPopupGUIClient::slotFrameInWindow()
782 {
783  KParts::URLArgs args( d->m_tdehtml->browserExtension()->urlArgs() );
784  args.metaData()["referrer"] = d->m_tdehtml->pageReferrer();
785  args.metaData()["forcenewwindow"] = "true";
786  emit d->m_tdehtml->browserExtension()->createNewWindow( d->m_tdehtml->url(), args );
787 }
788 
789 void TDEHTMLPopupGUIClient::slotFrameInTop()
790 {
791  KParts::URLArgs args( d->m_tdehtml->browserExtension()->urlArgs() );
792  args.metaData()["referrer"] = d->m_tdehtml->pageReferrer();
793  args.frameName = "_top";
794  emit d->m_tdehtml->browserExtension()->openURLRequest( d->m_tdehtml->url(), args );
795 }
796 
797 void TDEHTMLPopupGUIClient::slotFrameInTab()
798 {
799  KParts::URLArgs args( d->m_tdehtml->browserExtension()->urlArgs() );
800  args.metaData()["referrer"] = d->m_tdehtml->pageReferrer();
801  args.setNewTab(true);
802  emit d->m_tdehtml->browserExtension()->createNewWindow( d->m_tdehtml->url(), args );
803 }
804 
805 void TDEHTMLPopupGUIClient::saveURL( TQWidget *parent, const TQString &caption,
806  const KURL &url,
807  const TQMap<TQString, TQString> &metadata,
808  const TQString &filter, long cacheId,
809  const TQString & suggestedFilename )
810 {
811  TQString name = TQString::fromLatin1( "index.html" );
812  if ( !suggestedFilename.isEmpty() )
813  name = suggestedFilename;
814  else if ( !url.fileName().isEmpty() )
815  name = url.fileName();
816 
817  KURL destURL;
818  int query;
819  do {
820  query = KMessageBox::Yes;
821  destURL = KFileDialog::getSaveURL( name, filter, parent, caption );
822  if( destURL.isLocalFile() )
823  {
824  TQFileInfo info( destURL.path() );
825  if( info.exists() ) {
826  // TODO: use TDEIO::RenameDlg (shows more information)
827  query = KMessageBox::warningContinueCancel( parent, i18n( "A file named \"%1\" already exists. " "Are you sure you want to overwrite it?" ).arg( info.fileName() ), i18n( "Overwrite File?" ), i18n( "Overwrite" ) );
828  }
829  }
830  } while ( query == KMessageBox::Cancel );
831 
832  if ( destURL.isValid() )
833  saveURL(url, destURL, metadata, cacheId);
834 }
835 
836 void TDEHTMLPopupGUIClient::saveURL( const KURL &url, const KURL &destURL,
837  const TQMap<TQString, TQString> &metadata,
838  long cacheId )
839 {
840  if ( destURL.isValid() )
841  {
842  bool saved = false;
843  if (TDEHTMLPageCache::self()->isComplete(cacheId))
844  {
845  if (destURL.isLocalFile())
846  {
847  KSaveFile destFile(destURL.path());
848  if (destFile.status() == 0)
849  {
850  TDEHTMLPageCache::self()->saveData(cacheId, destFile.dataStream());
851  saved = true;
852  }
853  }
854  else
855  {
856  // save to temp file, then move to final destination.
857  KTempFile destFile;
858  if (destFile.status() == 0)
859  {
860  TDEHTMLPageCache::self()->saveData(cacheId, destFile.dataStream());
861  destFile.close();
862  KURL url2 = KURL();
863  url2.setPath(destFile.name());
864  TDEIO::file_move(url2, destURL, -1, true /*overwrite*/);
865  saved = true;
866  }
867  }
868  }
869  if(!saved)
870  {
871  // DownloadManager <-> konqueror integration
872  // find if the integration is enabled
873  // the empty key means no integration
874  // only use download manager for non-local urls!
875  bool downloadViaKIO = true;
876  if ( !url.isLocalFile() )
877  {
878  TDEConfig cfg("konquerorrc", false, false);
879  cfg.setGroup("HTML Settings");
880  TQString downloadManger = cfg.readPathEntry("DownloadManager");
881  if (!downloadManger.isEmpty())
882  {
883  // then find the download manager location
884  kdDebug(1000) << "Using: "<<downloadManger <<" as Download Manager" <<endl;
885  TQString cmd = TDEStandardDirs::findExe(downloadManger);
886  if (cmd.isEmpty())
887  {
888  TQString errMsg=i18n("The Download Manager (%1) could not be found in your $PATH ").arg(downloadManger);
889  TQString errMsgEx= i18n("Try to reinstall it \n\nThe integration with Konqueror will be disabled!");
890  KMessageBox::detailedSorry(0,errMsg,errMsgEx);
891  cfg.writePathEntry("DownloadManager",TQString::null);
892  cfg.sync ();
893  }
894  else
895  {
896  downloadViaKIO = false;
897  KURL cleanDest = destURL;
898  cleanDest.setPass( TQString::null ); // don't put password into commandline
899  cmd += " " + TDEProcess::quote(url.url()) + " " +
900  TDEProcess::quote(cleanDest.url());
901  kdDebug(1000) << "Calling command "<<cmd<<endl;
902  KRun::runCommand(cmd);
903  }
904  }
905  }
906 
907  if ( downloadViaKIO )
908  {
909  TDEIO::Job *job = TDEIO::file_copy( url, destURL, -1, true /*overwrite*/ );
910  job->setMetaData(metadata);
911  job->addMetaData("MaxCacheSize", "0"); // Don't store in http cache.
912  job->addMetaData("cache", "cache"); // Use entry from cache if available.
913  job->setAutoErrorHandlingEnabled( true );
914  }
915  } //end if(!saved)
916  }
917 }
918 
919 TDEHTMLPartBrowserHostExtension::TDEHTMLPartBrowserHostExtension( TDEHTMLPart *part )
920 : KParts::BrowserHostExtension( part )
921 {
922  m_part = part;
923 }
924 
925 TDEHTMLPartBrowserHostExtension::~TDEHTMLPartBrowserHostExtension()
926 {
927 }
928 
929 TQStringList TDEHTMLPartBrowserHostExtension::frameNames() const
930 {
931  return m_part->frameNames();
932 }
933 
934 const TQPtrList<KParts::ReadOnlyPart> TDEHTMLPartBrowserHostExtension::frames() const
935 {
936  return m_part->frames();
937 }
938 
939 bool TDEHTMLPartBrowserHostExtension::openURLInFrame( const KURL &url, const KParts::URLArgs &urlArgs )
940 {
941  return m_part->openURLInFrame( url, urlArgs );
942 }
943 
944 void TDEHTMLPartBrowserHostExtension::virtual_hook( int id, void *data )
945 {
946  if (id == VIRTUAL_FIND_FRAME_PARENT)
947  {
948  FindFrameParentParams *param = static_cast<FindFrameParentParams*>(data);
949  TDEHTMLPart *parentPart = m_part->findFrameParent(param->callingPart, param->frame);
950  if (parentPart)
951  param->parent = parentPart->browserHostExtension();
952  return;
953  }
954  BrowserHostExtension::virtual_hook( id, data );
955 }
956 
957 
958 // defined in tdehtml_part.cpp
959 extern const int KDE_NO_EXPORT fastZoomSizes[];
960 extern const int KDE_NO_EXPORT fastZoomSizeCount;
961 
962 // BCI: remove in KDE 4
963 TDEHTMLZoomFactorAction::TDEHTMLZoomFactorAction( TDEHTMLPart *part, bool direction, const TQString &text, const TQString &icon, const TQObject *receiver, const char *slot, TQObject *parent, const char *name )
964  : TDEAction( text, icon, 0, receiver, slot, parent, name )
965 {
966  init(part, direction);
967 }
968 
969 TDEHTMLZoomFactorAction::TDEHTMLZoomFactorAction( TDEHTMLPart *part, bool direction, const TQString &text, const TQString &icon, const TDEShortcut &cut, const TQObject *receiver, const char *slot, TQObject *parent, const char *name )
970  : TDEAction( text, icon, cut, receiver, slot, parent, name )
971 {
972  init(part, direction);
973 }
974 
975 void TDEHTMLZoomFactorAction::init(TDEHTMLPart *part, bool direction)
976 {
977  m_direction = direction;
978  m_part = part;
979 
980  m_popup = new TQPopupMenu;
981  // xgettext: no-c-format
982  m_popup->insertItem( i18n( "Default Font Size (100%)" ) );
983 
984  int m = m_direction ? 1 : -1;
985  int ofs = fastZoomSizeCount / 2; // take index of 100%
986 
987  // this only works if there is an odd number of elements in fastZoomSizes[]
988  for ( int i = m; i != m*(ofs+1); i += m )
989  {
990  int num = i * m;
991  TQString numStr = TQString::number( num );
992  if ( num > 0 ) numStr.prepend( '+' );
993 
994  // xgettext: no-c-format
995  m_popup->insertItem( i18n( "%1%" ).arg( fastZoomSizes[ofs + i] ) );
996  }
997 
998  connect( m_popup, TQT_SIGNAL( activated( int ) ), this, TQT_SLOT( slotActivated( int ) ) );
999 }
1000 
1001 TDEHTMLZoomFactorAction::~TDEHTMLZoomFactorAction()
1002 {
1003  delete m_popup;
1004 }
1005 
1006 int TDEHTMLZoomFactorAction::plug( TQWidget *w, int index )
1007 {
1008  int containerId = TDEAction::plug( w, index );
1009  if ( containerId == -1 || !w->inherits( "TDEToolBar" ) )
1010  return containerId;
1011 
1012  TDEToolBarButton *button = static_cast<TDEToolBar *>( w )->getButton( itemId( containerId ) );
1013  if ( !button )
1014  return containerId;
1015 
1016  button->setDelayedPopup( m_popup );
1017  return containerId;
1018 }
1019 
1020 void TDEHTMLZoomFactorAction::slotActivated( int id )
1021 {
1022  int idx = m_popup->indexOf( id );
1023 
1024  if (idx == 0)
1025  m_part->setZoomFactor(100);
1026  else
1027  m_part->setZoomFactor(fastZoomSizes[fastZoomSizeCount/2 + (m_direction ? 1 : -1)*idx]);
1028 }
1029 
1030 #include "tdehtml_ext.moc"
1031 
KParts::BrowserExtension
TDEConfig
KURL
KParts::ReadOnlyPart::m_url
KURL m_url
TDEHTMLPart::hasSelection
bool hasSelection() const
Has the user selected anything?
Definition: tdehtml_part.cpp:3596
KParts
KStdAction::copy
TDEAction * copy(const TQObject *recvr, const char *slot, TDEActionCollection *parent, const char *name=0)
TDEHTMLPageCache::saveData
void saveData(long id, TQDataStream *str)
Save the data of cache entry id to the datastream str.
Definition: tdehtml_pagecache.cpp:272
KStringHandler::csqueeze
static TQString csqueeze(const TQString &str, uint maxlen=40)
KTempFile::dataStream
TQDataStream * dataStream()
TDEHTMLPart::frameNames
TQStringList frameNames() const
Returns a list of names of all frame (including iframe) objects of the current document.
Definition: tdehtml_part.cpp:5891
TDEToolBarButton
KSaveFile
KURL::protocol
TQString protocol() const
KURL::fileName
TQString fileName(bool _ignore_trailing_slash_in_path=true) const
kdDebug
kdbgstream kdDebug(int area=0)
DOM::HTMLInputElement
Form control.
Definition: html_form.h:349
TDEToolBarButton::setDelayedPopup
void setDelayedPopup(TQPopupMenu *p, bool unused=false)
TDEActionMenu
TDEStdAccel::cut
const TDEShortcut & cut()
KParts::URLArgs::frameName
TQString frameName
KURL::isEmpty
bool isEmpty() const
TDEAction
TDEHTMLPageCache::self
static TDEHTMLPageCache * self()
static "constructor".
Definition: tdehtml_pagecache.cpp:121
tdehtml
Definition: tdehtml_caret.cpp:26
DOM::Element
By far the vast majority of objects (apart from text) that authors encounter when traversing a docume...
Definition: dom_element.h:210
TDEHTMLPart::nodeUnderMouse
DOM::Node nodeUnderMouse() const
Returns the Node currently under the mouse.
Definition: tdehtml_part.cpp:5644
KURL::setPass
void setPass(const TQString &_txt)
tdelocale.h
TDEToolBar
KInputDialog::getText
static TQString getText(const TQString &caption, const TQString &label, const TQString &value=TQString::null, bool *ok=0, TQWidget *parent=0, const char *name=0, TQValidator *validator=0, const TQString &mask=TQString::null)
KURL::isLocalFile
bool isLocalFile() const
TDEStandardDirs::findExe
static TQString findExe(const TQString &appname, const TQString &pathstr=TQString::null, bool ignoreExecBit=false)
KURL::setPath
void setPath(const TQString &path)
KTempFile::name
TQString name() const
TDEHTMLPart::findFrameParent
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...
Definition: tdehtml_part.cpp:5215
KMessageBox::detailedSorry
static void detailedSorry(TQWidget *parent, const TQString &text, const TQString &details, const TQString &caption=TQString::null, int options=Notify)
KParts::URLArgs::reload
bool reload
TDEHTMLPart::selectedText
virtual TQString selectedText() const
Returns the text the user has marked.
Definition: tdehtml_part.cpp:3454
KMessageBox::warningContinueCancel
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::URLArgs
KTempFile
KDesktopFile
KParts::URLArgs::setNewTab
void setNewTab(bool newTab)
TDEShortcut
KMultipleDrag
TDEStdAccel::copy
const TDEShortcut & copy()
KMultipleDrag::addDragObject
void addDragObject(TQDragObject *dragObject)
KTempFile::close
bool close()
KTempFile::status
int status() const
KParts::URLArgs::metaData
TQMap< TQString, TQString > & metaData()
TDEHTMLPart
This class is tdehtml's main class.
Definition: tdehtml_part.h:183
KURL::url
TQString url(int _trailing=0, int encoding_hint=0) const
TDEStdAccel::paste
const TDEShortcut & paste()
KURL::path
TQString path() const
endl
kndbgstream & endl(kndbgstream &s)
locate
TQString locate(const char *type, const TQString &filename, const TDEInstance *instance=TDEGlobal::instance())
TDEAction::plug
virtual int plug(TQWidget *widget, int index=-1)
TDEStdAccel::name
TQString name(StdAccel id)
KURL::List
KURLDrag
KURL::isValid
bool isValid() const
TDEHTMLPart::parentPart
TDEHTMLPart * parentPart()
Returns a pointer to the parent TDEHTMLPart if the part is a frame in an HTML frameset.
Definition: tdehtml_part.cpp:5321
TDEStdAccel::print
const TDEShortcut & print()
TDEHTMLPageCache::isComplete
bool isComplete(long id)
Definition: tdehtml_pagecache.cpp:191

tdehtml

Skip menu "tdehtml"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdehtml

Skip menu "tdehtml"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  •     tdecore
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  • tdeioslave
  •   http
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdehtml by doxygen 1.8.8
This website is maintained by Timothy Pearson.