Grouping UI elements

Caolán McNamara caolanm at redhat.com
Thu Jan 16 06:43:45 PST 2014


On Wed, 2014-01-15 at 14:25 +0000, Tamas Zolnai wrote:
> Main problem is that the 'Help' and the 'Extensions' buttons on the
> Start Center are in different GtkBoxes and so arrow key traversal
> doesn't work between them.

So, actually containers are "invisible" to cursor traversal. So on
pressing "right" when the focus is on the Help button the Extension
button *is* considered as a candidate but is rejected because it has its
WB_GROUP bit set to state it's the start of a new group.

The WB_GROUP bit on the button comes about because the containers are
not "invisible" to the PushButton *ctor* which checks if the preceding
window of its parent is a button and if it then defaults to grouping
with it and if it is not a button defaults to setting itself as the
start of a new group.

So the trick to toggle off the WB_GROUP bit of the second button so that
when the "transparent" cursor traversal happens then it will allowed
to be part of the group starting with "Help"

I've done that now with
http://cgit.freedesktop.org/libreoffice/core/commit/?id=9290998442166fae70431ee98aa9eb019bad24b3
nBits &= ~WB_GROUP unsets the WB_GROUP bit and nBits |= WB_NOGROUP sets
the nogroup bit which suppresses vcl from resetting WB_GROUP again

> Second I pick up "member_of" property and
> Window::SetAccessibleRelationMemberOf() method which is used not for
> only RadioButtons but for other elements too. For example:
> http://opengrok.libreoffice.org/xref/core/cui/source/dialogs/hlinettp.cxx#93
> (an image button related with a fixed text). 

The manual calls of "SetAccessibleRelationMemberOf" etc are basically a
pre-widget layout hack to fake a hierarchy for accessibility. e.g. to
manually set all the widgets that visually appear to be subelements
under a FixedLine title as children of the fixedline. That generally all
goes away with the widget layout in favour of a VclFrame that contains
those widgets and we then delete the "SetAccessibleRelationMemberOf"
calls. (Similarly the manual SetAccessibleRelationLabeledBy stuff is
either a simple Mnemonic widget target for a label (or entered into
the .ui a11y section if the label isn't a "true" label but something
like a checkbox and doesn't have the feature to set a mnemonic target)

> So secondly that came in my mind to modify the corresponding
> Window::ImplDlgCtrl() method to take account of member_of relation in
> case of arrow keys.

ImplDlgDtrl is so horribly complicated, as is the rest of that family of
functions that I'd rather not touch them as much as possible :-)

C.



More information about the LibreOffice mailing list