summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta/packages/gtk+/gtk+-2.11.6/range-no-redraw.patch138
-rw-r--r--meta/packages/gtk+/gtk+_2.11.6.bb2
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"