summaryrefslogtreecommitdiffstats
path: root/opensuse/core/tdebase/khelpcenter-gnome-support-legacy.patch
diff options
context:
space:
mode:
Diffstat (limited to 'opensuse/core/tdebase/khelpcenter-gnome-support-legacy.patch')
-rw-r--r--opensuse/core/tdebase/khelpcenter-gnome-support-legacy.patch327
1 files changed, 327 insertions, 0 deletions
diff --git a/opensuse/core/tdebase/khelpcenter-gnome-support-legacy.patch b/opensuse/core/tdebase/khelpcenter-gnome-support-legacy.patch
new file mode 100644
index 000000000..fb9a11ee4
--- /dev/null
+++ b/opensuse/core/tdebase/khelpcenter-gnome-support-legacy.patch
@@ -0,0 +1,327 @@
+Index: khelpcenter/table-of-contents.xslt
+================================================================================
+--- khelpcenter/docentry.cpp
++++ khelpcenter/docentry.cpp
+@@ -1,5 +1,6 @@
+ #include <qregexp.h>
+ #include <qfileinfo.h>
++#include <stdlib.h>
+
+ #include <kdebug.h>
+ #include <kdesktopfile.h>
+@@ -206,6 +207,37 @@
+ {
+ KDesktopFile file( fileName );
+
++ static QString desktop;
++ if (desktop.isNull()) {
++ QString win_man = getenv("WINDOWMANAGER");
++ if (win_man.contains ("gnome", FALSE))
++ desktop = "GNOME";
++ else if (win_man.contains ("kde", FALSE))
++ desktop = "KDE";
++ else
++ desktop = "";
++ kdDebug() << "DocEntry::desktop = " << desktop << endl;
++ };
++
++ QString onlyShowIn = file.readEntry ("OnlyShowIn");
++
++ kdDebug() << "DocEntry::readFromFile(): " << fileName << " onlyShowIn = " << onlyShowIn << endl;
++
++ if ( !onlyShowIn.isNull() ) {
++ if (desktop.isEmpty())
++ return false;
++ QStringList list = QStringList::split (";", onlyShowIn);
++ if ( ! list.contains (desktop) )
++ return false;
++ }
++
++ QString notShowIn = file.readEntry ("NotShowIn");
++ if ( !notShowIn.isNull() ) {
++ QStringList list = QStringList::split (";", notShowIn);
++ if ( list.contains (desktop) )
++ return false;
++ }
++
+ mName = file.readName();
+ mSearch = file.readEntry( "X-DOC-Search" );
+ mIcon = file.readIcon();
+--- khelpcenter/navigator.cpp
++++ khelpcenter/navigator.cpp
+@@ -22,6 +22,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
++#include <stdlib.h>
+
+ #include <qdir.h>
+ #include <qfile.h>
+@@ -275,6 +276,38 @@
+ const QString &file )
+ {
+ KDesktopFile desktopFile( file );
++
++ static QString desktop;
++ if (desktop.isNull()) {
++ QString win_man = getenv("WINDOWMANAGER");
++ if (win_man.contains ("gnome", FALSE))
++ desktop = "GNOME";
++ else if (win_man.contains ("kde", FALSE))
++ desktop = "KDE";
++ else
++ desktop = "";
++ kdDebug() << "Navigator::desktop = " << desktop << endl;
++ };
++
++ QString onlyShowIn = desktopFile.readEntry ("OnlyShowIn");
++
++ kdDebug() << "Navigator::createItemFromDesktopFile(): " << file << " onlyShowIn = " << onlyShowIn << endl;
++
++ if ( !onlyShowIn.isNull() ) {
++ if (desktop.isEmpty())
++ return;
++ QStringList list = QStringList::split (";", onlyShowIn);
++ if ( ! list.contains (desktop) )
++ return;
++ }
++
++ QString notShowIn = desktopFile.readEntry ("NotShowIn");
++ if ( !notShowIn.isNull() ) {
++ QStringList list = QStringList::split (";", notShowIn);
++ if ( list.contains (desktop) )
++ return;
++ }
++
+ QString docPath = desktopFile.readDocPath();
+ if ( !docPath.isNull() ) {
+ // First parameter is ignored if second is an absolute path
+@@ -317,6 +350,9 @@
+ {
+ alternativeURL.setQuery("anchor="+url.ref());
+ alternativeURL.setRef(QString::null);
++ } else if (url.url().endsWith("/index.html"))
++ {
++ alternativeURL = KURL (url.url().left (url.url().length() - strlen ("/index.html")));
+ }
+
+ // If the navigator already has the given URL selected, do nothing.
+@@ -401,15 +437,43 @@
+ TOC *tocTree = item->createTOC();
+ kdDebug( 1400 ) << "slotItemSelected(): Trying to build TOC for "
+ << item->entry()->name() << endl;
+- tocTree->setApplication( url.directory() );
++ if (url.directory() != "/")
++ tocTree->setApplication( url.directory() );
++ else
++ tocTree->setApplication( url.path() );
+ QString doc = View::langLookup( url.path() );
+ // Enforce the original .docbook version, in case langLookup returns a
+ // cached version
+ if ( !doc.isNull() ) {
+- int pos = doc.find( ".html" );
+- if ( pos >= 0 ) {
+- doc.replace( pos, 5, ".docbook" );
+- }
++ if (doc.endsWith( ".html" )) {
++ doc = doc.left (doc.length() - 5) + ".docbook";
++ }
++
++ QFileInfo di (doc);
++ if (!di.isFile()) {
++
++ int last_slash = doc.findRev ('/');
++ if (last_slash >= 1) {
++
++ QString filename = doc.right(doc.length() - last_slash - 1);
++ if (filename == "index.html" || filename == "") {
++
++ int slash2 = doc.findRev('/', last_slash -1);
++ if (slash2 != -1 && slash2 != 0) {
++
++ int slash3 = doc.findRev('/', slash2 - 1);
++ if (slash3 != -1) {
++ QString xml_file = doc.left(last_slash) + "/" + doc.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml";
++ kdDebug() << "xml_file " << xml_file << endl;
++ QFileInfo fi(xml_file);
++ if (fi.exists())
++ doc = xml_file;
++
++ }
++ }
++ }
++ }
++ }
+ kdDebug( 1400 ) << "slotItemSelected(): doc = " << doc << endl;
+
+ tocTree->build( doc );
+--- khelpcenter/navigatorappitem.cpp
++++ khelpcenter/navigatorappitem.cpp
+@@ -21,6 +21,8 @@
+
+ #include "docentry.h"
+
++#include <stdlib.h>
++
+ #include <kdebug.h>
+ #include <kservicegroup.h>
+
+@@ -134,11 +136,42 @@
+
+ QString NavigatorAppItem::documentationURL( KService *s )
+ {
++ static QString desktop;
++ if (desktop.isNull()) {
++ QString win_man = getenv("WINDOWMANAGER");
++ if (win_man.contains ("gnome", FALSE))
++ desktop = "GNOME";
++ else if (win_man.contains ("kde", FALSE))
++ desktop = "KDE";
++ else
++ desktop = "";
++ kdDebug() << "NavigatorAppItem::desktop = " << desktop << endl;
++ };
++
++ QString onlyShowIn = s->property("OnlyShowIn", QVariant::String).toString();
++
++ kdDebug() << "NavigatorAppItem::onlyShowIn = " << onlyShowIn << endl;
++
++ if ( !onlyShowIn.isNull() ) {
++ if (desktop.isEmpty())
++ return QString::null;
++ QStringList list = QStringList::split (";", onlyShowIn);
++ if ( ! list.contains (desktop) )
++ return QString::null;
++ }
++
++ QString notShowIn = s->property("NotShowIn", QVariant::String).toString();
++ if ( !notShowIn.isNull() ) {
++ QStringList list = QStringList::split (";", notShowIn);
++ if ( list.contains (desktop) )
++ return QString::null;
++ }
++
+ QString docPath = s->property( "DocPath" ).toString();
+ if ( docPath.isEmpty() )
+ return QString::null;
+
+- if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) )
++ if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) || docPath.startsWith( "ghelp:" ))
+ return docPath;
+
+ return QString( "help:/" ) + docPath;
+--- khelpcenter/table-of-contents.xslt
++++ khelpcenter/table-of-contents.xslt
+@@ -8,6 +8,12 @@
+ </table-of-contents>
+ </xsl:template>
+
++<xsl:template match="article">
++<table-of-contents>
++<xsl:apply-templates select="sect1"/>
++</table-of-contents>
++</xsl:template>
++
+ <xsl:template match="chapter">
+ <chapter>
+ <title><xsl:value-of select="title"/></title>
+@@ -20,7 +26,15 @@
+ <section>
+ <title><xsl:value-of select="title"/></title>
+ <anchor><xsl:value-of select="@id"/></anchor>
++<xsl:apply-templates select="sect2"/>
+ </section>
+ </xsl:template>
+
++<xsl:template match="sect2">
++<subsection>
++<title><xsl:value-of select="title"/></title>
++<anchor><xsl:value-of select="@id"/></anchor>
++</subsection>
++</xsl:template>
++
+ </xsl:stylesheet>
+--- khelpcenter/view.cpp
++++ khelpcenter/view.cpp
+@@ -146,21 +146,51 @@
+ // assemble the local search paths
+ const QStringList localDoc = KGlobal::dirs()->resourceDirs("html");
+
++ kdDebug() << "Looking up help for: " << fname << endl;
++
++ QString path;
++ QString file_name;
++ int slash = fname.findRev ('/');
++ if (slash == -1 || slash == 0) {
++ path = fname;
++ file_name = "/";
++ } else {
++ path = fname.left (slash);
++ file_name = fname.right (fname.length() - slash);
++ }
++
++ QStringList langs = KGlobal::locale()->languageList();
++ QStringList::ConstIterator lang;
++ for (lang = langs.begin(); lang != langs.end(); ++lang)
++ if (*lang == "en")
++ search.append(QString("/opt/gnome/share/gnome/help/%1/C%2").arg(path).arg(file_name));
++ else
++ search.append(QString("/opt/gnome/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(file_name));
++
++ langs.append( "en" );
++ langs.remove( "C" );
++
++ // this is kind of compat hack as we install our docs in en/ but the
++ // default language is en_US
++ for (QStringList::Iterator it = langs.begin(); it != langs.end(); ++it)
++ if ( *it == "en_US" )
++ *it = "en";
++
+ // look up the different languages
+- for (int id=localDoc.count()-1; id >= 0; --id)
++ int ldCount = localDoc.count();
++ for (int id=0; id < ldCount; id++)
+ {
+- QStringList langs = KGlobal::locale()->languageList();
+- langs.append( "en" );
+- langs.remove( "C" );
+ QStringList::ConstIterator lang;
+ for (lang = langs.begin(); lang != langs.end(); ++lang)
+- search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(fname));
++ search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(path + file_name));
+ }
+
+ // try to locate the file
+ QStringList::Iterator it;
+ for (it = search.begin(); it != search.end(); ++it)
+ {
++ kdDebug() << "Looking for help in: " << *it << endl;
++
+ QFileInfo info(*it);
+ if (info.exists() && info.isFile() && info.isReadable())
+ return *it;
+@@ -168,7 +198,7 @@
+ // Fall back to the index.docbook for this language if we couldn't find its
+ // specific docbook file. If we are not looking up docbook (images,
+ // css etc) then look in other languages first.
+- if ( ( *it ).endsWith( "docbook" ) )
++ if ( ( *it ).endsWith( "docbook" ) || ( *it).endsWith( ".xml") )
+ {
+ QString file = (*it).left((*it).findRev('/')) + "/index.docbook";
+ info.setFile(file);
+@@ -176,9 +206,15 @@
+ {
+ return *it;
+ }
++
++ file = (*it).left((*it).findRev('/')) + "/" + path + ".xml";
++ info.setFile(file);
++ if (info.exists() && info.isFile() && info.isReadable())
++ return *it;
+ }
+ }
+
++
+ return QString::null;
+ }
+