diff options
| -rw-r--r-- | meta/packages/gtk+/gtk+-2.11.6/range-no-redraw.patch | 138 | ||||
| -rw-r--r-- | meta/packages/gtk+/gtk+_2.11.6.bb | 2 | 
2 files changed, 112 insertions, 28 deletions
| diff --git a/meta/packages/gtk+/gtk+-2.11.6/range-no-redraw.patch b/meta/packages/gtk+/gtk+-2.11.6/range-no-redraw.patch index 15de0c25d..14387b8a2 100644 --- a/meta/packages/gtk+/gtk+-2.11.6/range-no-redraw.patch +++ b/meta/packages/gtk+/gtk+-2.11.6/range-no-redraw.patch @@ -1,43 +1,127 @@ -Index: gtk/gtkrange.c -=================================================================== ---- gtk/gtkrange.c	(revision 18523) -+++ gtk/gtkrange.c	(working copy) -@@ -99,8 +99,10 @@ -  -   GtkSensitivityType lower_sensitivity; +5f084ea0849d5967a3c22821542ecaaa8accb398 +diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c +index bd95351..64e0e59 100644 +--- gtk/gtkrange.c ++++ gtk/gtkrange.c +@@ -109,6 +109,8 @@ struct _GtkRangeLayout     GtkSensitivityType upper_sensitivity;     gdouble fill_level;  + -+  guint motion_idle; ++  guint motion_idle_id;   }; -@@ -1721,6 +1723,16 @@ -                  &handled); +@@ -205,6 +207,8 @@ static gboolean      gtk_range_real_change_value        (GtkRange      *range, + static void          gtk_range_update_value             (GtkRange      *range); + static gboolean      gtk_range_key_press                (GtkWidget     *range, + 							 GdkEventKey   *event); ++static void          gtk_range_add_motion_idle          (GtkRange *range); ++static void          gtk_range_remove_motion_idle       (GtkRange *range); +  +  + static guint signals[LAST_SIGNAL]; +@@ -1167,6 +1171,7 @@ gtk_range_destroy (GtkObject *object) +  +   gtk_range_remove_step_timer (range); +   gtk_range_remove_update_timer (range); ++  gtk_range_remove_motion_idle (range); +    +   if (range->adjustment) +     { +@@ -1276,6 +1281,7 @@ gtk_range_unrealize (GtkWidget *widget) +  +   gtk_range_remove_step_timer (range); +   gtk_range_remove_update_timer (range); ++  gtk_range_remove_motion_idle (range); +    +   gdk_window_set_user_data (range->event_window, NULL); +   gdk_window_destroy (range->event_window); +@@ -2165,7 +2171,7 @@ gtk_range_motion_notify (GtkWidget      *widget, +     gtk_widget_queue_draw (widget); +  +   if (range->layout->grab_location == MOUSE_SLIDER) +-    update_slider_position (range, x, y); ++    gtk_range_add_motion_idle (range); +  +   /* We handled the event if the mouse was in the range_rect */ +   return range->layout->mouse_location != MOUSE_OUTSIDE; +@@ -3335,9 +3341,10 @@ initial_timeout (gpointer data) +   g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL); +  +   range = GTK_RANGE (data); +-  range->timer->timeout_id = gdk_threads_add_timeout (timeout * SCROLL_DELAY_FACTOR, +-                                            second_timeout, +-                                            range); ++  range->timer->timeout_id = ++    gdk_threads_add_timeout (timeout * SCROLL_DELAY_FACTOR, ++                             second_timeout, ++                             range); +   /* remove self */ +   return FALSE; + } +@@ -3357,9 +3364,8 @@ gtk_range_add_step_timer (GtkRange      *range, +  +   range->timer = g_new (GtkRangeStepTimer, 1); +  +-  range->timer->timeout_id = gdk_threads_add_timeout (timeout, +-                                            initial_timeout, +-                                            range); ++  range->timer->timeout_id = ++    gdk_threads_add_timeout (timeout, initial_timeout, range); +   range->timer->step = step; +  +   gtk_range_scroll (range, range->timer->step); +@@ -3397,9 +3403,8 @@ gtk_range_reset_update_timer (GtkRange *range) + { +   gtk_range_remove_update_timer (range); +  +-  range->update_timeout_id = gdk_threads_add_timeout (UPDATE_DELAY, +-                                            update_timeout, +-                                            range); ++  range->update_timeout_id = ++    gdk_threads_add_timeout (UPDATE_DELAY, update_timeout, range); + } +  + static void +@@ -3412,5 +3417,40 @@ gtk_range_remove_update_timer (GtkRange *range) +     }   }  +static gboolean -+update_slider_position_idle (GtkRange *range) ++motion_idle (gpointer data)  +{ -+  update_slider_position (range, range->layout->mouse_x,range->layout->mouse_y);  ++  GtkRange *range = data; ++  GtkRangeLayout *layout = range->layout;  + -+  range->layout->motion_idle = 0; ++  update_slider_position (range, layout->mouse_x, layout->mouse_y);  ++ ++  layout->motion_idle_id = 0;  +  +  return FALSE;  +}  + - static void  - stop_scrolling (GtkRange *range) - { -@@ -1860,8 +1872,8 @@ -   if (gtk_range_update_mouse_location (range)) -     gtk_widget_queue_draw (widget); -  --  if (range->layout->grab_location == MOUSE_SLIDER) --    update_slider_position (range, x, y); -+  if (range->layout->grab_location == MOUSE_SLIDER && !range->layout->motion_idle) -+    range->layout->motion_idle = g_idle_add ((GSourceFunc)update_slider_position_idle, range); -  -   /* We handled the event if the mouse was in the range_rect */ -   return range->layout->mouse_location != MOUSE_OUTSIDE; ++static void ++gtk_range_add_motion_idle (GtkRange *range) ++{ ++  if (!range->layout->motion_idle_id) ++    { ++      range->layout->motion_idle_id = ++        gdk_threads_add_idle_full (GDK_PRIORITY_REDRAW, ++                                   motion_idle, range, ++                                   NULL); ++    } ++} ++ ++static void ++gtk_range_remove_motion_idle (GtkRange *range) ++{ ++  if (range->layout->motion_idle_id != 0) ++    { ++      g_source_remove (range->layout->motion_idle_id); ++      range->layout->motion_idle_id = 0; ++    } ++} ++ + #define __GTK_RANGE_C__ + #include "gtkaliasdef.c" diff --git a/meta/packages/gtk+/gtk+_2.11.6.bb b/meta/packages/gtk+/gtk+_2.11.6.bb index 6aa9d052a..186923b06 100644 --- a/meta/packages/gtk+/gtk+_2.11.6.bb +++ b/meta/packages/gtk+/gtk+_2.11.6.bb @@ -1,7 +1,7 @@  require gtk+.inc  DEPENDS += "cairo" -PR = "r2" +PR = "r3"  # disable per default - untested and not all patches included.  DEFAULT_PREFERENCE = "-1"  | 
