• Alexander Mikhaylenko's avatar
    dragsource: Use double coordinates for checking drag threshold · f63e6394
    Alexander Mikhaylenko authored
    If multiple nested widgets have drag sources on them, both using bubble
    phase, we need to reliably pick the inner one. Both of them will try to
    start dragging, and we need to make sure there are no situations where the
    outer widget starts drag earlier and cancels the inner one.
    
    Currently, this can easily happen via integer rounding: start and current
    coordinates passed into gtk_drag_check_threshold() are initially doubles
    (other than in GtkNotebook and GtkIconView), and are casted to ints. Then
    those rounded values are used to calculate deltas to compare to the drag
    threshold, losing quite a lot of precision along the way, and often
    resulting in the outer widget getting larger deltas.
    
    To avoid it, just don't round it. Introduce a variant of the function that
    operates on doubles: gtk_drag_check_threshold_double() and use it instead
    of the original everywhere.
    f63e6394
gtkdragsource.c 24.2 KB