Date: Thursday, July 16, 2015 @ 16:40:30
  Author: heftig
Revision: 242282

FS#45666

Added:
  gtk3/trunk/mousewheels-fs45666.patch
Modified:
  gtk3/trunk/PKGBUILD

---------------------------+
 PKGBUILD                  |    7 +
 mousewheels-fs45666.patch |  157 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 162 insertions(+), 2 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2015-07-16 12:43:10 UTC (rev 242281)
+++ PKGBUILD    2015-07-16 14:40:30 UTC (rev 242282)
@@ -5,7 +5,7 @@
 pkgbase=gtk3
 pkgname=(gtk3 gtk-update-icon-cache)
 pkgver=3.16.5
-pkgrel=1
+pkgrel=2
 pkgdesc="GObject-based multi-platform GUI toolkit"
 arch=(i686 x86_64)
 url="http://www.gtk.org/";
@@ -15,12 +15,15 @@
 makedepends=(gobject-introspection libcanberra)
 license=(LGPL)
 
source=(https://download.gnome.org/sources/gtk+/${pkgver:0:4}/gtk+-$pkgver.tar.xz
+        mousewheels-fs45666.patch
         settings.ini)
 sha256sums=('b87c99d127eb962fc857c246b77a65322cdffd7dcbcf46a83bce2040e0f4bc31'
+            'c103076f4f648e20ef8da7ea6a48fda8012ecaec6987008c08f2bfdd4f5101f4'
             '01fc1d81dc82c4a052ac6e25bf9a04e7647267cc3017bc91f9ce3e63e5eb9202')
 
 prepare() {
     cd gtk+-$pkgver
+    patch -Np1 -i ../mousewheels-fs45666.patch
 }
 
 build() {
@@ -62,4 +65,4 @@
     install -Dm755 gtk-update-icon-cache 
"$pkgdir/usr/bin/gtk-update-icon-cache"
 }
 
-# vim:set noet sw=4:
+# vim:set et sw=4:

