Am Dienstag, den 26.07.2005, 10:27 +0200 schrieb Luca Ferretti: > Il giorno dom, 24/07/2005 alle 12.10 +0200, Sven J. ha scritto: > > Am Sonntag, den 24.07.2005, 00:36 +0200 schrieb David Christian Berg: > > > There is a offset between the spot where the colour, pattern or emblem > > > is displayed, and the area, where it actually is. When you try drag and > > > drop or clicking on any of the items further down the list, you'll only > > > fail in doing so until you supposedly select an item further up. > > > > its bug #308996, http://bugzilla.gnome.org/show_bug.cgi?id=308996 > > > > i can confirm this here on nautilus 2.10.1 > > I can confirm on HEAD too. :-( Proposed patch attached. Messing around with scroll offsets is no good for widgets inside GtkViewports. -- Christian Neumair <chris gnome-de org>
Index: eel/eel-wrap-table.c =================================================================== RCS file: /cvs/gnome/eel/eel/eel-wrap-table.c,v retrieving revision 1.22 diff -u -p -r1.22 eel-wrap-table.c --- eel/eel-wrap-table.c 13 Jul 2005 09:47:52 -0000 1.22 +++ eel/eel-wrap-table.c 26 Jul 2005 11:47:22 -0000 @@ -100,10 +100,6 @@ static EelDimensions wrap_table_art_irec static EelDimensions wrap_table_get_max_child_dimensions (const EelWrapTable *wrap_table); static EelDimensions wrap_table_get_content_dimensions (const EelWrapTable *wrap_table); static ArtIRect wrap_table_get_content_bounds (const EelWrapTable *wrap_table); -static EelArtIPoint wrap_table_get_scroll_offset (const EelWrapTable *wrap_table); -static GtkWidget * wrap_table_find_child_at_point (const EelWrapTable *wrap_table, - int x, - int y); static gboolean wrap_table_child_focus_in (GtkWidget *widget, GdkEventFocus *event, gpointer data); @@ -714,30 +710,6 @@ wrap_table_get_content_bounds (const Eel return content_bounds; } -static EelArtIPoint -wrap_table_get_scroll_offset (const EelWrapTable *wrap_table) -{ - EelArtIPoint scroll_offset; - GtkWidget *parent; - - g_return_val_if_fail (EEL_IS_WRAP_TABLE (wrap_table), eel_art_ipoint_zero); - - scroll_offset = eel_art_ipoint_zero; - - parent = GTK_WIDGET (wrap_table)->parent; - - /* FIXME: It lame we have to hardcode for a possible viewport - * parent here. Theres probably a better way to do this - */ - if (GTK_IS_VIEWPORT (parent)) { - gdk_window_get_position (GTK_VIEWPORT (parent)->bin_window, - &scroll_offset.x, - &scroll_offset.y); - } - - return scroll_offset; -} - static gboolean wrap_table_child_focus_in (GtkWidget *widget, GdkEventFocus *event, @@ -752,34 +724,6 @@ wrap_table_child_focus_in (GtkWidget *wi return FALSE; } -static GtkWidget * -wrap_table_find_child_at_point (const EelWrapTable *wrap_table, - int x, - int y) -{ - GList *iterator; - - g_return_val_if_fail (EEL_IS_WRAP_TABLE (wrap_table), NULL); - - for (iterator = wrap_table->details->children; iterator; iterator = iterator->next) { - GtkWidget *child; - - child = iterator->data; - - if (GTK_WIDGET_VISIBLE (child)) { - ArtIRect child_bounds; - - child_bounds = eel_gtk_widget_get_bounds (child); - - if (eel_art_irect_contains_point (child_bounds, x, y)) { - return child; - } - } - } - - return NULL; -} - /** * eel_wrap_table_new: * @@ -876,18 +821,30 @@ eel_wrap_table_get_y_spacing (const EelW */ GtkWidget * eel_wrap_table_find_child_at_event_point (const EelWrapTable *wrap_table, - int x, - int y) + int x, + int y) { - EelArtIPoint scroll_offset; + GList *iterator; + + g_return_val_if_fail (EEL_IS_WRAP_TABLE (wrap_table), NULL); - g_return_val_if_fail (EEL_IS_WRAP_TABLE (wrap_table), NULL); + for (iterator = wrap_table->details->children; iterator; iterator = iterator->next) { + GtkWidget *child; + + child = iterator->data; + + if (GTK_WIDGET_VISIBLE (child)) { + ArtIRect child_bounds; - scroll_offset = wrap_table_get_scroll_offset (wrap_table); - - return wrap_table_find_child_at_point (wrap_table, - x + ABS (scroll_offset.x), - y + ABS (scroll_offset.y)); + child_bounds = eel_gtk_widget_get_bounds (child); + + if (eel_art_irect_contains_point (child_bounds, x, y)) { + return child; + } + } + } + + return NULL; } /**
Attachment:
signature.asc
Description: This is a digitally signed message part