]> Pileus Git - ~andy/gtk/commitdiff
Fix problem with selecting a new focus child.
authorOwen Taylor <otaylor@redhat.com>
Sun, 5 Aug 2001 14:29:12 +0000 (14:29 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Sun, 5 Aug 2001 14:29:12 +0000 (14:29 +0000)
Sun Aug  5 09:48:08 2001  Owen Taylor  <otaylor@redhat.com>

* gtk/gtklist.c (gtk_list_clear_items): Fix
problem with selecting a new focus child.

* gtk/gtklist.c (gtk_list_clear_items): Clear
list->undo/list_focus_child after unparenting
child, since unparenting the child can result
in list->last_focus_child being set. (#58024)

* Makefile.am (SUBDIRS): Add target specific pc
files to DISTCLEANFILES.

* gtk/Makefile.am: add @GTK_DEBUG_FLAGS@
(58327, Matthias Clasen)

Makefile.am
gtk/Makefile.am
gtk/gtklist.c

index 2d33584c700ddef8e0cbdf5a3ea917bb4dc665c8..a85a63ce8ec8e69b1292061bca55b20f6ab539a7 100644 (file)
@@ -137,6 +137,12 @@ gdk-$(GDKTARGET)-2.0-uninstalled.pc: gdk-2.0-uninstalled.pc
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA= gdk-pixbuf-2.0.pc gdk-$(GDKTARGET)-2.0.pc gtk+-$(GDKTARGET)-2.0.pc
 
+DISTCLEANFILES =                               \
+       gtk+-$(GDKTARGET)-2.0.pc                \
+       gdk-$(GDKTARGET)-2.0.pc                 \
+       gtk+-$(GDKTARGET)-2.0-uninstalled.pc    \
+       gdk-$(GDKTARGET)-2.0-uninstalled.pc
+
 ## symlink gdk-2.0.pc and gtk+-2.0.pc to default target for the platform 
 DEFAULT_GDKTARGET=x11
 install-data-local:
index b39961f9265ed4e66e7e34df781e5e4fd7f607d9..2fcea2c83498a76b78f19b16036e699aac0c4434 100644 (file)
@@ -16,6 +16,7 @@ INCLUDES = @STRIP_BEGIN@ \
        -I$(top_srcdir) -I../gdk                        \
        -I$(top_srcdir)/gdk                             \
        -I$(top_srcdir)/gdk-pixbuf -I../gdk-pixbuf      \
+       @GTK_DEBUG_FLAGS@                               \
        @GTK_DEP_CFLAGS@                                \
 @STRIP_END@
 
index ba080fc6c8ba60450c4e0f1e2a8229ec97fe7cb6..f2dfc8d350dca4dacf2f90180f003acd71175b5e 100644 (file)
@@ -1180,7 +1180,7 @@ gtk_list_clear_items (GtkList *list,
          if (start_list->prev)
            new_focus_child = start_list->prev->data;
          else if (list->children)
-           new_focus_child = list->children->prev->data;
+           new_focus_child = list->children->data;
 
          if (GTK_WIDGET_HAS_FOCUS (container->focus_child))
            grab_focus = TRUE;
@@ -1193,16 +1193,20 @@ gtk_list_clear_items (GtkList *list,
       widget = tmp_list->data;
       tmp_list = tmp_list->next;
 
+      gtk_widget_ref (widget);
+
       if (widget->state == GTK_STATE_SELECTED)
        gtk_list_unselect_child (list, widget);
 
+      gtk_signal_disconnect_by_data (GTK_OBJECT (widget), (gpointer) list);
+      gtk_widget_unparent (widget);
+      
       if (widget == list->undo_focus_child)
        list->undo_focus_child = NULL;
       if (widget == list->last_focus_child)
        list->last_focus_child = NULL;
 
-      gtk_signal_disconnect_by_data (GTK_OBJECT (widget), (gpointer) list);
-      gtk_widget_unparent (widget);
+      gtk_widget_unref (widget);
     }
 
   g_list_free (start_list);
@@ -1310,6 +1314,7 @@ gtk_list_remove_items_internal (GtkList    *list,
       widget = tmp_list->data;
       tmp_list = tmp_list->next;
 
+      gtk_widget_ref (widget);
       if (no_unref)
        gtk_widget_ref (widget);
 
@@ -1328,14 +1333,16 @@ gtk_list_remove_items_internal (GtkList  *list,
            }
        }
 
+      gtk_signal_disconnect_by_data (GTK_OBJECT (widget), (gpointer) list);
+      list->children = g_list_remove (list->children, widget);
+      gtk_widget_unparent (widget);
+
       if (widget == list->undo_focus_child)
        list->undo_focus_child = NULL;
       if (widget == list->last_focus_child)
        list->last_focus_child = NULL;
 
-      gtk_signal_disconnect_by_data (GTK_OBJECT (widget), (gpointer) list);
-      list->children = g_list_remove (list->children, widget);
-      gtk_widget_unparent (widget);
+      gtk_widget_unref (widget);
     }
   
   if (new_focus_child && new_focus_child != old_focus_child)