Added: mousewheels-fs45666.patch
===================================================================
--- mousewheels-fs45666.patch                           (rev 0)
+++ mousewheels-fs45666.patch   2015-07-16 14:40:30 UTC (rev 242282)
@@ -0,0 +1,157 @@
+From 7c35d52f3c3b0079cd6c9b188ec36e732b998720 Mon Sep 17 00:00:00 2001
+From: Carlos Garnacho <carl...@gnome.org>
+Date: Wed, 15 Jul 2015 23:45:49 +0200
+Subject: Revert "x11: Query pointer devices' scroll valuators on toplevel
+ enter events"
+
+This reverts commit 3d9cce79cf16bce335599b3b78b6bd0a04e37560.
+
+The commit broke more scenarios than fixed, better to go back to square one.
+
+diff --git a/gdk/x11/gdkdevice-xi2.c b/gdk/x11/gdkdevice-xi2.c
+index f5e06f1..6d49b9a 100644
+--- a/gdk/x11/gdkdevice-xi2.c
++++ b/gdk/x11/gdkdevice-xi2.c
+@@ -40,6 +40,7 @@ struct _ScrollValuator
+ {
+   guint n_valuator       : 4;
+   guint direction        : 4;
++  guint last_value_valid : 1;
+   gdouble last_value;
+   gdouble increment;
+ };
+@@ -818,8 +819,8 @@ _gdk_x11_device_xi2_add_scroll_valuator (GdkX11DeviceXI2   
 *device,
+ 
+   scroll.n_valuator = n_valuator;
+   scroll.direction = direction;
++  scroll.last_value_valid = FALSE;
+   scroll.increment = increment;
+-  scroll.last_value = 0;
+ 
+   g_array_append_val (device->scroll_valuators, scroll);
+ }
+@@ -850,10 +851,18 @@ _gdk_x11_device_xi2_get_scroll_delta (GdkX11DeviceXI2    
*device,
+           if (delta_ret)
+             *delta_ret = 0;
+ 
+-          if (delta_ret)
+-            *delta_ret = (valuator_value - scroll->last_value) / 
scroll->increment;
++          if (scroll->last_value_valid)
++            {
++              if (delta_ret)
++                *delta_ret = (valuator_value - scroll->last_value) / 
scroll->increment;
+ 
+-          scroll->last_value = valuator_value;
++              scroll->last_value = valuator_value;
++            }
++          else
++            {
++              scroll->last_value = valuator_value;
++              scroll->last_value_valid = TRUE;
++            }
+ 
+           return TRUE;
+         }
+@@ -863,33 +872,17 @@ _gdk_x11_device_xi2_get_scroll_delta (GdkX11DeviceXI2    
*device,
+ }
+ 
+ void
+-_gdk_device_xi2_revalidate_scroll_valuators (GdkX11DeviceXI2 *device)
++_gdk_device_xi2_reset_scroll_valuators (GdkX11DeviceXI2 *device)
+ {
+-  GdkDisplay *display;
+-  XIDeviceInfo *info;
+-  gint i, ndevices;
+-
+-  display = gdk_device_get_display (GDK_DEVICE (device));
+-
+-  gdk_x11_display_error_trap_push (display);
+-  info = XIQueryDevice (GDK_DISPLAY_XDISPLAY (display),
+-                        device->device_id, &ndevices);
+-  gdk_x11_display_error_trap_pop_ignored (display);
+-
+-  if (!info)
+-    return;
++  guint i;
+ 
+   for (i = 0; i < device->scroll_valuators->len; i++)
+     {
+-      XIValuatorClassInfo *valuator;
+       ScrollValuator *scroll;
+ 
+       scroll = &g_array_index (device->scroll_valuators, ScrollValuator, i);
+-      valuator = (XIValuatorClassInfo *) info->classes[scroll->n_valuator + 
1];
+-      scroll->last_value = valuator->value;
++      scroll->last_value_valid = FALSE;
+     }
+-
+-  XIFreeDeviceInfo (info);
+ }
+ 
+ void
+diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
+index 72dfff2..a57ecaf 100644
+--- a/gdk/x11/gdkdevicemanager-xi2.c
++++ b/gdk/x11/gdkdevicemanager-xi2.c
+@@ -825,11 +825,13 @@ handle_device_changed (GdkX11DeviceManagerXI2 
*device_manager,
+                        XIDeviceChangedEvent   *ev)
+ {
+   GdkDisplay *display;
+-  GdkDevice *device;
++  GdkDevice *device, *source_device;
+ 
+   display = gdk_device_manager_get_display (GDK_DEVICE_MANAGER 
(device_manager));
+   device = g_hash_table_lookup (device_manager->id_table,
+                                 GUINT_TO_POINTER (ev->deviceid));
++  source_device = g_hash_table_lookup (device_manager->id_table,
++                                       GUINT_TO_POINTER (ev->sourceid));
+ 
+   if (device)
+     {
+@@ -840,6 +842,9 @@ handle_device_changed (GdkX11DeviceManagerXI2 
*device_manager,
+ 
+       g_signal_emit_by_name (G_OBJECT (device), "changed");
+     }
++
++  if (source_device)
++    _gdk_device_xi2_reset_scroll_valuators (GDK_X11_DEVICE_XI2 
(source_device));
+ }
+ 
+ static GdkCrossingMode
+@@ -1681,16 +1686,16 @@ gdk_x11_device_manager_xi2_translate_event 
(GdkEventTranslator *translator,
+             xev->detail != XINotifyInferior && xev->mode != 
XINotifyPassiveUngrab &&
+           gdk_window_get_window_type (window) == GDK_WINDOW_TOPLEVEL)
+           {
+-            if (gdk_device_get_device_type (device) != GDK_DEVICE_TYPE_MASTER)
+-              _gdk_device_xi2_revalidate_scroll_valuators (GDK_X11_DEVICE_XI2 
(source_device));
++            if (gdk_device_get_device_type (source_device) != 
GDK_DEVICE_TYPE_MASTER)
++              _gdk_device_xi2_reset_scroll_valuators (GDK_X11_DEVICE_XI2 
(source_device));
+             else
+               {
+                 GList *slaves, *l;
+ 
+-                slaves = gdk_device_list_slave_devices (device);
++                slaves = gdk_device_list_slave_devices (source_device);
+ 
+                 for (l = slaves; l; l = l->next)
+-                  _gdk_device_xi2_revalidate_scroll_valuators (l->data);
++                  _gdk_device_xi2_reset_scroll_valuators (GDK_X11_DEVICE_XI2 
(l->data));
+ 
+                 g_list_free (slaves);
+               }
+diff --git a/gdk/x11/gdkprivate-x11.h b/gdk/x11/gdkprivate-x11.h
+index 459b76e..c2afecf 100644
+--- a/gdk/x11/gdkprivate-x11.h
++++ b/gdk/x11/gdkprivate-x11.h
+@@ -246,8 +246,6 @@ gboolean  _gdk_x11_device_xi2_get_scroll_delta    
(GdkX11DeviceXI2    *device,
+                                                    GdkScrollDirection 
*direction_ret,
+                                                    gdouble            
*delta_ret);
+ void     _gdk_device_xi2_reset_scroll_valuators   (GdkX11DeviceXI2    
*device);
+-void     _gdk_device_xi2_revalidate_scroll_valuators (GdkX11DeviceXI2 
*device);
+-
+ 
+ gdouble  gdk_x11_device_xi2_get_last_axis_value (GdkX11DeviceXI2 *device,
+                                                  gint             n_axis);
+-- 
+cgit v0.10.2
+

Reply via email to