From 14941d1afae89bbacf3d1c8643aafc4fbc3e8507 Mon Sep 17 00:00:00 2001 From: torger Date: Mon, 11 Nov 2013 10:37:28 +0100 Subject: [PATCH] Issue 2034: Workaround for GTK2 bugs on OS X causing slow curve widgets. --- rtgui/imagearea.cc | 6 ++++++ rtgui/mycurve.cc | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/rtgui/imagearea.cc b/rtgui/imagearea.cc index c6e17f8e7..3e0e5a229 100644 --- a/rtgui/imagearea.cc +++ b/rtgui/imagearea.cc @@ -66,7 +66,13 @@ void ImageArea::on_realize() { Gtk::DrawingArea::on_realize(); +#if defined (__APPLE__) + // Workaround: disabling POINTER_MOTION_HINT_MASK as for gtk 2.24.22 the get_pointer() function is buggy for quartz and modifier mask is not updated correctly. + // This workaround should be removed when bug is fixed in GTK2 or when migrating to GTK3 + add_events(Gdk::EXPOSURE_MASK | Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::SCROLL_MASK); +#else add_events(Gdk::EXPOSURE_MASK | Gdk::POINTER_MOTION_MASK | Gdk::POINTER_MOTION_HINT_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::SCROLL_MASK); +#endif Cairo::FontOptions cfo; cfo.set_antialias (Cairo::ANTIALIAS_SUBPIXEL); diff --git a/rtgui/mycurve.cc b/rtgui/mycurve.cc index 9df81b3d4..8d783be36 100644 --- a/rtgui/mycurve.cc +++ b/rtgui/mycurve.cc @@ -38,7 +38,13 @@ MyCurve::MyCurve () : listener(NULL) { curveIsDirty = true; set_extension_events(Gdk::EXTENSION_EVENTS_ALL); +#if defined (__APPLE__) + // Workaround: disabling POINTER_MOTION_HINT_MASK as for gtk 2.24.22 the get_pointer() function is buggy for quartz and modifier mask is not updated correctly. + // This workaround should be removed when bug is fixed in GTK2 or when migrating to GTK3 + add_events(Gdk::EXPOSURE_MASK | Gdk::POINTER_MOTION_MASK | Gdk::ENTER_NOTIFY_MASK | Gdk::LEAVE_NOTIFY_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::BUTTON1_MOTION_MASK); +#else add_events(Gdk::EXPOSURE_MASK | Gdk::POINTER_MOTION_MASK | Gdk::POINTER_MOTION_HINT_MASK | Gdk::ENTER_NOTIFY_MASK | Gdk::LEAVE_NOTIFY_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::BUTTON1_MOTION_MASK); +#endif signal_style_changed().connect( sigc::mem_fun(*this, &MyCurve::styleChanged) ); mcih = new MyCurveIdleHelper;