Hi there,
So - this is a simple patch to ensure that we hold the GDK lock when we
enter from an idle handler - a pre-requisite for the safe use of (at
least) gtk+ in this situation. [ that also incidentally taking the Solar
Mutex when in OO.o ].
I didn't do the obvious re-factor of the slew of cut/paste here - which
needs doing IMHO.
This also makes HEAD gail compile properly - cf. strncmp bug.
HTH,
Michael.
------------------------------------------------------------------------
? gail-zip
? stamp-h1
? docs/reference/libgail-util/gail-libgail-util.interfaces
? docs/reference/libgail-util/gail-libgail-util.prerequisites
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gail/ChangeLog,v
retrieving revision 1.808
diff -u -r1.808 ChangeLog
--- ChangeLog 14 Nov 2005 15:26:38 -0000 1.808
+++ ChangeLog 22 Nov 2005 12:12:27 -0000
@@ -1,3 +1,16 @@
+2005-11-22 Michael Meeks <michael meeks novell com>
+
+ * gail/gailtoplevel.c (gail_toplevel_show_event_watcher):
+ use strcmp not strncmp - so it compiles.
+
+ * gail/*.c: for all g_idle callbacks: add GDK_THREADS_ENTER /
+ GDK_THREADS_LEAVE at top/tail, leave re-factoring the galloping
+ cut/paste until later - what we need here is a
+ guint gail_idle_add (GtkWidget *, gpointer data,
+ gboolean elide_invisible);
+ method, preferably one that automatically handles the idle
+ source removal on destroy by tracking the widget's lifetime etc.
+
2005-11-14 Bill Haneman <bill haneman sun com>
Fixes for OpenOffice.org direct bridge.
Index: docs/reference/libgail-util/tmpl/gailmisc.sgml
===================================================================
RCS file: /cvs/gnome/gail/docs/reference/libgail-util/tmpl/gailmisc.sgml,v
retrieving revision 1.3
diff -u -r1.3 gailmisc.sgml
--- docs/reference/libgail-util/tmpl/gailmisc.sgml 5 Oct 2005 15:57:37 -0000 1.3
+++ docs/reference/libgail-util/tmpl/gailmisc.sgml 22 Nov 2005 12:12:27 -0000
@@ -18,9 +18,6 @@
</para>
-<!-- ##### SECTION Stability_Level ##### -->
-
-
<!-- ##### FUNCTION gail_misc_add_attribute ##### -->
<para>
Index: docs/reference/libgail-util/tmpl/gailtextutil.sgml
===================================================================
RCS file: /cvs/gnome/gail/docs/reference/libgail-util/tmpl/gailtextutil.sgml,v
retrieving revision 1.3
diff -u -r1.3 gailtextutil.sgml
--- docs/reference/libgail-util/tmpl/gailtextutil.sgml 5 Oct 2005 15:57:37 -0000 1.3
+++ docs/reference/libgail-util/tmpl/gailtextutil.sgml 22 Nov 2005 12:12:27 -0000
@@ -20,9 +20,6 @@
</para>
-<!-- ##### SECTION Stability_Level ##### -->
-
-
<!-- ##### STRUCT GailTextUtil ##### -->
<para>
The GailTextCell structure should not be accessed directly.
Index: gail/gail.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gail.c,v
retrieving revision 1.103
diff -u -r1.103 gail.c
--- gail/gail.c 14 Nov 2005 15:26:39 -0000 1.103
+++ gail/gail.c 22 Nov 2005 12:12:28 -0000
@@ -505,6 +505,8 @@
static gint
gail_focus_idle_handler (gpointer data)
{
+ GDK_THREADS_ENTER();
+
focus_notify_handler = 0;
/*
* The widget which was to receive focus may have been removed
@@ -512,7 +514,10 @@
if (!next_focus_widget)
{
if (next_focus_widget != data)
- return FALSE;
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
}
else
{
@@ -523,6 +528,7 @@
gail_focus_notify (data);
+ GDK_THREADS_LEAVE ();
return FALSE;
}
Index: gail/gailbutton.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailbutton.c,v
retrieving revision 1.75
diff -u -r1.75 gailbutton.c
--- gail/gailbutton.c 20 Aug 2004 07:23:28 -0000 1.75
+++ gail/gailbutton.c 22 Nov 2005 12:12:30 -0000
@@ -511,18 +511,18 @@
GtkWidget *widget;
GailButton *gail_button;
+ GDK_THREADS_ENTER ();
+
gail_button = GAIL_BUTTON (data);
gail_button->action_idle_handler = 0;
widget = GTK_ACCESSIBLE (gail_button)->widget;
- if (widget == NULL)
- /*
- * State is defunct
- */
- return FALSE;
-
- if (!GTK_WIDGET_IS_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
- return FALSE;
+ if (widget == NULL /* State is defunct */ ||
+ !GTK_WIDGET_IS_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
button = GTK_BUTTON (widget);
while (!g_queue_is_empty (gail_button->action_queue))
@@ -570,6 +570,9 @@
break;
}
}
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
Index: gail/gailcell.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailcell.c,v
retrieving revision 1.39
diff -u -r1.39 gailcell.c
--- gail/gailcell.c 28 Apr 2005 14:14:37 -0000 1.39
+++ gail/gailcell.c 22 Nov 2005 12:12:31 -0000
@@ -517,9 +517,13 @@
{
GailCell *cell;
+ GDK_THREADS_ENTER ();
+
cell = GAIL_CELL (data);
cell->action_idle_handler = 0;
cell->action_func (cell);
+
+ GDK_THREADS_LEAVE ();
return FALSE;
}
Index: gail/gailcombo.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailcombo.c,v
retrieving revision 1.29
diff -u -r1.29 gailcombo.c
--- gail/gailcombo.c 30 Nov 2004 13:12:38 -0000 1.29
+++ gail/gailcombo.c 22 Nov 2005 12:12:31 -0000
@@ -187,11 +187,16 @@
{
GailCombo *combo;
+ GDK_THREADS_ENTER ();
+
combo = GAIL_COMBO (data);
combo->old_selection = NULL;
combo->deselect_idle_handler = 0;
g_signal_emit_by_name (data, "selection_changed");
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
@@ -200,10 +205,15 @@
{
GailCombo *combo;
+ GDK_THREADS_ENTER ();
+
combo = GAIL_COMBO (data);
combo->select_idle_handler = 0;
g_signal_emit_by_name (data, "selection_changed");
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
@@ -359,17 +369,17 @@
gboolean do_popup;
GdkEvent tmp_event;
+ GDK_THREADS_ENTER ();
+
gail_combo = GAIL_COMBO (data);
gail_combo->action_idle_handler = 0;
widget = GTK_ACCESSIBLE (gail_combo)->widget;
- if (widget == NULL)
- /*
- * State is defunct
- */
- return FALSE;
-
- if (!GTK_WIDGET_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
- return FALSE;
+ if (widget == NULL /* State is defunct */ ||
+ !GTK_WIDGET_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
combo = GTK_COMBO (widget);
@@ -401,6 +411,9 @@
gtk_widget_event (action_widget, &tmp_event);
g_idle_add (_gail_combo_popup_release, combo);
}
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
@@ -607,9 +620,14 @@
GtkWidget *action_widget;
GdkEvent tmp_event;
+ GDK_THREADS_ENTER ();
+
combo = GTK_COMBO (data);
if (combo->current_button == 0)
- return FALSE;
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
tmp_event.button.type = GDK_BUTTON_RELEASE;
tmp_event.button.button = 1;
@@ -618,6 +636,8 @@
gtk_widget_event (action_widget, &tmp_event);
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
@@ -628,9 +648,14 @@
GtkWidget *action_widget;
GdkEvent tmp_event;
+ GDK_THREADS_ENTER ();
+
combo = GTK_COMBO (data);
if (combo->current_button == 0)
- return FALSE;
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
tmp_event.button.type = GDK_BUTTON_RELEASE;
tmp_event.button.button = 1;
@@ -640,6 +665,8 @@
action_widget = combo->list;
gtk_widget_event (action_widget, &tmp_event);
+
+ GDK_THREADS_LEAVE ();
return FALSE;
}
Index: gail/gailcombobox.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailcombobox.c,v
retrieving revision 1.11
diff -u -r1.11 gailcombobox.c
--- gail/gailcombobox.c 13 Aug 2004 09:12:29 -0000 1.11
+++ gail/gailcombobox.c 22 Nov 2005 12:12:32 -0000
@@ -386,17 +386,17 @@
AtkObject *popup;
gboolean do_popup;
+ GDK_THREADS_ENTER ();
+
gail_combo_box = GAIL_COMBO_BOX (data);
gail_combo_box->action_idle_handler = 0;
widget = GTK_ACCESSIBLE (gail_combo_box)->widget;
- if (widget == NULL)
- /*
- * State is defunct
- */
- return FALSE;
-
- if (!GTK_WIDGET_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
- return FALSE;
+ if (widget == NULL /* State is defunct */
+ !GTK_WIDGET_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
combo_box = GTK_COMBO_BOX (widget);
@@ -406,6 +406,8 @@
gtk_combo_box_popup (combo_box);
else
gtk_combo_box_popdown (combo_box);
+
+ GDK_THREADS_LEAVE ();
return FALSE;
}
Index: gail/gailentry.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailentry.c,v
retrieving revision 1.83
diff -u -r1.83 gailentry.c
--- gail/gailentry.c 30 Mar 2005 09:47:44 -0000 1.83
+++ gail/gailentry.c 22 Nov 2005 12:12:33 -0000
@@ -1072,10 +1072,16 @@
static gboolean
idle_notify_insert (gpointer data)
{
- GailEntry *entry = GAIL_ENTRY (data);
+ GailEntry *entry;
+
+ GDK_THREADS_ENTER ();
+ entry = GAIL_ENTRY (data);
entry->insert_idle_handler = 0;
gail_entry_notify_insert (entry);
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
@@ -1156,10 +1162,16 @@
static gboolean
idle_notify_delete (gpointer data)
{
- GailEntry *entry = GAIL_ENTRY (data);
+ GailEntry *entry;
+ GDK_THREADS_ENTER ();
+
+ entry = GAIL_ENTRY (data);
entry->delete_idle_handler = 0;
gail_entry_notify_delete (entry);
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
@@ -1305,19 +1317,22 @@
GailEntry *entry;
GtkWidget *widget;
+ GDK_THREADS_ENTER ();
+
entry = GAIL_ENTRY (data);
entry->action_idle_handler = 0;
widget = GTK_ACCESSIBLE (entry)->widget;
- if (widget == NULL)
- /*
- * State is defunct
- */
- return FALSE;
-
- if (!GTK_WIDGET_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
- return FALSE;
+ if (widget == NULL /* State is defunct */ ||
+ !GTK_WIDGET_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
gtk_widget_activate (widget);
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
Index: gail/gailexpander.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailexpander.c,v
retrieving revision 1.6
diff -u -r1.6 gailexpander.c
--- gail/gailexpander.c 27 Jul 2004 08:14:00 -0000 1.6
+++ gail/gailexpander.c 22 Nov 2005 12:12:34 -0000
@@ -418,20 +418,23 @@
GtkWidget *widget;
GailExpander *gail_expander;
+ GDK_THREADS_ENTER ();
+
gail_expander = GAIL_EXPANDER (data);
gail_expander->action_idle_handler = 0;
widget = GTK_ACCESSIBLE (gail_expander)->widget;
- if (widget == NULL)
- /*
- * State is defunct
- */
- return FALSE;
-
- if (!GTK_WIDGET_IS_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
- return FALSE;
+ if (widget == NULL /* State is defunct */ ||
+ !GTK_WIDGET_IS_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
gtk_widget_activate (widget);
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
Index: gail/gailmenuitem.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailmenuitem.c,v
retrieving revision 1.47
diff -u -r1.47 gailmenuitem.c
--- gail/gailmenuitem.c 4 Jun 2004 07:36:51 -0000 1.47
+++ gail/gailmenuitem.c 22 Nov 2005 12:12:35 -0000
@@ -349,15 +349,17 @@
GailMenuItem *menu_item;
gboolean item_mapped;
+ GDK_THREADS_ENTER ();
+
menu_item = GAIL_MENU_ITEM (data);
menu_item->action_idle_handler = 0;
item = GTK_ACCESSIBLE (menu_item)->widget;
- if (item == NULL)
- /* State is defunct */
- return FALSE;
-
- if (!GTK_WIDGET_SENSITIVE (item) || !GTK_WIDGET_VISIBLE (item))
+ if (item == NULL /* State is defunct */ ||
+ !GTK_WIDGET_SENSITIVE (item) || !GTK_WIDGET_VISIBLE (item))
+ {
+ GDK_THREADS_LEAVE ();
return FALSE;
+ }
item_parent = gtk_widget_get_parent (item);
gtk_menu_shell_select_item (GTK_MENU_SHELL (item_parent), item);
@@ -369,6 +371,9 @@
/*force_hide*/ 1);
if (!item_mapped)
ensure_menus_unposted (menu_item);
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
Index: gail/gailnotebook.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailnotebook.c,v
retrieving revision 1.31
diff -u -r1.31 gailnotebook.c
--- gail/gailnotebook.c 24 Nov 2004 15:08:50 -0000 1.31
+++ gail/gailnotebook.c 22 Nov 2005 12:12:35 -0000
@@ -593,6 +593,8 @@
GailNotebook *gail_notebook;
GtkNotebook *gtk_notebook;
+ GDK_THREADS_ENTER ();
+
atk_obj = ATK_OBJECT (data);
gail_notebook = GAIL_NOTEBOOK (atk_obj);
widget = GTK_ACCESSIBLE (atk_obj)->widget;
@@ -602,7 +604,10 @@
gail_notebook->idle_focus_id = 0;
if (!gtk_notebook->focus_tab)
- return FALSE;
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
old_focus_page_num = gail_notebook->focus_tab_page;
focus_page_num = g_list_index (gtk_notebook->children, gtk_notebook->focus_tab->data);
@@ -615,6 +620,9 @@
atk_focus_tracker_notify (obj);
g_object_unref (obj);
}
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
Index: gail/gailnotebookpage.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailnotebookpage.c,v
retrieving revision 1.29
diff -u -r1.29 gailnotebookpage.c
--- gail/gailnotebookpage.c 5 Apr 2005 16:32:18 -0000 1.29
+++ gail/gailnotebookpage.c 22 Nov 2005 12:12:36 -0000
@@ -183,17 +183,22 @@
GailNotebookPage *page;
AtkObject *atk_object, *atk_parent;
+ GDK_THREADS_ENTER ();
+
g_return_val_if_fail (GAIL_IS_NOTEBOOK_PAGE (data), FALSE);
page = GAIL_NOTEBOOK_PAGE (data);
atk_object = ATK_OBJECT (data);
/* The widget page->notebook may be deleted before this handler is called */
- if (page->notebook == NULL)
- return FALSE;
- atk_parent = gtk_widget_get_accessible (GTK_WIDGET (page->notebook));
- atk_object_set_parent (atk_object, atk_parent);
- g_signal_emit_by_name (atk_parent, "children_changed::add", page->index, atk_object, NULL);
+ if (page->notebook != NULL)
+ {
+ atk_parent = gtk_widget_get_accessible (GTK_WIDGET (page->notebook));
+ atk_object_set_parent (atk_object, atk_parent);
+ g_signal_emit_by_name (atk_parent, "children_changed::add", page->index, atk_object, NULL);
+ }
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
Index: gail/gailoptionmenu.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailoptionmenu.c,v
retrieving revision 1.24
diff -u -r1.24 gailoptionmenu.c
--- gail/gailoptionmenu.c 13 Aug 2004 09:12:29 -0000 1.24
+++ gail/gailoptionmenu.c 22 Nov 2005 12:12:37 -0000
@@ -273,18 +273,18 @@
GdkEvent tmp_event;
GailButton *gail_button;
+ GDK_THREADS_ENTER ();
+
gail_button = GAIL_BUTTON (data);
gail_button->action_idle_handler = 0;
widget = GTK_ACCESSIBLE (gail_button)->widget;
- if (widget == NULL)
- /*
- * State is defunct
- */
- return FALSE;
-
- if (!GTK_WIDGET_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
- return FALSE;
+ if (widget == NULL /* State is defunct */ ||
+ !GTK_WIDGET_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
button = GTK_BUTTON (widget);
@@ -302,6 +302,8 @@
tmp_event.button.axes = NULL;
gtk_widget_event (widget, &tmp_event);
+
+ GDK_THREADS_LEAVE ();
return FALSE;
}
Index: gail/gailtextview.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailtextview.c,v
retrieving revision 1.101
diff -u -r1.101 gailtextview.c
--- gail/gailtextview.c 13 Aug 2004 09:12:29 -0000 1.101
+++ gail/gailtextview.c 22 Nov 2005 12:12:39 -0000
@@ -1657,6 +1657,8 @@
GailTextView *gail_text_view;
GtkTextBuffer *buffer;
+ GDK_THREADS_ENTER ();
+
gail_text_view = GAIL_TEXT_VIEW (data);
g_signal_emit_by_name (data,
@@ -1677,5 +1679,8 @@
emit_text_caret_moved (gail_text_view, get_insert_offset (buffer));
gail_text_view->previous_selection_bound = get_selection_bound (buffer);
}
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
Index: gail/gailtoplevel.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailtoplevel.c,v
retrieving revision 1.32
diff -u -r1.32 gailtoplevel.c
--- gail/gailtoplevel.c 14 Nov 2005 15:26:39 -0000 1.32
+++ gail/gailtoplevel.c 22 Nov 2005 12:12:39 -0000
@@ -254,6 +254,12 @@
return TRUE;
}
+ child = gtk_widget_get_accessible (widget);
+ if (!strcmp (atk_role_get_name (atk_object_get_role (child)), "redundant object"))
+ {
+ return TRUE;
+ }
+
/* Add the window to the list & emit the signal */
toplevel->window_list = g_list_append (toplevel->window_list, widget);
Index: gail/gailtreeview.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailtreeview.c,v
retrieving revision 1.181
diff -u -r1.181 gailtreeview.c
--- gail/gailtreeview.c 1 Nov 2005 17:02:17 -0000 1.181
+++ gail/gailtreeview.c 22 Nov 2005 12:12:44 -0000
@@ -2228,6 +2228,7 @@
{
AtkObject *atk_obj = gtk_widget_get_accessible (GTK_WIDGET (tree_view));
GailTreeView *gailview = GAIL_TREE_VIEW (atk_obj);
+
/*
* The visible rectangle has not been updated when this signal is emitted
* so we process the signal when the GTK processing is completed
@@ -2242,15 +2243,23 @@
idle_expand_row (gpointer data)
{
GailTreeView *gailview = data;
- GtkTreePath *path = gailview->idle_expand_path;
- GtkTreeView *tree_view = GTK_TREE_VIEW (GTK_ACCESSIBLE (gailview)->widget);
+ GtkTreePath *path;
+ GtkTreeView *tree_view;
GtkTreeIter iter;
GtkTreeModel *tree_model;
gint n_inserted, row;
+ GDK_THREADS_ENTER ();
+
+ path = gailview->idle_expand_path;
+ tree_view = GTK_TREE_VIEW (GTK_ACCESSIBLE (gailview)->widget);
+
tree_model = gtk_tree_view_get_model(tree_view);
if (!gtk_tree_model_get_iter (tree_model, &iter, path))
+ {
+ GDK_THREADS_LEAVE ();
return FALSE;
+ }
/*
* Update visibility of cells below expansion row
@@ -2277,8 +2286,11 @@
gtk_tree_path_free (path_copy);
}
else
- /* We can get here if the row expanded callback deleted the row */
- return FALSE;
+ {
+ /* We can get here if the row expanded callback deleted the row */
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
/* Set expand state */
set_expand_state (tree_view, tree_model, gailview, path, FALSE);
@@ -2296,6 +2308,9 @@
gtk_tree_path_free (path);
g_free (data);
+
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
@@ -2591,6 +2606,8 @@
AtkObject *parent;
AtkObject *cell;
+ GDK_THREADS_ENTER ();
+
parent = ATK_OBJECT (data);
widget = GTK_ACCESSIBLE (parent)->widget;
@@ -2598,7 +2615,10 @@
* Widget has been deleted
*/
if (widget == NULL)
- return FALSE;
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
tree_view = GTK_TREE_VIEW (widget);
@@ -2627,6 +2647,8 @@
else
g_object_unref (cell);
}
+
+ GDK_THREADS_LEAVE ();
return FALSE;
}
Index: gail/gailwindow.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailwindow.c,v
retrieving revision 1.58
diff -u -r1.58 gailwindow.c
--- gail/gailwindow.c 25 Mar 2005 03:24:38 -0000 1.58
+++ gail/gailwindow.c 22 Nov 2005 12:12:45 -0000
@@ -475,10 +475,15 @@
GailWindow *window;
AtkObject *obj;
+ GDK_THREADS_ENTER ();
+
window = GAIL_WINDOW (data);
window->name_change_handler = 0;
if (GTK_ACCESSIBLE (window)->widget == NULL)
- return FALSE;
+ {
+ GDK_THREADS_LEAVE ();
+ return FALSE;
+ }
obj = ATK_OBJECT (window);
if (obj->name == NULL)
@@ -489,6 +494,7 @@
g_object_notify (G_OBJECT (obj), "accessible-name");
}
g_signal_emit_by_name (obj, "visible_data_changed");
+ GDK_THREADS_LEAVE ();
return FALSE;
}
@@ -783,11 +789,15 @@
{
int screen_n = GPOINTER_TO_INT (data);
+ GDK_THREADS_ENTER ();
+
gail_screens [screen_n].update_handler = 0;
gail_screens [screen_n].update_stacked_windows = FALSE;
get_stacked_windows (&gail_screens [screen_n]);
+ GDK_THREADS_LEAVE ();
+
return FALSE;
}
@@ -798,6 +808,8 @@
GailScreenInfo *info;
int i;
+ GDK_THREADS_ENTER ();
+
info = &gail_screens [screen_n];
info->update_desktop_handler = 0;
@@ -809,6 +821,8 @@
info->desktop_changed [i] = FALSE;
}
}
+
+ GDK_THREADS_LEAVE ();
return FALSE;
}