SVN commit 1014363 by darioandres: Backport to 4.3(tested) of: SVN commit 1014360 by darioandres: - Reverting the last change to use CSS to global formatting, as it has major problems: - All the text is saved as html and that includes the proper formatting as html/css; so setting a global CSS style will not affect future changes. ("local css" > "global css" in priority) - It also conflicts with the way KRichTextEdit works - Set all the font changes using the KTextEdit "set*()" methods, but previously selecting all the text using QTextCursor (and then restoring the old cursor (restore text selection)) - On updateTextGeometry(), only the font family and size changes are applied. This are non-destructive changes as the user has no other way to set this settings beside using the Configuration Dialog; so we can do them at any time - Bold and italic settings are destructive (as setting a global bold/italic will override the custom formatting the user could have done when manually changing them using the Notes controls at the bottom) - So, we are going to apply this destructive global changes only if needed (if any of them changed in the configuration dialog) - Small fix on load: Do not load the font properties on the Configuration Dialog as the font() property of the textedit. This is not true, we should use our stored var "m_font" which properly loads the settings from the config file CCBUG: 204308 M +39 -9 notes.cpp --- branches/KDE/4.3/kdeplasma-addons/applets/notes/notes.cpp #1014362:1014363 @@ -412,12 +412,20 @@ m_layout->setContentsMargins(xpad, ypad, xpad, ypad); m_font.setPointSize(fontSize()); - QString cssWeight = m_font.bold() ? "bold" : "normal"; - QString cssStyle = m_font.italic() ? "italic" : "normal"; - QString cssSize = QString::number(m_font.pointSize()) + QString("pt"); - QString css = QString("QTextEdit { font-family:%1; font-size:%2; font-weight:%3;" - "font-style:%4; }").arg(m_font.family(), cssSize, cssWeight, cssStyle); - m_textEdit->nativeWidget()->setStyleSheet(css); + //Save the current text selection + QTextCursor oldTextCursor = m_textEdit->nativeWidget()->textCursor(); + + //Select all the text to set the new style + QTextCursor allSelection = oldTextCursor; + allSelection.select(QTextCursor::Document); + m_textEdit->nativeWidget()->setTextCursor(allSelection); + + //Apply the new font family and size + m_textEdit->nativeWidget()->setFontFamily(m_font.family()); + m_textEdit->nativeWidget()->setFontPointSize(m_font.pointSize()); + + //Restore the text selection + m_textEdit->nativeWidget()->setTextCursor(oldTextCursor); } } @@ -517,9 +525,9 @@ ui.textColorButton->setColor(m_textColor); ui.textBackgroundColorButton->setColor(m_textBackgroundColor); - ui.fontStyleComboBox->setCurrentFont(m_textEdit->nativeWidget()->font()); - ui.fontBoldCheckBox->setChecked(m_textEdit->nativeWidget()->font().bold()); - ui.fontItalicCheckBox->setChecked(m_textEdit->nativeWidget()->font().italic()); + ui.fontStyleComboBox->setCurrentFont(m_font); + ui.fontBoldCheckBox->setChecked(m_font.bold()); + ui.fontItalicCheckBox->setChecked(m_font.italic()); ui.autoFont->setChecked(m_autoFont); ui.autoFontPercent->setEnabled(m_autoFont); ui.customFont->setChecked(!m_autoFont); @@ -561,6 +569,28 @@ QFont newFont = ui.fontStyleComboBox->currentFont(); newFont.setBold(ui.fontBoldCheckBox->isChecked()); newFont.setItalic(ui.fontItalicCheckBox->isChecked()); + + //Apply bold and italic changes (if any) here (this is destructive formatting) + bool boldChanged = (m_font.bold() != newFont.bold()); + bool italicChanged = (m_font.italic() != newFont.italic()); + if (boldChanged || italicChanged) { + //Save previous selection + QTextCursor oldCursor = m_textEdit->nativeWidget()->textCursor(); + //Apply new global formatting + QTextCursor allSelection = oldCursor; + allSelection.select(QTextCursor::Document); + m_textEdit->nativeWidget()->setTextCursor(allSelection); + if (boldChanged) { + m_textEdit->nativeWidget()->setFontWeight(newFont.weight()); + } + if (italicChanged) { + m_textEdit->nativeWidget()->setFontItalic(newFont.italic()); + } + //Restore previous selection + m_textEdit->nativeWidget()->setTextCursor(oldCursor); + } + + //Save font settings to config if (m_font != newFont) { changed = true; cg.writeEntry("font", newFont);