After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 351797 - Orca Preferences dialog should get focus when Insert Space is pressed
Orca Preferences dialog should get focus when Insert Space is pressed
Status: RESOLVED FIXED
Product: orca
Classification: Applications
Component: general
0.2.x
Other All
: Normal minor
: 2.18.0
Assigned To: Rich Burridge
Orca Maintainers
Depends on:
Blocks:
 
 
Reported: 2006-08-17 17:47 UTC by Joanmarie Diggs (IRC: joanie)
Modified: 2008-07-22 19:24 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
Patch to fix the mini-mini-preferences window. (663 bytes, patch)
2006-09-12 19:18 UTC, Rich Burridge
none Details | Review
The Orca Preferences Glade GUI file. (119.83 KB, application/x-glade)
2006-09-13 21:11 UTC, Rich Burridge
  Details
Standalone Python program to try to reproduce the problem. (14.04 KB, text/x-python)
2006-09-13 21:17 UTC, Rich Burridge
  Details
Fix the bug; don't map the window until the timestamp is updated (1.31 KB, patch)
2006-09-14 23:32 UTC, Elijah Newren
committed Details | Review
Hopefully a final fix for this problem. (1.78 KB, patch)
2006-09-14 23:33 UTC, Rich Burridge
rejected Details | Review

Description Joanmarie Diggs (IRC: joanie) 2006-08-17 17:47:43 UTC
I think it would make sense for the Orca Preferences dialog to get focus when Insert Space is pressed.  Rationale:

1.  If the user presses Insert Space, presumably he/she wants to change a preference at that moment, so the dialog might as well get focus. :)

2.  Because focus doesn't change, there is no feedback.  Non-visually one might conclude that Insert Space failed to do anything and not realize that Alt Tab would place you in the desired dialog.

Other information:
Comment 1 Rich Burridge 2006-08-17 18:09:52 UTC
This would appear to be a duplicate of bug #343897.
Joanie, are using using a late enough version of pygtk
(pygtk 2.9 or later) to have this fix included?
Comment 2 Joanmarie Diggs (IRC: joanie) 2006-08-17 18:43:27 UTC
Sorry about that!  I didn't check closed bugs....

I have 2.9.6 installed.
Comment 3 Rich Burridge 2006-08-17 19:17:29 UTC
Strange. That should certainly be late enough to include
the new binding we needed. 

One way to test this is to uncomment the

orca.debug.debugLevel = orca.debug.LEVEL_ALL

line in your ~/.orca/user-settings.py file and rerun Orca
and startup the Preferences dialog (Insert-Space).

If it didn't get focus, check the debug log to see if
an AttributeError as generated in _showGUI() in 
orca_gui_prefs.py.
Comment 4 Joanmarie Diggs (IRC: joanie) 2006-08-17 19:39:52 UTC
I'm not seeing the AttributeError....
Comment 5 Rich Burridge 2006-08-17 20:53:29 UTC
Okay. That means you are definitely running with a version of pygtk that
has the required binding. Hmmm. Let's try to track this one down after
we've got Orca released for GNOME 2.16.

(PS: It's working for me, but that's small consolation :-) ).
Comment 6 Rich Burridge 2006-09-06 21:34:02 UTC
Joanie, are you seeing this with Orca in Ubuntu Edgy?
Comment 7 Joanmarie Diggs (IRC: joanie) 2006-09-08 14:13:50 UTC
I am.
Comment 8 Rich Burridge 2006-09-08 14:27:29 UTC
Okay, thanks. I'll add this one near the top of my list
of bugs to look at. 
Comment 9 Willie Walker 2006-09-08 18:31:49 UTC
On Ubuntu Edgy, I see the following:

The first time I bring up the preferences dialog using Insert+Space, the preferences dialog appears on top.  If I dismiss it with Escape, it goes away just fine.  If I then press Insert+Space again, I see the following error message in the shell where I ran Orca:

