]> git.0d.be Git - empathy.git/commitdiff
Prevent an infinite loop when query tooltip on contact list view.
authorXavier Claessens <xclaesse@gmail.com>
Sun, 8 Mar 2009 09:45:27 +0000 (09:45 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Sun, 8 Mar 2009 09:45:27 +0000 (09:45 +0000)
From: Xavier Claessens <xclaesse@gmail.com>

svn path=/trunk/; revision=2627

libempathy-gtk/empathy-contact-list-view.c

index b7a6601c6e4b6ca2961377461d46a2f60112f5fe..5df6c8d2a18b5c4b6eeb4f0b952902171744d4ba 100644 (file)
@@ -141,16 +141,24 @@ contact_list_view_query_tooltip_cb (EmpathyContactListView *view,
        GtkTreeModel               *model;
        GtkTreeIter                 iter;
        GtkTreePath                *path;
+       static gboolean             running = FALSE;
+       gboolean                    ret = FALSE;
+
+       /* Avoid an infinite loop. See GNOME bug #574377 */
+       if (running) {
+               return FALSE;
+       }
+       running = TRUE;
 
        /* FIXME: We need GTK version >= 2.12.10. See GNOME bug #504087 */
        if (gtk_check_version (2, 12, 10)) {
-               return FALSE;
+               goto OUT;
        }
 
        if (!gtk_tree_view_get_tooltip_context (GTK_TREE_VIEW (view), &x, &y,
                                                keyboard_mode,
                                                &model, &path, &iter)) {
-               return FALSE;
+               goto OUT;
        }
 
        gtk_tree_view_set_tooltip_row (GTK_TREE_VIEW (view), tooltip, path);
@@ -160,7 +168,7 @@ contact_list_view_query_tooltip_cb (EmpathyContactListView *view,
                            EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact,
                            -1);
        if (!contact) {
-               return FALSE;
+               goto OUT;
        }
 
        if (!priv->tooltip_widget) {
@@ -176,10 +184,13 @@ contact_list_view_query_tooltip_cb (EmpathyContactListView *view,
        }
 
        gtk_tooltip_set_custom (tooltip, priv->tooltip_widget);
+       ret = TRUE;
 
        g_object_unref (contact);
+OUT:
+       running = FALSE;
 
-       return TRUE;
+       return ret;
 }
 
 static void