gitk: Only write changed configuration variables
commit995f792b992affdcea9489f063392557de2b3753
authorMax Kirillov <max@max630.net>
Wed, 4 Mar 2015 03:58:16 +0000 (4 05:58 +0200)
committerPaul Mackerras <paulus@samba.org>
Sun, 15 Mar 2015 03:14:22 +0000 (15 14:14 +1100)
tree3eb906005c51210e5a009e6166bed905efcf1f47
parent122b80799249be33e66a4f716fdca6d80635a05e
gitk: Only write changed configuration variables

When gitk contains some changed parameter, and there is an existing
instance of gitk where the parameter is still old, it is reverted to
that old value when that instance exits.

Instead, store a parameter in config only if it has been modified in
the exiting instance. Otherwise, preserve the value which currently is in
file.  This allows editing the configuration when several instances are
running, without rollback of the modification if some other
instance where the configuration was not edited is closed last.

For scalar variables, use trace(3tcl) to detect their change. Since
`trace` can send bogus events, doublecheck if the value has really
been changed, but once it is marked as changed, do not reset it back
to unchanged ever, because if user has restored the original value,
it's the decision which should be stored as well as modified value.

Treat view list especially: instead of rewriting the whole list, merge
individual views. Place old and updated views in their old places,
add new ones to the end of list. Collect modified views explicitly, in
newviewok{} and delview{}.

Do not merge geometry values. They are almost always changing because
user moves and resises windows, and there is no way to find which one of
the geometries is most desired. Just overwrite them unconditionally,
like earlier.

Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
gitk