Bug 410341

Summary: Exif checkboxes ‘Fired’, ‘Function’ and ‘Red-eye remove’ all act as *one* checkbox
Product: [Applications] krita Reporter: Karl Ove Hufthammer <karl>
Component: GeneralAssignee: amyspark <amy>
Status: RESOLVED FIXED    
Severity: normal CC: amy, griffinvalley, tamtamy.tymona
Priority: NOR    
Version: git master (please specify the git hash!)   
Target Milestone: ---   
Platform: Other   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Karl Ove Hufthammer 2019-07-29 08:11:22 UTC
SUMMARY
Checking the ‘Fired’, ‘Function’ or ‘Red-eye remove’ checkboxes in the Exif metadata enables/disables *all* three checkboxes. That is, they basically act as *one* checkbox.


STEPS TO REPRODUCE
1. Open/create an image.
2. Go to ‘Layer → Edit metadata → Exif → Flash’
3. Click either the ‘Fired’, ‘Function’ or ‘Red-eye remove’ checkboxes.
4. Repeat step 3.

OBSERVED RESULT
The three checkboxes ‘Fired’, ‘Function’ or ‘Red-eye remove’ are all enabled/disabled when you click one of them.


EXPECTED RESULT
I’m not sure what ‘Function’ refers to, but the checkboxes should at least be *partially* independent.
Comment 1 Tiar 2019-09-26 18:32:09 UTC
Related: bug 396669

It looks like metadata are kind of broken anyway. I could "fix this" by making it behave independently, but... I can't test if it breaks anything, because most of the code in metadata is either broken or wrong.

The reason why all those checkboxes behave as one is that they are all distinguished as "exif:Flash" instead of "exif:Flash:Fired" etc. because exif:Flash, differently from all other fields in exif: scheme, is a structure (which means it contains other fields inside). The code looks like someone knew about it, but later forgot or at least forgot to check it in practice.

The second/main reason is that all updates in one widget are propagated to all other widgets using the name of the property as the only thing that differentiate between what should get the notification and what shouldn't. All checkboxes has a property called "checked", which is why when one changes its "checked" status, they all change it too.

Looks like the main reason for all those trouble is not separating the model and the view enough.

I'm gonna unassign myself now. This bug depends on untangling the metadata code and fixing other bugs. It shouldn't be very difficult, but it will take some time, especially because half of the information is in .ui files and schemes.
Comment 2 Tiar 2019-09-26 18:49:56 UTC
Relevant files:

plugins/extensions/metadataeditor/kis_entry_editor.cpp
plugins/extensions/metadataeditor/kis_metadata_editor.cpp
plugins/extensions/metadataeditor/editors/exif.ui
krita/data/metadata/schemas/exif.schema

The most relevant functions are void KisEntryEditor::valueChanged() and KisMetaDataEditor::KisMetaDataEditor(QWidget* parent, KisMetaData::Store* originalStore)
Comment 3 Bug Janitor Service 2021-08-17 02:36:26 UTC
A possibly relevant merge request was started @ https://invent.kde.org/graphics/krita/-/merge_requests/1004
Comment 4 amyspark 2021-08-17 16:38:56 UTC
Git commit db407cd7993794ebb125ae63b720e11325f7365c by L. E. Segovia.
Committed on 17/08/2021 at 16:37.
Pushed by lsegovia into branch 'master'.

Metadata editor: reimplement entry handling

This commit implements entry handling based entirely on a few compile
time macros and Qt's newer signal/slot syntax.

This allows me to add support for flash metadata, which was
broken since at least 67b39577b6dc9e5f2e5e2885b2188cbd393c55f6.

While at it, add a default icon to the Dublin Core pane; the old one in
the xmlgui file was missing since forever.

CCMAIL: kimageshop@kde.org

M  +0    -6    Messages.sh
M  +0    -1    plugins/extensions/metadataeditor/CMakeLists.txt
M  +12   -30   plugins/extensions/metadataeditor/editors/dublincore.ui
D  +0    -33   plugins/extensions/metadataeditor/editors/dublincore.xmlgui
M  +4    -101  plugins/extensions/metadataeditor/editors/exif.ui
D  +0    -157  plugins/extensions/metadataeditor/editors/exif.xmlgui
M  +144  -99   plugins/extensions/metadataeditor/kis_meta_data_editor.cc
M  +1    -0    plugins/extensions/metadataeditor/kis_meta_data_editor.h

https://invent.kde.org/graphics/krita/commit/db407cd7993794ebb125ae63b720e11325f7365c
Comment 5 amyspark 2021-08-25 01:50:50 UTC
Git commit 8702bb9001eb09519e5b8f49d3634816f8db398d by L. E. Segovia.
Committed on 25/08/2021 at 01:48.
Pushed by lsegovia into branch 'krita/5.0'.

Metadata editor: reimplement entry handling

This commit implements entry handling based entirely on a few compile
time macros and Qt's newer signal/slot syntax.

This allows me to add support for flash metadata, which was
broken since at least 67b39577b6dc9e5f2e5e2885b2188cbd393c55f6.

While at it, add a default icon to the Dublin Core pane; the old one in
the xmlgui file was missing since forever.

CCMAIL: kimageshop@kde.org
(cherry picked from commit db407cd7993794ebb125ae63b720e11325f7365c)

M  +0    -6    Messages.sh
M  +0    -1    plugins/extensions/metadataeditor/CMakeLists.txt
M  +12   -30   plugins/extensions/metadataeditor/editors/dublincore.ui
D  +0    -33   plugins/extensions/metadataeditor/editors/dublincore.xmlgui
M  +4    -101  plugins/extensions/metadataeditor/editors/exif.ui
D  +0    -157  plugins/extensions/metadataeditor/editors/exif.xmlgui
M  +144  -99   plugins/extensions/metadataeditor/kis_meta_data_editor.cc
M  +1    -0    plugins/extensions/metadataeditor/kis_meta_data_editor.h

https://invent.kde.org/graphics/krita/commit/8702bb9001eb09519e5b8f49d3634816f8db398d