Bug 452994

Summary: Name field doesn't seem to have any history; cannot undo or redo any text changes with Ctrl+Z or Shift+Ctrl+Z
Product: [Frameworks and Libraries] frameworks-kio Reporter: redashesyellowflowers
Component: Open/save dialogsAssignee: KIO Bugs <kio-bugs-null>
Status: RESOLVED FIXED    
Severity: normal CC: a.samirh78, kdelibs-bugs, nate
Priority: NOR Keywords: usability
Version: 5.93.0   
Target Milestone: ---   
Platform: Fedora RPMs   
OS: Linux   
Latest Commit: Version Fixed In: 5.97

Description redashesyellowflowers 2022-04-25 15:52:00 UTC
SUMMARY
***
KDialog's Name field doesn't seem to have any history. Cannot undo or redo any text changes with Ctrl+Z or Shift+Ctrl+Z. I'm not sure if this is a bug or a feature request as I'm not sure if KDialog has this feature but it's turned off for some reason.
***

STEPS TO REPRODUCE
1. Open a browser, and try to save an element. KDialog opens. 
2. Type some text into the Name field.
3. Try to use Ctrl+Z or Shift+Ctrl+Z to undo or redo the changes.

OBSERVED RESULT

There doesn't seem to be any text history saved, so you can't undo or redo the changes.


EXPECTED RESULT

The problem is that if I spend 30 seconds typing some text to customize my file name just as I want it, and accidentally select a file in the Directory Contents view, I lose everything I typed. Or if I copy and paste text into the field and accidently overwrite existing text, I lose all my previous text. This happens annoyingly often. 

A dialog manager needs a text history feature.

SOFTWARE/OS VERSIONS
Windows: 
macOS: 
Linux/KDE Plasma: KDE Neon 20.04; Fedora 35

[Fedora KDE 35 Version Numbers Below]
KDE Plasma Version: 5.24.4
KDE Frameworks Version: 5.91.0
Qt Version: 5.15.2

ADDITIONAL INFORMATION
Comment 2 Ahmad Samir 2022-07-03 19:52:38 UTC
Git commit 331aad501acea58013a7cf89e18919f945394396 by Ahmad Samir.
Committed on 03/07/2022 at 19:26.
Pushed by ahmadsamir into branch 'master'.

KFileWidget: remove location history dummy-entry related code

This code was used in m_locationEdit ("Name" combobox).

The issue with this code is that it ultimately invokes QLineEdit::setText(),
which resets the undo/redo steps for the text in the lineedit at index -1,
with every key press event.

So we lose one functionality, showing the corresponding icon for the url in
the lineedit, but gain the undo/redo functionality, the latter being a
functionality that is available/expectted in all Qt/KDE lineedits.

0x00007ffff6b9aa40 in QLineEdit::setText(QString const&)@plt () from /lib64/libQt5Widgets.so.5
0x00007ffff6cb8a83 in QComboBoxPrivate::_q_dataChanged (this=0x5555558f9560, topLeft=..., bottomRight=...)

0x00007ffff5e23235 in QAbstractItemModel::dataChanged (this=this@entry=0x5555558f9800, _t1=..., _t2=..., _t3=...)
0x00007ffff66d7780 in QStandardItemModelPrivate::itemChanged (this=<optimized out>, item=item@entry=0x555555d8cfe0, roles=...)
0x00007ffff66d7ff8 in QStandardItem::setData (this=0x555555d8cfe0, value=..., role=<optimized out>)
0x00007ffff66db16c in QStandardItemModel::setData (role=1, value=..., index=..., this=0x5555558f9800)
QStandardItemModel::setData (this=this@entry=0x5555558f9800, index=..., value=..., role=role@entry=1)
0x00007ffff6cb369f in QComboBox::setItemIcon (this=<optimized out>, index=index@entry=0, icon=...)
0x00007ffff7f30501 in KFileWidgetPrivate::setDummyHistoryEntry (this=this@entry=0x5555556ddbb0, text=..., icon=...,
  usePreviousPixmapIfNull=usePreviousPixmapIfNull@entry=true)

M  +11   -107  src/filewidgets/kfilewidget.cpp

https://invent.kde.org/frameworks/kio/commit/331aad501acea58013a7cf89e18919f945394396
Comment 3 Christoph Cullmann 2023-05-15 19:49:14 UTC
Git commit 42395623a8fb577a70188b7db6d2b5c42386867c by Christoph Cullmann, on behalf of Ahmad Samir.
Committed on 15/05/2023 at 19:48.
Pushed by cullmann into branch 'master'.

KFileWidget: remove location history dummy-entry related code

This code was used in m_locationEdit ("Name" combobox).

The issue with this code is that it ultimately invokes QLineEdit::setText(),
which resets the undo/redo steps for the text in the lineedit at index -1,
with every key press event.

So we lose one functionality, showing the corresponding icon for the url in
the lineedit, but gain the undo/redo functionality, the latter being a
functionality that is available/expectted in all Qt/KDE lineedits.

0x00007ffff6b9aa40 in QLineEdit::setText(QString const&)@plt () from /lib64/libQt5Widgets.so.5
0x00007ffff6cb8a83 in QComboBoxPrivate::_q_dataChanged (this=0x5555558f9560, topLeft=..., bottomRight=...)

0x00007ffff5e23235 in QAbstractItemModel::dataChanged (this=this@entry=0x5555558f9800, _t1=..., _t2=..., _t3=...)
0x00007ffff66d7780 in QStandardItemModelPrivate::itemChanged (this=<optimized out>, item=item@entry=0x555555d8cfe0, roles=...)
0x00007ffff66d7ff8 in QStandardItem::setData (this=0x555555d8cfe0, value=..., role=<optimized out>)
0x00007ffff66db16c in QStandardItemModel::setData (role=1, value=..., index=..., this=0x5555558f9800)
QStandardItemModel::setData (this=this@entry=0x5555558f9800, index=..., value=..., role=role@entry=1)
0x00007ffff6cb369f in QComboBox::setItemIcon (this=<optimized out>, index=index@entry=0, icon=...)
0x00007ffff7f30501 in KFileWidgetPrivate::setDummyHistoryEntry (this=this@entry=0x5555556ddbb0, text=..., icon=...,
  usePreviousPixmapIfNull=usePreviousPixmapIfNull@entry=true)

M  +11   -107  src/filewidgets/kfilewidget.cpp

https://invent.kde.org/frameworks/kio/commit/42395623a8fb577a70188b7db6d2b5c42386867c