Bug 365467

Summary: Apply button remains active after changes applied in kscreen KCM
Product: [Plasma] KScreen Reporter: Martin Riethmayer <ripper>
Component: kcmAssignee: Sebastian Kügler <sebas>
Status: RESOLVED FIXED    
Severity: minor Keywords: multiscreen
Priority: NOR    
Version First Reported In: 5.7.0   
Target Milestone: ---   
Platform: Neon   
OS: Linux   
Latest Commit: Version Fixed/Implemented In: 5.7.3
Sentry Crash Report:

Description Martin Riethmayer 2016-07-12 12:51:18 UTC
The KScreen KCM somehow does and at the same time doesn't recognize changing the position in a multiscreen setup. If I change the Display Configuration and hit "Apply" the changes are indeed applied, but the "Apply"-Button remains active, leaving the KCM prompts for "Unsaved changes" and the "*" in the titlebar remains.
Note: This is not true for all parameter, e.g. changing the resolution of one monitor on a multiscreen setup, the "Apply"-Button works as expected.


Reproducible: Always

Steps to Reproduce:
1. Open the "Display and Configuration" KCM
2. Change the positioning of a multiscreen setup (e.g. from "left-of" to "right-of")
3. Hit "Apply"

Actual Results:  
The changes are applied but the "Apply"-Button stays active, KCM thinks there's changed information. A second hit on "Apply" works.

Expected Results:  
The "Apply"-Button should be disabled and the KCM shouldn't think there are any more changes to be applied

I don't know if there are other properties except changing the positioning of a multiscreen-setup where this bug appears as well.
Comment 1 Sebastian Kügler 2016-07-13 22:03:02 UTC
Thanks for the report. I can reproduce it locally. It does indeed only happen when the screen position changes. I'm looking into it.
Comment 2 Sebastian Kügler 2016-07-13 23:30:02 UTC
Proposed fix: https://phabricator.kde.org/D2154
Comment 3 Sebastian Kügler 2016-07-19 13:57:27 UTC
Git commit 4b69f8708e63beaf242d1114aba070a336260341 by Sebastian Kügler.
Committed on 19/07/2016 at 13:57.
Pushed by sebas into branch 'master'.

kscreen kcm: block changed signal after save

Summary:
When changing position (and potentially other properties) of the screen
setup, we receive delayed signals way after the sync operation finishes.
This enables the apply button after the config has been applied, leading
to the apply/discard confirmation dialog when closing (or navigating
away from) the kscreen kcm.

This patch disables propagation of the changed() signal at the highest
level, meaning that config widgets internally still get updated, but the
apply button only gets enabled after 1000 milliseconds. This magic value
is what I've figured out by testing. It's long enough to re-request edid
information on two outputs, but short enough to get in the way from
further changes.

I'm not super-happy with the timer, but I don't see any other way to fix
this glitch in the user experience. We don't really have a way on X11 to
know when all changes are flushed.

Test Plan: Tested systemsettings and kcmshell, with this patch, it works reliably and doesn't get in the way.

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: graesslin, plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D2154

M  +18   -2    kcm/src/kcm_kscreen.cpp
M  +2    -0    kcm/src/kcm_kscreen.h

http://commits.kde.org/kscreen/4b69f8708e63beaf242d1114aba070a336260341
Comment 4 Sebastian Kügler 2016-07-19 14:00:10 UTC
Git commit 87d3d91202da261eef23659e1a11b5bec77742e0 by Sebastian Kügler.
Committed on 19/07/2016 at 13:59.
Pushed by sebas into branch 'Plasma/5.7'.

kscreen kcm: block changed signal after save

Summary:
When changing position (and potentially other properties) of the screen
setup, we receive delayed signals way after the sync operation finishes.
This enables the apply button after the config has been applied, leading
to the apply/discard confirmation dialog when closing (or navigating
away from) the kscreen kcm.

This patch disables propagation of the changed() signal at the highest
level, meaning that config widgets internally still get updated, but the
apply button only gets enabled after 1000 milliseconds. This magic value
is what I've figured out by testing. It's long enough to re-request edid
information on two outputs, but short enough to get in the way from
further changes.

I'm not super-happy with the timer, but I don't see any other way to fix
this glitch in the user experience. We don't really have a way on X11 to
know when all changes are flushed.
FIXED-IN: 5.7.3

Test Plan: Tested systemsettings and kcmshell, with this patch, it works reliably and doesn't get in the way.

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: graesslin, plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D2154

M  +18   -2    kcm/src/kcm_kscreen.cpp
M  +2    -0    kcm/src/kcm_kscreen.h

http://commits.kde.org/kscreen/87d3d91202da261eef23659e1a11b5bec77742e0