[g-a-devel] Re: gail - gdk lock take/release ...



Hi Michael:

Thanks for the patch. The strcmp bug has been fixed for days, are you sure you patched HEAD?

Do you want me to review the patch as-is, or refactor the cut and paste stuff and apply myself?

Bill

michael meeks wrote:

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;
}




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]