pull up r19860 from trunk
r19860@cathode-dark-space: jaltman | 2007-08-24 10:38:45 -0400
ticket: new
subject: NIM: Selection Issues
component: windows
Credentials selection in Network Identity Manager has usability
issues due to the following causes:
- The "cursor row" is not always selected.
The "cursor row" is the row which the "cursor" is on. Navigating the
credentials view using the keyboard or clicking the credentials
display with the mouse will move the cursor to different rows.
However, this cursor row is not always selected, especially when
Network Identity Manager starts.
Having the selection be independent of the cursor row is a
requirement for supporting "toggle" selections (holding the 'ctrl'
key while clicking), which is a standard way of doing multiple
selections on Windows.
The problem with the cursor row not being selected when Network
Identity Manager starts is due to the delayed start of its plug-ins.
Even though the first row is initially selected, when plug-ins
complete initialization and notify the application about the
credentials that they see, those credentials end up accumulating
under different identities. The existing code didn't enforce the
selection state of the identity on the newly added
credentials. Since there were unselected credentials under the
selected outline level, the code would then turn off the selected
bit for the outline (which usually is an outline level for an
identity) for consistency.
The patch changes the behavior to enforce the selection state of the
enclosing outline on any new outline levels or credentials that are
added under it. This prevents an outline level from losing its
selection state when new credentials are added under it.
- Identities may have stale data associated with it.
The credentials view maintains a set of cached properties for each
identity that has credentials. During each refresh cycle, it would
go through the credentials and update the properties of each
identity. However it would not update the properties for identities
that are not associated with any credentials.
When the credentials associated an identity were deleted, the cached
properties for that identity sometimes never got reset. If the
identity was marked as "always visible", then it would be listed in
the credentials view along with the stale properties.
This patch properly initializes the properties of identities which
are not associated with any identities.
- Selection state is not updated when switching views.
The credentials view maintains selection state for individual
credentials when switching views. The same is not true for the
outlines since the outline needs to be reconstructed during the
switch.
The exising code failed to update the selection state of the
outlines after switching the view to reflect the the selection state
of the credentials. As a result, once a the user switched a view,
she might see outline levels which do not appear to be selected even
though all the credentials contained at the outline level appear
selected.
This patch properly adjusts the selection state of outline nodes to
correspond to the selection state of the contained credentials.
- Selection state may be inconsistent when more than one credential is
associated with a single row.
Some rows may represent more than one credential. A collapsed
outline represents all the credentials contained within that outline
level. In addition, two credentials that will appear the same to
the user (because all the displayed properties are the same) will be
represented by one row.
The selection state of these rows should be consistent with the
selection state of all the credentials that it represents. The
previous code did not enforce this constraint. This patch aims to
fix this by enumerating all the credentials that are represented
by each row and setting the selection state of each credential to
match the selection state of the row.
ticket: 5681
version_fixed: 1.6.3
git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-6@19995
dc483132-0cff-0310-8789-
dd5450dbe970