Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 98d6b53e11e983e268c3e19f14e091a0 > files > 129

kdepim-devel-doc-3.5.9-9mdv2008.1.x86_64.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US">

<head>
  <title>akregator/src: feediconmanager.cpp Source File (akregator/src)</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <meta http-equiv="Content-Style-Type" content="text/css" />

  <meta http-equiv="pics-label" content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline DE v2.0" l gen true for "http://www.kde.org"  r (nz 1 vz 1 lz 1 oz 1 cb 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://www.kde.org"  r (n 0 s 0 v 0 l 0))' />

  <meta name="trademark" content="KDE e.V." />
  <meta name="description" content="K Desktop Environment Homepage, KDE.org" />
  <meta name="MSSmartTagsPreventParsing" content="true" />
  <meta name="robots" content="all" />

  <link rel="shortcut icon" href="../../../favicon.ico" />

<link rel="stylesheet" media="screen" type="text/css" title="APIDOX" href="doxygen.css" />



<style type="text/css">
<!--
hr { display: none; }
#content h2 { margin-left: 0px; }
table.mdTable { background-color: #f8f8f8; border: .2em solid #d7d7d7; }
td.mdRow { padding: 8px 20px; }
td.md { font-weight: bold; }
td.mdname1 { font-weight: bold; color: #602020; }
td.mdname { font-weight: bold; color: #602020;  }

-->
</style>

</head>

<body>

<div id="nav_header_top" align="right">
  <a href="#content" class="doNotDisplay" accesskey="2">Skip to main content ::</a>

  <a href="../../.."><img id="nav_header_logo" alt="Home" align="left" src="../../../kde_gear_64.png" border="0" /></a>
  <span class="doNotDisplay">::</span>
  <img id="nav_header_logo_right" alt="" align="right" src="../../../pimlogo.png" border="0" />

  <div id="nav_header_title" align="left">KDE PIM API Reference</div>


</div>

<div id="nav_header_bottom" align="right">
  <span class="doNotDisplay">:: <a href="#navigation" accesskey="5">Skip to Link Menu</a><br/></span>
  <div id="nav_header_bottom_left" style="text-align: left;">
/ <a href="../../../">API Reference</a>
 / <a href="../../html/index.html">akregator</a> / <a href=".">src</a>
  </div>
</div>


<table id="main" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
      <td valign="top" class="menuheader" height="0"></td>

  <td id="contentcolumn" valign="top" rowspan="2" >
    <div id="content" style="padding-top: 0px;"><div style="width:100%; margin: 0px; padding: 0px;">
    <h2><a name="content"></a>akregator/src</h2>


<!-- Generated by Doxygen 1.5.5 -->
<h1>feediconmanager.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">    This file is part of Akregator.</span>
<a name="l00003"></a>00003 <span class="comment"></span>
<a name="l00004"></a>00004 <span class="comment">    Copyright (C) 2004 Sashmit Bhaduri &lt;smt@vfemail.net&gt;</span>
<a name="l00005"></a>00005 <span class="comment">                  2005 Frank Osterfeld &lt;frank.osterfeld@kdemail.net&gt;</span>
<a name="l00006"></a>00006 <span class="comment"></span>
<a name="l00007"></a>00007 <span class="comment">    This program is free software; you can redistribute it and/or modify</span>
<a name="l00008"></a>00008 <span class="comment">    it under the terms of the GNU General Public License as published by</span>
<a name="l00009"></a>00009 <span class="comment">    the Free Software Foundation; either version 2 of the License, or</span>
<a name="l00010"></a>00010 <span class="comment">    (at your option) any later version.</span>
<a name="l00011"></a>00011 <span class="comment"></span>
<a name="l00012"></a>00012 <span class="comment">    This program is distributed in the hope that it will be useful,</span>
<a name="l00013"></a>00013 <span class="comment">    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00014"></a>00014 <span class="comment">    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<a name="l00015"></a>00015 <span class="comment">    GNU General Public License for more details.</span>
<a name="l00016"></a>00016 <span class="comment"></span>
<a name="l00017"></a>00017 <span class="comment">    You should have received a copy of the GNU General Public License</span>
<a name="l00018"></a>00018 <span class="comment">    along with this program; if not, write to the Free Software</span>
<a name="l00019"></a>00019 <span class="comment">    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span>
<a name="l00020"></a>00020 <span class="comment"></span>
<a name="l00021"></a>00021 <span class="comment">    As a special exception, permission is given to link this program</span>
<a name="l00022"></a>00022 <span class="comment">    with any edition of Qt, and distribute the resulting executable,</span>
<a name="l00023"></a>00023 <span class="comment">    without including the source code for Qt in the source distribution.</span>
<a name="l00024"></a>00024 <span class="comment">*/</span>
<a name="l00025"></a>00025 
<a name="l00026"></a>00026 <span class="preprocessor">#include "feed.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "feediconmanager.h"</span>
<a name="l00028"></a>00028 
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;dcopclient.h&gt;</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;kapplication.h&gt;</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;kdebug.h&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;kstandarddirs.h&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;kstaticdeleter.h&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;kurl.h&gt;</span>
<a name="l00035"></a>00035 
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;qdict.h&gt;</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include &lt;qpixmap.h&gt;</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include &lt;qvaluelist.h&gt;</span>
<a name="l00039"></a>00039 
<a name="l00040"></a>00040 <span class="keyword">namespace </span>Akregator {
<a name="l00041"></a>00041 
<a name="l00042"></a>00042 <span class="keyword">class </span>FeedIconManager::FeedIconManagerPrivate
<a name="l00043"></a>00043 {
<a name="l00044"></a>00044     <span class="keyword">public</span>:
<a name="l00045"></a>00045     QValueList&lt;Feed*&gt; registeredFeeds;
<a name="l00046"></a>00046     QDict&lt;Feed&gt; urlDict;
<a name="l00047"></a>00047 };
<a name="l00048"></a>00048 
<a name="l00049"></a>00049 FeedIconManager *FeedIconManager::m_instance = 0;
<a name="l00050"></a>00050 
<a name="l00051"></a>00051 <span class="keyword">static</span> KStaticDeleter&lt;FeedIconManager&gt; feediconmanagersd;
<a name="l00052"></a>00052 
<a name="l00053"></a>00053 FeedIconManager* FeedIconManager::self()
<a name="l00054"></a>00054 {
<a name="l00055"></a>00055     <span class="keywordflow">if</span> (!m_instance)
<a name="l00056"></a>00056         m_instance = feediconmanagersd.setObject(m_instance, <span class="keyword">new</span> FeedIconManager);
<a name="l00057"></a>00057     <span class="keywordflow">return</span> m_instance;
<a name="l00058"></a>00058 }
<a name="l00059"></a>00059 
<a name="l00060"></a>00060 <span class="keywordtype">void</span> FeedIconManager::fetchIcon(Feed* feed)
<a name="l00061"></a>00061 {
<a name="l00062"></a>00062     <span class="keywordflow">if</span> (!d-&gt;registeredFeeds.contains(feed))
<a name="l00063"></a>00063     {
<a name="l00064"></a>00064         d-&gt;registeredFeeds.append(feed);
<a name="l00065"></a>00065         connect(feed, SIGNAL(<a class="code" href="classAkregator_1_1TreeNode.html#fcef33edac2cf72ebd015ed3f0ad42a0" title="Emitted when this object is deleted.">signalDestroyed</a>(<a class="code" href="classAkregator_1_1TreeNode.html#4d50d114c306c99fc6a7bd6e56b59780" title="Standard constructor.">TreeNode</a>*)), <span class="keyword">this</span>, SLOT(slotFeedDestroyed(<a class="code" href="classAkregator_1_1TreeNode.html#4d50d114c306c99fc6a7bd6e56b59780" title="Standard constructor.">TreeNode</a>*)));
<a name="l00066"></a>00066     }
<a name="l00067"></a>00067     QString iconURL = getIconURL(KURL(feed-&gt;xmlUrl()));
<a name="l00068"></a>00068     d-&gt;urlDict.insert(iconURL, feed);
<a name="l00069"></a>00069     loadIcon(iconURL);
<a name="l00070"></a>00070 }
<a name="l00071"></a>00071 
<a name="l00072"></a>00072 FeedIconManager::FeedIconManager(QObject * <a class="code" href="classAkregator_1_1TreeNode.html#badc676b2769b5f3b245a5ba4f12faad" title="Returns the parent node.">parent</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
<a name="l00073"></a>00073 :  QObject(parent, name), DCOPObject(<span class="stringliteral">"FeedIconManager"</span>), d(new FeedIconManagerPrivate)
<a name="l00074"></a>00074 {
<a name="l00075"></a>00075     connectDCOPSignal(<span class="stringliteral">"kded"</span>,
<a name="l00076"></a>00076                       <span class="stringliteral">"favicons"</span>, <span class="stringliteral">"iconChanged(bool, QString, QString)"</span>,
<a name="l00077"></a>00077                       <span class="stringliteral">"slotIconChanged(bool, QString, QString)"</span>, <span class="keyword">false</span>);
<a name="l00078"></a>00078 }
<a name="l00079"></a>00079 
<a name="l00080"></a>00080 
<a name="l00081"></a>00081 FeedIconManager::~FeedIconManager()
<a name="l00082"></a>00082 {
<a name="l00083"></a>00083     <span class="keyword">delete</span> d;
<a name="l00084"></a>00084     d = 0;
<a name="l00085"></a>00085 }
<a name="l00086"></a>00086 
<a name="l00087"></a>00087 <span class="keywordtype">void</span> FeedIconManager::loadIcon(<span class="keyword">const</span> QString &amp; url)
<a name="l00088"></a>00088 {
<a name="l00089"></a>00089     KURL u(url);
<a name="l00090"></a>00090 
<a name="l00091"></a>00091     QString iconFile = iconLocation(u);
<a name="l00092"></a>00092     
<a name="l00093"></a>00093     <span class="keywordflow">if</span> (iconFile.isNull())
<a name="l00094"></a>00094     {
<a name="l00095"></a>00095         QByteArray data;
<a name="l00096"></a>00096         QDataStream ds(data, IO_WriteOnly);
<a name="l00097"></a>00097         ds &lt;&lt; u;
<a name="l00098"></a>00098         kapp-&gt;dcopClient()-&gt;send(<span class="stringliteral">"kded"</span>, <span class="stringliteral">"favicons"</span>, <span class="stringliteral">"downloadHostIcon(KURL)"</span>,
<a name="l00099"></a>00099                                  data);
<a name="l00100"></a>00100     }
<a name="l00101"></a>00101     <span class="keywordflow">else</span>
<a name="l00102"></a>00102         slotIconChanged(<span class="keyword">false</span>, url, iconFile);
<a name="l00103"></a>00103 
<a name="l00104"></a>00104 }
<a name="l00105"></a>00105 
<a name="l00106"></a>00106 QString FeedIconManager::getIconURL(<span class="keyword">const</span> KURL&amp; url)
<a name="l00107"></a>00107 {
<a name="l00108"></a>00108     <span class="keywordflow">return</span> <span class="stringliteral">"http://"</span> +url.host() + <span class="stringliteral">"/"</span>;
<a name="l00109"></a>00109 }
<a name="l00110"></a>00110 
<a name="l00111"></a>00111 QString FeedIconManager::iconLocation(<span class="keyword">const</span> KURL &amp; url)<span class="keyword"> const</span>
<a name="l00112"></a>00112 <span class="keyword"></span>{
<a name="l00113"></a>00113     QByteArray data, reply;
<a name="l00114"></a>00114     QCString replyType;
<a name="l00115"></a>00115     QDataStream ds(data, IO_WriteOnly);
<a name="l00116"></a>00116 
<a name="l00117"></a>00117     ds &lt;&lt; url;
<a name="l00118"></a>00118 
<a name="l00119"></a>00119     kapp-&gt;dcopClient()-&gt;call(<span class="stringliteral">"kded"</span>, <span class="stringliteral">"favicons"</span>, <span class="stringliteral">"iconForURL(KURL)"</span>, data,
<a name="l00120"></a>00120                              replyType, reply);
<a name="l00121"></a>00121 
<a name="l00122"></a>00122     <span class="keywordflow">if</span> (replyType == <span class="stringliteral">"QString"</span>) {
<a name="l00123"></a>00123         QDataStream replyStream(reply, IO_ReadOnly);
<a name="l00124"></a>00124         QString result;
<a name="l00125"></a>00125         replyStream &gt;&gt; result;
<a name="l00126"></a>00126         <span class="keywordflow">return</span> result;
<a name="l00127"></a>00127     }
<a name="l00128"></a>00128 
<a name="l00129"></a>00129     <span class="keywordflow">return</span> QString::null;
<a name="l00130"></a>00130 }
<a name="l00131"></a>00131 
<a name="l00132"></a>00132 <span class="keywordtype">void</span> FeedIconManager::slotFeedDestroyed(<a class="code" href="classAkregator_1_1TreeNode.html#4d50d114c306c99fc6a7bd6e56b59780" title="Standard constructor.">TreeNode</a>* node)
<a name="l00133"></a>00133 {
<a name="l00134"></a>00134     <a class="code" href="classAkregator_1_1Feed.html#84851953810b8330701abfd7015e8ff4" title="default constructor">Feed</a>* feed = <span class="keyword">dynamic_cast&lt;</span><a class="code" href="classAkregator_1_1Feed.html#84851953810b8330701abfd7015e8ff4" title="default constructor">Feed</a>*<span class="keyword">&gt;</span>(node);
<a name="l00135"></a>00135     <span class="keywordflow">if</span> (feed)
<a name="l00136"></a>00136         <span class="keywordflow">while</span> (d-&gt;registeredFeeds.contains(feed))
<a name="l00137"></a>00137             d-&gt;registeredFeeds.remove(d-&gt;registeredFeeds.find(feed));
<a name="l00138"></a>00138 }
<a name="l00139"></a>00139 
<a name="l00140"></a>00140 <span class="keywordtype">void</span> FeedIconManager::slotIconChanged(<span class="keywordtype">bool</span> <span class="comment">/*isHost*/</span>, <span class="keyword">const</span> QString&amp; hostOrURL,
<a name="l00141"></a>00141                                   <span class="keyword">const</span> QString&amp; iconName)
<a name="l00142"></a>00142 {
<a name="l00143"></a>00143     QString iconFile = KGlobal::dirs()-&gt;findResource(<span class="stringliteral">"cache"</span>,
<a name="l00144"></a>00144                                  iconName+<span class="stringliteral">".png"</span>);
<a name="l00145"></a>00145     <a class="code" href="classAkregator_1_1Feed.html#84851953810b8330701abfd7015e8ff4" title="default constructor">Feed</a>* f;
<a name="l00146"></a>00146     QPixmap p = QPixmap(iconFile);
<a name="l00147"></a>00147     <span class="keywordflow">if</span> (!p.isNull()) <span class="comment">// we don't set null pixmaps, as feed checks pixmap.isNull() to find out whether the icon was already loaded or not. It would request the icon another time, resulting an infinite loop (until stack overflow that is</span>
<a name="l00148"></a>00148     {
<a name="l00149"></a>00149         <span class="keywordflow">while</span> (( f = d-&gt;urlDict.take(hostOrURL) ))
<a name="l00150"></a>00150             <span class="keywordflow">if</span> (d-&gt;registeredFeeds.contains(f))
<a name="l00151"></a>00151                 f-&gt;setFavicon(p);
<a name="l00152"></a>00152     }
<a name="l00153"></a>00153     emit signalIconChanged(hostOrURL, iconFile);
<a name="l00154"></a>00154 }
<a name="l00155"></a>00155 
<a name="l00156"></a>00156 } <span class="comment">// namespace Akregator</span>
<a name="l00157"></a>00157 <span class="preprocessor">#include "feediconmanager.moc"</span>
</pre></div></div>
    </div></div>


      </td>
  </tr>
  <tr>
    <td valign="top" id="leftmenu" width="25%">
      <a name="navigation"></a>
      <div class="menu_box"><h2>akregator/src</h2>
<div class="nav_list">
<ul><li><a href="index.html">Main Page</a></li><li><a href="namespaces.html">Namespace List</a></li><li><a href="hierarchy.html">Class Hierarchy</a></li><li><a href="classes.html">Alphabetical List</a></li><li><a href="annotated.html">Class List</a></li><li><a href="files.html">File List</a></li><li><a href="functions.html">Class Members</a></li></ul>
<!--
<h2>Class Picker</h2>
<div style="text-align: center;">
<form name="guideform">
<select name="guidelinks" style="width:100%;" onChange="window.location=document.guideform.guidelinks.options[document.guideform.guidelinks.selectedIndex].value">
<option value="annotated.html">-- Choose --</option>
  <option value="classAkregator_1_1AboutData.html">akregator::aboutdata</option>,  <option value="classAkregator_1_1ActionManager.html">akregator::actionmanager</option>,  <option value="classAkregator_1_1ActionManagerImpl.html">akregator::actionmanagerimpl</option>,  <option value="classAkregator_1_1Article.html">akregator::article</option>,  <option value="classAkregator_1_1ArticleInterceptor.html">akregator::articleinterceptor</option>,  <option value="classAkregator_1_1ArticleInterceptorManager.html">akregator::articleinterceptormanager</option>,  <option value="classAkregator_1_1ArticleViewer.html">akregator::articleviewer</option>,  <option value="classAkregator_1_1Backend_1_1Category.html">akregator::backend::category</option>,  <option value="classAkregator_1_1Backend_1_1Storage.html">akregator::backend::storage</option>,  <option value="classAkregator_1_1Backend_1_1StorageDummyImpl.html">akregator::backend::storagedummyimpl</option>,  <option value="classAkregator_1_1Feed.html">akregator::feed</option>,  <option value="classAkregator_1_1FeedItem.html">akregator::feeditem</option>,  <option value="classAkregator_1_1FeedList.html">akregator::feedlist</option>,  <option value="classAkregator_1_1Filters_1_1AbstractMatcher.html">akregator::filters::abstractmatcher</option>,  <option value="classAkregator_1_1Filters_1_1ArticleFilter.html">akregator::filters::articlefilter</option>,  <option value="classAkregator_1_1Filters_1_1ArticleMatcher.html">akregator::filters::articlematcher</option>,  <option value="classAkregator_1_1Filters_1_1Criterion.html">akregator::filters::criterion</option>,  <option value="classAkregator_1_1Folder.html">akregator::folder</option>,  <option value="classAkregator_1_1KCursorSaver.html">akregator::kcursorsaver</option>,  <option value="classAkregator_1_1ListTabWidget.html">akregator::listtabwidget</option>,  <option value="classAkregator_1_1MainWindow.html">akregator::mainwindow</option>,  <option value="classAkregator_1_1NotificationManager.html">akregator::notificationmanager</option>,  <option value="classAkregator_1_1Part.html">akregator::part</option>,  <option value="classAkregator_1_1ProgressItemHandler.html">akregator::progressitemhandler</option>,  <option value="classAkregator_1_1ProgressManager.html">akregator::progressmanager</option>,  <option value="classAkregator_1_1SelectNodeDialog.html">akregator::selectnodedialog</option>,  <option value="classAkregator_1_1TagAction.html">akregator::tagaction</option>,  <option value="classAkregator_1_1TagSet.html">akregator::tagset</option>,  <option value="classAkregator_1_1TreeNode.html">akregator::treenode</option>,  <option value="classAkregator_1_1TreeNodeItem.html">akregator::treenodeitem</option>,  <option value="classAkregator_1_1View.html">akregator::view</option>,
</select>
</form>
</div>
-->
</div></div>
<div class="menu_box"><h2>API Dox</h2>
<div class="nav_list">
<ul>
<li><a href="../../../akregator/html/index.html">akregator</a></li><li>&nbsp;&nbsp;<a href="../../../akregator/src/html/index.html">src</a></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<a href="../../../akregator/src/librss/html/index.html">librss</a></li><li><a href="../../../certmanager/html/index.html">certmanager</a></li><li>&nbsp;&nbsp;<a href="../../../certmanager/lib/html/index.html">lib</a></li><li><a href="../../../kaddressbook/html/index.html">kaddressbook</a></li><li><a href="../../../kalarm/html/index.html">kalarm</a></li><li>&nbsp;&nbsp;<a href="../../../kalarm/lib/html/index.html">lib</a></li><li><a href="../../../kandy/html/index.html">kandy</a></li><li><a href="../../../karm/html/index.html">karm</a></li><li><a href="../../../kdgantt/html/index.html">kdgantt</a></li><li><a href="../../../kgantt/html/index.html">kgantt</a></li><li><a href="../../../kioslaves/html/index.html">kioslaves</a></li><li>&nbsp;&nbsp;<a href="../../../kioslaves/imap4/html/index.html">imap4</a></li><li>&nbsp;&nbsp;<a href="../../../kioslaves/mbox/html/index.html">mbox</a></li><li><a href="../../../kitchensync/html/index.html">kitchensync</a></li><li><a href="../../../kmail/html/index.html">kmail</a></li><li><a href="../../../knotes/html/index.html">knotes</a></li><li><a href="../../../konsolekalendar/html/index.html">konsolekalendar</a></li><li><a href="../../../kontact/html/index.html">kontact</a></li><li><a href="../../../korganizer/html/index.html">korganizer</a></li><li><a href="../../../kpilot/html/index.html">kpilot</a></li><li>&nbsp;&nbsp;<a href="../../../kpilot/kpilot/html/index.html">kpilot</a></li><li>&nbsp;&nbsp;<a href="../../../kpilot/lib/html/index.html">lib</a></li><li><a href="../../../libemailfunctions/html/index.html">libemailfunctions</a></li><li><a href="../../../libkcal/html/index.html">libkcal</a></li><li><a href="../../../libkdepim/html/index.html">libkdepim</a></li><li><a href="../../../libkholidays/html/index.html">libkholidays</a></li><li><a href="../../../libkmime/html/index.html">libkmime</a></li><li><a href="../../../libkpgp/html/index.html">libkpgp</a></li><li><a href="../../../libkpimidentities/html/index.html">libkpimidentities</a></li>
</ul></div></div>


        </td>
</tr>
</table>

<span class="doNotDisplay">
  <a href="http://www.kde.org/" accesskey="8">KDE Home</a> |
  <a href="http://accessibility.kde.org/" accesskey="9">KDE Accessibility Home</a> |
  <a href="http://www.kde.org/media/accesskeys.php" accesskey="0">Description of Access Keys</a>
</span>


<div style="height: 8px"></div>

<div id="footer">
  <div id="footer_left">
    Maintained by <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;groo&#116;&#64;kde&#46;or&#x67;">Adriaan de Groot</a>
and
<a href="&#109;a&#105;&#108;&#116;&#111;&#58;w&#105;nter&#64;kde&#46;or&#x67">Allen Winter</a>.
<br/>
    KDE and K Desktop Environment are trademarks of <a href="http://www.kde.org/areas/kde-ev/" title="Homepage of the KDE non-profit Organization">KDE e.V.</a> |
    <a href="http://www.kde.org/contact/impressum.php">Legal</a>
  </div>
  <div id="footer_right"><img src="/media/images/footer_right.png" style="margin: 0px" alt="" /></div>
</div>

<!--
WARNING: DO NOT SEND MAIL TO THE FOLLOWING EMAIL ADDRESS! YOU WILL
BE BLOCKED INSTANTLY AND PERMANENTLY!
<a href="mailto:aaaatrap-425acc3b5374943f@kde.org">Block me</a>
WARNING END
-->

</body>
</html>