/usr/lib/python2.4/site-packages/orca/orca_gui_prefs.py:725: GtkWarning: gtk_container_foreach: assertion `GTK_IS_CONTAINER (container)' failed
  self.orcaSetupWindow.show()

I also see an "Orca Preferences" icon in the panel, but no window seems to appear *and* when try to Alt+Tab to it in metacity, Orca says it is inaccessible.  This may be a separate bug.
Comment 10 Mike Pedersen 2006-09-08 18:59:49 UTC
I just was able to bring up the prefs dialog several times with other apps running with out any problems.  Every time, the dialog got focus as I would expect.  
Comment 11 Joanmarie Diggs (IRC: joanie) 2006-09-08 19:00:45 UTC
When I start Orca from the Applications menu, Insert+Space causes the dialog to appear but it does not get focus.  Subsequent presses result in the behavior you described (no window appears, "inaccessible" when you Alt+Tab to it), but that's relatively new (read: I don't know when that behavior showed up, but it wasn't the case when I reported it a few weeks ago). :-)
Comment 12 Rich Burridge 2006-09-08 19:37:13 UTC
Okay, thanks everyone. I'm in the process of cutting
an Edgy Eft Knot-2 CD, and I'll install that and try to
recreate what you are seeing (Joanie and Will). Currently
on Solaris, I'm getting what Mike is getting.
Comment 13 Willie Walker 2006-09-08 19:58:05 UTC
Aha!  I see the same thing as Joanie iff I launch Orca from the applications menu.  If I launch it from a command line prompt, however, I see the experience I previously noted.
Comment 14 Rich Burridge 2006-09-10 16:52:37 UTC
Okay, thanks for the update. Hopefully I should be able track 
this down now, and finally put it to bed.
Comment 15 Rich Burridge 2006-09-12 15:05:25 UTC
I now have Ubuntu Edgy Eft (Knot-2) running on one of my PC's.
I do the following:

* Login to the desktop as myself and enable accessibility.
* Reboot (I tried just logging out), but when the desktop comes
  back and I try to start something, nothing appears on the desktop).
* I made sure that I did not have a ~/.orca directory.
* I started Orca from the gnome-panel Application->Accessories panel.

The Preferences dialog comes up. It has focus. Orca nicely speaks
where it is. In other words, I'm not seeing a focus problem.

Will, Joanie, so what am I doing differently from you?
Comment 16 Joanmarie Diggs (IRC: joanie) 2006-09-12 15:26:24 UTC
If I'm following you Rich, the Preferences dialog appeared because you launched Orca for the first time and didn't have a ~/.orca directory.  Having set up Orca/caused the creation of the ~/.orca directory, what happens when you press Insert+Space to return to the Preferences dialog?
Comment 17 Rich Burridge 2006-09-12 16:39:51 UTC
> If I'm following you Rich, the Preferences dialog appeared because 
> you launched Orca for the first time and didn't have a ~/.orca directory.

Correct.

> Having set up Orca/caused the creation of the ~/.orca directory, what 
> happens when you press Insert+Space to return to the Preferences dialog?

The first time it comes up and it gets focus automatically.
If I then dismiss it with Escape, and hit Insert-Space again,
it doesn't vome up again.

Is this the problem you are seeing?
Comment 18 Rich Burridge 2006-09-12 16:47:47 UTC
Ahh, it apparently does bring up an Orca Preferences dialog.
It's really really small (about 1/8th inch by 3/8 inch) and 
appears near the top left corner of the desktop. It's impossible 
to resize or navigate.
Comment 19 Joanmarie Diggs (IRC: joanie) 2006-09-12 17:26:08 UTC
That's the latest -- and most significant -- problem that I'm seeing in this regard.  

The originally-reported problem of launching Orca, then pressing Insert+Space, and  having the dialog appear normally (but without focus) is still present.
Comment 20 Rich Burridge 2006-09-12 19:18:17 UTC
Created attachment 72639 [details] [review]
Patch to fix the mini-mini-preferences window.

When Calum Benson's HCI changes were incorporated in rev 1.21 of
the orca-setup.glade file, the handler for the "destroy" event for the main
Preferences window was lost. This patch reinstates.
Comment 21 Rich Burridge 2006-09-12 19:22:18 UTC
Okay, that patch has been checked into CVS HEAD. Joanie, could
you build this latest version, and tell me what problems you still
see please.

There's definitely still something wrong because when I dismiss the
Preferences GUI, it's getting the following warnings:

** (-c:15355): CRITICAL **: file gailnotebook.c: line 555: assertion `obj' failed

** (-c:15355): CRITICAL **: file gailnotebook.c: line 555: assertion `obj' failed

** (-c:15355): CRITICAL **: file atkrelationset.c: line 176: assertion `ATK_IS_RELATION_SET (set)' failed

** (-c:15355): CRITICAL **: file atkrelationset.c: line 176: assertion `ATK_IS_RELATION_SET (set)' failed

** (-c:15355): CRITICAL **: file atkrelationset.c: line 176: assertion `ATK_IS_RELATION_SET (set)' failed

I'm looking at that next.
Comment 22 Joanmarie Diggs (IRC: joanie) 2006-09-12 19:41:54 UTC
Sometimes it gets focus automatically; sometimes it does not.  But I can always get into the dialog now which is nice. :-)
Comment 23 Rich Burridge 2006-09-13 16:15:19 UTC
I think I now understand when it does and when it doesn't.
Could you please confirm (or deny) whether you are seeing the
following. Assume you've already setup your Orca preference
and you've already launched Orca and it's running.

* The first time you bring up the Preference dialog, it gets focus.

* If you dismiss it via the Cancel button and then bring it up
  again with Insert-Space, it gets focus.

* If you dismiss it by hitting the Esc key, and then bring it up
  again with Insert-Space it does not get focus.

Comment 24 Joanmarie Diggs (IRC: joanie) 2006-09-13 17:34:09 UTC
I just tried the following:

1. Launched Orca
2. Launched Evolution
3. Pressed Insert + Space

---
* The first time you bring up the Preference dialog, it gets focus.
---

It did not get focus.

---
* If you dismiss it via the Cancel button and then bring it up
  again with Insert-Space, it gets focus.
---

Confirmed

---
* If you dismiss it by hitting the Esc key, and then bring it up
  again with Insert-Space it does not get focus.
---

Confirmed.
Comment 25 Rich Burridge 2006-09-13 17:37:46 UTC
Thanks Joanie. I now realize, I left open two possibilities
for the first one. When you initially:

1. Launched Orca

did you do it via the gnome-panel menu item or by typing
Orca in a terminal window. I did the latter, then typed
Insert-Space and the Preferences window got focus. I suspect
you did the former.
Comment 26 Rich Burridge 2006-09-13 17:41:42 UTC
I can now also see that if I initially launch Orca from the
gnome-panel menu and type Insert-Space, the Preferences window
doesn't get focus. This is with Ubuntu Edgy Eft Knot-2.

I've added Elijah Newren to the cc: for this bug as I think we
are going to need his help in resolving the differences here.

Comment 27 Rich Burridge 2006-09-13 17:47:34 UTC
So here is a summary of the current situation:

If Orca is initially started from a terminal window and the
user brings up the Preferences dialog by typing Insert-Space,
then the Preferences dialog window gets focus.

If the Preferences dialog window is showing and the user
dismisses it via the Cancel button and then redisplays it
by typing Insert-Space again, then the new Preferences dialog
window will get focus.

If Orca is initially started via the gnome-panel Application
menu and the user brings up the Preferences dialog by typing
Insert-Space, then the Preferences dialog window does not get
focus.

If the user dismisses the Orca Preference dialog by just hitting
the Esc key, and then redisplays it by typing Insert-Space again,
then the new Preferences dialog window will not get focus.

By adding print statements to the Orca code, I've verified that

 self.orcaSetupWindow.window.set_user_time(\
               orca_state.lastInputEventTimestamp)

is being called in all cases, and that orca_state.lastInputEventTimestamp
is the timestamp of the last keyboard accessibility event.

One other difference. When it works and gets focus, the Orca
Preferences dialog is correctly displayed directly in the middle
of the screen. When it doesn't work (no focus), the dialog is
shown on the screen is a "random" position.
Comment 28 Rich Burridge 2006-09-13 21:11:14 UTC
Created attachment 72724 [details]
The Orca Preferences Glade GUI file.

