• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • applications API Reference
  • KDE Home
  • Contact Us
 

Kate

  • kde-4.14
  • applications
  • kate
  • part
  • undo
katemodifiedundo.cpp
Go to the documentation of this file.
1 /* This file is part of the Kate project.
2  *
3  * Copyright (C) 2011 Dominik Haumann <dhaumann@kde.org>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB. If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20 
21 #include "katemodifiedundo.h"
22 
23 #include "kateundomanager.h"
24 #include "katedocument.h"
25 
26 #include <ktexteditor/cursor.h>
27 #include <ktexteditor/view.h>
28 
29 KateModifiedInsertText::KateModifiedInsertText (KateDocument *document, int line, int col, const QString &text)
30  : KateEditInsertTextUndo (document, line, col, text)
31 {
32  setFlag(RedoLine1Modified);
33  Kate::TextLine tl = document->plainKateTextLine(line);
34  Q_ASSERT(tl);
35  if (tl->markedAsModified()) {
36  setFlag(UndoLine1Modified);
37  } else {
38  setFlag(UndoLine1Saved);
39  }
40 }
41 
42 KateModifiedRemoveText::KateModifiedRemoveText (KateDocument *document, int line, int col, const QString &text)
43  : KateEditRemoveTextUndo (document, line, col, text)
44 {
45  setFlag(RedoLine1Modified);
46  Kate::TextLine tl = document->plainKateTextLine(line);
47  Q_ASSERT(tl);
48  if (tl->markedAsModified()) {
49  setFlag(UndoLine1Modified);
50  } else {
51  setFlag(UndoLine1Saved);
52  }
53 }
54 
55 KateModifiedWrapLine::KateModifiedWrapLine (KateDocument *document, int line, int col, int len, bool newLine)
56  : KateEditWrapLineUndo (document, line, col, len, newLine)
57 {
58  Kate::TextLine tl = document->plainKateTextLine(line);
59  Q_ASSERT(tl);
60  if (len > 0 || tl->markedAsModified()) {
61  setFlag(RedoLine1Modified);
62  } else if (tl->markedAsSavedOnDisk()) {
63  setFlag(RedoLine1Saved);
64  }
65 
66  if (col > 0 || len == 0 || tl->markedAsModified()) {
67  setFlag(RedoLine2Modified);
68  } else if (tl->markedAsSavedOnDisk()) {
69  setFlag(RedoLine2Saved);
70  }
71 
72  if (tl->markedAsModified()) {
73  setFlag(UndoLine1Modified);
74  } else if ((len > 0 && col > 0) || tl->markedAsSavedOnDisk()) {
75  setFlag(UndoLine1Saved);
76  }
77 }
78 
79 KateModifiedUnWrapLine::KateModifiedUnWrapLine (KateDocument *document, int line, int col, int len, bool removeLine)
80  : KateEditUnWrapLineUndo (document, line, col, len, removeLine)
81 {
82  Kate::TextLine tl = document->plainKateTextLine(line);
83  Kate::TextLine nextLine = document->plainKateTextLine(line + 1);
84  Q_ASSERT(tl);
85  Q_ASSERT(nextLine);
86 
87  const int len1 = tl->length();
88  const int len2 = nextLine->length();
89 
90  if (len1 > 0 && len2 > 0) {
91  setFlag(RedoLine1Modified);
92 
93  if (tl->markedAsModified()) {
94  setFlag(UndoLine1Modified);
95  } else {
96  setFlag(UndoLine1Saved);
97  }
98 
99  if (nextLine->markedAsModified()) {
100  setFlag(UndoLine2Modified);
101  } else {
102  setFlag(UndoLine2Saved);
103  }
104  } else if (len1 == 0) {
105  if (nextLine->markedAsModified()) {
106  setFlag(RedoLine1Modified);
107  } else if (nextLine->markedAsSavedOnDisk()) {
108  setFlag(RedoLine1Saved);
109  }
110 
111  if (tl->markedAsModified()) {
112  setFlag(UndoLine1Modified);
113  } else {
114  setFlag(UndoLine1Saved);
115  }
116 
117  if (nextLine->markedAsModified()) {
118  setFlag(UndoLine2Modified);
119  } else if (nextLine->markedAsSavedOnDisk()) {
120  setFlag(UndoLine2Saved);
121  }
122  } else { // len2 == 0
123  if (nextLine->markedAsModified()) {
124  setFlag(RedoLine1Modified);
125  } else if (nextLine->markedAsSavedOnDisk()) {
126  setFlag(RedoLine1Saved);
127  }
128 
129  if (tl->markedAsModified()) {
130  setFlag(UndoLine1Modified);
131  } else if (tl->markedAsSavedOnDisk()) {
132  setFlag(UndoLine1Saved);
133  }
134 
135  if (nextLine->markedAsModified()) {
136  setFlag(UndoLine2Modified);
137  } else {
138  setFlag(UndoLine2Saved);
139  }
140  }
141 }
142 
143 KateModifiedInsertLine::KateModifiedInsertLine (KateDocument *document, int line, const QString &text)
144  : KateEditInsertLineUndo (document, line, text)
145 {
146  setFlag(RedoLine1Modified);
147 }
148 
149 KateModifiedRemoveLine::KateModifiedRemoveLine (KateDocument *document, int line, const QString &text)
150  : KateEditRemoveLineUndo (document, line, text)
151 {
152  Kate::TextLine tl = document->plainKateTextLine(line);
153  Q_ASSERT(tl);
154  if (tl->markedAsModified()) {
155  setFlag(UndoLine1Modified);
156  } else {
157  setFlag(UndoLine1Saved);
158  }
159 }
160 
161 void KateModifiedInsertText::undo ()
162 {
163  KateEditInsertTextUndo::undo();
164 
165  KateDocument *doc = document();
166  Kate::TextLine tl = doc->plainKateTextLine(line());
167  Q_ASSERT(tl);
168 
169  tl->markAsModified(isFlagSet(UndoLine1Modified));
170  tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
171 }
172 
173 void KateModifiedRemoveText::undo ()
174 {
175  KateEditRemoveTextUndo::undo();
176 
177  KateDocument *doc = document();
178  Kate::TextLine tl = doc->plainKateTextLine(line());
179  Q_ASSERT(tl);
180 
181  tl->markAsModified(isFlagSet(UndoLine1Modified));
182  tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
183 }
184 
185 void KateModifiedWrapLine::undo ()
186 {
187  KateEditWrapLineUndo::undo();
188 
189  KateDocument *doc = document();
190  Kate::TextLine tl = doc->plainKateTextLine(line());
191  Q_ASSERT(tl);
192 
193  tl->markAsModified(isFlagSet(UndoLine1Modified));
194  tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
195 }
196 
197 void KateModifiedUnWrapLine::undo ()
198 {
199  KateEditUnWrapLineUndo::undo();
200 
201  KateDocument *doc = document();
202  Kate::TextLine tl = doc->plainKateTextLine(line());
203  Q_ASSERT(tl);
204 
205  tl->markAsModified(isFlagSet(UndoLine1Modified));
206  tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
207 
208  Kate::TextLine nextLine = doc->plainKateTextLine(line() + 1);
209  Q_ASSERT(nextLine);
210  nextLine->markAsModified(isFlagSet(UndoLine2Modified));
211  nextLine->markAsSavedOnDisk(isFlagSet(UndoLine2Saved));
212 }
213 
214 void KateModifiedInsertLine::undo ()
215 {
216  KateEditInsertLineUndo::undo();
217 
218  // no line modification needed, since the line is removed
219 }
220 
221 void KateModifiedRemoveLine::undo ()
222 {
223  KateEditRemoveLineUndo::undo();
224 
225  KateDocument *doc = document();
226  Kate::TextLine tl = doc->plainKateTextLine(line());
227  Q_ASSERT(tl);
228 
229  tl->markAsModified(isFlagSet(UndoLine1Modified));
230  tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
231 }
232 
233 
234 void KateModifiedRemoveText::redo ()
235 {
236  KateEditRemoveTextUndo::redo();
237 
238  KateDocument *doc = document();
239  Kate::TextLine tl = doc->plainKateTextLine(line());
240  Q_ASSERT(tl);
241 
242  tl->markAsModified(isFlagSet(RedoLine1Modified));
243  tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
244 }
245 
246 void KateModifiedInsertText::redo ()
247 {
248  KateEditInsertTextUndo::redo();
249 
250  KateDocument *doc = document();
251  Kate::TextLine tl = doc->plainKateTextLine(line());
252  Q_ASSERT(tl);
253 
254  tl->markAsModified(isFlagSet(RedoLine1Modified));
255  tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
256 }
257 
258 void KateModifiedUnWrapLine::redo ()
259 {
260  KateEditUnWrapLineUndo::redo();
261 
262  KateDocument *doc = document();
263  Kate::TextLine tl = doc->plainKateTextLine(line());
264  Q_ASSERT(tl);
265 
266  tl->markAsModified(isFlagSet(RedoLine1Modified));
267  tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
268 }
269 
270 void KateModifiedWrapLine::redo ()
271 {
272  KateEditWrapLineUndo::redo ();
273 
274  KateDocument *doc = document();
275  Kate::TextLine tl = doc->plainKateTextLine(line());
276  Q_ASSERT(tl);
277 
278  tl->markAsModified(isFlagSet(RedoLine1Modified));
279  tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
280 
281  Kate::TextLine nextLine = doc->plainKateTextLine(line() + 1);
282  Q_ASSERT(nextLine);
283 
284  nextLine->markAsModified(isFlagSet(RedoLine2Modified));
285  nextLine->markAsSavedOnDisk(isFlagSet(RedoLine2Saved));
286 }
287 
288 void KateModifiedRemoveLine::redo ()
289 {
290  KateEditRemoveLineUndo::redo();
291 
292  // no line modification needed, since the line is removed
293 }
294 
295 void KateModifiedInsertLine::redo ()
296 {
297  KateEditInsertLineUndo::redo();
298 
299  KateDocument *doc = document();
300  Kate::TextLine tl = doc->plainKateTextLine(line());
301  Q_ASSERT(tl);
302 
303  tl->markAsModified(isFlagSet(RedoLine1Modified));
304  tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
305 }
306 
307 void KateModifiedInsertText::updateRedoSavedOnDiskFlag(QBitArray & lines)
308 {
309  if (line() >= lines.size()) {
310  lines.resize(line() + 1);
311  }
312 
313  if (!lines.testBit(line())) {
314  lines.setBit(line());
315 
316  unsetFlag(RedoLine1Modified);
317  setFlag(RedoLine1Saved);
318  }
319 }
320 
321 void KateModifiedInsertText::updateUndoSavedOnDiskFlag(QBitArray & lines)
322 {
323  if (line() >= lines.size()) {
324  lines.resize(line() + 1);
325  }
326 
327  if (!lines.testBit(line())) {
328  lines.setBit(line());
329 
330  unsetFlag(UndoLine1Modified);
331  setFlag(UndoLine1Saved);
332  }
333 }
334 
335 void KateModifiedRemoveText::updateRedoSavedOnDiskFlag(QBitArray & lines)
336 {
337  if (line() >= lines.size()) {
338  lines.resize(line() + 1);
339  }
340 
341  if (!lines.testBit(line())) {
342  lines.setBit(line());
343 
344  unsetFlag(RedoLine1Modified);
345  setFlag(RedoLine1Saved);
346  }
347 }
348 
349 void KateModifiedRemoveText::updateUndoSavedOnDiskFlag(QBitArray & lines)
350 {
351  if (line() >= lines.size()) {
352  lines.resize(line() + 1);
353  }
354 
355  if (!lines.testBit(line())) {
356  lines.setBit(line());
357 
358  unsetFlag(UndoLine1Modified);
359  setFlag(UndoLine1Saved);
360  }
361 }
362 
363 void KateModifiedWrapLine::updateRedoSavedOnDiskFlag(QBitArray & lines)
364 {
365  if (line() + 1 >= lines.size()) {
366  lines.resize(line() + 2);
367  }
368 
369  if (isFlagSet(RedoLine1Modified) && !lines.testBit(line())) {
370  lines.setBit(line());
371 
372  unsetFlag(RedoLine1Modified);
373  setFlag(RedoLine1Saved);
374  }
375 
376  if (isFlagSet(RedoLine2Modified) && !lines.testBit(line() + 1)) {
377  lines.setBit(line() + 1);
378 
379  unsetFlag(RedoLine2Modified);
380  setFlag(RedoLine2Saved);
381  }
382 }
383 
384 void KateModifiedWrapLine::updateUndoSavedOnDiskFlag(QBitArray & lines)
385 {
386  if (line() >= lines.size()) {
387  lines.resize(line() + 1);
388  }
389 
390  if (isFlagSet(UndoLine1Modified) && !lines.testBit(line())) {
391  lines.setBit(line());
392 
393  unsetFlag(UndoLine1Modified);
394  setFlag(UndoLine1Saved);
395  }
396 }
397 
398 void KateModifiedUnWrapLine::updateRedoSavedOnDiskFlag(QBitArray & lines)
399 {
400  if (line() >= lines.size()) {
401  lines.resize(line() + 1);
402  }
403 
404  if (isFlagSet(RedoLine1Modified) && !lines.testBit(line())) {
405  lines.setBit(line());
406 
407  unsetFlag(RedoLine1Modified);
408  setFlag(RedoLine1Saved);
409  }
410 }
411 
412 void KateModifiedUnWrapLine::updateUndoSavedOnDiskFlag(QBitArray & lines)
413 {
414  if (line() + 1 >= lines.size()) {
415  lines.resize(line() + 2);
416  }
417 
418  if (isFlagSet(UndoLine1Modified) && !lines.testBit(line())) {
419  lines.setBit(line());
420 
421  unsetFlag(UndoLine1Modified);
422  setFlag(UndoLine1Saved);
423  }
424 
425  if (isFlagSet(UndoLine2Modified) && !lines.testBit(line() + 1)) {
426  lines.setBit(line() + 1);
427 
428  unsetFlag(UndoLine2Modified);
429  setFlag(UndoLine2Saved);
430  }
431 }
432 
433 void KateModifiedInsertLine::updateRedoSavedOnDiskFlag(QBitArray & lines)
434 {
435  if (line() >= lines.size()) {
436  lines.resize(line() + 1);
437  }
438 
439  if (!lines.testBit(line())) {
440  lines.setBit(line());
441 
442  unsetFlag(RedoLine1Modified);
443  setFlag(RedoLine1Saved);
444  }
445 }
446 
447 void KateModifiedRemoveLine::updateUndoSavedOnDiskFlag(QBitArray & lines)
448 {
449  if (line() >= lines.size()) {
450  lines.resize(line() + 1);
451  }
452 
453  if (!lines.testBit(line())) {
454  lines.setBit(line());
455 
456  unsetFlag(UndoLine1Modified);
457  setFlag(UndoLine1Saved);
458  }
459 }
460 
461 // kate: space-indent on; indent-width 2; replace-tabs on;
KateModifiedUnWrapLine::updateRedoSavedOnDiskFlag
void updateRedoSavedOnDiskFlag(QBitArray &lines)
Definition: katemodifiedundo.cpp:398
KateModifiedUnWrapLine::updateUndoSavedOnDiskFlag
void updateUndoSavedOnDiskFlag(QBitArray &lines)
Definition: katemodifiedundo.cpp:412
KateUndo::UndoLine1Modified
Definition: kateundo.h:121
KateModifiedRemoveText::undo
void undo()
undo this item
Definition: katemodifiedundo.cpp:173
KateUndo::UndoLine2Saved
Definition: kateundo.h:124
KateEditWrapLineUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:210
KateUndo::RedoLine2Modified
Definition: kateundo.h:126
QBitArray::resize
void resize(int size)
QBitArray::setBit
void setBit(int i)
KateModifiedRemoveLine::updateUndoSavedOnDiskFlag
void updateUndoSavedOnDiskFlag(QBitArray &lines)
Definition: katemodifiedundo.cpp:447
KateEditRemoveTextUndo
Definition: kateundo.h:190
katedocument.h
katemodifiedundo.h
KateEditInsertTextUndo
Definition: kateundo.h:150
KateUndo::RedoLine1Modified
Definition: kateundo.h:125
KateModifiedRemoveText::KateModifiedRemoveText
KateModifiedRemoveText(KateDocument *document, int line, int col, const QString &text)
Definition: katemodifiedundo.cpp:42
KateUndo::RedoLine2Saved
Definition: kateundo.h:128
KateEditUnWrapLineUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:203
KateModifiedInsertText::undo
void undo()
undo this item
Definition: katemodifiedundo.cpp:161
KateDocument::plainKateTextLine
Kate::TextLine plainKateTextLine(uint i)
Definition: katedocument.cpp:4712
KateEditRemoveTextUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:189
KateEditUnWrapLineUndo
Definition: kateundo.h:289
KateEditInsertTextUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:140
KateUndo::document
KateDocument * document()
Return the document the undo item belongs to.
Definition: kateundo.h:108
KateEditRemoveTextUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:147
KateModifiedInsertText::redo
void redo()
redo this item
Definition: katemodifiedundo.cpp:246
KateEditWrapLineUndo::line
int line() const
Definition: kateundo.h:280
KateUndo::UndoLine2Modified
Definition: kateundo.h:122
KateModifiedRemoveLine::KateModifiedRemoveLine
KateModifiedRemoveLine(KateDocument *document, int line, const QString &text)
Definition: katemodifiedundo.cpp:149
KateEditInsertTextUndo::line
int line() const
Definition: kateundo.h:182
QSharedPointer
KateModifiedInsertText::updateUndoSavedOnDiskFlag
void updateUndoSavedOnDiskFlag(QBitArray &lines)
Definition: katemodifiedundo.cpp:321
KateUndo::UndoLine1Saved
Definition: kateundo.h:123
KateModifiedInsertLine::redo
void redo()
redo this item
Definition: katemodifiedundo.cpp:295
KateModifiedRemoveText::updateRedoSavedOnDiskFlag
void updateRedoSavedOnDiskFlag(QBitArray &lines)
Definition: katemodifiedundo.cpp:335
KateModifiedWrapLine::KateModifiedWrapLine
KateModifiedWrapLine(KateDocument *document, int line, int col, int len, bool newLine)
Definition: katemodifiedundo.cpp:55
KateModifiedRemoveText::updateUndoSavedOnDiskFlag
void updateUndoSavedOnDiskFlag(QBitArray &lines)
Definition: katemodifiedundo.cpp:349
KateModifiedRemoveLine::redo
void redo()
redo this item
Definition: katemodifiedundo.cpp:288
KateModifiedWrapLine::updateUndoSavedOnDiskFlag
void updateUndoSavedOnDiskFlag(QBitArray &lines)
Definition: katemodifiedundo.cpp:384
KateModifiedInsertText::KateModifiedInsertText
KateModifiedInsertText(KateDocument *document, int line, int col, const QString &text)
Definition: katemodifiedundo.cpp:29
KateUndo::setFlag
void setFlag(ModificationFlag flag)
Definition: kateundo.h:131
KateEditUnWrapLineUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:161
KateEditWrapLineUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:154
QString
QBitArray
KateUndo::unsetFlag
void unsetFlag(ModificationFlag flag)
Definition: kateundo.h:135
KateEditInsertLineUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:168
KateEditRemoveLineUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:175
KateModifiedInsertText::updateRedoSavedOnDiskFlag
void updateRedoSavedOnDiskFlag(QBitArray &lines)
Definition: katemodifiedundo.cpp:307
KateEditWrapLineUndo
Definition: kateundo.h:259
KateModifiedRemoveText::redo
void redo()
redo this item
Definition: katemodifiedundo.cpp:234
KateModifiedUnWrapLine::redo
void redo()
redo this item
Definition: katemodifiedundo.cpp:258
KateDocument
Definition: katedocument.h:74
KateEditRemoveLineUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:217
KateModifiedRemoveLine::undo
void undo()
undo this item
Definition: katemodifiedundo.cpp:221
KateEditInsertTextUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:196
KateEditInsertLineUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:224
KateEditInsertLineUndo::line
int line() const
Definition: kateundo.h:340
KateUndo::RedoLine1Saved
Definition: kateundo.h:127
KateEditRemoveTextUndo::line
int line() const
Definition: kateundo.h:222
KateModifiedInsertLine::updateRedoSavedOnDiskFlag
void updateRedoSavedOnDiskFlag(QBitArray &lines)
Definition: katemodifiedundo.cpp:433
KateModifiedUnWrapLine::KateModifiedUnWrapLine
KateModifiedUnWrapLine(KateDocument *document, int line, int col, int len, bool removeLine)
Definition: katemodifiedundo.cpp:79
KateUndo::isFlagSet
bool isFlagSet(ModificationFlag flag) const
Definition: kateundo.h:139
kateundomanager.h
KateModifiedWrapLine::undo
void undo()
undo this item
Definition: katemodifiedundo.cpp:185
KateModifiedWrapLine::redo
void redo()
redo this item
Definition: katemodifiedundo.cpp:270
KateModifiedInsertLine::KateModifiedInsertLine
KateModifiedInsertLine(KateDocument *document, int line, const QString &text)
Definition: katemodifiedundo.cpp:143
KateModifiedInsertLine::undo
void undo()
undo this item
Definition: katemodifiedundo.cpp:214
KateModifiedUnWrapLine::undo
void undo()
undo this item
Definition: katemodifiedundo.cpp:197
KateEditRemoveLineUndo
Definition: kateundo.h:347
KateModifiedWrapLine::updateRedoSavedOnDiskFlag
void updateRedoSavedOnDiskFlag(QBitArray &lines)
Definition: katemodifiedundo.cpp:363
QBitArray::testBit
bool testBit(int i) const
QBitArray::size
int size() const
KateEditUnWrapLineUndo::line
int line() const
Definition: kateundo.h:310
KateEditRemoveLineUndo::line
int line() const
Definition: kateundo.h:368
KateEditInsertLineUndo
Definition: kateundo.h:319
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Sat May 9 2020 03:56:58 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Kate

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

applications API Reference

Skip menu "applications API Reference"
  •   kate
  •       kate
  •   KTextEditor
  •   Kate
  • Konsole

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal