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 15de0c25d8..14387b8a2e 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 6aa9d052af..186923b068 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" |