See comment in next attachment.
Comment 29 Rich Burridge 2006-09-13 21:17:37 UTC
Created attachment 72725 [details]
Standalone Python program to try to reproduce the problem.

I cobbled together a small standalone Python script to try to reproduce
the problem. Save this script and the previous orca-setup.glade file in
a new directory and follow the instructions at the beginning of bug_351797.py
to run.

In attempting to try to isolate this, I've made this small example work
just fine. I'm not sure what that proves exactly. One difference is that
in Orca, when the Preferences dialog comes up, the _init() methods does
lots of things which take 3-4 seconds on my Ferrari. I tried adding a
time.sleep(4.0) in _init() in this script, but things still worked fine.

Still looking...
Comment 30 Rich Burridge 2006-09-14 11:21:17 UTC
Well I've found what's causing the problem, but I don't know why.
In _initGUIState() in orca_gui_prefs.py, there are three lines:

        self.voiceType.set_active(0)
        voiceType = self.voiceType.get_active_text()
        self._setVoiceSettingForVoiceType(voiceType)

If I comment them out, everything seems to work fine. In other words,
if you dismiss the Orca Preferences dialog with the Esc key, then
show it again, it'll now come up centralized and with focus. Same
for dismissal via the Cancel button and then showing again with 
Insert-Space.

Note that these three lines used to be:

        voiceType = self.voiceType.get_active_text()
        self.voiceType.set_active(0)
        self._setVoiceSettingForVoiceType(voiceType)

That was a bug. I had to swap the order the get a correct initial
default item for the voice type. I've checked that small change into
CVS HEAD.

Either order though, and the problem goes away if I comment out these
three lines.

I'll continue to investigate later this morning when I've had some sleep.
Comment 31 Rich Burridge 2006-09-14 19:46:12 UTC
Joanie, I need a sanity check here (no jokes please).
Could you check out the latest Orca from CVS and
comment out the three lines:

        self.voiceType.set_active(0)
        voiceType = self.voiceType.get_active_text()
        self._setVoiceSettingForVoiceType(voiceType)

in .../src/orca/orca_gui_prefs.py (lines 207-209), rebuild
and reinstall it.

Then try the various scenerios listed in comment #27 above and
tell me what you get.

I want to see if this works on other peoples machines besides mine.
(Note that you will need to be running GNOME 2.16 - Ubuntu Edgy Eft
should be just fine).

Thanks.
Comment 32 Elijah Newren 2006-09-14 20:32:01 UTC
It appears that a gtk+ application has to be focused in order for Insert+Space to work?  At least on my machine...  Anyway, I added a 
  print "About to show window with timestamp ", orca_state.lastInputEventTimestamp
line near the beginning of orca/src/orca/orca_gui_prefs.py:_showGUI(), and also ran with my metacity debug-focus-light patches.  When the orca window was not focused, I got the following output from orca:

  About to show window with timestamp  3038216953

