File r889488.diff of Package kdepim4

Subject: kjots: fix paste of richtext and tabs becoming spaces bugs
From: wstephenson@suse.de
Bug: kde#160600,kde#175100
Patch-upstream: 889488
--- kjots/kjotsedit.cpp	(revision 889487)
+++ kjots/kjotsedit.cpp	(revision 889488)
@@ -39,6 +39,8 @@
 #include "kjotslinkdialog.h"
 #include "bookshelf.h"
 
+#include <kdebug.h>
+
 KJotsEdit::KJotsEdit ( QWidget *parent ) : KRichTextWidget(parent)
 {
     setAcceptRichText(true);
@@ -207,6 +209,37 @@ void KJotsEdit::insertFromMimeData ( con
                 insertHtml(html);
             }
         }
+     } else if( source->hasHtml() ) {
+        // Don't have an action to set top and bottom margins on paragraphs yet.
+        // Remove the margins for all inserted html.
+//         kDebug() << source->html();
+        QString str = source->html();
+        int styleBegin = 0;
+        while ((styleBegin = str.indexOf("style=\"", styleBegin, Qt::CaseInsensitive) + 7) != (-1 + 7)) {
+            int styleEnd = str.indexOf('"', styleBegin);
+            int styleFragmentStart = styleBegin;
+            int styleFragmentEnd = styleBegin;
+            while ((styleFragmentEnd = str.indexOf(";", styleFragmentEnd) + 1) != (-1 + 1)) {
+              if (styleFragmentEnd > styleEnd) break;
+              int fragmentLength = styleFragmentEnd-styleFragmentStart;
+              if (str.mid(styleFragmentStart, fragmentLength).contains("margin", Qt::CaseInsensitive))
+              {
+                str.remove(styleFragmentStart, fragmentLength);
+                styleEnd -= fragmentLength;
+                styleFragmentEnd = styleFragmentStart;
+
+                if (styleBegin == styleEnd)
+                {
+                  str.remove(styleBegin-7, 7+1); // remove the now empty style attribute.
+                }
+              } else {
+                styleFragmentStart = styleFragmentEnd;
+              }
+            }
+            styleBegin = styleEnd;
+        }
+//         kDebug() << str;
+        insertHtml(str);
     } else {
         KTextEdit::insertFromMimeData(source);
     }
--- kjots/kjotsentry.cpp	(revision 889487)
+++ kjots/kjotsentry.cpp	(revision 889488)
@@ -190,7 +190,7 @@ void KJotsEntry::parseXml( QDomElement &
 
 bool KJotsEntry::isKJotsLink(const QString &link)
 {
-    return link.startsWith(kjotsLinkStringPrefix()); 
+    return link.startsWith(kjotsLinkStringPrefix());
 }
 
 QString KJotsEntry::kjotsLinkUrl()
@@ -653,6 +653,11 @@ KJotsPage::KJotsPage()
     setIcon(0, KIconLoader::global()->loadIcon(QString("text-x-generic"), KIconLoader::Small));
     setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsDragEnabled
         | Qt::ItemIsEnabled);
+    // Don't have an action to set top and bottom margins on paragraphs.
+    // Set the margins to 0 for all inserted html. Lists get some padding top and bottom.
+    // See http://bugs.kde.org/show_bug.cgi?id=160600.
+    document.setDefaultStyleSheet( "p,h1,h2,h3,h4,h5,h6,pre,br{margin-top:0px;margin-bottom:0px;}ul{margin-top:12px;margin-bottom:12px;}" );
+
     connect(&document, SIGNAL(modificationChanged(bool)), SLOT(documentModified(bool)));
 }
 
@@ -750,10 +755,12 @@ void KJotsPage::parseXml( QDomElement &m
                     }
 
                     if ( oldBook ) {
-                        bodyText = Qt::convertFromPlainText(bodyText, Qt::WhiteSpaceNormal);
+                        // Ensure that whitespace is reproduced as in kjots of kde3.5.
+                        // https://bugs.kde.org/show_bug.cgi?id=175100
+                        document.setPlainText(bodyText);
+                    } else {
+                        document.setHtml(bodyText);
                     }
-
-                    document.setHtml(bodyText);
                 }
                 else
                 {
@@ -792,13 +799,13 @@ void KJotsPage::generateHtml( KJotsEntry
         }
     } else {
         //We need to fake QUrl in to thinking this is a real URL
-        
+
         html = "<table><tr><td>";
         html += QString("<h3><a name=\"%1\">&nbsp;</a><a href=\"%2\" >%3</a></h3>").arg(id()).arg(kjotsLinkUrl()).arg(htmlSubject);
         html += "</td></tr></table>";
     }
     html += "<br>";
-    
+
     cursorOut->insertFragment(QTextDocumentFragment::fromHtml(html));
     cursorOut->insertBlock(defaultBlockFormat, defaultCharFormat);
     html.clear(); //stop myself from making the same mistake over and over again.
Index: kjots/kjotsedit.cpp
===================================================================
Index: kjots/kjotsentry.cpp
===================================================================
openSUSE Build Service is sponsored by