GNOME Bugzilla – Bug 301377
gok: Unable to activate unnamed "actionables" in tables
Last modified: 2005-04-26 17:28:46 UTC
From sourceforge bug 1149831 "Unable to check table checkboxes using GOK": Using Gaim Version 0.82.1 and Gnome gok version 0.12.4 Assumptions * A User is already created. Steps * Start up GOK * Using GOK, Start up GAIM * Click on Accounts button * Navigate to the table * Navigate and highlight user * The problem is that there is no way to activate the "online" and "auto-login" checkboxes using GOK's "UI Grab" function. The "UI Grab" function selects the tab above instead. GOK user needs to use the compose window to effectively KeyNav to the checkbox.
After some discussion we have decided that it is not ideal to expect a specified name for every cell in a table. We will create a patch that names cells using row/col headers and expect it to resolve this bug.
To clarify... "naming cells" will allow us to present cells sanely as gok keys with appropriate labels.
When we say 'expect a specified name for every cell in a table', more specifically, we do not expect that every _actionable_ cell will have a name _if_ it can be uniquely identified from row and column headers, or from column headers and an unambiguous row name.
Bill in implementing the patch I'm running into a bit of a problem. Given a cell, there is no sane way (API) of getting the row header and or the column header. I think we are either going to have to special case appending table cell nodes, or change API.
More explicitly: given a cell, to walk up to the table parent and then iterate through all the cells to find the current cell and therefore the context of the current one is too expensive. Currently there is a lot of logic for naming things (including cells) in gok_spy_append_node. The API for gok_spy_append_node offers no non-kludgy way of passing in row column header info. What I can do is change the internal API, or create a gok_spy_append_cell_node which is called if gok_spy_append_node fails.
I presume AccessibleRelation is not an option.
David: you should be able to do this with AccessibleTable, look at Accessible_getIndexInParent, then AccessibleTable_getRowAtIndex, AccessibleTable_getColAtIndex.
I don't think you should need to add any API, or at most only a tiny bit, i.e. a flag that says "we're in a table" (which I think we already have).
Have you thought about a "table" keyboard which comes up when you UI Grab a table? A list of headers, and when a header is selected, up comes a secondary keyboard with a list of rows? (unless there are so few cells that you could do it all one on keyboard). This could be very useful with StarOffice calc.
In the cases which are of most current interest, there are indeed so few cells (visible) that we can indeed do it all on one keyboard. I agree that a "table" keyboard for spreadsheet-type tables and larger trees would be useful, but that's a longer-term RFE. The current bug is a way around simpler cases that are currently affecting our test assertions and user scenarios.
Bill, comment 7 clears things up a lot - thanks! Peter, I totally agree regarding a table keyboard. And I agree with Bill that it is a longer term RFE.
actually we already have a Table keyboard - it just doesn't mirror the onscreen view, with row and column headers, etc. The keyboard under discussion, which currently omits anonymous cells, is the Table keyboard.
Created attachment 45553 [details] [review] untested patch -- possible solution I've just written this patch. I'm posting it early for review/direction purposes.
Comment on attachment 45553 [details] [review] untested patch -- possible solution I'd like to see us use the text content of the first/second column if available, in preference to the row number. This will produce a more natural and comprehensible set of labels for most common UIs.
Created attachment 45691 [details] [review] patch to check first and second columns of row in preference to row index
Nice idea. So for as yet unnamed cells our combined patch tries: (For each of row and column) 1. Use a header name. 2. For row only, try scavenging a name from an accessible in the first 2 columns. This should work nicely with Gaim. 3. Use the index. Should work. I've found a few small probs... will update the patch.
Created attachment 45693 [details] [review] patch - added one unref to previous Can someone else easily test this?
David, I'm testing. THe current patch doesn't work properly because the fallbacks are all inside the 'if column header'/'if row header' conditionals, and we rarely have both row and column headers. I think it just needs some rearrangement.
OK let me know if you are currently doing this or if I should tackle it.
Created attachment 45708 [details] [review] patch to provide functionality patch has been run with valgrind in the test case scenario.
Comment on attachment 45708 [details] [review] patch to provide functionality Bill thanks for the heavy revisions on the initial patch. Please apply. Nice bug to squash :-)
Reassigning to Bill to document the most correct history on this bug.
BTW do we need to backport this?
naah.