(along with a zillion gail_container_ref_child critical warning assertions) and from Metacity I got:

  Window 0x2e004ae (X-Chat [2.) has _NET_WM_USER_TIME of 3038216516
  Window 0x22007b7 (Orca Prefe) has _NET_WM_USER_TIME of 3038201592
  COMPARISON:
    net_wm_user_time_set : 1
    net_wm_user_time     : 3038201592
    initial_timestamp_set: 0
    initial_timestamp    : 0
  COMPARISON (continued):
    focus_window             : 0x2e004ae (X-Chat [2.)
    fw->net_wm_user_time_set : 1
    fw->net_wm_user_time     : 3038216516

The thing to notice here is that 3038201592 < 3038216516 < 3038216953; meaning that the timestamp metacity has for orca is less than the timestamp for X-Chat (my focused window) which is less than the timestamp orca thought it was setting for its window (which metacity apparently did not end up with).

Haven't tracked down the reason for that yet, but thought this much info might help you save some debugging time if you're also working on it right now...
Comment 33 Rich Burridge 2006-09-14 21:02:30 UTC
Thanks Elijah. The timestamp I'm setting in _showGUI() in orca_gui_prefs.py
should be the timestamp from the last accessibility keyboard event as the
user types Insert-Space. This is set in _processKeyboardEvent() in orca.py
(about line 650). I added debug statements to those routines and the timestamp
values match.

Like I mentioned above, I can just comment out three lines in _initGUIState()
and this all starts working fine for me. Also that standalone Python script
I added works fine too, and that has similar logic to the way that Orca is
doing this.

Comment 34 Elijah Newren 2006-09-14 21:13:19 UTC
You're mapping the window *before* _showGUI gets called, which causes this bug.  Figure out where you are mapping/showing it and stop doing that (or updating the timestamp there instead of later), and it'll fix this bug.

In gory detail:

Adding a little debug spew to gdk/x11/gdkwindow-x11.c in addition to the debug spew I mentioned that I added to orca, the first time I press Insert+Space, I see (removing the critical warnings coming from GAIL):

  Updating timestamp to 0......and mapping window too!
  About to show window with timestamp  3040624331
  gdk_x11_window_set_user_time called with timestamp of 3040624331

The first line was debug spew added to gtk+/gdk/x11/gdkwindow-x11.c:show_window_internal(), showing that the window is getting mapped and that no timestamp was available (not surprising since I launched orca from the terminal).  There would have been an additional line before the first line due to my debug spew in gdk_x11_window_set_user_time() (since show_window_internal() calls gdk_x11_window_set_user_time() if the timestamp is not 0), but the timestamp was 0.  The second line comes from the debug spew I put at the beginning of orca/src/orca/orca_gui_prefs.py:_showGUI().  Note that the window is *already* mapped.  The third line comes from debug spew added to gdk_x11_window_set_user_time(), showing that orca's call to set_user_time really did make it to gtk+.

At this point, I press the Escape key on orca and see

  gdk_x11_window_set_user_time called with timestamp of 3040640484

due to the fact that the Escape key counts as user interaction and gtk+ is automatically updating the timestamp for you.  The I press Insert+Space again, and I see

  gdk_x11_window_set_user_time called with timestamp of 3040640484
  Updating timestamp to 3040640484......and mapping window too!
  About to show window with timestamp  3040654903
  gdk_x11_window_set_user_time called with timestamp of 3040654903

The first two lines again come from my debug spew in show_window_internal() and gdk_x11_window_set_user_time() (with the former calling the latter and producing both lines).  Since gtk+'s knowledge of the most recent user interaction with the application was the escape key, it is the timestamp used there when the window is mapped.  Metacity gets the map command and compares timestamps, obviously using "the wrong one."  *After* this is done, orca's _showGUI is finally called and updates the timestamp but too late.
Comment 35 Elijah Newren 2006-09-14 23:31:02 UTC
You set the window to be visible in the .glade file, meaning that it would automatically be mapped as soon as gtk.glade.XML() was called (in GladeWrapper::__init__), rather than waiting for your call to self.orcaSetupWindow.show().  That's the cause of this bug.  I'll attach a patch in a second that fixes this.
Comment 36 Elijah Newren 2006-09-14 23:32:08 UTC
Created attachment 72823 [details] [review]
Fix the bug; don't map the window until the timestamp is updated
Comment 37 Rich Burridge 2006-09-14 23:33:30 UTC
Created attachment 72825 [details] [review]
Hopefully a final fix for this problem.

Thanks Elijah! New patch attached. I ended up having to set the
timestamp in two places. One is the path when the GUI is being
created out of the Glade file. The other is just before showing
it again after it had been hidden because the user has pressed the
Cancel button. It seems to work fine for me.

I'll now check it into CVS HEAD and sic Joanie on it.
Comment 38 Rich Burridge 2006-09-14 23:39:24 UTC
Arrgh! I missed your patch (which is cleaner than mine).
Taking mine back, and putting yours in. Sorry about that!
Comment 39 Rich Burridge 2006-09-14 23:47:34 UTC
Okay, I've backed out my changes and used Elijah's much nicer ones.
Joanie (or anybody else who'd like to try it), could you check out
Orca from CVS HEAD, and let us know if the bug if finally dead. Thanks.
Comment 40 Joanmarie Diggs (IRC: joanie) 2006-09-15 00:01:34 UTC
"Sic" me on it, eh Rich?  After I report my results, I'm going to start working on  "sanity check" jokes. ;-) 

Things seem to be working properly now.  Thanks much!!
Comment 41 Elijah Newren 2006-09-15 00:03:41 UTC
Hehe, no problem.  There was only one minute between patches according to the timestamps on this bug; it's no surprise that you missed it.  I'm actually surprised that you created it so fast after comment 35.

On a side note, though, it seems odd and error prone for pygtk to require the call to realize() when it allows GdkWindow functions to be called on GtkWindow objects (such as set_user_time).  I've filed bug 356033 about that.
Comment 42 Joanmarie Diggs (IRC: joanie) 2006-09-15 00:06:56 UTC
Just tried it having launched Orca from a terminal (before I had done it via the Applications menu).  It still works as expected, though I am seeing the warnings you referred to earlier:

** (-c:12506): CRITICAL **: atk_relation_set_get_n_relations: assertion `ATK_IS_RELATION_SET (set)' failed

** (-c:12506): CRITICAL **: atk_relation_set_get_n_relations: assertion `ATK_IS_RELATION_SET (set)' failed

** (-c:12506): CRITICAL **: atk_relation_set_get_n_relations: assertion `ATK_IS_RELATION_SET (set)' failed

Comment 43 Rich Burridge 2006-09-15 01:04:23 UTC
Yeah, I'm seeing those occasionally too. Plus:

** (-c:15425): CRITICAL **: file gailnotebook.c: line 555: assertion `obj' failed

** (-c:15425): CRITICAL **: file gailnotebook.c: line 555: assertion `obj' failed

When I was debugging Gtk+ C programs, I could bring the app up in
a debugger, then do:

dbx> run --g-fatal-warnings

U wonder if there is something similar in Python...

I'll see if I can get to the bottom of these messages, before I close the bug.

Thanks for the testing.
Comment 44 Elijah Newren 2006-09-15 01:11:25 UTC
(In reply to comment #43)
> U wonder if there is something similar in Python...

My IRC conversation in #pygtk may be of use to you...

<yosh> elijah: well you can break on that line in gtk+ ...
<yosh> python comes with some gdb macros to get python backtraces out of gdb
<elijah> So, I'd run python under gtk+, then set a breakpoint, then load up my program and run it?
<jdahlin-home> elijah: there's a gdbinit file in the python distribution, copy the pystack command from there

I didn't actually try it out since most of this (very-laggy) conversation didn't occur until after I had already tracked the bug down with print statements.  So you'll have to ask them for more details.
Comment 45 Rich Burridge 2006-09-15 01:32:32 UTC
Cool. I'll work on it tomorrow. Thanks (again) Elijah.
Comment 46 Rich Burridge 2006-09-15 16:40:23 UTC
I worked out a nice way of getting the stack trace for one of those
CRITICAL messages:

** (-c:15425): CRITICAL **: file gailnotebook.c: line 555: assertion `obj'
failed

I started Orca on my Solaris box. I then rlogged into it from my Ubuntu
box and attached the debugger to the running Orca Python process:

% dbx /usr/bin/python <running python orca pid>

When it had loaded and stopped at a "dbx>" prompt I did:

dbx> stop in g_log_default_handler
dbx> cont

and then back on my Solaris machine, bought up the Orca Preferences
dialog and then dismissed it with the Esc key.

On the Ubuntu machine, the debugger was at my break point.

Here's the stack at that point:

(dbx) where
current thread: t@1
=>[1] g_log_default_handler(0x0, 0x8, 0x88aa540, 0x0), at 0xfec0182c 
  [2] g_logv(0x0, 0x8, 0xfbf3db3c, 0x80443a8), at 0xfec0118a 
  [3] g_log(0x0, 0x8, 0xfbf3db3c, 0xfbf3db2c, 0x22b, 0xfbf3da64), at 0xfec01265 
  [4] gail_notebook_real_remove_gtk(0x8777618, 0x885ed40, 0x85380b0), at 0xfbf26485 
  [5] gail_container_remove_gtk(0x8777618, 0x885ed40, 0x85380b0), at 0xfbf1d2c5 
  [6] g_cclosure_marshal_VOID__OBJECT(0x8780070, 0x0, 0x2, 0x804457c, 0x80444dc, 0x0), at 0xfec8f718 
  [7] g_closure_invoke(0x8780070, 0x0, 0x2, 0x804457c, 0x80444dc), at 0xfec7a6b6 
  [8] signal_emit_unlocked_R(0x840c550, 0x0, 0x8777618, 0x0, 0x804457c), at 0xfec8e658 
  [9] g_signal_emit_valist(0x8777618, 0x46, 0x0, 0x80447f4), at 0xfec8d95d 
  [10] g_signal_emit(0x8777618, 0x46, 0x0, 0x885ed40), at 0xfec8daf9 
  [11] gtk_container_remove(0x8777618, 0x885ed40), at 0xfe49454e 
  [12] gtk_widget_dispose(0x885ed40, 0x885ed40, 0xfe6b3010, 0x8044864, 0x8044868, 0x804486c), at 0xfe5fa085 
  [13] g_object_run_dispose(0x885ed40), at 0xfec7c7a5 
  [14] gtk_object_destroy(0x885ed40), at 0xfe52ed80 
  [15] gtk_widget_destroy(0x885ed40, 0x0), at 0xfe5f3dec 
  [16] gtk_notebook_forall(0x8777618, 0x0, 0xfe5f3dbc, 0x0), at 0xfe52927c 
  [17] gtk_container_foreach(0x8777618, 0xfe5f3dbc, 0x0), at 0xfe494ca2 
  [18] gtk_container_destroy(0x8777618), at 0xfe494104 
  [19] gtk_notebook_destroy(0x8777618, 0x8210d40), at 0xfe526b5a 
  [20] g_cclosure_marshal_VOID__VOID(0x8407270, 0x0, 0x1, 0x8044adc, 0x8044a3c, 0xfe526b28), at 0xfec8edd9 
  [21] g_type_class_meta_marshal(0x8407270, 0x0, 0x1, 0x8044adc, 0x8044a3c, 0x4c), at 0xfec7a9b1 
  [22] g_closure_invoke(0x8407270, 0x0, 0x1, 0x8044adc, 0x8044a3c), at 0xfec7a6e4 
  [23] signal_emit_unlocked_R(0x8248598, 0x0, 0x8777618, 0x0, 0x8044adc), at 0xfec8ebb5 
  [24] g_signal_emit_valist(0x8777618, 0x6, 0x0, 0x8044d48), at 0xfec8d95d 
  [25] g_signal_emit(0x8777618, 0x6, 0x0), at 0xfec8daf9 
  [26] gtk_object_dispose(0x8777618), at 0xfe52ee1a 
  [27] gtk_widget_dispose(0x8777618, 0x8777618, 0xfe6b3010, 0x852f268, 0x8044db8, 0x8044dbc), at 0xfe5fa0c5 
  [28] g_object_run_dispose(0x8777618), at 0xfec7c7a5 
  [29] gtk_object_destroy(0x8777618), at 0xfe52ed80 
  [30] gtk_widget_destroy(0x8777618, 0x0), at 0xfe5f3dec 
  [31] gtk_box_forall(0x86e8df0, 0x0, 0xfe5f3dbc, 0x0), at 0xfe460bbc 
  [32] gtk_container_foreach(0x86e8df0, 0xfe5f3dbc, 0x0), at 0xfe494ca2 
  [33] gtk_container_destroy(0x86e8df0, 0x8210d40), at 0xfe494104 
  [34] g_cclosure_marshal_VOID__VOID(0x8407270, 0x0, 0x1, 0x804500c, 0x8044f6c, 0xfe4940bc), at 0xfec8edd9 
  [35] g_type_class_meta_marshal(0x8407270, 0x0, 0x1, 0x804500c, 0x8044f6c, 0x4c), at 0xfec7a9b1 
  [36] g_closure_invoke(0x8407270, 0x0, 0x1, 0x804500c, 0x8044f6c), at 0xfec7a6e4 
  [37] signal_emit_unlocked_R(0x8248598, 0x0, 0x86e8df0, 0x0, 0x804500c), at 0xfec8ebb5 
  [38] g_signal_emit_valist(0x86e8df0, 0x6, 0x0, 0x8045278), at 0xfec8d95d 
  [39] g_signal_emit(0x86e8df0, 0x6, 0x0), at 0xfec8daf9 
  [40] gtk_object_dispose(0x86e8df0), at 0xfe52ee1a 
  [41] gtk_widget_dispose(0x86e8df0, 0x86e8df0, 0xfe6b3010, 0x852f268, 0x80452e8, 0x80452ec), at 0xfe5fa0c5 
  [42] g_object_run_dispose(0x86e8df0), at 0xfec7c7a5 
  [43] gtk_object_destroy(0x86e8df0), at 0xfe52ed80 
  [44] gtk_widget_destroy(0x86e8df0, 0x0), at 0xfe5f3dec 
  [45] gtk_box_forall(0x86e8f30, 0x0, 0xfe5f3dbc, 0x0), at 0xfe460bbc 
  [46] gtk_container_foreach(0x86e8f30, 0xfe5f3dbc, 0x0), at 0xfe494ca2 
  [47] gtk_container_destroy(0x86e8f30, 0x8210d40), at 0xfe494104 
  [48] g_cclosure_marshal_VOID__VOID(0x8407270, 0x0, 0x1, 0x804553c, 0x804549c, 0xfe4940bc), at 0xfec8edd9 
  [49] g_type_class_meta_marshal(0x8407270, 0x0, 0x1, 0x804553c, 0x804549c, 0x4c), at 0xfec7a9b1 
  [50] g_closure_invoke(0x8407270, 0x0, 0x1, 0x804553c, 0x804549c), at 0xfec7a6e4 
  [51] signal_emit_unlocked_R(0x8248598, 0x0, 0x86e8f30, 0x0, 0x804553c), at 0xfec8ebb5 
  [52] g_signal_emit_valist(0x86e8f30, 0x6, 0x0, 0x80457a8), at 0xfec8d95d 
  [53] g_signal_emit(0x86e8f30, 0x6, 0x0), at 0xfec8daf9 
  [54] gtk_object_dispose(0x86e8f30), at 0xfe52ee1a 
  [55] gtk_widget_dispose(0x86e8f30, 0x86e8f30, 0xfe6b3010, 0xfec95d49, 0x8045818, 0x804581c), at 0xfe5fa0c5 
  [56] g_object_run_dispose(0x86e8f30), at 0xfec7c7a5 
  [57] gtk_object_destroy(0x86e8f30), at 0xfe52ed80 
  [58] gtk_widget_destroy(0x86e8f30, 0x0), at 0xfe5f3dec 
  [59] gtk_bin_forall(0x8707800, 0x0, 0xfe5f3dbc, 0x0), at 0xfe45d5c3 
  [60] gtk_container_foreach(0x8707800, 0xfe5f3dbc, 0x0), at 0xfe494ca2 
  [61] gtk_container_destroy(0x8707800), at 0xfe494104 
  [62] gtk_window_destroy(0x8707800, 0x8210d40), at 0xfe600931 
  [63] g_cclosure_marshal_VOID__VOID(0x8407270, 0x0, 0x1, 0x8045a7c, 0x80459dc, 0xfe6008a8), at 0xfec8edd9 
  [64] g_type_class_meta_marshal(0x8407270, 0x0, 0x1, 0x8045a7c, 0x80459dc, 0x4c), at 0xfec7a9b1 
  [65] g_closure_invoke(0x8407270, 0x0, 0x1, 0x8045a7c, 0x80459dc), at 0xfec7a6b6 
  [66] signal_emit_unlocked_R(0x8248598, 0x0, 0x8707800, 0x0, 0x8045a7c), at 0xfec8ebb5 
  [67] g_signal_emit_valist(0x8707800, 0x6, 0x0, 0x8045ce8), at 0xfec8d95d 
  [68] g_signal_emit(0x8707800, 0x6, 0x0), at 0xfec8daf9 
  [69] gtk_object_dispose(0x8707800), at 0xfe52ee1a 
  [70] gtk_widget_dispose(0x8707800), at 0xfe5fa0c5 
  [71] gtk_window_dispose(0x8707800, 0x8707800, 0xfe6b3010, 0x8707800, 0x8045d78, 0x8045d7c), at 0xfe5fe2ad 
  [72] g_object_run_dispose(0x8707800), at 0xfec7c7a5 
  [73] gtk_object_destroy(0x8707800), at 0xfe52ed80 
  [74] gtk_widget_destroy(0x8707800), at 0xfe5f3dec 
  [75] gtk_main_do_event(0x89a0d48, 0x8707800, 0x8702bd0, 0xfecb2b98, 0x852f268, 0x8045e14), at 0xfe511bc8 
  [76] gtk_dialog_close(0x8707800, 0x82b0a90), at 0xfe4a3cbf 
  [77] g_cclosure_marshal_VOID__VOID(0x8702bd0, 0x8045ff0, 0x1, 0x8b15228, 0x8045f1c, 0xfe4a3c74), at 0xfec8edd9 
  [78] g_type_class_meta_marshal(0x8702bd0, 0x8045ff0, 0x1, 0x8b15228, 0x8045f1c, 0x1cc), at 0xfec7a9b1 
  [79] g_closure_invoke(0x8702bd0, 0x8045ff0, 0x1, 0x8b15228, 0x8045f1c), at 0xfec7a6b6 
  [80] signal_emit_unlocked_R(0x87613e8, 0x0, 0x8707800, 0x8045ff0, 0x8b15228), at 0xfec8e81d 
  [81] g_signal_emitv(0x8b15228, 0x86, 0x0, 0x8045ff0), at 0xfec8cf2b 
  [82] gtk_binding_entry_activate(0x876c680, 0x8707800), at 0xfe45e01a 
  [83] binding_match_activate(0x8b177d0, 0x8707800, 0x9, 0x82af3d8, 0x8b16690), at 0xfe45ed30 
  [84] gtk_bindings_activate_list(0x8707800, 0x8b177c8, 0x0), at 0xfe45ef7f 
  [85] gtk_bindings_activate_event(0x8707800, 0x89a0c58), at 0xfe45f15a 
  [86] gtk_widget_real_key_press_event(0x8707800, 0x89a0c58), at 0xfe5f5e53 
  [87] gtk_window_key_press_event(0x8707800, 0x89a0c58, 0x8211e28), at 0xfe6016a3 
  [88] _gtk_marshal_BOOLEAN__BOXED(0x8409f60, 0x8046270, 0x2, 0x804632c, 0x804628c, 0xfe60165c), at 0xfe513f21 
  [89] g_type_class_meta_marshal(0x8409f60, 0x8046270, 0x2, 0x804632c, 0x804628c, 0xcc), at 0xfec7a9b1 
  [90] g_closure_invoke(0x8409f60, 0x8046270, 0x2, 0x804632c, 0x804628c), at 0xfec7a6b6 
  [91] signal_emit_unlocked_R(0x8409990, 0x0, 0x8707800, 0x80464ac, 0x804632c), at 0xfec8e81d 
  [92] g_signal_emit_valist(0x8707800, 0x22, 0x0, 0x80465a0), at 0xfec8d6f3 
  [93] g_signal_emit(0x8707800, 0x22, 0x0, 0x89a0c58, 0x80465c4), at 0xfec8daf9 
  [94] gtk_widget_event_internal(0x8707800, 0x89a0c58), at 0xfe5f62be 
  [95] gtk_widget_event(0x8707800, 0x89a0c58), at 0xfe5f5f4d 
  [96] gtk_propagate_event(0x8707800, 0x89a0c58), at 0xfe512b35 
  [97] gtk_main_do_event(0x89a0c58, 0x0), at 0xfe511ad4 
  [98] gdk_event_dispatch(0x838e630, 0x0, 0x0), at 0xfeb3e27a 
  [99] g_main_dispatch(0x8385ca0), at 0xfebf9690 
  [100] g_main_context_dispatch(0x8385ca0), at 0xfebfa779 
(dbx) 


So if I'm reading this correctly, the problem is occuring as I'm
desroying the Orca Preferences dialog GUI hierarchy.

What I'd really like to do is, from withing my windowDestroyed()
handler in orca_gui_prefs.py, just hide() that dialog rather than
destoy it. That would save me having to rebuild it again.

I wonder if there is any way to do that...
Comment 47 Rich Burridge 2006-09-15 16:49:39 UTC
Here's the stack trace for the

** (-c:12506): CRITICAL **: atk_relation_set_get_n_relations: assertion
`ATK_IS_RELATION_SET (set)' failed

messages:

(dbx) where
current thread: t@1
  [1] g_log_default_handler(0x0, 0x8, 0x8a9b0a0, 0x0), at 0xfec0182c 
  [2] g_logv(0x0, 0x8, 0xfc0c1be4, 0x804523c), at 0xfec0118a 
  [3] g_log(0x0, 0x8, 0xfc0c1be4, 0xfc0c1bd0, 0xb0, 0xfc0c1bb4), at 0xfec01265 
  [4] atk_relation_set_get_n_relations(0x0, 0x8c18000, 0x8530228, 0xfbd9478c, 0x1, 0x80452a0), at 0xfc0bbf3d 
  [5] impl_accessibility_accessible_get_relation_set(0x8bfb444, 0x8045424), at 0xfbe0971d 
  [6] _ORBIT_skel_small_Accessibility_Accessible_getRelationSet(0x8bfb444, 0x8bcf1f0, 0x0, 0x0, 0x8045424, 0xfbe096e0), at 0xfbe06c5e 
  [7] ORBit_POAObject_handle_request(0x8c18000, 0x843a069, 0x8bcf1f0, 0x0, 0x0, 0x0, 0x8045424), at 0xfbd6efeb 
  [8] ORBit_small_handle_request(0x8c18000, 0x843a069, 0x8bcf1f0, 0x0, 0x0, 0x0, 0x8045424), at 0xfbd73039 
  [9] ORBit_small_invoke_stub(0x8c18030, 0x8439df4, 0x8bcf1f0, 0x0, 0x0, 0x8045424), at 0xfbd60354 
=>[10] pycorba_method_call(self = 0x852dbc0, args = 0x87437ec, kwargs = (nil)), line 327 in "pycorba-method.c"
  [11] pycorba_bound_method_call(self = 0x85f10f0, args = 0x87437ec, kwargs = (nil)), line 503 in "pycorba-method.c"
  [12] PyObject_Call(0x85f10f0, 0x814d02c, 0x0), at 0x806371d 
  [13] do_call(0x85f10f0, 0x8045580, 0x0, 0x0), at 0x80ad3c5 
  [14] call_function(0x8045580, 0x0), at 0x80acc77 
  [15] PyEval_EvalFrameEx(0x86efb4c, 0x0), at 0x80a8f4e 
  [16] fast_function(0x85588ec, 0x8045690, 0x1, 0x1, 0x0), at 0x80ad0c1 
  [17] call_function(0x8045690, 0x0), at 0x80acc92 
  [18] PyEval_EvalFrameEx(0x8c430e4, 0x0), at 0x80a8f4e 
  [19] PyEval_EvalCodeEx(0x8504c38, 0x84ffbdc, 0x0, 0x82fdb78, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0), at 0x80abdb6 
  [20] function_call(0x8558b54, 0x82fdb6c, 0x0), at 0x80e5a54 
  [21] PyObject_Call(0x8558b54, 0x82fdb6c, 0x0), at 0x806371d 
  [22] PyEval_CallObjectWithKeywords(0x8558b54, 0x82fdb6c, 0x0), at 0x80aca60 
  [23] instance_getattr(0x8916b8c, 0x85028b8), at 0x8065771 
  [24] PyObject_GetAttr(0x8916b8c, 0x85028b8), at 0x8080999 
  [25] PyEval_EvalFrameEx(0x86ef9ac, 0x0), at 0x80a8f80 
  [26] fast_function(0x85789cc, 0x8045960, 0x1, 0x1, 0x0), at 0x80ad0c1 
  [27] call_function(0x8045960, 0x1), at 0x80acc92 
  [28] PyEval_EvalFrameEx(0x86ef824, 0x0), at 0x80a8f4e 
  [29] fast_function(0x86abbc4, 0x8045a70, 0x2, 0x2, 0x0), at 0x80ad0c1 
  [30] call_function(0x8045a70, 0x1), at 0x80acc92 
  [31] PyEval_EvalFrameEx(0x86ef534, 0x0), at 0x80a8f4e 
  [32] PyEval_EvalCodeEx(0x86475c0, 0x863d46c, 0x0, 0x86ef1cc, 0x2, 0x86ef1d4, 0x0, 0x86a1558, 0x1, 0x0), at 0x80abdb6 
  [33] fast_function(0x86b43e4, 0x8045bf0, 0x2, 0x2, 0x0), at 0x80ad121 
  [34] call_function(0x8045bf0, 0x1), at 0x80acc92 
  [35] PyEval_EvalFrameEx(0x86ef02c, 0x0), at 0x80a8f4e 
  [36] fast_function(0x86b4374, 0x8045d00, 0x4, 0x4, 0x0), at 0x80ad0c1 
  [37] call_function(0x8045d00, 0x3), at 0x80acc92 
  [38] PyEval_EvalFrameEx(0x86eeebc, 0x0), at 0x80a8f4e 
  [39] fast_function(0x86b55dc, 0x8045e10, 0x4, 0x4, 0x0), at 0x80ad0c1 
  [40] call_function(0x8045e10, 0x3), at 0x80acc92 
  [41] PyEval_EvalFrameEx(0x86eed3c, 0x0), at 0x80a8f4e 
  [42] PyEval_EvalCodeEx(0x81c00b0, 0x81c5cec, 0x0, 0x86f4374, 0x2, 0x86f437c, 0x0, 0x85cbcf8, 0x1, 0x0), at 0x80abdb6 
  [43] fast_function(0x85cfae4, 0x8045f90, 0x2, 0x2, 0x0), at 0x80ad121 
  [44] call_function(0x8045f90, 0x2), at 0x80acc92 
  [45] PyEval_EvalFrameEx(0x86f421c, 0x0), at 0x80a8f4e 
  [46] fast_function(0x86b441c, 0x80460a0, 0x2, 0x2, 0x0), at 0x80ad0c1 
  [47] call_function(0x80460a0, 0x1), at 0x80acc92 
  [48] PyEval_EvalFrameEx(0x86ec5fc, 0x0), at 0x80a8f4e 
  [49] fast_function(0x86b1e64, 0x80461b0, 0x2, 0x2, 0x0), at 0x80ad0c1 
  [50] call_function(0x80461b0, 0x1), at 0x80acc92 
  [51] PyEval_EvalFrameEx(0x86e9f24, 0x0), at 0x80a8f4e 
  [52] fast_function(0x86b54c4, 0x80462c0, 0x2, 0x2, 0x0), at 0x80ad0c1 
  [53] call_function(0x80462c0, 0x1), at 0x80acc92 
  [54] PyEval_EvalFrameEx(0x86e980c, 0x0), at 0x80a8f4e 
  [55] PyEval_EvalCodeEx(0x8640380, 0x863d3e4, 0x0, 0x86b71b8, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0), at 0x80abdb6 
  [56] function_call(0x86b5534, 0x86b71ac, 0x0), at 0x80e5a54 
  [57] PyObject_Call(0x86b5534, 0x86b71ac, 0x0), at 0x806371d 
  [58] instancemethod_call(0x86b5534, 0x86b71ac, 0x0), at 0x80687fd 
  [59] PyObject_Call(0x8724b1c, 0x814d02c, 0x0), at 0x806371d 
  [60] PyEval_CallObjectWithKeywords(0x8724b1c, 0x814d02c, 0x0, 0x8046624, 0x80c355c, 0x814ca20), at 0x80aca60 
  [61] PyObject_CallObject(0x8724b1c, 0x814d02c), at 0x80636fb 
  [62] pyg_handler_marshal(0x82f402c), at 0xfeccbf39 
  [63] g_idle_dispatch(0x8b9d808, 0xfeccbe88, 0x82f402c), at 0xfebfc6d7 
  [64] g_main_dispatch(0x8385ca0), at 0xfebf9690 
  [65] g_main_context_dispatch(0x8385ca0), at 0xfebfa779 
  [66] g_main_context_iterate(0x8385ca0, 0x1, 0x1, 0x83df268), at 0xfebfab99 
  [67] g_main_loop_run(0x86e7458), at 0xfebfb19e 
  [68] bonobo_main(0x84706ac, 0x8046890, 0x86e7b5c, 0x816e640, 0x8046814, 0x80acee4), at 0xfbcef3b2 
  [69] _wrap_bonobo_main(0x0, 0x0), at 0xfbaa88b1 
  [70] call_function(0x8046890, 0x0), at 0x80acee4 
  [71] PyEval_EvalFrameEx(0x86e7a1c, 0x0), at 0x80a8f4e 
  [72] fast_function(0x8550f44, 0x80469a0, 0x1, 0x1, 0x0), at 0x80ad0c1 
  [73] call_function(0x80469a0, 0x0), at 0x80acc92 
  [74] PyEval_EvalFrameEx(0x8654c04, 0x0), at 0x80a8f4e 
  [75] fast_function(0x85d309c, 0x8046ab0, 0x1, 0x1, 0x0), at 0x80ad0c1 
  [76] call_function(0x8046ab0, 0x1), at 0x80acc92 
  [77] PyEval_EvalFrameEx(0x820a994, 0x0), at 0x80a8f4e 
  [78] fast_function(0x85d3224, 0x8046bc0, 0x0, 0x0, 0x0), at 0x80ad0c1 
  [79] call_function(0x8046bc0, 0x0), at 0x80acc92 
  [80] PyEval_EvalFrameEx(0x819ac5c, 0x0), at 0x80a8f4e 
  [81] PyEval_EvalCodeEx(0x8188f98, 0x8166934, 0x8166934, 0x0, 0x0, 0x0), at 0x80abdb6 
  [82] PyEval_EvalCode(0x8188f98, 0x8166934, 0x8166934), at 0x80a7fa6 
  [83] run_mod(0x8208a60, 0x8103294, 0x8166934, 0x8166934, 0x8046d9c, 0x818f420), at 0x80c5226 
  [84] PyRun_StringFlags(0x814c988, 0x101, 0x8166934, 0x8166934, 0x8046d9c), at 0x80c515d 
  [85] PyRun_SimpleStringFlags(0x814c988, 0x8046d9c), at 0x80c4642 
  [86] Py_Main(0x4, 0x8046dec, 0xfeffa840, 0x8046da8, 0x8046f08, 0x8046de0), at 0x805e478 
  [87] main(0x4, 0x8046dec, 0x8046e00), at 0x805db7d 

Even those these messages are "CRITICAL", they are occuring at a time
when the Orca Preferences dialog is being destroyed so I don't think 
they are failures that are going to adversly affect how Orca runs.

Having said that, it would be nice to make them go away. I wonder if
I'm not doing the right thing in the windowDestroyed() handler. I'll
have to see if I can find some similar code to compare it against.
Comment 48 Rich Burridge 2006-09-27 14:50:24 UTC
I see that the:

** (-c:15425): CRITICAL **: file gailnotebook.c: line 555: assertion `obj'
failed

message is happening for gtk-demo on my system, so I suspect that is a Gtk+
problem and not something specific to the way that the Orca Preference dialog
code is written.

As the other warning occurs as the user is destroying the Preferences GUI
dialog, and nothing adverse is happening when if it's reinstated, I'm
closing this bug out as FIXED.

If we find other new problems with the Preferences dialog, new bugs can be
filed.