[bockbuild] Moved Gtk+ files back to main bockbuild repo
authorAlexis Christoforides <alexis@thenull.net>
Tue, 18 Oct 2016 22:55:02 +0000 (18:55 -0400)
committerAlexis Christoforides <alexis@thenull.net>
Tue, 18 Oct 2016 23:19:16 +0000 (19:19 -0400)
110 files changed:
bockbuild/mac-sdk/gtk+.py [deleted file]
bockbuild/mac-sdk/patches/gtk-gestures.patch [deleted file]
bockbuild/mac-sdk/patches/gtk-quartz-move-drag.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0001-Add-invariant-that-a-child-is-unmapped-if-parent-is-.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0002-Maintain-map-unmap-invariants-in-GtkRecentChooserDia.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0003-GtkPlug-preserve-map-unmap-invariants.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0004-Add-gdk_screen_get_monitor_workarea-and-use-it-all-o.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0005-gtk-don-t-scroll-combo-box-menus-if-less-than-3-item.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0006-gtk-paint-only-the-exposed-region-in-gdk_window_expo.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0007-Implement-gtk-enable-overlay-scrollbars-GtkSetting.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0008-Smooth-scrolling.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0009-gtk-Add-a-way-to-do-event-capture.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0010-gtk-don-t-let-insensitive-children-eat-scroll-events.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0011-scrolledwindow-Kinetic-scrolling-support.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0012-gtk-paint-to-the-right-windows-in-gtk_scrolled_windo.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0013-GtkScrolledWindow-add-overlay-scrollbars.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0014-gtk-add-event-handling-to-GtkScrolledWindow-s-overla.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0015-Use-gtk-enable-overlay-scrollbars-in-GtkScrolledWind.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0016-gtk-correctly-handle-toggling-of-the-scrollbar-visib.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0017-gtk-handle-gtk-primary-button-warps-slider-for-the-o.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0018-Introduce-phase-field-in-GdkEventScroll.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0019-Add-hack-to-lock-flow-of-scroll-events-to-window-whe.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0020-Introduce-a-background-window.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0021-Make-scrolled-window-work-well-with-Mac-touchpad.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0022-Use-start-end-phase-in-event-handling.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0023-Improve-overshooting-behavior.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0024-Cancel-out-smaller-delta-component.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0025-quartz-Add-a-dummy-NSView-serving-as-layer-view.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0026-gtk-port-overlay-scrollbars-to-native-CALayers.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0027-Refrain-from-starting-fading-out-while-a-gesture-is-.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0028-gtk-don-t-show-the-olverlay-scrollbars-if-only-the-s.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0029-Reclamp-unclamped-adjustments-after-resize.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0030-gtk-fix-size_request-of-scrolled-window.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0031-Hackish-fix-for-bug-8493-Min-size-of-GtkScrolledWind.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0032-Add-momentum_phase-to-GdkEventScroll.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0033-Never-intervene-in-the-event-stream-for-legacy-mice.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0034-Do-not-start-overshooting-for-legacy-mouse-scroll-ev.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0035-gtk-remove-the-overlay-scrollbar-grab-on-unrealize.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0036-gtk-add-GtkScrolledWindow-API-to-disable-overshoot-p.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0037-quartz-return-events-on-embedded-foreign-NSViews-bac.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0038-quartz-don-t-forward-events-to-the-toplevel-nswindow.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0039-gdk-add-a-move-native-children-signal-to-GdkWindow.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0040-gtk-add-new-widget-GtkNSView-which-alows-to-embed-an.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0041-tests-add-a-notebook-to-testnsview.c.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0042-gtk-connect-GtkNSView-to-move-native-children-and-re.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0043-tests-add-a-scrolled-window-test-widget-to-testnsvie.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0044-gtknsview-clip-drawRect-to-a-parent-GtkViewport-s-wi.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0045-gtk-clip-NSViews-to-the-scrolled-window-s-overshoot_.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0046-gtk-implement-clipping-to-multiple-parent-viewports-.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0047-gtk-first-attempt-to-also-clip-NSWindow-s-field-edit.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0048-gtk-also-clip-the-NSView-s-subviews.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0049-nsview-also-swizzle-DidAddSubview-and-clip-all-subvi.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0050-nsview-clip-text-field-cursor-drawing.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0051-nsview-factor-out-almost-all-code-from-the-overridde.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0052-nsview-also-focus-the-GtkNSView-if-a-focussable-subv.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0053-gtk-add-an-overlay-policy-API-to-GtkScrolledWindow.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0054-quartz-add-gdk_screen_-and-gdk_window_get_scale_fact.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0055-gtk-add-gtk_widget_get_scale_factor.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0056-iconfactory-Add-_scaled-variants.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0057-widget-Add-_scaled-variants-for-icon-rendering.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0058-icontheme-Add-support-for-high-resolution-icons.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0059-iconfactory-Add-scale-info-to-GtkIconSource.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0060-iconfactory-Add-gtk_cairo_set_source_icon_set.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0061-image-Use-scaled-icons-on-windows-with-a-scaling-fac.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0062-cellrendererpixbuf-Use-scaled-icons-on-windows-with-.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0063-entry-Use-scaled-icons-on-windows-with-a-scale-facto.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0064-gdk-Lookup-double-scaled-variants-on-pixbufs.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0065-Make-usual-calls-to-get-a-GdkPixbuf-attach-a-2x-vari.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0066-cellrendererpixbuf-let-2x-variants-go-through-pixel-.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0067-quartz-Make-event-loop-deal-with-recursive-poll-invo.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0068-nsview-implement-a-few-text-view-command-accelerator.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0069-menu-scrolling.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0070-tooltips-focus.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0071-light-and-dark-overlay-scrollbars.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0072-let-global-keyboard-shortcuts-pass-through.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0073-disable-combobox-scrolling.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0074-fix-NULL-pointer-in-clipboard.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0075-filechooserwidget-location-entry-activation.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/0076-iconfactory-treat-gt-1-0-icons-as-2-0.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/bgo702841-fix-kana-eisu-keys.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/bxc-41657.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/bxc2158_workaround_crash_triggering_context_menu.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/bxc3457_more_standard_keyboard_shortcuts.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/bxc_10256_window_tools_get_confused.diff [deleted file]
bockbuild/mac-sdk/patches/gtk/combobox-crossing-events.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/create-accessibility-object.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/disable-eye-dropper.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/dont-call-CopySymbolicHotKeys-so-much.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/embedded-nstextview-has-focus.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/emit-container-add.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/enable-swizzle-property.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/fix-imquartz-crasher.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/flip-command-mask-between-mod1-and-mod2.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/gtk-check-grab_toplevel-is-destroyed.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/gtk-imquartz-defer-signals-in-output_result.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/gtknsview-defer-map-and-lock-in-clipping.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/gtknsview-fix-invalid-casts.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/gtknsview-forward-cmdz-to-textview-undo-manager.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/gtknsview-getter.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/gtknsview-only-unset-first-responder-if-it-is-our-view.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/gtknsview-timeout-fix.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/make-gtkpaned-emit-signals.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/nsview-check-for-superview.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/nsview-embedding-fix-keyboard-routing.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/nsview-embedding.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/quartz-call-undo-redo-on-cmdz.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/remove-demos-from-build.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/remove-mouse-scrolling-from-GtkNotebook-tabs.patch [deleted file]
bockbuild/mac-sdk/patches/gtk/scrolled-window-draw-child-bg.patch [deleted file]
external/bockbuild

diff --git a/bockbuild/mac-sdk/gtk+.py b/bockbuild/mac-sdk/gtk+.py
deleted file mode 100644 (file)
index e9c2d77..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-class GtkPackage (GnomeGitPackage):
-
-    def __init__(self):
-        GnomeGitPackage.__init__(self, 'gtk+', '2.24', '280fc402be5fb46b66bcd32056963bb1afb8b54b',
-                                 configure_flags=[
-                                     '--with-gdktarget=%{gdk_target}',
-                                     #                         '--disable-cups',
-                                 ]
-                                 )
-        self.gdk_target = 'x11'
-
-        if Package.profile.name == 'darwin':
-            self.gdk_target = 'quartz'
-            self.sources.extend([
-                # Custom gtkrc
-                'patches/gtkrc',
-
-                # smooth scrolling, scrollbars, overscroll, retina,
-                # gtknsview
-                'patches/gtk/0001-Add-invariant-that-a-child-is-unmapped-if-parent-is-.patch',
-                'patches/gtk/0002-Maintain-map-unmap-invariants-in-GtkRecentChooserDia.patch',
-                'patches/gtk/0003-GtkPlug-preserve-map-unmap-invariants.patch',
-                'patches/gtk/0004-Add-gdk_screen_get_monitor_workarea-and-use-it-all-o.patch',
-                'patches/gtk/0005-gtk-don-t-scroll-combo-box-menus-if-less-than-3-item.patch',
-                'patches/gtk/0006-gtk-paint-only-the-exposed-region-in-gdk_window_expo.patch',
-                'patches/gtk/0007-Implement-gtk-enable-overlay-scrollbars-GtkSetting.patch',
-                'patches/gtk/0008-Smooth-scrolling.patch',
-                'patches/gtk/0009-gtk-Add-a-way-to-do-event-capture.patch',
-                'patches/gtk/0010-gtk-don-t-let-insensitive-children-eat-scroll-events.patch',
-                'patches/gtk/0011-scrolledwindow-Kinetic-scrolling-support.patch',
-                'patches/gtk/0012-gtk-paint-to-the-right-windows-in-gtk_scrolled_windo.patch',
-                'patches/gtk/0013-GtkScrolledWindow-add-overlay-scrollbars.patch',
-                'patches/gtk/0014-gtk-add-event-handling-to-GtkScrolledWindow-s-overla.patch',
-                'patches/gtk/0015-Use-gtk-enable-overlay-scrollbars-in-GtkScrolledWind.patch',
-                'patches/gtk/0016-gtk-correctly-handle-toggling-of-the-scrollbar-visib.patch',
-                'patches/gtk/0017-gtk-handle-gtk-primary-button-warps-slider-for-the-o.patch',
-                'patches/gtk/0018-Introduce-phase-field-in-GdkEventScroll.patch',
-                'patches/gtk/0019-Add-hack-to-lock-flow-of-scroll-events-to-window-whe.patch',
-                'patches/gtk/0020-Introduce-a-background-window.patch',
-                'patches/gtk/0021-Make-scrolled-window-work-well-with-Mac-touchpad.patch',
-                'patches/gtk/0022-Use-start-end-phase-in-event-handling.patch',
-                'patches/gtk/0023-Improve-overshooting-behavior.patch',
-                'patches/gtk/0024-Cancel-out-smaller-delta-component.patch',
-                'patches/gtk/0025-quartz-Add-a-dummy-NSView-serving-as-layer-view.patch',
-                'patches/gtk/0026-gtk-port-overlay-scrollbars-to-native-CALayers.patch',
-                'patches/gtk/0027-Refrain-from-starting-fading-out-while-a-gesture-is-.patch',
-                'patches/gtk/0028-gtk-don-t-show-the-olverlay-scrollbars-if-only-the-s.patch',
-                'patches/gtk/0029-Reclamp-unclamped-adjustments-after-resize.patch',
-                'patches/gtk/0030-gtk-fix-size_request-of-scrolled-window.patch',
-                'patches/gtk/0031-Hackish-fix-for-bug-8493-Min-size-of-GtkScrolledWind.patch',
-                'patches/gtk/0032-Add-momentum_phase-to-GdkEventScroll.patch',
-                'patches/gtk/0033-Never-intervene-in-the-event-stream-for-legacy-mice.patch',
-                'patches/gtk/0034-Do-not-start-overshooting-for-legacy-mouse-scroll-ev.patch',
-                'patches/gtk/0035-gtk-remove-the-overlay-scrollbar-grab-on-unrealize.patch',
-                'patches/gtk/0036-gtk-add-GtkScrolledWindow-API-to-disable-overshoot-p.patch',
-                'patches/gtk/0037-quartz-return-events-on-embedded-foreign-NSViews-bac.patch',
-                'patches/gtk/0038-quartz-don-t-forward-events-to-the-toplevel-nswindow.patch',
-                'patches/gtk/0039-gdk-add-a-move-native-children-signal-to-GdkWindow.patch',
-                'patches/gtk/0040-gtk-add-new-widget-GtkNSView-which-alows-to-embed-an.patch',
-                'patches/gtk/0041-tests-add-a-notebook-to-testnsview.c.patch',
-                'patches/gtk/0042-gtk-connect-GtkNSView-to-move-native-children-and-re.patch',
-                'patches/gtk/0043-tests-add-a-scrolled-window-test-widget-to-testnsvie.patch',
-                'patches/gtk/0044-gtknsview-clip-drawRect-to-a-parent-GtkViewport-s-wi.patch',
-                'patches/gtk/0045-gtk-clip-NSViews-to-the-scrolled-window-s-overshoot_.patch',
-                'patches/gtk/0046-gtk-implement-clipping-to-multiple-parent-viewports-.patch',
-                'patches/gtk/0047-gtk-first-attempt-to-also-clip-NSWindow-s-field-edit.patch',
-                'patches/gtk/0048-gtk-also-clip-the-NSView-s-subviews.patch',
-                'patches/gtk/0049-nsview-also-swizzle-DidAddSubview-and-clip-all-subvi.patch',
-                'patches/gtk/0050-nsview-clip-text-field-cursor-drawing.patch',
-                'patches/gtk/0051-nsview-factor-out-almost-all-code-from-the-overridde.patch',
-                'patches/gtk/0052-nsview-also-focus-the-GtkNSView-if-a-focussable-subv.patch',
-                'patches/gtk/0053-gtk-add-an-overlay-policy-API-to-GtkScrolledWindow.patch',
-                'patches/gtk/0054-quartz-add-gdk_screen_-and-gdk_window_get_scale_fact.patch',
-                'patches/gtk/0055-gtk-add-gtk_widget_get_scale_factor.patch',
-                'patches/gtk/0056-iconfactory-Add-_scaled-variants.patch',
-                'patches/gtk/0057-widget-Add-_scaled-variants-for-icon-rendering.patch',
-                'patches/gtk/0058-icontheme-Add-support-for-high-resolution-icons.patch',
-                'patches/gtk/0059-iconfactory-Add-scale-info-to-GtkIconSource.patch',
-                'patches/gtk/0060-iconfactory-Add-gtk_cairo_set_source_icon_set.patch',
-                'patches/gtk/0061-image-Use-scaled-icons-on-windows-with-a-scaling-fac.patch',
-                'patches/gtk/0062-cellrendererpixbuf-Use-scaled-icons-on-windows-with-.patch',
-                'patches/gtk/0063-entry-Use-scaled-icons-on-windows-with-a-scale-facto.patch',
-                'patches/gtk/0064-gdk-Lookup-double-scaled-variants-on-pixbufs.patch',
-                'patches/gtk/0065-Make-usual-calls-to-get-a-GdkPixbuf-attach-a-2x-vari.patch',
-                'patches/gtk/0066-cellrendererpixbuf-let-2x-variants-go-through-pixel-.patch',
-                'patches/gtk/0067-quartz-Make-event-loop-deal-with-recursive-poll-invo.patch',
-                'patches/gtk/0068-nsview-implement-a-few-text-view-command-accelerator.patch',
-                'patches/gtk/0069-menu-scrolling.patch',
-                'patches/gtk/0070-tooltips-focus.patch',
-                'patches/gtk/0071-light-and-dark-overlay-scrollbars.patch',
-                'patches/gtk/0072-let-global-keyboard-shortcuts-pass-through.patch',
-                'patches/gtk/0073-disable-combobox-scrolling.patch',
-                'patches/gtk/0074-fix-NULL-pointer-in-clipboard.patch',
-                'patches/gtk/0075-filechooserwidget-location-entry-activation.patch',
-                'patches/gtk/0076-iconfactory-treat-gt-1-0-icons-as-2-0.patch',
-
-                # Bug 702841 - GdkQuartz does not distinguish Eisu, Kana and Space keys on Japanese keyrboard
-                # https://bugzilla.gnome.org/show_bug.cgi?id=702841
-                'patches/gtk/bgo702841-fix-kana-eisu-keys.patch',
-
-                # make new modifier behviour opt-in, so as not to break old
-                # versions of MonoDevelop
-                'patches/gdk-quartz-set-fix-modifiers-hack-v3.patch',
-
-                # attempt to work around 2158 - [GTK] crash triggering context menu
-                # also prints some warnings that may help to debug the real issue
-                # https://bugzilla.xamarin.com/attachment.cgi?id=1644
-                'patches/gtk/bxc2158_workaround_crash_triggering_context_menu.patch',
-
-                # Zoom, rotate, swipe events
-                'patches/gtk-gestures.patch',
-
-                # Fix gtk_window_begin_move_drag on Quartz
-                'patches/gtk-quartz-move-drag.patch',
-
-                # Bug 3457 - [GTK] Support more standard keyboard shortcuts in dialogs
-                # https://bugzilla.xamarin.com/attachment.cgi?id=2240
-                'patches/gtk/bxc3457_more_standard_keyboard_shortcuts.patch',
-
-                # Bug  10256 - Mac window manipulation tools get confused by Xamarin Studio
-                # https://bugzilla.xamarin.com/attachment.cgi?id=3465
-                'patches/gtk/bxc_10256_window_tools_get_confused.diff',
-
-                #                                'patches/gtk/gdk-pixmap-get-cgimage-2.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=18157
-                'patches/gtk/gtk-check-grab_toplevel-is-destroyed.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=18241
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=17631
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=17692
-                'patches/gtk/gtk-imquartz-defer-signals-in-output_result.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=17401
-                'patches/gtk/gtknsview-defer-map-and-lock-in-clipping.patch',
-                'patches/gtk/gtknsview-timeout-fix.patch',
-
-                'patches/gtk/nsview-embedding.patch',
-
-                'patches/gtk/enable-swizzle-property.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=12618
-                'patches/gtk/disable-eye-dropper.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=13100
-                'patches/gtk/flip-command-mask-between-mod1-and-mod2.patch',
-                'patches/gtk/nsview-embedding-fix-keyboard-routing.patch',
-                'patches/gtk/nsview-check-for-superview.patch',
-
-                'patches/gtk/gtknsview-forward-cmdz-to-textview-undo-manager.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=20732
-                'patches/gtk/embedded-nstextview-has-focus.patch',
-                'patches/gtk/remove-demos-from-build.patch',
-
-                # This fixes an issue in where in some situations the user needed
-                # to click a native text entry twice in order to be able to
-                # focus it.
-                'patches/gtk/gtknsview-only-unset-first-responder-if-it-is-our-view.patch',
-
-                # For the test framework to be able to traverse down the
-                # NSView hierarchy
-                'patches/gtk/gtknsview-getter.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=29301#c3
-                'patches/gtk/gtknsview-fix-invalid-casts.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=29001
-                'patches/gtk/quartz-call-undo-redo-on-cmdz.patch',
-
-                'patches/gtk/scrolled-window-draw-child-bg.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=37239
-                'patches/gtk/fix-imquartz-crasher.patch',
-
-                # https://bugzilla.gnome.org/show_bug.cgi?id=630226
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=34973
-                'patches/gtk/remove-mouse-scrolling-from-GtkNotebook-tabs.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=37951
-                'patches/gtk/dont-call-CopySymbolicHotKeys-so-much.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=38664
-                'patches/gtk/combobox-crossing-events.patch',
-
-                # https://bugzilla.xamarin.com/show_bug.cgi?id=41657
-                'patches/gtk/bxc-41657.patch',
-
-                'patches/gtk/emit-container-add.patch',
-                'patches/gtk/create-accessibility-object.patch',
-                'patches/gtk/make-gtkpaned-emit-signals.patch'
-            ])
-
-    def prep(self):
-        Package.prep(self)
-        if Package.profile.name == 'darwin':
-            for p in range(2, len(self.local_sources)):
-                self.sh(
-                    'patch -p1 --ignore-whitespace < "%{local_sources[' + str(p) + ']}"')
-
-    def install(self):
-        Package.install(self)
-        if Package.profile.name == 'darwin':
-            self.install_gtkrc()
-
-    def install_gtkrc(self):
-        gtkrc = self.local_sources[1]
-        destdir = os.path.join(self.staged_prefix, "etc", "gtk-2.0")
-        if not os.path.exists(destdir):
-            os.makedirs(destdir)
-        self.sh('cp %s %s' % (gtkrc, destdir))
-
-GtkPackage()
diff --git a/bockbuild/mac-sdk/patches/gtk-gestures.patch b/bockbuild/mac-sdk/patches/gtk-gestures.patch
deleted file mode 100644 (file)
index 3bc316c..0000000
+++ /dev/null
@@ -1,735 +0,0 @@
-diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
-index e6c516c..f3fa26a 100644
---- a/gdk/gdkevents.h
-+++ b/gdk/gdkevents.h
-@@ -65,6 +65,11 @@ typedef struct _GdkEventWindowState GdkEventWindowState;
- typedef struct _GdkEventSetting     GdkEventSetting;
- typedef struct _GdkEventGrabBroken  GdkEventGrabBroken;
-
-+/* OS X specific gesture events */
-+typedef struct _GdkEventGestureMagnify GdkEventGestureMagnify;
-+typedef struct _GdkEventGestureRotate  GdkEventGestureRotate;
-+typedef struct _GdkEventGestureSwipe   GdkEventGestureSwipe;
-+
- typedef union  _GdkEvent          GdkEvent;
-
- typedef void (*GdkEventFunc) (GdkEvent *event,
-@@ -152,6 +157,9 @@ typedef enum
-   GDK_OWNER_CHANGE      = 34,
-   GDK_GRAB_BROKEN       = 35,
-   GDK_DAMAGE            = 36,
-+  GDK_GESTURE_MAGNIFY   = 37,
-+  GDK_GESTURE_ROTATE    = 38,
-+  GDK_GESTURE_SWIPE     = 39,
-   GDK_EVENT_LAST        /* helper variable for decls */
- } GdkEventType;
-
-@@ -488,6 +496,52 @@ struct _GdkEventDND {
-   gshort x_root, y_root;
- };
-
-+/* Event types for OS X gestures */
-+
-+struct _GdkEventGestureMagnify
-+{
-+  GdkEventType type;
-+  GdkWindow *window;
-+  gint8 send_event;
-+  guint32 time;
-+  gdouble x;
-+  gdouble y;
-+  guint state;
-+  gdouble magnification;
-+  GdkDevice *device;
-+  gdouble x_root, y_root;
-+};
-+
-+struct _GdkEventGestureRotate
-+{
-+  GdkEventType type;
-+  GdkWindow *window;
-+  gint8 send_event;
-+  guint32 time;
-+  gdouble x;
-+  gdouble y;
-+  guint state;
-+  gdouble rotation;
-+  GdkDevice *device;
-+  gdouble x_root, y_root;
-+};
-+
-+struct _GdkEventGestureSwipe
-+{
-+  GdkEventType type;
-+  GdkWindow *window;
-+  gint8 send_event;
-+  guint32 time;
-+  gdouble x;
-+  gdouble y;
-+  guint state;
-+  gdouble delta_x;
-+  gdouble delta_y;
-+  GdkDevice *device;
-+  gdouble x_root, y_root;
-+};
-+
-+
- union _GdkEvent
- {
-   GdkEventType                    type;
-@@ -511,6 +565,9 @@ union _GdkEvent
-   GdkEventWindowState       window_state;
-   GdkEventSetting           setting;
-   GdkEventGrabBroken        grab_broken;
-+  GdkEventGestureMagnify    magnify;
-+  GdkEventGestureRotate     rotate;
-+  GdkEventGestureSwipe      swipe;
- };
-
- GType     gdk_event_get_type            (void) G_GNUC_CONST;
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index d20b424..fb89451 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -9813,6 +9813,9 @@ static const guint type_masks[] = {
-   0, /* GDK_OWNER_CHANGE = 34 */
-   0, /* GDK_GRAB_BROKEN = 35 */
-   0, /* GDK_DAMAGE = 36 */
-+  0, /* GDK_GESTURE_MAGNIFY = 37 */
-+  0, /* GDK_GESTURE_ROTATE = 38 */
-+  0, /* GDK_GESTURE_SWIPE = 39 */
- };
- G_STATIC_ASSERT (G_N_ELEMENTS (type_masks) == GDK_EVENT_LAST);
-
-diff --git a/gdk/quartz/GdkQuartzView.c b/gdk/quartz/GdkQuartzView.c
-index 2c897fb..cdae2f1 100644
---- a/gdk/quartz/GdkQuartzView.c
-+++ b/gdk/quartz/GdkQuartzView.c
-@@ -190,4 +190,37 @@
-     [self updateTrackingRect];
- }
-
-+/* Handle OS X gesture events. The Apple documentation is explicit
-+ * that these events should not be captured through a tracking loop (which
-+ * is how we handle usual event handling), so we fallback to overriding
-+ * NSResponder methods.
-+ */
-+
-+-(void)magnifyWithEvent:(NSEvent *)event
-+{
-+  GdkEvent *gdk_event;
-+
-+  gdk_event = _gdk_quartz_events_create_magnify_event (event);
-+  if (gdk_event)
-+    _gdk_event_queue_append (gdk_display_get_default (), gdk_event);
-+}
-+
-+-(void)rotateWithEvent:(NSEvent *)event
-+{
-+  GdkEvent *gdk_event;
-+
-+  gdk_event = _gdk_quartz_events_create_rotate_event (event);
-+  if (gdk_event)
-+    _gdk_event_queue_append (gdk_display_get_default (), gdk_event);
-+}
-+
-+-(void)swipeWithEvent:(NSEvent *)event
-+{
-+  GdkEvent *gdk_event;
-+
-+  gdk_event = _gdk_quartz_events_create_swipe_event (event);
-+  if (gdk_event)
-+    _gdk_event_queue_append (gdk_display_get_default (), gdk_event);
-+}
-+
- @end
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index 9478c16..128c794 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -374,6 +374,11 @@ get_event_mask_from_ns_event (NSEvent *nsevent)
-     case NSMouseExited:
-       return GDK_LEAVE_NOTIFY_MASK;
-
-+    case NSEventTypeMagnify:
-+    case NSEventTypeRotate:
-+    case NSEventTypeSwipe:
-+      return 0;
-+
-     default:
-       g_assert_not_reached ();
-     }
-@@ -752,6 +757,11 @@ find_window_for_ns_event (NSEvent *nsevent,
-
-       return toplevel;
-
-+    case NSEventTypeMagnify:
-+    case NSEventTypeRotate:
-+    case NSEventTypeSwipe:
-+      return toplevel;
-+
-     default:
-       /* Ignore everything else. */
-       break;
-@@ -1011,6 +1021,139 @@ fill_key_event (GdkWindow    *window,
-         event->key.keyval));
- }
-
-+
-+static GdkWindow *
-+find_window_for_ns_gesture_event (NSEvent *nsevent,
-+                                  gint    *_x,
-+                                  gint    *_y,
-+                                  gint    *x_root,
-+                                  gint    *y_root)
-+{
-+  GdkDisplay *display = _gdk_display;
-+  GdkWindow *toplevel_window = NULL, *pointer_window = NULL;
-+  gdouble found_x, found_y;
-+  gint x, y;
-+
-+  toplevel_window = find_window_for_ns_event (nsevent, &x, &y, x_root, y_root);
-+  if (!toplevel_window)
-+    return NULL;
-+
-+  if (toplevel_window == display->pointer_info.toplevel_under_pointer)
-+    pointer_window = _gdk_window_find_descendant_at (toplevel_window,
-+                                                     x, y,
-+                                                     &found_x, &found_y);
-+  else
-+    pointer_window = NULL;
-+
-+  *_x = found_x;
-+  *_y = found_y;
-+
-+  return pointer_window;
-+}
-+
-+
-+GdkEvent *
-+_gdk_quartz_events_create_magnify_event (NSEvent *nsevent)
-+{
-+  GdkEvent *event;
-+  GdkWindow *window = NULL;
-+  gint x, y, x_root, y_root;
-+
-+  window = find_window_for_ns_gesture_event (nsevent,
-+                                             &x, &y,
-+                                             &x_root, &y_root);
-+
-+  if (!window)
-+    return NULL;
-+
-+  event = gdk_event_new (GDK_GESTURE_MAGNIFY);
-+
-+  event->any.type = GDK_GESTURE_MAGNIFY;
-+  event->magnify.window = window;
-+  event->magnify.time = get_time_from_ns_event (nsevent);
-+  event->magnify.x = x;
-+  event->magnify.y = y;
-+  event->magnify.x_root = x_root;
-+  event->magnify.y_root = y_root;
-+  event->magnify.magnification = [nsevent magnification];
-+  event->magnify.state = get_keyboard_modifiers_from_ns_event (nsevent) |
-+                        _gdk_quartz_events_get_current_mouse_modifiers ();
-+  event->magnify.device = _gdk_display->core_pointer;
-+
-+  fixup_event (event);
-+
-+  return event;
-+}
-+
-+GdkEvent *
-+_gdk_quartz_events_create_rotate_event (NSEvent *nsevent)
-+{
-+  GdkEvent *event;
-+  GdkWindow *window;
-+  gint x, y, x_root, y_root;
-+
-+  window = find_window_for_ns_gesture_event (nsevent,
-+                                             &x, &y,
-+                                             &x_root, &y_root);
-+
-+  if (!window)
-+    return NULL;
-+
-+  event = gdk_event_new (GDK_GESTURE_ROTATE);
-+
-+  event->any.type = GDK_GESTURE_ROTATE;
-+  event->rotate.window = window;
-+  event->rotate.time = get_time_from_ns_event (nsevent);
-+  event->rotate.x = x;
-+  event->rotate.y = y;
-+  event->rotate.x_root = x_root;
-+  event->rotate.y_root = y_root;
-+  event->rotate.rotation = [nsevent rotation];
-+  event->rotate.state = get_keyboard_modifiers_from_ns_event (nsevent) |
-+                        _gdk_quartz_events_get_current_mouse_modifiers ();
-+  event->rotate.device = _gdk_display->core_pointer;
-+
-+  fixup_event (event);
-+
-+  return event;
-+}
-+
-+GdkEvent *
-+_gdk_quartz_events_create_swipe_event (NSEvent *nsevent)
-+{
-+  GdkEvent *event;
-+  GdkWindow *window;
-+  gint x, y, x_root, y_root;
-+
-+  window = find_window_for_ns_gesture_event (nsevent,
-+                                             &x, &y,
-+                                             &x_root, &y_root);
-+
-+  if (!window)
-+    return NULL;
-+
-+  event = gdk_event_new (GDK_GESTURE_SWIPE);
-+
-+  event->any.type = GDK_GESTURE_SWIPE;
-+  event->swipe.window = window;
-+  event->swipe.time = get_time_from_ns_event (nsevent);
-+  event->swipe.x = x;
-+  event->swipe.y = y;
-+  event->swipe.x_root = x_root;
-+  event->swipe.y_root = y_root;
-+  event->swipe.delta_x = [nsevent deltaX];
-+  event->swipe.delta_y = [nsevent deltaY];
-+  event->swipe.state = get_keyboard_modifiers_from_ns_event (nsevent) |
-+                        _gdk_quartz_events_get_current_mouse_modifiers ();
-+  event->swipe.device = _gdk_display->core_pointer;
-+
-+  fixup_event (event);
-+
-+  return event;
-+}
-+
-+
-+
- static gboolean
- synthesize_crossing_event (GdkWindow *window,
-                            GdkEvent  *event,
-@@ -1392,6 +1535,13 @@ gdk_event_translate (GdkEvent *event,
-       }
-       break;
-
-+    /* Gesture events are handled through GdkQuartzView, because the
-+     * Apple documentation states very clearly that such events should
-+     * not be handled through a tracking loop (like GDK uses).
-+     * Experiments show that gesture events do not get through our
-+     * tracking loop either.
-+     */
-+
-     default:
-       /* Ignore everything elsee. */
-       return_val = FALSE;
-diff --git a/gdk/quartz/gdkglobals-quartz.c b/gdk/quartz/gdkglobals-quartz.c
-index 53c6d5e..6d01b59 100644
---- a/gdk/quartz/gdkglobals-quartz.c
-+++ b/gdk/quartz/gdkglobals-quartz.c
-@@ -41,3 +41,9 @@ gdk_quartz_osx_version (void)
-   else
-     return minor;
- }
-+
-+gboolean
-+gdk_quartz_supports_gesture_events (void)
-+{
-+  return TRUE;
-+}
-diff --git a/gdk/quartz/gdkprivate-quartz.h b/gdk/quartz/gdkprivate-quartz.h
-index c1b3083..03a3857 100644
---- a/gdk/quartz/gdkprivate-quartz.h
-+++ b/gdk/quartz/gdkprivate-quartz.h
-@@ -179,6 +179,10 @@ GdkModifierType _gdk_quartz_events_get_current_mouse_modifiers    (void);
- void         _gdk_quartz_events_send_enter_notify_event (GdkWindow *window);
- void         _gdk_quartz_events_break_all_grabs         (guint32    time);
-
-+GdkEvent    *_gdk_quartz_events_create_magnify_event    (NSEvent   *event);
-+GdkEvent    *_gdk_quartz_events_create_rotate_event     (NSEvent   *event);
-+GdkEvent    *_gdk_quartz_events_create_swipe_event      (NSEvent   *event);
-+
- /* Event loop */
- gboolean   _gdk_quartz_event_loop_check_pending (void);
- NSEvent *  _gdk_quartz_event_loop_get_pending   (void);
-diff --git a/gdk/quartz/gdkquartz.h b/gdk/quartz/gdkquartz.h
-index 742d651..f79d04a 100644
---- a/gdk/quartz/gdkquartz.h
-+++ b/gdk/quartz/gdkquartz.h
-@@ -57,6 +57,7 @@ NSImage  *gdk_quartz_pixbuf_to_ns_image_libgtk_only             (GdkPixbuf
- id        gdk_quartz_drag_context_get_dragging_info_libgtk_only (GdkDragContext *context);
- NSEvent  *gdk_quartz_event_get_nsevent                          (GdkEvent       *event);
- GdkOSXVersion gdk_quartz_osx_version                            (void);
-+gboolean  gdk_quartz_supports_gesture_events                    (void);
-
- G_END_DECLS
-
-diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
-index 5a88679..db77675 100644
---- a/gtk/gtkmain.c
-+++ b/gtk/gtkmain.c
-@@ -1636,6 +1636,9 @@ gtk_main_do_event (GdkEvent *event)
-     case GDK_WINDOW_STATE:
-     case GDK_GRAB_BROKEN:
-     case GDK_DAMAGE:
-+    case GDK_GESTURE_MAGNIFY:
-+    case GDK_GESTURE_ROTATE:
-+    case GDK_GESTURE_SWIPE:
-       if (!_gtk_widget_captured_event (event_widget, event))
-         gtk_widget_event (event_widget, event);
-       break;
-diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
-index 9a43d27..2d11e09 100644
---- a/gtk/gtkwidget.c
-+++ b/gtk/gtkwidget.c
-@@ -197,6 +197,9 @@ enum {
-   KEYNAV_FAILED,
-   DRAG_FAILED,
-   DAMAGE_EVENT,
-+  GESTURE_MAGNIFY_EVENT,
-+  GESTURE_ROTATE_EVENT,
-+  GESTURE_SWIPE_EVENT,
-   LAST_SIGNAL
- };
-
-@@ -2242,6 +2245,70 @@ gtk_widget_class_init (GtkWidgetClass *klass)
-                 _gtk_marshal_BOOLEAN__BOXED,
-                 G_TYPE_BOOLEAN, 1,
-                 GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
-+  /**
-+   * GtkWidget::gesture-magnify-event:
-+   * @widget: the object which received the signal
-+   * @event: the #GdkEventGestureMagnify event
-+   *
-+   * Emitted when a magnify event is received on @widget's window.
-+   *
-+   * Returns: %TRUE to stop other handlers from being invoked for the event.
-+   *   %FALSE to propagate the event further.
-+   *
-+   * Since: 2.24 Xamarin specific.
-+   */
-+  widget_signals[GESTURE_MAGNIFY_EVENT] =
-+    g_signal_new (I_("gesture-magnify-event"),
-+                G_TYPE_FROM_CLASS (gobject_class),
-+                G_SIGNAL_RUN_LAST,
-+                  0,
-+                _gtk_boolean_handled_accumulator, NULL,
-+                _gtk_marshal_BOOLEAN__BOXED,
-+                G_TYPE_BOOLEAN, 1,
-+                GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
-+  /**
-+   * GtkWidget::gesture-rotate-event:
-+   * @widget: the object which received the signal
-+   * @event: the #GdkEventGestureRotate event
-+   *
-+   * Emitted when a rotation event is received on @widget's window.
-+   *
-+   * Returns: %TRUE to stop other handlers from being invoked for the event.
-+   *   %FALSE to propagate the event further.
-+   *
-+   * Since: 2.24 Xamarin specific.
-+   */
-+  widget_signals[GESTURE_ROTATE_EVENT] =
-+    g_signal_new (I_("gesture-rotate-event"),
-+                G_TYPE_FROM_CLASS (gobject_class),
-+                G_SIGNAL_RUN_LAST,
-+                  0,
-+                _gtk_boolean_handled_accumulator, NULL,
-+                _gtk_marshal_BOOLEAN__BOXED,
-+                G_TYPE_BOOLEAN, 1,
-+                GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
-+  /**
-+   * GtkWidget::gesture-swipe-event:
-+   * @widget: the object which received the signal
-+   * @event: the #GdkEventGestureSwipe event
-+   *
-+   * Emitted when a swipe event is received on @widget's window.
-+   *
-+   * Returns: %TRUE to stop other handlers from being invoked for the event.
-+   *   %FALSE to propagate the event further.
-+   *
-+   * Since: 2.24 Xamarin specific.
-+   */
-+  widget_signals[GESTURE_SWIPE_EVENT] =
-+    g_signal_new (I_("gesture-swipe-event"),
-+                G_TYPE_FROM_CLASS (gobject_class),
-+                G_SIGNAL_RUN_LAST,
-+                  0,
-+                _gtk_boolean_handled_accumulator, NULL,
-+                _gtk_marshal_BOOLEAN__BOXED,
-+                G_TYPE_BOOLEAN, 1,
-+                GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
-+
- /**
-    * GtkWidget::grab-broken-event:
-    * @widget: the object which received the signal
-@@ -4975,6 +5042,15 @@ gtk_widget_event_internal (GtkWidget *widget,
-       case GDK_DAMAGE:
-         signal_num = DAMAGE_EVENT;
-         break;
-+        case GDK_GESTURE_MAGNIFY:
-+          signal_num = GESTURE_MAGNIFY_EVENT;
-+          break;
-+        case GDK_GESTURE_ROTATE:
-+          signal_num = GESTURE_ROTATE_EVENT;
-+          break;
-+        case GDK_GESTURE_SWIPE:
-+          signal_num = GESTURE_SWIPE_EVENT;
-+          break;
-       default:
-         g_warning ("gtk_widget_event(): unhandled event type: %d", event->type);
-         signal_num = -1;
-diff --git a/tests/Makefile.am b/tests/Makefile.am
-index 3888826..68a0a79 100644
---- a/tests/Makefile.am
-+++ b/tests/Makefile.am
-@@ -88,7 +88,8 @@ noinst_PROGRAMS =  $(TEST_PROGS)     \
-       testactions                     \
-       testgrouping                    \
-       testtooltips                    \
--      testvolumebutton
-+      testvolumebutton                \
-+      testgestures
-
- if HAVE_CXX
- noinst_PROGRAMS += autotestkeywords
-@@ -165,6 +166,7 @@ testgrouping_DEPENDENCIES = $(TEST_DEPS)
- testtooltips_DEPENDENCIES = $(TEST_DEPS)
- testvolumebutton_DEPENDENCIES = $(TEST_DEPS)
- testwindows_DEPENDENCIES = $(TEST_DEPS)
-+testgestures_DEPENDENCIES = $(TEST_DEPS)
-
- testentrycompletion_SOURCES =         \
-       prop-editor.c           \
-@@ -273,6 +275,9 @@ testoffscreenwindow_SOURCES =      \
- testwindows_SOURCES =         \
-       testwindows.c
-
-+testgestures_SOURCES =        \
-+      testgestures.c
-+
- EXTRA_DIST +=                         \
-       prop-editor.h           \
-       testgtk.1               \
-diff --git a/tests/testgestures.c b/tests/testgestures.c
-new file mode 100644
-index 0000000..ae3ab99
---- /dev/null
-+++ b/tests/testgestures.c
-@@ -0,0 +1,214 @@
-+#include <gtk/gtk.h>
-+#include <math.h>
-+
-+
-+typedef struct
-+{
-+  gdouble width;
-+  gdouble height;
-+
-+  gdouble angle;
-+
-+  GtkWidget *widget;
-+  gint offset_x;
-+  gint offset_y;
-+  gdouble progress;
-+  gboolean increasing;
-+}
-+RectangleInfo;
-+
-+
-+
-+static gboolean
-+handle_expose_event (GtkWidget      *widget,
-+                     GdkEventExpose *expose,
-+                     gpointer        user_data)
-+{
-+  cairo_t *cr;
-+  int center_x, center_y;
-+  RectangleInfo *rect = (RectangleInfo *)user_data;
-+
-+  cr = gdk_cairo_create (widget->window);
-+
-+  cairo_save (cr);
-+
-+  /* Background */
-+  cairo_rectangle (cr, 0, 0,
-+                   widget->allocation.width,
-+                   widget->allocation.height);
-+  cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
-+  cairo_fill (cr);
-+
-+  cairo_restore (cr);
-+
-+  /* Rectangle */
-+  center_x = (widget->allocation.width - rect->width) / 2;
-+  center_y = (widget->allocation.height - rect->height) / 2;
-+
-+  if (rect->progress != 0.0f)
-+    {
-+      cairo_translate (cr, rect->offset_x * rect->progress,
-+                       rect->offset_y * rect->progress);
-+    }
-+
-+  cairo_save (cr);
-+
-+  cairo_translate (cr, widget->allocation.width / 2,
-+                   widget->allocation.height / 2);
-+  cairo_rotate (cr, rect->angle * M_PI / 180.0);
-+  cairo_translate (cr, -widget->allocation.width / 2,
-+                   -widget->allocation.height / 2);
-+
-+
-+  cairo_rectangle (cr,
-+                   center_x, center_y,
-+                   rect->width, rect->height);
-+  cairo_set_source_rgb (cr, 0.9, 0.0, 0.0);
-+  cairo_stroke (cr);
-+
-+  cairo_rectangle (cr,
-+                   center_x, center_y,
-+                   rect->width, rect->height);
-+  cairo_set_source_rgba (cr, 0.9, 0.0, 0.0, 0.3);
-+  cairo_fill (cr);
-+
-+  cairo_restore (cr);
-+
-+
-+  cairo_destroy (cr);
-+
-+  return FALSE;
-+}
-+
-+static gboolean
-+handle_gesture_magnify_event (GtkWidget              *widget,
-+                              GdkEventGestureMagnify *magnify,
-+                              gpointer                user_data)
-+{
-+  RectangleInfo *rect = (RectangleInfo *)user_data;
-+
-+  rect->width += rect->width * magnify->magnification;
-+  if (rect->width < 5)
-+    rect->width = 5;
-+
-+  rect->height += rect->height * magnify->magnification;
-+  if (rect->height < 5)
-+    rect->height = 5;
-+
-+  gtk_widget_queue_draw (widget);
-+
-+  return TRUE;
-+}
-+
-+static gboolean
-+handle_gesture_rotate_event (GtkWidget             *widget,
-+                             GdkEventGestureRotate *rotate,
-+                             gpointer               user_data)
-+{
-+  RectangleInfo *rect = (RectangleInfo *)user_data;
-+
-+  rect->angle -= rotate->rotation;
-+
-+  gtk_widget_queue_draw (widget);
-+
-+  return TRUE;
-+}
-+
-+
-+static gboolean
-+bounce_timeout (gpointer user_data)
-+{
-+  gboolean retval = TRUE;
-+  RectangleInfo *rect = (RectangleInfo *)user_data;
-+
-+  if (rect->increasing)
-+    rect->progress += 0.10f;
-+  else
-+    rect->progress -= 0.10f;
-+
-+  if (rect->progress > 1.0f)
-+    {
-+      rect->progress = 0.90f;
-+      rect->increasing = FALSE;
-+    }
-+  else if (rect->progress <= 0.0f)
-+    {
-+      rect->progress = 0.0f;
-+      retval = FALSE;
-+    }
-+
-+  gtk_widget_queue_draw (rect->widget);
-+
-+  return retval;
-+}
-+
-+static void
-+bounce (RectangleInfo *rect,
-+        int            offset_x,
-+        int            offset_y)
-+{
-+  if (rect->progress != 0.0f)
-+    return;
-+
-+  rect->progress = 0.10f;
-+  rect->increasing = TRUE;
-+  rect->offset_x = offset_x;
-+  rect->offset_y = offset_y;
-+  gtk_widget_queue_draw (rect->widget);
-+
-+  gdk_threads_add_timeout (25, bounce_timeout, rect);
-+}
-+
-+static gboolean
-+handle_gesture_swipe_event (GtkWidget             *widget,
-+                            GdkEventGestureSwipe  *swipe,
-+                            gpointer               user_data)
-+{
-+  int offset_x = 150, offset_y = 150;
-+  RectangleInfo *rect = (RectangleInfo *)user_data;
-+
-+  offset_x *= -1.0 * swipe->delta_x;
-+  offset_y *= -1.0 * swipe->delta_y;
-+
-+  bounce (rect, offset_x, offset_y);
-+
-+  return TRUE;
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+  GtkWidget *window;
-+  GtkWidget *drawing_area;
-+  RectangleInfo rect;
-+
-+  gtk_init (&argc, &argv);
-+
-+  rect.width = 40.0;
-+  rect.height = 40.0;
-+  rect.angle = 0.0;
-+  rect.progress = 0.0f;
-+
-+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-+  gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
-+  g_signal_connect (window, "delete-event",
-+                    G_CALLBACK (gtk_main_quit), NULL);
-+
-+  drawing_area = gtk_drawing_area_new ();
-+  rect.widget = drawing_area;
-+  g_signal_connect (drawing_area, "expose-event",
-+                    G_CALLBACK (handle_expose_event), &rect);
-+  g_signal_connect (drawing_area, "gesture-magnify-event",
-+                    G_CALLBACK (handle_gesture_magnify_event), &rect);
-+  g_signal_connect (drawing_area, "gesture-rotate-event",
-+                    G_CALLBACK (handle_gesture_rotate_event), &rect);
-+  g_signal_connect (drawing_area, "gesture-swipe-event",
-+                    G_CALLBACK (handle_gesture_swipe_event), &rect);
-+  gtk_container_add (GTK_CONTAINER (window), drawing_area);
-+
-+  gtk_widget_show_all (window);
-+
-+  gtk_main ();
-+
-+  return 0;
-+}
diff --git a/bockbuild/mac-sdk/patches/gtk-quartz-move-drag.patch b/bockbuild/mac-sdk/patches/gtk-quartz-move-drag.patch
deleted file mode 100644 (file)
index e98f14a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/gdk/quartz/GdkQuartzWindow.c b/gdk/quartz/GdkQuartzWindow.c
-index 06d11cf..c11924c 100644
---- a/gdk/quartz/GdkQuartzWindow.c
-+++ b/gdk/quartz/GdkQuartzWindow.c
-@@ -412,7 +412,7 @@
-
- -(BOOL)isInManualResize
- {
--  return inManualResize;
-+  return inManualResize || inManualMove;
- }
-
- -(void)beginManualResize
diff --git a/bockbuild/mac-sdk/patches/gtk/0001-Add-invariant-that-a-child-is-unmapped-if-parent-is-.patch b/bockbuild/mac-sdk/patches/gtk/0001-Add-invariant-that-a-child-is-unmapped-if-parent-is-.patch
deleted file mode 100644 (file)
index 603454d..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-From fdbef10f94b9e16618b75e7e12184befcd178852 Mon Sep 17 00:00:00 2001
-From: Havoc Pennington <hp@pobox.com>
-Date: Mon, 20 Dec 2010 12:58:04 -0500
-Subject: [PATCH 01/68] Add invariant that a child is unmapped if parent is
- unmapped
-
-Requires fixes to GtkContainer and GtkWindow to unmap their
-children, rather than just withdrawing or hiding the container
-window.
-
-Requires fix to GtkHandleBox to chain up to GtkContainer unmap.
-
-Historically we avoided these unmaps for efficiency reasons,
-but these days it's a bigger problem that there's no way
-for child widgets to know that one of their ancestors has
-become unmapped.
-(cherry picked from commit b67c5af55bf611c013b2c43e6878281abd773530)
----
- docs/widget_system.txt |    2 +-
- gtk/gtkcontainer.c     |   15 ++++++++++-----
- gtk/gtkhandlebox.c     |    2 ++
- gtk/gtkwindow.c        |    7 ++++++-
- 4 files changed, 19 insertions(+), 7 deletions(-)
-
-diff --git a/docs/widget_system.txt b/docs/widget_system.txt
-index 1c2867c..9463f10 100644
---- a/docs/widget_system.txt
-+++ b/docs/widget_system.txt
-@@ -255,7 +255,7 @@ In the following
-
-    widget->parent && GTK_WIDGET_MAPPED (widget->parent) &&
-      GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_CHILD_VISIBLE
--       => GTK_WIDGET_MAPPED (widget)
-+       <=> GTK_WIDGET_MAPPED (widget)
-
- Note:, the definition
-
-diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c
-index 9aaa7d9..7105724 100644
---- a/gtk/gtkcontainer.c
-+++ b/gtk/gtkcontainer.c
-@@ -2694,12 +2694,17 @@ gtk_container_unmap (GtkWidget *widget)
- {
-   gtk_widget_set_mapped (widget, FALSE);
-
-+  /* hide our window first so user doesn't see all the child windows
-+   * vanishing one by one.  (only matters these days if one of the
-+   * children has an actual native window instead of client-side
-+   * window, e.g. a GtkSocket would)
-+   */
-   if (gtk_widget_get_has_window (widget))
--    gdk_window_hide (widget->window);
--  else
--    gtk_container_forall (GTK_CONTAINER (widget),
--                        (GtkCallback)gtk_widget_unmap,
--                        NULL);
-+    gdk_window_hide (gtk_widget_get_window (widget));
-+
-+  gtk_container_forall (GTK_CONTAINER (widget),
-+                        (GtkCallback)gtk_widget_unmap,
-+                        NULL);
- }
-
- /**
-diff --git a/gtk/gtkhandlebox.c b/gtk/gtkhandlebox.c
-index 667371f..557d2de 100644
---- a/gtk/gtkhandlebox.c
-+++ b/gtk/gtkhandlebox.c
-@@ -383,6 +383,8 @@ gtk_handle_box_unmap (GtkWidget *widget)
-       gdk_window_hide (hb->float_window);
-       hb->float_window_mapped = FALSE;
-     }
-+
-+  GTK_WIDGET_CLASS (gtk_handle_box_parent_class)->unmap (widget);
- }
-
- static void
-diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
-index 4de3215..8f174c6 100644
---- a/gtk/gtkwindow.c
-+++ b/gtk/gtkwindow.c
-@@ -4690,7 +4690,8 @@ gtk_window_unmap (GtkWidget *widget)
- {
-   GtkWindow *window = GTK_WINDOW (widget);
-   GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE (widget);
--  GtkWindowGeometryInfo *info;
-+  GtkWindowGeometryInfo *info;
-+  GtkWidget *child;
-   GdkWindowState state;
-
-   gtk_widget_set_mapped (widget, FALSE);
-@@ -4721,6 +4722,10 @@ gtk_window_unmap (GtkWidget *widget)
-   window->stick_initially = (state & GDK_WINDOW_STATE_STICKY) != 0;
-   priv->above_initially = (state & GDK_WINDOW_STATE_ABOVE) != 0;
-   priv->below_initially = (state & GDK_WINDOW_STATE_BELOW) != 0;
-+
-+  child = gtk_bin_get_child (&(window->bin));
-+  if (child)
-+    gtk_widget_unmap (child);
- }
-
- static void
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0002-Maintain-map-unmap-invariants-in-GtkRecentChooserDia.patch b/bockbuild/mac-sdk/patches/gtk/0002-Maintain-map-unmap-invariants-in-GtkRecentChooserDia.patch
deleted file mode 100644 (file)
index c74d358..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-From 4f27e87d62b480a49dcffc232e246295c32113ca Mon Sep 17 00:00:00 2001
-From: Kjell Ahlstedt <kjell.ahlstedt@bredband.net>
-Date: Wed, 16 Nov 2011 09:03:12 +0100
-Subject: [PATCH 02/68] Maintain map/unmap invariants in
- GtkRecentChooserDialog
-
-We used to explicitly map and unmap the child GtkRecentChooserWidget when
-mapping and unmapping the dialog, respectively. Now that GtkContainer actually
-unmaps child widgets (instead of avoiding that), we can assume that the
-child GtkRecentChooserWidget will be unmapped when we want it to be.
-
-This fixes a warning from gtk_widget_verify_invariants(), as we were mapping
-our child widget before calling our parent class' ::map() handler. Bug #659257.
-(cherry picked from commit e8bb2e4545365d83261381a14920b773aba4a678)
----
- gtk/gtkrecentchooserdialog.c |   30 ------------------------------
- 1 file changed, 30 deletions(-)
-
-diff --git a/gtk/gtkrecentchooserdialog.c b/gtk/gtkrecentchooserdialog.c
-index 058439a..1c67b7a 100644
---- a/gtk/gtkrecentchooserdialog.c
-+++ b/gtk/gtkrecentchooserdialog.c
-@@ -55,9 +55,6 @@ static void gtk_recent_chooser_dialog_get_property (GObject      *object,
-                                                   GValue       *value,
-                                                   GParamSpec   *pspec);
-
--static void gtk_recent_chooser_dialog_map       (GtkWidget *widget);
--static void gtk_recent_chooser_dialog_unmap     (GtkWidget *widget);
--
- G_DEFINE_TYPE_WITH_CODE (GtkRecentChooserDialog,
-                        gtk_recent_chooser_dialog,
-                        GTK_TYPE_DIALOG,
-@@ -68,16 +65,12 @@ static void
- gtk_recent_chooser_dialog_class_init (GtkRecentChooserDialogClass *klass)
- {
-   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
--  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
-   gobject_class->set_property = gtk_recent_chooser_dialog_set_property;
-   gobject_class->get_property = gtk_recent_chooser_dialog_get_property;
-   gobject_class->constructor = gtk_recent_chooser_dialog_constructor;
-   gobject_class->finalize = gtk_recent_chooser_dialog_finalize;
-
--  widget_class->map = gtk_recent_chooser_dialog_map;
--  widget_class->unmap = gtk_recent_chooser_dialog_unmap;
--
-   _gtk_recent_chooser_install_properties (gobject_class);
-
-   g_type_class_add_private (klass, sizeof (GtkRecentChooserDialogPrivate));
-@@ -224,29 +217,6 @@ gtk_recent_chooser_dialog_finalize (GObject *object)
-   G_OBJECT_CLASS (gtk_recent_chooser_dialog_parent_class)->finalize (object);
- }
-
--static void
--gtk_recent_chooser_dialog_map (GtkWidget *widget)
--{
--  GtkRecentChooserDialog *dialog = GTK_RECENT_CHOOSER_DIALOG (widget);
--  GtkRecentChooserDialogPrivate *priv = dialog->priv;
--
--  if (!gtk_widget_get_mapped (priv->chooser))
--    gtk_widget_map (priv->chooser);
--
--  GTK_WIDGET_CLASS (gtk_recent_chooser_dialog_parent_class)->map (widget);
--}
--
--static void
--gtk_recent_chooser_dialog_unmap (GtkWidget *widget)
--{
--  GtkRecentChooserDialog *dialog = GTK_RECENT_CHOOSER_DIALOG (widget);
--  GtkRecentChooserDialogPrivate *priv = dialog->priv;
--
--  GTK_WIDGET_CLASS (gtk_recent_chooser_dialog_parent_class)->unmap (widget);
--
--  gtk_widget_unmap (priv->chooser);
--}
--
- static GtkWidget *
- gtk_recent_chooser_dialog_new_valist (const gchar      *title,
-                                     GtkWindow        *parent,
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0003-GtkPlug-preserve-map-unmap-invariants.patch b/bockbuild/mac-sdk/patches/gtk/0003-GtkPlug-preserve-map-unmap-invariants.patch
deleted file mode 100644 (file)
index 85d0c53..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-From 41c694a884284280c8ac766e636dd344493509e4 Mon Sep 17 00:00:00 2001
-From: Matthias Clasen <mclasen@redhat.com>
-Date: Fri, 2 Sep 2011 21:40:42 -0400
-Subject: [PATCH 03/68] GtkPlug: preserve map/unmap invariants (cherry picked
- from commit be152f9b6196849c99c54afe5a0f651d08bf4626)
-
----
- gtk/gtkplug.c |   19 +++++++++++++------
- 1 file changed, 13 insertions(+), 6 deletions(-)
-
-diff --git a/gtk/gtkplug.c b/gtk/gtkplug.c
-index 99af62a..86dd85e 100644
---- a/gtk/gtkplug.c
-+++ b/gtk/gtkplug.c
-@@ -708,13 +708,15 @@ gtk_plug_map (GtkWidget *widget)
-     {
-       GtkBin *bin = GTK_BIN (widget);
-       GtkPlug *plug = GTK_PLUG (widget);
--
-+      GtkWidget *child;
-+
-       gtk_widget_set_mapped (widget, TRUE);
-
--      if (bin->child &&
--        gtk_widget_get_visible (bin->child) &&
--        !gtk_widget_get_mapped (bin->child))
--      gtk_widget_map (bin->child);
-+      child = gtk_bin_get_child (bin);
-+      if (child != NULL &&
-+          gtk_widget_get_visible (child) &&
-+          !gtk_widget_get_mapped (child))
-+        gtk_widget_map (child);
-
-       _gtk_plug_windowing_map_toplevel (plug);
-
-@@ -732,13 +734,18 @@ gtk_plug_unmap (GtkWidget *widget)
-   if (gtk_widget_is_toplevel (widget))
-     {
-       GtkPlug *plug = GTK_PLUG (widget);
-+      GtkWidget *child;
-
-       gtk_widget_set_mapped (widget, FALSE);
-
-       gdk_window_hide (widget->window);
-
-+      child = gtk_bin_get_child (GTK_BIN (widget));
-+      if (child != NULL)
-+        gtk_widget_unmap (child);
-+
-       _gtk_plug_windowing_unmap_toplevel (plug);
--
-+
-       gdk_synthesize_window_state (widget->window,
-                                  0,
-                                  GDK_WINDOW_STATE_WITHDRAWN);
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0004-Add-gdk_screen_get_monitor_workarea-and-use-it-all-o.patch b/bockbuild/mac-sdk/patches/gtk/0004-Add-gdk_screen_get_monitor_workarea-and-use-it-all-o.patch
deleted file mode 100644 (file)
index a89f294..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-From 8636b3d980cdef4c12f53779f708cc4a674d1054 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 23 Nov 2012 15:24:36 +0100
-Subject: [PATCH 04/68] Add gdk_screen_get_monitor_workarea() and use it all
- over the place
-
----
- gdk/gdk.symbols               |    1 +
- gdk/gdkscreen.h               |    3 +++
- gdk/quartz/gdkscreen-quartz.c |   30 ++++++++++++++++++++++++++++++
- gtk/gtkcombobox.c             |    4 ++--
- gtk/gtkentry.c                |    2 +-
- gtk/gtkentrycompletion.c      |    2 +-
- gtk/gtkfilechooserdefault.c   |    2 +-
- gtk/gtklinkbutton.c           |    2 +-
- gtk/gtkmenu.c                 |    6 +++---
- gtk/gtkmenuitem.c             |    2 +-
- gtk/gtkmenutoolbutton.c       |    2 +-
- gtk/gtkrecentchooserdefault.c |    4 ++--
- gtk/gtkscalebutton.c          |    2 +-
- gtk/gtkstatusicon.c           |    4 ++--
- gtk/gtktextview.c             |    2 +-
- gtk/gtktoolbar.c              |    2 +-
- gtk/gtktooltip.c              |    2 +-
- gtk/gtktreeview.c             |    2 +-
- gtk/gtkwindow.c               |    6 +++---
- 19 files changed, 57 insertions(+), 23 deletions(-)
-
-diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols
-index d4f2072..feed787 100644
---- a/gdk/gdk.symbols
-+++ b/gdk/gdk.symbols
-@@ -1169,6 +1169,7 @@ gdk_screen_get_default_colormap
- gdk_screen_set_default_colormap
- gdk_screen_get_n_monitors
- gdk_screen_get_monitor_geometry
-+gdk_screen_get_monitor_workarea
- gdk_screen_get_monitor_width_mm
- gdk_screen_get_monitor_height_mm
- gdk_screen_get_monitor_plug_name
-diff --git a/gdk/gdkscreen.h b/gdk/gdkscreen.h
-index 418cecf..d3d4fe9 100644
---- a/gdk/gdkscreen.h
-+++ b/gdk/gdkscreen.h
-@@ -95,6 +95,9 @@ gint          gdk_screen_get_primary_monitor   (GdkScreen *screen);
- void          gdk_screen_get_monitor_geometry  (GdkScreen *screen,
-                                               gint       monitor_num,
-                                               GdkRectangle *dest);
-+void          gdk_screen_get_monitor_workarea  (GdkScreen    *screen,
-+                                                gint          monitor_num,
-+                                                GdkRectangle *dest);
- gint          gdk_screen_get_monitor_at_point  (GdkScreen *screen,
-                                               gint       x,
-                                               gint       y);
-diff --git a/gdk/quartz/gdkscreen-quartz.c b/gdk/quartz/gdkscreen-quartz.c
-index 796fcb5..4bb573b 100644
---- a/gdk/quartz/gdkscreen-quartz.c
-+++ b/gdk/quartz/gdkscreen-quartz.c
-@@ -464,6 +464,36 @@ gdk_screen_get_monitor_geometry (GdkScreen    *screen,
-   *dest = GDK_SCREEN_QUARTZ (screen)->screen_rects[monitor_num];
- }
-
-+void
-+gdk_screen_get_monitor_workarea (GdkScreen    *screen,
-+                                 gint          monitor_num,
-+                                 GdkRectangle *dest)
-+{
-+  GdkScreenQuartz *quartz_screen;
-+  NSArray *array;
-+  NSScreen *nsscreen;
-+  NSRect rect;
-+
-+  g_return_if_fail (GDK_IS_SCREEN (screen));
-+  g_return_if_fail (monitor_num < gdk_screen_get_n_monitors (screen));
-+  g_return_if_fail (monitor_num >= 0);
-+
-+  quartz_screen = GDK_SCREEN_QUARTZ (screen);
-+
-+  GDK_QUARTZ_ALLOC_POOL;
-+
-+  array = [NSScreen screens];
-+  nsscreen = [array objectAtIndex:monitor_num];
-+  rect = [nsscreen visibleFrame];
-+
-+  dest->x = rect.origin.x - quartz_screen->min_x;
-+  dest->y = quartz_screen->height - (rect.origin.y + rect.size.height) + quartz_screen->min_y;
-+  dest->width = rect.size.width;
-+  dest->height = rect.size.height;
-+
-+  GDK_QUARTZ_RELEASE_POOL;
-+}
-+
- gchar *
- gdk_screen_make_display_name (GdkScreen *screen)
- {
-diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
-index dc912a3..d997d0d 100644
---- a/gtk/gtkcombobox.c
-+++ b/gtk/gtkcombobox.c
-@@ -1667,7 +1667,7 @@ gtk_combo_box_menu_position_below (GtkMenu  *menu,
-   screen = gtk_widget_get_screen (GTK_WIDGET (combo_box));
-   monitor_num = gdk_screen_get_monitor_at_window (screen,
-                                                 GTK_WIDGET (combo_box)->window);
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   if (*x < monitor.x)
-     *x = monitor.x;
-@@ -1836,7 +1836,7 @@ gtk_combo_box_list_position (GtkComboBox *combo_box,
-   screen = gtk_widget_get_screen (GTK_WIDGET (combo_box));
-   monitor_num = gdk_screen_get_monitor_at_window (screen,
-                                                 GTK_WIDGET (combo_box)->window);
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   if (*x < monitor.x)
-     *x = monitor.x;
-diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
-index e2999a3..0d16d71 100644
---- a/gtk/gtkentry.c
-+++ b/gtk/gtkentry.c
-@@ -8614,7 +8614,7 @@ popup_position_func (GtkMenu   *menu,
-     monitor_num = 0;
-   gtk_menu_set_monitor (menu, monitor_num);
-
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-   gtk_widget_size_request (entry->popup_menu, &menu_req);
-   height = gdk_window_get_height (entry->text_area);
-   gtk_entry_get_cursor_locations (entry, CURSOR_STANDARD, &strong_x, NULL);
-diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c
-index 2fa7b56..a8deace 100644
---- a/gtk/gtkentrycompletion.c
-+++ b/gtk/gtkentrycompletion.c
-@@ -1409,7 +1409,7 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
-   screen = gtk_widget_get_screen (GTK_WIDGET (completion->priv->entry));
-   monitor_num = gdk_screen_get_monitor_at_window (screen,
-                                                 GTK_WIDGET (completion->priv->entry)->window);
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-
-
-diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
-index 2a75365..f94f4d6 100644
---- a/gtk/gtkfilechooserdefault.c
-+++ b/gtk/gtkfilechooserdefault.c
-@@ -4100,7 +4100,7 @@ popup_position_func (GtkMenu   *menu,
-
-   monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
-   gtk_menu_set_monitor (menu, monitor_num);
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
-   *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
-diff --git a/gtk/gtklinkbutton.c b/gtk/gtklinkbutton.c
-index bae8ec3..45d64b2 100644
---- a/gtk/gtklinkbutton.c
-+++ b/gtk/gtklinkbutton.c
-@@ -374,7 +374,7 @@ popup_position_func (GtkMenu  *menu,
-
-   monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
-   gtk_menu_set_monitor (menu, monitor_num);
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
-   *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
-diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
-index fc25098..44972b2 100644
---- a/gtk/gtkmenu.c
-+++ b/gtk/gtkmenu.c
-@@ -993,7 +993,7 @@ gtk_menu_window_size_request (GtkWidget      *window,
-       GdkScreen *screen = gtk_widget_get_screen (window);
-       GdkRectangle monitor;
-
--      gdk_screen_get_monitor_geometry (screen, private->monitor_num, &monitor);
-+      gdk_screen_get_monitor_workarea (screen, private->monitor_num, &monitor);
-
-       if (private->y + requisition->height > monitor.y + monitor.height)
-       requisition->height = monitor.y + monitor.height - private->y;
-@@ -4231,7 +4231,7 @@ gtk_menu_position (GtkMenu *menu)
-       if (private->monitor_num < 0)
-       private->monitor_num = gdk_screen_get_monitor_at_point (screen, x, y);
-
--      gdk_screen_get_monitor_geometry (screen, private->monitor_num, &monitor);
-+      gdk_screen_get_monitor_workarea (screen, private->monitor_num, &monitor);
-     }
-   else
-     {
-@@ -4260,7 +4260,7 @@ gtk_menu_position (GtkMenu *menu)
-        * Positioning in the vertical direction is similar: first try below
-        * mouse cursor, then above.
-        */
--      gdk_screen_get_monitor_geometry (screen, private->monitor_num, &monitor);
-+      gdk_screen_get_monitor_workarea (screen, private->monitor_num, &monitor);
-
-       space_left = x - monitor.x;
-       space_right = monitor.x + monitor.width - x - 1;
-diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c
-index 8f23b75..ffc2db6 100644
---- a/gtk/gtkmenuitem.c
-+++ b/gtk/gtkmenuitem.c
-@@ -1717,7 +1717,7 @@ gtk_menu_item_position_menu (GtkMenu  *menu,
-   monitor_num = gdk_screen_get_monitor_at_window (screen, menu_item->event_window);
-   if (monitor_num < 0)
-     monitor_num = 0;
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   if (!gdk_window_get_origin (widget->window, &tx, &ty))
-     {
-diff --git a/gtk/gtkmenutoolbutton.c b/gtk/gtkmenutoolbutton.c
-index 0c464e8..e254e1b 100644
---- a/gtk/gtkmenutoolbutton.c
-+++ b/gtk/gtkmenutoolbutton.c
-@@ -287,7 +287,7 @@ menu_position_func (GtkMenu           *menu,
-   monitor_num = gdk_screen_get_monitor_at_window (screen, widget->window);
-   if (monitor_num < 0)
-     monitor_num = 0;
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   if (orientation == GTK_ORIENTATION_HORIZONTAL)
-     {
-diff --git a/gtk/gtkrecentchooserdefault.c b/gtk/gtkrecentchooserdefault.c
-index 1ab48e2..fe2a772 100644
---- a/gtk/gtkrecentchooserdefault.c
-+++ b/gtk/gtkrecentchooserdefault.c
-@@ -951,7 +951,7 @@ set_default_size (GtkRecentChooserDefault *impl)
-   screen = gtk_widget_get_screen (widget);
-   monitor_num = gdk_screen_get_monitor_at_window (screen, widget->window);
-
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   width = MIN (width, monitor.width * 3 / 4);
-   height = MIN (height, monitor.height * 3 / 4);
-@@ -1849,7 +1849,7 @@ popup_position_func (GtkMenu   *menu,
-
-   monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
-   gtk_menu_set_monitor (menu, monitor_num);
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
-   *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
-diff --git a/gtk/gtkscalebutton.c b/gtk/gtkscalebutton.c
-index df9b574..3c6fc85 100644
---- a/gtk/gtkscalebutton.c
-+++ b/gtk/gtkscalebutton.c
-@@ -1000,7 +1000,7 @@ gtk_scale_popup (GtkWidget *widget,
-       monitor = gdk_screen_get_monitor_at_point (screen,
-                                                button_event->x_root,
-                                                button_event->y_root);
--      gdk_screen_get_monitor_geometry (screen, monitor, &rect);
-+      gdk_screen_get_monitor_workarea (screen, monitor, &rect);
-
-       if (priv->orientation == GTK_ORIENTATION_VERTICAL)
-         y += button_event->y;
-diff --git a/gtk/gtkstatusicon.c b/gtk/gtkstatusicon.c
-index 77d93da..c6d3097 100644
---- a/gtk/gtkstatusicon.c
-+++ b/gtk/gtkstatusicon.c
-@@ -648,7 +648,7 @@ build_button_event (GtkStatusIconPrivate *priv,
-   GdkRectangle monitor0;
-
-   /* We know that gdk/win32 puts the primary monitor at index 0 */
--  gdk_screen_get_monitor_geometry (gdk_screen_get_default (), 0, &monitor0);
-+  gdk_screen_get_monitor_workarea (gdk_screen_get_default (), 0, &monitor0);
-   e->window = g_object_ref (gdk_get_default_root_window ());
-   e->send_event = TRUE;
-   e->time = GetTickCount ();
-@@ -2512,7 +2512,7 @@ gtk_status_icon_position_menu (GtkMenu  *menu,
-     monitor_num = 0;
-   gtk_menu_set_monitor (menu, monitor_num);
-
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   gdk_window_get_origin (widget->window, x, y);
-
-diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
-index 9ddddec..419cced 100644
---- a/gtk/gtktextview.c
-+++ b/gtk/gtktextview.c
-@@ -7845,7 +7845,7 @@ popup_position_func (GtkMenu   *menu,
-
-   monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
-   gtk_menu_set_monitor (menu, monitor_num);
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
-   *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
-diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c
-index b2c4b15..fc1e588 100644
---- a/gtk/gtktoolbar.c
-+++ b/gtk/gtktoolbar.c
-@@ -2618,7 +2618,7 @@ menu_position_func (GtkMenu  *menu,
-   monitor_num = gdk_screen_get_monitor_at_window (screen, priv->arrow_button->window);
-   if (monitor_num < 0)
-     monitor_num = 0;
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   gdk_window_get_origin (GTK_BUTTON (priv->arrow_button)->event_window, x, y);
-   if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
-diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c
-index 9918165..fb6e869 100644
---- a/gtk/gtktooltip.c
-+++ b/gtk/gtktooltip.c
-@@ -1139,7 +1139,7 @@ gtk_tooltip_position (GtkTooltip *tooltip,
-                                &requisition);
-
-       monitor_num = gdk_screen_get_monitor_at_point (screen, x, y);
--      gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+      gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-       if (x + requisition.width > monitor.x + monitor.width)
-         x -= x - (monitor.x + monitor.width) + requisition.width;
-diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
-index eccd20c..cca1d3d 100644
---- a/gtk/gtktreeview.c
-+++ b/gtk/gtktreeview.c
-@@ -14251,7 +14251,7 @@ gtk_tree_view_search_position_func (GtkTreeView *tree_view,
-   GdkRectangle monitor;
-
-   monitor_num = gdk_screen_get_monitor_at_window (screen, tree_window);
--  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+  gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-
-   gtk_widget_realize (search_dialog);
-
-diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
-index 8f174c6..7094eb6 100644
---- a/gtk/gtkwindow.c
-+++ b/gtk/gtkwindow.c
-@@ -5771,7 +5771,7 @@ center_window_on_monitor (GtkWindow *window,
-   if (monitor_num == -1)
-     monitor_num = get_center_monitor_of_window (window);
-
--  gdk_screen_get_monitor_geometry (gtk_window_check_screen (window),
-+  gdk_screen_get_monitor_workarea (gtk_window_check_screen (window),
-                                  monitor_num, &monitor);
-
-   *x = (monitor.width - w) / 2 + monitor.x;
-@@ -5917,7 +5917,7 @@ gtk_window_compute_configure_request (GtkWindow    *window,
-              */
-             if (monitor_num >= 0)
-               {
--                gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+                gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-                 clamp_window_to_rectangle (&x, &y, w, h, &monitor);
-               }
-           }
-@@ -5952,7 +5952,7 @@ gtk_window_compute_configure_request (GtkWindow    *window,
-              */
-             if (monitor_num >= 0)
-               {
--                gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-+                gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-                 clamp_window_to_rectangle (&x, &y, w, h, &monitor);
-               }
-           }
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0005-gtk-don-t-scroll-combo-box-menus-if-less-than-3-item.patch b/bockbuild/mac-sdk/patches/gtk/0005-gtk-don-t-scroll-combo-box-menus-if-less-than-3-item.patch
deleted file mode 100644 (file)
index c2c0ba5..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-From df766e7dc27c8bc373dd5eaeaa5bddb7702605fd Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 23 Nov 2012 15:28:26 +0100
-Subject: [PATCH 05/68] gtk: don't scroll combo box menus if less than 3
- itemss are visible
-
----
- gtk/gtkcombobox.c |   38 ++++++++++++++++++++++++++++++++++++++
- 1 file changed, 38 insertions(+)
-
-diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
-index d997d0d..3b58f32 100644
---- a/gtk/gtkcombobox.c
-+++ b/gtk/gtkcombobox.c
-@@ -1781,6 +1781,44 @@ gtk_combo_box_menu_position (GtkMenu  *menu,
-                                   menu_item);
-
-       gtk_combo_box_menu_position_over (menu, x, y, push_in, user_data);
-+
-+      if (menu_item)
-+        {
-+          GdkScreen *screen;
-+          GtkWidget *widget = GTK_WIDGET (combo_box);
-+          gint monitor_num;
-+          GdkRectangle monitor;
-+          gint px, py;
-+          gint menu_height;
-+          gint scroll_offset = 0;
-+
-+          screen = gtk_widget_get_screen (widget);
-+          gdk_display_get_pointer (gdk_screen_get_display (screen),
-+                                   NULL, &px, &py, NULL);
-+
-+          monitor_num = gdk_screen_get_monitor_at_point (screen, px, py);
-+
-+          gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor);
-+
-+          menu_height = GTK_WIDGET (menu)->requisition.height;
-+
-+          if (*y + menu_height > monitor.y + monitor.height)
-+            {
-+              scroll_offset -= *y + menu_height - (monitor.y + monitor.height);
-+            }
-+          else if (*y < monitor.y)
-+            {
-+              scroll_offset += monitor.y - *y;
-+            }
-+
-+          /* don't scroll the menu if less than 3 items would be visible,
-+           * use 4 to roughly take the scroll buttons into account
-+           */
-+          if (scroll_offset != 0 &&
-+              (menu->toplevel->requisition.height - ABS (scroll_offset) <
-+               5 * menu_item->requisition.height))
-+            gtk_combo_box_menu_position_below (menu, x, y, push_in, user_data);
-+        }
-     }
-
-   if (!gtk_widget_get_visible (GTK_MENU (priv->popup_widget)->toplevel))
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0006-gtk-paint-only-the-exposed-region-in-gdk_window_expo.patch b/bockbuild/mac-sdk/patches/gtk/0006-gtk-paint-only-the-exposed-region-in-gdk_window_expo.patch
deleted file mode 100644 (file)
index c3e47b6..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-From 37f07504f203aec1345a75abeb07172259bd5973 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Sun, 27 May 2012 22:51:33 +0200
-Subject: [PATCH 06/68] gtk: paint only the exposed region in
- gdk_window_expose()
-
----
- gtk/gtkwindow.c |   19 +++++++++++++++++--
- 1 file changed, 17 insertions(+), 2 deletions(-)
-
-diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
-index 7094eb6..89c91da 100644
---- a/gtk/gtkwindow.c
-+++ b/gtk/gtkwindow.c
-@@ -6631,13 +6631,28 @@ gtk_window_paint (GtkWidget     *widget,
-                     GTK_SHADOW_NONE, area, widget, "base", 0, 0, -1, -1);
- }
-
-+static void
-+gtk_window_paint_region (GtkWidget *widget,
-+                         GdkRegion *region)
-+{
-+  int i, n_rectangles;
-+  GdkRectangle *rectangles = NULL;
-+
-+  gdk_region_get_rectangles (region, &rectangles, &n_rectangles);
-+
-+  for (i = 0; i < n_rectangles; i++)
-+    gtk_window_paint (widget, &rectangles[i]);
-+
-+  g_free (rectangles);
-+}
-+
- static gint
- gtk_window_expose (GtkWidget      *widget,
-                  GdkEventExpose *event)
- {
-   if (!gtk_widget_get_app_paintable (widget))
--    gtk_window_paint (widget, &event->area);
--
-+    gtk_window_paint_region (widget, event->region);
-+
-   if (GTK_WIDGET_CLASS (gtk_window_parent_class)->expose_event)
-     return GTK_WIDGET_CLASS (gtk_window_parent_class)->expose_event (widget, event);
-
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0007-Implement-gtk-enable-overlay-scrollbars-GtkSetting.patch b/bockbuild/mac-sdk/patches/gtk/0007-Implement-gtk-enable-overlay-scrollbars-GtkSetting.patch
deleted file mode 100644 (file)
index b3a6542..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-From 4c79075b4d396ba009b0f0e70d05c1c253cc3da6 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Fri, 24 Aug 2012 12:12:04 +0200
-Subject: [PATCH 07/68] Implement gtk-enable-overlay-scrollbars GtkSetting
-
-And set this up such that on OS X
-NSPreferredScrollerDidChangeNotification is followed.
----
- gdk/quartz/gdkevents-quartz.c |   56 ++++++++++++++++++++++++++++++++++++++++-
- gtk/gtksettings.c             |   20 ++++++++++++++-
- 2 files changed, 74 insertions(+), 2 deletions(-)
-
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index 53f1962..c99a2c9 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -85,6 +85,10 @@ gdk_quartz_ns_notification_callback (CFNotificationCenterRef  center,
-                        CFSTR("AppleNoRedisplayAppearancePreferenceChanged"),
-                        0) == kCFCompareEqualTo)
-     new_event.setting.name = "gtk-primary-button-warps-slider";
-+  else if (CFStringCompare (name,
-+                            CFSTR("NSPreferredScrollerStyleDidChangeNotification"),
-+                            0) == kCFCompareEqualTo)
-+    new_event.setting.name = "gtk-enable-overlay-scrollbars";
-
-   if (!new_event.setting.name)
-     return;
-@@ -114,6 +118,20 @@ gdk_quartz_events_init_notifications (void)
-                                    CFSTR ("AppleNoRedisplayAppearancePreferenceChanged"),
-                                    NULL,
-                                    CFNotificationSuspensionBehaviorDeliverImmediately);
-+
-+  /* The preferred scroller notification and property are only available on Lion
-+   * and higher. Also, beware that the notification will only start working after the
-+   * property has been queried for the first time!.
-+   */
-+  if (gdk_quartz_osx_version () >= GDK_OSX_LION)
-+    {
-+      CFNotificationCenterAddObserver (CFNotificationCenterGetLocalCenter (),
-+                                       NULL,
-+                                       &gdk_quartz_ns_notification_callback,
-+                                       CFSTR ("NSPreferredScrollerStyleDidChangeNotification"),
-+                                       NULL,
-+                                       CFNotificationSuspensionBehaviorDeliverImmediately);
-+    }
- }
-
- void
-@@ -1686,7 +1704,43 @@ gdk_screen_get_setting (GdkScreen   *screen,
-
-       return TRUE;
-     }
--
-+  else if (strcmp (name, "gtk-enable-overlay-scrollbars") == 0)
-+    {
-+      gboolean enabled = FALSE;
-+
-+      GDK_QUARTZ_ALLOC_POOL;
-+
-+      if (gdk_quartz_osx_version () >= GDK_OSX_LION)
-+        {
-+          /* Use an integer instead of NSScrollerStyle to allow things to be compiled
-+           * on < 10.7 systems.
-+           */
-+          int setting = (int)[NSScroller preferredScrollerStyle];
-+
-+          if (setting == 1)
-+            /* 1 == NSScrollerStyleOverlay */
-+            enabled = TRUE;
-+          else
-+            enabled = FALSE;
-+        }
-+      else
-+        {
-+          /* On systems prior to Lion, default to legacy scrolling. */
-+          enabled = FALSE;
-+        }
-+
-+      g_value_set_boolean (value, enabled);
-+
-+      /* Initialize after quering the property for the first theme,
-+       * notifications are otherwise not received!
-+       */
-+      gdk_quartz_events_init_notifications ();
-+
-+      GDK_QUARTZ_RELEASE_POOL;
-+
-+      return TRUE;
-+    }
-+
-   /* FIXME: Add more settings */
-
-   return FALSE;
-diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
-index 3fbbf00..1455db1 100644
---- a/gtk/gtksettings.c
-+++ b/gtk/gtksettings.c
-@@ -139,7 +139,8 @@ enum {
-   PROP_LABEL_SELECT_ON_FOCUS,
-   PROP_COLOR_PALETTE,
-   PROP_IM_PREEDIT_STYLE,
--  PROP_IM_STATUS_STYLE
-+  PROP_IM_STATUS_STYLE,
-+  PROP_ENABLE_OVERLAY_SCROLLBARS
- };
-
- /* --- prototypes --- */
-@@ -1205,6 +1206,23 @@ gtk_settings_class_init (GtkSettingsClass *class)
-                                                                 GTK_PARAM_READWRITE),
-                                              gtk_rc_property_parse_enum);
-   g_assert (result == PROP_IM_STATUS_STYLE);
-+
-+  /**
-+   * GtkSettings:gtk-enable-overlay-scrollbars:
-+   *
-+   * Whether overlay scrollbars should be enabled.
-+   *
-+   * Since: Xamarin specific API.
-+   */
-+  result = settings_install_property_parser (class,
-+                                             g_param_spec_boolean ("gtk-enable-overlay-scrollbars",
-+                                                                   P_("Enable Overlay Scrollbars"),
-+                                                                   P_("Whether to enable overlay scrollbars."),
-+                                                                   FALSE,
-+                                                                   GTK_PARAM_READWRITE),
-+                                             NULL);
-+
-+  g_assert (result == PROP_ENABLE_OVERLAY_SCROLLBARS);
- }
-
- static void
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0008-Smooth-scrolling.patch b/bockbuild/mac-sdk/patches/gtk/0008-Smooth-scrolling.patch
deleted file mode 100644 (file)
index 3b660d7..0000000
+++ /dev/null
@@ -1,418 +0,0 @@
-From ab426801023babba7513d9e27a4dbdd44bdbc318 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Tue, 8 May 2012 14:11:50 +0200
-Subject: [PATCH 08/68] Smooth scrolling
-
----
- gdk/gdkevents.c               |   32 +++++++++++++++++
- gdk/gdkevents.h               |    6 ++++
- gdk/gdkwindow.c               |    3 ++
- gdk/quartz/gdkevents-quartz.c |   80 +++++++++++++++++++++++++++++++----------
- gtk/gtkrange.c                |   51 +++++++++++++++++++-------
- gtk/gtkrange.h                |    4 +--
- gtk/gtkscrolledwindow.c       |   74 ++++++++++++++++++++++++++++++--------
- 7 files changed, 203 insertions(+), 47 deletions(-)
-
-diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
-index 53833a0..0f8bba2 100644
---- a/gdk/gdkevents.c
-+++ b/gdk/gdkevents.c
-@@ -392,6 +392,8 @@ gdk_event_new (GdkEventType type)
-       new_event->scroll.y = 0.;
-       new_event->scroll.x_root = 0.;
-       new_event->scroll.y_root = 0.;
-+      new_event->scroll.delta_x = 0.;
-+      new_event->scroll.delta_y = 0.;
-       break;
-     case GDK_ENTER_NOTIFY:
-     case GDK_LEAVE_NOTIFY:
-@@ -845,6 +847,36 @@ gdk_event_get_root_coords (const GdkEvent *event,
-   return fetched;
- }
-
-+gboolean
-+gdk_event_get_scroll_deltas (const GdkEvent *event,
-+                             gdouble        *delta_x,
-+                             gdouble        *delta_y)
-+{
-+  gboolean fetched = TRUE;
-+  gdouble dx = 0.0;
-+  gdouble dy = 0.0;
-+
-+  switch (event->type)
-+    {
-+    case GDK_SCROLL:
-+      fetched = event->scroll.has_deltas;
-+      dx = event->scroll.delta_x;
-+      dy = event->scroll.delta_y;
-+      break;
-+    default:
-+      fetched = FALSE;
-+      break;
-+    }
-+
-+  if (delta_x)
-+    *delta_x = dx;
-+
-+  if (delta_y)
-+    *delta_y = dy;
-+
-+  return fetched;
-+}
-+
- /**
-  * gdk_event_get_axis:
-  * @event: a #GdkEvent
-diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
-index 0602bd0..f6b4e04 100644
---- a/gdk/gdkevents.h
-+++ b/gdk/gdkevents.h
-@@ -337,6 +337,9 @@ struct _GdkEventScroll
-   GdkScrollDirection direction;
-   GdkDevice *device;
-   gdouble x_root, y_root;
-+  gboolean has_deltas;
-+  gdouble delta_x;
-+  gdouble delta_y;
- };
-
- struct _GdkEventKey
-@@ -537,6 +540,9 @@ gboolean  gdk_event_get_coords             (const GdkEvent  *event,
- gboolean  gdk_event_get_root_coords   (const GdkEvent  *event,
-                                        gdouble         *x_root,
-                                        gdouble         *y_root);
-+gboolean  gdk_event_get_scroll_deltas   (const GdkEvent *event,
-+                                         gdouble         *delta_x,
-+                                         gdouble         *delta_y);
- gboolean  gdk_event_get_axis            (const GdkEvent  *event,
-                                          GdkAxisUse       axis_use,
-                                          gdouble         *value);
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index f5f0339..d48751e 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -10800,6 +10800,9 @@ proxy_button_event (GdkEvent *source_event,
-       event->scroll.y_root = source_event->scroll.y_root;
-       event->scroll.state = state;
-       event->scroll.device = source_event->scroll.device;
-+      event->scroll.has_deltas = source_event->scroll.has_deltas;
-+      event->scroll.delta_x = source_event->scroll.delta_x;
-+      event->scroll.delta_y = source_event->scroll.delta_y;
-       return TRUE;
-
-     default:
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index c99a2c9..e7d97dc 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -57,6 +57,13 @@ static GdkWindow *find_toplevel_under_pointer   (GdkDisplay *display,
-                                                  gint       *x,
-                                                  gint       *y);
-
-+/* Protocol to build cleanly for OSX < 10.7 */
-+@protocol PreciseDeltas
-+- (BOOL) hasPreciseScrollingDeltas;
-+- (CGFloat) scrollingDeltaX;
-+- (CGFloat) scrollingDeltaY;
-+@end
-+
-
- NSEvent *
- gdk_quartz_event_get_nsevent (GdkEvent *event)
-@@ -980,6 +987,9 @@ fill_scroll_event (GdkWindow          *window,
-                    gint                y,
-                    gint                x_root,
-                    gint                y_root,
-+                   gboolean            has_deltas,
-+                   gdouble             delta_x,
-+                   gdouble             delta_y,
-                    GdkScrollDirection  direction)
- {
-   GdkWindowObject *private;
-@@ -999,6 +1009,9 @@ fill_scroll_event (GdkWindow          *window,
-   event->scroll.state = get_keyboard_modifiers_from_ns_event (nsevent);
-   event->scroll.direction = direction;
-   event->scroll.device = _gdk_display->core_pointer;
-+  event->scroll.has_deltas = has_deltas;
-+  event->scroll.delta_x = delta_x;
-+  event->scroll.delta_y = delta_y;
- }
-
- static void
-@@ -1471,28 +1484,59 @@ gdk_event_translate (GdkEvent *event,
-
-     case NSScrollWheel:
-       {
--      float dx = [nsevent deltaX];
--      float dy = [nsevent deltaY];
--      GdkScrollDirection direction;
--
--        if (dy != 0)
--          {
--            if (dy < 0.0)
--              direction = GDK_SCROLL_DOWN;
--            else
--              direction = GDK_SCROLL_UP;
-+        GdkScrollDirection direction;
-+      float dx;
-+      float dy;
-
--            fill_scroll_event (window, event, nsevent, x, y, x_root, y_root, direction);
--          }
-+      if (gdk_quartz_osx_version() >= GDK_OSX_LION &&
-+          [(id <PreciseDeltas>) nsevent hasPreciseScrollingDeltas])
-+        {
-+          dx = [(id <PreciseDeltas>) nsevent scrollingDeltaX];
-+          dy = [(id <PreciseDeltas>) nsevent scrollingDeltaY];
-
--        if (dx != 0)
--          {
--            if (dx < 0.0)
--              direction = GDK_SCROLL_RIGHT;
-+            if (fabs (dy) > fabs (dx))
-+              {
-+                if (dy < 0.0)
-+                  direction = GDK_SCROLL_DOWN;
-+                else
-+                  direction = GDK_SCROLL_UP;
-+              }
-             else
--              direction = GDK_SCROLL_LEFT;
-+              {
-+                if (dx < 0.0)
-+                  direction = GDK_SCROLL_RIGHT;
-+                else
-+                  direction = GDK_SCROLL_LEFT;
-+              }
-
--            fill_scroll_event (window, event, nsevent, x, y, x_root, y_root, direction);
-+            fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
-+                               TRUE, -dx, -dy, direction);
-+        }
-+      else
-+        {
-+          dx = [nsevent deltaX];
-+          dy = [nsevent deltaY];
-+
-+            if (dy != 0.0)
-+              {
-+                if (dy < 0.0)
-+                  direction = GDK_SCROLL_DOWN;
-+                else
-+                  direction = GDK_SCROLL_UP;
-+
-+                fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
-+                                   FALSE, 0.0, fabs (dy), direction);
-+              }
-+            else if (dx != 0.0)
-+              {
-+                if (dx < 0.0)
-+                  direction = GDK_SCROLL_RIGHT;
-+                else
-+                  direction = GDK_SCROLL_LEFT;
-+
-+                fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
-+                                   FALSE, fabs (dx), 0.0, direction);
-+              }
-           }
-       }
-       break;
-diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
-index 245fbf6..d39f045 100644
---- a/gtk/gtkrange.c
-+++ b/gtk/gtkrange.c
-@@ -2561,7 +2561,7 @@ gtk_range_button_release (GtkWidget      *widget,
- /**
-  * _gtk_range_get_wheel_delta:
-  * @range: a #GtkRange
-- * @direction: A #GdkScrollDirection
-+ * @event: A #GdkEventScroll
-  *
-  * Returns a good step value for the mouse wheel.
-  *
-@@ -2570,27 +2570,52 @@ gtk_range_button_release (GtkWidget      *widget,
-  * Since: 2.4
-  **/
- gdouble
--_gtk_range_get_wheel_delta (GtkRange           *range,
--                          GdkScrollDirection  direction)
-+_gtk_range_get_wheel_delta (GtkRange       *range,
-+                            GdkEventScroll *event)
- {
-   GtkAdjustment *adj = range->adjustment;
-+  gdouble dx, dy;
-   gdouble delta;
-
--  if (GTK_IS_SCROLLBAR (range))
--    delta = pow (adj->page_size, 2.0 / 3.0);
-+  if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &dx, &dy))
-+    {
-+      GtkAllocation allocation;
-+
-+      gtk_widget_get_allocation (GTK_WIDGET (range), &allocation);
-+
-+      if (gtk_orientable_get_orientation (GTK_ORIENTABLE (range)) == GTK_ORIENTATION_HORIZONTAL)
-+        {
-+          if (GTK_IS_SCROLLBAR (range) && adj->page_size > 0)
-+            delta = dx * adj->page_size / allocation.width;
-+          else
-+            delta = dx * (adj->upper - adj->lower) / allocation.width;
-+        }
-+      else
-+        {
-+          if (GTK_IS_SCROLLBAR (range) && adj->page_size > 0)
-+            delta = dy * adj->page_size / allocation.height;
-+          else
-+            delta = dy * (adj->upper - adj->lower) / allocation.height;
-+        }
-+    }
-   else
--    delta = adj->step_increment * 2;
--
--  if (direction == GDK_SCROLL_UP ||
--      direction == GDK_SCROLL_LEFT)
--    delta = - delta;
--
-+    {
-+      if (GTK_IS_SCROLLBAR (range))
-+        delta = pow (adj->page_size, 2.0 / 3.0);
-+      else
-+        delta = adj->step_increment * 2;
-+
-+      if (event->direction == GDK_SCROLL_UP ||
-+          event->direction == GDK_SCROLL_LEFT)
-+        delta = - delta;
-+    }
-+
-   if (range->inverted)
-     delta = - delta;
-
-   return delta;
- }
--
-+
- static gboolean
- gtk_range_scroll_event (GtkWidget      *widget,
-                       GdkEventScroll *event)
-@@ -2603,7 +2628,7 @@ gtk_range_scroll_event (GtkWidget      *widget,
-       gdouble delta;
-       gboolean handled;
-
--      delta = _gtk_range_get_wheel_delta (range, event->direction);
-+      delta = _gtk_range_get_wheel_delta (range, event);
-
-       g_signal_emit (range, signals[CHANGE_VALUE], 0,
-                      GTK_SCROLL_JUMP, adj->value + delta,
-diff --git a/gtk/gtkrange.h b/gtk/gtkrange.h
-index 5463140..c672acb 100644
---- a/gtk/gtkrange.h
-+++ b/gtk/gtkrange.h
-@@ -199,8 +199,8 @@ gint                gtk_range_get_round_digits             (GtkRange      *range
-
-
- /* internal API */
--gdouble            _gtk_range_get_wheel_delta              (GtkRange      *range,
--                                                            GdkScrollDirection direction);
-+gdouble            _gtk_range_get_wheel_delta              (GtkRange       *range,
-+                                                            GdkEventScroll *event);
-
- void               _gtk_range_set_stop_values              (GtkRange      *range,
-                                                             gdouble       *values,
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 1704d3c..2288b2f 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -1565,31 +1565,77 @@ static gboolean
- gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-                                 GdkEventScroll *event)
- {
--  GtkWidget *range;
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  gboolean handled = FALSE;
-+  gdouble delta_x;
-+  gdouble delta_y;
-
-   g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (widget), FALSE);
-   g_return_val_if_fail (event != NULL, FALSE);
-
--  if (event->direction == GDK_SCROLL_UP || event->direction == GDK_SCROLL_DOWN)
--    range = GTK_SCROLLED_WINDOW (widget)->vscrollbar;
--  else
--    range = GTK_SCROLLED_WINDOW (widget)->hscrollbar;
-+  if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &delta_x, &delta_y))
-+    {
-+      if (delta_x != 0.0 && scrolled_window->hscrollbar &&
-+          gtk_widget_get_visible (scrolled_window->hscrollbar))
-+        {
-+          GtkAdjustment *adj;
-+          gdouble new_value;
-+
-+          adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-+
-+          new_value = CLAMP (gtk_adjustment_get_value (adj) + delta_x,
-+                             gtk_adjustment_get_lower (adj),
-+                             gtk_adjustment_get_upper (adj) -
-+                             gtk_adjustment_get_page_size (adj));
-+
-+          gtk_adjustment_set_value (adj, new_value);
-+
-+          handled = TRUE;
-+        }
-+
-+      if (delta_y != 0.0 && scrolled_window->vscrollbar &&
-+          gtk_widget_get_visible (scrolled_window->vscrollbar))
-+        {
-+          GtkAdjustment *adj;
-+          gdouble new_value;
-+
-+          adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+
-+          new_value = CLAMP (gtk_adjustment_get_value (adj) + delta_y,
-+                             gtk_adjustment_get_lower (adj),
-+                             gtk_adjustment_get_upper (adj) -
-+                             gtk_adjustment_get_page_size (adj));
-
--  if (range && gtk_widget_get_visible (range))
-+          gtk_adjustment_set_value (adj, new_value);
-+
-+          handled = TRUE;
-+        }
-+    }
-+  else
-     {
--      GtkAdjustment *adj = GTK_RANGE (range)->adjustment;
--      gdouble delta, new_value;
-+      GtkWidget *range;
-
--      delta = _gtk_range_get_wheel_delta (GTK_RANGE (range), event->direction);
-+      if (event->direction == GDK_SCROLL_UP || event->direction == GDK_SCROLL_DOWN)
-+        range = scrolled_window->vscrollbar;
-+      else
-+        range = scrolled_window->hscrollbar;
-
--      new_value = CLAMP (adj->value + delta, adj->lower, adj->upper - adj->page_size);
--
--      gtk_adjustment_set_value (adj, new_value);
-+      if (range && gtk_widget_get_visible (range))
-+        {
-+          GtkAdjustment *adj = GTK_RANGE (range)->adjustment;
-+          gdouble delta, new_value;
-
--      return TRUE;
-+          delta = _gtk_range_get_wheel_delta (GTK_RANGE (range), event);
-+
-+          new_value = CLAMP (adj->value + delta, adj->lower, adj->upper - adj->page_size);
-+
-+          gtk_adjustment_set_value (adj, new_value);
-+
-+          handled = TRUE;
-+        }
-     }
-
--  return FALSE;
-+  return handled;
- }
-
- static gboolean
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0009-gtk-Add-a-way-to-do-event-capture.patch b/bockbuild/mac-sdk/patches/gtk/0009-gtk-Add-a-way-to-do-event-capture.patch
deleted file mode 100644 (file)
index 30c5138..0000000
+++ /dev/null
@@ -1,471 +0,0 @@
-From a484a0af1fc0ab98694c13970a308edeb52f39a6 Mon Sep 17 00:00:00 2001
-From: Carlos Garcia Campos <cgarcia@igalia.com>
-Date: Tue, 8 Feb 2011 14:49:31 +0100
-Subject: [PATCH 09/68] gtk: Add a way to do event capture
-
-This patch adds a capture phase to GTK+'s event propagation
-model. Events are first propagated from the toplevel (or the
-grab widget, if a grab is in place) down to the target widget
- and then back up. The second phase is using the existing
-::event signal, the new capture phase is using a private
-API instead of a public signal for now.
-
-This mechanism can be used in many places where we currently
-have to prevent child widgets from getting events by putting
-an input-only window over them. It will also be used to implement
-kinetic scrolling in subsequent patches.
-
-http://bugzilla.gnome.org/show_bug.cgi?id=641836
-
-We automatically request more motion events in behalf of
-the original widget if it listens to motion hints. So
-the capturing widget doesn't need to handle such
-implementation details.
-
-We are not making event capture part of the public API for 3.4,
-which is why there is no ::captured-event signal.
-
-Conflicts:
-
-       gtk/gtkmain.c
-       gtk/gtkwidget.c
-       gtk/gtkwidgetprivate.h
----
- gtk/gtkmain.c    |  268 +++++++++++++++++++++++++++++++++++-------------------
- gtk/gtkprivate.h |   14 +++
- gtk/gtkwidget.c  |   53 +++++++++++
- 3 files changed, 241 insertions(+), 94 deletions(-)
-
-diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
-index 56c92db..21345ed 100644
---- a/gtk/gtkmain.c
-+++ b/gtk/gtkmain.c
-@@ -1490,7 +1490,8 @@ void
- gtk_main_do_event (GdkEvent *event)
- {
-   GtkWidget *event_widget;
--  GtkWidget *grab_widget;
-+  GtkWidget *grab_widget = NULL;
-+  GtkWidget *topmost_widget = NULL;
-   GtkWindowGroup *window_group;
-   GdkEvent *rewritten_event = NULL;
-   GList *tmp_list;
-@@ -1552,7 +1553,14 @@ gtk_main_do_event (GdkEvent *event)
-   if (window_group->grabs)
-     {
-       grab_widget = window_group->grabs->data;
--
-+
-+      /* Find out the topmost widget where captured event propagation
-+       * should start, which is the widget holding the GTK+ grab
-+       * if any, otherwise it's left NULL and events are emitted
-+       * from the toplevel (or topmost parentless parent).
-+       */
-+      topmost_widget = grab_widget;
-+
-       /* If the grab widget is an ancestor of the event widget
-        *  then we send the event to the original event widget.
-        *  This is the key to implementing modality.
-@@ -1636,14 +1644,16 @@ gtk_main_do_event (GdkEvent *event)
-     case GDK_WINDOW_STATE:
-     case GDK_GRAB_BROKEN:
-     case GDK_DAMAGE:
--      gtk_widget_event (event_widget, event);
-+      if (!_gtk_widget_captured_event (event_widget, event))
-+        gtk_widget_event (event_widget, event);
-       break;
-
-     case GDK_SCROLL:
-     case GDK_BUTTON_PRESS:
-     case GDK_2BUTTON_PRESS:
-     case GDK_3BUTTON_PRESS:
--      gtk_propagate_event (grab_widget, event);
-+      if (!_gtk_propagate_captured_event (grab_widget, event, topmost_widget))
-+        gtk_propagate_event (grab_widget, event);
-       break;
-
-     case GDK_KEY_PRESS:
-@@ -1682,19 +1692,22 @@ gtk_main_do_event (GdkEvent *event)
-     case GDK_BUTTON_RELEASE:
-     case GDK_PROXIMITY_IN:
-     case GDK_PROXIMITY_OUT:
--      gtk_propagate_event (grab_widget, event);
-+      if (!_gtk_propagate_captured_event (grab_widget, event, topmost_widget))
-+        gtk_propagate_event (grab_widget, event);
-       break;
-
-     case GDK_ENTER_NOTIFY:
-       GTK_PRIVATE_SET_FLAG (event_widget, GTK_HAS_POINTER);
-       _gtk_widget_set_pointer_window (event_widget, event->any.window);
--      if (gtk_widget_is_sensitive (grab_widget))
-+      if (gtk_widget_is_sensitive (grab_widget) &&
-+          !_gtk_propagate_captured_event (grab_widget, event, topmost_widget))
-       gtk_widget_event (grab_widget, event);
-       break;
-
-     case GDK_LEAVE_NOTIFY:
-       GTK_PRIVATE_UNSET_FLAG (event_widget, GTK_HAS_POINTER);
--      if (gtk_widget_is_sensitive (grab_widget))
-+      if (gtk_widget_is_sensitive (grab_widget) &&
-+          !_gtk_propagate_captured_event (grab_widget, event, topmost_widget))
-       gtk_widget_event (grab_widget, event);
-       break;
-
-@@ -2400,44 +2413,96 @@ gtk_quit_invoke_function (GtkQuitFunction *quitf)
-     }
- }
-
--/**
-- * gtk_propagate_event:
-- * @widget: a #GtkWidget
-- * @event: an event
-- *
-- * Sends an event to a widget, propagating the event to parent widgets
-- * if the event remains unhandled. Events received by GTK+ from GDK
-- * normally begin in gtk_main_do_event(). Depending on the type of
-- * event, existence of modal dialogs, grabs, etc., the event may be
-- * propagated; if so, this function is used. gtk_propagate_event()
-- * calls gtk_widget_event() on each widget it decides to send the
-- * event to.  So gtk_widget_event() is the lowest-level function; it
-- * simply emits the "event" and possibly an event-specific signal on a
-- * widget.  gtk_propagate_event() is a bit higher-level, and
-- * gtk_main_do_event() is the highest level.
-- *
-- * All that said, you most likely don't want to use any of these
-- * functions; synthesizing events is rarely needed. Consider asking on
-- * the mailing list for better ways to achieve your goals. For
-- * example, use gdk_window_invalidate_rect() or
-- * gtk_widget_queue_draw() instead of making up expose events.
-- *
-- **/
--void
--gtk_propagate_event (GtkWidget *widget,
--                   GdkEvent  *event)
-+static gboolean
-+propagate_event_up (GtkWidget *widget,
-+                    GdkEvent  *event,
-+                    GtkWidget *topmost)
- {
--  gint handled_event;
--
--  g_return_if_fail (GTK_IS_WIDGET (widget));
--  g_return_if_fail (event != NULL);
--
--  handled_event = FALSE;
-+  gboolean handled_event = FALSE;
-
--  g_object_ref (widget);
--
--  if ((event->type == GDK_KEY_PRESS) ||
--      (event->type == GDK_KEY_RELEASE))
-+  /* Propagate event up the widget tree so that
-+   * parents can see the button and motion
-+   * events of the children.
-+   */
-+  while (TRUE)
-+    {
-+      GtkWidget *tmp;
-+
-+      g_object_ref (widget);
-+
-+      /* Scroll events are special cased here because it
-+       * feels wrong when scrolling a GtkViewport, say,
-+       * to have children of the viewport eat the scroll
-+       * event
-+       */
-+      if (!gtk_widget_is_sensitive (widget))
-+        handled_event = event->type != GDK_SCROLL;
-+      else
-+        handled_event = gtk_widget_event (widget, event);
-+
-+      tmp = gtk_widget_get_parent (widget);
-+      g_object_unref (widget);
-+
-+      if (widget == topmost)
-+        break;
-+
-+      widget = tmp;
-+
-+      if (handled_event || !widget)
-+        break;
-+    }
-+
-+  return handled_event;
-+}
-+
-+static gboolean
-+propagate_event_down (GtkWidget *widget,
-+                      GdkEvent  *event,
-+                      GtkWidget *topmost)
-+{
-+  gint handled_event = FALSE;
-+  GList *widgets = NULL;
-+  GList *l;
-+
-+  widgets = g_list_prepend (widgets, g_object_ref (widget));
-+  while (widget && widget != topmost)
-+    {
-+      widget = gtk_widget_get_parent (widget);
-+      if (!widget)
-+        break;
-+
-+      widgets = g_list_prepend (widgets, g_object_ref (widget));
-+
-+      if (widget == topmost)
-+        break;
-+    }
-+
-+  for (l = widgets; l && !handled_event; l = g_list_next (l))
-+    {
-+      widget = (GtkWidget *)l->data;
-+
-+      if (!gtk_widget_is_sensitive (widget))
-+        handled_event = TRUE;
-+      else
-+        handled_event = _gtk_widget_captured_event (widget, event);
-+    }
-+  g_list_free_full (widgets, (GDestroyNotify)g_object_unref);
-+
-+  return handled_event;
-+}
-+
-+static gboolean
-+propagate_event (GtkWidget *widget,
-+                 GdkEvent  *event,
-+                 gboolean   captured,
-+                 GtkWidget *topmost)
-+{
-+  gboolean handled_event = FALSE;
-+  gboolean (* propagate_func) (GtkWidget *widget, GdkEvent  *event);
-+
-+  propagate_func = captured ? _gtk_widget_captured_event : gtk_widget_event;
-+
-+  if (event->type == GDK_KEY_PRESS || event->type == GDK_KEY_RELEASE)
-     {
-       /* Only send key events within Window widgets to the Window
-        *  The Window widget will in turn pass the
-@@ -2448,60 +2513,75 @@ gtk_propagate_event (GtkWidget *widget,
-
-       window = gtk_widget_get_toplevel (widget);
-       if (GTK_IS_WINDOW (window))
--      {
--        /* If there is a grab within the window, give the grab widget
--         * a first crack at the key event
--         */
--        if (widget != window && gtk_widget_has_grab (widget))
--          handled_event = gtk_widget_event (widget, event);
--
--        if (!handled_event)
--          {
--            window = gtk_widget_get_toplevel (widget);
--            if (GTK_IS_WINDOW (window))
--              {
--                if (gtk_widget_is_sensitive (window))
--                  gtk_widget_event (window, event);
--              }
--          }
--
--        handled_event = TRUE; /* don't send to widget */
--      }
-+        {
-+          g_object_ref (widget);
-+          /* If there is a grab within the window, give the grab widget
-+           * a first crack at the key event
-+           */
-+          if (widget != window && gtk_widget_has_grab (widget))
-+            handled_event = propagate_func (widget, event);
-+
-+          if (!handled_event)
-+            {
-+              window = gtk_widget_get_toplevel (widget);
-+              if (GTK_IS_WINDOW (window))
-+                {
-+                  if (gtk_widget_is_sensitive (window))
-+                    handled_event = propagate_func (window, event);
-+                }
-+            }
-+
-+          g_object_unref (widget);
-+          return handled_event;
-+        }
-     }
--
--  /* Other events get propagated up the widget tree
--   *  so that parents can see the button and motion
--   *  events of the children.
--   */
--  if (!handled_event)
--    {
--      while (TRUE)
--      {
--        GtkWidget *tmp;
-
--        /* Scroll events are special cased here because it
--         * feels wrong when scrolling a GtkViewport, say,
--         * to have children of the viewport eat the scroll
--         * event
--         */
--        if (!gtk_widget_is_sensitive (widget))
--          handled_event = event->type != GDK_SCROLL;
--        else
--          handled_event = gtk_widget_event (widget, event);
--
--        tmp = widget->parent;
--        g_object_unref (widget);
-+  /* Other events get propagated up/down the widget tree */
-+  return captured ?
-+    propagate_event_down (widget, event, topmost) :
-+    propagate_event_up (widget, event, topmost);
-+}
-
--        widget = tmp;
--
--        if (!handled_event && widget)
--          g_object_ref (widget);
--        else
--          break;
--      }
--    }
--  else
--    g_object_unref (widget);
-+/**
-+ * gtk_propagate_event:
-+ * @widget: a #GtkWidget
-+ * @event: an event
-+ *
-+ * Sends an event to a widget, propagating the event to parent widgets
-+ * if the event remains unhandled.
-+ *
-+ * Events received by GTK+ from GDK normally begin in gtk_main_do_event().
-+ * Depending on the type of event, existence of modal dialogs, grabs, etc.,
-+ * the event may be propagated; if so, this function is used.
-+ *
-+ * gtk_propagate_event() calls gtk_widget_event() on each widget it
-+ * decides to send the event to. So gtk_widget_event() is the lowest-level
-+ * function; it simply emits the #GtkWidget::event and possibly an
-+ * event-specific signal on a widget. gtk_propagate_event() is a bit
-+ * higher-level, and gtk_main_do_event() is the highest level.
-+ *
-+ * All that said, you most likely don't want to use any of these
-+ * functions; synthesizing events is rarely needed. There are almost
-+ * certainly better ways to achieve your goals. For example, use
-+ * gdk_window_invalidate_rect() or gtk_widget_queue_draw() instead
-+ * of making up expose events.
-+ */
-+void
-+gtk_propagate_event (GtkWidget *widget,
-+                     GdkEvent  *event)
-+{
-+  g_return_if_fail (GTK_IS_WIDGET (widget));
-+  g_return_if_fail (event != NULL);
-+
-+  propagate_event (widget, event, FALSE, NULL);
-+}
-+
-+gboolean
-+_gtk_propagate_captured_event (GtkWidget *widget,
-+                               GdkEvent  *event,
-+                               GtkWidget *topmost)
-+{
-+  return propagate_event (widget, event, TRUE, topmost);
- }
-
- #if 0
-diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h
-index 6386c32..3865a67 100644
---- a/gtk/gtkprivate.h
-+++ b/gtk/gtkprivate.h
-@@ -152,6 +152,20 @@ gboolean _gtk_translate_keyboard_accel_state     (GdkKeymap       *keymap,
-                                                   GdkModifierType *consumed_modifiers);
-
-
-+gboolean        _gtk_propagate_captured_event  (GtkWidget       *widget,
-+                                                GdkEvent        *event,
-+                                                GtkWidget       *topmost);
-+
-+typedef gboolean (*GtkCapturedEventHandler) (GtkWidget *widget, GdkEvent *event);
-+
-+void              _gtk_widget_set_captured_event_handler (GtkWidget               *widget,
-+                                                          GtkCapturedEventHandler  handler);
-+
-+gboolean          _gtk_widget_captured_event               (GtkWidget *widget,
-+                                                            GdkEvent  *event);
-+
-+
-+
- G_END_DECLS
-
- #endif /* __GTK_PRIVATE_H__ */
-diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
-index 1d1f6bb..8e38ee1 100644
---- a/gtk/gtkwidget.c
-+++ b/gtk/gtkwidget.c
-@@ -351,6 +351,7 @@ static void gtk_widget_set_usize_internal (GtkWidget *widget,
-                                          gint       height);
- static void gtk_widget_get_draw_rectangle (GtkWidget    *widget,
-                                          GdkRectangle *rect);
-+static gboolean event_window_is_still_viewable (GdkEvent *event);
-
-
- /* --- variables --- */
-@@ -4807,6 +4808,58 @@ gtk_widget_event (GtkWidget *widget,
-   return gtk_widget_event_internal (widget, event);
- }
-
-+void
-+_gtk_widget_set_captured_event_handler (GtkWidget               *widget,
-+                                        GtkCapturedEventHandler  callback)
-+{
-+  g_object_set_data (G_OBJECT (widget), "captured-event-handler", callback);
-+}
-+
-+gboolean
-+_gtk_widget_captured_event (GtkWidget *widget,
-+                            GdkEvent  *event)
-+{
-+  gboolean return_val = FALSE;
-+  GtkCapturedEventHandler handler;
-+
-+  g_return_val_if_fail (GTK_IS_WIDGET (widget), TRUE);
-+  g_return_val_if_fail (WIDGET_REALIZED_FOR_EVENT (widget, event), TRUE);
-+
-+  if (event->type == GDK_EXPOSE)
-+    {
-+      g_warning ("Events of type GDK_EXPOSE cannot be synthesized. To get "
-+               "the same effect, call gdk_window_invalidate_rect/region(), "
-+               "followed by gdk_window_process_updates().");
-+      return TRUE;
-+    }
-+
-+  if (!event_window_is_still_viewable (event))
-+    return TRUE;
-+
-+  handler = g_object_get_data (G_OBJECT (widget), "captured-event-handler");
-+  if (!handler)
-+    return FALSE;
-+
-+  g_object_ref (widget);
-+
-+  return_val = handler (widget, event);
-+  return_val |= !WIDGET_REALIZED_FOR_EVENT (widget, event);
-+
-+  /* The widget that was originally to receive the event
-+   * handles motion hints, but the capturing widget might
-+   * not, so ensure we get further motion events.
-+   */
-+  if (return_val &&
-+      event->type == GDK_MOTION_NOTIFY &&
-+      event->motion.is_hint &&
-+      (gdk_window_get_events (event->any.window) &
-+       GDK_POINTER_MOTION_HINT_MASK) != 0)
-+    gdk_event_request_motions (&event->motion);
-+
-+  g_object_unref (widget);
-+
-+  return return_val;
-+}
-
- /**
-  * gtk_widget_send_expose:
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0010-gtk-don-t-let-insensitive-children-eat-scroll-events.patch b/bockbuild/mac-sdk/patches/gtk/0010-gtk-don-t-let-insensitive-children-eat-scroll-events.patch
deleted file mode 100644 (file)
index b9d2639..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-From c0447e2741b3f9c966e337e6c7baf34cb66b0591 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@lanedo.com>
-Date: Thu, 22 Nov 2012 13:37:58 +0100
-Subject: [PATCH 10/68] gtk: don't let insensitive children eat scroll events
- when bubbling down
-
-When event capturing is enabled, stop propagating scroll events
-at insensitive widgets, but don't handle them (don't return TRUE),
-so they can bubble up again and reach their handling widgets.
----
- gtk/gtkmain.c |   10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
-diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
-index 21345ed..5ca0993 100644
---- a/gtk/gtkmain.c
-+++ b/gtk/gtkmain.c
-@@ -2482,7 +2482,15 @@ propagate_event_down (GtkWidget *widget,
-       widget = (GtkWidget *)l->data;
-
-       if (!gtk_widget_is_sensitive (widget))
--        handled_event = TRUE;
-+        {
-+          /* stop propagating on SCROLL, but don't handle the event, so it
-+           * can propagate up again and reach its handling widget
-+           */
-+          if (event->type == GDK_SCROLL)
-+            break;
-+          else
-+            handled_event = TRUE;
-+        }
-       else
-         handled_event = _gtk_widget_captured_event (widget, event);
-     }
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0011-scrolledwindow-Kinetic-scrolling-support.patch b/bockbuild/mac-sdk/patches/gtk/0011-scrolledwindow-Kinetic-scrolling-support.patch
deleted file mode 100644 (file)
index 0a27ac3..0000000
+++ /dev/null
@@ -1,1333 +0,0 @@
-From 5001b3d9a9b6445ac199156c0f91f28c2112e262 Mon Sep 17 00:00:00 2001
-From: Carlos Garcia Campos <cgarcia@igalia.com>
-Date: Fri, 11 Feb 2011 13:43:56 +0100
-Subject: [PATCH 11/68] scrolledwindow: Kinetic scrolling support
-
-If the scrolling doesn't start after a long press, the scrolling is
-cancelled and events are handled by child widgets normally.
-
-When clicked again close to the previous button press location
-(assuming it had ~0 movement), the scrolled window will allow
-the child to handle the events immediately.
-
-This is so the user doesn't have to wait to the press-and-hold
-timeout in order to operate on the scrolledwindow child.
-
-The innermost scrolled window always gets to capture the events, all
-scrolled windows above it just let the event go through. Ideally
-reaching a limit on the innermost scrolled window would propagate
-the dragging up the hierarchy in order to keep following the touch
-coords, although that'd involve rather evil hacks just to cater
-for broken UIs.
-
-Conflicts:
-
-       docs/reference/gtk/gtk3-sections.txt
-       gtk/gtk.symbols
-       gtk/gtkscrolledwindow.c
-       gtk/gtkscrolledwindow.h
----
- gtk/gtk.symbols         |    4 +
- gtk/gtkscrolledwindow.c | 1061 ++++++++++++++++++++++++++++++++++++++++++++++-
- gtk/gtkscrolledwindow.h |    8 +
- 3 files changed, 1058 insertions(+), 15 deletions(-)
-
-diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
-index 6d5d5b6..d13ca41 100644
---- a/gtk/gtk.symbols
-+++ b/gtk/gtk.symbols
-@@ -3730,6 +3730,8 @@ gtk_scrollbar_get_type G_GNUC_CONST
- gtk_scrolled_window_add_with_viewport
- gtk_scrolled_window_get_hadjustment
- gtk_scrolled_window_get_hscrollbar
-+gtk_scrolled_window_get_kinetic_scrolling
-+gtk_scrolled_window_get_capture_button_press
- gtk_scrolled_window_get_placement
- gtk_scrolled_window_get_policy
- gtk_scrolled_window_get_shadow_type
-@@ -3738,6 +3740,8 @@ gtk_scrolled_window_get_vadjustment
- gtk_scrolled_window_get_vscrollbar
- gtk_scrolled_window_new
- gtk_scrolled_window_set_hadjustment
-+gtk_scrolled_window_set_kinetic_scrolling
-+gtk_scrolled_window_set_capture_button_press
- gtk_scrolled_window_set_placement
- gtk_scrolled_window_set_policy
- gtk_scrolled_window_set_shadow_type
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 2288b2f..694d20a 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -33,6 +33,8 @@
- #include "gtkwindow.h"
- #include "gtkprivate.h"
- #include "gtkintl.h"
-+#include "gtkmain.h"
-+#include "gtkdnd.h"
- #include "gtkalias.h"
-
-
-@@ -72,14 +74,58 @@
-  */
-
- #define DEFAULT_SCROLLBAR_SPACING  3
-+#define TOUCH_BYPASS_CAPTURED_THRESHOLD 30
-+
-+/* Kinetic scrolling */
-+#define FRAME_INTERVAL (1000 / 60)
-+#define MAX_OVERSHOOT_DISTANCE 50
-+#define FRICTION_DECELERATION 0.003
-+#define OVERSHOOT_INVERSE_ACCELERATION 0.003
-+#define RELEASE_EVENT_TIMEOUT 1000
-
- typedef struct {
--      gboolean window_placement_set;
--      GtkCornerType real_window_placement;
-+  gboolean window_placement_set;
-+  GtkCornerType real_window_placement;
-+
-+  /* Kinetic scrolling */
-+  GdkEvent              *button_press_event;
-+  GdkWindow             *overshoot_window;
-+  guint                  pointer_grabbed           : 1;
-+  guint                  kinetic_scrolling         : 1;
-+  guint                  capture_button_press      : 1;
-+  guint                  in_drag                   : 1;
-+  guint                  last_button_event_valid   : 1;
-+
-+  guint                  release_timeout_id;
-+  guint                  deceleration_id;
-+
-+  gdouble                last_button_event_x_root;
-+  gdouble                last_button_event_y_root;
-+
-+  gdouble                last_motion_event_x_root;
-+  gdouble                last_motion_event_y_root;
-+  guint32                last_motion_event_time;
-+
-+  gdouble                x_velocity;
-+  gdouble                y_velocity;
-+
-+  gdouble                unclamped_hadj_value;
-+  gdouble                unclamped_vadj_value;
- } GtkScrolledWindowPrivate;
-
- #define GTK_SCROLLED_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowPrivate))
-
-+typedef struct
-+{
-+  GtkScrolledWindow     *scrolled_window;
-+  gint64                 last_deceleration_time;
-+
-+  gdouble                x_velocity;
-+  gdouble                y_velocity;
-+  gdouble                vel_cosine;
-+  gdouble                vel_sine;
-+} KineticScrollData;
-+
- enum {
-   PROP_0,
-   PROP_HADJUSTMENT,
-@@ -88,7 +134,8 @@ enum {
-   PROP_VSCROLLBAR_POLICY,
-   PROP_WINDOW_PLACEMENT,
-   PROP_WINDOW_PLACEMENT_SET,
--  PROP_SHADOW_TYPE
-+  PROP_SHADOW_TYPE,
-+  PROP_KINETIC_SCROLLING
- };
-
- /* Signals */
-@@ -119,6 +166,8 @@ static void     gtk_scrolled_window_size_allocate      (GtkWidget         *widge
-                                                         GtkAllocation     *allocation);
- static gboolean gtk_scrolled_window_scroll_event       (GtkWidget         *widget,
-                                                         GdkEventScroll    *event);
-+static gboolean gtk_scrolled_window_captured_event     (GtkWidget         *widget,
-+                                                        GdkEvent          *event);
- static gboolean gtk_scrolled_window_focus              (GtkWidget         *widget,
-                                                         GtkDirectionType   direction);
- static void     gtk_scrolled_window_add                (GtkContainer      *container,
-@@ -139,9 +188,24 @@ static void     gtk_scrolled_window_relative_allocation(GtkWidget         *widge
-                                                         GtkAllocation     *allocation);
- static void     gtk_scrolled_window_adjustment_changed (GtkAdjustment     *adjustment,
-                                                         gpointer           data);
-+static void     gtk_scrolled_window_adjustment_value_changed (GtkAdjustment     *adjustment,
-+                                                              gpointer           data);
-
- static void  gtk_scrolled_window_update_real_placement (GtkScrolledWindow *scrolled_window);
-
-+static void  gtk_scrolled_window_realize               (GtkWidget           *widget);
-+static void  gtk_scrolled_window_unrealize             (GtkWidget           *widget);
-+static void  gtk_scrolled_window_map                   (GtkWidget           *widget);
-+static void  gtk_scrolled_window_unmap                 (GtkWidget           *widget);
-+static void  gtk_scrolled_window_grab_notify           (GtkWidget           *widget,
-+                                                        gboolean             was_grabbed);
-+
-+static gboolean _gtk_scrolled_window_set_adjustment_value      (GtkScrolledWindow *scrolled_window,
-+                                                                GtkAdjustment     *adjustment,
-+                                                                gdouble            value,
-+                                                                gboolean           allow_overshooting,
-+                                                                gboolean           snap_to_border);
-+
- static guint signals[LAST_SIGNAL] = {0};
-
- G_DEFINE_TYPE (GtkScrolledWindow, gtk_scrolled_window, GTK_TYPE_BIN)
-@@ -202,6 +266,11 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
-   widget_class->size_allocate = gtk_scrolled_window_size_allocate;
-   widget_class->scroll_event = gtk_scrolled_window_scroll_event;
-   widget_class->focus = gtk_scrolled_window_focus;
-+  widget_class->realize = gtk_scrolled_window_realize;
-+  widget_class->unrealize = gtk_scrolled_window_unrealize;
-+  widget_class->map = gtk_scrolled_window_map;
-+  widget_class->unmap = gtk_scrolled_window_unmap;
-+  widget_class->grab_notify = gtk_scrolled_window_grab_notify;
-
-   container_class->add = gtk_scrolled_window_add;
-   container_class->remove = gtk_scrolled_window_remove;
-@@ -301,6 +370,22 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
-                                                            GTK_PARAM_READABLE));
-
-   /**
-+   * GtkScrolledWindow:kinetic-scrolling:
-+   *
-+   * The kinetic scrolling behavior flags.
-+   *
-+   * Since: X.XX
-+   */
-+  g_object_class_install_property (gobject_class,
-+                                   PROP_KINETIC_SCROLLING,
-+                                   g_param_spec_boolean ("kinetic-scrolling",
-+                                                         P_("Kinetic Scrolling"),
-+                                                         P_("Kinetic scrolling mode."),
-+                                                         TRUE,
-+                                                         GTK_PARAM_READABLE |
-+                                                         GTK_PARAM_WRITABLE));
-+
-+  /**
-    * GtkScrolledWindow::scroll-child:
-    * @scrolled_window: a #GtkScrolledWindow
-    * @scroll: a #GtkScrollType describing how much to scroll
-@@ -371,6 +456,12 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
-   scrolled_window->focus_out = FALSE;
-   scrolled_window->window_placement = GTK_CORNER_TOP_LEFT;
-   gtk_scrolled_window_update_real_placement (scrolled_window);
-+
-+  if (g_getenv ("GTK2_KINETIC_SCROLLING"))
-+    {
-+      gtk_scrolled_window_set_kinetic_scrolling (scrolled_window, TRUE);
-+      gtk_scrolled_window_set_capture_button_press (scrolled_window, TRUE);
-+    }
- }
-
- /**
-@@ -458,8 +549,13 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-                   "changed",
-                   G_CALLBACK (gtk_scrolled_window_adjustment_changed),
-                   scrolled_window);
-+  g_signal_connect (hadjustment,
-+                  "value-changed",
-+                  G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
-+                  scrolled_window);
-   gtk_scrolled_window_adjustment_changed (hadjustment, scrolled_window);
--
-+  gtk_scrolled_window_adjustment_value_changed (hadjustment, scrolled_window);
-+
-   if (bin->child)
-     gtk_widget_set_scroll_adjustments (bin->child,
-                                      gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-@@ -519,7 +615,12 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-                   "changed",
-                   G_CALLBACK (gtk_scrolled_window_adjustment_changed),
-                   scrolled_window);
-+  g_signal_connect (vadjustment,
-+                  "value-changed",
-+                  G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
-+                  scrolled_window);
-   gtk_scrolled_window_adjustment_changed (vadjustment, scrolled_window);
-+  gtk_scrolled_window_adjustment_value_changed (vadjustment, scrolled_window);
-
-   if (bin->child)
-     gtk_widget_set_scroll_adjustments (bin->child,
-@@ -842,10 +943,135 @@ gtk_scrolled_window_get_shadow_type (GtkScrolledWindow *scrolled_window)
-   return scrolled_window->shadow_type;
- }
-
-+/**
-+ * gtk_scrolled_window_set_kinetic_scrolling:
-+ * @scrolled_window: a #GtkScrolledWindow
-+ * @kinetic_scrolling: %TRUE to enable kinetic scrolling
-+ *
-+ * Turns kinetic scrolling on or off.
-+ * Kinetic scrolling only applies to devices with source
-+ * %GDK_SOURCE_TOUCHSCREEN.
-+ *
-+ * Since: X.XX
-+ **/
-+void
-+gtk_scrolled_window_set_kinetic_scrolling (GtkScrolledWindow *scrolled_window,
-+                                           gboolean           kinetic_scrolling)
-+{
-+  GtkScrolledWindowPrivate *priv;
-+
-+  g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  if (priv->kinetic_scrolling == kinetic_scrolling)
-+    return;
-+
-+  priv->kinetic_scrolling = kinetic_scrolling;
-+  if (priv->kinetic_scrolling)
-+    {
-+      _gtk_widget_set_captured_event_handler (GTK_WIDGET (scrolled_window),
-+                                              gtk_scrolled_window_captured_event);
-+    }
-+  else
-+    {
-+      _gtk_widget_set_captured_event_handler (GTK_WIDGET (scrolled_window), NULL);
-+      if (priv->release_timeout_id)
-+        {
-+          g_source_remove (priv->release_timeout_id);
-+          priv->release_timeout_id = 0;
-+        }
-+      if (priv->deceleration_id)
-+        {
-+          g_source_remove (priv->deceleration_id);
-+          priv->deceleration_id = 0;
-+        }
-+    }
-+  g_object_notify (G_OBJECT (scrolled_window), "kinetic-scrolling");
-+}
-+
-+/**
-+ * gtk_scrolled_window_get_kinetic_scrolling:
-+ * @scrolled_window: a #GtkScrolledWindow
-+ *
-+ * Returns the specified kinetic scrolling behavior.
-+ *
-+ * Return value: the scrolling behavior flags.
-+ *
-+ * Since: X.XX
-+ */
-+gboolean
-+gtk_scrolled_window_get_kinetic_scrolling (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv;
-+
-+  g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window), FALSE);
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  return priv->kinetic_scrolling;
-+}
-+
-+/**
-+ * gtk_scrolled_window_set_capture_button_press:
-+ * @scrolled_window: a #GtkScrolledWindow
-+ * @capture_button_press: %TRUE to capture button presses
-+ *
-+ * Changes the behaviour of @scrolled_window wrt. to the initial
-+ * event that possibly starts kinetic scrolling. When @capture_button_press
-+ * is set to %TRUE, the event is captured by the scrolled window, and
-+ * then later replayed if it is meant to go to the child widget.
-+ *
-+ * This should be enabled if any child widgets perform non-reversible
-+ * actions on #GtkWidget::button-press-event. If they don't, and handle
-+ * additionally handle #GtkWidget::grab-broken-event, it might be better
-+ * to set @capture_button_press to %FALSE.
-+ *
-+ * This setting only has an effect if kinetic scrolling is enabled.
-+ *
-+ * Since: X.XX
-+ */
-+void
-+gtk_scrolled_window_set_capture_button_press (GtkScrolledWindow *scrolled_window,
-+                                              gboolean           capture_button_press)
-+{
-+  GtkScrolledWindowPrivate *priv;
-+
-+  g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  priv->capture_button_press = capture_button_press;
-+}
-+
-+/**
-+ * gtk_scrolled_window_get_capture_button_press:
-+ * @scrolled_window: a #GtkScrolledWindow
-+ *
-+ * Return whether button presses are captured during kinetic
-+ * scrolling. See gtk_scrolled_window_set_capture_button_press().
-+ *
-+ * Returns: %TRUE if button presses are captured during kinetic scrolling
-+ *
-+ * Since: X.XX
-+ */
-+gboolean
-+gtk_scrolled_window_get_capture_button_press (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv;
-+
-+  g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window), FALSE);
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  return priv->capture_button_press;
-+}
-+
-+
- static void
- gtk_scrolled_window_destroy (GtkObject *object)
- {
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (object);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
-   if (scrolled_window->hscrollbar)
-     {
-@@ -868,6 +1094,23 @@ gtk_scrolled_window_destroy (GtkObject *object)
-       scrolled_window->vscrollbar = NULL;
-     }
-
-+  if (priv->release_timeout_id)
-+    {
-+      g_source_remove (priv->release_timeout_id);
-+      priv->release_timeout_id = 0;
-+    }
-+  if (priv->deceleration_id)
-+    {
-+      g_source_remove (priv->deceleration_id);
-+      priv->deceleration_id = 0;
-+    }
-+
-+  if (priv->button_press_event)
-+    {
-+      gdk_event_free (priv->button_press_event);
-+      priv->button_press_event = NULL;
-+    }
-+
-   GTK_OBJECT_CLASS (gtk_scrolled_window_parent_class)->destroy (object);
- }
-
-@@ -912,6 +1155,10 @@ gtk_scrolled_window_set_property (GObject      *object,
-       gtk_scrolled_window_set_shadow_type (scrolled_window,
-                                          g_value_get_enum (value));
-       break;
-+    case PROP_KINETIC_SCROLLING:
-+      gtk_scrolled_window_set_kinetic_scrolling (scrolled_window,
-+                                                 g_value_get_boolean (value));
-+      break;
-     default:
-       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-       break;
-@@ -952,6 +1199,9 @@ gtk_scrolled_window_get_property (GObject    *object,
-     case PROP_SHADOW_TYPE:
-       g_value_set_enum (value, scrolled_window->shadow_type);
-       break;
-+    case PROP_KINETIC_SCROLLING:
-+      g_value_set_boolean (value, priv->kinetic_scrolling);
-+      break;
-     default:
-       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-       break;
-@@ -1019,10 +1269,10 @@ gtk_scrolled_window_paint (GtkWidget    *widget,
-                          GdkRectangle *area)
- {
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkAllocation relative_allocation;
-
-   if (scrolled_window->shadow_type != GTK_SHADOW_NONE)
-     {
--      GtkAllocation relative_allocation;
-       gboolean scrollbars_within_bevel;
-
-       gtk_widget_style_get (widget, "scrollbars-within-bevel", &scrollbars_within_bevel, NULL);
-@@ -1378,6 +1628,111 @@ gtk_scrolled_window_relative_allocation (GtkWidget     *widget,
-     }
- }
-
-+static gboolean
-+_gtk_scrolled_window_get_overshoot (GtkScrolledWindow *scrolled_window,
-+                                    gint              *overshoot_x,
-+                                    gint              *overshoot_y)
-+{
-+  GtkScrolledWindowPrivate *priv;
-+  GtkAdjustment *vadjustment, *hadjustment;
-+  gdouble lower, upper, x, y;
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  /* Vertical overshoot */
-+  vadjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+  lower = gtk_adjustment_get_lower (vadjustment);
-+  upper = gtk_adjustment_get_upper (vadjustment) -
-+    gtk_adjustment_get_page_size (vadjustment);
-+
-+  if (priv->unclamped_vadj_value < lower)
-+    y = priv->unclamped_vadj_value - lower;
-+  else if (priv->unclamped_vadj_value > upper)
-+    y = priv->unclamped_vadj_value - upper;
-+  else
-+    y = 0;
-+
-+  /* Horizontal overshoot */
-+  hadjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-+  lower = gtk_adjustment_get_lower (hadjustment);
-+  upper = gtk_adjustment_get_upper (hadjustment) -
-+    gtk_adjustment_get_page_size (hadjustment);
-+
-+  if (priv->unclamped_hadj_value < lower)
-+    x = priv->unclamped_hadj_value - lower;
-+  else if (priv->unclamped_hadj_value > upper)
-+    x = priv->unclamped_hadj_value - upper;
-+  else
-+    x = 0;
-+
-+  if (overshoot_x)
-+    *overshoot_x = x;
-+
-+  if (overshoot_y)
-+    *overshoot_y = y;
-+
-+  return (x != 0 || y != 0);
-+}
-+
-+static void
-+_gtk_scrolled_window_allocate_overshoot_window (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkAllocation window_allocation, relative_allocation, allocation;
-+  GtkScrolledWindowPrivate *priv;
-+  GtkWidget *widget = GTK_WIDGET (scrolled_window);
-+  gint overshoot_x, overshoot_y;
-+
-+  if (!gtk_widget_get_realized (widget))
-+    return;
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  gtk_widget_get_allocation (widget, &allocation);
-+  gtk_scrolled_window_relative_allocation (widget, &relative_allocation);
-+  _gtk_scrolled_window_get_overshoot (scrolled_window,
-+                                      &overshoot_x, &overshoot_y);
-+
-+  window_allocation = relative_allocation;
-+  window_allocation.x += allocation.x;
-+  window_allocation.y += allocation.y;
-+
-+  if (overshoot_x < 0)
-+    window_allocation.x += -overshoot_x;
-+
-+  if (overshoot_y < 0)
-+    window_allocation.y += -overshoot_y;
-+
-+  window_allocation.width -= ABS (overshoot_x);
-+  window_allocation.height -= ABS (overshoot_y);
-+
-+  gdk_window_move_resize (priv->overshoot_window,
-+                          window_allocation.x, window_allocation.y,
-+                          window_allocation.width, window_allocation.height);
-+}
-+
-+static void
-+gtk_scrolled_window_allocate_child (GtkScrolledWindow *swindow,
-+                                  GtkAllocation     *relative_allocation)
-+{
-+  GtkWidget     *widget = GTK_WIDGET (swindow), *child;
-+  GtkAllocation  allocation;
-+  GtkAllocation  child_allocation;
-+  gint           overshoot_x, overshoot_y;
-+
-+  child = gtk_bin_get_child (GTK_BIN (widget));
-+
-+  gtk_widget_get_allocation (widget, &allocation);
-+
-+  gtk_scrolled_window_relative_allocation (widget, relative_allocation);
-+  _gtk_scrolled_window_get_overshoot (swindow, &overshoot_x, &overshoot_y);
-+
-+  child_allocation.x = child_allocation.y = 0;
-+  child_allocation.width = relative_allocation->width;
-+  child_allocation.height = relative_allocation->height;
-+
-+  gtk_widget_size_allocate (child, &child_allocation);
-+}
-+
- static void
- gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-                                  GtkAllocation *allocation)
-@@ -1389,7 +1744,7 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   GtkAllocation child_allocation;
-   gboolean scrollbars_within_bevel;
-   gint scrollbar_spacing;
--
-+
-   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget));
-   g_return_if_fail (allocation != NULL);
-
-@@ -1420,17 +1775,9 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-
-       do
-       {
--        gtk_scrolled_window_relative_allocation (widget, &relative_allocation);
--
--        child_allocation.x = relative_allocation.x + allocation->x;
--        child_allocation.y = relative_allocation.y + allocation->y;
--        child_allocation.width = relative_allocation.width;
--        child_allocation.height = relative_allocation.height;
--
-         previous_hvis = scrolled_window->hscrollbar_visible;
-         previous_vvis = scrolled_window->vscrollbar_visible;
--
--        gtk_widget_size_allocate (bin->child, &child_allocation);
-+          gtk_scrolled_window_allocate_child (scrolled_window, &relative_allocation);
-
-         /* If, after the first iteration, the hscrollbar and the
-          * vscrollbar flip visiblity, then we need both.
-@@ -1442,6 +1789,8 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-             scrolled_window->hscrollbar_visible = TRUE;
-             scrolled_window->vscrollbar_visible = TRUE;
-
-+              gtk_scrolled_window_allocate_child (scrolled_window, &relative_allocation);
-+
-             /* a new resize is already queued at this point,
-              * so we will immediatedly get reinvoked
-              */
-@@ -1559,6 +1908,8 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-     }
-   else if (gtk_widget_get_visible (scrolled_window->vscrollbar))
-     gtk_widget_hide (scrolled_window->vscrollbar);
-+
-+  _gtk_scrolled_window_allocate_overshoot_window (scrolled_window);
- }
-
- static gboolean
-@@ -1639,6 +1990,555 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
- }
-
- static gboolean
-+_gtk_scrolled_window_set_adjustment_value (GtkScrolledWindow *scrolled_window,
-+                                           GtkAdjustment     *adjustment,
-+                                           gdouble            value,
-+                                           gboolean           allow_overshooting,
-+                                           gboolean           snap_to_border)
-+{
-+  GtkScrolledWindowPrivate *priv;
-+  gdouble lower, upper, *prev_value;
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  lower = gtk_adjustment_get_lower (adjustment);
-+  upper = gtk_adjustment_get_upper (adjustment) -
-+    gtk_adjustment_get_page_size (adjustment);
-+
-+  if (adjustment == gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)))
-+    prev_value = &priv->unclamped_hadj_value;
-+  else if (adjustment == gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)))
-+    prev_value = &priv->unclamped_vadj_value;
-+  else
-+    return FALSE;
-+
-+  if (snap_to_border)
-+    {
-+      if (*prev_value < 0 && value > 0)
-+        value = 0;
-+      else if (*prev_value > upper && value < upper)
-+        value = upper;
-+    }
-+
-+  if (allow_overshooting)
-+    {
-+      lower -= MAX_OVERSHOOT_DISTANCE;
-+      upper += MAX_OVERSHOOT_DISTANCE;
-+    }
-+
-+  *prev_value = CLAMP (value, lower, upper);
-+  gtk_adjustment_set_value (adjustment, *prev_value);
-+
-+  return (*prev_value != value);
-+}
-+
-+static gboolean
-+scrolled_window_deceleration_cb (gpointer user_data)
-+{
-+  KineticScrollData *data = user_data;
-+  GtkScrolledWindow *scrolled_window = data->scrolled_window;
-+  GtkScrolledWindowPrivate *priv;
-+  GtkAdjustment *hadjustment, *vadjustment;
-+  gint old_overshoot_x, old_overshoot_y, overshoot_x, overshoot_y;
-+  gdouble value;
-+  gint64 current_time;
-+  guint elapsed;
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  hadjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-+  vadjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+
-+  _gtk_scrolled_window_get_overshoot (scrolled_window,
-+                                      &old_overshoot_x, &old_overshoot_y);
-+
-+  current_time = g_get_monotonic_time ();
-+  elapsed = (current_time - data->last_deceleration_time) / 1000;
-+  data->last_deceleration_time = current_time;
-+
-+  if (hadjustment && scrolled_window->hscrollbar_visible)
-+    {
-+      value = priv->unclamped_hadj_value + (data->x_velocity * elapsed);
-+
-+      if (_gtk_scrolled_window_set_adjustment_value (scrolled_window,
-+                                                     hadjustment,
-+                                                     value, TRUE, TRUE))
-+        data->x_velocity = 0;
-+    }
-+  else
-+    data->x_velocity = 0;
-+
-+  if (vadjustment && scrolled_window->vscrollbar_visible)
-+    {
-+      value = priv->unclamped_vadj_value + (data->y_velocity * elapsed);
-+
-+      if (_gtk_scrolled_window_set_adjustment_value (scrolled_window,
-+                                                     vadjustment,
-+                                                     value, TRUE, TRUE))
-+        data->y_velocity = 0;
-+    }
-+  else
-+    data->y_velocity = 0;
-+
-+  _gtk_scrolled_window_get_overshoot (scrolled_window,
-+                                      &overshoot_x, &overshoot_y);
-+
-+  if (overshoot_x == 0)
-+    {
-+      if (old_overshoot_x != 0)
-+        {
-+          /* Overshooting finished snapping back */
-+          data->x_velocity = 0;
-+        }
-+      else if (data->x_velocity > 0)
-+        {
-+          data->x_velocity -= FRICTION_DECELERATION * elapsed * data->vel_sine;
-+          data->x_velocity = MAX (0, data->x_velocity);
-+        }
-+      else if (data->x_velocity < 0)
-+        {
-+          data->x_velocity += FRICTION_DECELERATION * elapsed * data->vel_sine;
-+          data->x_velocity = MIN (0, data->x_velocity);
-+        }
-+    }
-+  else if (overshoot_x < 0)
-+    data->x_velocity += OVERSHOOT_INVERSE_ACCELERATION * elapsed;
-+  else if (overshoot_x > 0)
-+    data->x_velocity -= OVERSHOOT_INVERSE_ACCELERATION * elapsed;
-+
-+  if (overshoot_y == 0)
-+    {
-+      if (old_overshoot_y != 0)
-+        {
-+          /* Overshooting finished snapping back */
-+          data->y_velocity = 0;
-+        }
-+      else if (data->y_velocity > 0)
-+        {
-+          data->y_velocity -= FRICTION_DECELERATION * elapsed * data->vel_cosine;
-+          data->y_velocity = MAX (0, data->y_velocity);
-+        }
-+      else if (data->y_velocity < 0)
-+        {
-+          data->y_velocity += FRICTION_DECELERATION * elapsed * data->vel_cosine;
-+          data->y_velocity = MIN (0, data->y_velocity);
-+        }
-+    }
-+  else if (overshoot_y < 0)
-+    data->y_velocity += OVERSHOOT_INVERSE_ACCELERATION * elapsed;
-+  else if (overshoot_y > 0)
-+    data->y_velocity -= OVERSHOOT_INVERSE_ACCELERATION * elapsed;
-+
-+  if (old_overshoot_x != overshoot_x ||
-+      old_overshoot_y != overshoot_y)
-+    _gtk_scrolled_window_allocate_overshoot_window (scrolled_window);
-+
-+  if (overshoot_x != 0 || overshoot_y != 0 ||
-+      data->x_velocity != 0 || data->y_velocity != 0)
-+    return TRUE;
-+  else
-+    {
-+      priv->deceleration_id = 0;
-+      return FALSE;
-+    }
-+}
-+
-+static void
-+gtk_scrolled_window_cancel_deceleration (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  if (priv->deceleration_id)
-+    {
-+      g_source_remove (priv->deceleration_id);
-+      priv->deceleration_id = 0;
-+    }
-+}
-+
-+static void
-+gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  KineticScrollData *data;
-+  gdouble angle;
-+
-+  data = g_new0 (KineticScrollData, 1);
-+  data->scrolled_window = scrolled_window;
-+  data->last_deceleration_time = g_get_monotonic_time ();
-+  data->x_velocity = priv->x_velocity;
-+  data->y_velocity = priv->y_velocity;
-+
-+  /* We use sine/cosine as a factor to deceleration x/y components
-+   * of the vector, so we care about the sign later.
-+   */
-+  angle = atan2 (ABS (data->x_velocity), ABS (data->y_velocity));
-+  data->vel_cosine = cos (angle);
-+  data->vel_sine = sin (angle);
-+
-+  priv->deceleration_id =
-+    gdk_threads_add_timeout_full (G_PRIORITY_DEFAULT,
-+                                  FRAME_INTERVAL,
-+                                  scrolled_window_deceleration_cb,
-+                                  data, (GDestroyNotify) g_free);
-+}
-+
-+static gboolean
-+gtk_scrolled_window_release_captured_event (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  /* Cancel the scrolling and send the button press
-+   * event to the child widget
-+   */
-+  if (!priv->button_press_event)
-+    return FALSE;
-+
-+  if (priv->pointer_grabbed)
-+    {
-+      gtk_grab_remove (GTK_WIDGET (scrolled_window));
-+      priv->pointer_grabbed = FALSE;
-+    }
-+
-+  if (priv->capture_button_press)
-+    {
-+      GtkWidget *event_widget;
-+
-+      event_widget = gtk_get_event_widget (priv->button_press_event);
-+
-+      if (!_gtk_propagate_captured_event (event_widget,
-+                                          priv->button_press_event,
-+                                          gtk_bin_get_child (GTK_BIN (scrolled_window))))
-+        gtk_propagate_event (event_widget, priv->button_press_event);
-+
-+      gdk_event_free (priv->button_press_event);
-+      priv->button_press_event = NULL;
-+    }
-+
-+  if (_gtk_scrolled_window_get_overshoot (scrolled_window, NULL, NULL))
-+    gtk_scrolled_window_start_deceleration (scrolled_window);
-+
-+  return FALSE;
-+}
-+
-+static gboolean
-+gtk_scrolled_window_calculate_velocity (GtkScrolledWindow *scrolled_window,
-+                                      GdkEvent          *event)
-+{
-+  GtkScrolledWindowPrivate *priv;
-+  gdouble x_root, y_root;
-+  guint32 _time;
-+
-+#define STILL_THRESHOLD 40
-+
-+  if (!gdk_event_get_root_coords (event, &x_root, &y_root))
-+    return FALSE;
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  _time = gdk_event_get_time (event);
-+
-+  if (priv->last_motion_event_x_root != x_root ||
-+      priv->last_motion_event_y_root != y_root ||
-+      ABS (_time - priv->last_motion_event_time) > STILL_THRESHOLD)
-+    {
-+      priv->x_velocity = (priv->last_motion_event_x_root - x_root) /
-+        (gdouble) (_time - priv->last_motion_event_time);
-+      priv->y_velocity = (priv->last_motion_event_y_root - y_root) /
-+        (gdouble) (_time - priv->last_motion_event_time);
-+    }
-+
-+  priv->last_motion_event_x_root = x_root;
-+  priv->last_motion_event_y_root = y_root;
-+  priv->last_motion_event_time = _time;
-+
-+#undef STILL_THRESHOLD
-+
-+  return TRUE;
-+}
-+
-+static gboolean
-+gtk_scrolled_window_captured_button_release (GtkWidget *widget,
-+                                             GdkEvent  *event)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv;
-+  GtkWidget *child;
-+  gboolean overshoot;
-+  gdouble x_root, y_root;
-+
-+  if (event->button.button != 1)
-+    return FALSE;
-+
-+  child = gtk_bin_get_child (GTK_BIN (widget));
-+  if (!child)
-+    return FALSE;
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  gtk_grab_remove (widget);
-+  priv->pointer_grabbed = FALSE;
-+
-+  if (priv->release_timeout_id)
-+    {
-+      g_source_remove (priv->release_timeout_id);
-+      priv->release_timeout_id = 0;
-+    }
-+
-+  overshoot = _gtk_scrolled_window_get_overshoot (scrolled_window, NULL, NULL);
-+
-+  if (priv->in_drag)
-+    gdk_pointer_ungrab (gdk_event_get_time (event));
-+  else
-+    {
-+      /* There hasn't been scrolling at all, so just let the
-+       * child widget handle the button press normally
-+       */
-+      gtk_scrolled_window_release_captured_event (scrolled_window);
-+
-+      if (!overshoot)
-+        return FALSE;
-+    }
-+  priv->in_drag = FALSE;
-+
-+  if (priv->button_press_event)
-+    {
-+      gdk_event_free (priv->button_press_event);
-+      priv->button_press_event = NULL;
-+    }
-+
-+  gtk_scrolled_window_calculate_velocity (scrolled_window, event);
-+
-+  /* Zero out vector components without a visible scrollbar */
-+  if (!scrolled_window->hscrollbar_visible)
-+    priv->x_velocity = 0;
-+  if (!scrolled_window->vscrollbar_visible)
-+    priv->y_velocity = 0;
-+
-+  if (priv->x_velocity != 0 || priv->y_velocity != 0 || overshoot)
-+    {
-+      gtk_scrolled_window_start_deceleration (scrolled_window);
-+      priv->x_velocity = priv->y_velocity = 0;
-+      priv->last_button_event_valid = FALSE;
-+    }
-+  else
-+    {
-+      gdk_event_get_root_coords (event, &x_root, &y_root);
-+      priv->last_button_event_x_root = x_root;
-+      priv->last_button_event_y_root = y_root;
-+      priv->last_button_event_valid = TRUE;
-+    }
-+
-+  if (priv->capture_button_press)
-+    return TRUE;
-+  else
-+    return FALSE;
-+}
-+
-+static gboolean
-+gtk_scrolled_window_captured_motion_notify (GtkWidget *widget,
-+                                            GdkEvent  *event)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv;
-+  gint old_overshoot_x, old_overshoot_y;
-+  gint new_overshoot_x, new_overshoot_y;
-+  GtkWidget *child;
-+  GtkAdjustment *hadjustment;
-+  GtkAdjustment *vadjustment;
-+  gdouble dx, dy;
-+  GdkModifierType state;
-+  gdouble x_root, y_root;
-+
-+  gdk_event_get_state (event, &state);
-+  if (!(state & GDK_BUTTON1_MASK))
-+    return FALSE;
-+
-+  child = gtk_bin_get_child (GTK_BIN (widget));
-+  if (!child)
-+    return FALSE;
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  /* Check if we've passed the drag threshold */
-+  gdk_event_get_root_coords (event, &x_root, &y_root);
-+  if (!priv->in_drag)
-+    {
-+      if (gtk_drag_check_threshold (widget,
-+                                    priv->last_button_event_x_root,
-+                                    priv->last_button_event_y_root,
-+                                    x_root, y_root))
-+        {
-+          if (priv->release_timeout_id)
-+            {
-+              g_source_remove (priv->release_timeout_id);
-+              priv->release_timeout_id = 0;
-+            }
-+
-+          priv->last_button_event_valid = FALSE;
-+          priv->in_drag = TRUE;
-+        }
-+      else
-+        return TRUE;
-+    }
-+
-+  gdk_pointer_grab (gtk_widget_get_window (widget),
-+                    TRUE,
-+                    GDK_BUTTON_RELEASE_MASK | GDK_BUTTON1_MOTION_MASK,
-+                    NULL, NULL,
-+                    gdk_event_get_time (event));
-+
-+  priv->last_button_event_valid = FALSE;
-+
-+  if (priv->button_press_event)
-+    {
-+      gdk_event_free (priv->button_press_event);
-+      priv->button_press_event = NULL;
-+    }
-+
-+  _gtk_scrolled_window_get_overshoot (scrolled_window,
-+                                      &old_overshoot_x, &old_overshoot_y);
-+
-+  hadjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-+  if (hadjustment && scrolled_window->hscrollbar_visible)
-+    {
-+      dx = (priv->last_motion_event_x_root - x_root) + priv->unclamped_hadj_value;
-+      _gtk_scrolled_window_set_adjustment_value (scrolled_window, hadjustment,
-+                                                 dx, TRUE, FALSE);
-+    }
-+
-+  vadjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+  if (vadjustment && scrolled_window->vscrollbar_visible)
-+    {
-+      dy = (priv->last_motion_event_y_root - y_root) + priv->unclamped_vadj_value;
-+      _gtk_scrolled_window_set_adjustment_value (scrolled_window, vadjustment,
-+                                                 dy, TRUE, FALSE);
-+    }
-+
-+  _gtk_scrolled_window_get_overshoot (scrolled_window,
-+                                      &new_overshoot_x, &new_overshoot_y);
-+
-+  if (old_overshoot_x != new_overshoot_x ||
-+      old_overshoot_y != new_overshoot_y)
-+    _gtk_scrolled_window_allocate_overshoot_window (scrolled_window);
-+
-+  gtk_scrolled_window_calculate_velocity (scrolled_window, event);
-+
-+  return TRUE;
-+}
-+
-+static gboolean
-+gtk_scrolled_window_captured_button_press (GtkWidget *widget,
-+                                           GdkEvent  *event)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv;
-+  GtkWidget *child;
-+  GtkWidget *event_widget;
-+  gdouble x_root, y_root;
-+
-+  /* If scrollbars are not visible, we don't do kinetic scrolling */
-+  if (!scrolled_window->vscrollbar_visible &&
-+      !scrolled_window->hscrollbar_visible)
-+    return FALSE;
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  event_widget = gtk_get_event_widget (event);
-+
-+  /* If there's another scrolled window between the widget
-+   * receiving the event and this capturing scrolled window,
-+   * let it handle the events.
-+   */
-+  if (widget != gtk_widget_get_ancestor (event_widget, GTK_TYPE_SCROLLED_WINDOW))
-+    return FALSE;
-+
-+  /* Check whether the button press is close to the previous one,
-+   * take that as a shortcut to get the child widget handle events
-+   */
-+  gdk_event_get_root_coords (event, &x_root, &y_root);
-+  if (priv->last_button_event_valid &&
-+      ABS (x_root - priv->last_button_event_x_root) < TOUCH_BYPASS_CAPTURED_THRESHOLD &&
-+      ABS (y_root - priv->last_button_event_y_root) < TOUCH_BYPASS_CAPTURED_THRESHOLD)
-+    {
-+      priv->last_button_event_valid = FALSE;
-+      return FALSE;
-+    }
-+
-+  priv->last_button_event_x_root = priv->last_motion_event_x_root = x_root;
-+  priv->last_button_event_y_root = priv->last_motion_event_y_root = y_root;
-+  priv->last_motion_event_time = gdk_event_get_time (event);
-+  priv->last_button_event_valid = TRUE;
-+
-+  if (event->button.button != 1)
-+    return FALSE;
-+
-+  child = gtk_bin_get_child (GTK_BIN (widget));
-+  if (!child)
-+    return FALSE;
-+
-+  if (scrolled_window->hscrollbar == event_widget ||
-+      scrolled_window->vscrollbar == event_widget)
-+    return FALSE;
-+
-+  priv->pointer_grabbed = TRUE;
-+  gtk_grab_add (widget);
-+
-+  gtk_scrolled_window_cancel_deceleration (scrolled_window);
-+
-+  /* Only set the timeout if we're going to store an event */
-+  if (priv->capture_button_press)
-+    priv->release_timeout_id =
-+      gdk_threads_add_timeout (RELEASE_EVENT_TIMEOUT,
-+                               (GSourceFunc) gtk_scrolled_window_release_captured_event,
-+                               scrolled_window);
-+
-+  priv->in_drag = FALSE;
-+
-+  if (priv->capture_button_press)
-+    {
-+      /* Store the button press event in
-+       * case we need to propagate it later
-+       */
-+      priv->button_press_event = gdk_event_copy (event);
-+      return TRUE;
-+    }
-+  else
-+    return FALSE;
-+}
-+
-+static gboolean
-+gtk_scrolled_window_captured_event (GtkWidget *widget,
-+                                    GdkEvent  *event)
-+{
-+  gboolean retval = FALSE;
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (widget);
-+
-+  switch (event->type)
-+    {
-+    case GDK_BUTTON_PRESS:
-+      retval = gtk_scrolled_window_captured_button_press (widget, event);
-+      break;
-+    case GDK_BUTTON_RELEASE:
-+      if (priv->pointer_grabbed)
-+        retval = gtk_scrolled_window_captured_button_release (widget, event);
-+      else
-+        priv->last_button_event_valid = FALSE;
-+      break;
-+    case GDK_MOTION_NOTIFY:
-+      if (priv->pointer_grabbed)
-+        retval = gtk_scrolled_window_captured_motion_notify (widget, event);
-+      break;
-+    case GDK_LEAVE_NOTIFY:
-+    case GDK_ENTER_NOTIFY:
-+      if (priv->in_drag &&
-+          event->crossing.mode != GDK_CROSSING_GRAB)
-+        retval = TRUE;
-+      break;
-+    default:
-+      break;
-+    }
-+
-+  return retval;
-+}
-+
-+static gboolean
- gtk_scrolled_window_focus (GtkWidget        *widget,
-                          GtkDirectionType  direction)
- {
-@@ -1714,17 +2614,42 @@ gtk_scrolled_window_adjustment_changed (GtkAdjustment *adjustment,
- }
-
- static void
-+gtk_scrolled_window_adjustment_value_changed (GtkAdjustment *adjustment,
-+                                              gpointer       user_data)
-+{
-+  GtkScrolledWindow *scrolled_window = user_data;
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  /* Allow overshooting for kinetic scrolling operations */
-+  if (priv->pointer_grabbed || priv->deceleration_id)
-+    return;
-+
-+  /* Ensure GtkAdjustment and unclamped values are in sync */
-+  if (scrolled_window->vscrollbar &&
-+      adjustment == gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)))
-+    priv->unclamped_vadj_value = gtk_adjustment_get_value (adjustment);
-+  else if (scrolled_window->hscrollbar &&
-+           adjustment == gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)))
-+    priv->unclamped_hadj_value = gtk_adjustment_get_value (adjustment);
-+}
-+
-+static void
- gtk_scrolled_window_add (GtkContainer *container,
-                        GtkWidget    *child)
- {
-   GtkScrolledWindow *scrolled_window;
-+  GtkScrolledWindowPrivate *priv;
-   GtkBin *bin;
-
-   bin = GTK_BIN (container);
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (container);
-   g_return_if_fail (bin->child == NULL);
-
-   scrolled_window = GTK_SCROLLED_WINDOW (container);
-
-+  if (gtk_widget_get_realized (GTK_WIDGET (bin)))
-+    gtk_widget_set_parent_window (child, priv->overshoot_window);
-+
-   bin->child = child;
-   gtk_widget_set_parent (child, GTK_WIDGET (bin));
-
-@@ -1837,5 +2762,111 @@ _gtk_scrolled_window_get_scrollbar_spacing (GtkScrolledWindow *scrolled_window)
-     }
- }
-
-+static void
-+gtk_scrolled_window_realize (GtkWidget *widget)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  GtkAllocation allocation, relative_allocation;
-+  GdkWindowAttr attributes;
-+  GtkWidget *child_widget;
-+  gint attributes_mask;
-+
-+  gtk_widget_set_realized (widget, TRUE);
-+  gtk_widget_get_allocation (widget, &allocation);
-+  gtk_scrolled_window_relative_allocation (widget, &relative_allocation);
-+
-+  attributes.window_type = GDK_WINDOW_CHILD;
-+  attributes.x = allocation.x + relative_allocation.x;
-+  attributes.y = allocation.y + relative_allocation.y;
-+  attributes.width = relative_allocation.width;
-+  attributes.height = relative_allocation.height;
-+  attributes.wclass = GDK_INPUT_OUTPUT;
-+  attributes.visual = gtk_widget_get_visual (widget);
-+  attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK |
-+    GDK_BUTTON_MOTION_MASK;
-+
-+  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
-+
-+  priv->overshoot_window =
-+    gdk_window_new (gtk_widget_get_parent_window (widget),
-+                    &attributes, attributes_mask);
-+
-+  gdk_window_set_user_data (priv->overshoot_window, widget);
-+
-+  child_widget = gtk_bin_get_child (GTK_BIN (widget));
-+
-+  if (child_widget)
-+    gtk_widget_set_parent_window (child_widget,
-+                                  priv->overshoot_window);
-+
-+  GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->realize (widget);
-+}
-+
-+static void
-+gtk_scrolled_window_unrealize (GtkWidget *widget)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  gdk_window_set_user_data (priv->overshoot_window, NULL);
-+  gdk_window_destroy (priv->overshoot_window);
-+  priv->overshoot_window = NULL;
-+
-+  gtk_widget_set_realized (widget, FALSE);
-+
-+  GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->unrealize (widget);
-+}
-+
-+static void
-+gtk_scrolled_window_map (GtkWidget *widget)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  gdk_window_show (priv->overshoot_window);
-+
-+  GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->map (widget);
-+}
-+
-+static void
-+gtk_scrolled_window_unmap (GtkWidget *widget)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  gdk_window_hide (priv->overshoot_window);
-+
-+  GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->unmap (widget);
-+}
-+
-+static void
-+gtk_scrolled_window_grab_notify (GtkWidget *widget,
-+                                 gboolean   was_grabbed)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  if (priv->pointer_grabbed && !was_grabbed)
-+    {
-+      gdk_pointer_ungrab (gtk_get_current_event_time ());
-+      priv->pointer_grabbed = FALSE;
-+      priv->in_drag = FALSE;
-+
-+      if (priv->release_timeout_id)
-+        {
-+          g_source_remove (priv->release_timeout_id);
-+          priv->release_timeout_id = 0;
-+        }
-+
-+      if (_gtk_scrolled_window_get_overshoot (scrolled_window, NULL, NULL))
-+        gtk_scrolled_window_start_deceleration (scrolled_window);
-+      else
-+        gtk_scrolled_window_cancel_deceleration (scrolled_window);
-+
-+      priv->last_button_event_valid = FALSE;
-+    }
-+}
-+
- #define __GTK_SCROLLED_WINDOW_C__
- #include "gtkaliasdef.c"
-diff --git a/gtk/gtkscrolledwindow.h b/gtk/gtkscrolledwindow.h
-index 5407547..1f555e0 100644
---- a/gtk/gtkscrolledwindow.h
-+++ b/gtk/gtkscrolledwindow.h
-@@ -127,6 +127,14 @@ GtkShadowType  gtk_scrolled_window_get_shadow_type   (GtkScrolledWindow *scrolle
- void         gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window,
-                                                     GtkWidget         *child);
-
-+void           gtk_scrolled_window_set_kinetic_scrolling  (GtkScrolledWindow        *scrolled_window,
-+                                                           gboolean                  kinetic_scrolling);
-+gboolean       gtk_scrolled_window_get_kinetic_scrolling  (GtkScrolledWindow        *scrolled_window);
-+
-+void           gtk_scrolled_window_set_capture_button_press (GtkScrolledWindow      *scrolled_window,
-+                                                             gboolean                capture_button_press);
-+gboolean       gtk_scrolled_window_get_capture_button_press (GtkScrolledWindow      *scrolled_window);
-+
- gint _gtk_scrolled_window_get_scrollbar_spacing (GtkScrolledWindow *scrolled_window);
-
-
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0012-gtk-paint-to-the-right-windows-in-gtk_scrolled_windo.patch b/bockbuild/mac-sdk/patches/gtk/0012-gtk-paint-to-the-right-windows-in-gtk_scrolled_windo.patch
deleted file mode 100644 (file)
index 178af07..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-From f8b99185c4fe6a281f2075c5780bc71b35b46de9 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Thu, 14 Jun 2012 09:27:09 +0200
-Subject: [PATCH 12/68] gtk: paint to the right windows in
- gtk_scrolled_window_expose()
-
-so we don't paint everything twice.
----
- gtk/gtkscrolledwindow.c |    9 ++++++---
- 1 file changed, 6 insertions(+), 3 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 694d20a..821981f 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -1310,11 +1310,14 @@ static gboolean
- gtk_scrolled_window_expose (GtkWidget      *widget,
-                           GdkEventExpose *event)
- {
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (widget);
-+
-   if (gtk_widget_is_drawable (widget))
-     {
--      gtk_scrolled_window_paint (widget, &event->area);
--
--      GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->expose_event (widget, event);
-+      if (event->window == priv->overshoot_window)
-+        GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->expose_event (widget, event);
-+      else
-+        gtk_scrolled_window_paint (widget, &event->area);
-     }
-
-   return FALSE;
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0013-GtkScrolledWindow-add-overlay-scrollbars.patch b/bockbuild/mac-sdk/patches/gtk/0013-GtkScrolledWindow-add-overlay-scrollbars.patch
deleted file mode 100644 (file)
index 0a9b34c..0000000
+++ /dev/null
@@ -1,2097 +0,0 @@
-From b7ce8de6d7b964eef99aa46ee90a09605acdd5ed Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 1 Jun 2012 13:08:26 +0200
-Subject: [PATCH 13/68] GtkScrolledWindow: add overlay scrollbars
-
-based on code from gnome-builder by Christian Hergert.
----
- gtk/Makefile.am         |    4 +
- gtk/gb-animation.c      |  998 +++++++++++++++++++++++++++++++++++++++++++++++
- gtk/gb-animation.h      |   87 +++++
- gtk/gb-frame-source.c   |  134 +++++++
- gtk/gb-frame-source.h   |   32 ++
- gtk/gtkscrolledwindow.c |  577 +++++++++++++++++++++++++--
- 6 files changed, 1806 insertions(+), 26 deletions(-)
- create mode 100644 gtk/gb-animation.c
- create mode 100644 gtk/gb-animation.h
- create mode 100644 gtk/gb-frame-source.c
- create mode 100644 gtk/gb-frame-source.h
-
-diff --git a/gtk/Makefile.am b/gtk/Makefile.am
-index 7fbe429..31dfd19 100644
---- a/gtk/Makefile.am
-+++ b/gtk/Makefile.am
-@@ -361,6 +361,8 @@ gtk_semi_private_h_sources =    \
-
- # GTK+ header files that don't get installed
- gtk_private_h_sources =               \
-+      gb-animation.h          \
-+      gb-frame-source.h       \
-       gtkquery.h              \
-       gtksearchengine.h       \
-       gtksearchenginesimple.h \
-@@ -411,6 +413,8 @@ gtk_private_h_sources =            \
-
- # GTK+ C sources to build the library from
- gtk_base_c_sources =            \
-+      gb-animation.c          \
-+      gb-frame-source.c       \
-       gtkquery.c              \
-       gtksearchengine.c       \
-       gtksearchenginesimple.c \
-diff --git a/gtk/gb-animation.c b/gtk/gb-animation.c
-new file mode 100644
-index 0000000..9452b4a
---- /dev/null
-+++ b/gtk/gb-animation.c
-@@ -0,0 +1,998 @@
-+/* gb-animation.c
-+ *
-+ * Copyright (C) 2010 Christian Hergert <christian@hergert.me>
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public icense along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-+ */
-+
-+#include <glib/gi18n.h>
-+#include <gobject/gvaluecollector.h>
-+#include <gtk/gtk.h>
-+#include <string.h>
-+
-+#include "gb-animation.h"
-+#include "gb-frame-source.h"
-+
-+G_DEFINE_TYPE(GbAnimation, _gb_animation, G_TYPE_INITIALLY_UNOWNED)
-+
-+typedef gdouble (*AlphaFunc) (gdouble       offset);
-+typedef void    (*TweenFunc) (const GValue *begin,
-+                              const GValue *end,
-+                              GValue       *value,
-+                              gdouble       offset);
-+
-+typedef struct
-+{
-+   gboolean    is_child; /* Does GParamSpec belong to parent widget */
-+   GParamSpec *pspec;    /* GParamSpec of target property */
-+   GValue      begin;    /* Begin value in animation */
-+   GValue      end;      /* End value in animation */
-+} Tween;
-+
-+
-+struct _GbAnimationPrivate
-+{
-+   gpointer  target;        /* Target object to animate */
-+   guint64   begin_msec;    /* Time in which animation started */
-+   guint     duration_msec; /* Duration of animation */
-+   guint     mode;          /* Tween mode */
-+   guint     tween_handler; /* GSource performing tweens */
-+   GArray   *tweens;        /* Array of tweens to perform */
-+   guint     frame_rate;    /* The frame-rate to use */
-+   guint     frame_count;   /* Counter for debugging frames rendered */
-+};
-+
-+
-+enum
-+{
-+   PROP_0,
-+   PROP_DURATION,
-+   PROP_FRAME_RATE,
-+   PROP_MODE,
-+   PROP_TARGET,
-+   LAST_PROP
-+};
-+
-+
-+enum
-+{
-+   TICK,
-+   LAST_SIGNAL
-+};
-+
-+
-+/*
-+ * Helper macros.
-+ */
-+#define TIMEVAL_TO_MSEC(t) (((t).tv_sec * 1000UL) + ((t).tv_usec / 1000UL))
-+#define LAST_FUNDAMENTAL 64
-+#define TWEEN(type)                                         \
-+    static void                                             \
-+    tween_##type (const GValue *begin,                      \
-+                  const GValue *end,                        \
-+                  GValue *value,                            \
-+                  gdouble offset)                           \
-+    {                                                       \
-+      g##type x = g_value_get_##type(begin);              \
-+      g##type y = g_value_get_##type(end);                \
-+      g_value_set_##type(value, x + ((y - x) * offset));  \
-+    }
-+
-+
-+/*
-+ * Globals.
-+ */
-+static AlphaFunc   gAlphaFuncs[GB_ANIMATION_LAST];
-+static gboolean    gDebug;
-+static GParamSpec *gParamSpecs[LAST_PROP];
-+static guint       gSignals[LAST_SIGNAL];
-+static TweenFunc   gTweenFuncs[LAST_FUNDAMENTAL];
-+
-+
-+/*
-+ * Tweeners for basic types.
-+ */
-+TWEEN(int);
-+TWEEN(uint);
-+TWEEN(long);
-+TWEEN(ulong);
-+TWEEN(float);
-+TWEEN(double);
-+
-+
-+/**
-+ * _gb_animation_alpha_ease_in_cubic:
-+ * @offset: (in): The position within the animation; 0.0 to 1.0.
-+ *
-+ * An alpha function to transform the offset within the animation.
-+ * @GB_ANIMATION_CUBIC means the valu ewill be transformed into
-+ * cubic acceleration (x * x * x).
-+ */
-+static gdouble
-+_gb_animation_alpha_ease_in_cubic (gdouble offset)
-+{
-+   return offset * offset * offset;
-+}
-+
-+
-+/**
-+ * _gb_animation_alpha_linear:
-+ * @offset: (in): The position within the animation; 0.0 to 1.0.
-+ *
-+ * An alpha function to transform the offset within the animation.
-+ * @GB_ANIMATION_LINEAR means no tranformation will be made.
-+ *
-+ * Returns: @offset.
-+ * Side effects: None.
-+ */
-+static gdouble
-+_gb_animation_alpha_linear (gdouble offset)
-+{
-+   return offset;
-+}
-+
-+
-+/**
-+ * _gb_animation_alpha_ease_in_quad:
-+ * @offset: (in): The position within the animation; 0.0 to 1.0.
-+ *
-+ * An alpha function to transform the offset within the animation.
-+ * @GB_ANIMATION_EASE_IN_QUAD means that the value will be transformed
-+ * into a quadratic acceleration.
-+ *
-+ * Returns: A tranformation of @offset.
-+ * Side effects: None.
-+ */
-+static gdouble
-+_gb_animation_alpha_ease_in_quad (gdouble offset)
-+{
-+   return offset * offset;
-+}
-+
-+
-+/**
-+ * _gb_animation_alpha_ease_out_quad:
-+ * @offset: (in): The position within the animation; 0.0 to 1.0.
-+ *
-+ * An alpha function to transform the offset within the animation.
-+ * @GB_ANIMATION_EASE_OUT_QUAD means that the value will be transformed
-+ * into a quadratic deceleration.
-+ *
-+ * Returns: A tranformation of @offset.
-+ * Side effects: None.
-+ */
-+static gdouble
-+_gb_animation_alpha_ease_out_quad (gdouble offset)
-+{
-+   return -1.0 * offset * (offset - 2.0);
-+}
-+
-+
-+/**
-+ * _gb_animation_alpha_ease_in_out_quad:
-+ * @offset: (in): The position within the animation; 0.0 to 1.0.
-+ *
-+ * An alpha function to transform the offset within the animation.
-+ * @GB_ANIMATION_EASE_IN_OUT_QUAD means that the value will be transformed
-+ * into a quadratic acceleration for the first half, and quadratic
-+ * deceleration the second half.
-+ *
-+ * Returns: A tranformation of @offset.
-+ * Side effects: None.
-+ */
-+static gdouble
-+_gb_animation_alpha_ease_in_out_quad (gdouble offset)
-+{
-+   offset *= 2.0;
-+   if (offset < 1.0) {
-+      return 0.5 * offset * offset;
-+   }
-+   offset -= 1.0;
-+   return -0.5 * (offset * (offset - 2.0) - 1.0);
-+}
-+
-+
-+/**
-+ * _gb_animation_load_begin_values:
-+ * @animation: (in): A #GbAnimation.
-+ *
-+ * Load the begin values for all the properties we are about to
-+ * animate.
-+ *
-+ * Returns: None.
-+ * Side effects: None.
-+ */
-+static void
-+_gb_animation_load_begin_values (GbAnimation *animation)
-+{
-+   GbAnimationPrivate *priv;
-+   GtkContainer *container;
-+   Tween *tween;
-+   gint i;
-+
-+   g_return_if_fail(GB_IS_ANIMATION(animation));
-+
-+   priv = animation->priv;
-+
-+   for (i = 0; i < priv->tweens->len; i++) {
-+      tween = &g_array_index(priv->tweens, Tween, i);
-+      g_value_reset(&tween->begin);
-+      if (tween->is_child) {
-+         container = GTK_CONTAINER(gtk_widget_get_parent(priv->target));
-+         gtk_container_child_get_property(container, priv->target,
-+                                          tween->pspec->name,
-+                                          &tween->begin);
-+      } else {
-+         g_object_get_property(priv->target, tween->pspec->name,
-+                               &tween->begin);
-+      }
-+   }
-+}
-+
-+
-+/**
-+ * _gb_animation_unload_begin_values:
-+ * @animation: (in): A #GbAnimation.
-+ *
-+ * Unloads the begin values for the animation. This might be particularly
-+ * useful once we support pointer types.
-+ *
-+ * Returns: None.
-+ * Side effects: None.
-+ */
-+static void
-+_gb_animation_unload_begin_values (GbAnimation *animation)
-+{
-+   GbAnimationPrivate *priv;
-+   Tween *tween;
-+   gint i;
-+
-+   g_return_if_fail(GB_IS_ANIMATION(animation));
-+
-+   priv = animation->priv;
-+
-+   for (i = 0; i < priv->tweens->len; i++) {
-+      tween = &g_array_index(priv->tweens, Tween, i);
-+      g_value_reset(&tween->begin);
-+   }
-+}
-+
-+
-+/**
-+ * _gb_animation_get_offset:
-+ * @animation: (in): A #GbAnimation.
-+ *
-+ * Retrieves the position within the animation from 0.0 to 1.0. This
-+ * value is calculated using the msec of the beginning of the animation
-+ * and the current time.
-+ *
-+ * Returns: The offset of the animation from 0.0 to 1.0.
-+ * Side effects: None.
-+ */
-+static gdouble
-+_gb_animation_get_offset (GbAnimation *animation)
-+{
-+   GbAnimationPrivate *priv;
-+   GTimeVal now;
-+   guint64 msec;
-+   gdouble offset;
-+
-+   g_return_val_if_fail(GB_IS_ANIMATION(animation), 0.0);
-+
-+   priv = animation->priv;
-+
-+   g_get_current_time(&now);
-+   msec = TIMEVAL_TO_MSEC(now);
-+   offset = (gdouble)(msec - priv->begin_msec)
-+          / (gdouble)priv->duration_msec;
-+   return CLAMP(offset, 0.0, 1.0);
-+}
-+
-+
-+/**
-+ * _gb_animation_update_property:
-+ * @animation: (in): A #GbAnimation.
-+ * @target: (in): A #GObject.
-+ * @tween: (in): a #Tween containing the property.
-+ * @value: (in) The new value for the property.
-+ *
-+ * Updates the value of a property on an object using @value.
-+ *
-+ * Returns: None.
-+ * Side effects: The property of @target is updated.
-+ */
-+static void
-+_gb_animation_update_property (GbAnimation *animation,
-+                               gpointer      target,
-+                               Tween        *tween,
-+                               const GValue *value)
-+{
-+   g_object_set_property(target, tween->pspec->name, value);
-+}
-+
-+
-+/**
-+ * _gb_animation_update_child_property:
-+ * @animation: (in): A #GbAnimation.
-+ * @target: (in): A #GObject.
-+ * @tween: (in): A #Tween containing the property.
-+ * @value: (in): The new value for the property.
-+ *
-+ * Updates the value of the parent widget of the target to @value.
-+ *
-+ * Returns: None.
-+ * Side effects: The property of @target<!-- -->'s parent widget is updated.
-+ */
-+static void
-+_gb_animation_update_child_property (GbAnimation *animation,
-+                                     gpointer      target,
-+                                     Tween        *tween,
-+                                     const GValue *value)
-+{
-+   GtkWidget *parent = gtk_widget_get_parent(GTK_WIDGET(target));
-+   gtk_container_child_set_property(GTK_CONTAINER(parent), target,
-+                                    tween->pspec->name, value);
-+}
-+
-+
-+/**
-+ * _gb_animation_get_value_at_offset:
-+ * @animation: (in): A #GbAnimation.
-+ * @offset: (in): The offset in the animation from 0.0 to 1.0.
-+ * @tween: (in): A #Tween containing the property.
-+ * @value: (out): A #GValue in which to store the property.
-+ *
-+ * Retrieves a value for a particular position within the animation.
-+ *
-+ * Returns: None.
-+ * Side effects: None.
-+ */
-+static void
-+_gb_animation_get_value_at_offset (GbAnimation *animation,
-+                                   gdouble       offset,
-+                                   Tween        *tween,
-+                                   GValue       *value)
-+{
-+   g_return_if_fail(GB_IS_ANIMATION(animation));
-+   g_return_if_fail(offset >= 0.0);
-+   g_return_if_fail(offset <= 1.0);
-+   g_return_if_fail(tween != NULL);
-+   g_return_if_fail(value != NULL);
-+   g_return_if_fail(value->g_type == tween->pspec->value_type);
-+
-+   if (value->g_type < LAST_FUNDAMENTAL) {
-+      /*
-+       * If you hit the following assertion, you need to add a function
-+       * to create the new value at the given offset.
-+       */
-+      g_assert(gTweenFuncs[value->g_type]);
-+      gTweenFuncs[value->g_type](&tween->begin, &tween->end, value, offset);
-+   } else {
-+      /*
-+       * TODO: Support complex transitions.
-+       */
-+      if (offset >= 1.0) {
-+         g_value_copy(&tween->end, value);
-+      }
-+   }
-+}
-+
-+
-+/**
-+ * _gb_animation_tick:
-+ * @animation: (in): A #GbAnimation.
-+ *
-+ * Moves the object properties to the next position in the animation.
-+ *
-+ * Returns: %TRUE if the animation has not completed; otherwise %FALSE.
-+ * Side effects: None.
-+ */
-+static gboolean
-+_gb_animation_tick (GbAnimation *animation)
-+{
-+   GbAnimationPrivate *priv;
-+   GdkWindow *window;
-+   gdouble offset;
-+   gdouble alpha;
-+   GValue value = { 0 };
-+   Tween *tween;
-+   gint i;
-+
-+   g_return_val_if_fail(GB_IS_ANIMATION(animation), FALSE);
-+
-+   priv = animation->priv;
-+
-+   priv->frame_count++;
-+   offset = _gb_animation_get_offset(animation);
-+   alpha = gAlphaFuncs[priv->mode](offset);
-+
-+   /*
-+    * Update property values.
-+    */
-+   for (i = 0; i < priv->tweens->len; i++) {
-+      tween = &g_array_index(priv->tweens, Tween, i);
-+      g_value_init(&value, tween->pspec->value_type);
-+      _gb_animation_get_value_at_offset(animation, alpha, tween, &value);
-+      if (!tween->is_child) {
-+         _gb_animation_update_property(animation, priv->target,
-+                                       tween, &value);
-+      } else {
-+         _gb_animation_update_child_property(animation, priv->target,
-+                                             tween, &value);
-+      }
-+      g_value_unset(&value);
-+   }
-+
-+   /*
-+    * Notify anyone interested in the tick signal.
-+    */
-+   g_signal_emit(animation, gSignals[TICK], 0);
-+
-+   /*
-+    * Flush any outstanding events to the graphics server (in the case of X).
-+    */
-+   if (GTK_IS_WIDGET(priv->target)) {
-+      if ((window = gtk_widget_get_window(GTK_WIDGET(priv->target)))) {
-+         gdk_window_flush(window);
-+      }
-+   }
-+
-+   return (offset < 1.0);
-+}
-+
-+
-+/**
-+ * _gb_animation_timeout:
-+ * @data: (in): A #GbAnimation.
-+ *
-+ * Timeout from the main loop to move to the next step of the animation.
-+ *
-+ * Returns: %TRUE until the animation has completed; otherwise %FALSE.
-+ * Side effects: None.
-+ */
-+static gboolean
-+_gb_animation_timeout (gpointer data)
-+{
-+   GbAnimation *animation = (GbAnimation *)data;
-+   gboolean ret;
-+
-+   if (!(ret = _gb_animation_tick(animation))) {
-+      _gb_animation_stop(animation);
-+   }
-+
-+   return ret;
-+}
-+
-+
-+/**
-+ * _gb_animation_start:
-+ * @animation: (in): A #GbAnimation.
-+ *
-+ * Start the animation. When the animation stops, the internal reference will
-+ * be dropped and the animation may be finalized.
-+ *
-+ * Returns: None.
-+ * Side effects: None.
-+ */
-+void
-+_gb_animation_start (GbAnimation *animation)
-+{
-+   GbAnimationPrivate *priv;
-+   GTimeVal now;
-+
-+   g_return_if_fail(GB_IS_ANIMATION(animation));
-+   g_return_if_fail(!animation->priv->tween_handler);
-+
-+   priv = animation->priv;
-+
-+   g_get_current_time(&now);
-+   g_object_ref_sink(animation);
-+   _gb_animation_load_begin_values(animation);
-+
-+   priv->begin_msec = TIMEVAL_TO_MSEC(now);
-+   priv->tween_handler = _gb_frame_source_add(priv->frame_rate,
-+                                              _gb_animation_timeout,
-+                                              animation);
-+}
-+
-+
-+/**
-+ * _gb_animation_stop:
-+ * @animation: (in): A #GbAnimation.
-+ *
-+ * Stops a running animation. The internal reference to the animation is
-+ * dropped and therefore may cause the object to finalize.
-+ *
-+ * Returns: None.
-+ * Side effects: None.
-+ */
-+void
-+_gb_animation_stop (GbAnimation *animation)
-+{
-+   GbAnimationPrivate *priv;
-+
-+   g_return_if_fail(GB_IS_ANIMATION(animation));
-+
-+   priv = animation->priv;
-+
-+   if (priv->tween_handler) {
-+      g_source_remove(priv->tween_handler);
-+      priv->tween_handler = 0;
-+      _gb_animation_unload_begin_values(animation);
-+      g_object_unref(animation);
-+   }
-+}
-+
-+
-+/**
-+ * _gb_animation_add_property:
-+ * @animation: (in): A #GbAnimation.
-+ * @pspec: (in): A #ParamSpec of @target or a #GtkWidget<!-- -->'s parent.
-+ * @value: (in): The new value for the property at the end of the animation.
-+ *
-+ * Adds a new property to the set of properties to be animated during the
-+ * lifetime of the animation.
-+ *
-+ * Returns: None.
-+ * Side effects: None.
-+ */
-+void
-+_gb_animation_add_property (GbAnimation  *animation,
-+                            GParamSpec   *pspec,
-+                            const GValue *value)
-+{
-+   GbAnimationPrivate *priv;
-+   Tween tween = { 0 };
-+   GType type;
-+
-+   g_return_if_fail(GB_IS_ANIMATION(animation));
-+   g_return_if_fail(pspec != NULL);
-+   g_return_if_fail(value != NULL);
-+   g_return_if_fail(value->g_type);
-+   g_return_if_fail(animation->priv->target);
-+   g_return_if_fail(!animation->priv->tween_handler);
-+
-+   priv = animation->priv;
-+
-+   type = G_TYPE_FROM_INSTANCE(priv->target);
-+   tween.is_child = !g_type_is_a(type, pspec->owner_type);
-+   if (tween.is_child) {
-+      if (!GTK_IS_WIDGET(priv->target)) {
-+         g_critical("Cannot locate property %s in class %s",
-+                    pspec->name, g_type_name(type));
-+         return;
-+      }
-+   }
-+
-+   tween.pspec = g_param_spec_ref(pspec);
-+   g_value_init(&tween.begin, pspec->value_type);
-+   g_value_init(&tween.end, pspec->value_type);
-+   g_value_copy(value, &tween.end);
-+   g_array_append_val(priv->tweens, tween);
-+}
-+
-+
-+/**
-+ * _gb_animation_dispose:
-+ * @object: (in): A #GbAnimation.
-+ *
-+ * Releases any object references the animation contains.
-+ *
-+ * Returns: None.
-+ * Side effects: None.
-+ */
-+static void
-+_gb_animation_dispose (GObject *object)
-+{
-+   GbAnimationPrivate *priv = GB_ANIMATION(object)->priv;
-+   gpointer instance;
-+
-+   if ((instance = priv->target)) {
-+      priv->target = NULL;
-+      g_object_unref(instance);
-+   }
-+
-+   G_OBJECT_CLASS(_gb_animation_parent_class)->dispose(object);
-+}
-+
-+
-+/**
-+ * _gb_animation_finalize:
-+ * @object: (in): A #GbAnimation.
-+ *
-+ * Finalizes the object and releases any resources allocated.
-+ *
-+ * Returns: None.
-+ * Side effects: None.
-+ */
-+static void
-+_gb_animation_finalize (GObject *object)
-+{
-+   GbAnimationPrivate *priv = GB_ANIMATION(object)->priv;
-+   Tween *tween;
-+   gint i;
-+
-+   for (i = 0; i < priv->tweens->len; i++) {
-+      tween = &g_array_index(priv->tweens, Tween, i);
-+      g_value_unset(&tween->begin);
-+      g_value_unset(&tween->end);
-+      g_param_spec_unref(tween->pspec);
-+   }
-+
-+   g_array_unref(priv->tweens);
-+
-+   if (gDebug) {
-+      g_print("Rendered %d frames in %d msec animation.\n",
-+              priv->frame_count, priv->duration_msec);
-+   }
-+
-+   G_OBJECT_CLASS(_gb_animation_parent_class)->finalize(object);
-+}
-+
-+
-+/**
-+ * _gb_animation_set_property:
-+ * @object: (in): A #GObject.
-+ * @prop_id: (in): The property identifier.
-+ * @value: (in): The given property.
-+ * @pspec: (in): A #ParamSpec.
-+ *
-+ * Set a given #GObject property.
-+ */
-+static void
-+_gb_animation_set_property (GObject      *object,
-+                            guint         prop_id,
-+                            const GValue *value,
-+                            GParamSpec   *pspec)
-+{
-+   GbAnimation *animation = GB_ANIMATION(object);
-+
-+   switch (prop_id) {
-+   case PROP_DURATION:
-+      animation->priv->duration_msec = g_value_get_uint(value);
-+      break;
-+   case PROP_FRAME_RATE:
-+      animation->priv->frame_rate = g_value_get_uint(value);
-+      break;
-+   case PROP_MODE:
-+      animation->priv->mode = g_value_get_enum(value);
-+      break;
-+   case PROP_TARGET:
-+      animation->priv->target = g_value_dup_object(value);
-+      break;
-+   default:
-+      G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
-+   }
-+}
-+
-+
-+/**
-+ * _gb_animation_class_init:
-+ * @klass: (in): A #GbAnimationClass.
-+ *
-+ * Initializes the GObjectClass.
-+ *
-+ * Returns: None.
-+ * Side effects: Properties, signals, and vtables are initialized.
-+ */
-+static void
-+_gb_animation_class_init (GbAnimationClass *klass)
-+{
-+   GObjectClass *object_class;
-+
-+   gDebug = !!g_getenv("GB_ANIMATION_DEBUG");
-+
-+   object_class = G_OBJECT_CLASS(klass);
-+   object_class->dispose = _gb_animation_dispose;
-+   object_class->finalize = _gb_animation_finalize;
-+   object_class->set_property = _gb_animation_set_property;
-+   g_type_class_add_private(object_class, sizeof(GbAnimationPrivate));
-+
-+   /**
-+    * GbAnimation:duration:
-+    *
-+    * The "duration" property is the total number of milliseconds that the
-+    * animation should run before being completed.
-+    */
-+   gParamSpecs[PROP_DURATION] =
-+      g_param_spec_uint("duration",
-+                        _("Duration"),
-+                        _("The duration of the animation"),
-+                        0,
-+                        G_MAXUINT,
-+                        250,
-+                        G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
-+   g_object_class_install_property(object_class, PROP_DURATION,
-+                                   gParamSpecs[PROP_DURATION]);
-+
-+   /**
-+    * GbAnimation:mode:
-+    *
-+    * The "mode" property is the Alpha function that should be used to
-+    * determine the offset within the animation based on the current
-+    * offset in the animations duration.
-+    */
-+   gParamSpecs[PROP_MODE] =
-+      g_param_spec_enum("mode",
-+                        _("Mode"),
-+                        _("The animation mode"),
-+                        GB_TYPE_ANIMATION_MODE,
-+                        GB_ANIMATION_LINEAR,
-+                        G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
-+   g_object_class_install_property(object_class, PROP_MODE,
-+                                   gParamSpecs[PROP_MODE]);
-+
-+   /**
-+    * GbAnimation:target:
-+    *
-+    * The "target" property is the #GObject that should have it's properties
-+    * animated.
-+    */
-+   gParamSpecs[PROP_TARGET] =
-+      g_param_spec_object("target",
-+                          _("Target"),
-+                          _("The target of the animation"),
-+                          G_TYPE_OBJECT,
-+                          G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
-+   g_object_class_install_property(object_class, PROP_TARGET,
-+                                   gParamSpecs[PROP_TARGET]);
-+
-+   /**
-+    * GbAnimation:frame-rate:
-+    *
-+    * The "frame-rate" is the number of frames that the animation should
-+    * try to perform per-second. The default is 60 frames-per-second.
-+    */
-+   gParamSpecs[PROP_FRAME_RATE] =
-+      g_param_spec_uint("frame-rate",
-+                          _("Frame Rate"),
-+                          _("The number of frames per second."),
-+                          1,
-+                          G_MAXUINT,
-+                          60,
-+                          G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
-+   g_object_class_install_property(object_class, PROP_FRAME_RATE,
-+                                   gParamSpecs[PROP_FRAME_RATE]);
-+
-+   /**
-+    * GbAnimation::tick:
-+    *
-+    * The "tick" signal is emitted on each frame in the animation.
-+    */
-+   gSignals[TICK] = g_signal_new("tick",
-+                                 GB_TYPE_ANIMATION,
-+                                 G_SIGNAL_RUN_FIRST,
-+                                 0,
-+                                 NULL,
-+                                 NULL,
-+                                 g_cclosure_marshal_VOID__VOID,
-+                                 G_TYPE_NONE,
-+                                 0);
-+
-+#define SET_ALPHA(_T, _t) \
-+   gAlphaFuncs[GB_ANIMATION_##_T] = _gb_animation_alpha_##_t
-+
-+   SET_ALPHA(LINEAR, linear);
-+   SET_ALPHA(EASE_IN_QUAD, ease_in_quad);
-+   SET_ALPHA(EASE_OUT_QUAD, ease_out_quad);
-+   SET_ALPHA(EASE_IN_OUT_QUAD, ease_in_out_quad);
-+   SET_ALPHA(EASE_IN_CUBIC, ease_in_cubic);
-+
-+#define SET_TWEEN(_T, _t) \
-+   G_STMT_START { \
-+      guint idx = G_TYPE_##_T; \
-+      gTweenFuncs[idx] = tween_##_t; \
-+   } G_STMT_END
-+
-+   SET_TWEEN(INT, int);
-+   SET_TWEEN(UINT, uint);
-+   SET_TWEEN(LONG, long);
-+   SET_TWEEN(ULONG, ulong);
-+   SET_TWEEN(FLOAT, float);
-+   SET_TWEEN(DOUBLE, double);
-+}
-+
-+
-+/**
-+ * _gb_animation_init:
-+ * @animation: (in): A #GbAnimation.
-+ *
-+ * Initializes the #GbAnimation instance.
-+ *
-+ * Returns: None.
-+ * Side effects: Everything.
-+ */
-+static void
-+_gb_animation_init (GbAnimation *animation)
-+{
-+   GbAnimationPrivate *priv;
-+
-+   priv = G_TYPE_INSTANCE_GET_PRIVATE(animation, GB_TYPE_ANIMATION,
-+                                      GbAnimationPrivate);
-+   animation->priv = priv;
-+
-+   priv->duration_msec = 250;
-+   priv->frame_rate = 60;
-+   priv->mode = GB_ANIMATION_LINEAR;
-+   priv->tweens = g_array_new(FALSE, FALSE, sizeof(Tween));
-+}
-+
-+
-+/**
-+ * _gb_animation_mode_get_type:
-+ *
-+ * Retrieves the GType for #GbAnimationMode.
-+ *
-+ * Returns: A GType.
-+ * Side effects: GType registered on first call.
-+ */
-+GType
-+_gb_animation_mode_get_type (void)
-+{
-+   static GType type_id = 0;
-+   static const GEnumValue values[] = {
-+      { GB_ANIMATION_LINEAR, "GB_ANIMATION_LINEAR", "LINEAR" },
-+      { GB_ANIMATION_EASE_IN_QUAD, "GB_ANIMATION_EASE_IN_QUAD", "EASE_IN_QUAD" },
-+      { GB_ANIMATION_EASE_IN_OUT_QUAD, "GB_ANIMATION_EASE_IN_OUT_QUAD", "EASE_IN_OUT_QUAD" },
-+      { GB_ANIMATION_EASE_OUT_QUAD, "GB_ANIMATION_EASE_OUT_QUAD", "EASE_OUT_QUAD" },
-+      { GB_ANIMATION_EASE_IN_CUBIC, "GB_ANIMATION_EASE_IN_CUBIC", "EASE_IN_CUBIC" },
-+      { 0 }
-+   };
-+
-+   if (G_UNLIKELY(!type_id)) {
-+      type_id = g_enum_register_static("GbAnimationMode", values);
-+   }
-+   return type_id;
-+}
-+
-+/**
-+ * _gb_object_animatev:
-+ * Returns: (transfer none): A #GbAnimation.
-+ */
-+GbAnimation*
-+_gb_object_animatev (gpointer         object,
-+                     GbAnimationMode  mode,
-+                     guint            duration_msec,
-+                     guint            frame_rate,
-+                     const gchar     *first_property,
-+                     va_list          args)
-+{
-+   GbAnimation *animation;
-+   GObjectClass *klass;
-+   GObjectClass *pklass;
-+   const gchar *name;
-+   GParamSpec *pspec;
-+   GtkWidget *parent;
-+   GValue value = { 0 };
-+   gchar *error = NULL;
-+   GType type;
-+   GType ptype;
-+
-+   g_return_val_if_fail(first_property != NULL, NULL);
-+   g_return_val_if_fail(mode < GB_ANIMATION_LAST, NULL);
-+
-+   name = first_property;
-+   type = G_TYPE_FROM_INSTANCE(object);
-+   klass = G_OBJECT_GET_CLASS(object);
-+   animation = g_object_new(GB_TYPE_ANIMATION,
-+                            "duration", duration_msec,
-+                            "frame-rate", frame_rate ? frame_rate : 60,
-+                            "mode", mode,
-+                            "target", object,
-+                            NULL);
-+
-+   do {
-+      /*
-+       * First check for the property on the object. If that does not exist
-+       * then check if the object has a parent and look at its child
-+       * properties (if its a GtkWidget).
-+       */
-+      if (!(pspec = g_object_class_find_property(klass, name))) {
-+         if (!g_type_is_a(type, GTK_TYPE_WIDGET)) {
-+            g_critical("Failed to find property %s in %s",
-+                       name, g_type_name(type));
-+            goto failure;
-+         }
-+         if (!(parent = gtk_widget_get_parent(object))) {
-+            g_critical("Failed to find property %s in %s",
-+                       name, g_type_name(type));
-+            goto failure;
-+         }
-+         pklass = G_OBJECT_GET_CLASS(parent);
-+         ptype = G_TYPE_FROM_INSTANCE(parent);
-+         if (!(pspec = gtk_container_class_find_child_property(pklass, name))) {
-+            g_critical("Failed to find property %s in %s or parent %s",
-+                       name, g_type_name(type), g_type_name(ptype));
-+            goto failure;
-+         }
-+      }
-+
-+      g_value_init(&value, pspec->value_type);
-+      G_VALUE_COLLECT(&value, args, 0, &error);
-+      if (error != NULL) {
-+         g_critical("Failed to retrieve va_list value: %s", error);
-+         g_free(error);
-+         goto failure;
-+      }
-+
-+      _gb_animation_add_property(animation, pspec, &value);
-+      g_value_unset(&value);
-+   } while ((name = va_arg(args, const gchar *)));
-+
-+   _gb_animation_start(animation);
-+
-+   return animation;
-+
-+failure:
-+   g_object_ref_sink(animation);
-+   g_object_unref(animation);
-+   return NULL;
-+}
-+
-+/**
-+ * _gb_object_animate:
-+ * @object: (in): A #GObject.
-+ * @mode: (in): The animation mode.
-+ * @duration_msec: (in): The duration in milliseconds.
-+ * @first_property: (in): The first property to animate.
-+ *
-+ * Animates the properties of @object. The can be set in a similar
-+ * manner to g_object_set(). They will be animated from their current
-+ * value to the target value over the time period.
-+ *
-+ * Return value: (transfer none): A #GbAnimation.
-+ * Side effects: None.
-+ */
-+GbAnimation*
-+_gb_object_animate (gpointer         object,
-+                    GbAnimationMode  mode,
-+                    guint            duration_msec,
-+                    const gchar     *first_property,
-+                    ...)
-+{
-+   GbAnimation *animation;
-+   va_list args;
-+
-+   va_start(args, first_property);
-+   animation = _gb_object_animatev(object, mode, duration_msec, 0,
-+                                   first_property, args);
-+   va_end(args);
-+   return animation;
-+}
-+
-+/**
-+ * _gb_object_animate_full:
-+ *
-+ * Return value: (transfer none): A #GbAnimation.
-+ */
-+GbAnimation*
-+_gb_object_animate_full (gpointer         object,
-+                         GbAnimationMode  mode,
-+                         guint            duration_msec,
-+                         guint            frame_rate,
-+                         GDestroyNotify   notify,
-+                         gpointer         notify_data,
-+                         const gchar     *first_property,
-+                         ...)
-+{
-+   GbAnimation *animation;
-+   va_list args;
-+
-+   va_start(args, first_property);
-+   animation = _gb_object_animatev(object, mode, duration_msec,
-+                                   frame_rate, first_property, args);
-+   va_end(args);
-+   g_object_weak_ref(G_OBJECT(animation), (GWeakNotify)notify, notify_data);
-+   return animation;
-+}
-diff --git a/gtk/gb-animation.h b/gtk/gb-animation.h
-new file mode 100644
-index 0000000..bf9268d
---- /dev/null
-+++ b/gtk/gb-animation.h
-@@ -0,0 +1,87 @@
-+/* gb-animation.h
-+ *
-+ * Copyright (C) 2010 Christian Hergert <chris@dronelabs.com>
-+ *
-+ * This program is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation, either version 3 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#ifndef GB_ANIMATION_H
-+#define GB_ANIMATION_H
-+
-+#include <glib-object.h>
-+
-+G_BEGIN_DECLS
-+
-+#define GB_TYPE_ANIMATION            (_gb_animation_get_type())
-+#define GB_TYPE_ANIMATION_MODE       (_gb_animation_mode_get_type())
-+#define GB_ANIMATION(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GB_TYPE_ANIMATION, GbAnimation))
-+#define GB_ANIMATION_CONST(obj)      (G_TYPE_CHECK_INSTANCE_CAST ((obj), GB_TYPE_ANIMATION, GbAnimation const))
-+#define GB_ANIMATION_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GB_TYPE_ANIMATION, GbAnimationClass))
-+#define GB_IS_ANIMATION(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GB_TYPE_ANIMATION))
-+#define GB_IS_ANIMATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GB_TYPE_ANIMATION))
-+#define GB_ANIMATION_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GB_TYPE_ANIMATION, GbAnimationClass))
-+
-+typedef struct _GbAnimation        GbAnimation;
-+typedef struct _GbAnimationClass   GbAnimationClass;
-+typedef struct _GbAnimationPrivate GbAnimationPrivate;
-+typedef enum   _GbAnimationMode    GbAnimationMode;
-+
-+enum _GbAnimationMode
-+{
-+      GB_ANIMATION_LINEAR,
-+      GB_ANIMATION_EASE_IN_QUAD,
-+      GB_ANIMATION_EASE_OUT_QUAD,
-+      GB_ANIMATION_EASE_IN_OUT_QUAD,
-+      GB_ANIMATION_EASE_IN_CUBIC,
-+
-+      GB_ANIMATION_LAST
-+};
-+
-+struct _GbAnimation
-+{
-+      GInitiallyUnowned parent;
-+
-+      /*< private >*/
-+      GbAnimationPrivate *priv;
-+};
-+
-+struct _GbAnimationClass
-+{
-+      GInitiallyUnownedClass parent_class;
-+};
-+
-+GType _gb_animation_get_type         (void) G_GNUC_CONST;
-+GType _gb_animation_mode_get_type    (void) G_GNUC_CONST;
-+void  _gb_animation_start            (GbAnimation      *animation);
-+void  _gb_animation_stop             (GbAnimation      *animation);
-+void  _gb_animation_add_property     (GbAnimation      *animation,
-+                                      GParamSpec       *pspec,
-+                                      const GValue     *value);
-+GbAnimation* _gb_object_animate      (gpointer          object,
-+                                      GbAnimationMode   mode,
-+                                      guint             duration_msec,
-+                                      const gchar      *first_property,
-+                                      ...) G_GNUC_NULL_TERMINATED;
-+GbAnimation* _gb_object_animate_full (gpointer          object,
-+                                      GbAnimationMode   mode,
-+                                      guint             duration_msec,
-+                                      guint             frame_rate,
-+                                      GDestroyNotify    notify,
-+                                      gpointer          notify_data,
-+                                      const gchar      *first_property,
-+                                      ...) G_GNUC_NULL_TERMINATED;
-+
-+G_END_DECLS
-+
-+#endif /* GB_ANIMATION_H */
-diff --git a/gtk/gb-frame-source.c b/gtk/gb-frame-source.c
-new file mode 100644
-index 0000000..be04c1b
---- /dev/null
-+++ b/gtk/gb-frame-source.c
-@@ -0,0 +1,134 @@
-+/*
-+ * Based upon code from Clutter:
-+ *
-+ * Authored By Neil Roberts <neil@linux.intel.com>
-+ *
-+ * Copyright (C) 2009 Intel Corporation.
-+ * Copyright (C) 2012 Christian Hergert.
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include "gb-frame-source.h"
-+
-+typedef struct
-+{
-+   GSource parent;
-+   guint   fps;
-+   guint   frame_count;
-+   gint64  start_time;
-+} GbFrameSource;
-+
-+static gboolean
-+gb_frame_source_prepare (GSource *source,
-+                         gint    *timeout_)
-+{
-+   GbFrameSource *fsource = (GbFrameSource *)source;
-+   gint64 current_time;
-+   guint elapsed_time;
-+   guint new_frame_num;
-+   guint frame_time;
-+
-+   current_time = g_source_get_time(source) / 1000;
-+   elapsed_time = current_time - fsource->start_time;
-+   new_frame_num = elapsed_time * fsource->fps / 1000;
-+
-+   /* If time has gone backwards or the time since the last frame is
-+    * greater than the two frames worth then reset the time and do a
-+    * frame now */
-+   if (new_frame_num < fsource->frame_count ||
-+       new_frame_num - fsource->frame_count > 2) {
-+      /* Get the frame time rounded up to the nearest ms */
-+      frame_time = (1000 + fsource->fps - 1) / fsource->fps;
-+
-+      /* Reset the start time */
-+      fsource->start_time = current_time;
-+
-+      /* Move the start time as if one whole frame has elapsed */
-+      fsource->start_time -= frame_time;
-+      fsource->frame_count = 0;
-+      *timeout_ = 0;
-+      return TRUE;
-+   } else if (new_frame_num > fsource->frame_count) {
-+      *timeout_ = 0;
-+      return TRUE;
-+   } else {
-+      *timeout_ = (fsource->frame_count + 1) * 1000 / fsource->fps - elapsed_time;
-+      return FALSE;
-+   }
-+}
-+
-+static gboolean
-+gb_frame_source_check (GSource *source)
-+{
-+   gint timeout_;
-+   return gb_frame_source_prepare(source, &timeout_);
-+}
-+
-+static gboolean
-+gb_frame_source_dispatch (GSource     *source,
-+                          GSourceFunc  source_func,
-+                          gpointer     user_data)
-+{
-+   GbFrameSource *fsource = (GbFrameSource *)source;
-+   gboolean ret;
-+
-+   if ((ret = source_func(user_data)))
-+      fsource->frame_count++;
-+   return ret;
-+}
-+
-+static GSourceFuncs source_funcs = {
-+   gb_frame_source_prepare,
-+   gb_frame_source_check,
-+   gb_frame_source_dispatch,
-+};
-+
-+/**
-+ * gb_frame_source_add:
-+ * @frames_per_sec: (in): Target frames per second.
-+ * @callback: (in) (scope notified): A #GSourceFunc to execute.
-+ * @user_data: (in): User data for @callback.
-+ *
-+ * Creates a new frame source that will execute when the timeout interval
-+ * for the source has elapsed. The timing will try to synchronize based
-+ * on the end time of the animation.
-+ *
-+ * Returns: A source id that can be removed with g_source_remove().
-+ */
-+guint
-+_gb_frame_source_add (guint       frames_per_sec,
-+                      GSourceFunc callback,
-+                      gpointer    user_data)
-+{
-+   GbFrameSource *fsource;
-+   GSource *source;
-+   guint ret;
-+
-+   g_return_val_if_fail(frames_per_sec > 0, 0);
-+   g_return_val_if_fail(frames_per_sec < 120, 0);
-+
-+   source = g_source_new(&source_funcs, sizeof(GbFrameSource));
-+   fsource = (GbFrameSource *)source;
-+   fsource->fps = frames_per_sec;
-+   fsource->frame_count = 0;
-+   fsource->start_time = g_get_monotonic_time() / 1000;
-+   g_source_set_callback(source, callback, user_data, NULL);
-+   g_source_set_name(source, "GbFrameSource");
-+
-+   ret = g_source_attach(source, NULL);
-+   g_source_unref(source);
-+
-+   return ret;
-+}
-diff --git a/gtk/gb-frame-source.h b/gtk/gb-frame-source.h
-new file mode 100644
-index 0000000..502d86e
---- /dev/null
-+++ b/gtk/gb-frame-source.h
-@@ -0,0 +1,32 @@
-+/* gb-frame-source.h
-+ *
-+ * Copyright (C) 2012 Christian Hergert <chris@dronelabs.com>
-+ *
-+ * This program is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation, either version 3 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#ifndef GB_FRAME_SOURCE_H
-+#define GB_FRAME_SOURCE_H
-+
-+#include <glib.h>
-+
-+G_BEGIN_DECLS
-+
-+guint _gb_frame_source_add (guint       frames_per_sec,
-+                            GSourceFunc callback,
-+                            gpointer    user_data);
-+
-+G_END_DECLS
-+
-+#endif /* GB_FRAME_SOURCE_H */
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 821981f..77d485f 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -32,6 +32,7 @@
- #include "gtkscrolledwindow.h"
- #include "gtkwindow.h"
- #include "gtkprivate.h"
-+#include "gb-animation.h"
- #include "gtkintl.h"
- #include "gtkmain.h"
- #include "gtkdnd.h"
-@@ -111,6 +112,17 @@ typedef struct {
-
-   gdouble                unclamped_hadj_value;
-   gdouble                unclamped_vadj_value;
-+
-+  GtkAdjustment *opacity;
-+  GbAnimation   *opacity_anim;
-+
-+  gint           sb_min_height;
-+  gint           sb_padding;
-+  gint           sb_radius;
-+  gint           sb_width;
-+  gboolean       sb_fading_in;
-+  gint           sb_fade_out_delay;
-+  guint          sb_fade_out_id;
- } GtkScrolledWindowPrivate;
-
- #define GTK_SCROLLED_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowPrivate))
-@@ -206,10 +218,21 @@ static gboolean _gtk_scrolled_window_set_adjustment_value      (GtkScrolledWindo
-                                                                 gboolean           allow_overshooting,
-                                                                 gboolean           snap_to_border);
-
-+static void gtk_scrolled_window_cancel_animation         (GtkScrolledWindow *scrolled_window);
-+static void gtk_scrolled_window_start_fade_in_animation  (GtkScrolledWindow *scrolled_window);
-+static void gtk_scrolled_window_start_fade_out_animation (GtkScrolledWindow *scrolled_window);
-+static gboolean gtk_scrolled_window_child_expose (GtkWidget         *widget,
-+                                                  GdkEventExpose    *eevent,
-+                                                  GtkScrolledWindow *scrolled_window);
-+static void  gtk_scrolled_window_expose_scrollbars (GtkAdjustment     *adj,
-+                                                    GtkScrolledWindow *scrolled_window);
-+
- static guint signals[LAST_SIGNAL] = {0};
-
- G_DEFINE_TYPE (GtkScrolledWindow, gtk_scrolled_window, GTK_TYPE_BIN)
-
-+static gboolean overlay_scrollbars = TRUE;
-+
- static void
- add_scroll_binding (GtkBindingSet  *binding_set,
-                   guint           keyval,
-@@ -444,6 +467,8 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
- static void
- gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
- {
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-   gtk_widget_set_has_window (GTK_WIDGET (scrolled_window), FALSE);
-   gtk_widget_set_can_focus (GTK_WIDGET (scrolled_window), TRUE);
-
-@@ -462,6 +487,24 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
-       gtk_scrolled_window_set_kinetic_scrolling (scrolled_window, TRUE);
-       gtk_scrolled_window_set_capture_button_press (scrolled_window, TRUE);
-     }
-+
-+  if (overlay_scrollbars)
-+    {
-+      priv->opacity = g_object_new (GTK_TYPE_ADJUSTMENT,
-+                                    "lower", 0.0,
-+                                    "upper", 0.5,
-+                                    "value", 0.0,
-+                                    NULL);
-+      priv->sb_min_height = 20;
-+      priv->sb_padding = 2;
-+      priv->sb_radius = 3;
-+      priv->sb_width = 6;
-+      priv->sb_fade_out_delay = 1000;
-+
-+      g_signal_connect (priv->opacity, "value-changed",
-+                        G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
-+                        scrolled_window);
-+    }
- }
-
- /**
-@@ -541,6 +584,17 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-       g_signal_handlers_disconnect_by_func (old_adjustment,
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
-+
-+      if (overlay_scrollbars)
-+        {
-+          g_signal_handlers_disconnect_by_func (old_adjustment,
-+                                                gtk_scrolled_window_adjustment_value_changed,
-+                                                scrolled_window);
-+          g_signal_handlers_disconnect_by_func (old_adjustment,
-+                                                gtk_scrolled_window_expose_scrollbars,
-+                                                scrolled_window);
-+        }
-+
-       gtk_range_set_adjustment (GTK_RANGE (scrolled_window->hscrollbar),
-                               hadjustment);
-     }
-@@ -556,10 +610,24 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-   gtk_scrolled_window_adjustment_changed (hadjustment, scrolled_window);
-   gtk_scrolled_window_adjustment_value_changed (hadjustment, scrolled_window);
-
-+  if (overlay_scrollbars)
-+    {
-+      g_signal_connect (hadjustment, "value-changed",
-+                        G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
-+                        scrolled_window);
-+
-+      g_signal_connect (hadjustment, "changed",
-+                        G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
-+                        scrolled_window);
-+      g_signal_connect (hadjustment, "value-changed",
-+                        G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
-+                        scrolled_window);
-+    }
-+
-   if (bin->child)
-     gtk_widget_set_scroll_adjustments (bin->child,
--                                     gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
--                                     gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)));
-+                                       gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-+                                       gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)));
-
-   g_object_notify (G_OBJECT (scrolled_window), "hadjustment");
- }
-@@ -607,6 +675,17 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-       g_signal_handlers_disconnect_by_func (old_adjustment,
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
-+
-+      if (overlay_scrollbars)
-+        {
-+          g_signal_handlers_disconnect_by_func (old_adjustment,
-+                                                gtk_scrolled_window_adjustment_value_changed,
-+                                                scrolled_window);
-+          g_signal_handlers_disconnect_by_func (old_adjustment,
-+                                                gtk_scrolled_window_expose_scrollbars,
-+                                                scrolled_window);
-+        }
-+
-       gtk_range_set_adjustment (GTK_RANGE (scrolled_window->vscrollbar),
-                               vadjustment);
-     }
-@@ -622,10 +701,25 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-   gtk_scrolled_window_adjustment_changed (vadjustment, scrolled_window);
-   gtk_scrolled_window_adjustment_value_changed (vadjustment, scrolled_window);
-
-+  if (overlay_scrollbars)
-+    {
-+      g_signal_connect (vadjustment,
-+                        "value-changed",
-+                        G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
-+                        scrolled_window);
-+
-+      g_signal_connect (vadjustment, "changed",
-+                        G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
-+                        scrolled_window);
-+      g_signal_connect (vadjustment, "value-changed",
-+                        G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
-+                        scrolled_window);
-+    }
-+
-   if (bin->child)
-     gtk_widget_set_scroll_adjustments (bin->child,
--                                     gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
--                                     gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)));
-+                                       gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-+                                       gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)));
-
-   g_object_notify (G_OBJECT (scrolled_window), "vadjustment");
- }
-@@ -1073,11 +1167,24 @@ gtk_scrolled_window_destroy (GtkObject *object)
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (object);
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
-+  gtk_scrolled_window_cancel_animation (scrolled_window);
-+
-   if (scrolled_window->hscrollbar)
-     {
-       g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
-+
-+      if (overlay_scrollbars)
-+        {
-+          g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-+                                                gtk_scrolled_window_adjustment_value_changed,
-+                                                scrolled_window);
-+          g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-+                                                gtk_scrolled_window_expose_scrollbars,
-+                                                scrolled_window);
-+        }
-+
-       gtk_widget_unparent (scrolled_window->hscrollbar);
-       gtk_widget_destroy (scrolled_window->hscrollbar);
-       g_object_unref (scrolled_window->hscrollbar);
-@@ -1088,6 +1195,17 @@ gtk_scrolled_window_destroy (GtkObject *object)
-       g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
-+
-+      if (overlay_scrollbars)
-+        {
-+          g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
-+                                                gtk_scrolled_window_adjustment_value_changed,
-+                                                scrolled_window);
-+          g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
-+                                                gtk_scrolled_window_expose_scrollbars,
-+                                                scrolled_window);
-+        }
-+
-       gtk_widget_unparent (scrolled_window->vscrollbar);
-       gtk_widget_destroy (scrolled_window->vscrollbar);
-       g_object_unref (scrolled_window->vscrollbar);
-@@ -1515,7 +1633,7 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-
-       if (scrolled_window->hscrollbar_policy == GTK_POLICY_NEVER)
-       requisition->width += child_requisition.width;
--      else
-+      else if (! overlay_scrollbars)
-       {
-         GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
-
-@@ -1530,7 +1648,7 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-
-       if (scrolled_window->vscrollbar_policy == GTK_POLICY_NEVER)
-       requisition->height += child_requisition.height;
--      else
-+      else if (! overlay_scrollbars)
-       {
-         GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
-
-@@ -1544,20 +1662,23 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-       }
-     }
-
--  if (scrolled_window->hscrollbar_policy == GTK_POLICY_AUTOMATIC ||
--      scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
-+  if (! overlay_scrollbars)
-     {
--      requisition->width = MAX (requisition->width, hscrollbar_requisition.width);
--      if (!extra_height || scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
--      extra_height = scrollbar_spacing + hscrollbar_requisition.height;
--    }
-+      if (scrolled_window->hscrollbar_policy == GTK_POLICY_AUTOMATIC ||
-+          scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
-+        {
-+          requisition->width = MAX (requisition->width, hscrollbar_requisition.width);
-+          if (!extra_height || scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
-+            extra_height = scrollbar_spacing + hscrollbar_requisition.height;
-+        }
-
--  if (scrolled_window->vscrollbar_policy == GTK_POLICY_AUTOMATIC ||
--      scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
--    {
--      requisition->height = MAX (requisition->height, vscrollbar_requisition.height);
--      if (!extra_height || scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
--      extra_width = scrollbar_spacing + vscrollbar_requisition.width;
-+      if (scrolled_window->vscrollbar_policy == GTK_POLICY_AUTOMATIC ||
-+          scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
-+        {
-+          requisition->height = MAX (requisition->height, vscrollbar_requisition.height);
-+          if (!extra_height || scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
-+            extra_width = scrollbar_spacing + vscrollbar_requisition.width;
-+        }
-     }
-
-   requisition->width += GTK_CONTAINER (widget)->border_width * 2 + MAX (0, extra_width);
-@@ -1598,6 +1719,9 @@ gtk_scrolled_window_relative_allocation (GtkWidget     *widget,
-   allocation->width = MAX (1, (gint)widget->allocation.width - allocation->x * 2);
-   allocation->height = MAX (1, (gint)widget->allocation.height - allocation->y * 2);
-
-+  if (overlay_scrollbars)
-+    return;
-+
-   if (scrolled_window->vscrollbar_visible)
-     {
-       GtkRequisition vscrollbar_requisition;
-@@ -1754,6 +1878,9 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   bin = GTK_BIN (scrolled_window);
-
-+  if (overlay_scrollbars)
-+    gtk_scrolled_window_expose_scrollbars (NULL, scrolled_window);
-+
-   scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
-   gtk_widget_style_get (widget, "scrollbars-within-bevel", &scrollbars_within_bevel, NULL);
-
-@@ -1812,7 +1939,7 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-       gtk_scrolled_window_relative_allocation (widget, &relative_allocation);
-     }
-
--  if (scrolled_window->hscrollbar_visible)
-+  if (!overlay_scrollbars && scrolled_window->hscrollbar_visible)
-     {
-       GtkRequisition hscrollbar_requisition;
-       gtk_widget_get_child_requisition (scrolled_window->hscrollbar,
-@@ -1860,7 +1987,7 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   else if (gtk_widget_get_visible (scrolled_window->hscrollbar))
-     gtk_widget_hide (scrolled_window->hscrollbar);
-
--  if (scrolled_window->vscrollbar_visible)
-+  if (!overlay_scrollbars && scrolled_window->vscrollbar_visible)
-     {
-       GtkRequisition vscrollbar_requisition;
-       if (!gtk_widget_get_visible (scrolled_window->vscrollbar))
-@@ -1930,7 +2057,7 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-   if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &delta_x, &delta_y))
-     {
-       if (delta_x != 0.0 && scrolled_window->hscrollbar &&
--          gtk_widget_get_visible (scrolled_window->hscrollbar))
-+          (overlay_scrollbars || gtk_widget_get_visible (scrolled_window->hscrollbar)))
-         {
-           GtkAdjustment *adj;
-           gdouble new_value;
-@@ -1948,7 +2075,7 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-         }
-
-       if (delta_y != 0.0 && scrolled_window->vscrollbar &&
--          gtk_widget_get_visible (scrolled_window->vscrollbar))
-+          (overlay_scrollbars || gtk_widget_get_visible (scrolled_window->vscrollbar)))
-         {
-           GtkAdjustment *adj;
-           gdouble new_value;
-@@ -1974,7 +2101,7 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-       else
-         range = scrolled_window->hscrollbar;
-
--      if (range && gtk_widget_get_visible (range))
-+      if (range && (overlay_scrollbars || gtk_widget_get_visible (range)))
-         {
-           GtkAdjustment *adj = GTK_RANGE (range)->adjustment;
-           gdouble delta, new_value;
-@@ -2614,6 +2741,9 @@ gtk_scrolled_window_adjustment_changed (GtkAdjustment *adjustment,
-           gtk_widget_queue_resize (GTK_WIDGET (scrolled_win));
-       }
-     }
-+
-+  if (overlay_scrollbars)
-+    gtk_scrolled_window_start_fade_in_animation (scrolled_win);
- }
-
- static void
-@@ -2634,6 +2764,9 @@ gtk_scrolled_window_adjustment_value_changed (GtkAdjustment *adjustment,
-   else if (scrolled_window->hscrollbar &&
-            adjustment == gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)))
-     priv->unclamped_hadj_value = gtk_adjustment_get_value (adjustment);
-+
-+  if (overlay_scrollbars)
-+    gtk_scrolled_window_start_fade_in_animation (scrolled_window);
- }
-
- static void
-@@ -2658,10 +2791,17 @@ gtk_scrolled_window_add (GtkContainer *container,
-
-   /* this is a temporary message */
-   if (!gtk_widget_set_scroll_adjustments (child,
--                                        gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
--                                        gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar))))
-+                                          gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-+                                          gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar))))
-     g_warning ("gtk_scrolled_window_add(): cannot add non scrollable widget "
-              "use gtk_scrolled_window_add_with_viewport() instead");
-+
-+  if (overlay_scrollbars)
-+    {
-+      g_signal_connect_after (child, "expose-event",
-+                              G_CALLBACK (gtk_scrolled_window_child_expose),
-+                              container);
-+    }
- }
-
- static void
-@@ -2671,7 +2811,14 @@ gtk_scrolled_window_remove (GtkContainer *container,
-   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (container));
-   g_return_if_fail (child != NULL);
-   g_return_if_fail (GTK_BIN (container)->child == child);
--
-+
-+  if (overlay_scrollbars)
-+    {
-+      g_signal_handlers_disconnect_by_func (child,
-+                                            gtk_scrolled_window_child_expose,
-+                                            container);
-+    }
-+
-   gtk_widget_set_scroll_adjustments (child, NULL, NULL);
-
-   /* chain parent class handler to remove child */
-@@ -2871,5 +3018,383 @@ gtk_scrolled_window_grab_notify (GtkWidget *widget,
-     }
- }
-
-+static void
-+gtk_scrolled_window_rounded_rectangle (cairo_t *cr,
-+                                       gint     x,
-+                                       gint     y,
-+                                       gint     width,
-+                                       gint     height,
-+                                       gint     x_radius,
-+                                       gint     y_radius)
-+{
-+  gint x1, x2;
-+  gint y1, y2;
-+  gint xr1, xr2;
-+  gint yr1, yr2;
-+
-+  x1 = x;
-+  x2 = x1 + width;
-+  y1 = y;
-+  y2 = y1 + height;
-+
-+  x_radius = MIN (x_radius, width  / 2.0);
-+  y_radius = MIN (y_radius, height / 2.0);
-+
-+  xr1 = x_radius;
-+  xr2 = x_radius / 2.0;
-+  yr1 = y_radius;
-+  yr2 = y_radius / 2.0;
-+
-+  cairo_move_to    (cr, x1 + xr1, y1);
-+  cairo_line_to    (cr, x2 - xr1, y1);
-+  cairo_curve_to   (cr, x2 - xr2, y1, x2, y1 + yr2, x2, y1 + yr1);
-+  cairo_line_to    (cr, x2, y2 - yr1);
-+  cairo_curve_to   (cr, x2, y2 - yr2, x2 - xr2, y2, x2 - xr1, y2);
-+  cairo_line_to    (cr, x1 + xr1, y2);
-+  cairo_curve_to   (cr, x1 + xr2, y2, x1, y2 - yr2, x1, y2 - yr1);
-+  cairo_line_to    (cr, x1, y1 + yr1);
-+  cairo_curve_to   (cr, x1, y1 + yr2, x1 + xr2, y1, x1 + xr1, y1);
-+  cairo_close_path (cr);
-+}
-+
-+static void
-+gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-+                                            GtkWidget         *child,
-+                                            GdkWindow         *child_window,
-+                                            GdkRectangle      *vbar_rect,
-+                                            GdkRectangle      *vslider_rect,
-+                                            GdkRectangle      *hbar_rect,
-+                                            GdkRectangle      *hslider_rect)
-+{
-+   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+   GtkAdjustment *adj;
-+   GtkAllocation allocation;
-+   gdouble lower;
-+   gdouble page_size;
-+   gdouble upper;
-+   gdouble value_h = 0.0;
-+   gdouble value_v = 0.0;
-+   gdouble ratio;
-+   gdouble width;
-+   gdouble height;
-+   gdouble x;
-+   gdouble y;
-+   gint window_width;
-+   gint window_height;
-+   gint viewport_width;
-+   gint viewport_height;
-+
-+   window_width = gdk_window_get_width (child_window);
-+   window_height = gdk_window_get_height (child_window);
-+
-+   gtk_widget_get_allocation (child, &allocation);
-+
-+   viewport_width = MIN (window_width, allocation.width);
-+   viewport_height = MIN (window_height, allocation.height);
-+
-+   if (scrolled_window->vscrollbar)
-+     {
-+       adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+
-+       value_v = gtk_adjustment_get_value (adj);
-+     }
-+
-+   if (scrolled_window->hscrollbar)
-+     {
-+       adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-+
-+       value_h = gtk_adjustment_get_value (adj);
-+     }
-+
-+   if ((vbar_rect || vslider_rect) && scrolled_window->vscrollbar)
-+     {
-+       adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+
-+       g_object_get (adj,
-+                     "lower", &lower,
-+                     "upper", &upper,
-+                     "page-size", &page_size,
-+                     NULL);
-+
-+       ratio = page_size / (upper - lower);
-+       if (ratio < 1.0)
-+         {
-+           height = ratio * (viewport_height - (2 * priv->sb_padding));
-+           height = MAX (height, 20);
-+           height = MIN (height, viewport_height - (2 * priv->sb_padding));
-+
-+           ratio = (value_v - lower) / (upper - page_size - lower);
-+           y = ratio * (viewport_height - (2 * priv->sb_padding) - height) + priv->sb_padding;
-+           x = viewport_width - priv->sb_width - priv->sb_padding;
-+
-+           if (window_width > allocation.width)
-+             x += value_h;
-+
-+           if (window_height > allocation.height)
-+             y += value_v;
-+
-+           if (vbar_rect)
-+             {
-+               vbar_rect->x = x - priv->sb_padding;
-+               vbar_rect->y = 0;
-+               vbar_rect->width = priv->sb_width + 2 * priv->sb_padding;
-+               vbar_rect->height = viewport_height;
-+             }
-+
-+           if (vslider_rect)
-+             {
-+               vslider_rect->x = x;
-+               vslider_rect->y = y;
-+               vslider_rect->width = priv->sb_width;
-+               vslider_rect->height = height;
-+             }
-+         }
-+       else
-+         {
-+           if (vbar_rect)
-+             {
-+               vbar_rect->x = 0;
-+               vbar_rect->y = 0;
-+               vbar_rect->width = 0;
-+               vbar_rect->height = 0;
-+             }
-+
-+           if (vslider_rect)
-+             {
-+               vslider_rect->x = 0;
-+               vslider_rect->y = 0;
-+               vslider_rect->width = 0;
-+               vslider_rect->height = 0;
-+             }
-+         }
-+     }
-+
-+   if ((hbar_rect || hslider_rect) && scrolled_window->hscrollbar)
-+     {
-+       adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-+
-+       g_object_get (adj,
-+                     "lower", &lower,
-+                     "upper", &upper,
-+                     "page-size", &page_size,
-+                     NULL);
-+
-+       ratio = page_size / (upper - lower);
-+       if (ratio < 1.0)
-+         {
-+           width = ratio * (viewport_width - (2 * priv->sb_padding));
-+           width = MAX (width, 20);
-+           width = MIN (width, viewport_width - (2 * priv->sb_padding));
-+
-+           ratio = (value_h - lower) / (upper - page_size - lower);
-+           x = ratio * (viewport_width - (2 * priv->sb_padding) - width) + priv->sb_padding;
-+           y = viewport_height - priv->sb_width - priv->sb_padding;
-+
-+           if (window_width > allocation.width)
-+             x += value_h;
-+
-+           if (window_height > allocation.height)
-+             y += value_v;
-+
-+           if (hbar_rect)
-+             {
-+               hbar_rect->x = 0;
-+               hbar_rect->y = y - priv->sb_padding;
-+               hbar_rect->width = viewport_width;
-+               hbar_rect->height = priv->sb_width + 2 * priv->sb_padding;
-+             }
-+
-+           if (hslider_rect)
-+             {
-+               hslider_rect->x = x;
-+               hslider_rect->y = y;
-+               hslider_rect->width = width;
-+               hslider_rect->height = priv->sb_width;
-+             }
-+         }
-+       else
-+         {
-+           if (hbar_rect)
-+             {
-+               hbar_rect->x = 0;
-+               hbar_rect->y = 0;
-+               hbar_rect->width = 0;
-+               hbar_rect->height = 0;
-+             }
-+
-+           if (hslider_rect)
-+             {
-+               hslider_rect->x = 0;
-+               hslider_rect->y = 0;
-+               hslider_rect->width = 0;
-+               hslider_rect->height = 0;
-+             }
-+         }
-+     }
-+}
-+
-+static gboolean
-+gtk_scrolled_window_child_expose (GtkWidget         *widget,
-+                                  GdkEventExpose    *eevent,
-+                                  GtkScrolledWindow *scrolled_window)
-+{
-+   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+   GdkRectangle vbar_rect;
-+   GdkRectangle vslider_rect;
-+   GdkRectangle hbar_rect;
-+   GdkRectangle hslider_rect;
-+   cairo_t   *cr;
-+
-+   cr = gdk_cairo_create (eevent->window);
-+   gdk_cairo_region (cr, eevent->region);
-+   cairo_clip (cr);
-+
-+   gtk_scrolled_window_get_child_scroll_areas (scrolled_window,
-+                                               gtk_bin_get_child (GTK_BIN (scrolled_window)),
-+                                               eevent->window,
-+                                               &vbar_rect, &vslider_rect,
-+                                               &hbar_rect, &hslider_rect);
-+
-+   if (TRUE)
-+     {
-+       if (scrolled_window->vscrollbar && vbar_rect.width > 0)
-+         gdk_cairo_rectangle (cr, &vbar_rect);
-+
-+       if (scrolled_window->hscrollbar && hbar_rect.width > 0)
-+         gdk_cairo_rectangle (cr, &hbar_rect);
-+
-+       cairo_set_source_rgba (cr, 0, 0, 0, 0.2);
-+       cairo_fill (cr);
-+     }
-+
-+   if (scrolled_window->vscrollbar && vslider_rect.width > 0)
-+     gtk_scrolled_window_rounded_rectangle (cr,
-+                                            vslider_rect.x,
-+                                            vslider_rect.y,
-+                                            vslider_rect.width,
-+                                            vslider_rect.height,
-+                                            priv->sb_radius,
-+                                            priv->sb_radius);
-+
-+   if (scrolled_window->hscrollbar && hslider_rect.width > 0)
-+     gtk_scrolled_window_rounded_rectangle (cr,
-+                                            hslider_rect.x,
-+                                            hslider_rect.y,
-+                                            hslider_rect.width,
-+                                            hslider_rect.height,
-+                                            priv->sb_radius,
-+                                            priv->sb_radius);
-+
-+   cairo_set_source_rgba (cr, 0, 0, 0, gtk_adjustment_get_value (priv->opacity));
-+   cairo_fill (cr);
-+
-+   cairo_destroy (cr);
-+
-+   return FALSE;
-+}
-+
-+static void
-+gtk_scrolled_window_cancel_animation (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  GbAnimation *anim = priv->opacity_anim;
-+
-+  if (anim)
-+    {
-+      priv->opacity_anim = NULL;
-+      g_object_remove_weak_pointer (G_OBJECT (anim),
-+                                    (gpointer *) &priv->opacity_anim);
-+      _gb_animation_stop (anim);
-+    }
-+
-+  if (priv->sb_fade_out_id)
-+    {
-+      g_source_remove (priv->sb_fade_out_id);
-+      priv->sb_fade_out_id = 0;
-+    }
-+
-+  priv->sb_fading_in = FALSE;
-+}
-+
-+static gboolean
-+gtk_scrolled_window_fade_out_timeout (GtkScrolledWindow *scrolled_window)
-+{
-+  gtk_scrolled_window_start_fade_out_animation (scrolled_window);
-+
-+  return FALSE;
-+}
-+
-+static void
-+gtk_scrolled_window_start_fade_in_animation (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  gdouble upper;
-+
-+  if (priv->sb_fading_in)
-+    return;
-+
-+  gtk_scrolled_window_cancel_animation (scrolled_window);
-+
-+  priv->sb_fading_in = TRUE;
-+
-+  upper = gtk_adjustment_get_upper (priv->opacity);
-+  priv->opacity_anim = _gb_object_animate (priv->opacity,
-+                                           GB_ANIMATION_EASE_OUT_QUAD,
-+                                           100,
-+                                           "value", upper,
-+                                           NULL);
-+  g_object_add_weak_pointer (G_OBJECT (priv->opacity_anim),
-+                             (gpointer *) &priv->opacity_anim);
-+
-+  priv->sb_fade_out_id =
-+    gdk_threads_add_timeout (priv->sb_fade_out_delay,
-+                             (GSourceFunc) gtk_scrolled_window_fade_out_timeout,
-+                             scrolled_window);
-+}
-+
-+static void
-+gtk_scrolled_window_start_fade_out_animation (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  gtk_scrolled_window_cancel_animation (scrolled_window);
-+
-+  priv->opacity_anim = _gb_object_animate (priv->opacity,
-+                                           GB_ANIMATION_EASE_IN_QUAD,
-+                                           300,
-+                                           "value", 0.0,
-+                                           NULL);
-+  g_object_add_weak_pointer (G_OBJECT (priv->opacity_anim),
-+                             (gpointer *) &priv->opacity_anim);
-+}
-+
-+static void
-+gtk_scrolled_window_expose_scrollbars (GtkAdjustment     *adj,
-+                                       GtkScrolledWindow *scrolled_window)
-+{
-+  GtkWidget *child = gtk_bin_get_child (GTK_BIN (scrolled_window));
-+
-+  if (child && gtk_widget_get_visible (child))
-+    {
-+      GtkAllocation alloc;
-+
-+      gtk_widget_get_allocation (child, &alloc);
-+
-+      if (scrolled_window->vscrollbar)
-+        gtk_widget_queue_draw_area (child,
-+                                    alloc.width - 20,
-+                                    0,
-+                                    20,
-+                                    alloc.height);
-+
-+      if (scrolled_window->hscrollbar)
-+        gtk_widget_queue_draw_area (child,
-+                                    0,
-+                                    alloc.height - 20,
-+                                    alloc.width,
-+                                    20);
-+    }
-+}
-+
- #define __GTK_SCROLLED_WINDOW_C__
- #include "gtkaliasdef.c"
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0014-gtk-add-event-handling-to-GtkScrolledWindow-s-overla.patch b/bockbuild/mac-sdk/patches/gtk/0014-gtk-add-event-handling-to-GtkScrolledWindow-s-overla.patch
deleted file mode 100644 (file)
index 62acd57..0000000
+++ /dev/null
@@ -1,613 +0,0 @@
-From 713b51c19644653815b8ff1cd629d706f1074043 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Tue, 10 Jul 2012 14:33:45 +0200
-Subject: [PATCH 14/68] gtk: add event handling to GtkScrolledWindow's overlay
- scrollbars
-
----
- gtk/gtkscrolledwindow.c |  438 +++++++++++++++++++++++++++++++++++++++++++----
- 1 file changed, 403 insertions(+), 35 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 77d485f..70de6ec 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -84,6 +84,10 @@
- #define OVERSHOOT_INVERSE_ACCELERATION 0.003
- #define RELEASE_EVENT_TIMEOUT 1000
-
-+/* Overlay scrollbars */
-+#define SCROLL_INTERVAL_INITIAL 300
-+#define SCROLL_INTERVAL_REPEAT 100
-+
- typedef struct {
-   gboolean window_placement_set;
-   GtkCornerType real_window_placement;
-@@ -123,6 +127,19 @@ typedef struct {
-   gboolean       sb_fading_in;
-   gint           sb_fade_out_delay;
-   guint          sb_fade_out_id;
-+
-+  gboolean       sb_hovering;
-+  gboolean       sb_pointer_grabbed;
-+  gboolean       sb_grab_vscroll;
-+  gboolean       sb_grab_hscroll;
-+  gboolean       sb_drag_slider;
-+  gboolean       sb_visible;
-+
-+  gint           sb_grab_offset_x;
-+  gint           sb_grab_offset_y;
-+
-+  gint           sb_scroll_direction;
-+  guint          sb_scroll_timeout_id;
- } GtkScrolledWindowPrivate;
-
- #define GTK_SCROLLED_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowPrivate))
-@@ -219,8 +236,24 @@ static gboolean _gtk_scrolled_window_set_adjustment_value      (GtkScrolledWindo
-                                                                 gboolean           snap_to_border);
-
- static void gtk_scrolled_window_cancel_animation         (GtkScrolledWindow *scrolled_window);
-+static void gtk_scrolled_window_start_fade_out_timeout (GtkScrolledWindow *scrolled_window);
-+static void gtk_scrolled_window_stop_fade_out_timeout (GtkScrolledWindow *scrolled_window);
- static void gtk_scrolled_window_start_fade_in_animation  (GtkScrolledWindow *scrolled_window);
- static void gtk_scrolled_window_start_fade_out_animation (GtkScrolledWindow *scrolled_window);
-+static gboolean
-+           gtk_scrolled_window_over_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-+                                                        GdkEvent          *event,
-+                                                        gint               x,
-+                                                        gint               y,
-+                                                        gboolean          *over_vscroll,
-+                                                        gboolean          *over_hscroll);
-+static void gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-+                                                        GtkWidget         *child,
-+                                                        GdkWindow         *child_window,
-+                                                        GdkRectangle      *vbar_rect,
-+                                                        GdkRectangle      *vslider_rect,
-+                                                        GdkRectangle      *hbar_rect,
-+                                                        GdkRectangle      *hslider_rect);
- static gboolean gtk_scrolled_window_child_expose (GtkWidget         *widget,
-                                                   GdkEventExpose    *eevent,
-                                                   GtkScrolledWindow *scrolled_window);
-@@ -2385,8 +2418,8 @@ gtk_scrolled_window_calculate_velocity (GtkScrolledWindow *scrolled_window,
- }
-
- static gboolean
--gtk_scrolled_window_captured_button_release (GtkWidget *widget,
--                                             GdkEvent  *event)
-+gtk_scrolled_window_captured_button_release_kinetic (GtkWidget *widget,
-+                                                     GdkEvent  *event)
- {
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   GtkScrolledWindowPrivate *priv;
-@@ -2462,8 +2495,8 @@ gtk_scrolled_window_captured_button_release (GtkWidget *widget,
- }
-
- static gboolean
--gtk_scrolled_window_captured_motion_notify (GtkWidget *widget,
--                                            GdkEvent  *event)
-+gtk_scrolled_window_captured_motion_notify_kinetic (GtkWidget *widget,
-+                                                    GdkEvent  *event)
- {
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   GtkScrolledWindowPrivate *priv;
-@@ -2554,8 +2587,8 @@ gtk_scrolled_window_captured_motion_notify (GtkWidget *widget,
- }
-
- static gboolean
--gtk_scrolled_window_captured_button_press (GtkWidget *widget,
--                                           GdkEvent  *event)
-+gtk_scrolled_window_captured_button_press_kinetic (GtkWidget *widget,
-+                                                   GdkEvent  *event)
- {
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   GtkScrolledWindowPrivate *priv;
-@@ -2633,29 +2666,283 @@ gtk_scrolled_window_captured_button_press (GtkWidget *widget,
-     return FALSE;
- }
-
-+static void
-+gtk_scrolled_window_scroll_step (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  GtkAdjustment *adj;
-+  gdouble value;
-+
-+  if (priv->sb_grab_vscroll)
-+    {
-+      adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+    }
-+  else if (priv->sb_grab_hscroll)
-+    {
-+      adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-+    }
-+
-+  value = adj->value + (priv->sb_scroll_direction * adj->page_size);
-+  value = CLAMP (value, adj->lower, adj->upper - adj->page_size);
-+
-+  gtk_adjustment_set_value (adj, value);
-+}
-+
-+static gboolean
-+gtk_scrolled_window_scroll_step_timeout (gpointer data)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (data);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  gtk_scrolled_window_scroll_step (scrolled_window);
-+
-+  g_source_remove (priv->sb_scroll_timeout_id);
-+
-+  priv->sb_scroll_timeout_id =
-+    gdk_threads_add_timeout (SCROLL_INTERVAL_REPEAT,
-+                             gtk_scrolled_window_scroll_step_timeout,
-+                             scrolled_window);
-+
-+  return FALSE;
-+}
-+
-+static gboolean
-+gtk_scrolled_window_captured_button_press_scrollbar (GtkWidget *widget,
-+                                                     GdkEvent  *event)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  GdkEventButton *bevent = (GdkEventButton *) event;
-+
-+  if (bevent->button != 1)
-+    return FALSE;
-+
-+  if (gtk_scrolled_window_over_child_scroll_areas (scrolled_window, event,
-+                                                   bevent->x, bevent->y,
-+                                                   &priv->sb_grab_vscroll,
-+                                                   &priv->sb_grab_hscroll))
-+    {
-+      GdkRectangle vbar_rect;
-+      GdkRectangle vslider_rect;
-+      GdkRectangle hbar_rect;
-+      GdkRectangle hslider_rect;
-+
-+      priv->sb_pointer_grabbed = TRUE;
-+      gtk_grab_add (widget);
-+
-+      gtk_scrolled_window_get_child_scroll_areas (scrolled_window,
-+                                                  gtk_bin_get_child (GTK_BIN (widget)),
-+                                                  bevent->window,
-+                                                  &vbar_rect, &vslider_rect,
-+                                                  &hbar_rect, &hslider_rect);
-+
-+      if (priv->sb_grab_vscroll)
-+        {
-+          /* we consider the entire width of the scrollbar clickable */
-+          vslider_rect.x = vbar_rect.x;
-+          vslider_rect.width = vbar_rect.width;
-+
-+          if (bevent->x >= vslider_rect.x &&
-+              bevent->x < (vslider_rect.x + vslider_rect.width) &&
-+              bevent->y >= vslider_rect.y &&
-+              bevent->y < (vslider_rect.y + vslider_rect.height))
-+            {
-+              priv->sb_drag_slider = TRUE;
-+              priv->sb_grab_offset_y = bevent->y - vslider_rect.y;
-+            }
-+          else
-+            {
-+              priv->sb_drag_slider = FALSE;
-+              priv->sb_grab_offset_y = bevent->y - vbar_rect.y;
-+
-+              if (bevent->y < vslider_rect.y)
-+                priv->sb_scroll_direction = -1;
-+              else
-+                priv->sb_scroll_direction = 1;
-+            }
-+        }
-+      else if (priv->sb_grab_hscroll)
-+        {
-+          /* we consider the entire height of the scrollbar clickable */
-+          hslider_rect.y = hbar_rect.y;
-+          hslider_rect.height = hbar_rect.height;
-+
-+          if (bevent->x >= hslider_rect.x &&
-+              bevent->x < (hslider_rect.x + hslider_rect.width) &&
-+              bevent->y >= hslider_rect.y &&
-+              bevent->y < (hslider_rect.y + hslider_rect.height))
-+            {
-+              priv->sb_drag_slider = TRUE;
-+              priv->sb_grab_offset_x = bevent->x - hslider_rect.x;
-+            }
-+          else
-+            {
-+              priv->sb_drag_slider = FALSE;
-+              priv->sb_grab_offset_x = bevent->x - hbar_rect.x;
-+
-+              if (bevent->x < hslider_rect.x)
-+                priv->sb_scroll_direction = -1;
-+              else
-+                priv->sb_scroll_direction = 1;
-+            }
-+        }
-+
-+      if ((priv->sb_grab_vscroll || priv->sb_grab_hscroll) &&
-+          !priv->sb_drag_slider)
-+        {
-+          gtk_scrolled_window_scroll_step (scrolled_window);
-+
-+          priv->sb_scroll_timeout_id =
-+            gdk_threads_add_timeout (SCROLL_INTERVAL_INITIAL,
-+                                     gtk_scrolled_window_scroll_step_timeout,
-+                                     scrolled_window);
-+        }
-+
-+      return TRUE;
-+    }
-+
-+  return FALSE;
-+}
-+
-+static gboolean
-+gtk_scrolled_window_captured_button_release_scrollbar (GtkWidget *widget,
-+                                                       GdkEvent  *event)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  GdkEventButton *bevent = (GdkEventButton *) event;
-+
-+  if (bevent->button != 1)
-+    return FALSE;
-+
-+  gtk_grab_remove (widget);
-+  priv->sb_pointer_grabbed = FALSE;
-+
-+  if (priv->sb_scroll_timeout_id)
-+    {
-+      g_source_remove (priv->sb_scroll_timeout_id);
-+      priv->sb_scroll_timeout_id = 0;
-+    }
-+
-+  return TRUE;
-+}
-+
-+static gboolean
-+gtk_scrolled_window_captured_motion_notify_scrollbar (GtkWidget *widget,
-+                                                      GdkEvent  *event)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  GdkEventMotion *mevent = (GdkEventMotion *) event;
-+
-+  if (priv->sb_pointer_grabbed)
-+    {
-+      if (priv->sb_drag_slider)
-+        {
-+          GdkRectangle vbar_rect;
-+          GdkRectangle vslider_rect;
-+          GdkRectangle hbar_rect;
-+          GdkRectangle hslider_rect;
-+          GtkAdjustment *adj;
-+          gint pos;
-+          gint visible_range;
-+          gdouble value;
-+
-+          gtk_scrolled_window_get_child_scroll_areas (scrolled_window,
-+                                                      gtk_bin_get_child (GTK_BIN (widget)),
-+                                                      mevent->window,
-+                                                      &vbar_rect, &vslider_rect,
-+                                                      &hbar_rect, &hslider_rect);
-+
-+          if (priv->sb_grab_vscroll)
-+            {
-+              adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+              pos = mevent->y - priv->sb_grab_offset_y - vbar_rect.y;
-+              visible_range = vbar_rect.height - vslider_rect.height;
-+            }
-+          else if (priv->sb_grab_hscroll)
-+            {
-+              adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-+              pos = mevent->x - priv->sb_grab_offset_x - hbar_rect.x;
-+              visible_range = hbar_rect.width - hslider_rect.width;
-+            }
-+
-+          pos = CLAMP (pos, 0, visible_range);
-+
-+          value = (adj->upper - adj->page_size - adj->lower) * pos / visible_range;
-+
-+          gtk_adjustment_set_value (adj, value);
-+        }
-+
-+      return TRUE;
-+    }
-+  else
-+    {
-+      if (gtk_scrolled_window_over_child_scroll_areas (scrolled_window, event,
-+                                                       mevent->x, mevent->y,
-+                                                       NULL, NULL))
-+        {
-+          priv->sb_hovering = TRUE;
-+          priv->sb_visible = TRUE;
-+
-+          gtk_scrolled_window_start_fade_in_animation (scrolled_window);
-+          gtk_scrolled_window_stop_fade_out_timeout (scrolled_window);
-+
-+          /* needed when entering the scrollbar */
-+          gtk_scrolled_window_expose_scrollbars (NULL, scrolled_window);
-+
-+          return TRUE;
-+        }
-+
-+      priv->sb_hovering = FALSE;
-+
-+      if (priv->sb_visible || gtk_adjustment_get_value (priv->opacity) > 0.0)
-+        {
-+          /* keep visible scrollbars visible while the mouse is moving */
-+          gtk_scrolled_window_start_fade_in_animation (scrolled_window);
-+          gtk_scrolled_window_stop_fade_out_timeout (scrolled_window);
-+          gtk_scrolled_window_start_fade_out_timeout (scrolled_window);
-+        }
-+
-+      return FALSE;
-+    }
-+}
-+
- static gboolean
- gtk_scrolled_window_captured_event (GtkWidget *widget,
-                                     GdkEvent  *event)
- {
--  gboolean retval = FALSE;
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (widget);
-+  gboolean retval = FALSE;
-
-   switch (event->type)
-     {
-     case GDK_BUTTON_PRESS:
--      retval = gtk_scrolled_window_captured_button_press (widget, event);
-+      retval = gtk_scrolled_window_captured_button_press_scrollbar (widget, event);
-+      if (!retval)
-+        retval = gtk_scrolled_window_captured_button_press_kinetic (widget, event);
-       break;
-     case GDK_BUTTON_RELEASE:
--      if (priv->pointer_grabbed)
--        retval = gtk_scrolled_window_captured_button_release (widget, event);
-+      if (priv->sb_pointer_grabbed)
-+        retval = gtk_scrolled_window_captured_button_release_scrollbar (widget, event);
-+      else if (priv->pointer_grabbed)
-+        retval = gtk_scrolled_window_captured_button_release_kinetic (widget, event);
-       else
-         priv->last_button_event_valid = FALSE;
-       break;
-     case GDK_MOTION_NOTIFY:
--      if (priv->pointer_grabbed)
--        retval = gtk_scrolled_window_captured_motion_notify (widget, event);
-+      if (priv->sb_pointer_grabbed || !priv->pointer_grabbed)
-+        retval = gtk_scrolled_window_captured_motion_notify_scrollbar (widget, event);
-+      else if (priv->pointer_grabbed)
-+        retval = gtk_scrolled_window_captured_motion_notify_kinetic (widget, event);
-       break;
-     case GDK_LEAVE_NOTIFY:
-+      if (!priv->in_drag && !priv->sb_pointer_grabbed)
-+        {
-+          gtk_scrolled_window_start_fade_out_timeout (scrolled_window);
-+          priv->sb_hovering = FALSE;
-+        }
-     case GDK_ENTER_NOTIFY:
-       if (priv->in_drag &&
-           event->crossing.mode != GDK_CROSSING_GRAB)
-@@ -3016,6 +3303,17 @@ gtk_scrolled_window_grab_notify (GtkWidget *widget,
-
-       priv->last_button_event_valid = FALSE;
-     }
-+
-+  if (priv->sb_pointer_grabbed && !was_grabbed)
-+    {
-+      priv->sb_pointer_grabbed = FALSE;
-+
-+      if (priv->sb_scroll_timeout_id)
-+        {
-+          g_source_remove (priv->sb_scroll_timeout_id);
-+          priv->sb_scroll_timeout_id = 0;
-+        }
-+    }
- }
-
- static void
-@@ -3057,6 +3355,56 @@ gtk_scrolled_window_rounded_rectangle (cairo_t *cr,
-   cairo_close_path (cr);
- }
-
-+static gboolean
-+gtk_scrolled_window_over_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-+                                             GdkEvent          *event,
-+                                             gint               x,
-+                                             gint               y,
-+                                             gboolean          *over_vscroll,
-+                                             gboolean          *over_hscroll)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  GtkWidget *child;
-+  GdkRectangle vbar_rect;
-+  GdkRectangle hbar_rect;
-+  gboolean over_v = FALSE;
-+  gboolean over_h = FALSE;
-+
-+  child = gtk_bin_get_child (GTK_BIN (scrolled_window));
-+  if (!child)
-+    return FALSE;
-+
-+  if (gtk_get_event_widget (event) != child)
-+    return FALSE;
-+
-+  if (gtk_adjustment_get_value (priv->opacity) == 0.0)
-+    return FALSE;
-+
-+  gtk_scrolled_window_get_child_scroll_areas (scrolled_window,
-+                                              child,
-+                                              ((GdkEventAny *) event)->window,
-+                                              &vbar_rect, NULL,
-+                                              &hbar_rect, NULL);
-+
-+  if (vbar_rect.width > 0 &&
-+      x >= vbar_rect.x && x < (vbar_rect.x + vbar_rect.width) &&
-+      y >= vbar_rect.y && y < (vbar_rect.y + vbar_rect.height))
-+    {
-+      over_v = TRUE;
-+    }
-+  else if (hbar_rect.width > 0 &&
-+           x >= hbar_rect.x && x < (hbar_rect.x + hbar_rect.width) &&
-+           y >= hbar_rect.y && y < (hbar_rect.y + hbar_rect.height))
-+    {
-+      over_h = TRUE;
-+    }
-+
-+  if (over_vscroll) *over_vscroll = over_v;
-+  if (over_hscroll) *over_hscroll = over_h;
-+
-+  return over_v || over_h;
-+}
-+
- static void
- gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-                                             GtkWidget         *child,
-@@ -3083,6 +3431,8 @@ gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-    gint window_height;
-    gint viewport_width;
-    gint viewport_height;
-+   gint offset_x = 0;
-+   gint offset_y = 0;
-
-    window_width = gdk_window_get_width (child_window);
-    window_height = gdk_window_get_height (child_window);
-@@ -3106,6 +3456,12 @@ gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-        value_h = gtk_adjustment_get_value (adj);
-      }
-
-+   if (window_width > allocation.width)
-+     offset_x = value_h;
-+
-+   if (window_height > allocation.height)
-+     offset_y = value_v;
-+
-    if ((vbar_rect || vslider_rect) && scrolled_window->vscrollbar)
-      {
-        adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-@@ -3127,16 +3483,13 @@ gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-            y = ratio * (viewport_height - (2 * priv->sb_padding) - height) + priv->sb_padding;
-            x = viewport_width - priv->sb_width - priv->sb_padding;
-
--           if (window_width > allocation.width)
--             x += value_h;
--
--           if (window_height > allocation.height)
--             y += value_v;
-+           x += offset_x;
-+           y += offset_y;
-
-            if (vbar_rect)
-              {
-                vbar_rect->x = x - priv->sb_padding;
--               vbar_rect->y = 0;
-+               vbar_rect->y = offset_y;
-                vbar_rect->width = priv->sb_width + 2 * priv->sb_padding;
-                vbar_rect->height = viewport_height;
-              }
-@@ -3190,15 +3543,12 @@ gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-            x = ratio * (viewport_width - (2 * priv->sb_padding) - width) + priv->sb_padding;
-            y = viewport_height - priv->sb_width - priv->sb_padding;
-
--           if (window_width > allocation.width)
--             x += value_h;
--
--           if (window_height > allocation.height)
--             y += value_v;
-+           x += offset_x;
-+           y += offset_y;
-
-            if (hbar_rect)
-              {
--               hbar_rect->x = 0;
-+               hbar_rect->x = offset_x;
-                hbar_rect->y = y - priv->sb_padding;
-                hbar_rect->width = viewport_width;
-                hbar_rect->height = priv->sb_width + 2 * priv->sb_padding;
-@@ -3255,7 +3605,7 @@ gtk_scrolled_window_child_expose (GtkWidget         *widget,
-                                                &vbar_rect, &vslider_rect,
-                                                &hbar_rect, &hslider_rect);
-
--   if (TRUE)
-+   if (priv->sb_visible)
-      {
-        if (scrolled_window->vscrollbar && vbar_rect.width > 0)
-          gdk_cairo_rectangle (cr, &vbar_rect);
-@@ -3263,7 +3613,7 @@ gtk_scrolled_window_child_expose (GtkWidget         *widget,
-        if (scrolled_window->hscrollbar && hbar_rect.width > 0)
-          gdk_cairo_rectangle (cr, &hbar_rect);
-
--       cairo_set_source_rgba (cr, 0, 0, 0, 0.2);
-+       cairo_set_source_rgba (cr, 0, 0, 0, gtk_adjustment_get_value (priv->opacity) / 2.0);
-        cairo_fill (cr);
-      }
-
-@@ -3307,11 +3657,7 @@ gtk_scrolled_window_cancel_animation (GtkScrolledWindow *scrolled_window)
-       _gb_animation_stop (anim);
-     }
-
--  if (priv->sb_fade_out_id)
--    {
--      g_source_remove (priv->sb_fade_out_id);
--      priv->sb_fade_out_id = 0;
--    }
-+  gtk_scrolled_window_stop_fade_out_timeout (scrolled_window);
-
-   priv->sb_fading_in = FALSE;
- }
-@@ -3325,6 +3671,30 @@ gtk_scrolled_window_fade_out_timeout (GtkScrolledWindow *scrolled_window)
- }
-
- static void
-+gtk_scrolled_window_start_fade_out_timeout (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  if (! priv->sb_fade_out_id)
-+    priv->sb_fade_out_id =
-+      gdk_threads_add_timeout (priv->sb_fade_out_delay,
-+                               (GSourceFunc) gtk_scrolled_window_fade_out_timeout,
-+                               scrolled_window);
-+}
-+
-+static void
-+gtk_scrolled_window_stop_fade_out_timeout (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  if (priv->sb_fade_out_id)
-+    {
-+      g_source_remove (priv->sb_fade_out_id);
-+      priv->sb_fade_out_id = 0;
-+    }
-+}
-+
-+static void
- gtk_scrolled_window_start_fade_in_animation (GtkScrolledWindow *scrolled_window)
- {
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-@@ -3336,6 +3706,7 @@ gtk_scrolled_window_start_fade_in_animation (GtkScrolledWindow *scrolled_window)
-   gtk_scrolled_window_cancel_animation (scrolled_window);
-
-   priv->sb_fading_in = TRUE;
-+  priv->sb_visible = priv->sb_hovering;
-
-   upper = gtk_adjustment_get_upper (priv->opacity);
-   priv->opacity_anim = _gb_object_animate (priv->opacity,
-@@ -3346,10 +3717,7 @@ gtk_scrolled_window_start_fade_in_animation (GtkScrolledWindow *scrolled_window)
-   g_object_add_weak_pointer (G_OBJECT (priv->opacity_anim),
-                              (gpointer *) &priv->opacity_anim);
-
--  priv->sb_fade_out_id =
--    gdk_threads_add_timeout (priv->sb_fade_out_delay,
--                             (GSourceFunc) gtk_scrolled_window_fade_out_timeout,
--                             scrolled_window);
-+  gtk_scrolled_window_start_fade_out_timeout (scrolled_window);
- }
-
- static void
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0015-Use-gtk-enable-overlay-scrollbars-in-GtkScrolledWind.patch b/bockbuild/mac-sdk/patches/gtk/0015-Use-gtk-enable-overlay-scrollbars-in-GtkScrolledWind.patch
deleted file mode 100644 (file)
index 06a2fc7..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-From eea6eef69858ff65ff8ccf46bb640bcc0580f592 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Sun, 29 Jul 2012 16:14:09 +0200
-Subject: [PATCH 15/68] Use gtk-enable-overlay-scrollbars in GtkScrolledWindow
-
-And listen for changes to this setting.  Move overlay_scrollbars variable
-to GtkScrolledWindowPrivate, because we are going to have to monitor for
-each scrolled window whether it has transformed itself in response to the
-signal.
----
- gtk/gtkscrolledwindow.c |   97 +++++++++++++++++++++++++++++++++++------------
- 1 file changed, 72 insertions(+), 25 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 70de6ec..3220e91 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -140,6 +140,8 @@ typedef struct {
-
-   gint           sb_scroll_direction;
-   guint          sb_scroll_timeout_id;
-+
-+  gboolean       overlay_scrollbars;
- } GtkScrolledWindowPrivate;
-
- #define GTK_SCROLLED_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowPrivate))
-@@ -260,12 +262,14 @@ static gboolean gtk_scrolled_window_child_expose (GtkWidget         *widget,
- static void  gtk_scrolled_window_expose_scrollbars (GtkAdjustment     *adj,
-                                                     GtkScrolledWindow *scrolled_window);
-
-+static void gtk_scrolled_window_overlay_scrollbars_changed (GtkSettings *settings,
-+                                                            GParamSpec  *arg,
-+                                                            gpointer     user_data);
-+
- static guint signals[LAST_SIGNAL] = {0};
-
- G_DEFINE_TYPE (GtkScrolledWindow, gtk_scrolled_window, GTK_TYPE_BIN)
-
--static gboolean overlay_scrollbars = TRUE;
--
- static void
- add_scroll_binding (GtkBindingSet  *binding_set,
-                   guint           keyval,
-@@ -501,6 +505,7 @@ static void
- gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
- {
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  GtkSettings *settings;
-
-   gtk_widget_set_has_window (GTK_WIDGET (scrolled_window), FALSE);
-   gtk_widget_set_can_focus (GTK_WIDGET (scrolled_window), TRUE);
-@@ -515,13 +520,22 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
-   scrolled_window->window_placement = GTK_CORNER_TOP_LEFT;
-   gtk_scrolled_window_update_real_placement (scrolled_window);
-
-+  settings = gtk_widget_get_settings (GTK_WIDGET (scrolled_window));
-+  g_object_get (settings,
-+                "gtk-enable-overlay-scrollbars",
-+                &priv->overlay_scrollbars,
-+                NULL);
-+  g_signal_connect (settings, "notify::gtk-enable-overlay-scrollbars",
-+                    G_CALLBACK (gtk_scrolled_window_overlay_scrollbars_changed),
-+                    scrolled_window);
-+
-   if (g_getenv ("GTK2_KINETIC_SCROLLING"))
-     {
-       gtk_scrolled_window_set_kinetic_scrolling (scrolled_window, TRUE);
-       gtk_scrolled_window_set_capture_button_press (scrolled_window, TRUE);
-     }
-
--  if (overlay_scrollbars)
-+  if (priv->overlay_scrollbars)
-     {
-       priv->opacity = g_object_new (GTK_TYPE_ADJUSTMENT,
-                                     "lower", 0.0,
-@@ -586,6 +600,7 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-                                    GtkAdjustment     *hadjustment)
- {
-   GtkBin *bin;
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
-   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
-   if (hadjustment)
-@@ -618,7 +633,7 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
-
--      if (overlay_scrollbars)
-+      if (priv->overlay_scrollbars)
-         {
-           g_signal_handlers_disconnect_by_func (old_adjustment,
-                                                 gtk_scrolled_window_adjustment_value_changed,
-@@ -643,7 +658,7 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-   gtk_scrolled_window_adjustment_changed (hadjustment, scrolled_window);
-   gtk_scrolled_window_adjustment_value_changed (hadjustment, scrolled_window);
-
--  if (overlay_scrollbars)
-+  if (priv->overlay_scrollbars)
-     {
-       g_signal_connect (hadjustment, "value-changed",
-                         G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
-@@ -677,6 +692,7 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-                                    GtkAdjustment     *vadjustment)
- {
-   GtkBin *bin;
-+  GtkScrolledWindowPrivate *priv;
-
-   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
-   if (vadjustment)
-@@ -685,6 +701,7 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-     vadjustment = (GtkAdjustment*) g_object_new (GTK_TYPE_ADJUSTMENT, NULL);
-
-   bin = GTK_BIN (scrolled_window);
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
-   if (!scrolled_window->vscrollbar)
-     {
-@@ -709,7 +726,7 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
-
--      if (overlay_scrollbars)
-+      if (priv->overlay_scrollbars)
-         {
-           g_signal_handlers_disconnect_by_func (old_adjustment,
-                                                 gtk_scrolled_window_adjustment_value_changed,
-@@ -734,7 +751,7 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-   gtk_scrolled_window_adjustment_changed (vadjustment, scrolled_window);
-   gtk_scrolled_window_adjustment_value_changed (vadjustment, scrolled_window);
-
--  if (overlay_scrollbars)
-+  if (priv->overlay_scrollbars)
-     {
-       g_signal_connect (vadjustment,
-                         "value-changed",
-@@ -1208,7 +1225,7 @@ gtk_scrolled_window_destroy (GtkObject *object)
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
-
--      if (overlay_scrollbars)
-+      if (priv->overlay_scrollbars)
-         {
-           g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-                                                 gtk_scrolled_window_adjustment_value_changed,
-@@ -1229,7 +1246,7 @@ gtk_scrolled_window_destroy (GtkObject *object)
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
-
--      if (overlay_scrollbars)
-+      if (priv->overlay_scrollbars)
-         {
-           g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
-                                                 gtk_scrolled_window_adjustment_value_changed,
-@@ -1245,6 +1262,10 @@ gtk_scrolled_window_destroy (GtkObject *object)
-       scrolled_window->vscrollbar = NULL;
-     }
-
-+  g_signal_handlers_disconnect_by_func (gtk_widget_get_settings (GTK_WIDGET (scrolled_window)),
-+                                        G_CALLBACK (gtk_scrolled_window_overlay_scrollbars_changed),
-+                                        scrolled_window);
-+
-   if (priv->release_timeout_id)
-     {
-       g_source_remove (priv->release_timeout_id);
-@@ -1641,12 +1662,14 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-   GtkRequisition hscrollbar_requisition;
-   GtkRequisition vscrollbar_requisition;
-   GtkRequisition child_requisition;
-+  GtkScrolledWindowPrivate *priv;
-
-   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget));
-   g_return_if_fail (requisition != NULL);
-
-   scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   bin = GTK_BIN (scrolled_window);
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
-   scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
-
-@@ -1666,7 +1689,7 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-
-       if (scrolled_window->hscrollbar_policy == GTK_POLICY_NEVER)
-       requisition->width += child_requisition.width;
--      else if (! overlay_scrollbars)
-+      else if (! priv->overlay_scrollbars)
-       {
-         GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
-
-@@ -1681,7 +1704,7 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-
-       if (scrolled_window->vscrollbar_policy == GTK_POLICY_NEVER)
-       requisition->height += child_requisition.height;
--      else if (! overlay_scrollbars)
-+      else if (! priv->overlay_scrollbars)
-       {
-         GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
-
-@@ -1695,7 +1718,7 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-       }
-     }
-
--  if (! overlay_scrollbars)
-+  if (! priv->overlay_scrollbars)
-     {
-       if (scrolled_window->hscrollbar_policy == GTK_POLICY_AUTOMATIC ||
-           scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
-@@ -1752,7 +1775,7 @@ gtk_scrolled_window_relative_allocation (GtkWidget     *widget,
-   allocation->width = MAX (1, (gint)widget->allocation.width - allocation->x * 2);
-   allocation->height = MAX (1, (gint)widget->allocation.height - allocation->y * 2);
-
--  if (overlay_scrollbars)
-+  if (priv->overlay_scrollbars)
-     return;
-
-   if (scrolled_window->vscrollbar_visible)
-@@ -1909,16 +1932,15 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   g_return_if_fail (allocation != NULL);
-
-   scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-   bin = GTK_BIN (scrolled_window);
-
--  if (overlay_scrollbars)
-+  if (priv->overlay_scrollbars)
-     gtk_scrolled_window_expose_scrollbars (NULL, scrolled_window);
-
-   scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
-   gtk_widget_style_get (widget, "scrollbars-within-bevel", &scrollbars_within_bevel, NULL);
-
--  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--
-   widget->allocation = *allocation;
-
-   if (scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
-@@ -1972,7 +1994,7 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-       gtk_scrolled_window_relative_allocation (widget, &relative_allocation);
-     }
-
--  if (!overlay_scrollbars && scrolled_window->hscrollbar_visible)
-+  if (!priv->overlay_scrollbars && scrolled_window->hscrollbar_visible)
-     {
-       GtkRequisition hscrollbar_requisition;
-       gtk_widget_get_child_requisition (scrolled_window->hscrollbar,
-@@ -2020,7 +2042,7 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   else if (gtk_widget_get_visible (scrolled_window->hscrollbar))
-     gtk_widget_hide (scrolled_window->hscrollbar);
-
--  if (!overlay_scrollbars && scrolled_window->vscrollbar_visible)
-+  if (!priv->overlay_scrollbars && scrolled_window->vscrollbar_visible)
-     {
-       GtkRequisition vscrollbar_requisition;
-       if (!gtk_widget_get_visible (scrolled_window->vscrollbar))
-@@ -2080,6 +2102,7 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-                                 GdkEventScroll *event)
- {
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-   gboolean handled = FALSE;
-   gdouble delta_x;
-   gdouble delta_y;
-@@ -2090,7 +2113,7 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-   if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &delta_x, &delta_y))
-     {
-       if (delta_x != 0.0 && scrolled_window->hscrollbar &&
--          (overlay_scrollbars || gtk_widget_get_visible (scrolled_window->hscrollbar)))
-+          (priv->overlay_scrollbars || gtk_widget_get_visible (scrolled_window->hscrollbar)))
-         {
-           GtkAdjustment *adj;
-           gdouble new_value;
-@@ -2108,7 +2131,7 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-         }
-
-       if (delta_y != 0.0 && scrolled_window->vscrollbar &&
--          (overlay_scrollbars || gtk_widget_get_visible (scrolled_window->vscrollbar)))
-+          (priv->overlay_scrollbars || gtk_widget_get_visible (scrolled_window->vscrollbar)))
-         {
-           GtkAdjustment *adj;
-           gdouble new_value;
-@@ -2134,7 +2157,7 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-       else
-         range = scrolled_window->hscrollbar;
-
--      if (range && (overlay_scrollbars || gtk_widget_get_visible (range)))
-+      if (range && (priv->overlay_scrollbars || gtk_widget_get_visible (range)))
-         {
-           GtkAdjustment *adj = GTK_RANGE (range)->adjustment;
-           gdouble delta, new_value;
-@@ -2994,11 +3017,13 @@ gtk_scrolled_window_adjustment_changed (GtkAdjustment *adjustment,
-                                       gpointer       data)
- {
-   GtkScrolledWindow *scrolled_win;
-+  GtkScrolledWindowPrivate *priv;
-
-   g_return_if_fail (adjustment != NULL);
-   g_return_if_fail (data != NULL);
-
-   scrolled_win = GTK_SCROLLED_WINDOW (data);
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (data);
-
-   if (scrolled_win->hscrollbar &&
-       adjustment == gtk_range_get_adjustment (GTK_RANGE (scrolled_win->hscrollbar)))
-@@ -3029,7 +3054,7 @@ gtk_scrolled_window_adjustment_changed (GtkAdjustment *adjustment,
-       }
-     }
-
--  if (overlay_scrollbars)
-+  if (priv->overlay_scrollbars)
-     gtk_scrolled_window_start_fade_in_animation (scrolled_win);
- }
-
-@@ -3052,7 +3077,7 @@ gtk_scrolled_window_adjustment_value_changed (GtkAdjustment *adjustment,
-            adjustment == gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)))
-     priv->unclamped_hadj_value = gtk_adjustment_get_value (adjustment);
-
--  if (overlay_scrollbars)
-+  if (priv->overlay_scrollbars)
-     gtk_scrolled_window_start_fade_in_animation (scrolled_window);
- }
-
-@@ -3083,7 +3108,7 @@ gtk_scrolled_window_add (GtkContainer *container,
-     g_warning ("gtk_scrolled_window_add(): cannot add non scrollable widget "
-              "use gtk_scrolled_window_add_with_viewport() instead");
-
--  if (overlay_scrollbars)
-+  if (priv->overlay_scrollbars)
-     {
-       g_signal_connect_after (child, "expose-event",
-                               G_CALLBACK (gtk_scrolled_window_child_expose),
-@@ -3095,11 +3120,15 @@ static void
- gtk_scrolled_window_remove (GtkContainer *container,
-                           GtkWidget    *child)
- {
-+  GtkScrolledWindowPrivate *priv;
-+
-   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (container));
-   g_return_if_fail (child != NULL);
-   g_return_if_fail (GTK_BIN (container)->child == child);
-
--  if (overlay_scrollbars)
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (container);
-+
-+  if (priv->overlay_scrollbars)
-     {
-       g_signal_handlers_disconnect_by_func (child,
-                                             gtk_scrolled_window_child_expose,
-@@ -3764,5 +3793,23 @@ gtk_scrolled_window_expose_scrollbars (GtkAdjustment     *adj,
-     }
- }
-
-+static void
-+gtk_scrolled_window_overlay_scrollbars_changed (GtkSettings *settings,
-+                                                GParamSpec  *arg,
-+                                                gpointer     user_data)
-+{
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (user_data);
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (user_data);
-+
-+  /* FIXME: tear down/set up things to make the switch */
-+
-+  g_object_get (settings,
-+                "gtk-enable-overlay-scrollbars",
-+                &priv->overlay_scrollbars,
-+                NULL);
-+
-+  g_print ("enable-overlay-scrollbar is now: %d\n", priv->overlay_scrollbars);
-+}
-+
- #define __GTK_SCROLLED_WINDOW_C__
- #include "gtkaliasdef.c"
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0016-gtk-correctly-handle-toggling-of-the-scrollbar-visib.patch b/bockbuild/mac-sdk/patches/gtk/0016-gtk-correctly-handle-toggling-of-the-scrollbar-visib.patch
deleted file mode 100644 (file)
index d53385f..0000000
+++ /dev/null
@@ -1,386 +0,0 @@
-From 8d10b09aff0bc03c54c2f1899900cc062f36ad4b Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Thu, 16 Aug 2012 09:35:53 +0200
-Subject: [PATCH 16/68] gtk: correctly handle toggling of the scrollbar
- visibility setting
-
-By doing most things unconditionally, like connecting to signals
-and creating the opacity adjustment. Queue a resize when the
-setting changes so things get recalculated properly, and make
-sure the scrollbars get expose events if they are visible.
-Unrelated: don't leak the priv->opacity adjustment.
----
- gtk/gtkscrolledwindow.c |  244 +++++++++++++++++++++++------------------------
- 1 file changed, 119 insertions(+), 125 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 3220e91..7680f5d 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -529,29 +529,25 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
-                     G_CALLBACK (gtk_scrolled_window_overlay_scrollbars_changed),
-                     scrolled_window);
-
--  if (g_getenv ("GTK2_KINETIC_SCROLLING"))
--    {
--      gtk_scrolled_window_set_kinetic_scrolling (scrolled_window, TRUE);
--      gtk_scrolled_window_set_capture_button_press (scrolled_window, TRUE);
--    }
--
--  if (priv->overlay_scrollbars)
--    {
--      priv->opacity = g_object_new (GTK_TYPE_ADJUSTMENT,
--                                    "lower", 0.0,
--                                    "upper", 0.5,
--                                    "value", 0.0,
--                                    NULL);
--      priv->sb_min_height = 20;
--      priv->sb_padding = 2;
--      priv->sb_radius = 3;
--      priv->sb_width = 6;
--      priv->sb_fade_out_delay = 1000;
--
--      g_signal_connect (priv->opacity, "value-changed",
--                        G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
--                        scrolled_window);
--    }
-+  gtk_scrolled_window_set_kinetic_scrolling (scrolled_window, TRUE);
-+  gtk_scrolled_window_set_capture_button_press (scrolled_window, TRUE);
-+
-+  priv->opacity = g_object_new (GTK_TYPE_ADJUSTMENT,
-+                                "lower", 0.0,
-+                                "upper", 0.5,
-+                                "value", 0.0,
-+                                NULL);
-+  g_object_ref_sink (priv->opacity);
-+
-+  priv->sb_min_height = 20;
-+  priv->sb_padding = 2;
-+  priv->sb_radius = 3;
-+  priv->sb_width = 6;
-+  priv->sb_fade_out_delay = 1000;
-+
-+  g_signal_connect (priv->opacity, "value-changed",
-+                    G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
-+                    scrolled_window);
- }
-
- /**
-@@ -632,16 +628,12 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-       g_signal_handlers_disconnect_by_func (old_adjustment,
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
--
--      if (priv->overlay_scrollbars)
--        {
--          g_signal_handlers_disconnect_by_func (old_adjustment,
--                                                gtk_scrolled_window_adjustment_value_changed,
--                                                scrolled_window);
--          g_signal_handlers_disconnect_by_func (old_adjustment,
--                                                gtk_scrolled_window_expose_scrollbars,
--                                                scrolled_window);
--        }
-+      g_signal_handlers_disconnect_by_func (old_adjustment,
-+                                            gtk_scrolled_window_adjustment_value_changed,
-+                                            scrolled_window);
-+      g_signal_handlers_disconnect_by_func (old_adjustment,
-+                                            gtk_scrolled_window_expose_scrollbars,
-+                                            scrolled_window);
-
-       gtk_range_set_adjustment (GTK_RANGE (scrolled_window->hscrollbar),
-                               hadjustment);
-@@ -658,19 +650,18 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-   gtk_scrolled_window_adjustment_changed (hadjustment, scrolled_window);
-   gtk_scrolled_window_adjustment_value_changed (hadjustment, scrolled_window);
-
--  if (priv->overlay_scrollbars)
--    {
--      g_signal_connect (hadjustment, "value-changed",
--                        G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
--                        scrolled_window);
-+#if 0
-+  g_signal_connect (hadjustment, "value-changed",
-+                    G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
-+                    scrolled_window);
-+#endif
-
--      g_signal_connect (hadjustment, "changed",
--                        G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
--                        scrolled_window);
--      g_signal_connect (hadjustment, "value-changed",
--                        G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
--                        scrolled_window);
--    }
-+  g_signal_connect (hadjustment, "changed",
-+                    G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
-+                    scrolled_window);
-+  g_signal_connect (hadjustment, "value-changed",
-+                    G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
-+                    scrolled_window);
-
-   if (bin->child)
-     gtk_widget_set_scroll_adjustments (bin->child,
-@@ -725,16 +716,12 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-       g_signal_handlers_disconnect_by_func (old_adjustment,
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
--
--      if (priv->overlay_scrollbars)
--        {
--          g_signal_handlers_disconnect_by_func (old_adjustment,
--                                                gtk_scrolled_window_adjustment_value_changed,
--                                                scrolled_window);
--          g_signal_handlers_disconnect_by_func (old_adjustment,
--                                                gtk_scrolled_window_expose_scrollbars,
--                                                scrolled_window);
--        }
-+      g_signal_handlers_disconnect_by_func (old_adjustment,
-+                                            gtk_scrolled_window_adjustment_value_changed,
-+                                            scrolled_window);
-+      g_signal_handlers_disconnect_by_func (old_adjustment,
-+                                            gtk_scrolled_window_expose_scrollbars,
-+                                            scrolled_window);
-
-       gtk_range_set_adjustment (GTK_RANGE (scrolled_window->vscrollbar),
-                               vadjustment);
-@@ -751,20 +738,19 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-   gtk_scrolled_window_adjustment_changed (vadjustment, scrolled_window);
-   gtk_scrolled_window_adjustment_value_changed (vadjustment, scrolled_window);
-
--  if (priv->overlay_scrollbars)
--    {
--      g_signal_connect (vadjustment,
--                        "value-changed",
--                        G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
--                        scrolled_window);
-+#if 0
-+  g_signal_connect (vadjustment,
-+                    "value-changed",
-+                    G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
-+                    scrolled_window);
-+#endif
-
--      g_signal_connect (vadjustment, "changed",
--                        G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
--                        scrolled_window);
--      g_signal_connect (vadjustment, "value-changed",
--                        G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
--                        scrolled_window);
--    }
-+  g_signal_connect (vadjustment, "changed",
-+                    G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
-+                    scrolled_window);
-+  g_signal_connect (vadjustment, "value-changed",
-+                    G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
-+                    scrolled_window);
-
-   if (bin->child)
-     gtk_widget_set_scroll_adjustments (bin->child,
-@@ -1224,16 +1210,12 @@ gtk_scrolled_window_destroy (GtkObject *object)
-       g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
--
--      if (priv->overlay_scrollbars)
--        {
--          g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
--                                                gtk_scrolled_window_adjustment_value_changed,
--                                                scrolled_window);
--          g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
--                                                gtk_scrolled_window_expose_scrollbars,
--                                                scrolled_window);
--        }
-+      g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-+                                            gtk_scrolled_window_adjustment_value_changed,
-+                                            scrolled_window);
-+      g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-+                                            gtk_scrolled_window_expose_scrollbars,
-+                                            scrolled_window);
-
-       gtk_widget_unparent (scrolled_window->hscrollbar);
-       gtk_widget_destroy (scrolled_window->hscrollbar);
-@@ -1245,16 +1227,12 @@ gtk_scrolled_window_destroy (GtkObject *object)
-       g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
-                                           gtk_scrolled_window_adjustment_changed,
-                                           scrolled_window);
--
--      if (priv->overlay_scrollbars)
--        {
--          g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
--                                                gtk_scrolled_window_adjustment_value_changed,
--                                                scrolled_window);
--          g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
--                                                gtk_scrolled_window_expose_scrollbars,
--                                                scrolled_window);
--        }
-+      g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
-+                                            gtk_scrolled_window_adjustment_value_changed,
-+                                            scrolled_window);
-+      g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
-+                                            gtk_scrolled_window_expose_scrollbars,
-+                                            scrolled_window);
-
-       gtk_widget_unparent (scrolled_window->vscrollbar);
-       gtk_widget_destroy (scrolled_window->vscrollbar);
-@@ -1283,6 +1261,12 @@ gtk_scrolled_window_destroy (GtkObject *object)
-       priv->button_press_event = NULL;
-     }
-
-+  if (priv->opacity)
-+    {
-+      g_object_unref (priv->opacity);
-+      priv->opacity = NULL;
-+    }
-+
-   GTK_OBJECT_CLASS (gtk_scrolled_window_parent_class)->destroy (object);
- }
-
-@@ -1482,11 +1466,23 @@ static gboolean
- gtk_scrolled_window_expose (GtkWidget      *widget,
-                           GdkEventExpose *event)
- {
-+  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (widget);
-
-   if (gtk_widget_is_drawable (widget))
-     {
--      if (event->window == priv->overshoot_window)
-+      GdkWindow *hscrollbar_window = NULL;
-+      GdkWindow *vscrollbar_window = NULL;
-+
-+      if (scrolled_window->hscrollbar)
-+        hscrollbar_window = gtk_widget_get_window (scrolled_window->hscrollbar);
-+
-+      if (scrolled_window->vscrollbar)
-+        vscrollbar_window = gtk_widget_get_window (scrolled_window->vscrollbar);
-+
-+      if (event->window == priv->overshoot_window ||
-+          event->window == hscrollbar_window ||
-+          event->window == vscrollbar_window)
-         GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->expose_event (widget, event);
-       else
-         gtk_scrolled_window_paint (widget, &event->area);
-@@ -1935,8 +1931,7 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-   bin = GTK_BIN (scrolled_window);
-
--  if (priv->overlay_scrollbars)
--    gtk_scrolled_window_expose_scrollbars (NULL, scrolled_window);
-+  gtk_scrolled_window_expose_scrollbars (NULL, scrolled_window);
-
-   scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
-   gtk_widget_style_get (widget, "scrollbars-within-bevel", &scrollbars_within_bevel, NULL);
-@@ -3108,12 +3103,9 @@ gtk_scrolled_window_add (GtkContainer *container,
-     g_warning ("gtk_scrolled_window_add(): cannot add non scrollable widget "
-              "use gtk_scrolled_window_add_with_viewport() instead");
-
--  if (priv->overlay_scrollbars)
--    {
--      g_signal_connect_after (child, "expose-event",
--                              G_CALLBACK (gtk_scrolled_window_child_expose),
--                              container);
--    }
-+  g_signal_connect_after (child, "expose-event",
-+                          G_CALLBACK (gtk_scrolled_window_child_expose),
-+                          container);
- }
-
- static void
-@@ -3128,12 +3120,9 @@ gtk_scrolled_window_remove (GtkContainer *container,
-
-   priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (container);
-
--  if (priv->overlay_scrollbars)
--    {
--      g_signal_handlers_disconnect_by_func (child,
--                                            gtk_scrolled_window_child_expose,
--                                            container);
--    }
-+  g_signal_handlers_disconnect_by_func (child,
-+                                        gtk_scrolled_window_child_expose,
-+                                        container);
-
-   gtk_widget_set_scroll_adjustments (child, NULL, NULL);
-
-@@ -3624,6 +3613,9 @@ gtk_scrolled_window_child_expose (GtkWidget         *widget,
-    GdkRectangle hslider_rect;
-    cairo_t   *cr;
-
-+   if (!priv->overlay_scrollbars)
-+     return FALSE;
-+
-    cr = gdk_cairo_create (eevent->window);
-    gdk_cairo_region (cr, eevent->region);
-    cairo_clip (cr);
-@@ -3769,27 +3761,32 @@ static void
- gtk_scrolled_window_expose_scrollbars (GtkAdjustment     *adj,
-                                        GtkScrolledWindow *scrolled_window)
- {
--  GtkWidget *child = gtk_bin_get_child (GTK_BIN (scrolled_window));
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
--  if (child && gtk_widget_get_visible (child))
-+  if (priv->overlay_scrollbars)
-     {
--      GtkAllocation alloc;
--
--      gtk_widget_get_allocation (child, &alloc);
--
--      if (scrolled_window->vscrollbar)
--        gtk_widget_queue_draw_area (child,
--                                    alloc.width - 20,
--                                    0,
--                                    20,
--                                    alloc.height);
-+      GtkWidget *child = gtk_bin_get_child (GTK_BIN (scrolled_window));
-
--      if (scrolled_window->hscrollbar)
--        gtk_widget_queue_draw_area (child,
--                                    0,
--                                    alloc.height - 20,
--                                    alloc.width,
--                                    20);
-+      if (child && gtk_widget_get_visible (child))
-+        {
-+          GtkAllocation alloc;
-+
-+          gtk_widget_get_allocation (child, &alloc);
-+
-+          if (scrolled_window->vscrollbar)
-+            gtk_widget_queue_draw_area (child,
-+                                        alloc.width - 20,
-+                                        0,
-+                                        20,
-+                                        alloc.height);
-+
-+          if (scrolled_window->hscrollbar)
-+            gtk_widget_queue_draw_area (child,
-+                                        0,
-+                                        alloc.height - 20,
-+                                        alloc.width,
-+                                        20);
-+        }
-     }
- }
-
-@@ -3798,17 +3795,14 @@ gtk_scrolled_window_overlay_scrollbars_changed (GtkSettings *settings,
-                                                 GParamSpec  *arg,
-                                                 gpointer     user_data)
- {
--  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (user_data);
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (user_data);
-
--  /* FIXME: tear down/set up things to make the switch */
--
-   g_object_get (settings,
-                 "gtk-enable-overlay-scrollbars",
-                 &priv->overlay_scrollbars,
-                 NULL);
-
--  g_print ("enable-overlay-scrollbar is now: %d\n", priv->overlay_scrollbars);
-+  gtk_widget_queue_resize (user_data);
- }
-
- #define __GTK_SCROLLED_WINDOW_C__
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0017-gtk-handle-gtk-primary-button-warps-slider-for-the-o.patch b/bockbuild/mac-sdk/patches/gtk/0017-gtk-handle-gtk-primary-button-warps-slider-for-the-o.patch
deleted file mode 100644 (file)
index 0844eed..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-From f2c762968b02b73323a75a723ad664ff1645abde Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 31 Aug 2012 16:24:07 +0200
-Subject: [PATCH 17/68] gtk: handle gtk-primary-button-warps-slider for the
- overlay scrollbars
-
----
- gtk/gtkscrolledwindow.c |   38 +++++++++++++++++++++++++++++++++-----
- 1 file changed, 33 insertions(+), 5 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 7680f5d..02745b1 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -2725,6 +2725,10 @@ gtk_scrolled_window_scroll_step_timeout (gpointer data)
- }
-
- static gboolean
-+gtk_scrolled_window_captured_motion_notify_scrollbar (GtkWidget *widget,
-+                                                      GdkEvent  *event);
-+
-+static gboolean
- gtk_scrolled_window_captured_button_press_scrollbar (GtkWidget *widget,
-                                                      GdkEvent  *event)
- {
-@@ -2808,12 +2812,36 @@ gtk_scrolled_window_captured_button_press_scrollbar (GtkWidget *widget,
-       if ((priv->sb_grab_vscroll || priv->sb_grab_hscroll) &&
-           !priv->sb_drag_slider)
-         {
--          gtk_scrolled_window_scroll_step (scrolled_window);
-+          gboolean primary_warps;
-+
-+          g_object_get (gtk_widget_get_settings (widget),
-+                        "gtk-primary-button-warps-slider", &primary_warps,
-+                        NULL);
-+
-+          if (primary_warps)
-+            {
-+              GdkEventMotion mevent = { 0, };
-+
-+              priv->sb_drag_slider = TRUE;
-+              priv->sb_grab_offset_x = hslider_rect.width / 2;
-+              priv->sb_grab_offset_y = vslider_rect.height / 2;
-+
-+              mevent.window = bevent->window;
-+              mevent.x = bevent->x;
-+              mevent.y = bevent->y;
-
--          priv->sb_scroll_timeout_id =
--            gdk_threads_add_timeout (SCROLL_INTERVAL_INITIAL,
--                                     gtk_scrolled_window_scroll_step_timeout,
--                                     scrolled_window);
-+              gtk_scrolled_window_captured_motion_notify_scrollbar (widget,
-+                                                                    (GdkEvent *) &mevent);
-+            }
-+          else
-+            {
-+              gtk_scrolled_window_scroll_step (scrolled_window);
-+
-+              priv->sb_scroll_timeout_id =
-+                gdk_threads_add_timeout (SCROLL_INTERVAL_INITIAL,
-+                                         gtk_scrolled_window_scroll_step_timeout,
-+                                         scrolled_window);
-+            }
-         }
-
-       return TRUE;
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0018-Introduce-phase-field-in-GdkEventScroll.patch b/bockbuild/mac-sdk/patches/gtk/0018-Introduce-phase-field-in-GdkEventScroll.patch
deleted file mode 100644 (file)
index 40be941..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-From 4ef417938760f98e530c152ee50071da2af31b06 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Sun, 2 Sep 2012 14:16:45 +0200
-Subject: [PATCH 18/68] Introduce phase field in GdkEventScroll
-
-Using the phase field it is possible to distinguish between
-events generated while the user is performing a gesture and
-momentum events that are generated after the gesture has been
-finished.
----
- gdk/gdkevents.c               |    1 +
- gdk/gdkevents.h               |    9 +++++++++
- gdk/gdkwindow.c               |    1 +
- gdk/quartz/gdkevents-quartz.c |   36 +++++++++++++++++++++++++++++++++---
- 4 files changed, 44 insertions(+), 3 deletions(-)
-
-diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
-index 0f8bba2..d3d67db 100644
---- a/gdk/gdkevents.c
-+++ b/gdk/gdkevents.c
-@@ -394,6 +394,7 @@ gdk_event_new (GdkEventType type)
-       new_event->scroll.y_root = 0.;
-       new_event->scroll.delta_x = 0.;
-       new_event->scroll.delta_y = 0.;
-+      new_event->scroll.phase = GDK_EVENT_SCROLL_PHASE_NONE;
-       break;
-     case GDK_ENTER_NOTIFY:
-     case GDK_LEAVE_NOTIFY:
-diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
-index f6b4e04..765b520 100644
---- a/gdk/gdkevents.h
-+++ b/gdk/gdkevents.h
-@@ -263,6 +263,14 @@ typedef enum
-   GDK_OWNER_CHANGE_CLOSE
- } GdkOwnerChange;
-
-+typedef enum
-+{
-+  GDK_EVENT_SCROLL_PHASE_NONE,
-+  GDK_EVENT_SCROLL_PHASE_START,
-+  GDK_EVENT_SCROLL_PHASE_ACTIVE,
-+  GDK_EVENT_SCROLL_PHASE_END
-+} GdkEventScrollPhase;
-+
- struct _GdkEventAny
- {
-   GdkEventType type;
-@@ -340,6 +348,7 @@ struct _GdkEventScroll
-   gboolean has_deltas;
-   gdouble delta_x;
-   gdouble delta_y;
-+  GdkEventScrollPhase phase;
- };
-
- struct _GdkEventKey
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index d48751e..1843873 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -10803,6 +10803,7 @@ proxy_button_event (GdkEvent *source_event,
-       event->scroll.has_deltas = source_event->scroll.has_deltas;
-       event->scroll.delta_x = source_event->scroll.delta_x;
-       event->scroll.delta_y = source_event->scroll.delta_y;
-+      event->scroll.phase = source_event->scroll.phase;
-       return TRUE;
-
-     default:
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index e7d97dc..bb4da70 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -62,6 +62,7 @@ static GdkWindow *find_toplevel_under_pointer   (GdkDisplay *display,
- - (BOOL) hasPreciseScrollingDeltas;
- - (CGFloat) scrollingDeltaX;
- - (CGFloat) scrollingDeltaY;
-+- (int) phase;
- @end
-
-
-@@ -990,6 +991,7 @@ fill_scroll_event (GdkWindow          *window,
-                    gboolean            has_deltas,
-                    gdouble             delta_x,
-                    gdouble             delta_y,
-+                   GdkEventScrollPhase phase,
-                    GdkScrollDirection  direction)
- {
-   GdkWindowObject *private;
-@@ -1012,6 +1014,7 @@ fill_scroll_event (GdkWindow          *window,
-   event->scroll.has_deltas = has_deltas;
-   event->scroll.delta_x = delta_x;
-   event->scroll.delta_y = delta_y;
-+  event->scroll.phase = phase;
- }
-
- static void
-@@ -1300,6 +1303,28 @@ test_resize (NSEvent *event, GdkWindow *toplevel, gint x, gint y)
-   return FALSE;
- }
-
-+static GdkEventScrollPhase
-+gdk_event_scroll_phase_from_ns_event_phase (NSUInteger phase)
-+{
-+  switch (phase)
-+    {
-+      case 0:
-+        return GDK_EVENT_SCROLL_PHASE_NONE;
-+
-+      case 1 << 0:
-+        return GDK_EVENT_SCROLL_PHASE_START;
-+
-+      case 1 << 1:
-+      case 1 << 2:
-+        return GDK_EVENT_SCROLL_PHASE_ACTIVE;
-+
-+      case 1 << 3:
-+        return GDK_EVENT_SCROLL_PHASE_END;
-+    }
-+
-+  return GDK_EVENT_SCROLL_PHASE_NONE;
-+}
-+
- static gboolean
- gdk_event_translate (GdkEvent *event,
-                      NSEvent  *nsevent)
-@@ -1491,6 +1516,7 @@ gdk_event_translate (GdkEvent *event,
-       if (gdk_quartz_osx_version() >= GDK_OSX_LION &&
-           [(id <PreciseDeltas>) nsevent hasPreciseScrollingDeltas])
-         {
-+            GdkEventScrollPhase phase;
-           dx = [(id <PreciseDeltas>) nsevent scrollingDeltaX];
-           dy = [(id <PreciseDeltas>) nsevent scrollingDeltaY];
-
-@@ -1509,8 +1535,10 @@ gdk_event_translate (GdkEvent *event,
-                   direction = GDK_SCROLL_LEFT;
-               }
-
-+            phase = gdk_event_scroll_phase_from_ns_event_phase ([(id <PreciseDeltas>) nsevent phase]);
-+
-             fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
--                               TRUE, -dx, -dy, direction);
-+                               TRUE, -dx, -dy, phase, direction);
-         }
-       else
-         {
-@@ -1525,7 +1553,8 @@ gdk_event_translate (GdkEvent *event,
-                   direction = GDK_SCROLL_UP;
-
-                 fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
--                                   FALSE, 0.0, fabs (dy), direction);
-+                                   FALSE, 0.0, fabs (dy), GDK_EVENT_SCROLL_PHASE_NONE,
-+                                   direction);
-               }
-             else if (dx != 0.0)
-               {
-@@ -1535,7 +1564,8 @@ gdk_event_translate (GdkEvent *event,
-                   direction = GDK_SCROLL_LEFT;
-
-                 fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
--                                   FALSE, fabs (dx), 0.0, direction);
-+                                   FALSE, fabs (dx), 0.0, GDK_EVENT_SCROLL_PHASE_NONE,
-+                                   direction);
-               }
-           }
-       }
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0019-Add-hack-to-lock-flow-of-scroll-events-to-window-whe.patch b/bockbuild/mac-sdk/patches/gtk/0019-Add-hack-to-lock-flow-of-scroll-events-to-window-whe.patch
deleted file mode 100644 (file)
index edf5b8d..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-From 026f9bc1846eae8fa98a307975fedce1f61d9cd5 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Fri, 28 Sep 2012 08:24:05 +0200
-Subject: [PATCH 19/68] Add hack to lock flow of scroll events to window where
- scroll started
-
-A bit evil but there is probably no other way, because this is very
-different from GDK's usual behavior.
-
-There's one quirk left, if you start a scroll and move to another GTK+
-window in the same process and click, the click won't be processed until
-the folow of momentum events has ended.
----
- gdk/gdkwindow.c |   94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 94 insertions(+)
-
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index 1843873..1dac543 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -434,6 +434,10 @@ accumulate_get_window (GSignalInvocationHint *ihint,
- }
-
- static GQuark quark_pointer_window = 0;
-+#ifdef GDK_WINDOWING_QUARTZ
-+static GQuark quark_last_scroll_pointer_window = 0;
-+static GQuark quark_last_scroll_event_window = 0;
-+#endif /* GDK_WINDOWING_QUARTZ */
-
- static void
- gdk_window_class_init (GdkWindowObjectClass *klass)
-@@ -478,6 +482,12 @@ gdk_window_class_init (GdkWindowObjectClass *klass)
-   drawable_class->get_source_drawable = gdk_window_get_source_drawable;
-
-   quark_pointer_window = g_quark_from_static_string ("gtk-pointer-window");
-+#ifdef GDK_WINDOWING_QUARTZ
-+  quark_last_scroll_pointer_window =
-+      g_quark_from_static_string ("gtk-last-scroll-pointer-window");
-+  quark_last_scroll_event_window =
-+      g_quark_from_static_string ("gtk-last-scroll-event-window");
-+#endif /* GDK_WINDOWING_QUARTZ */
-
-
-   /* Properties */
-@@ -10702,6 +10712,64 @@ proxy_pointer_event (GdkDisplay                 *display,
-                            GDK_BUTTON4_MASK | \
-                            GDK_BUTTON5_MASK)
-
-+#ifdef GDK_WINDOWING_QUARTZ
-+static void
-+last_scroll_event_weak_ref_notify (gpointer  data,
-+                                   GObject  *where_the_object_was)
-+{
-+  /* If any of pointer_window or event_window is destroyed, we unset
-+   * both values in the display's qdata.
-+   */
-+  GdkDisplay *display = data;
-+
-+  g_object_set_qdata (G_OBJECT (display), quark_last_scroll_pointer_window,
-+                      NULL);
-+  g_object_set_qdata (G_OBJECT (display), quark_last_scroll_event_window,
-+                      NULL);
-+}
-+
-+static void
-+set_last_scroll_event_windows (GdkDisplay *display,
-+                               GdkWindow  *pointer_window,
-+                               GdkWindow  *event_window)
-+{
-+  GdkWindow *old_window;
-+
-+  /* Check whether the values are still set from a previous scroll,
-+   * if so we need to release the weak references. (If they are no
-+   * longer set, we assume the weak ref notify callback was called).
-+   */
-+  old_window = g_object_get_qdata (G_OBJECT (display),
-+                                   quark_last_scroll_pointer_window);
-+  if (old_window)
-+    g_object_weak_unref (G_OBJECT (old_window),
-+                         last_scroll_event_weak_ref_notify, display);
-+
-+  old_window = g_object_get_qdata (G_OBJECT (display),
-+                                   quark_last_scroll_event_window);
-+  if (old_window)
-+    g_object_weak_unref (G_OBJECT (old_window),
-+                         last_scroll_event_weak_ref_notify, display);
-+
-+  /* Set new values and setup weak references. Note that pointer_window
-+   * and event_window can be NULL, in which case GDK won't proxy the
-+   * event. In this case we store NULL into the qdata so that we won't
-+   * store the scroll event.
-+   */
-+  g_object_set_qdata (G_OBJECT (display), quark_last_scroll_pointer_window,
-+                      pointer_window);
-+  if (pointer_window)
-+    g_object_weak_ref (G_OBJECT (pointer_window),
-+                       last_scroll_event_weak_ref_notify, display);
-+
-+  g_object_set_qdata (G_OBJECT (display), quark_last_scroll_event_window,
-+                      event_window);
-+  if (event_window)
-+    g_object_weak_ref (G_OBJECT (event_window),
-+                       last_scroll_event_weak_ref_notify, display);
-+}
-+#endif /* GDK_WINDOWING_QUARTZ */
-+
- static gboolean
- proxy_button_event (GdkEvent *source_event,
-                   gulong serial)
-@@ -10769,6 +10837,32 @@ proxy_button_event (GdkEvent *source_event,
-                               type, state,
-                               NULL, serial);
-
-+#ifdef GDK_WINDOWING_QUARTZ
-+  /* A Quartz-specific hack we cannot handle from within the backend
-+   * unfortunately. For scroll events with precise deltas (i.e. these
-+   * generated by the Mac touchpad or Magic Mouse, we want to lock the
-+   * flow of events belonging to a single gesture to the window the
-+   * gesture was started on. The default behavior of GDK, which insists
-+   * to send events to the window under the pointer or discard the
-+   * events when there's no GDK window under the pointer, makes it
-+   * impossible to implement this differently.
-+   */
-+  if (type == GDK_SCROLL && source_event->scroll.has_deltas)
-+    {
-+      if (source_event->scroll.phase == GDK_EVENT_SCROLL_PHASE_START)
-+        {
-+          set_last_scroll_event_windows (display, pointer_window, event_win);
-+        }
-+      else
-+        {
-+          pointer_window = g_object_get_qdata (G_OBJECT (display),
-+                                               quark_last_scroll_pointer_window);
-+          event_win = g_object_get_qdata (G_OBJECT (display),
-+                                          quark_last_scroll_event_window);
-+        }
-+    }
-+#endif /* GDK_WINDOWING_QUARTZ */
-+
-   if (event_win == NULL || display->ignore_core_events)
-     return TRUE;
-
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0020-Introduce-a-background-window.patch b/bockbuild/mac-sdk/patches/gtk/0020-Introduce-a-background-window.patch
deleted file mode 100644 (file)
index 4a1f763..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-From 69e85305f2d455c8943514edde215ce69791076a Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Sun, 2 Sep 2012 21:21:51 +0200
-Subject: [PATCH 20/68] Introduce a background window
-
-The background window covers the part left uncovered by the overshoot
-window. Two background windows are used to be able to cover an "L shape"
-that appears when is scrolled in the horizontal and vertical direction
-at the same time. These background windows are used to capture events,
-such as scroll events. In the future, it could also be used to draw a
-specific background pattern/gradient (if the window is configured as
-INPUT/OUTPUT window).
----
- gtk/gtkscrolledwindow.c |  104 +++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 104 insertions(+)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 02745b1..9d0d87a 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -95,6 +95,8 @@ typedef struct {
-   /* Kinetic scrolling */
-   GdkEvent              *button_press_event;
-   GdkWindow             *overshoot_window;
-+  GdkWindow             *vbackground_window;
-+  GdkWindow             *hbackground_window;
-   guint                  pointer_grabbed           : 1;
-   guint                  kinetic_scrolling         : 1;
-   guint                  capture_button_press      : 1;
-@@ -1481,6 +1483,8 @@ gtk_scrolled_window_expose (GtkWidget      *widget,
-         vscrollbar_window = gtk_widget_get_window (scrolled_window->vscrollbar);
-
-       if (event->window == priv->overshoot_window ||
-+          event->window == priv->vbackground_window ||
-+          event->window == priv->hbackground_window ||
-           event->window == hscrollbar_window ||
-           event->window == vscrollbar_window)
-         GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->expose_event (widget, event);
-@@ -1871,6 +1875,7 @@ _gtk_scrolled_window_allocate_overshoot_window (GtkScrolledWindow *scrolled_wind
-   _gtk_scrolled_window_get_overshoot (scrolled_window,
-                                       &overshoot_x, &overshoot_y);
-
-+  /* Overshoot window */
-   window_allocation = relative_allocation;
-   window_allocation.x += allocation.x;
-   window_allocation.y += allocation.y;
-@@ -1887,6 +1892,46 @@ _gtk_scrolled_window_allocate_overshoot_window (GtkScrolledWindow *scrolled_wind
-   gdk_window_move_resize (priv->overshoot_window,
-                           window_allocation.x, window_allocation.y,
-                           window_allocation.width, window_allocation.height);
-+
-+  /* Vertical background window */
-+  window_allocation = relative_allocation;
-+  window_allocation.x += allocation.x;
-+  window_allocation.y += allocation.y;
-+
-+  if (ABS (overshoot_x) > 0)
-+    {
-+      window_allocation.width = ABS (overshoot_x);
-+      if (overshoot_x > 0)
-+        window_allocation.x += relative_allocation.width - overshoot_x;
-+
-+      gdk_window_move_resize (priv->vbackground_window,
-+                              window_allocation.x, window_allocation.y,
-+                              window_allocation.width,
-+                              window_allocation.height);
-+      gdk_window_show (priv->vbackground_window);
-+    }
-+  else
-+    gdk_window_hide (priv->vbackground_window);
-+
-+  /* Horizontal background window */
-+  window_allocation = relative_allocation;
-+  window_allocation.x += allocation.x;
-+  window_allocation.y += allocation.y;
-+
-+  if (ABS (overshoot_y) > 0)
-+    {
-+      window_allocation.height = ABS (overshoot_y);
-+      if (overshoot_y > 0)
-+        window_allocation.y += relative_allocation.height - overshoot_y;
-+
-+      gdk_window_move_resize (priv->hbackground_window,
-+                              window_allocation.x, window_allocation.y,
-+                              window_allocation.width,
-+                              window_allocation.height);
-+      gdk_window_show (priv->hbackground_window);
-+    }
-+  else
-+    gdk_window_hide (priv->hbackground_window);
- }
-
- static void
-@@ -3259,6 +3304,7 @@ gtk_scrolled_window_realize (GtkWidget *widget)
-   gtk_widget_get_allocation (widget, &allocation);
-   gtk_scrolled_window_relative_allocation (widget, &relative_allocation);
-
-+  /* Overshoot window */
-   attributes.window_type = GDK_WINDOW_CHILD;
-   attributes.x = allocation.x + relative_allocation.x;
-   attributes.y = allocation.y + relative_allocation.y;
-@@ -3277,6 +3323,45 @@ gtk_scrolled_window_realize (GtkWidget *widget)
-
-   gdk_window_set_user_data (priv->overshoot_window, widget);
-
-+  /* Vertical background window */
-+  attributes.window_type = GDK_WINDOW_CHILD;
-+  attributes.x = allocation.x + relative_allocation.x;
-+  attributes.y = allocation.y + relative_allocation.y;
-+  attributes.width = 0;
-+  attributes.height = 0;
-+  attributes.wclass = GDK_INPUT_ONLY;
-+  attributes.visual = gtk_widget_get_visual (widget);
-+  attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK |
-+    GDK_BUTTON_MOTION_MASK | GDK_SCROLL_MASK;
-+
-+  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
-+
-+  priv->vbackground_window =
-+    gdk_window_new (gtk_widget_get_parent_window (widget),
-+                    &attributes, attributes_mask);
-+
-+  gdk_window_set_user_data (priv->vbackground_window, widget);
-+
-+  /* Horizontal background window */
-+  attributes.window_type = GDK_WINDOW_CHILD;
-+  attributes.x = allocation.x + relative_allocation.x;
-+  attributes.y = allocation.y + relative_allocation.y;
-+  attributes.width = 0;
-+  attributes.height = 0;
-+  attributes.wclass = GDK_INPUT_ONLY;
-+  attributes.visual = gtk_widget_get_visual (widget);
-+  attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK |
-+    GDK_BUTTON_MOTION_MASK | GDK_SCROLL_MASK;
-+
-+  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
-+
-+  priv->hbackground_window =
-+    gdk_window_new (gtk_widget_get_parent_window (widget),
-+                    &attributes, attributes_mask);
-+
-+  gdk_window_set_user_data (priv->hbackground_window, widget);
-+
-+
-   child_widget = gtk_bin_get_child (GTK_BIN (widget));
-
-   if (child_widget)
-@@ -3296,6 +3381,14 @@ gtk_scrolled_window_unrealize (GtkWidget *widget)
-   gdk_window_destroy (priv->overshoot_window);
-   priv->overshoot_window = NULL;
-
-+  gdk_window_set_user_data (priv->vbackground_window, NULL);
-+  gdk_window_destroy (priv->vbackground_window);
-+  priv->vbackground_window = NULL;
-+
-+  gdk_window_set_user_data (priv->hbackground_window, NULL);
-+  gdk_window_destroy (priv->hbackground_window);
-+  priv->hbackground_window = NULL;
-+
-   gtk_widget_set_realized (widget, FALSE);
-
-   GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->unrealize (widget);
-@@ -3308,6 +3401,15 @@ gtk_scrolled_window_map (GtkWidget *widget)
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
-   gdk_window_show (priv->overshoot_window);
-+  if (gdk_window_get_width (priv->vbackground_window) > 1)
-+    gdk_window_show (priv->vbackground_window);
-+  else
-+    gdk_window_hide (priv->vbackground_window);
-+
-+  if (gdk_window_get_height (priv->hbackground_window) > 1)
-+    gdk_window_show (priv->hbackground_window);
-+  else
-+    gdk_window_hide (priv->hbackground_window);
-
-   GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->map (widget);
- }
-@@ -3319,6 +3421,8 @@ gtk_scrolled_window_unmap (GtkWidget *widget)
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
-   gdk_window_hide (priv->overshoot_window);
-+  gdk_window_hide (priv->vbackground_window);
-+  gdk_window_hide (priv->hbackground_window);
-
-   GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->unmap (widget);
- }
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0021-Make-scrolled-window-work-well-with-Mac-touchpad.patch b/bockbuild/mac-sdk/patches/gtk/0021-Make-scrolled-window-work-well-with-Mac-touchpad.patch
deleted file mode 100644 (file)
index 1bd84e6..0000000
+++ /dev/null
@@ -1,870 +0,0 @@
-From 79c1e789097b4e46b9f3fdcbc96a2aae69e24144 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Mon, 3 Sep 2012 10:45:13 +0200
-Subject: [PATCH 21/68] Make scrolled window work well with Mac touchpad
-
-Modify the scrolled window code to work with a Mac touchpad as you
-would expect. When precise deltas are received from the Mac touchpad,
-overshooting and snapping back will work. The existing kinetic scrolling
-code is only used for snapping back. The amount of pixels to overshoot
-is determined by the incoming scroll events from the touchpad. We use
-the deceleration mechanism that was already in place to snap back.
-
-Other changes made are:
- - Increased the kinetic scrolling distance, this makes things feel
- nicer IMHO.
- - Removed everything related to handling kinetic scrolling by making
- drag gestures. We don't need this code.
----
- gtk/gtkscrolledwindow.c |  680 +++++++++++------------------------------------
- 1 file changed, 157 insertions(+), 523 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 9d0d87a..5341b50 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -79,7 +79,7 @@
-
- /* Kinetic scrolling */
- #define FRAME_INTERVAL (1000 / 60)
--#define MAX_OVERSHOOT_DISTANCE 50
-+#define MAX_OVERSHOOT_DISTANCE 100
- #define FRICTION_DECELERATION 0.003
- #define OVERSHOOT_INVERSE_ACCELERATION 0.003
- #define RELEASE_EVENT_TIMEOUT 1000
-@@ -98,20 +98,11 @@ typedef struct {
-   GdkWindow             *vbackground_window;
-   GdkWindow             *hbackground_window;
-   guint                  pointer_grabbed           : 1;
--  guint                  kinetic_scrolling         : 1;
--  guint                  capture_button_press      : 1;
-   guint                  in_drag                   : 1;
--  guint                  last_button_event_valid   : 1;
-
--  guint                  release_timeout_id;
-   guint                  deceleration_id;
-
--  gdouble                last_button_event_x_root;
--  gdouble                last_button_event_y_root;
--
--  gdouble                last_motion_event_x_root;
--  gdouble                last_motion_event_y_root;
--  guint32                last_motion_event_time;
-+  guint32                last_scroll_event_time;
-
-   gdouble                x_velocity;
-   gdouble                y_velocity;
-@@ -144,6 +135,7 @@ typedef struct {
-   guint          sb_scroll_timeout_id;
-
-   gboolean       overlay_scrollbars;
-+  gboolean       is_snapping_back;
- } GtkScrolledWindowPrivate;
-
- #define GTK_SCROLLED_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowPrivate))
-@@ -167,8 +159,7 @@ enum {
-   PROP_VSCROLLBAR_POLICY,
-   PROP_WINDOW_PLACEMENT,
-   PROP_WINDOW_PLACEMENT_SET,
--  PROP_SHADOW_TYPE,
--  PROP_KINETIC_SCROLLING
-+  PROP_SHADOW_TYPE
- };
-
- /* Signals */
-@@ -268,6 +259,13 @@ static void gtk_scrolled_window_overlay_scrollbars_changed (GtkSettings *setting
-                                                             GParamSpec  *arg,
-                                                             gpointer     user_data);
-
-+
-+static void gtk_scrolled_window_start_deceleration      (GtkScrolledWindow *scrolled_window);
-+static gboolean gtk_scrolled_window_calculate_velocity  (GtkScrolledWindow *scrolled_window,
-+                                                         GdkEvent          *event);
-+static void gtk_scrolled_window_init_overlay_scrollbars (GtkScrolledWindow *window);
-+
-+
- static guint signals[LAST_SIGNAL] = {0};
-
- G_DEFINE_TYPE (GtkScrolledWindow, gtk_scrolled_window, GTK_TYPE_BIN)
-@@ -432,22 +430,6 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
-                                                            GTK_PARAM_READABLE));
-
-   /**
--   * GtkScrolledWindow:kinetic-scrolling:
--   *
--   * The kinetic scrolling behavior flags.
--   *
--   * Since: X.XX
--   */
--  g_object_class_install_property (gobject_class,
--                                   PROP_KINETIC_SCROLLING,
--                                   g_param_spec_boolean ("kinetic-scrolling",
--                                                         P_("Kinetic Scrolling"),
--                                                         P_("Kinetic scrolling mode."),
--                                                         TRUE,
--                                                         GTK_PARAM_READABLE |
--                                                         GTK_PARAM_WRITABLE));
--
--  /**
-    * GtkScrolledWindow::scroll-child:
-    * @scrolled_window: a #GtkScrolledWindow
-    * @scroll: a #GtkScrollType describing how much to scroll
-@@ -531,8 +513,7 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
-                     G_CALLBACK (gtk_scrolled_window_overlay_scrollbars_changed),
-                     scrolled_window);
-
--  gtk_scrolled_window_set_kinetic_scrolling (scrolled_window, TRUE);
--  gtk_scrolled_window_set_capture_button_press (scrolled_window, TRUE);
-+  gtk_scrolled_window_init_overlay_scrollbars (scrolled_window);
-
-   priv->opacity = g_object_new (GTK_TYPE_ADJUSTMENT,
-                                 "lower", 0.0,
-@@ -1075,130 +1056,6 @@ gtk_scrolled_window_get_shadow_type (GtkScrolledWindow *scrolled_window)
-   return scrolled_window->shadow_type;
- }
-
--/**
-- * gtk_scrolled_window_set_kinetic_scrolling:
-- * @scrolled_window: a #GtkScrolledWindow
-- * @kinetic_scrolling: %TRUE to enable kinetic scrolling
-- *
-- * Turns kinetic scrolling on or off.
-- * Kinetic scrolling only applies to devices with source
-- * %GDK_SOURCE_TOUCHSCREEN.
-- *
-- * Since: X.XX
-- **/
--void
--gtk_scrolled_window_set_kinetic_scrolling (GtkScrolledWindow *scrolled_window,
--                                           gboolean           kinetic_scrolling)
--{
--  GtkScrolledWindowPrivate *priv;
--
--  g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
--
--  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--
--  if (priv->kinetic_scrolling == kinetic_scrolling)
--    return;
--
--  priv->kinetic_scrolling = kinetic_scrolling;
--  if (priv->kinetic_scrolling)
--    {
--      _gtk_widget_set_captured_event_handler (GTK_WIDGET (scrolled_window),
--                                              gtk_scrolled_window_captured_event);
--    }
--  else
--    {
--      _gtk_widget_set_captured_event_handler (GTK_WIDGET (scrolled_window), NULL);
--      if (priv->release_timeout_id)
--        {
--          g_source_remove (priv->release_timeout_id);
--          priv->release_timeout_id = 0;
--        }
--      if (priv->deceleration_id)
--        {
--          g_source_remove (priv->deceleration_id);
--          priv->deceleration_id = 0;
--        }
--    }
--  g_object_notify (G_OBJECT (scrolled_window), "kinetic-scrolling");
--}
--
--/**
-- * gtk_scrolled_window_get_kinetic_scrolling:
-- * @scrolled_window: a #GtkScrolledWindow
-- *
-- * Returns the specified kinetic scrolling behavior.
-- *
-- * Return value: the scrolling behavior flags.
-- *
-- * Since: X.XX
-- */
--gboolean
--gtk_scrolled_window_get_kinetic_scrolling (GtkScrolledWindow *scrolled_window)
--{
--  GtkScrolledWindowPrivate *priv;
--
--  g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window), FALSE);
--
--  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--
--  return priv->kinetic_scrolling;
--}
--
--/**
-- * gtk_scrolled_window_set_capture_button_press:
-- * @scrolled_window: a #GtkScrolledWindow
-- * @capture_button_press: %TRUE to capture button presses
-- *
-- * Changes the behaviour of @scrolled_window wrt. to the initial
-- * event that possibly starts kinetic scrolling. When @capture_button_press
-- * is set to %TRUE, the event is captured by the scrolled window, and
-- * then later replayed if it is meant to go to the child widget.
-- *
-- * This should be enabled if any child widgets perform non-reversible
-- * actions on #GtkWidget::button-press-event. If they don't, and handle
-- * additionally handle #GtkWidget::grab-broken-event, it might be better
-- * to set @capture_button_press to %FALSE.
-- *
-- * This setting only has an effect if kinetic scrolling is enabled.
-- *
-- * Since: X.XX
-- */
--void
--gtk_scrolled_window_set_capture_button_press (GtkScrolledWindow *scrolled_window,
--                                              gboolean           capture_button_press)
--{
--  GtkScrolledWindowPrivate *priv;
--
--  g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
--
--  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--  priv->capture_button_press = capture_button_press;
--}
--
--/**
-- * gtk_scrolled_window_get_capture_button_press:
-- * @scrolled_window: a #GtkScrolledWindow
-- *
-- * Return whether button presses are captured during kinetic
-- * scrolling. See gtk_scrolled_window_set_capture_button_press().
-- *
-- * Returns: %TRUE if button presses are captured during kinetic scrolling
-- *
-- * Since: X.XX
-- */
--gboolean
--gtk_scrolled_window_get_capture_button_press (GtkScrolledWindow *scrolled_window)
--{
--  GtkScrolledWindowPrivate *priv;
--
--  g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window), FALSE);
--
--  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--
--  return priv->capture_button_press;
--}
--
--
- static void
- gtk_scrolled_window_destroy (GtkObject *object)
- {
-@@ -1246,11 +1103,6 @@ gtk_scrolled_window_destroy (GtkObject *object)
-                                         G_CALLBACK (gtk_scrolled_window_overlay_scrollbars_changed),
-                                         scrolled_window);
-
--  if (priv->release_timeout_id)
--    {
--      g_source_remove (priv->release_timeout_id);
--      priv->release_timeout_id = 0;
--    }
-   if (priv->deceleration_id)
-     {
-       g_source_remove (priv->deceleration_id);
-@@ -1313,10 +1165,6 @@ gtk_scrolled_window_set_property (GObject      *object,
-       gtk_scrolled_window_set_shadow_type (scrolled_window,
-                                          g_value_get_enum (value));
-       break;
--    case PROP_KINETIC_SCROLLING:
--      gtk_scrolled_window_set_kinetic_scrolling (scrolled_window,
--                                                 g_value_get_boolean (value));
--      break;
-     default:
-       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-       break;
-@@ -1357,9 +1205,6 @@ gtk_scrolled_window_get_property (GObject    *object,
-     case PROP_SHADOW_TYPE:
-       g_value_set_enum (value, scrolled_window->shadow_type);
-       break;
--    case PROP_KINETIC_SCROLLING:
--      g_value_set_boolean (value, priv->kinetic_scrolling);
--      break;
-     default:
-       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-       break;
-@@ -2152,40 +1997,146 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-
-   if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &delta_x, &delta_y))
-     {
--      if (delta_x != 0.0 && scrolled_window->hscrollbar &&
--          (priv->overlay_scrollbars || gtk_widget_get_visible (scrolled_window->hscrollbar)))
-+      gint new_overshoot_x, new_overshoot_y;
-+      gint old_overshoot_x, old_overshoot_y;
-+      gboolean start_snap_back = FALSE;
-+      gboolean is_overshot = FALSE;
-+      gboolean is_momentum_event = event->phase == GDK_EVENT_SCROLL_PHASE_NONE;
-+
-+      _gtk_scrolled_window_get_overshoot (scrolled_window,
-+                                          &old_overshoot_x, &old_overshoot_y);
-+
-+      /* Check if the view is currently overshot. */
-+      if (old_overshoot_x != 0 || old_overshoot_y != 0)
-+        is_overshot = TRUE;
-+
-+      /* In case the view is not overshot, no snap back is active
-+       * and this event is not a momentum event, then a new scrolling
-+       * gesture has started. In case we are still in snapping back
-+       * state we can reset this (because the snapback has ended).
-+       */
-+      if (!is_overshot && priv->deceleration_id == 0 && !is_momentum_event)
-+        priv->is_snapping_back = FALSE;
-+
-+      /* Scroll events are handled in two cases:
-+       *  1) We are not overshot and not snapping back, so scroll as
-+       *  usual and also handle momentum events.
-+       *  2) If the view is currently overshot, then do not handle
-+       *  momentum events but handle non-momentum events as usual.
-+       *
-+       * For both cases we only allow overshooting in a direction if
-+       * that particular scrollbar is actually visible.
-+       */
-+      if ((!is_overshot && !priv->is_snapping_back) ||
-+          (is_overshot && !is_momentum_event))
-         {
--          GtkAdjustment *adj;
--          gdouble new_value;
-+          if (delta_x != 0.0 && scrolled_window->hscrollbar &&
-+              (priv->overlay_scrollbars || gtk_widget_get_visible (scrolled_window->hscrollbar)))
-+            {
-+              GtkAdjustment *adj;
-
--          adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-+              adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-
--          new_value = CLAMP (gtk_adjustment_get_value (adj) + delta_x,
--                             gtk_adjustment_get_lower (adj),
--                             gtk_adjustment_get_upper (adj) -
--                             gtk_adjustment_get_page_size (adj));
-+              if (scrolled_window->hscrollbar_visible)
-+                {
-+                  _gtk_scrolled_window_set_adjustment_value (scrolled_window,
-+                                                             adj,
-+                                                             priv->unclamped_hadj_value + delta_x,
-+                                                             TRUE,
-+                                                             FALSE);
-+                }
-+              else
-+                {
-+                  gdouble new_value;
-
--          gtk_adjustment_set_value (adj, new_value);
-+                  /* If the scrollbar is not visible, clamp the value and
-+                   * don't trigger overshooting.
-+                   */
-+                  new_value = CLAMP (gtk_adjustment_get_value (adj) + delta_x,
-+                                     gtk_adjustment_get_lower (adj),
-+                                     gtk_adjustment_get_upper (adj) -
-+                                     gtk_adjustment_get_page_size (adj));
-
--          handled = TRUE;
-+                  gtk_adjustment_set_value (adj, new_value);
-+                }
-+
-+              handled = TRUE;
-+            }
-+
-+          if (delta_y != 0.0 && scrolled_window->vscrollbar &&
-+              (priv->overlay_scrollbars || gtk_widget_get_visible (scrolled_window->vscrollbar)))
-+            {
-+              GtkAdjustment *adj;
-+
-+              adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+
-+              if (scrolled_window->vscrollbar_visible)
-+                {
-+                  _gtk_scrolled_window_set_adjustment_value (scrolled_window,
-+                                                             adj,
-+                                                             priv->unclamped_vadj_value + delta_y,
-+                                                             TRUE,
-+                                                             FALSE);
-+                }
-+              else
-+                {
-+                  gdouble new_value;
-+
-+                  /* If the scrollbar is not visible, clamp the value and
-+                   * don't trigger overshooting.
-+                   */
-+                  new_value = CLAMP (gtk_adjustment_get_value (adj) + delta_y,
-+                                     gtk_adjustment_get_lower (adj),
-+                                     gtk_adjustment_get_upper (adj) -
-+                                     gtk_adjustment_get_page_size (adj));
-+
-+                  gtk_adjustment_set_value (adj, new_value);
-+                }
-+
-+              handled = TRUE;
-+            }
-+
-+
-+          priv->last_scroll_event_time = gdk_event_get_time ((GdkEvent *)event);
-+          gtk_scrolled_window_calculate_velocity (scrolled_window, (GdkEvent *)event);
-         }
-
--      if (delta_y != 0.0 && scrolled_window->vscrollbar &&
--          (priv->overlay_scrollbars || gtk_widget_get_visible (scrolled_window->vscrollbar)))
--        {
--          GtkAdjustment *adj;
--          gdouble new_value;
-+      _gtk_scrolled_window_get_overshoot (scrolled_window,
-+                                          &new_overshoot_x, &new_overshoot_y);
-
--          adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+      if (old_overshoot_x != new_overshoot_x ||
-+          old_overshoot_y != new_overshoot_y)
-+        _gtk_scrolled_window_allocate_overshoot_window (scrolled_window);
-
--          new_value = CLAMP (gtk_adjustment_get_value (adj) + delta_y,
--                             gtk_adjustment_get_lower (adj),
--                             gtk_adjustment_get_upper (adj) -
--                             gtk_adjustment_get_page_size (adj));
-+      /* In two cases we want to start snapping back:
-+       *  1) The view is overshot and the gesture has ended (signalled
-+       *  by an event with both deltas set to zero.
-+       *  2) The view is overshot and we receive a momentum event, which
-+       *  also signals that the user's gesture has ended.
-+       */
-+      if (is_overshot &&
-+          ((delta_x == 0.0 && delta_y == 0.0) || is_momentum_event))
-+        start_snap_back = TRUE;
-
--          gtk_adjustment_set_value (adj, new_value);
-+      /* If we should start a snap back and no current deceleration
-+       * is active, start the snap back.
-+       */
-+      if (start_snap_back && priv->deceleration_id == 0)
-+        {
-+          /* Zero out vector components without a visible scrollbar */
-+          if (!scrolled_window->hscrollbar_visible)
-+            priv->x_velocity = 0;
-+          if (!scrolled_window->vscrollbar_visible)
-+            priv->y_velocity = 0;
-
--          handled = TRUE;
-+          priv->is_snapping_back = TRUE;
-+
-+          if (new_overshoot_x != 0 || new_overshoot_y != 0)
-+            {
-+              gtk_scrolled_window_start_deceleration (scrolled_window);
-+              priv->x_velocity = 0.0;
-+              priv->y_velocity = 0.0;
-+            }
-         }
-     }
-   else
-@@ -2369,18 +2320,6 @@ scrolled_window_deceleration_cb (gpointer user_data)
- }
-
- static void
--gtk_scrolled_window_cancel_deceleration (GtkScrolledWindow *scrolled_window)
--{
--  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--
--  if (priv->deceleration_id)
--    {
--      g_source_remove (priv->deceleration_id);
--      priv->deceleration_id = 0;
--    }
--}
--
--static void
- gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window)
- {
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-@@ -2408,327 +2347,36 @@ gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window)
- }
-
- static gboolean
--gtk_scrolled_window_release_captured_event (GtkScrolledWindow *scrolled_window)
--{
--  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--
--  /* Cancel the scrolling and send the button press
--   * event to the child widget
--   */
--  if (!priv->button_press_event)
--    return FALSE;
--
--  if (priv->pointer_grabbed)
--    {
--      gtk_grab_remove (GTK_WIDGET (scrolled_window));
--      priv->pointer_grabbed = FALSE;
--    }
--
--  if (priv->capture_button_press)
--    {
--      GtkWidget *event_widget;
--
--      event_widget = gtk_get_event_widget (priv->button_press_event);
--
--      if (!_gtk_propagate_captured_event (event_widget,
--                                          priv->button_press_event,
--                                          gtk_bin_get_child (GTK_BIN (scrolled_window))))
--        gtk_propagate_event (event_widget, priv->button_press_event);
--
--      gdk_event_free (priv->button_press_event);
--      priv->button_press_event = NULL;
--    }
--
--  if (_gtk_scrolled_window_get_overshoot (scrolled_window, NULL, NULL))
--    gtk_scrolled_window_start_deceleration (scrolled_window);
--
--  return FALSE;
--}
--
--static gboolean
- gtk_scrolled_window_calculate_velocity (GtkScrolledWindow *scrolled_window,
-                                       GdkEvent          *event)
- {
-   GtkScrolledWindowPrivate *priv;
--  gdouble x_root, y_root;
-   guint32 _time;
-
--#define STILL_THRESHOLD 40
--
--  if (!gdk_event_get_root_coords (event, &x_root, &y_root))
--    return FALSE;
--
-   priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-   _time = gdk_event_get_time (event);
-
--  if (priv->last_motion_event_x_root != x_root ||
--      priv->last_motion_event_y_root != y_root ||
--      ABS (_time - priv->last_motion_event_time) > STILL_THRESHOLD)
--    {
--      priv->x_velocity = (priv->last_motion_event_x_root - x_root) /
--        (gdouble) (_time - priv->last_motion_event_time);
--      priv->y_velocity = (priv->last_motion_event_y_root - y_root) /
--        (gdouble) (_time - priv->last_motion_event_time);
--    }
--
--  priv->last_motion_event_x_root = x_root;
--  priv->last_motion_event_y_root = y_root;
--  priv->last_motion_event_time = _time;
--
--#undef STILL_THRESHOLD
--
--  return TRUE;
--}
--
--static gboolean
--gtk_scrolled_window_captured_button_release_kinetic (GtkWidget *widget,
--                                                     GdkEvent  *event)
--{
--  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
--  GtkScrolledWindowPrivate *priv;
--  GtkWidget *child;
--  gboolean overshoot;
--  gdouble x_root, y_root;
--
--  if (event->button.button != 1)
--    return FALSE;
--
--  child = gtk_bin_get_child (GTK_BIN (widget));
--  if (!child)
--    return FALSE;
--
--  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--  gtk_grab_remove (widget);
--  priv->pointer_grabbed = FALSE;
--
--  if (priv->release_timeout_id)
--    {
--      g_source_remove (priv->release_timeout_id);
--      priv->release_timeout_id = 0;
--    }
--
--  overshoot = _gtk_scrolled_window_get_overshoot (scrolled_window, NULL, NULL);
--
--  if (priv->in_drag)
--    gdk_pointer_ungrab (gdk_event_get_time (event));
--  else
--    {
--      /* There hasn't been scrolling at all, so just let the
--       * child widget handle the button press normally
--       */
--      gtk_scrolled_window_release_captured_event (scrolled_window);
--
--      if (!overshoot)
--        return FALSE;
--    }
--  priv->in_drag = FALSE;
--
--  if (priv->button_press_event)
--    {
--      gdk_event_free (priv->button_press_event);
--      priv->button_press_event = NULL;
--    }
--
--  gtk_scrolled_window_calculate_velocity (scrolled_window, event);
--
--  /* Zero out vector components without a visible scrollbar */
--  if (!scrolled_window->hscrollbar_visible)
--    priv->x_velocity = 0;
--  if (!scrolled_window->vscrollbar_visible)
--    priv->y_velocity = 0;
-+#define STILL_THRESHOLD 40
-
--  if (priv->x_velocity != 0 || priv->y_velocity != 0 || overshoot)
-+  if (event->type == GDK_SCROLL)
-     {
--      gtk_scrolled_window_start_deceleration (scrolled_window);
--      priv->x_velocity = priv->y_velocity = 0;
--      priv->last_button_event_valid = FALSE;
--    }
--  else
--    {
--      gdk_event_get_root_coords (event, &x_root, &y_root);
--      priv->last_button_event_x_root = x_root;
--      priv->last_button_event_y_root = y_root;
--      priv->last_button_event_valid = TRUE;
--    }
--
--  if (priv->capture_button_press)
--    return TRUE;
--  else
--    return FALSE;
--}
-+      gdouble delta_x, delta_y;
-
--static gboolean
--gtk_scrolled_window_captured_motion_notify_kinetic (GtkWidget *widget,
--                                                    GdkEvent  *event)
--{
--  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
--  GtkScrolledWindowPrivate *priv;
--  gint old_overshoot_x, old_overshoot_y;
--  gint new_overshoot_x, new_overshoot_y;
--  GtkWidget *child;
--  GtkAdjustment *hadjustment;
--  GtkAdjustment *vadjustment;
--  gdouble dx, dy;
--  GdkModifierType state;
--  gdouble x_root, y_root;
--
--  gdk_event_get_state (event, &state);
--  if (!(state & GDK_BUTTON1_MASK))
--    return FALSE;
--
--  child = gtk_bin_get_child (GTK_BIN (widget));
--  if (!child)
--    return FALSE;
--
--  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--
--  /* Check if we've passed the drag threshold */
--  gdk_event_get_root_coords (event, &x_root, &y_root);
--  if (!priv->in_drag)
--    {
--      if (gtk_drag_check_threshold (widget,
--                                    priv->last_button_event_x_root,
--                                    priv->last_button_event_y_root,
--                                    x_root, y_root))
-+      if (gdk_event_get_scroll_deltas (event, &delta_x, &delta_y) &&
-+          ABS (_time - priv->last_scroll_event_time) > STILL_THRESHOLD)
-         {
--          if (priv->release_timeout_id)
--            {
--              g_source_remove (priv->release_timeout_id);
--              priv->release_timeout_id = 0;
--            }
-+          priv->x_velocity = delta_x / (gdouble) (_time - priv->last_scroll_event_time);
-+          priv->y_velocity = delta_y / (gdouble) (_time - priv->last_scroll_event_time);
-
--          priv->last_button_event_valid = FALSE;
--          priv->in_drag = TRUE;
-+          priv->last_scroll_event_time = _time;
-         }
--      else
--        return TRUE;
--    }
--
--  gdk_pointer_grab (gtk_widget_get_window (widget),
--                    TRUE,
--                    GDK_BUTTON_RELEASE_MASK | GDK_BUTTON1_MOTION_MASK,
--                    NULL, NULL,
--                    gdk_event_get_time (event));
--
--  priv->last_button_event_valid = FALSE;
--
--  if (priv->button_press_event)
--    {
--      gdk_event_free (priv->button_press_event);
--      priv->button_press_event = NULL;
--    }
--
--  _gtk_scrolled_window_get_overshoot (scrolled_window,
--                                      &old_overshoot_x, &old_overshoot_y);
--
--  hadjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
--  if (hadjustment && scrolled_window->hscrollbar_visible)
--    {
--      dx = (priv->last_motion_event_x_root - x_root) + priv->unclamped_hadj_value;
--      _gtk_scrolled_window_set_adjustment_value (scrolled_window, hadjustment,
--                                                 dx, TRUE, FALSE);
--    }
--
--  vadjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
--  if (vadjustment && scrolled_window->vscrollbar_visible)
--    {
--      dy = (priv->last_motion_event_y_root - y_root) + priv->unclamped_vadj_value;
--      _gtk_scrolled_window_set_adjustment_value (scrolled_window, vadjustment,
--                                                 dy, TRUE, FALSE);
-     }
-
--  _gtk_scrolled_window_get_overshoot (scrolled_window,
--                                      &new_overshoot_x, &new_overshoot_y);
--
--  if (old_overshoot_x != new_overshoot_x ||
--      old_overshoot_y != new_overshoot_y)
--    _gtk_scrolled_window_allocate_overshoot_window (scrolled_window);
--
--  gtk_scrolled_window_calculate_velocity (scrolled_window, event);
-+#undef STILL_THRESHOLD
-
-   return TRUE;
- }
-
--static gboolean
--gtk_scrolled_window_captured_button_press_kinetic (GtkWidget *widget,
--                                                   GdkEvent  *event)
--{
--  GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
--  GtkScrolledWindowPrivate *priv;
--  GtkWidget *child;
--  GtkWidget *event_widget;
--  gdouble x_root, y_root;
--
--  /* If scrollbars are not visible, we don't do kinetic scrolling */
--  if (!scrolled_window->vscrollbar_visible &&
--      !scrolled_window->hscrollbar_visible)
--    return FALSE;
--
--  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--
--  event_widget = gtk_get_event_widget (event);
--
--  /* If there's another scrolled window between the widget
--   * receiving the event and this capturing scrolled window,
--   * let it handle the events.
--   */
--  if (widget != gtk_widget_get_ancestor (event_widget, GTK_TYPE_SCROLLED_WINDOW))
--    return FALSE;
--
--  /* Check whether the button press is close to the previous one,
--   * take that as a shortcut to get the child widget handle events
--   */
--  gdk_event_get_root_coords (event, &x_root, &y_root);
--  if (priv->last_button_event_valid &&
--      ABS (x_root - priv->last_button_event_x_root) < TOUCH_BYPASS_CAPTURED_THRESHOLD &&
--      ABS (y_root - priv->last_button_event_y_root) < TOUCH_BYPASS_CAPTURED_THRESHOLD)
--    {
--      priv->last_button_event_valid = FALSE;
--      return FALSE;
--    }
--
--  priv->last_button_event_x_root = priv->last_motion_event_x_root = x_root;
--  priv->last_button_event_y_root = priv->last_motion_event_y_root = y_root;
--  priv->last_motion_event_time = gdk_event_get_time (event);
--  priv->last_button_event_valid = TRUE;
--
--  if (event->button.button != 1)
--    return FALSE;
--
--  child = gtk_bin_get_child (GTK_BIN (widget));
--  if (!child)
--    return FALSE;
--
--  if (scrolled_window->hscrollbar == event_widget ||
--      scrolled_window->vscrollbar == event_widget)
--    return FALSE;
--
--  priv->pointer_grabbed = TRUE;
--  gtk_grab_add (widget);
--
--  gtk_scrolled_window_cancel_deceleration (scrolled_window);
--
--  /* Only set the timeout if we're going to store an event */
--  if (priv->capture_button_press)
--    priv->release_timeout_id =
--      gdk_threads_add_timeout (RELEASE_EVENT_TIMEOUT,
--                               (GSourceFunc) gtk_scrolled_window_release_captured_event,
--                               scrolled_window);
--
--  priv->in_drag = FALSE;
--
--  if (priv->capture_button_press)
--    {
--      /* Store the button press event in
--       * case we need to propagate it later
--       */
--      priv->button_press_event = gdk_event_copy (event);
--      return TRUE;
--    }
--  else
--    return FALSE;
--}
--
- static void
- gtk_scrolled_window_scroll_step (GtkScrolledWindow *scrolled_window)
- {
-@@ -3011,22 +2659,14 @@ gtk_scrolled_window_captured_event (GtkWidget *widget,
-     {
-     case GDK_BUTTON_PRESS:
-       retval = gtk_scrolled_window_captured_button_press_scrollbar (widget, event);
--      if (!retval)
--        retval = gtk_scrolled_window_captured_button_press_kinetic (widget, event);
-       break;
-     case GDK_BUTTON_RELEASE:
-       if (priv->sb_pointer_grabbed)
-         retval = gtk_scrolled_window_captured_button_release_scrollbar (widget, event);
--      else if (priv->pointer_grabbed)
--        retval = gtk_scrolled_window_captured_button_release_kinetic (widget, event);
--      else
--        priv->last_button_event_valid = FALSE;
-       break;
-     case GDK_MOTION_NOTIFY:
-       if (priv->sb_pointer_grabbed || !priv->pointer_grabbed)
-         retval = gtk_scrolled_window_captured_motion_notify_scrollbar (widget, event);
--      else if (priv->pointer_grabbed)
--        retval = gtk_scrolled_window_captured_motion_notify_kinetic (widget, event);
-       break;
-     case GDK_LEAVE_NOTIFY:
-       if (!priv->in_drag && !priv->sb_pointer_grabbed)
-@@ -3439,19 +3079,6 @@ gtk_scrolled_window_grab_notify (GtkWidget *widget,
-       gdk_pointer_ungrab (gtk_get_current_event_time ());
-       priv->pointer_grabbed = FALSE;
-       priv->in_drag = FALSE;
--
--      if (priv->release_timeout_id)
--        {
--          g_source_remove (priv->release_timeout_id);
--          priv->release_timeout_id = 0;
--        }
--
--      if (_gtk_scrolled_window_get_overshoot (scrolled_window, NULL, NULL))
--        gtk_scrolled_window_start_deceleration (scrolled_window);
--      else
--        gtk_scrolled_window_cancel_deceleration (scrolled_window);
--
--      priv->last_button_event_valid = FALSE;
-     }
-
-   if (priv->sb_pointer_grabbed && !was_grabbed)
-@@ -3923,6 +3550,13 @@ gtk_scrolled_window_expose_scrollbars (GtkAdjustment     *adj,
- }
-
- static void
-+gtk_scrolled_window_init_overlay_scrollbars (GtkScrolledWindow *scrolled_window)
-+{
-+  _gtk_widget_set_captured_event_handler (GTK_WIDGET (scrolled_window),
-+                                          gtk_scrolled_window_captured_event);
-+}
-+
-+static void
- gtk_scrolled_window_overlay_scrollbars_changed (GtkSettings *settings,
-                                                 GParamSpec  *arg,
-                                                 gpointer     user_data)
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0022-Use-start-end-phase-in-event-handling.patch b/bockbuild/mac-sdk/patches/gtk/0022-Use-start-end-phase-in-event-handling.patch
deleted file mode 100644 (file)
index f09b1f0..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-From a4e5fe549e5497a7e5ae7eecae4fc654330500f2 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Fri, 28 Sep 2012 06:18:49 +0200
-Subject: [PATCH 22/68] Use start/end phase in event handling
-
-Should make things work better on Mountain Lion.
----
- gtk/gtkscrolledwindow.c |   13 +++++--------
- 1 file changed, 5 insertions(+), 8 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 5341b50..92e75a0 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -2010,12 +2010,10 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-       if (old_overshoot_x != 0 || old_overshoot_y != 0)
-         is_overshot = TRUE;
-
--      /* In case the view is not overshot, no snap back is active
--       * and this event is not a momentum event, then a new scrolling
--       * gesture has started. In case we are still in snapping back
--       * state we can reset this (because the snapback has ended).
-+      /* If a new gesture has started, reset snap back state.
-+       * FIXME: check if overshoot has really ended.
-        */
--      if (!is_overshot && priv->deceleration_id == 0 && !is_momentum_event)
-+      if (event->phase == GDK_EVENT_SCROLL_PHASE_START)
-         priv->is_snapping_back = FALSE;
-
-       /* Scroll events are handled in two cases:
-@@ -2109,13 +2107,12 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-         _gtk_scrolled_window_allocate_overshoot_window (scrolled_window);
-
-       /* In two cases we want to start snapping back:
--       *  1) The view is overshot and the gesture has ended (signalled
--       *  by an event with both deltas set to zero.
-+       *  1) The view is overshot and the gesture has ended.
-        *  2) The view is overshot and we receive a momentum event, which
-        *  also signals that the user's gesture has ended.
-        */
-       if (is_overshot &&
--          ((delta_x == 0.0 && delta_y == 0.0) || is_momentum_event))
-+          (event->phase == GDK_EVENT_SCROLL_PHASE_END || is_momentum_event))
-         start_snap_back = TRUE;
-
-       /* If we should start a snap back and no current deceleration
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0023-Improve-overshooting-behavior.patch b/bockbuild/mac-sdk/patches/gtk/0023-Improve-overshooting-behavior.patch
deleted file mode 100644 (file)
index d04e295..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-From ced3c2c63872021885cf91f134dde818096bae42 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Wed, 19 Sep 2012 07:22:39 +0200
-Subject: [PATCH 23/68] Improve overshooting behavior
-
-This is done by taking the stiffness calculations as found in the WebKit
-source code. These calculations are now used to compute the overshooting
-distance as well as handling the snap back animation. Also, we only
-start overshooting after we have hit a border in the container (i.e. an
-adjustment has reached its upper/lower bound).
-
-Also rename the timeout functions from deceleration to snap back, since
-these are not handling kinetic deceleration in this code.
----
- gtk/gtkscrolledwindow.c |  179 ++++++++++++++++++++++++++---------------------
- 1 file changed, 99 insertions(+), 80 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 92e75a0..f3be303 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -84,6 +84,10 @@
- #define OVERSHOOT_INVERSE_ACCELERATION 0.003
- #define RELEASE_EVENT_TIMEOUT 1000
-
-+#define BAND_STIFFNESS 20.0f
-+#define BAND_AMPLITUDE 0.31f
-+#define BAND_PERIOD 1.6f
-+
- /* Overlay scrollbars */
- #define SCROLL_INTERVAL_INITIAL 300
- #define SCROLL_INTERVAL_REPEAT 100
-@@ -107,6 +111,9 @@ typedef struct {
-   gdouble                x_velocity;
-   gdouble                y_velocity;
-
-+  gdouble                x_force;
-+  gdouble                y_force;
-+
-   gdouble                unclamped_hadj_value;
-   gdouble                unclamped_vadj_value;
-
-@@ -143,12 +150,13 @@ typedef struct {
- typedef struct
- {
-   GtkScrolledWindow     *scrolled_window;
--  gint64                 last_deceleration_time;
-+  gint64                 start_snap_back_time;
-
-   gdouble                x_velocity;
-   gdouble                y_velocity;
--  gdouble                vel_cosine;
--  gdouble                vel_sine;
-+
-+  gint                   x_overshoot;
-+  gint                   y_overshoot;
- } KineticScrollData;
-
- enum {
-@@ -260,7 +268,7 @@ static void gtk_scrolled_window_overlay_scrollbars_changed (GtkSettings *setting
-                                                             gpointer     user_data);
-
-
--static void gtk_scrolled_window_start_deceleration      (GtkScrolledWindow *scrolled_window);
-+static void gtk_scrolled_window_start_snap_back         (GtkScrolledWindow *scrolled_window);
- static gboolean gtk_scrolled_window_calculate_velocity  (GtkScrolledWindow *scrolled_window,
-                                                          GdkEvent          *event);
- static void gtk_scrolled_window_init_overlay_scrollbars (GtkScrolledWindow *window);
-@@ -2016,6 +2024,9 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-       if (event->phase == GDK_EVENT_SCROLL_PHASE_START)
-         priv->is_snapping_back = FALSE;
-
-+      if (is_momentum_event && !is_overshot)
-+        gtk_scrolled_window_calculate_velocity (scrolled_window, (GdkEvent *)event);
-+
-       /* Scroll events are handled in two cases:
-        *  1) We are not overshot and not snapping back, so scroll as
-        *  usual and also handle momentum events.
-@@ -2031,15 +2042,29 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-           if (delta_x != 0.0 && scrolled_window->hscrollbar &&
-               (priv->overlay_scrollbars || gtk_widget_get_visible (scrolled_window->hscrollbar)))
-             {
-+              gboolean may_overshoot = FALSE;
-               GtkAdjustment *adj;
-
-+              /* Overshooting is allowed once the adjustment has reached
-+               * the left/right.
-+               */
-               adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-+              gdouble max_adj = gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj);
-+              if (gtk_adjustment_get_value (adj) < 1.0 ||
-+                  gtk_adjustment_get_value (adj) > max_adj - 1.0)
-+                may_overshoot = TRUE;
-
--              if (scrolled_window->hscrollbar_visible)
-+              if (scrolled_window->hscrollbar_visible && (is_overshot || may_overshoot))
-                 {
-+                  gdouble damped_delta;
-+
-+                  priv->x_force += delta_x;
-+                  damped_delta = ceil(priv->x_force / BAND_STIFFNESS);
-+                  damped_delta = damped_delta - old_overshoot_x;
-+
-                   _gtk_scrolled_window_set_adjustment_value (scrolled_window,
-                                                              adj,
--                                                             priv->unclamped_hadj_value + delta_x,
-+                                                             priv->unclamped_hadj_value + damped_delta,
-                                                              TRUE,
-                                                              FALSE);
-                 }
-@@ -2064,15 +2089,29 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-           if (delta_y != 0.0 && scrolled_window->vscrollbar &&
-               (priv->overlay_scrollbars || gtk_widget_get_visible (scrolled_window->vscrollbar)))
-             {
-+              gboolean may_overshoot = FALSE;
-               GtkAdjustment *adj;
-
-+              /* Overshooting is allowed once the adjustment has reached
-+               * the top/bottom.
-+               */
-               adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+              gdouble max_adj = gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj);
-+              if (gtk_adjustment_get_value (adj) < 1.0 ||
-+                    gtk_adjustment_get_value (adj) > max_adj - 1.0)
-+                may_overshoot = TRUE;
-
--              if (scrolled_window->vscrollbar_visible)
-+              if (scrolled_window->vscrollbar_visible && (is_overshot || may_overshoot))
-                 {
-+                  gdouble damped_delta;
-+
-+                  priv->y_force += delta_y;
-+                  damped_delta = ceil(priv->y_force / BAND_STIFFNESS);
-+                  damped_delta = damped_delta - old_overshoot_y;
-+
-                   _gtk_scrolled_window_set_adjustment_value (scrolled_window,
-                                                              adj,
--                                                             priv->unclamped_vadj_value + delta_y,
-+                                                             priv->unclamped_vadj_value + damped_delta,
-                                                              TRUE,
-                                                              FALSE);
-                 }
-@@ -2093,10 +2132,6 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-
-               handled = TRUE;
-             }
--
--
--          priv->last_scroll_event_time = gdk_event_get_time ((GdkEvent *)event);
--          gtk_scrolled_window_calculate_velocity (scrolled_window, (GdkEvent *)event);
-         }
-
-       _gtk_scrolled_window_get_overshoot (scrolled_window,
-@@ -2112,9 +2147,17 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-        *  also signals that the user's gesture has ended.
-        */
-       if (is_overshot &&
--          (event->phase == GDK_EVENT_SCROLL_PHASE_END || is_momentum_event))
-+          ((priv->last_scroll_event_time > 0 && is_momentum_event) ||
-+           event->phase == GDK_EVENT_SCROLL_PHASE_END))
-         start_snap_back = TRUE;
-
-+       /* Reset force if gesture has ended. */
-+       if (event->phase == GDK_EVENT_SCROLL_PHASE_END)
-+         {
-+           priv->x_force = 0.0;
-+           priv->y_force = 0.0;
-+         }
-+
-       /* If we should start a snap back and no current deceleration
-        * is active, start the snap back.
-        */
-@@ -2130,9 +2173,10 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-
-           if (new_overshoot_x != 0 || new_overshoot_y != 0)
-             {
--              gtk_scrolled_window_start_deceleration (scrolled_window);
-+              gtk_scrolled_window_start_snap_back (scrolled_window);
-               priv->x_velocity = 0.0;
-               priv->y_velocity = 0.0;
-+              priv->last_scroll_event_time = 0;
-             }
-         }
-     }
-@@ -2207,16 +2251,16 @@ _gtk_scrolled_window_set_adjustment_value (GtkScrolledWindow *scrolled_window,
- }
-
- static gboolean
--scrolled_window_deceleration_cb (gpointer user_data)
-+scrolled_window_snap_back_cb (gpointer user_data)
- {
-   KineticScrollData *data = user_data;
-   GtkScrolledWindow *scrolled_window = data->scrolled_window;
-   GtkScrolledWindowPrivate *priv;
-   GtkAdjustment *hadjustment, *vadjustment;
-   gint old_overshoot_x, old_overshoot_y, overshoot_x, overshoot_y;
--  gdouble value;
-   gint64 current_time;
--  guint elapsed;
-+  gdouble elapsed;
-+  gdouble damp_factor;
-
-   priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-   hadjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-@@ -2226,12 +2270,22 @@ scrolled_window_deceleration_cb (gpointer user_data)
-                                       &old_overshoot_x, &old_overshoot_y);
-
-   current_time = g_get_monotonic_time ();
--  elapsed = (current_time - data->last_deceleration_time) / 1000;
--  data->last_deceleration_time = current_time;
-+  elapsed = (current_time - data->start_snap_back_time) / 1000000.0;
-+  damp_factor = exp((((double)-elapsed) * BAND_STIFFNESS) / BAND_PERIOD);
-
-   if (hadjustment && scrolled_window->hscrollbar_visible)
-     {
--      value = priv->unclamped_hadj_value + (data->x_velocity * elapsed);
-+      gdouble delta_x, value;
-+
-+      delta_x = (data->x_overshoot + (data->x_velocity * elapsed * BAND_AMPLITUDE)) * damp_factor;
-+
-+      if (fabs (delta_x) >= 1.0)
-+        value = priv->unclamped_hadj_value + (delta_x - old_overshoot_x);
-+      else
-+        value = CLAMP (priv->unclamped_hadj_value,
-+                       gtk_adjustment_get_lower (hadjustment),
-+                       gtk_adjustment_get_upper (hadjustment) -
-+                       gtk_adjustment_get_page_size (hadjustment));
-
-       if (_gtk_scrolled_window_set_adjustment_value (scrolled_window,
-                                                      hadjustment,
-@@ -2243,7 +2297,17 @@ scrolled_window_deceleration_cb (gpointer user_data)
-
-   if (vadjustment && scrolled_window->vscrollbar_visible)
-     {
--      value = priv->unclamped_vadj_value + (data->y_velocity * elapsed);
-+      gdouble delta_y, value;
-+
-+      delta_y = (data->y_overshoot + (data->y_velocity * elapsed * BAND_AMPLITUDE)) * damp_factor;
-+
-+      if (fabs (delta_y) >= 1.0)
-+        value = priv->unclamped_vadj_value + (delta_y - old_overshoot_y);
-+      else
-+        value = CLAMP (priv->unclamped_vadj_value,
-+                       gtk_adjustment_get_lower (vadjustment),
-+                       gtk_adjustment_get_upper (vadjustment) -
-+                       gtk_adjustment_get_page_size (vadjustment));
-
-       if (_gtk_scrolled_window_set_adjustment_value (scrolled_window,
-                                                      vadjustment,
-@@ -2256,58 +2320,17 @@ scrolled_window_deceleration_cb (gpointer user_data)
-   _gtk_scrolled_window_get_overshoot (scrolled_window,
-                                       &overshoot_x, &overshoot_y);
-
--  if (overshoot_x == 0)
--    {
--      if (old_overshoot_x != 0)
--        {
--          /* Overshooting finished snapping back */
--          data->x_velocity = 0;
--        }
--      else if (data->x_velocity > 0)
--        {
--          data->x_velocity -= FRICTION_DECELERATION * elapsed * data->vel_sine;
--          data->x_velocity = MAX (0, data->x_velocity);
--        }
--      else if (data->x_velocity < 0)
--        {
--          data->x_velocity += FRICTION_DECELERATION * elapsed * data->vel_sine;
--          data->x_velocity = MIN (0, data->x_velocity);
--        }
--    }
--  else if (overshoot_x < 0)
--    data->x_velocity += OVERSHOOT_INVERSE_ACCELERATION * elapsed;
--  else if (overshoot_x > 0)
--    data->x_velocity -= OVERSHOOT_INVERSE_ACCELERATION * elapsed;
-+  if (overshoot_x != 0)
-+    priv->x_force = overshoot_x * BAND_STIFFNESS;
-
--  if (overshoot_y == 0)
--    {
--      if (old_overshoot_y != 0)
--        {
--          /* Overshooting finished snapping back */
--          data->y_velocity = 0;
--        }
--      else if (data->y_velocity > 0)
--        {
--          data->y_velocity -= FRICTION_DECELERATION * elapsed * data->vel_cosine;
--          data->y_velocity = MAX (0, data->y_velocity);
--        }
--      else if (data->y_velocity < 0)
--        {
--          data->y_velocity += FRICTION_DECELERATION * elapsed * data->vel_cosine;
--          data->y_velocity = MIN (0, data->y_velocity);
--        }
--    }
--  else if (overshoot_y < 0)
--    data->y_velocity += OVERSHOOT_INVERSE_ACCELERATION * elapsed;
--  else if (overshoot_y > 0)
--    data->y_velocity -= OVERSHOOT_INVERSE_ACCELERATION * elapsed;
-+  if (overshoot_y != 0)
-+    priv->y_force = overshoot_y * BAND_STIFFNESS;
-
-   if (old_overshoot_x != overshoot_x ||
-       old_overshoot_y != overshoot_y)
-     _gtk_scrolled_window_allocate_overshoot_window (scrolled_window);
-
--  if (overshoot_x != 0 || overshoot_y != 0 ||
--      data->x_velocity != 0 || data->y_velocity != 0)
-+  if (overshoot_x != 0 || overshoot_y != 0)
-     return TRUE;
-   else
-     {
-@@ -2317,29 +2340,24 @@ scrolled_window_deceleration_cb (gpointer user_data)
- }
-
- static void
--gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window)
-+gtk_scrolled_window_start_snap_back (GtkScrolledWindow *scrolled_window)
- {
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-   KineticScrollData *data;
--  gdouble angle;
-
-   data = g_new0 (KineticScrollData, 1);
-   data->scrolled_window = scrolled_window;
--  data->last_deceleration_time = g_get_monotonic_time ();
-+  data->start_snap_back_time = g_get_monotonic_time ();
-   data->x_velocity = priv->x_velocity;
-   data->y_velocity = priv->y_velocity;
--
--  /* We use sine/cosine as a factor to deceleration x/y components
--   * of the vector, so we care about the sign later.
--   */
--  angle = atan2 (ABS (data->x_velocity), ABS (data->y_velocity));
--  data->vel_cosine = cos (angle);
--  data->vel_sine = sin (angle);
-+  _gtk_scrolled_window_get_overshoot (scrolled_window,
-+                                      &data->x_overshoot,
-+                                      &data->y_overshoot);
-
-   priv->deceleration_id =
-     gdk_threads_add_timeout_full (G_PRIORITY_DEFAULT,
-                                   FRAME_INTERVAL,
--                                  scrolled_window_deceleration_cb,
-+                                  scrolled_window_snap_back_cb,
-                                   data, (GDestroyNotify) g_free);
- }
-
-@@ -2360,13 +2378,14 @@ gtk_scrolled_window_calculate_velocity (GtkScrolledWindow *scrolled_window,
-       gdouble delta_x, delta_y;
-
-       if (gdk_event_get_scroll_deltas (event, &delta_x, &delta_y) &&
-+          priv->last_scroll_event_time > 0 &&
-           ABS (_time - priv->last_scroll_event_time) > STILL_THRESHOLD)
-         {
-           priv->x_velocity = delta_x / (gdouble) (_time - priv->last_scroll_event_time);
-           priv->y_velocity = delta_y / (gdouble) (_time - priv->last_scroll_event_time);
--
--          priv->last_scroll_event_time = _time;
-         }
-+
-+      priv->last_scroll_event_time = _time;
-     }
-
- #undef STILL_THRESHOLD
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0024-Cancel-out-smaller-delta-component.patch b/bockbuild/mac-sdk/patches/gtk/0024-Cancel-out-smaller-delta-component.patch
deleted file mode 100644 (file)
index c6f3494..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-From 649890483c012837251571c0042b9149743be9e7 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Wed, 19 Sep 2012 07:28:20 +0200
-Subject: [PATCH 24/68] Cancel out smaller delta component.
-
----
- gtk/gtkscrolledwindow.c |    8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index f3be303..ab3df16 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -2027,6 +2027,14 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-       if (is_momentum_event && !is_overshot)
-         gtk_scrolled_window_calculate_velocity (scrolled_window, (GdkEvent *)event);
-
-+      /* Cancel out smaller component, makes it easier to scroll when the
-+       * gestures are not fully straight.
-+       */
-+      if (fabs (delta_y) >= fabs (delta_x))
-+        delta_x = 0.0;
-+      else
-+        delta_y = 0.0;
-+
-       /* Scroll events are handled in two cases:
-        *  1) We are not overshot and not snapping back, so scroll as
-        *  usual and also handle momentum events.
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0025-quartz-Add-a-dummy-NSView-serving-as-layer-view.patch b/bockbuild/mac-sdk/patches/gtk/0025-quartz-Add-a-dummy-NSView-serving-as-layer-view.patch
deleted file mode 100644 (file)
index 04efc9d..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-From 3c7e6438bb2420c8fd31ba164c400b66ae474f5d Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 5 Oct 2012 12:10:15 +0200
-Subject: [PATCH 25/68] quartz: Add a dummy NSView serving as layer view
-
-By doing this, the GdkQuartzView does not have to be marked as layer
-backed, such that the disadvantages that come with that (not being able
-to copy pixels and large redraw areas) no longer apply.
----
- gdk/quartz/GdkQuartzView.c    |    6 ++++++
- gdk/quartz/gdkquartz.h        |    1 +
- gdk/quartz/gdkwindow-quartz.c |   16 ++++++++++++++++
- gdk/quartz/gdkwindow-quartz.h |    1 +
- 4 files changed, 24 insertions(+)
-
-diff --git a/gdk/quartz/GdkQuartzView.c b/gdk/quartz/GdkQuartzView.c
-index 7f0ec40..c6ccf06 100644
---- a/gdk/quartz/GdkQuartzView.c
-+++ b/gdk/quartz/GdkQuartzView.c
-@@ -632,6 +632,8 @@
-       [[self window] invalidateShadow];
-       needsInvalidateShadow = NO;
-     }
-+
-+  [[self layer] removeAllAnimations];
- }
-
- -(void)setNeedsInvalidateShadow: (BOOL)invalidate
-@@ -690,7 +692,11 @@
-
- -(void)setFrame: (NSRect)frame
- {
-+  GdkWindowObject *private = GDK_WINDOW_OBJECT (gdk_window);
-+  GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
-+
-   [super setFrame: frame];
-+  [impl->layer_view setFrame: frame];
-
-   if ([self window])
-     [self updateTrackingRect];
-diff --git a/gdk/quartz/gdkquartz.h b/gdk/quartz/gdkquartz.h
-index 3c42983..8b0085c 100644
---- a/gdk/quartz/gdkquartz.h
-+++ b/gdk/quartz/gdkquartz.h
-@@ -54,6 +54,7 @@ typedef enum
-
- NSWindow *gdk_quartz_window_get_nswindow                        (GdkWindow      *window);
- NSView   *gdk_quartz_window_get_nsview                          (GdkWindow      *window);
-+NSView   *gdk_quartz_window_get_layer_view                      (GdkWindow      *window);
- NSImage  *gdk_quartz_pixbuf_to_ns_image_libgtk_only             (GdkPixbuf      *pixbuf);
- id        gdk_quartz_drag_context_get_dragging_info_libgtk_only (GdkDragContext *context);
- NSEvent  *gdk_quartz_event_get_nsevent                          (GdkEvent       *event);
-diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
-index 318a171..500776d 100644
---- a/gdk/quartz/gdkwindow-quartz.c
-+++ b/gdk/quartz/gdkwindow-quartz.c
-@@ -68,6 +68,17 @@ gdk_quartz_window_get_nsview (GdkWindow *window)
-   return ((GdkWindowImplQuartz *)private->impl)->view;
- }
-
-+NSView *
-+gdk_quartz_window_get_layer_view (GdkWindow *window)
-+{
-+  GdkWindowObject *private = (GdkWindowObject *)window;
-+
-+  if (GDK_WINDOW_DESTROYED (window))
-+    return NULL;
-+
-+  return ((GdkWindowImplQuartz *)private->impl)->layer_view;
-+}
-+
- NSWindow *
- gdk_quartz_window_get_nswindow (GdkWindow *window)
- {
-@@ -1024,6 +1035,11 @@ _gdk_window_impl_new (GdkWindow     *window,
-       [impl->view setGdkWindow:window];
-       [impl->toplevel setContentView:impl->view];
-       [impl->view release];
-+
-+        impl->layer_view = [[NSView alloc] initWithFrame:content_rect];
-+        [impl->view addSubview:impl->layer_view];
-+        [impl->layer_view setWantsLayer:YES];
-+        [impl->layer_view release];
-       }
-       break;
-
-diff --git a/gdk/quartz/gdkwindow-quartz.h b/gdk/quartz/gdkwindow-quartz.h
-index 4a0e27a..f35238b 100644
---- a/gdk/quartz/gdkwindow-quartz.h
-+++ b/gdk/quartz/gdkwindow-quartz.h
-@@ -47,6 +47,7 @@ struct _GdkWindowImplQuartz
-   NSWindow *toplevel;
-   NSTrackingRectTag tracking_rect;
-   GdkQuartzView *view;
-+  NSView *layer_view;
-
-   GdkWindowTypeHint type_hint;
-
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0026-gtk-port-overlay-scrollbars-to-native-CALayers.patch b/bockbuild/mac-sdk/patches/gtk/0026-gtk-port-overlay-scrollbars-to-native-CALayers.patch
deleted file mode 100644 (file)
index 5a03745..0000000
+++ /dev/null
@@ -1,1099 +0,0 @@
-From 756b650315bed2426bd7f1e0525a10b707c868e6 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Thu, 27 Sep 2012 17:03:47 +0200
-Subject: [PATCH 26/68] gtk: port overlay scrollbars to native CALayers
-
----
- gtk/gtkscrolledwindow.c |  679 ++++++++++++++++++++++++++---------------------
- 1 file changed, 379 insertions(+), 300 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index ab3df16..1fba87b 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -36,8 +36,12 @@
- #include "gtkintl.h"
- #include "gtkmain.h"
- #include "gtkdnd.h"
-+#include "gtktreeview.h"
- #include "gtkalias.h"
-
-+#include "gdk/quartz/gdkquartz.h"
-+#include <Cocoa/Cocoa.h>
-+
-
- /* scrolled window policy and size requisition handling:
-  *
-@@ -117,6 +121,12 @@ typedef struct {
-   gdouble                unclamped_hadj_value;
-   gdouble                unclamped_vadj_value;
-
-+  GtkAllocation  viewport_allocation;
-+  CALayer       *vbar_layer;
-+  CALayer       *hbar_layer;
-+  CALayer       *vslider_layer;
-+  CALayer       *hslider_layer;
-+
-   GtkAdjustment *opacity;
-   GbAnimation   *opacity_anim;
-
-@@ -243,29 +253,23 @@ static void gtk_scrolled_window_start_fade_out_timeout (GtkScrolledWindow *scrol
- static void gtk_scrolled_window_stop_fade_out_timeout (GtkScrolledWindow *scrolled_window);
- static void gtk_scrolled_window_start_fade_in_animation  (GtkScrolledWindow *scrolled_window);
- static void gtk_scrolled_window_start_fade_out_animation (GtkScrolledWindow *scrolled_window);
--static gboolean
--           gtk_scrolled_window_over_child_scroll_areas (GtkScrolledWindow *scrolled_window,
--                                                        GdkEvent          *event,
-+static gboolean  gtk_scrolled_window_over_scroll_areas (GtkScrolledWindow *scrolled_window,
-                                                         gint               x,
-                                                         gint               y,
-                                                         gboolean          *over_vscroll,
-                                                         gboolean          *over_hscroll);
--static void gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
--                                                        GtkWidget         *child,
--                                                        GdkWindow         *child_window,
-+static void      gtk_scrolled_window_get_scroll_areas  (GtkScrolledWindow *scrolled_window,
-                                                         GdkRectangle      *vbar_rect,
-                                                         GdkRectangle      *vslider_rect,
-                                                         GdkRectangle      *hbar_rect,
-                                                         GdkRectangle      *hslider_rect);
--static gboolean gtk_scrolled_window_child_expose (GtkWidget         *widget,
--                                                  GdkEventExpose    *eevent,
--                                                  GtkScrolledWindow *scrolled_window);
--static void  gtk_scrolled_window_expose_scrollbars (GtkAdjustment     *adj,
--                                                    GtkScrolledWindow *scrolled_window);
-+static void  gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window);
-
- static void gtk_scrolled_window_overlay_scrollbars_changed (GtkSettings *settings,
-                                                             GParamSpec  *arg,
-                                                             gpointer     user_data);
-+static void gtk_scrolled_window_map_layers                 (GtkScrolledWindow *scrolled_window);
-+static void gtk_scrolled_window_unmap_layers               (GtkScrolledWindow *scrolled_window);
-
-
- static void gtk_scrolled_window_start_snap_back         (GtkScrolledWindow *scrolled_window);
-@@ -536,9 +540,9 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
-   priv->sb_width = 6;
-   priv->sb_fade_out_delay = 1000;
-
--  g_signal_connect (priv->opacity, "value-changed",
--                    G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
--                    scrolled_window);
-+  g_signal_connect_swapped (priv->opacity, "value-changed",
-+                            G_CALLBACK (gtk_scrolled_window_update_scrollbars),
-+                            scrolled_window);
- }
-
- /**
-@@ -587,7 +591,6 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-                                    GtkAdjustment     *hadjustment)
- {
-   GtkBin *bin;
--  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
-   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
-   if (hadjustment)
-@@ -623,7 +626,7 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-                                             gtk_scrolled_window_adjustment_value_changed,
-                                             scrolled_window);
-       g_signal_handlers_disconnect_by_func (old_adjustment,
--                                            gtk_scrolled_window_expose_scrollbars,
-+                                            gtk_scrolled_window_update_scrollbars,
-                                             scrolled_window);
-
-       gtk_range_set_adjustment (GTK_RANGE (scrolled_window->hscrollbar),
-@@ -641,18 +644,12 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-   gtk_scrolled_window_adjustment_changed (hadjustment, scrolled_window);
-   gtk_scrolled_window_adjustment_value_changed (hadjustment, scrolled_window);
-
--#if 0
--  g_signal_connect (hadjustment, "value-changed",
--                    G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
--                    scrolled_window);
--#endif
--
--  g_signal_connect (hadjustment, "changed",
--                    G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
--                    scrolled_window);
--  g_signal_connect (hadjustment, "value-changed",
--                    G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
--                    scrolled_window);
-+  g_signal_connect_swapped (hadjustment, "changed",
-+                            G_CALLBACK (gtk_scrolled_window_update_scrollbars),
-+                            scrolled_window);
-+  g_signal_connect_swapped (hadjustment, "value-changed",
-+                            G_CALLBACK (gtk_scrolled_window_update_scrollbars),
-+                            scrolled_window);
-
-   if (bin->child)
-     gtk_widget_set_scroll_adjustments (bin->child,
-@@ -711,7 +708,7 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-                                             gtk_scrolled_window_adjustment_value_changed,
-                                             scrolled_window);
-       g_signal_handlers_disconnect_by_func (old_adjustment,
--                                            gtk_scrolled_window_expose_scrollbars,
-+                                            gtk_scrolled_window_update_scrollbars,
-                                             scrolled_window);
-
-       gtk_range_set_adjustment (GTK_RANGE (scrolled_window->vscrollbar),
-@@ -729,19 +726,12 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-   gtk_scrolled_window_adjustment_changed (vadjustment, scrolled_window);
-   gtk_scrolled_window_adjustment_value_changed (vadjustment, scrolled_window);
-
--#if 0
--  g_signal_connect (vadjustment,
--                    "value-changed",
--                    G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
--                    scrolled_window);
--#endif
--
--  g_signal_connect (vadjustment, "changed",
--                    G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
--                    scrolled_window);
--  g_signal_connect (vadjustment, "value-changed",
--                    G_CALLBACK (gtk_scrolled_window_expose_scrollbars),
--                    scrolled_window);
-+  g_signal_connect_swapped (vadjustment, "changed",
-+                            G_CALLBACK (gtk_scrolled_window_update_scrollbars),
-+                            scrolled_window);
-+  g_signal_connect_swapped (vadjustment, "value-changed",
-+                            G_CALLBACK (gtk_scrolled_window_update_scrollbars),
-+                            scrolled_window);
-
-   if (bin->child)
-     gtk_widget_set_scroll_adjustments (bin->child,
-@@ -1081,7 +1071,7 @@ gtk_scrolled_window_destroy (GtkObject *object)
-                                             gtk_scrolled_window_adjustment_value_changed,
-                                             scrolled_window);
-       g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
--                                            gtk_scrolled_window_expose_scrollbars,
-+                                            gtk_scrolled_window_update_scrollbars,
-                                             scrolled_window);
-
-       gtk_widget_unparent (scrolled_window->hscrollbar);
-@@ -1098,7 +1088,7 @@ gtk_scrolled_window_destroy (GtkObject *object)
-                                             gtk_scrolled_window_adjustment_value_changed,
-                                             scrolled_window);
-       g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
--                                            gtk_scrolled_window_expose_scrollbars,
-+                                            gtk_scrolled_window_update_scrollbars,
-                                             scrolled_window);
-
-       gtk_widget_unparent (scrolled_window->vscrollbar);
-@@ -1276,10 +1266,11 @@ gtk_scrolled_window_screen_changed (GtkWidget *widget,
- }
-
- static void
--gtk_scrolled_window_paint (GtkWidget    *widget,
--                         GdkRectangle *area)
-+gtk_scrolled_window_paint (GtkWidget      *widget,
-+                         GdkEventExpose *event)
- {
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-+  GdkRectangle *area = &event->area;
-   GtkAllocation relative_allocation;
-
-   if (scrolled_window->shadow_type != GTK_SHADOW_NONE)
-@@ -1317,6 +1308,116 @@ gtk_scrolled_window_paint (GtkWidget    *widget,
-     }
- }
-
-+static void
-+gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  GtkWidget *widget = GTK_WIDGET (scrolled_window);
-+  GdkWindow *window;
-+  gint window_height;
-+  GdkRectangle vbar_rect;
-+  GdkRectangle vslider_rect;
-+  GdkRectangle hbar_rect;
-+  GdkRectangle hslider_rect;
-+  CGRect rect;
-+
-+  if (!priv->overlay_scrollbars || !gtk_widget_get_realized (widget))
-+    return;
-+
-+  window = gtk_widget_get_window (gtk_widget_get_toplevel (widget));
-+  window_height = gdk_window_get_height (window);
-+
-+  gtk_scrolled_window_get_scroll_areas (scrolled_window,
-+                                        &vbar_rect, &vslider_rect,
-+                                        &hbar_rect, &hslider_rect);
-+
-+  if (priv->sb_visible && scrolled_window->vscrollbar && vbar_rect.width > 0)
-+    {
-+      rect.origin.x = priv->viewport_allocation.x + vbar_rect.x;
-+      rect.origin.y = priv->viewport_allocation.y + vbar_rect.y;
-+      rect.size.width = vbar_rect.width;
-+      rect.size.height = vbar_rect.height;
-+
-+      rect.origin.y = window_height - rect.origin.y - rect.size.height;
-+
-+      priv->vbar_layer.frame = rect;
-+      priv->vbar_layer.opacity = gtk_adjustment_get_value (priv->opacity) / 2.0;
-+    }
-+  else
-+    {
-+      priv->vbar_layer.opacity = 0.0;
-+    }
-+
-+  if (priv->sb_visible && scrolled_window->hscrollbar && hbar_rect.width > 0)
-+    {
-+      rect.origin.x = priv->viewport_allocation.x + hbar_rect.x;
-+      rect.origin.y = priv->viewport_allocation.y + hbar_rect.y;
-+      rect.size.width = hbar_rect.width;
-+      rect.size.height = hbar_rect.height;
-+
-+      /* don't overlap in the corner */
-+      if (scrolled_window->vscrollbar && vbar_rect.width > 0)
-+        rect.size.width -= vbar_rect.width;
-+
-+      rect.origin.y = window_height - rect.origin.y - rect.size.height;
-+
-+      priv->hbar_layer.frame = rect;
-+      priv->hbar_layer.opacity = gtk_adjustment_get_value (priv->opacity) / 2.0;
-+    }
-+  else
-+    {
-+      priv->hbar_layer.opacity = 0.0;
-+    }
-+
-+  if (scrolled_window->vscrollbar && vslider_rect.width > 0)
-+    {
-+      rect.origin.x = priv->viewport_allocation.x + vslider_rect.x;
-+      rect.origin.y = priv->viewport_allocation.y + vslider_rect.y;
-+      rect.size.width = vslider_rect.width;
-+      rect.size.height = vslider_rect.height;
-+
-+      rect.origin.y = window_height - rect.origin.y - rect.size.height;
-+
-+      priv->vslider_layer.frame = rect;
-+      priv->vslider_layer.cornerRadius = priv->sb_radius;
-+      priv->vslider_layer.opacity = gtk_adjustment_get_value (priv->opacity);
-+    }
-+  else
-+    {
-+      priv->vslider_layer.opacity = 0.0;
-+    }
-+
-+  if (scrolled_window->hscrollbar && hslider_rect.width > 0)
-+    {
-+      rect.origin.x = priv->viewport_allocation.x + hslider_rect.x;
-+      rect.origin.y = priv->viewport_allocation.y + hslider_rect.y;
-+      rect.size.width = hslider_rect.width;
-+      rect.size.height = hslider_rect.height;
-+
-+      rect.origin.y = window_height - rect.origin.y - rect.size.height;
-+
-+      priv->hslider_layer.frame = rect;
-+      priv->hslider_layer.cornerRadius = priv->sb_radius;
-+      priv->hslider_layer.opacity = gtk_adjustment_get_value (priv->opacity);
-+    }
-+  else
-+    {
-+      priv->hslider_layer.opacity = 0.0;
-+    }
-+
-+  [priv->vbar_layer removeAllAnimations];
-+  [priv->vbar_layer setNeedsDisplay];
-+
-+  [priv->vslider_layer removeAllAnimations];
-+  [priv->vslider_layer setNeedsDisplay];
-+
-+  [priv->hbar_layer removeAllAnimations];
-+  [priv->hbar_layer setNeedsDisplay];
-+
-+  [priv->hslider_layer removeAllAnimations];
-+  [priv->hslider_layer setNeedsDisplay];
-+}
-+
- static gboolean
- gtk_scrolled_window_expose (GtkWidget      *widget,
-                           GdkEventExpose *event)
-@@ -1326,23 +1427,11 @@ gtk_scrolled_window_expose (GtkWidget      *widget,
-
-   if (gtk_widget_is_drawable (widget))
-     {
--      GdkWindow *hscrollbar_window = NULL;
--      GdkWindow *vscrollbar_window = NULL;
-+      gtk_scrolled_window_paint (widget, event);
-
--      if (scrolled_window->hscrollbar)
--        hscrollbar_window = gtk_widget_get_window (scrolled_window->hscrollbar);
-+      GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->expose_event (widget, event);
-
--      if (scrolled_window->vscrollbar)
--        vscrollbar_window = gtk_widget_get_window (scrolled_window->vscrollbar);
--
--      if (event->window == priv->overshoot_window ||
--          event->window == priv->vbackground_window ||
--          event->window == priv->hbackground_window ||
--          event->window == hscrollbar_window ||
--          event->window == vscrollbar_window)
--        GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->expose_event (widget, event);
--      else
--        gtk_scrolled_window_paint (widget, &event->area);
-+      gtk_scrolled_window_update_scrollbars (scrolled_window);
-     }
-
-   return FALSE;
-@@ -1554,6 +1643,8 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-         else
-           requisition->width += vscrollbar_requisition.width;
-       }
-+      else
-+        requisition->width += priv->sb_width + 2 * priv->sb_padding;
-
-       if (scrolled_window->vscrollbar_policy == GTK_POLICY_NEVER)
-       requisition->height += child_requisition.height;
-@@ -1569,6 +1660,8 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-         else
-           requisition->height += hscrollbar_requisition.height;
-       }
-+      else
-+        requisition->height += priv->sb_width + 2 * priv->sb_padding;
-     }
-
-   if (! priv->overlay_scrollbars)
-@@ -1785,6 +1878,12 @@ _gtk_scrolled_window_allocate_overshoot_window (GtkScrolledWindow *scrolled_wind
-     }
-   else
-     gdk_window_hide (priv->hbackground_window);
-+
-+  if (priv->overlay_scrollbars)
-+    {
-+      gtk_scrolled_window_start_fade_in_animation (scrolled_window);
-+      gtk_scrolled_window_update_scrollbars (scrolled_window);
-+    }
- }
-
- static void
-@@ -1811,6 +1910,35 @@ gtk_scrolled_window_allocate_child (GtkScrolledWindow *swindow,
- }
-
- static void
-+gtk_scrolled_window_compute_viewport_allocation (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+  GtkWidget *widget = GTK_WIDGET (scrolled_window);
-+  GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
-+  gint toplevel_alloc_x, toplevel_alloc_y;
-+
-+  /* Translate the viewport_allocation coordinates to coordinates relative to
-+   * the toplevel. Then set these coordinates as viewport_allocation, which
-+   * will be used to draw the scrollbars to the CALayer.
-+   */
-+  gtk_scrolled_window_relative_allocation (widget, &priv->viewport_allocation);
-+  if (gtk_widget_translate_coordinates (widget, toplevel,
-+                                        priv->viewport_allocation.x,
-+                                        priv->viewport_allocation.y,
-+                                        &toplevel_alloc_x, &toplevel_alloc_y))
-+    {
-+      priv->viewport_allocation.x = toplevel_alloc_x;
-+      priv->viewport_allocation.y = toplevel_alloc_y;
-+    }
-+  else
-+    {
-+      /* Fallback using only the widget's allocation. */
-+      priv->viewport_allocation.x += widget->allocation.x;
-+      priv->viewport_allocation.y += widget->allocation.y;
-+    }
-+}
-+
-+static void
- gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-                                  GtkAllocation *allocation)
- {
-@@ -1829,8 +1957,6 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-   bin = GTK_BIN (scrolled_window);
-
--  gtk_scrolled_window_expose_scrollbars (NULL, scrolled_window);
--
-   scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
-   gtk_widget_style_get (widget, "scrollbars-within-bevel", &scrollbars_within_bevel, NULL);
-
-@@ -1879,6 +2005,9 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-       }
-       while (previous_hvis != scrolled_window->hscrollbar_visible ||
-            previous_vvis != scrolled_window->vscrollbar_visible);
-+
-+      if (gtk_widget_get_realized (widget))
-+        gtk_scrolled_window_compute_viewport_allocation (scrolled_window);
-     }
-   else
-     {
-@@ -2166,6 +2295,10 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-            priv->y_force = 0.0;
-          }
-
-+       /* Stop fade out timeout while we're overshot */
-+       if (new_overshoot_x != 0 || new_overshoot_y != 0)
-+         gtk_scrolled_window_stop_fade_out_timeout (scrolled_window);
-+
-       /* If we should start a snap back and no current deceleration
-        * is active, start the snap back.
-        */
-@@ -2343,6 +2476,10 @@ scrolled_window_snap_back_cb (gpointer user_data)
-   else
-     {
-       priv->deceleration_id = 0;
-+
-+      /* Snap back has finished, make sure the scrollbars will fade out */
-+      gtk_scrolled_window_start_fade_out_timeout (scrolled_window);
-+
-       return FALSE;
-     }
- }
-@@ -2445,6 +2582,25 @@ static gboolean
- gtk_scrolled_window_captured_motion_notify_scrollbar (GtkWidget *widget,
-                                                       GdkEvent  *event);
-
-+static void
-+gtk_scrolled_window_translate_coordinates (GtkWidget  *src_widget,
-+                                           GtkWidget  *dest_widget,
-+                                           gint        src_x,
-+                                           gint        src_y,
-+                                           gint       *dest_x,
-+                                           gint       *dest_y)
-+{
-+  if (GTK_IS_TREE_VIEW (src_widget))
-+    {
-+      gtk_tree_view_convert_bin_window_to_widget_coords (GTK_TREE_VIEW (src_widget),
-+                                                         src_x, src_y,
-+                                                         &src_x, &src_y);
-+    }
-+
-+  gtk_widget_translate_coordinates (src_widget, dest_widget,
-+                                    src_x, src_y, dest_x, dest_y);
-+}
-+
- static gboolean
- gtk_scrolled_window_captured_button_press_scrollbar (GtkWidget *widget,
-                                                      GdkEvent  *event)
-@@ -2452,14 +2608,19 @@ gtk_scrolled_window_captured_button_press_scrollbar (GtkWidget *widget,
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-   GdkEventButton *bevent = (GdkEventButton *) event;
-+  GtkWidget *event_widget = gtk_get_event_widget (event);
-+  gint x, y;
-
-   if (bevent->button != 1)
-     return FALSE;
-
--  if (gtk_scrolled_window_over_child_scroll_areas (scrolled_window, event,
--                                                   bevent->x, bevent->y,
--                                                   &priv->sb_grab_vscroll,
--                                                   &priv->sb_grab_hscroll))
-+  gtk_scrolled_window_translate_coordinates (event_widget, widget,
-+                                             bevent->x, bevent->y, &x, &y);
-+
-+  if (gtk_scrolled_window_over_scroll_areas (scrolled_window,
-+                                             x, y,
-+                                             &priv->sb_grab_vscroll,
-+                                             &priv->sb_grab_hscroll))
-     {
-       GdkRectangle vbar_rect;
-       GdkRectangle vslider_rect;
-@@ -2469,11 +2630,9 @@ gtk_scrolled_window_captured_button_press_scrollbar (GtkWidget *widget,
-       priv->sb_pointer_grabbed = TRUE;
-       gtk_grab_add (widget);
-
--      gtk_scrolled_window_get_child_scroll_areas (scrolled_window,
--                                                  gtk_bin_get_child (GTK_BIN (widget)),
--                                                  bevent->window,
--                                                  &vbar_rect, &vslider_rect,
--                                                  &hbar_rect, &hslider_rect);
-+      gtk_scrolled_window_get_scroll_areas (scrolled_window,
-+                                            &vbar_rect, &vslider_rect,
-+                                            &hbar_rect, &hslider_rect);
-
-       if (priv->sb_grab_vscroll)
-         {
-@@ -2481,20 +2640,20 @@ gtk_scrolled_window_captured_button_press_scrollbar (GtkWidget *widget,
-           vslider_rect.x = vbar_rect.x;
-           vslider_rect.width = vbar_rect.width;
-
--          if (bevent->x >= vslider_rect.x &&
--              bevent->x < (vslider_rect.x + vslider_rect.width) &&
--              bevent->y >= vslider_rect.y &&
--              bevent->y < (vslider_rect.y + vslider_rect.height))
-+          if (x >= vslider_rect.x &&
-+              x < (vslider_rect.x + vslider_rect.width) &&
-+              y >= vslider_rect.y &&
-+              y < (vslider_rect.y + vslider_rect.height))
-             {
-               priv->sb_drag_slider = TRUE;
--              priv->sb_grab_offset_y = bevent->y - vslider_rect.y;
-+              priv->sb_grab_offset_y = y - vslider_rect.y;
-             }
-           else
-             {
-               priv->sb_drag_slider = FALSE;
--              priv->sb_grab_offset_y = bevent->y - vbar_rect.y;
-+              priv->sb_grab_offset_y = y - vbar_rect.y;
-
--              if (bevent->y < vslider_rect.y)
-+              if (y < vslider_rect.y)
-                 priv->sb_scroll_direction = -1;
-               else
-                 priv->sb_scroll_direction = 1;
-@@ -2506,20 +2665,20 @@ gtk_scrolled_window_captured_button_press_scrollbar (GtkWidget *widget,
-           hslider_rect.y = hbar_rect.y;
-           hslider_rect.height = hbar_rect.height;
-
--          if (bevent->x >= hslider_rect.x &&
--              bevent->x < (hslider_rect.x + hslider_rect.width) &&
--              bevent->y >= hslider_rect.y &&
--              bevent->y < (hslider_rect.y + hslider_rect.height))
-+          if (x >= hslider_rect.x &&
-+              x < (hslider_rect.x + hslider_rect.width) &&
-+              y >= hslider_rect.y &&
-+              y < (hslider_rect.y + hslider_rect.height))
-             {
-               priv->sb_drag_slider = TRUE;
--              priv->sb_grab_offset_x = bevent->x - hslider_rect.x;
-+              priv->sb_grab_offset_x = x - hslider_rect.x;
-             }
-           else
-             {
-               priv->sb_drag_slider = FALSE;
--              priv->sb_grab_offset_x = bevent->x - hbar_rect.x;
-+              priv->sb_grab_offset_x = x - hbar_rect.x;
-
--              if (bevent->x < hslider_rect.x)
-+              if (x < hslider_rect.x)
-                 priv->sb_scroll_direction = -1;
-               else
-                 priv->sb_scroll_direction = 1;
-@@ -2597,6 +2756,11 @@ gtk_scrolled_window_captured_motion_notify_scrollbar (GtkWidget *widget,
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-   GdkEventMotion *mevent = (GdkEventMotion *) event;
-+  GtkWidget *event_widget = gtk_get_event_widget (event);
-+  gint x, y;
-+
-+  gtk_scrolled_window_translate_coordinates (event_widget, widget,
-+                                             mevent->x, mevent->y, &x, &y);
-
-   if (priv->sb_pointer_grabbed)
-     {
-@@ -2611,22 +2775,20 @@ gtk_scrolled_window_captured_motion_notify_scrollbar (GtkWidget *widget,
-           gint visible_range;
-           gdouble value;
-
--          gtk_scrolled_window_get_child_scroll_areas (scrolled_window,
--                                                      gtk_bin_get_child (GTK_BIN (widget)),
--                                                      mevent->window,
--                                                      &vbar_rect, &vslider_rect,
--                                                      &hbar_rect, &hslider_rect);
-+          gtk_scrolled_window_get_scroll_areas (scrolled_window,
-+                                                &vbar_rect, &vslider_rect,
-+                                                &hbar_rect, &hslider_rect);
-
-           if (priv->sb_grab_vscroll)
-             {
-               adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
--              pos = mevent->y - priv->sb_grab_offset_y - vbar_rect.y;
-+              pos = y - priv->sb_grab_offset_y - vbar_rect.y;
-               visible_range = vbar_rect.height - vslider_rect.height;
-             }
-           else if (priv->sb_grab_hscroll)
-             {
-               adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
--              pos = mevent->x - priv->sb_grab_offset_x - hbar_rect.x;
-+              pos = x - priv->sb_grab_offset_x - hbar_rect.x;
-               visible_range = hbar_rect.width - hslider_rect.width;
-             }
-
-@@ -2641,9 +2803,9 @@ gtk_scrolled_window_captured_motion_notify_scrollbar (GtkWidget *widget,
-     }
-   else
-     {
--      if (gtk_scrolled_window_over_child_scroll_areas (scrolled_window, event,
--                                                       mevent->x, mevent->y,
--                                                       NULL, NULL))
-+      if (gtk_scrolled_window_over_scroll_areas (scrolled_window,
-+                                                 x, y,
-+                                                 NULL, NULL))
-         {
-           priv->sb_hovering = TRUE;
-           priv->sb_visible = TRUE;
-@@ -2652,7 +2814,7 @@ gtk_scrolled_window_captured_motion_notify_scrollbar (GtkWidget *widget,
-           gtk_scrolled_window_stop_fade_out_timeout (scrolled_window);
-
-           /* needed when entering the scrollbar */
--          gtk_scrolled_window_expose_scrollbars (NULL, scrolled_window);
-+          gtk_scrolled_window_update_scrollbars (scrolled_window);
-
-           return TRUE;
-         }
-@@ -2839,10 +3001,6 @@ gtk_scrolled_window_add (GtkContainer *container,
-                                           gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar))))
-     g_warning ("gtk_scrolled_window_add(): cannot add non scrollable widget "
-              "use gtk_scrolled_window_add_with_viewport() instead");
--
--  g_signal_connect_after (child, "expose-event",
--                          G_CALLBACK (gtk_scrolled_window_child_expose),
--                          container);
- }
-
- static void
-@@ -2857,10 +3015,6 @@ gtk_scrolled_window_remove (GtkContainer *container,
-
-   priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (container);
-
--  g_signal_handlers_disconnect_by_func (child,
--                                        gtk_scrolled_window_child_expose,
--                                        container);
--
-   gtk_widget_set_scroll_adjustments (child, NULL, NULL);
-
-   /* chain parent class handler to remove child */
-@@ -3033,6 +3187,37 @@ gtk_scrolled_window_realize (GtkWidget *widget)
-                                   priv->overshoot_window);
-
-   GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->realize (widget);
-+
-+  gtk_scrolled_window_compute_viewport_allocation (scrolled_window);
-+
-+  GdkWindow *parent_window = gtk_widget_get_window (gtk_widget_get_toplevel (widget));
-+  NSView    *layer_view;
-+  CALayer   *parent_layer;
-+
-+  layer_view = gdk_quartz_window_get_layer_view (parent_window);
-+  parent_layer = [layer_view layer];
-+
-+  priv->vbar_layer = [[CALayer layer] retain];
-+  priv->vbar_layer.backgroundColor = CGColorCreateGenericRGB (0.0, 0.0, 0.0, 0.5);
-+  priv->vbar_layer.hidden = YES;
-+
-+  priv->vslider_layer = [[CALayer layer] retain];
-+  priv->vslider_layer.backgroundColor = CGColorCreateGenericRGB (0.0, 0.0, 0.0, 1.0);
-+  priv->vslider_layer.hidden = YES;
-+
-+  priv->hbar_layer = [[CALayer layer] retain];
-+  priv->hbar_layer.backgroundColor = CGColorCreateGenericRGB (0.0, 0.0, 0.0, 0.5);
-+  priv->hbar_layer.hidden = YES;
-+
-+  priv->hslider_layer = [[CALayer layer] retain];
-+  priv->hslider_layer.backgroundColor = CGColorCreateGenericRGB (0.0, 0.0, 0.0, 1.0);
-+  priv->hslider_layer.hidden = YES;
-+
-+  [parent_layer addSublayer:priv->vbar_layer];
-+  [parent_layer addSublayer:priv->vslider_layer];
-+
-+  [parent_layer addSublayer:priv->hbar_layer];
-+  [parent_layer addSublayer:priv->hslider_layer];
- }
-
- static void
-@@ -3053,6 +3238,22 @@ gtk_scrolled_window_unrealize (GtkWidget *widget)
-   gdk_window_destroy (priv->hbackground_window);
-   priv->hbackground_window = NULL;
-
-+  [priv->vbar_layer removeFromSuperlayer];
-+  [priv->vbar_layer release];
-+  priv->vbar_layer = NULL;
-+
-+  [priv->vslider_layer removeFromSuperlayer];
-+  [priv->vslider_layer release];
-+  priv->vslider_layer = NULL;
-+
-+  [priv->hbar_layer removeFromSuperlayer];
-+  [priv->hbar_layer release];
-+  priv->hbar_layer = NULL;
-+
-+  [priv->hslider_layer removeFromSuperlayer];
-+  [priv->hslider_layer release];
-+  priv->hslider_layer = NULL;
-+
-   gtk_widget_set_realized (widget, FALSE);
-
-   GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->unrealize (widget);
-@@ -3076,6 +3277,9 @@ gtk_scrolled_window_map (GtkWidget *widget)
-     gdk_window_hide (priv->hbackground_window);
-
-   GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->map (widget);
-+
-+  if (priv->overlay_scrollbars)
-+    gtk_scrolled_window_map_layers (scrolled_window);
- }
-
- static void
-@@ -3088,6 +3292,9 @@ gtk_scrolled_window_unmap (GtkWidget *widget)
-   gdk_window_hide (priv->vbackground_window);
-   gdk_window_hide (priv->hbackground_window);
-
-+  /* Always unmap the layers, regardless of overlay state */
-+  gtk_scrolled_window_unmap_layers (scrolled_window);
-+
-   GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->unmap (widget);
- }
-
-@@ -3117,75 +3324,25 @@ gtk_scrolled_window_grab_notify (GtkWidget *widget,
-     }
- }
-
--static void
--gtk_scrolled_window_rounded_rectangle (cairo_t *cr,
--                                       gint     x,
--                                       gint     y,
--                                       gint     width,
--                                       gint     height,
--                                       gint     x_radius,
--                                       gint     y_radius)
--{
--  gint x1, x2;
--  gint y1, y2;
--  gint xr1, xr2;
--  gint yr1, yr2;
--
--  x1 = x;
--  x2 = x1 + width;
--  y1 = y;
--  y2 = y1 + height;
--
--  x_radius = MIN (x_radius, width  / 2.0);
--  y_radius = MIN (y_radius, height / 2.0);
--
--  xr1 = x_radius;
--  xr2 = x_radius / 2.0;
--  yr1 = y_radius;
--  yr2 = y_radius / 2.0;
--
--  cairo_move_to    (cr, x1 + xr1, y1);
--  cairo_line_to    (cr, x2 - xr1, y1);
--  cairo_curve_to   (cr, x2 - xr2, y1, x2, y1 + yr2, x2, y1 + yr1);
--  cairo_line_to    (cr, x2, y2 - yr1);
--  cairo_curve_to   (cr, x2, y2 - yr2, x2 - xr2, y2, x2 - xr1, y2);
--  cairo_line_to    (cr, x1 + xr1, y2);
--  cairo_curve_to   (cr, x1 + xr2, y2, x1, y2 - yr2, x1, y2 - yr1);
--  cairo_line_to    (cr, x1, y1 + yr1);
--  cairo_curve_to   (cr, x1, y1 + yr2, x1 + xr2, y1, x1 + xr1, y1);
--  cairo_close_path (cr);
--}
--
- static gboolean
--gtk_scrolled_window_over_child_scroll_areas (GtkScrolledWindow *scrolled_window,
--                                             GdkEvent          *event,
--                                             gint               x,
--                                             gint               y,
--                                             gboolean          *over_vscroll,
--                                             gboolean          *over_hscroll)
-+gtk_scrolled_window_over_scroll_areas (GtkScrolledWindow *scrolled_window,
-+                                       gint               x,
-+                                       gint               y,
-+                                       gboolean          *over_vscroll,
-+                                       gboolean          *over_hscroll)
- {
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--  GtkWidget *child;
-   GdkRectangle vbar_rect;
-   GdkRectangle hbar_rect;
-   gboolean over_v = FALSE;
-   gboolean over_h = FALSE;
-
--  child = gtk_bin_get_child (GTK_BIN (scrolled_window));
--  if (!child)
--    return FALSE;
--
--  if (gtk_get_event_widget (event) != child)
--    return FALSE;
--
-   if (gtk_adjustment_get_value (priv->opacity) == 0.0)
-     return FALSE;
-
--  gtk_scrolled_window_get_child_scroll_areas (scrolled_window,
--                                              child,
--                                              ((GdkEventAny *) event)->window,
--                                              &vbar_rect, NULL,
--                                              &hbar_rect, NULL);
-+  gtk_scrolled_window_get_scroll_areas (scrolled_window,
-+                                        &vbar_rect, NULL,
-+                                        &hbar_rect, NULL);
-
-   if (vbar_rect.width > 0 &&
-       x >= vbar_rect.x && x < (vbar_rect.x + vbar_rect.width) &&
-@@ -3207,72 +3364,48 @@ gtk_scrolled_window_over_child_scroll_areas (GtkScrolledWindow *scrolled_window,
- }
-
- static void
--gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
--                                            GtkWidget         *child,
--                                            GdkWindow         *child_window,
--                                            GdkRectangle      *vbar_rect,
--                                            GdkRectangle      *vslider_rect,
--                                            GdkRectangle      *hbar_rect,
--                                            GdkRectangle      *hslider_rect)
-+gtk_scrolled_window_get_scroll_areas (GtkScrolledWindow *scrolled_window,
-+                                      GdkRectangle      *vbar_rect,
-+                                      GdkRectangle      *vslider_rect,
-+                                      GdkRectangle      *hbar_rect,
-+                                      GdkRectangle      *hslider_rect)
- {
-    GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-    GtkAdjustment *adj;
--   GtkAllocation allocation;
-+   gdouble value;
-    gdouble lower;
-    gdouble page_size;
-    gdouble upper;
--   gdouble value_h = 0.0;
--   gdouble value_v = 0.0;
-    gdouble ratio;
-    gdouble width;
-    gdouble height;
-    gdouble x;
-    gdouble y;
--   gint window_width;
--   gint window_height;
-    gint viewport_width;
-    gint viewport_height;
-    gint offset_x = 0;
-    gint offset_y = 0;
-
--   window_width = gdk_window_get_width (child_window);
--   window_height = gdk_window_get_height (child_window);
--
--   gtk_widget_get_allocation (child, &allocation);
--
--   viewport_width = MIN (window_width, allocation.width);
--   viewport_height = MIN (window_height, allocation.height);
--
--   if (scrolled_window->vscrollbar)
--     {
--       adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
--
--       value_v = gtk_adjustment_get_value (adj);
--     }
--
--   if (scrolled_window->hscrollbar)
--     {
--       adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
--
--       value_h = gtk_adjustment_get_value (adj);
--     }
--
--   if (window_width > allocation.width)
--     offset_x = value_h;
--
--   if (window_height > allocation.height)
--     offset_y = value_v;
-+   viewport_width = priv->viewport_allocation.width;
-+   viewport_height = priv->viewport_allocation.height;
-
-    if ((vbar_rect || vslider_rect) && scrolled_window->vscrollbar)
-      {
-        adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-
-        g_object_get (adj,
-+                     "value", &value,
-                      "lower", &lower,
-                      "upper", &upper,
-                      "page-size", &page_size,
-                      NULL);
-
-+       /* take overshooting into account */
-+       if (priv->unclamped_vadj_value + page_size > upper)
-+         page_size = upper - priv->unclamped_vadj_value;
-+       else if (priv->unclamped_vadj_value < 0.0)
-+         page_size += priv->unclamped_vadj_value;
-+
-        ratio = page_size / (upper - lower);
-        if (ratio < 1.0)
-          {
-@@ -3280,7 +3413,7 @@ gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-            height = MAX (height, 20);
-            height = MIN (height, viewport_height - (2 * priv->sb_padding));
-
--           ratio = (value_v - lower) / (upper - page_size - lower);
-+           ratio = (value - lower) / (upper - page_size - lower);
-            y = ratio * (viewport_height - (2 * priv->sb_padding) - height) + priv->sb_padding;
-            x = viewport_width - priv->sb_width - priv->sb_padding;
-
-@@ -3328,11 +3461,18 @@ gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-        adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-
-        g_object_get (adj,
-+                     "value", &value,
-                      "lower", &lower,
-                      "upper", &upper,
-                      "page-size", &page_size,
-                      NULL);
-
-+       /* take overshooting into account */
-+       if (priv->unclamped_hadj_value + page_size > upper)
-+         page_size = upper - priv->unclamped_hadj_value;
-+       else if (priv->unclamped_hadj_value < 0.0)
-+         page_size += priv->unclamped_hadj_value;
-+
-        ratio = page_size / (upper - lower);
-        if (ratio < 1.0)
-          {
-@@ -3340,7 +3480,7 @@ gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-            width = MAX (width, 20);
-            width = MIN (width, viewport_width - (2 * priv->sb_padding));
-
--           ratio = (value_h - lower) / (upper - page_size - lower);
-+           ratio = (value - lower) / (upper - page_size - lower);
-            x = ratio * (viewport_width - (2 * priv->sb_padding) - width) + priv->sb_padding;
-            y = viewport_height - priv->sb_width - priv->sb_padding;
-
-@@ -3384,69 +3524,6 @@ gtk_scrolled_window_get_child_scroll_areas (GtkScrolledWindow *scrolled_window,
-      }
- }
-
--static gboolean
--gtk_scrolled_window_child_expose (GtkWidget         *widget,
--                                  GdkEventExpose    *eevent,
--                                  GtkScrolledWindow *scrolled_window)
--{
--   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--   GdkRectangle vbar_rect;
--   GdkRectangle vslider_rect;
--   GdkRectangle hbar_rect;
--   GdkRectangle hslider_rect;
--   cairo_t   *cr;
--
--   if (!priv->overlay_scrollbars)
--     return FALSE;
--
--   cr = gdk_cairo_create (eevent->window);
--   gdk_cairo_region (cr, eevent->region);
--   cairo_clip (cr);
--
--   gtk_scrolled_window_get_child_scroll_areas (scrolled_window,
--                                               gtk_bin_get_child (GTK_BIN (scrolled_window)),
--                                               eevent->window,
--                                               &vbar_rect, &vslider_rect,
--                                               &hbar_rect, &hslider_rect);
--
--   if (priv->sb_visible)
--     {
--       if (scrolled_window->vscrollbar && vbar_rect.width > 0)
--         gdk_cairo_rectangle (cr, &vbar_rect);
--
--       if (scrolled_window->hscrollbar && hbar_rect.width > 0)
--         gdk_cairo_rectangle (cr, &hbar_rect);
--
--       cairo_set_source_rgba (cr, 0, 0, 0, gtk_adjustment_get_value (priv->opacity) / 2.0);
--       cairo_fill (cr);
--     }
--
--   if (scrolled_window->vscrollbar && vslider_rect.width > 0)
--     gtk_scrolled_window_rounded_rectangle (cr,
--                                            vslider_rect.x,
--                                            vslider_rect.y,
--                                            vslider_rect.width,
--                                            vslider_rect.height,
--                                            priv->sb_radius,
--                                            priv->sb_radius);
--
--   if (scrolled_window->hscrollbar && hslider_rect.width > 0)
--     gtk_scrolled_window_rounded_rectangle (cr,
--                                            hslider_rect.x,
--                                            hslider_rect.y,
--                                            hslider_rect.width,
--                                            hslider_rect.height,
--                                            priv->sb_radius,
--                                            priv->sb_radius);
--
--   cairo_set_source_rgba (cr, 0, 0, 0, gtk_adjustment_get_value (priv->opacity));
--   cairo_fill (cr);
--
--   cairo_destroy (cr);
--
--   return FALSE;
--}
--
- static void
- gtk_scrolled_window_cancel_animation (GtkScrolledWindow *scrolled_window)
- {
-@@ -3541,39 +3618,6 @@ gtk_scrolled_window_start_fade_out_animation (GtkScrolledWindow *scrolled_window
- }
-
- static void
--gtk_scrolled_window_expose_scrollbars (GtkAdjustment     *adj,
--                                       GtkScrolledWindow *scrolled_window)
--{
--  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
--
--  if (priv->overlay_scrollbars)
--    {
--      GtkWidget *child = gtk_bin_get_child (GTK_BIN (scrolled_window));
--
--      if (child && gtk_widget_get_visible (child))
--        {
--          GtkAllocation alloc;
--
--          gtk_widget_get_allocation (child, &alloc);
--
--          if (scrolled_window->vscrollbar)
--            gtk_widget_queue_draw_area (child,
--                                        alloc.width - 20,
--                                        0,
--                                        20,
--                                        alloc.height);
--
--          if (scrolled_window->hscrollbar)
--            gtk_widget_queue_draw_area (child,
--                                        0,
--                                        alloc.height - 20,
--                                        alloc.width,
--                                        20);
--        }
--    }
--}
--
--static void
- gtk_scrolled_window_init_overlay_scrollbars (GtkScrolledWindow *scrolled_window)
- {
-   _gtk_widget_set_captured_event_handler (GTK_WIDGET (scrolled_window),
-@@ -3592,8 +3636,43 @@ gtk_scrolled_window_overlay_scrollbars_changed (GtkSettings *settings,
-                 &priv->overlay_scrollbars,
-                 NULL);
-
-+  if (priv->overlay_scrollbars)
-+    gtk_scrolled_window_map_layers (GTK_SCROLLED_WINDOW (user_data));
-+  else
-+    gtk_scrolled_window_unmap_layers (GTK_SCROLLED_WINDOW (user_data));
-+
-   gtk_widget_queue_resize (user_data);
- }
-
-+static void
-+gtk_scrolled_window_map_layers (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  priv->vbar_layer.hidden = NO;
-+  priv->vslider_layer.hidden = NO;
-+
-+  priv->hbar_layer.hidden = NO;
-+  priv->hslider_layer.hidden = NO;
-+}
-+
-+static void
-+gtk_scrolled_window_unmap_layers (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  priv->vbar_layer.hidden = YES;
-+  [priv->vbar_layer setNeedsDisplay];
-+
-+  priv->vslider_layer.hidden = YES;
-+  [priv->vslider_layer setNeedsDisplay];
-+
-+  priv->hbar_layer.hidden = YES;
-+  [priv->hbar_layer setNeedsDisplay];
-+
-+  priv->hslider_layer.hidden = YES;
-+  [priv->hslider_layer setNeedsDisplay];
-+}
-+
- #define __GTK_SCROLLED_WINDOW_C__
- #include "gtkaliasdef.c"
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0027-Refrain-from-starting-fading-out-while-a-gesture-is-.patch b/bockbuild/mac-sdk/patches/gtk/0027-Refrain-from-starting-fading-out-while-a-gesture-is-.patch
deleted file mode 100644 (file)
index 7aa5471..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-From d35ff9d66c8d76d509819dabc7b97972b76d7438 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Mon, 8 Oct 2012 11:48:38 +0200
-Subject: [PATCH 27/68] Refrain from starting fading out while a gesture is in
- progress
-
----
- gtk/gtkscrolledwindow.c |   20 ++++++++++++++++----
- 1 file changed, 16 insertions(+), 4 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 1fba87b..a04436b 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -153,6 +153,7 @@ typedef struct {
-
-   gboolean       overlay_scrollbars;
-   gboolean       is_snapping_back;
-+  gboolean       gesture_in_progress;
- } GtkScrolledWindowPrivate;
-
- #define GTK_SCROLLED_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowPrivate))
-@@ -2151,7 +2152,10 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-        * FIXME: check if overshoot has really ended.
-        */
-       if (event->phase == GDK_EVENT_SCROLL_PHASE_START)
--        priv->is_snapping_back = FALSE;
-+        {
-+          priv->is_snapping_back = FALSE;
-+          priv->gesture_in_progress = TRUE;
-+        }
-
-       if (is_momentum_event && !is_overshot)
-         gtk_scrolled_window_calculate_velocity (scrolled_window, (GdkEvent *)event);
-@@ -2291,13 +2295,20 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-        /* Reset force if gesture has ended. */
-        if (event->phase == GDK_EVENT_SCROLL_PHASE_END)
-          {
-+           priv->gesture_in_progress = FALSE;
-+
-            priv->x_force = 0.0;
-            priv->y_force = 0.0;
-          }
-
--       /* Stop fade out timeout while we're overshot */
--       if (new_overshoot_x != 0 || new_overshoot_y != 0)
-+       /* Stop fade out timeout while we're overshot or while
-+        * a gesture is in progress.
-+        */
-+       if (new_overshoot_x != 0 || new_overshoot_y != 0 ||
-+           priv->gesture_in_progress)
-          gtk_scrolled_window_stop_fade_out_timeout (scrolled_window);
-+       else
-+         gtk_scrolled_window_start_fade_out_timeout (scrolled_window);
-
-       /* If we should start a snap back and no current deceleration
-        * is active, start the snap back.
-@@ -3598,7 +3609,8 @@ gtk_scrolled_window_start_fade_in_animation (GtkScrolledWindow *scrolled_window)
-   g_object_add_weak_pointer (G_OBJECT (priv->opacity_anim),
-                              (gpointer *) &priv->opacity_anim);
-
--  gtk_scrolled_window_start_fade_out_timeout (scrolled_window);
-+  if (!priv->gesture_in_progress)
-+    gtk_scrolled_window_start_fade_out_timeout (scrolled_window);
- }
-
- static void
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0028-gtk-don-t-show-the-olverlay-scrollbars-if-only-the-s.patch b/bockbuild/mac-sdk/patches/gtk/0028-gtk-don-t-show-the-olverlay-scrollbars-if-only-the-s.patch
deleted file mode 100644 (file)
index 26bd9e5..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-From 133655d890a4513783e4cb13e25770a84d5c41d8 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 2 Nov 2012 16:02:32 +0100
-Subject: [PATCH 28/68] gtk: don't show the olverlay scrollbars if only the
- size of the content changes
-
-This commit also optimizes away many signal connections and thus
-double and triple updates.
----
- gtk/gtkscrolledwindow.c |   57 ++++++++++++++++++++---------------------------
- 1 file changed, 24 insertions(+), 33 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index a04436b..7f56793 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -626,9 +626,6 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-       g_signal_handlers_disconnect_by_func (old_adjustment,
-                                             gtk_scrolled_window_adjustment_value_changed,
-                                             scrolled_window);
--      g_signal_handlers_disconnect_by_func (old_adjustment,
--                                            gtk_scrolled_window_update_scrollbars,
--                                            scrolled_window);
-
-       gtk_range_set_adjustment (GTK_RANGE (scrolled_window->hscrollbar),
-                               hadjustment);
-@@ -645,13 +642,6 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
-   gtk_scrolled_window_adjustment_changed (hadjustment, scrolled_window);
-   gtk_scrolled_window_adjustment_value_changed (hadjustment, scrolled_window);
-
--  g_signal_connect_swapped (hadjustment, "changed",
--                            G_CALLBACK (gtk_scrolled_window_update_scrollbars),
--                            scrolled_window);
--  g_signal_connect_swapped (hadjustment, "value-changed",
--                            G_CALLBACK (gtk_scrolled_window_update_scrollbars),
--                            scrolled_window);
--
-   if (bin->child)
-     gtk_widget_set_scroll_adjustments (bin->child,
-                                        gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-@@ -708,9 +698,6 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-       g_signal_handlers_disconnect_by_func (old_adjustment,
-                                             gtk_scrolled_window_adjustment_value_changed,
-                                             scrolled_window);
--      g_signal_handlers_disconnect_by_func (old_adjustment,
--                                            gtk_scrolled_window_update_scrollbars,
--                                            scrolled_window);
-
-       gtk_range_set_adjustment (GTK_RANGE (scrolled_window->vscrollbar),
-                               vadjustment);
-@@ -727,13 +714,6 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
-   gtk_scrolled_window_adjustment_changed (vadjustment, scrolled_window);
-   gtk_scrolled_window_adjustment_value_changed (vadjustment, scrolled_window);
-
--  g_signal_connect_swapped (vadjustment, "changed",
--                            G_CALLBACK (gtk_scrolled_window_update_scrollbars),
--                            scrolled_window);
--  g_signal_connect_swapped (vadjustment, "value-changed",
--                            G_CALLBACK (gtk_scrolled_window_update_scrollbars),
--                            scrolled_window);
--
-   if (bin->child)
-     gtk_widget_set_scroll_adjustments (bin->child,
-                                        gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-@@ -1071,9 +1051,6 @@ gtk_scrolled_window_destroy (GtkObject *object)
-       g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-                                             gtk_scrolled_window_adjustment_value_changed,
-                                             scrolled_window);
--      g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
--                                            gtk_scrolled_window_update_scrollbars,
--                                            scrolled_window);
-
-       gtk_widget_unparent (scrolled_window->hscrollbar);
-       gtk_widget_destroy (scrolled_window->hscrollbar);
-@@ -1088,9 +1065,6 @@ gtk_scrolled_window_destroy (GtkObject *object)
-       g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
-                                             gtk_scrolled_window_adjustment_value_changed,
-                                             scrolled_window);
--      g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
--                                            gtk_scrolled_window_update_scrollbars,
--                                            scrolled_window);
-
-       gtk_widget_unparent (scrolled_window->vscrollbar);
-       gtk_widget_destroy (scrolled_window->vscrollbar);
-@@ -1805,7 +1779,8 @@ _gtk_scrolled_window_get_overshoot (GtkScrolledWindow *scrolled_window,
- }
-
- static void
--_gtk_scrolled_window_allocate_overshoot_window (GtkScrolledWindow *scrolled_window)
-+_gtk_scrolled_window_allocate_overshoot_window (GtkScrolledWindow *scrolled_window,
-+                                                gboolean           update_scrollbars)
- {
-   GtkAllocation window_allocation, relative_allocation, allocation;
-   GtkScrolledWindowPrivate *priv;
-@@ -1880,7 +1855,7 @@ _gtk_scrolled_window_allocate_overshoot_window (GtkScrolledWindow *scrolled_wind
-   else
-     gdk_window_hide (priv->hbackground_window);
-
--  if (priv->overlay_scrollbars)
-+  if (priv->overlay_scrollbars && update_scrollbars)
-     {
-       gtk_scrolled_window_start_fade_in_animation (scrolled_window);
-       gtk_scrolled_window_update_scrollbars (scrolled_window);
-@@ -1948,12 +1923,15 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   GtkBin *bin;
-   GtkAllocation relative_allocation;
-   GtkAllocation child_allocation;
-+  GtkAllocation old_allocation;
-   gboolean scrollbars_within_bevel;
-   gint scrollbar_spacing;
-
-   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget));
-   g_return_if_fail (allocation != NULL);
-
-+  old_allocation = widget->allocation;
-+
-   scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-   bin = GTK_BIN (scrolled_window);
-@@ -2117,7 +2095,12 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   else if (gtk_widget_get_visible (scrolled_window->vscrollbar))
-     gtk_widget_hide (scrolled_window->vscrollbar);
-
--  _gtk_scrolled_window_allocate_overshoot_window (scrolled_window);
-+  /* need to update the overlay scrollbars only if the allocation has
-+   * actually changed, not if only the content changed
-+   */
-+  _gtk_scrolled_window_allocate_overshoot_window (scrolled_window,
-+                                                  allocation->x != old_allocation.x ||
-+                                                  allocation->y != old_allocation.y);
- }
-
- static gboolean
-@@ -2280,7 +2263,7 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-
-       if (old_overshoot_x != new_overshoot_x ||
-           old_overshoot_y != new_overshoot_y)
--        _gtk_scrolled_window_allocate_overshoot_window (scrolled_window);
-+        _gtk_scrolled_window_allocate_overshoot_window (scrolled_window, TRUE);
-
-       /* In two cases we want to start snapping back:
-        *  1) The view is overshot and the gesture has ended.
-@@ -2480,7 +2463,7 @@ scrolled_window_snap_back_cb (gpointer user_data)
-
-   if (old_overshoot_x != overshoot_x ||
-       old_overshoot_y != overshoot_y)
--    _gtk_scrolled_window_allocate_overshoot_window (scrolled_window);
-+    _gtk_scrolled_window_allocate_overshoot_window (scrolled_window, TRUE);
-
-   if (overshoot_x != 0 || overshoot_y != 0)
-     return TRUE;
-@@ -2960,7 +2943,12 @@ gtk_scrolled_window_adjustment_changed (GtkAdjustment *adjustment,
-     }
-
-   if (priv->overlay_scrollbars)
--    gtk_scrolled_window_start_fade_in_animation (scrolled_win);
-+    {
-+      /* dont't fade in if the extent of the content changes, but update
-+       * the scrollbar's dimensions anyway.
-+       */
-+      gtk_scrolled_window_update_scrollbars (scrolled_win);
-+    }
- }
-
- static void
-@@ -2983,7 +2971,10 @@ gtk_scrolled_window_adjustment_value_changed (GtkAdjustment *adjustment,
-     priv->unclamped_hadj_value = gtk_adjustment_get_value (adjustment);
-
-   if (priv->overlay_scrollbars)
--    gtk_scrolled_window_start_fade_in_animation (scrolled_window);
-+    {
-+      gtk_scrolled_window_start_fade_in_animation (scrolled_window);
-+      gtk_scrolled_window_update_scrollbars (scrolled_window);
-+    }
- }
-
- static void
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0029-Reclamp-unclamped-adjustments-after-resize.patch b/bockbuild/mac-sdk/patches/gtk/0029-Reclamp-unclamped-adjustments-after-resize.patch
deleted file mode 100644 (file)
index 4c2b61c..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-From 5d691b32e0792cce518643f2e650909101c1095d Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Thu, 8 Nov 2012 15:54:13 +0100
-Subject: [PATCH 29/68] Reclamp unclamped adjustments after resize
-
----
- gtk/gtkscrolledwindow.c |   28 ++++++++++++++++++++++++++++
- 1 file changed, 28 insertions(+)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 7f56793..09f19d9 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -1926,6 +1926,7 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   GtkAllocation old_allocation;
-   gboolean scrollbars_within_bevel;
-   gint scrollbar_spacing;
-+  gint overshoot_x, overshoot_y;
-
-   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget));
-   g_return_if_fail (allocation != NULL);
-@@ -1936,6 +1937,10 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-   bin = GTK_BIN (scrolled_window);
-
-+  /* Save overshoot state from before resizing the child. */
-+  _gtk_scrolled_window_get_overshoot (scrolled_window,
-+                                      &overshoot_x, &overshoot_y);
-+
-   scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
-   gtk_widget_style_get (widget, "scrollbars-within-bevel", &scrollbars_within_bevel, NULL);
-
-@@ -2095,6 +2100,29 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
-   else if (gtk_widget_get_visible (scrolled_window->vscrollbar))
-     gtk_widget_hide (scrolled_window->vscrollbar);
-
-+  /* We have to reclamp the unclamped adjustments, otherwise the content
-+   * widget might be stuck in overshot state after resizing.
-+   */
-+  if (overshoot_x == 0.0)
-+    {
-+      GtkAdjustment *hadj;
-+      hadj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-+      priv->unclamped_hadj_value = CLAMP (priv->unclamped_hadj_value,
-+                                          gtk_adjustment_get_lower (hadj),
-+                                          gtk_adjustment_get_upper (hadj) -
-+                                          gtk_adjustment_get_page_size (hadj));
-+    }
-+
-+  if (overshoot_y == 0.0)
-+    {
-+      GtkAdjustment *vadj;
-+      vadj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-+      priv->unclamped_vadj_value = CLAMP (priv->unclamped_vadj_value,
-+                                          gtk_adjustment_get_lower (vadj),
-+                                          gtk_adjustment_get_upper (vadj) -
-+                                          gtk_adjustment_get_page_size (vadj));
-+    }
-+
-   /* need to update the overlay scrollbars only if the allocation has
-    * actually changed, not if only the content changed
-    */
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0030-gtk-fix-size_request-of-scrolled-window.patch b/bockbuild/mac-sdk/patches/gtk/0030-gtk-fix-size_request-of-scrolled-window.patch
deleted file mode 100644 (file)
index 1c8f968..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-From 438b85d3fe83286a5ecf9c83049e5db045097507 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Thu, 22 Nov 2012 19:49:20 +0100
-Subject: [PATCH 30/68] gtk: fix size_request() of scrolled window
-
----
- gtk/gtkscrolledwindow.c |   41 ++++++++++++++++-------------------------
- 1 file changed, 16 insertions(+), 25 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 09f19d9..77bb5af 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -1579,14 +1579,12 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-   GtkRequisition hscrollbar_requisition;
-   GtkRequisition vscrollbar_requisition;
-   GtkRequisition child_requisition;
--  GtkScrolledWindowPrivate *priv;
-
-   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget));
-   g_return_if_fail (requisition != NULL);
-
-   scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   bin = GTK_BIN (scrolled_window);
--  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
-   scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
-
-@@ -1606,7 +1604,7 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-
-       if (scrolled_window->hscrollbar_policy == GTK_POLICY_NEVER)
-       requisition->width += child_requisition.width;
--      else if (! priv->overlay_scrollbars)
-+      else
-       {
-         GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
-
-@@ -1617,13 +1615,11 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-           }
-         else
-           requisition->width += vscrollbar_requisition.width;
--      }
--      else
--        requisition->width += priv->sb_width + 2 * priv->sb_padding;
-+        }
-
-       if (scrolled_window->vscrollbar_policy == GTK_POLICY_NEVER)
-       requisition->height += child_requisition.height;
--      else if (! priv->overlay_scrollbars)
-+      else
-       {
-         GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
-
-@@ -1634,28 +1630,23 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
-           }
-         else
-           requisition->height += hscrollbar_requisition.height;
--      }
--      else
--        requisition->height += priv->sb_width + 2 * priv->sb_padding;
-+        }
-     }
-
--  if (! priv->overlay_scrollbars)
-+  if (scrolled_window->hscrollbar_policy == GTK_POLICY_AUTOMATIC ||
-+      scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
-     {
--      if (scrolled_window->hscrollbar_policy == GTK_POLICY_AUTOMATIC ||
--          scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
--        {
--          requisition->width = MAX (requisition->width, hscrollbar_requisition.width);
--          if (!extra_height || scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
--            extra_height = scrollbar_spacing + hscrollbar_requisition.height;
--        }
-+      requisition->width = MAX (requisition->width, hscrollbar_requisition.width);
-+      if (!extra_height || scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
-+        extra_height = scrollbar_spacing + hscrollbar_requisition.height;
-+    }
-
--      if (scrolled_window->vscrollbar_policy == GTK_POLICY_AUTOMATIC ||
--          scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
--        {
--          requisition->height = MAX (requisition->height, vscrollbar_requisition.height);
--          if (!extra_height || scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
--            extra_width = scrollbar_spacing + vscrollbar_requisition.width;
--        }
-+  if (scrolled_window->vscrollbar_policy == GTK_POLICY_AUTOMATIC ||
-+      scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
-+    {
-+      requisition->height = MAX (requisition->height, vscrollbar_requisition.height);
-+      if (!extra_height || scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
-+        extra_width = scrollbar_spacing + vscrollbar_requisition.width;
-     }
-
-   requisition->width += GTK_CONTAINER (widget)->border_width * 2 + MAX (0, extra_width);
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0031-Hackish-fix-for-bug-8493-Min-size-of-GtkScrolledWind.patch b/bockbuild/mac-sdk/patches/gtk/0031-Hackish-fix-for-bug-8493-Min-size-of-GtkScrolledWind.patch
deleted file mode 100644 (file)
index eeac133..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-From fd8e0fe0f9c630a56d415604c3c80dce5cd24648 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Tue, 15 Jan 2013 14:56:29 +0100
-Subject: [PATCH 31/68] Hackish fix for bug 8493 - Min size of
- GtkScrolledWindow is too small
-
-In gtk_scrollbar_size_allocate(), pretend the scrollbar
-always has scroll arrows so the parent impl makes it a bit
-larger.
----
- gtk/gtkscrollbar.c |   28 ++++++++++++++++++++++++++++
- 1 file changed, 28 insertions(+)
-
-diff --git a/gtk/gtkscrollbar.c b/gtk/gtkscrollbar.c
-index 634b337..bab062d 100644
---- a/gtk/gtkscrollbar.c
-+++ b/gtk/gtkscrollbar.c
-@@ -32,6 +32,8 @@
- #include "gtkprivate.h"
- #include "gtkalias.h"
-
-+static void gtk_scrollbar_size_request (GtkWidget      *widget,
-+                                        GtkRequisition *requisition);
- static void gtk_scrollbar_style_set (GtkWidget *widget,
-                                      GtkStyle  *previous);
-
-@@ -42,6 +44,7 @@ gtk_scrollbar_class_init (GtkScrollbarClass *class)
- {
-   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
-
-+  widget_class->size_request = gtk_scrollbar_size_request;
-   widget_class->style_set = gtk_scrollbar_style_set;
-
-   GTK_RANGE_CLASS (class)->stepper_detail = "Xscrollbar";
-@@ -97,6 +100,31 @@ gtk_scrollbar_init (GtkScrollbar *scrollbar)
- }
-
- static void
-+gtk_scrollbar_size_request (GtkWidget      *widget,
-+                            GtkRequisition *requisition)
-+{
-+  GtkRange *range = GTK_RANGE (widget);
-+  gboolean saved_a, saved_b, saved_c, saved_d;
-+
-+  saved_a = range->has_stepper_a;
-+  saved_b = range->has_stepper_b;
-+  saved_c = range->has_stepper_c;
-+  saved_d = range->has_stepper_d;
-+
-+  range->has_stepper_a = TRUE;
-+  range->has_stepper_b = FALSE;
-+  range->has_stepper_c = FALSE;
-+  range->has_stepper_d = TRUE;
-+
-+  GTK_WIDGET_CLASS (gtk_scrollbar_parent_class)->size_request (widget, requisition);
-+
-+  range->has_stepper_a = saved_a;
-+  range->has_stepper_b = saved_b;
-+  range->has_stepper_c = saved_c;
-+  range->has_stepper_d = saved_d;
-+}
-+
-+static void
- gtk_scrollbar_style_set (GtkWidget *widget,
-                          GtkStyle  *previous)
- {
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0032-Add-momentum_phase-to-GdkEventScroll.patch b/bockbuild/mac-sdk/patches/gtk/0032-Add-momentum_phase-to-GdkEventScroll.patch
deleted file mode 100644 (file)
index 6fb818d..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-From 7e06599edaf97a91943e992f412116e6513c0c7e Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Sat, 23 Feb 2013 00:52:43 +0100
-Subject: [PATCH 32/68] Add momentum_phase to GdkEventScroll
-
-We need this for the detection of legacy mice that do emit precise
-deltas.
----
- gdk/gdkevents.h               |    1 +
- gdk/gdkwindow.c               |    1 +
- gdk/quartz/gdkevents-quartz.c |   16 ++++++++++++----
- 3 files changed, 14 insertions(+), 4 deletions(-)
-
-diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
-index 765b520..1cbfc58 100644
---- a/gdk/gdkevents.h
-+++ b/gdk/gdkevents.h
-@@ -349,6 +349,7 @@ struct _GdkEventScroll
-   gdouble delta_x;
-   gdouble delta_y;
-   GdkEventScrollPhase phase;
-+  GdkEventScrollPhase momentum_phase;
- };
-
- struct _GdkEventKey
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index 1dac543..7a3732c 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -10898,6 +10898,7 @@ proxy_button_event (GdkEvent *source_event,
-       event->scroll.delta_x = source_event->scroll.delta_x;
-       event->scroll.delta_y = source_event->scroll.delta_y;
-       event->scroll.phase = source_event->scroll.phase;
-+      event->scroll.momentum_phase = source_event->scroll.momentum_phase;
-       return TRUE;
-
-     default:
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index bb4da70..f3ba2c8 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -63,6 +63,7 @@ static GdkWindow *find_toplevel_under_pointer   (GdkDisplay *display,
- - (CGFloat) scrollingDeltaX;
- - (CGFloat) scrollingDeltaY;
- - (int) phase;
-+- (int) momentumPhase;
- @end
-
-
-@@ -992,6 +993,7 @@ fill_scroll_event (GdkWindow          *window,
-                    gdouble             delta_x,
-                    gdouble             delta_y,
-                    GdkEventScrollPhase phase,
-+                   GdkEventScrollPhase momentum_phase,
-                    GdkScrollDirection  direction)
- {
-   GdkWindowObject *private;
-@@ -1015,6 +1017,7 @@ fill_scroll_event (GdkWindow          *window,
-   event->scroll.delta_x = delta_x;
-   event->scroll.delta_y = delta_y;
-   event->scroll.phase = phase;
-+  event->scroll.momentum_phase = momentum_phase;
- }
-
- static void
-@@ -1516,7 +1519,7 @@ gdk_event_translate (GdkEvent *event,
-       if (gdk_quartz_osx_version() >= GDK_OSX_LION &&
-           [(id <PreciseDeltas>) nsevent hasPreciseScrollingDeltas])
-         {
--            GdkEventScrollPhase phase;
-+            GdkEventScrollPhase phase, momentum_phase;
-           dx = [(id <PreciseDeltas>) nsevent scrollingDeltaX];
-           dy = [(id <PreciseDeltas>) nsevent scrollingDeltaY];
-
-@@ -1536,9 +1539,10 @@ gdk_event_translate (GdkEvent *event,
-               }
-
-             phase = gdk_event_scroll_phase_from_ns_event_phase ([(id <PreciseDeltas>) nsevent phase]);
-+            momentum_phase = gdk_event_scroll_phase_from_ns_event_phase ([(id <PreciseDeltas>) nsevent momentumPhase]);
-
-             fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
--                               TRUE, -dx, -dy, phase, direction);
-+                               TRUE, -dx, -dy, phase, momentum_phase, direction);
-         }
-       else
-         {
-@@ -1553,7 +1557,9 @@ gdk_event_translate (GdkEvent *event,
-                   direction = GDK_SCROLL_UP;
-
-                 fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
--                                   FALSE, 0.0, fabs (dy), GDK_EVENT_SCROLL_PHASE_NONE,
-+                                   FALSE, 0.0, fabs (dy),
-+                                   GDK_EVENT_SCROLL_PHASE_NONE,
-+                                   GDK_EVENT_SCROLL_PHASE_NONE,
-                                    direction);
-               }
-             else if (dx != 0.0)
-@@ -1564,7 +1570,9 @@ gdk_event_translate (GdkEvent *event,
-                   direction = GDK_SCROLL_LEFT;
-
-                 fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
--                                   FALSE, fabs (dx), 0.0, GDK_EVENT_SCROLL_PHASE_NONE,
-+                                   FALSE, fabs (dx), 0.0,
-+                                   GDK_EVENT_SCROLL_PHASE_NONE,
-+                                   GDK_EVENT_SCROLL_PHASE_NONE,
-                                    direction);
-               }
-           }
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0033-Never-intervene-in-the-event-stream-for-legacy-mice.patch b/bockbuild/mac-sdk/patches/gtk/0033-Never-intervene-in-the-event-stream-for-legacy-mice.patch
deleted file mode 100644 (file)
index 91378ba..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-From 4eab270368617383e2e287c434f71e037e686047 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Sun, 17 Feb 2013 13:06:59 +0100
-Subject: [PATCH 33/68] Never intervene in the event stream for legacy mice
-
-This is necessary for devices (e.g. Mighty Mouse) which do emit
-precise deltas but no phase.
----
- gdk/gdkwindow.c |   10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index 7a3732c..2db0c0b 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -10849,12 +10849,20 @@ proxy_button_event (GdkEvent *source_event,
-    */
-   if (type == GDK_SCROLL && source_event->scroll.has_deltas)
-     {
-+      gboolean legacy_mouse =
-+          source_event->scroll.phase == GDK_EVENT_SCROLL_PHASE_NONE &&
-+          source_event->scroll.momentum_phase == GDK_EVENT_SCROLL_PHASE_NONE;
-+
-       if (source_event->scroll.phase == GDK_EVENT_SCROLL_PHASE_START)
-         {
-           set_last_scroll_event_windows (display, pointer_window, event_win);
-         }
--      else
-+      else if (!legacy_mouse)
-         {
-+          /* Never override pointer and event windows for legacy devices
-+           * which are not capable of momentum scrolling. (The windows
-+           * will be NULL, because they have never been set).
-+           */
-           pointer_window = g_object_get_qdata (G_OBJECT (display),
-                                                quark_last_scroll_pointer_window);
-           event_win = g_object_get_qdata (G_OBJECT (display),
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0034-Do-not-start-overshooting-for-legacy-mouse-scroll-ev.patch b/bockbuild/mac-sdk/patches/gtk/0034-Do-not-start-overshooting-for-legacy-mouse-scroll-ev.patch
deleted file mode 100644 (file)
index face229..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-From 06fe34a85d02df941da86e34cd1d88ef9da52a18 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Sun, 17 Feb 2013 13:08:14 +0100
-Subject: [PATCH 34/68] Do not start overshooting for legacy mouse scroll
- events
-
-Doing overshooting properly relies on the detection of gestures.
-For legacy devices that do emit precise deltas but no (gesture) phase,
-simply disallow overshooting so that the state machine does not get
-stuck.
----
- gtk/gtkscrolledwindow.c |   23 ++++++++++++++++-------
- 1 file changed, 16 insertions(+), 7 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 77bb5af..4159af8 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -2141,7 +2141,12 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-       gint old_overshoot_x, old_overshoot_y;
-       gboolean start_snap_back = FALSE;
-       gboolean is_overshot = FALSE;
--      gboolean is_momentum_event = event->phase == GDK_EVENT_SCROLL_PHASE_NONE;
-+      gboolean is_momentum_event = event->momentum_phase != GDK_EVENT_SCROLL_PHASE_NONE;
-+      gboolean legacy_mouse = FALSE;
-+
-+      if (event->phase == GDK_EVENT_SCROLL_PHASE_NONE &&
-+          event->momentum_phase == GDK_EVENT_SCROLL_PHASE_NONE)
-+        legacy_mouse = TRUE;
-
-       _gtk_scrolled_window_get_overshoot (scrolled_window,
-                                           &old_overshoot_x, &old_overshoot_y);
-@@ -2150,10 +2155,12 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-       if (old_overshoot_x != 0 || old_overshoot_y != 0)
-         is_overshot = TRUE;
-
--      /* If a new gesture has started, reset snap back state.
-+      /* If a new gesture has started or we detect the end of a momentum
-+       * phase, reset snap back state.
-        * FIXME: check if overshoot has really ended.
-        */
--      if (event->phase == GDK_EVENT_SCROLL_PHASE_START)
-+      if (event->momentum_phase == GDK_EVENT_SCROLL_PHASE_END ||
-+          event->phase == GDK_EVENT_SCROLL_PHASE_START)
-         {
-           priv->is_snapping_back = FALSE;
-           priv->gesture_in_progress = TRUE;
-@@ -2193,8 +2200,9 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-                */
-               adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
-               gdouble max_adj = gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj);
--              if (gtk_adjustment_get_value (adj) < 1.0 ||
--                  gtk_adjustment_get_value (adj) > max_adj - 1.0)
-+              if (!legacy_mouse &&
-+                  (gtk_adjustment_get_value (adj) < 1.0 ||
-+                   gtk_adjustment_get_value (adj) > max_adj - 1.0))
-                 may_overshoot = TRUE;
-
-               if (scrolled_window->hscrollbar_visible && (is_overshot || may_overshoot))
-@@ -2240,8 +2248,9 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-                */
-               adj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
-               gdouble max_adj = gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj);
--              if (gtk_adjustment_get_value (adj) < 1.0 ||
--                    gtk_adjustment_get_value (adj) > max_adj - 1.0)
-+              if (!legacy_mouse &&
-+                  (gtk_adjustment_get_value (adj) < 1.0 ||
-+                   gtk_adjustment_get_value (adj) > max_adj - 1.0))
-                 may_overshoot = TRUE;
-
-               if (scrolled_window->vscrollbar_visible && (is_overshot || may_overshoot))
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0035-gtk-remove-the-overlay-scrollbar-grab-on-unrealize.patch b/bockbuild/mac-sdk/patches/gtk/0035-gtk-remove-the-overlay-scrollbar-grab-on-unrealize.patch
deleted file mode 100644 (file)
index e88a539..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-From 388e70cee0897fb743531ec001c1e6f796e2c27f Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 1 Mar 2013 15:06:20 +0100
-Subject: [PATCH 35/68] gtk: remove the overlay scrollbar grab on unrealize()
-
----
- gtk/gtkscrolledwindow.c |    6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 4159af8..7200462 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -3256,6 +3256,12 @@ gtk_scrolled_window_unrealize (GtkWidget *widget)
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
-+  if (priv->sb_pointer_grabbed)
-+    {
-+      gtk_grab_remove (widget);
-+      priv->sb_pointer_grabbed = FALSE;
-+    }
-+
-   gdk_window_set_user_data (priv->overshoot_window, NULL);
-   gdk_window_destroy (priv->overshoot_window);
-   priv->overshoot_window = NULL;
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0036-gtk-add-GtkScrolledWindow-API-to-disable-overshoot-p.patch b/bockbuild/mac-sdk/patches/gtk/0036-gtk-add-GtkScrolledWindow-API-to-disable-overshoot-p.patch
deleted file mode 100644 (file)
index 8c03063..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-From 2b8a48086aee90fe60753e5b6f0c415036469f48 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 5 Apr 2013 15:15:08 +0200
-Subject: [PATCH 36/68] gtk: add GtkScrolledWindow API to disable overshoot
- per widget
-
-And remove some forgotten declarations in the header.
----
- gtk/gtkscrolledwindow.c |   33 +++++++++++++++++++++++++++++++--
- gtk/gtkscrolledwindow.h |   10 +++-------
- 2 files changed, 34 insertions(+), 9 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 7200462..9def3aa 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -154,6 +154,7 @@ typedef struct {
-   gboolean       overlay_scrollbars;
-   gboolean       is_snapping_back;
-   gboolean       gesture_in_progress;
-+  gboolean       enable_overshoot;
- } GtkScrolledWindowPrivate;
-
- #define GTK_SCROLLED_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowPrivate))
-@@ -541,6 +542,8 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
-   priv->sb_width = 6;
-   priv->sb_fade_out_delay = 1000;
-
-+  priv->enable_overshoot = TRUE;
-+
-   g_signal_connect_swapped (priv->opacity, "value-changed",
-                             G_CALLBACK (gtk_scrolled_window_update_scrollbars),
-                             scrolled_window);
-@@ -2144,8 +2147,9 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
-       gboolean is_momentum_event = event->momentum_phase != GDK_EVENT_SCROLL_PHASE_NONE;
-       gboolean legacy_mouse = FALSE;
-
--      if (event->phase == GDK_EVENT_SCROLL_PHASE_NONE &&
--          event->momentum_phase == GDK_EVENT_SCROLL_PHASE_NONE)
-+      if (!priv->enable_overshoot ||
-+          (event->phase == GDK_EVENT_SCROLL_PHASE_NONE &&
-+           event->momentum_phase == GDK_EVENT_SCROLL_PHASE_NONE))
-         legacy_mouse = TRUE;
-
-       _gtk_scrolled_window_get_overshoot (scrolled_window,
-@@ -3106,6 +3110,31 @@ gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window,
-   gtk_container_add (GTK_CONTAINER (viewport), child);
- }
-
-+void
-+gtk_scrolled_window_set_enable_overshoot (GtkScrolledWindow *scrolled_window,
-+                                          gboolean           enable_overshoot)
-+{
-+  GtkScrolledWindowPrivate *priv;
-+
-+  g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  priv->enable_overshoot = enable_overshoot ? TRUE : FALSE;
-+}
-+
-+gboolean
-+gtk_scrolled_window_get_enable_overshoot (GtkScrolledWindow *scrolled_window)
-+{
-+  GtkScrolledWindowPrivate *priv;
-+
-+  g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window), FALSE);
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  return priv->enable_overshoot;
-+}
-+
- /*
-  * _gtk_scrolled_window_get_spacing:
-  * @scrolled_window: a scrolled window
-diff --git a/gtk/gtkscrolledwindow.h b/gtk/gtkscrolledwindow.h
-index 1f555e0..f75596d 100644
---- a/gtk/gtkscrolledwindow.h
-+++ b/gtk/gtkscrolledwindow.h
-@@ -127,13 +127,9 @@ GtkShadowType  gtk_scrolled_window_get_shadow_type   (GtkScrolledWindow *scrolle
- void         gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window,
-                                                     GtkWidget         *child);
-
--void           gtk_scrolled_window_set_kinetic_scrolling  (GtkScrolledWindow        *scrolled_window,
--                                                           gboolean                  kinetic_scrolling);
--gboolean       gtk_scrolled_window_get_kinetic_scrolling  (GtkScrolledWindow        *scrolled_window);
--
--void           gtk_scrolled_window_set_capture_button_press (GtkScrolledWindow      *scrolled_window,
--                                                             gboolean                capture_button_press);
--gboolean       gtk_scrolled_window_get_capture_button_press (GtkScrolledWindow      *scrolled_window);
-+void           gtk_scrolled_window_set_enable_overshoot (GtkScrolledWindow *scrolled_window,
-+                                                         gboolean           enable_overshoot);
-+gboolean       gtk_scrolled_window_get_enable_overshoot (GtkScrolledWindow *scrolled_window);
-
- gint _gtk_scrolled_window_get_scrollbar_spacing (GtkScrolledWindow *scrolled_window);
-
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0037-quartz-return-events-on-embedded-foreign-NSViews-bac.patch b/bockbuild/mac-sdk/patches/gtk/0037-quartz-return-events-on-embedded-foreign-NSViews-bac.patch
deleted file mode 100644 (file)
index c475ca0..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-From 6437422a8153939d06563d02fc938b90f36204d0 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 23 Mar 2012 12:22:31 +0100
-Subject: [PATCH 37/68] quartz: return events on embedded foreign NSViews back
- to Cocoa
-
----
- gdk/gdkmarshalers.list        |    1 +
- gdk/gdkwindow.c               |   14 ++++++++++++++
- gdk/quartz/gdkevents-quartz.c |   20 ++++++++++++++++++++
- 3 files changed, 35 insertions(+)
-
-diff --git a/gdk/gdkmarshalers.list b/gdk/gdkmarshalers.list
-index ea36bae..7b37163 100644
---- a/gdk/gdkmarshalers.list
-+++ b/gdk/gdkmarshalers.list
-@@ -4,3 +4,4 @@ VOID:POINTER,POINTER,POINTER
- OBJECT:VOID
- OBJECT:DOUBLE,DOUBLE
- VOID:DOUBLE,DOUBLE,POINTER,POINTER
-+VOID:POINTER,POINTER
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index 2db0c0b..a6b582c 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -126,6 +126,7 @@ enum {
-   PICK_EMBEDDED_CHILD, /* only called if children are embedded */
-   TO_EMBEDDER,
-   FROM_EMBEDDER,
-+  NATIVE_CHILD_EVENT,
-   LAST_SIGNAL
- };
-
-@@ -595,6 +596,19 @@ gdk_window_class_init (GdkWindowObjectClass *klass)
-                 G_TYPE_DOUBLE,
-                 G_TYPE_POINTER,
-                 G_TYPE_POINTER);
-+
-+  signals[NATIVE_CHILD_EVENT] =
-+    g_signal_new (g_intern_static_string ("native-child-event"),
-+                G_OBJECT_CLASS_TYPE (object_class),
-+                G_SIGNAL_RUN_LAST,
-+                0,
-+                NULL, NULL,
-+                _gdk_marshal_VOID__POINTER_POINTER,
-+                G_TYPE_NONE,
-+                2,
-+                G_TYPE_POINTER,
-+                G_TYPE_POINTER);
-+
- }
-
- static void
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index f3ba2c8..f6742f0 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -841,12 +841,32 @@ find_window_for_ns_event (NSEvent *nsevent,
-               {
-                 GdkWindowObject *toplevel_private;
-                 GdkWindowImplQuartz *toplevel_impl;
-+                guint n_subviews;
-+                guint i;
-
-                 toplevel = toplevel_under_pointer;
-
-                 toplevel_private = (GdkWindowObject *)toplevel;
-                 toplevel_impl = (GdkWindowImplQuartz *)toplevel_private->impl;
-
-+                n_subviews = [[toplevel_impl->view subviews] count];
-+
-+                for (i = 0; i < n_subviews; ++i)
-+                  {
-+                    NSView* sv = [[toplevel_impl->view subviews] objectAtIndex:i];
-+                    NSRect r = [sv frame];
-+
-+                    if (r.origin.x <= *x && r.origin.x + r.size.width >= *x &&
-+                        r.origin.y <= *y && r.origin.y + r.size.height >= *y)
-+                      {
-+                        g_signal_emit_by_name (toplevel, "native-child-event",
-+                                               sv, nsevent);
-+
-+                        /* event is within subview, forward back to Cocoa */
-+                        return NULL;
-+                      }
-+                  }
-+
-                 *x = x_tmp;
-                 *y = y_tmp;
-               }
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0038-quartz-don-t-forward-events-to-the-toplevel-nswindow.patch b/bockbuild/mac-sdk/patches/gtk/0038-quartz-don-t-forward-events-to-the-toplevel-nswindow.patch
deleted file mode 100644 (file)
index ed76786..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-From 08000a6f3a45742baa6649271f41408047dcf61c Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Thu, 28 Feb 2013 11:08:13 +0100
-Subject: [PATCH 38/68] quartz: don't forward events to the toplevel
- nswindow's layer_view
-
----
- gdk/quartz/gdkevents-quartz.c |    3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index f6742f0..6271085 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -856,6 +856,9 @@ find_window_for_ns_event (NSEvent *nsevent,
-                     NSView* sv = [[toplevel_impl->view subviews] objectAtIndex:i];
-                     NSRect r = [sv frame];
-
-+                    if (sv == toplevel_impl->layer_view)
-+                      continue;
-+
-                     if (r.origin.x <= *x && r.origin.x + r.size.width >= *x &&
-                         r.origin.y <= *y && r.origin.y + r.size.height >= *y)
-                       {
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0039-gdk-add-a-move-native-children-signal-to-GdkWindow.patch b/bockbuild/mac-sdk/patches/gtk/0039-gdk-add-a-move-native-children-signal-to-GdkWindow.patch
deleted file mode 100644 (file)
index 986c4b9..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-From a790bc42e0fdaf73fbc7561f7497e5b1fbdc1f81 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 22 Feb 2013 11:05:17 +0100
-Subject: [PATCH 39/68] gdk: add a "move-native-children" signal to GdkWindow
-
-and emit it from move_native_children(), so GtkNSView has
-a chance to do the right thing on scrolling.
----
- gdk/gdkwindow.c |   12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index a6b582c..3040321 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -127,6 +127,7 @@ enum {
-   TO_EMBEDDER,
-   FROM_EMBEDDER,
-   NATIVE_CHILD_EVENT,
-+  MOVE_NATIVE_CHILDREN,
-   LAST_SIGNAL
- };
-
-@@ -609,6 +610,15 @@ gdk_window_class_init (GdkWindowObjectClass *klass)
-                 G_TYPE_POINTER,
-                 G_TYPE_POINTER);
-
-+  signals[MOVE_NATIVE_CHILDREN] =
-+    g_signal_new (g_intern_static_string ("move-native-children"),
-+                  G_OBJECT_CLASS_TYPE (object_class),
-+                  G_SIGNAL_RUN_LAST,
-+                  0,
-+                  NULL, NULL,
-+                  g_cclosure_marshal_VOID__VOID,
-+                  G_TYPE_NONE,
-+                  0);
- }
-
- static void
-@@ -7474,6 +7484,8 @@ move_native_children (GdkWindowObject *private)
-       else
-       move_native_children  (child);
-     }
-+
-+  g_signal_emit_by_name (private, "move-native-children");
- }
-
- static gboolean
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0040-gtk-add-new-widget-GtkNSView-which-alows-to-embed-an.patch b/bockbuild/mac-sdk/patches/gtk/0040-gtk-add-new-widget-GtkNSView-which-alows-to-embed-an.patch
deleted file mode 100644 (file)
index 3b8fb37..0000000
+++ /dev/null
@@ -1,844 +0,0 @@
-From 99be0cbaccfc53b374055085f778a971a5758566 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@lanedo.com>
-Date: Tue, 29 Nov 2011 16:09:31 +0100
-Subject: [PATCH 40/68] gtk: add new widget GtkNSView which alows to embed an
- NSView
-
----
- gtk/Makefile.am    |    2 +
- gtk/gtk.h          |    4 +
- gtk/gtknsview.c    |  470 ++++++++++++++++++++++++++++++++++++++++++++++++++++
- gtk/gtknsview.h    |   62 +++++++
- tests/Makefile.am  |   10 +-
- tests/testnsview.c |  190 +++++++++++++++++++++
- 6 files changed, 737 insertions(+), 1 deletion(-)
- create mode 100644 gtk/gtknsview.c
- create mode 100644 gtk/gtknsview.h
- create mode 100644 tests/testnsview.c
-
-diff --git a/gtk/Makefile.am b/gtk/Makefile.am
-index 31dfd19..59a6742 100644
---- a/gtk/Makefile.am
-+++ b/gtk/Makefile.am
-@@ -737,6 +737,7 @@ gtk_use_win32_c_sources = \
-       gtkwin32embedwidget.c \
-       gtkmountoperation-stub.c
- gtk_use_quartz_c_sources =    \
-+      gtknsview.c             \
-       gtksearchenginequartz.c \
-       gtkplug-stub.c          \
-       gtksocket-stub.c        \
-@@ -757,6 +758,7 @@ else
- if USE_QUARTZ
- libgtk_quartz_2_0_la_CFLAGS = "-xobjective-c"
- gtk_private_h_sources += gtksearchenginequartz.h
-+gtk_public_h_sources += gtknsview.h
- gtk_c_sources += $(gtk_use_quartz_c_sources)
- else
- gtk_c_sources += $(gtk_use_stub_c_sources)
-diff --git a/gtk/gtk.h b/gtk/gtk.h
-index 94e0b61..cc5834a 100644
---- a/gtk/gtk.h
-+++ b/gtk/gtk.h
-@@ -218,6 +218,10 @@
- #include <gtk/gtkwidget.h>
- #include <gtk/gtkwindow.h>
-
-+#ifdef GDK_WINDOWING_QUARTZ
-+#include <gtk/gtknsview.h>
-+#endif
-+
- /* Broken */
- #include <gtk/gtktext.h>
- #include <gtk/gtktree.h>
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-new file mode 100644
-index 0000000..40c6a9b
---- /dev/null
-+++ b/gtk/gtknsview.c
-@@ -0,0 +1,470 @@
-+/* GTK - The GIMP Toolkit
-+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
-+ *
-+ * GtkNSView - Native NSView embedding widget
-+ * Copyright (C) 2011 Michael Natterer <mitch@lanedo.com>
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Library General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Library General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Library General Public
-+ * License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+#include "config.h"
-+
-+#include <gdk/gdk.h>
-+#include <gdk/gdkkeysyms.h>
-+#include <gdk/quartz/gdkquartz.h>
-+#include <objc/runtime.h>
-+
-+#include "gtknsview.h"
-+#include "gtkprivate.h"
-+#include "gtkintl.h"
-+#include "gtkalias.h"
-+
-+
-+/* #define DEBUG_FOCUS 1 */
-+
-+
-+enum
-+{
-+  PROP_0,
-+  PROP_VIEW
-+};
-+
-+
-+struct _GtkNSViewPrivate
-+{
-+  NSView *view;
-+};
-+
-+#define GTK_NS_VIEW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
-+                                      GTK_TYPE_NS_VIEW, GtkNSViewPrivate))
-+
-+
-+static void       gtk_ns_view_finalize      (GObject        *object);
-+static void       gtk_ns_view_set_property  (GObject        *object,
-+                                             guint           prop_id,
-+                                             const GValue   *value,
-+                                             GParamSpec     *pspec);
-+static void       gtk_ns_view_get_property  (GObject        *object,
-+                                             guint           prop_id,
-+                                             GValue         *value,
-+                                             GParamSpec     *pspec);
-+static void       gtk_ns_view_notify        (GObject        *object,
-+                                             GParamSpec     *pspec);
-+
-+static void       gtk_ns_view_unrealize     (GtkWidget      *widget);
-+static void       gtk_ns_view_map           (GtkWidget      *widget);
-+static void       gtk_ns_view_unmap         (GtkWidget      *widget);
-+static void       gtk_ns_view_size_request  (GtkWidget      *widget,
-+                                             GtkRequisition *requisition);
-+static void       gtk_ns_view_size_allocate (GtkWidget      *widget,
-+                                             GtkAllocation  *allocation);
-+static void       gtk_ns_view_grab_focus    (GtkWidget      *widget);
-+static gboolean   gtk_ns_view_key_press     (GtkWidget      *widget,
-+                                             GdkEventKey    *event);
-+static gboolean   gtk_ns_view_key_release   (GtkWidget      *widget,
-+                                             GdkEventKey    *event);
-+
-+static void       gtk_ns_view_native_child_event (GdkWindow     *window,
-+                                                  NSView        *view,
-+                                                  NSEvent       *event,
-+                                                  GtkNSView     *ns_view);
-+static gboolean   gtk_ns_view_forward_event      (GtkWidget     *widget,
-+                                                  GdkEventKey   *event);
-+
-+
-+G_DEFINE_TYPE (GtkNSView, gtk_ns_view, GTK_TYPE_WIDGET)
-+
-+
-+static void
-+gtk_ns_view_class_init (GtkNSViewClass *klass)
-+{
-+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-+
-+  g_type_class_add_private (klass, sizeof (GtkNSViewPrivate));
-+
-+  object_class->finalize = gtk_ns_view_finalize;
-+  object_class->set_property = gtk_ns_view_set_property;
-+  object_class->get_property = gtk_ns_view_get_property;
-+  object_class->notify = gtk_ns_view_notify;
-+
-+  widget_class->unrealize = gtk_ns_view_unrealize;
-+  widget_class->map = gtk_ns_view_map;
-+  widget_class->unmap = gtk_ns_view_unmap;
-+  widget_class->size_request = gtk_ns_view_size_request;
-+  widget_class->size_allocate = gtk_ns_view_size_allocate;
-+  widget_class->grab_focus = gtk_ns_view_grab_focus;
-+  widget_class->key_press_event = gtk_ns_view_key_press;
-+  widget_class->key_release_event = gtk_ns_view_key_release;
-+
-+  /**
-+   * GtkNSView:view:
-+   *
-+   * The widget's NSView.
-+   *
-+   * Since: 2.24
-+   */
-+  g_object_class_install_property (object_class,
-+                                 PROP_VIEW,
-+                                 g_param_spec_pointer ("view",
-+                                                         P_("View"),
-+                                                         P_("The NSView"),
-+                                                         GTK_PARAM_READWRITE |
-+                                                         G_PARAM_CONSTRUCT_ONLY));
-+}
-+
-+static void
-+gtk_ns_view_init (GtkNSView *ns_view)
-+{
-+  ns_view->priv = GTK_NS_VIEW_GET_PRIVATE (ns_view);
-+
-+  gtk_widget_set_has_window (GTK_WIDGET (ns_view), FALSE);
-+}
-+
-+static void
-+gtk_ns_view_finalize (GObject *object)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (object);
-+
-+  if (ns_view->priv->view)
-+    {
-+      [ns_view->priv->view release];
-+      ns_view->priv->view = NULL;
-+    }
-+
-+  G_OBJECT_CLASS (gtk_ns_view_parent_class)->finalize (object);
-+}
-+
-+static void
-+gtk_ns_view_set_property (GObject      *object,
-+                          guint         prop_id,
-+                          const GValue *value,
-+                          GParamSpec   *pspec)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (object);
-+
-+  switch (prop_id)
-+    {
-+    case PROP_VIEW:
-+      ns_view->priv->view = g_value_get_pointer (value);
-+      if (ns_view->priv->view)
-+        {
-+          [ns_view->priv->view retain];
-+          gtk_widget_set_can_focus (GTK_WIDGET (ns_view),
-+                                    [ns_view->priv->view acceptsFirstResponder]);
-+
-+#if DEBUG_FOCUS
-+          g_printerr ("%s can focus: %d\n",
-+                      class_getName ([ns_view->priv->view class]),
-+                      gtk_widget_get_can_focus (GTK_WIDGET (ns_view)));
-+#endif
-+        }
-+      break;
-+
-+    default:
-+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+      break;
-+    }
-+}
-+
-+static void
-+gtk_ns_view_get_property (GObject      *object,
-+                          guint         prop_id,
-+                          GValue       *value,
-+                          GParamSpec   *pspec)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (object);
-+
-+  switch (prop_id)
-+    {
-+    case PROP_VIEW:
-+      g_value_set_pointer (value, ns_view->priv->view);
-+      break;
-+
-+    default:
-+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+      break;
-+    }
-+}
-+
-+static void
-+gtk_ns_view_notify (GObject    *object,
-+                    GParamSpec *pspec)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (object);
-+
-+  if (G_OBJECT_CLASS (gtk_ns_view_parent_class)->notify)
-+    G_OBJECT_CLASS (gtk_ns_view_parent_class)->notify (object, pspec);
-+
-+  if (!strcmp (pspec->name, "has-focus"))
-+    {
-+      NSWindow *ns_window = [ns_view->priv->view window];
-+
-+#if DEBUG_FOCUS
-+      g_printerr ("%s has-focus: %d\n",
-+                  class_getName ([ns_view->priv->view class]),
-+                  gtk_widget_has_focus (GTK_WIDGET (object)));
-+#endif
-+
-+      if (gtk_widget_has_focus (GTK_WIDGET (object)))
-+        [ns_window makeFirstResponder:ns_view->priv->view];
-+      else
-+        [ns_window makeFirstResponder:nil];
-+    }
-+}
-+
-+static void
-+gtk_ns_view_position_view (GtkNSView     *ns_view,
-+                           GtkAllocation *allocation)
-+{
-+  GdkWindow *window = gtk_widget_get_window (GTK_WIDGET (ns_view));
-+  GdkWindow *native;
-+  gdouble x, y;
-+  NSSize size;
-+  NSPoint origin;
-+
-+  x = allocation->x;
-+  y = allocation->y;
-+
-+  /* convert to the coordinate system of the innermost parent window
-+   * that has an NSView
-+   */
-+  native = window;
-+  while (! gdk_window_has_native (native))
-+    {
-+      gdk_window_coords_to_parent (native, x, y, &x, &y);
-+      native = gdk_window_get_parent (native);
-+    }
-+
-+  size.width = allocation->width;
-+  size.height = allocation->height;
-+  [ns_view->priv->view setFrameSize:size];
-+
-+  origin.x = x;
-+  origin.y = y;
-+  [ns_view->priv->view setFrameOrigin:origin];
-+}
-+
-+static void
-+gtk_ns_view_unrealize (GtkWidget *widget)
-+{
-+  if (gtk_widget_get_mapped (widget))
-+    gtk_widget_unmap (widget);
-+
-+  GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->unrealize (widget);
-+}
-+
-+static void
-+gtk_ns_view_map (GtkWidget *widget)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (widget);
-+  GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
-+  GtkAllocation allocation;
-+  NSView *parent_view;
-+
-+  gtk_widget_get_allocation (widget, &allocation);
-+  gtk_ns_view_position_view (ns_view, &allocation);
-+
-+  parent_view = gdk_quartz_window_get_nsview (gtk_widget_get_window (widget));
-+  [parent_view addSubview:ns_view->priv->view];
-+
-+  [ns_view->priv->view setNextKeyView:nil];
-+
-+  g_signal_connect_object (gtk_widget_get_window (toplevel), "native-child-event",
-+                           G_CALLBACK (gtk_ns_view_native_child_event),
-+                           G_OBJECT (widget), 0);
-+
-+  GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->map (widget);
-+}
-+
-+static void
-+gtk_ns_view_unmap (GtkWidget *widget)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (widget);
-+  GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
-+
-+  g_signal_handlers_disconnect_by_func (gtk_widget_get_window (toplevel),
-+                                        gtk_ns_view_native_child_event,
-+                                        widget);
-+
-+  [ns_view->priv->view removeFromSuperview];
-+
-+  GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->unmap (widget);
-+}
-+
-+static void
-+gtk_ns_view_size_request (GtkWidget      *widget,
-+                          GtkRequisition *requisition)
-+{
-+  requisition->width = 1;
-+  requisition->height = 1;
-+}
-+
-+static void
-+gtk_ns_view_size_allocate (GtkWidget     *widget,
-+                           GtkAllocation *allocation)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (widget);
-+
-+  widget->allocation = *allocation;
-+
-+  if (gtk_widget_get_mapped (widget))
-+    gtk_ns_view_position_view (ns_view, allocation);
-+}
-+
-+static void
-+gtk_ns_view_grab_focus (GtkWidget *widget)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (widget);
-+  NSWindow *ns_window;
-+
-+  GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->grab_focus (widget);
-+
-+  ns_window = [ns_view->priv->view window];
-+  [ns_window makeFirstResponder:ns_view->priv->view];
-+}
-+
-+static gboolean
-+gtk_ns_view_key_press (GtkWidget   *widget,
-+                       GdkEventKey *event)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (widget);
-+  NSEvent *nsevent = gdk_quartz_event_get_nsevent ((GdkEvent *) event);
-+  NSWindow *ns_window;
-+
-+  if (gtk_ns_view_forward_event (widget, event))
-+    {
-+      ns_window = [ns_view->priv->view window];
-+      [ns_window sendEvent:nsevent];
-+
-+      return TRUE;
-+    }
-+
-+  return GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->key_press_event (widget, event);
-+}
-+
-+static gboolean
-+gtk_ns_view_key_release (GtkWidget   *widget,
-+                         GdkEventKey *event)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (widget);
-+  NSEvent *nsevent = gdk_quartz_event_get_nsevent ((GdkEvent *) event);
-+  NSWindow *ns_window;
-+
-+  if (gtk_ns_view_forward_event (widget, event))
-+    {
-+      ns_window = [ns_view->priv->view window];
-+      [ns_window sendEvent:nsevent];
-+
-+      return TRUE;
-+    }
-+
-+  return GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->key_release_event (widget, event);
-+}
-+
-+static void
-+gtk_ns_view_native_child_event (GdkWindow *window,
-+                                NSView    *view,
-+                                NSEvent   *event,
-+                                GtkNSView *ns_view)
-+{
-+  if (view == ns_view->priv->view)
-+    {
-+#if 0
-+      g_printerr ("native child event on %s\n",
-+                  class_getName ([ns_view->priv->view class]));
-+#endif
-+
-+      switch ([event type])
-+        {
-+        case NSLeftMouseDown:
-+          if (! gtk_widget_has_focus (GTK_WIDGET (ns_view)) &&
-+
-+              /*  other code can set can-focus, so check for both  */
-+              gtk_widget_get_can_focus (GTK_WIDGET (ns_view)) &&
-+              [ns_view->priv->view acceptsFirstResponder])
-+            {
-+#if DEBUG_FOCUS
-+              g_printerr ("grabbing focus on %s\n",
-+                          class_getName ([ns_view->priv->view class]));
-+#endif
-+
-+              gtk_widget_grab_focus (GTK_WIDGET (ns_view));
-+            }
-+          break;
-+
-+        default:
-+          break;
-+        }
-+    }
-+}
-+
-+static gboolean
-+gtk_ns_view_forward_event (GtkWidget   *widget,
-+                           GdkEventKey *event)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (widget);
-+  NSWindow *ns_window;
-+  NSResponder *first_responder;
-+  NSView *next_key_view;
-+
-+  if (event->type != GDK_KEY_PRESS ||
-+      (event->keyval != GDK_KEY_Tab &&
-+       event->keyval != GDK_KEY_ISO_Left_Tab))
-+    {
-+      return TRUE;
-+    }
-+
-+  ns_window = [ns_view->priv->view window];
-+  first_responder = [ns_window firstResponder];
-+
-+#if DEBUG_FOCUS
-+  g_printerr ("first reponder: %p  %s\n", first_responder,
-+              class_getName ([first_responder class]));
-+#endif
-+
-+  if (event->keyval == GDK_KEY_Tab)
-+    next_key_view = [first_responder nextValidKeyView];
-+  else
-+    next_key_view = [first_responder previousValidKeyView];
-+
-+#if DEBUG_FOCUS
-+  g_printerr ("next key view: %p  %s\n", next_key_view,
-+              class_getName ([next_key_view class]));
-+#endif
-+
-+  if (next_key_view &&
-+      next_key_view != ns_view->priv->view &&
-+      [next_key_view isDescendantOf:ns_view->priv->view])
-+    {
-+      return TRUE;
-+    }
-+
-+  return FALSE;
-+}
-+
-+GtkWidget *
-+gtk_ns_view_new (gpointer nsview)
-+{
-+  g_return_val_if_fail (nsview != NULL, NULL);
-+
-+  return g_object_new (GTK_TYPE_NS_VIEW,
-+                       "view", nsview,
-+                       NULL);
-+}
-+
-+#define __GTK_NS_VIEW_C__
-+#include "gtkaliasdef.c"
-diff --git a/gtk/gtknsview.h b/gtk/gtknsview.h
-new file mode 100644
-index 0000000..2c0aab7
---- /dev/null
-+++ b/gtk/gtknsview.h
-@@ -0,0 +1,62 @@
-+/* GTK - The GIMP Toolkit
-+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
-+ *
-+ * GtkNSView - Native NSView embedding widget
-+ * Copyright (C) 2011 Michael Natterer <mitch@lanedo.com>
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Library General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Library General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Library General Public
-+ * License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+#ifndef __GTK_NS_VIEW_H__
-+#define __GTK_NS_VIEW_H__
-+
-+#if defined(GTK_DISABLE_SINGLE_INCLUDES) && !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
-+#error "Only <gtk/gtk.h> can be included directly."
-+#endif
-+
-+#include <gtk/gtkwidget.h>
-+
-+G_BEGIN_DECLS
-+
-+#define GTK_TYPE_NS_VIEW            (gtk_ns_view_get_type ())
-+#define GTK_NS_VIEW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_NS_VIEW, GtkNSView))
-+#define GTK_NS_VIEW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_NS_VIEW, GtkNSViewClass))
-+#define GTK_IS_NS_VIEW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_NS_VIEW))
-+#define GTK_IS_NS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_NS_VIEW))
-+#define GTK_NS_VIEW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_NS_VIEW, GtkNSViewClass))
-+
-+typedef struct _GtkNSView        GtkNSView;
-+typedef struct _GtkNSViewClass   GtkNSViewClass;
-+typedef struct _GtkNSViewPrivate GtkNSViewPrivate;
-+
-+struct _GtkNSView
-+{
-+  GtkWidget parent_instance;
-+
-+  GtkNSViewPrivate *priv;
-+};
-+
-+struct _GtkNSViewClass
-+{
-+  GtkWidgetClass parent_class;
-+};
-+
-+GType       gtk_ns_view_get_type (void) G_GNUC_CONST;
-+GtkWidget * gtk_ns_view_new      (gpointer  nsview);
-+
-+G_END_DECLS
-+
-+#endif /* __GTK_NS_VIEW_H__ */
-diff --git a/tests/Makefile.am b/tests/Makefile.am
-index 3888826..af098f6 100644
---- a/tests/Makefile.am
-+++ b/tests/Makefile.am
-@@ -8,7 +8,8 @@ INCLUDES =                             \
-       -DGDK_DISABLE_DEPRECATED        \
-       -DGTK_DISABLE_DEPRECATED        \
-       $(GTK_DEBUG_FLAGS)              \
--      $(GTK_DEP_CFLAGS)
-+      $(GTK_DEP_CFLAGS)               \
-+      -xobjective-c
-
- DEPS =                                                                        \
-       $(top_builddir)/gdk/$(gdktargetlib)                             \
-@@ -57,6 +58,7 @@ noinst_PROGRAMS =  $(TEST_PROGS)     \
-       testmultiscreen                 \
-       testnotebookdnd                 \
-       testnouiprint                   \
-+      testnsview                      \
-       testoffscreen                   \
-       testoffscreenwindow             \
-       testorientable                  \
-@@ -134,6 +136,7 @@ testmultidisplay_DEPENDENCIES = $(TEST_DEPS)
- testmultiscreen_DEPENDENCIES = $(TEST_DEPS)
- testnotebookdnd_DEPENDENCIES = $(TEST_DEPS)
- testnouiprint_DEPENDENCIES = $(TEST_DEPS)
-+testnsview_DEPENDENCIES = $(TEST_DEPS)
- testoffscreen_DEPENDENCIES = $(TEST_DEPS)
- testoffscreenwindow_DEPENDENCIES = $(TEST_DEPS)
- testorientable_DEPENDENCIES = $(TEST_DEPS)
-@@ -166,6 +169,8 @@ testtooltips_DEPENDENCIES = $(TEST_DEPS)
- testvolumebutton_DEPENDENCIES = $(TEST_DEPS)
- testwindows_DEPENDENCIES = $(TEST_DEPS)
-
-+testnsview_LDFLAGS = -framework WebKit
-+
- testentrycompletion_SOURCES =         \
-       prop-editor.c           \
-       testentrycompletion.c
-@@ -262,6 +267,9 @@ testrecentchoosermenu_SOURCES =    \
- testvolumebutton_SOURCES =    \
-       testvolumebutton.c
-
-+testnsview_SOURCES =          \
-+      testnsview.c
-+
- testoffscreen_SOURCES =       \
-       gtkoffscreenbox.c       \
-       gtkoffscreenbox.h       \
-diff --git a/tests/testnsview.c b/tests/testnsview.c
-new file mode 100644
-index 0000000..7c9ccb7
---- /dev/null
-+++ b/tests/testnsview.c
-@@ -0,0 +1,190 @@
-+/* testnsview.c
-+ * Copyright (C) 2011 Michael Natterer <mitch@lanedo.com>
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Library General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Library General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Library General Public
-+ * License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+#include "config.h"
-+
-+#include <WebKit/WebKit.h>
-+#include <gtk/gtk.h>
-+
-+
-+static void
-+back_clicked (GtkToolItem *item,
-+              WebView     *webview)
-+{
-+  [webview goBack];
-+}
-+
-+static void
-+forward_clicked (GtkToolItem *item,
-+                 WebView     *webview)
-+{
-+  [webview goForward];
-+}
-+
-+gint
-+main (gint   argc,
-+      gchar *argv[])
-+{
-+  GtkWidget *window;
-+  GtkWidget *vbox;
-+  GtkWidget *toolbar;
-+  GtkToolItem *item;
-+  WebView *webview;
-+  NSRect web_rect = { { 0.0, 0.0 }, { 100.0, 100.0 } };
-+  NSURL *url;
-+  NSURLRequest *request;
-+  GtkWidget *ns_view;
-+
-+  gtk_init (&argc, &argv);
-+
-+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-+  gtk_window_set_title (GTK_WINDOW (window), "GtkNSView featuring WebView");
-+
-+  g_signal_connect (window, "destroy",
-+                    G_CALLBACK (gtk_main_quit),
-+                    NULL);
-+
-+  vbox = gtk_vbox_new (FALSE, 0);
-+  gtk_container_add (GTK_CONTAINER (window), vbox);
-+  gtk_widget_show (vbox);
-+
-+  toolbar = gtk_toolbar_new ();
-+  gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
-+  gtk_widget_show (toolbar);
-+
-+  webview = [WebView alloc];
-+
-+  item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK);
-+  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
-+  gtk_widget_show (GTK_WIDGET (item));
-+
-+  g_signal_connect (item, "clicked",
-+                    G_CALLBACK (back_clicked),
-+                    webview);
-+
-+  item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_FORWARD);
-+  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
-+  gtk_widget_show (GTK_WIDGET (item));
-+
-+  g_signal_connect (item, "clicked",
-+                    G_CALLBACK (forward_clicked),
-+                    webview);
-+
-+  [webview initWithFrame:web_rect
-+               frameName:@"foo"
-+               groupName:@"bar"];
-+
-+  url = [NSURL URLWithString:@"http://www.gimp.org/"];
-+  request = [NSURLRequest requestWithURL:url];
-+
-+  [[webview mainFrame] loadRequest:request];
-+
-+  ns_view = gtk_ns_view_new ((NSView *) webview);
-+  gtk_widget_set_size_request (ns_view, 300, 200);
-+  gtk_box_pack_end (GTK_BOX (vbox), ns_view, TRUE, TRUE, 0);
-+  gtk_widget_show (ns_view);
-+
-+  [webview release];
-+
-+  {
-+    GtkWidget *button;
-+
-+    button = gtk_button_new_with_label ("hide webview");
-+    gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
-+    gtk_widget_show (button);
-+
-+    g_signal_connect_swapped (button, "clicked",
-+                              G_CALLBACK (gtk_widget_hide),
-+                              ns_view);
-+
-+    button = gtk_button_new_with_label ("show webview");
-+    gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
-+    gtk_widget_show (button);
-+
-+    g_signal_connect_swapped (button, "clicked",
-+                              G_CALLBACK (gtk_widget_show),
-+                              ns_view);
-+  }
-+
-+  /* add an entry in an event box to test living inside another gdkwindow */
-+  {
-+    GtkWidget *event_box;
-+    GtkWidget *abox;
-+    GtkWidget *hbox;
-+    NSRect label_rect = { { 0.0, 0.0 }, { 100.0, 12.0 } };
-+    NSRect text_rect = { { 0.0, 0.0 }, { 100.0, 12.0 } };
-+    NSTextField *text_field;
-+
-+    event_box = gtk_event_box_new ();
-+    gtk_widget_set_state (event_box, GTK_STATE_ACTIVE);
-+    gtk_box_pack_start (GTK_BOX (vbox), event_box, FALSE, FALSE, 0);
-+    gtk_widget_show (event_box);
-+
-+    abox = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
-+    gtk_container_set_border_width (GTK_CONTAINER (abox), 10);
-+    gtk_container_add (GTK_CONTAINER (event_box), abox);
-+    gtk_widget_show (abox);
-+
-+    hbox = gtk_hbox_new (FALSE, 10);
-+    gtk_container_add (GTK_CONTAINER (abox), hbox);
-+    gtk_widget_show (hbox);
-+
-+    /* a non-editable text label */
-+    text_field = [[NSTextField alloc] initWithFrame:label_rect];
-+    [text_field setEditable:NO];
-+    [text_field setDrawsBackground:NO];
-+    [text_field setBordered:NO];
-+    [text_field setStringValue:@"A Text Label"];
-+
-+    ns_view = gtk_ns_view_new ((NSView *) text_field);
-+    gtk_widget_set_size_request (ns_view, 100, 20);
-+    gtk_box_pack_start (GTK_BOX (hbox), ns_view, FALSE, FALSE, 0);
-+    gtk_widget_show (ns_view);
-+
-+    [text_field release];
-+
-+    /* an editable text field */
-+    text_field = [[NSTextField alloc] initWithFrame:text_rect];
-+    [text_field setEditable:YES];
-+    [text_field setStringValue:@"An editable text entry"];
-+
-+    ns_view = gtk_ns_view_new ((NSView *) text_field);
-+    gtk_widget_set_size_request (ns_view, 100, 20);
-+    gtk_box_pack_start (GTK_BOX (hbox), ns_view, TRUE, TRUE, 0);
-+    gtk_widget_show (ns_view);
-+
-+    [text_field release];
-+  }
-+
-+  /* and a normal GtkEntry to check focus */
-+  {
-+    GtkWidget *entry;
-+
-+    entry = gtk_entry_new ();
-+    gtk_entry_set_text (GTK_ENTRY (entry), "Normal GTK+ entry");
-+    gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
-+    gtk_widget_show (entry);
-+  }
-+
-+  gtk_widget_show (window);
-+
-+  gtk_main ();
-+
-+  return 0;
-+}
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0041-tests-add-a-notebook-to-testnsview.c.patch b/bockbuild/mac-sdk/patches/gtk/0041-tests-add-a-notebook-to-testnsview.c.patch
deleted file mode 100644 (file)
index e7f6fd7..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-From 9e267bd60da4235a0facb6bab98fef5884bc0ff0 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Tue, 12 Feb 2013 13:22:39 +0100
-Subject: [PATCH 41/68] tests: add a notebook to testnsview.c
-
----
- tests/testnsview.c |   17 +++++++++++++++++
- 1 file changed, 17 insertions(+)
-
-diff --git a/tests/testnsview.c b/tests/testnsview.c
-index 7c9ccb7..45b1d60 100644
---- a/tests/testnsview.c
-+++ b/tests/testnsview.c
-@@ -45,6 +45,7 @@ main (gint   argc,
-   GtkWidget *vbox;
-   GtkWidget *toolbar;
-   GtkToolItem *item;
-+  GtkWidget *notebook;
-   WebView *webview;
-   NSRect web_rect = { { 0.0, 0.0 }, { 100.0, 100.0 } };
-   NSURL *url;
-@@ -86,6 +87,10 @@ main (gint   argc,
-                     G_CALLBACK (forward_clicked),
-                     webview);
-
-+  notebook = gtk_notebook_new ();
-+  gtk_box_pack_end (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
-+  gtk_widget_show (notebook);
-+
-   [webview initWithFrame:web_rect
-                frameName:@"foo"
-                groupName:@"bar"];
-@@ -97,12 +102,24 @@ main (gint   argc,
-
-   ns_view = gtk_ns_view_new ((NSView *) webview);
-   gtk_widget_set_size_request (ns_view, 300, 200);
-+#if 0
-   gtk_box_pack_end (GTK_BOX (vbox), ns_view, TRUE, TRUE, 0);
-+#else
-+  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), ns_view,
-+                            gtk_label_new ("WebView"));
-+#endif
-   gtk_widget_show (ns_view);
-
-   [webview release];
-
-   {
-+    GtkWidget *useless = gtk_label_new ("Useless Label");
-+    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), useless,
-+                              gtk_label_new ("Useless"));
-+    gtk_widget_show (useless);
-+  }
-+
-+  {
-     GtkWidget *button;
-
-     button = gtk_button_new_with_label ("hide webview");
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0042-gtk-connect-GtkNSView-to-move-native-children-and-re.patch b/bockbuild/mac-sdk/patches/gtk/0042-gtk-connect-GtkNSView-to-move-native-children-and-re.patch
deleted file mode 100644 (file)
index 651e32a..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-From 87d285a9e186e7745d4f3a2b2e6a489b1b803b94 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 22 Feb 2013 11:06:26 +0100
-Subject: [PATCH 42/68] gtk: connect GtkNSView to "move-native-children" and
- reposition
-
----
- gtk/gtknsview.c |   32 ++++++++++++++++++++++++++------
- 1 file changed, 26 insertions(+), 6 deletions(-)
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index 40c6a9b..a19a94e 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -77,12 +77,14 @@ static gboolean   gtk_ns_view_key_press     (GtkWidget      *widget,
- static gboolean   gtk_ns_view_key_release   (GtkWidget      *widget,
-                                              GdkEventKey    *event);
-
--static void       gtk_ns_view_native_child_event (GdkWindow     *window,
--                                                  NSView        *view,
--                                                  NSEvent       *event,
--                                                  GtkNSView     *ns_view);
--static gboolean   gtk_ns_view_forward_event      (GtkWidget     *widget,
--                                                  GdkEventKey   *event);
-+static void       gtk_ns_view_native_child_event   (GdkWindow     *window,
-+                                                    NSView        *view,
-+                                                    NSEvent       *event,
-+                                                    GtkNSView     *ns_view);
-+static void       gtk_ns_view_move_native_children (GdkWindow     *window,
-+                                                    GtkNSView     *ns_view);
-+static gboolean   gtk_ns_view_forward_event        (GtkWidget     *widget,
-+                                                    GdkEventKey   *event);
-
-
- G_DEFINE_TYPE (GtkNSView, gtk_ns_view, GTK_TYPE_WIDGET)
-@@ -287,6 +289,10 @@ gtk_ns_view_map (GtkWidget *widget)
-                            G_CALLBACK (gtk_ns_view_native_child_event),
-                            G_OBJECT (widget), 0);
-
-+  g_signal_connect_object (gtk_widget_get_window (widget), "move-native-children",
-+                           G_CALLBACK (gtk_ns_view_move_native_children),
-+                           G_OBJECT (widget), 0);
-+
-   GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->map (widget);
- }
-
-@@ -296,6 +302,10 @@ gtk_ns_view_unmap (GtkWidget *widget)
-   GtkNSView *ns_view = GTK_NS_VIEW (widget);
-   GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
-
-+  g_signal_handlers_disconnect_by_func (gtk_widget_get_window (widget),
-+                                        gtk_ns_view_move_native_children,
-+                                        widget);
-+
-   g_signal_handlers_disconnect_by_func (gtk_widget_get_window (toplevel),
-                                         gtk_ns_view_native_child_event,
-                                         widget);
-@@ -412,6 +422,16 @@ gtk_ns_view_native_child_event (GdkWindow *window,
-     }
- }
-
-+static void
-+gtk_ns_view_move_native_children (GdkWindow *window,
-+                                  GtkNSView *ns_view)
-+{
-+  GtkAllocation allocation;
-+
-+  gtk_widget_get_allocation (GTK_WIDGET (ns_view), &allocation);
-+  gtk_ns_view_position_view (ns_view, &allocation);
-+}
-+
- static gboolean
- gtk_ns_view_forward_event (GtkWidget   *widget,
-                            GdkEventKey *event)
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0043-tests-add-a-scrolled-window-test-widget-to-testnsvie.patch b/bockbuild/mac-sdk/patches/gtk/0043-tests-add-a-scrolled-window-test-widget-to-testnsvie.patch
deleted file mode 100644 (file)
index f43d40f..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-From aa3e5322000437f02e04916abf278dbbc407a403 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 22 Feb 2013 11:06:58 +0100
-Subject: [PATCH 43/68] tests: add a scrolled window test widget to
- testnsview.c
-
----
- tests/testnsview.c |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 51 insertions(+)
-
-diff --git a/tests/testnsview.c b/tests/testnsview.c
-index 45b1d60..1a523e6 100644
---- a/tests/testnsview.c
-+++ b/tests/testnsview.c
-@@ -139,6 +139,57 @@ main (gint   argc,
-                               ns_view);
-   }
-
-+  /* add an entry in a scrolled window to test scrolling / clipping */
-+  {
-+    GtkWidget *sw;
-+    GtkWidget *abox;
-+    GtkWidget *hbox;
-+    NSRect label_rect = { { 0.0, 0.0 }, { 100.0, 12.0 } };
-+    NSRect text_rect = { { 0.0, 0.0 }, { 100.0, 12.0 } };
-+    NSTextField *text_field;
-+
-+    sw = gtk_scrolled_window_new (NULL, NULL);
-+    gtk_widget_set_size_request (sw, -1, 100);
-+    gtk_box_pack_start (GTK_BOX (vbox), sw, FALSE, FALSE, 0);
-+    gtk_widget_show (sw);
-+
-+    abox = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
-+    gtk_widget_set_size_request (abox, -1, 200);
-+    gtk_container_set_border_width (GTK_CONTAINER (abox), 10);
-+    gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), abox);
-+    gtk_widget_show (abox);
-+
-+    hbox = gtk_hbox_new (FALSE, 10);
-+    gtk_container_add (GTK_CONTAINER (abox), hbox);
-+    gtk_widget_show (hbox);
-+
-+    /* a non-editable text label */
-+    text_field = [[NSTextField alloc] initWithFrame:label_rect];
-+    [text_field setEditable:NO];
-+    [text_field setDrawsBackground:NO];
-+    [text_field setBordered:NO];
-+    [text_field setStringValue:@"A Text Label"];
-+
-+    ns_view = gtk_ns_view_new ((NSView *) text_field);
-+    gtk_widget_set_size_request (ns_view, 100, 20);
-+    gtk_box_pack_start (GTK_BOX (hbox), ns_view, FALSE, FALSE, 0);
-+    gtk_widget_show (ns_view);
-+
-+    [text_field release];
-+
-+    /* an editable text field */
-+    text_field = [[NSTextField alloc] initWithFrame:text_rect];
-+    [text_field setEditable:YES];
-+    [text_field setStringValue:@"An editable text entry"];
-+
-+    ns_view = gtk_ns_view_new ((NSView *) text_field);
-+    gtk_widget_set_size_request (ns_view, 100, 20);
-+    gtk_box_pack_start (GTK_BOX (hbox), ns_view, TRUE, TRUE, 0);
-+    gtk_widget_show (ns_view);
-+
-+    [text_field release];
-+  }
-+
-   /* add an entry in an event box to test living inside another gdkwindow */
-   {
-     GtkWidget *event_box;
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0044-gtknsview-clip-drawRect-to-a-parent-GtkViewport-s-wi.patch b/bockbuild/mac-sdk/patches/gtk/0044-gtknsview-clip-drawRect-to-a-parent-GtkViewport-s-wi.patch
deleted file mode 100644 (file)
index 0adb0e1..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-From 08f7cca62c0a810d1bd5eaf52813b9ecb776478e Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 1 Mar 2013 12:39:41 +0100
-Subject: [PATCH 44/68] gtknsview: clip drawRect to a parent GtkViewport's
- window
-
-not quite perfect yet, but getting there...
----
- gtk/gtknsview.c |  121 +++++++++++++++++++++++++++++++++++++++++++++++++------
- 1 file changed, 109 insertions(+), 12 deletions(-)
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index a19a94e..84d758f 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -28,6 +28,7 @@
- #include <objc/runtime.h>
-
- #include "gtknsview.h"
-+#include "gtkviewport.h"
- #include "gtkprivate.h"
- #include "gtkintl.h"
- #include "gtkalias.h"
-@@ -52,6 +53,7 @@ struct _GtkNSViewPrivate
-                                       GTK_TYPE_NS_VIEW, GtkNSViewPrivate))
-
-
-+static void       gtk_ns_view_constructed   (GObject        *object);
- static void       gtk_ns_view_finalize      (GObject        *object);
- static void       gtk_ns_view_set_property  (GObject        *object,
-                                              guint           prop_id,
-@@ -89,7 +91,6 @@ static gboolean   gtk_ns_view_forward_event        (GtkWidget     *widget,
-
- G_DEFINE_TYPE (GtkNSView, gtk_ns_view, GTK_TYPE_WIDGET)
-
--
- static void
- gtk_ns_view_class_init (GtkNSViewClass *klass)
- {
-@@ -98,6 +99,7 @@ gtk_ns_view_class_init (GtkNSViewClass *klass)
-
-   g_type_class_add_private (klass, sizeof (GtkNSViewPrivate));
-
-+  object_class->constructed = gtk_ns_view_constructed;
-   object_class->finalize = gtk_ns_view_finalize;
-   object_class->set_property = gtk_ns_view_set_property;
-   object_class->get_property = gtk_ns_view_get_property;
-@@ -136,6 +138,111 @@ gtk_ns_view_init (GtkNSView *ns_view)
-   gtk_widget_set_has_window (GTK_WIDGET (ns_view), FALSE);
- }
-
-+@implementation NSView (myDrawRect)
-+- (void) myDrawRect: (NSRect) dirtyRect
-+{
-+  GtkNSView *ns_view;
-+  GtkWidget *viewport;
-+
-+#if 0
-+  g_printerr ("drawRect called\n");
-+#endif
-+
-+  ns_view = (GtkNSView *) objc_getAssociatedObject (self, "gtknsview");
-+
-+  if (! ns_view)
-+    {
-+      [self myDrawRect: dirtyRect];
-+      return;
-+    }
-+
-+  viewport = gtk_widget_get_ancestor (GTK_WIDGET (ns_view), GTK_TYPE_VIEWPORT);
-+
-+  if (viewport)
-+    {
-+      CGContextRef cg_context = [[NSGraphicsContext currentContext] graphicsPort];
-+      GtkAllocation viewport_allocation;
-+      CGRect rect;
-+
-+#if 0
-+      g_printerr ("drawRect called on gtknsview in gtkviewport\n");
-+#endif
-+
-+      gtk_widget_get_allocation (viewport, &viewport_allocation);
-+
-+      if (gtk_viewport_get_shadow_type (GTK_VIEWPORT (viewport)) != GTK_SHADOW_NONE)
-+        {
-+          GtkStyle *style = gtk_widget_get_style (viewport);
-+
-+          viewport_allocation.x += style->xthickness;
-+          viewport_allocation.y += style->ythickness;
-+          viewport_allocation.width -= 2 * style->xthickness;
-+          viewport_allocation.height -= 2 * style->ythickness;
-+        }
-+
-+      gtk_widget_translate_coordinates (viewport, GTK_WIDGET (ns_view),
-+                                        viewport_allocation.x,
-+                                        viewport_allocation.y,
-+                                        &viewport_allocation.x,
-+                                        &viewport_allocation.y);
-+
-+      rect.origin.x = viewport_allocation.x;
-+      rect.origin.y = viewport_allocation.y;
-+      rect.size.width = viewport_allocation.width;
-+      rect.size.height = viewport_allocation.height;
-+
-+      CGContextSaveGState (cg_context);
-+      CGContextClipToRect (cg_context, rect);
-+
-+      [self myDrawRect: dirtyRect];
-+
-+      CGContextRestoreGState (cg_context);
-+    }
-+  else
-+    {
-+      [self myDrawRect: dirtyRect];
-+    }
-+}
-+@end
-+
-+static void
-+gtk_ns_view_constructed (GObject *object)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (object);
-+  Method original_drawRect;
-+  Method my_drawRect;
-+
-+  G_OBJECT_CLASS (gtk_ns_view_parent_class)->constructed (object);
-+
-+  gtk_widget_set_can_focus (GTK_WIDGET (ns_view),
-+                            [ns_view->priv->view acceptsFirstResponder]);
-+
-+#if DEBUG_FOCUS
-+  g_printerr ("%s can focus: %d\n",
-+              class_getName ([ns_view->priv->view class]),
-+              gtk_widget_get_can_focus (GTK_WIDGET (ns_view)));
-+#endif
-+
-+  original_drawRect = class_getInstanceMethod ([ns_view->priv->view class],
-+                                               @selector (drawRect:));
-+  my_drawRect = class_getInstanceMethod ([ns_view->priv->view class],
-+                                         @selector (myDrawRect:));
-+
-+  if (class_addMethod ([ns_view->priv->view class],
-+                       @selector (myDrawRect:),
-+                       method_getImplementation (original_drawRect),
-+                       method_getTypeEncoding (original_drawRect)))
-+    {
-+      class_replaceMethod ([ns_view->priv->view class],
-+                           @selector (drawRect:),
-+                           method_getImplementation (my_drawRect),
-+                           method_getTypeEncoding (my_drawRect));
-+    }
-+
-+  objc_setAssociatedObject (ns_view->priv->view, "gtknsview", (id) ns_view,
-+                            OBJC_ASSOCIATION_ASSIGN);
-+}
-+
- static void
- gtk_ns_view_finalize (GObject *object)
- {
-@@ -163,17 +270,7 @@ gtk_ns_view_set_property (GObject      *object,
-     case PROP_VIEW:
-       ns_view->priv->view = g_value_get_pointer (value);
-       if (ns_view->priv->view)
--        {
--          [ns_view->priv->view retain];
--          gtk_widget_set_can_focus (GTK_WIDGET (ns_view),
--                                    [ns_view->priv->view acceptsFirstResponder]);
--
--#if DEBUG_FOCUS
--          g_printerr ("%s can focus: %d\n",
--                      class_getName ([ns_view->priv->view class]),
--                      gtk_widget_get_can_focus (GTK_WIDGET (ns_view)));
--#endif
--        }
-+        [ns_view->priv->view retain];
-       break;
-
-     default:
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0045-gtk-clip-NSViews-to-the-scrolled-window-s-overshoot_.patch b/bockbuild/mac-sdk/patches/gtk/0045-gtk-clip-NSViews-to-the-scrolled-window-s-overshoot_.patch
deleted file mode 100644 (file)
index 529d195..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-From 24caf0db2af4d43a2d8bf1cd6dff7e54d5268502 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Thu, 14 Mar 2013 16:54:38 +0100
-Subject: [PATCH 45/68] gtk: clip NSViews to the scrolled window's
- overshoot_window
-
-not to the viewport's allocation. This is ugly but by far the
-easiest way to get clipping right.
----
- gtk/gtknsview.c    |   31 +++++++++++++++++++++++++++++++
- tests/testnsview.c |    3 ++-
- 2 files changed, 33 insertions(+), 1 deletion(-)
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index 84d758f..db1da93 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -160,6 +160,7 @@ gtk_ns_view_init (GtkNSView *ns_view)
-
-   if (viewport)
-     {
-+      GdkWindow *window;
-       CGContextRef cg_context = [[NSGraphicsContext currentContext] graphicsPort];
-       GtkAllocation viewport_allocation;
-       CGRect rect;
-@@ -170,6 +171,36 @@ gtk_ns_view_init (GtkNSView *ns_view)
-
-       gtk_widget_get_allocation (viewport, &viewport_allocation);
-
-+#if 0
-+      g_printerr ("viewport allocation: %d, %d (%d x %x)\n",
-+                  viewport_allocation.x,
-+                  viewport_allocation.y,
-+                  viewport_allocation.width,
-+                  viewport_allocation.height);
-+#endif
-+
-+      /* evil: don't clip to the viewport's width/height but to that
-+       * of its parent window, because we know we hacked an
-+       * overshoot_window into GtkScrolledWindow and need to restrict
-+       * rendering in its area
-+       */
-+      window = gtk_widget_get_parent_window (viewport);
-+
-+      viewport_allocation.width = gdk_window_get_width (window);
-+      viewport_allocation.height = gdk_window_get_height (window);
-+
-+#if 0
-+      {
-+        gint x, y;
-+
-+        gdk_window_get_position (window, &x, &y);
-+        g_printerr ("viewport parent window at %d, %d (%x x %x)\n",
-+                    x, y,
-+                    gdk_window_get_width (window),
-+                    gdk_window_get_height (window));
-+      }
-+#endif
-+
-       if (gtk_viewport_get_shadow_type (GTK_VIEWPORT (viewport)) != GTK_SHADOW_NONE)
-         {
-           GtkStyle *style = gtk_widget_get_style (viewport);
-diff --git a/tests/testnsview.c b/tests/testnsview.c
-index 1a523e6..24d1d41 100644
---- a/tests/testnsview.c
-+++ b/tests/testnsview.c
-@@ -149,7 +149,8 @@ main (gint   argc,
-     NSTextField *text_field;
-
-     sw = gtk_scrolled_window_new (NULL, NULL);
--    gtk_widget_set_size_request (sw, -1, 100);
-+    gtk_widget_set_size_request (sw, -1, 130);
-+    gtk_container_set_border_width (GTK_CONTAINER (sw), 20);
-     gtk_box_pack_start (GTK_BOX (vbox), sw, FALSE, FALSE, 0);
-     gtk_widget_show (sw);
-
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0046-gtk-implement-clipping-to-multiple-parent-viewports-.patch b/bockbuild/mac-sdk/patches/gtk/0046-gtk-implement-clipping-to-multiple-parent-viewports-.patch
deleted file mode 100644 (file)
index d7bfaaa..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-From ab0bb7104783da5155361e6fbd89ee14f25e2544 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Thu, 14 Mar 2013 20:10:51 +0100
-Subject: [PATCH 46/68] gtk: implement clipping to multiple parent viewports
- in GtkNSView
-
----
- gtk/gtknsview.c |   51 +++++++++++----------------------------------------
- 1 file changed, 11 insertions(+), 40 deletions(-)
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index db1da93..1e0b7e6 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -143,10 +143,7 @@ gtk_ns_view_init (GtkNSView *ns_view)
- {
-   GtkNSView *ns_view;
-   GtkWidget *viewport;
--
--#if 0
--  g_printerr ("drawRect called\n");
--#endif
-+  CGContextRef cg_context;
-
-   ns_view = (GtkNSView *) objc_getAssociatedObject (self, "gtknsview");
-
-@@ -156,51 +153,30 @@ gtk_ns_view_init (GtkNSView *ns_view)
-       return;
-     }
-
--  viewport = gtk_widget_get_ancestor (GTK_WIDGET (ns_view), GTK_TYPE_VIEWPORT);
-+  cg_context = [[NSGraphicsContext currentContext] graphicsPort];
-+  CGContextSaveGState (cg_context);
-
--  if (viewport)
-+  for (viewport = gtk_widget_get_ancestor (GTK_WIDGET (ns_view), GTK_TYPE_VIEWPORT);
-+       viewport;
-+       viewport = gtk_widget_get_ancestor (gtk_widget_get_parent (viewport),
-+                                           GTK_TYPE_VIEWPORT))
-     {
-       GdkWindow *window;
--      CGContextRef cg_context = [[NSGraphicsContext currentContext] graphicsPort];
-       GtkAllocation viewport_allocation;
-       CGRect rect;
-
--#if 0
--      g_printerr ("drawRect called on gtknsview in gtkviewport\n");
--#endif
--
-       gtk_widget_get_allocation (viewport, &viewport_allocation);
-
--#if 0
--      g_printerr ("viewport allocation: %d, %d (%d x %x)\n",
--                  viewport_allocation.x,
--                  viewport_allocation.y,
--                  viewport_allocation.width,
--                  viewport_allocation.height);
--#endif
--
-       /* evil: don't clip to the viewport's width/height but to that
-        * of its parent window, because we know we hacked an
-        * overshoot_window into GtkScrolledWindow and need to restrict
--       * rendering in its area
-+       * rendering to its area
-        */
-       window = gtk_widget_get_parent_window (viewport);
-
-       viewport_allocation.width = gdk_window_get_width (window);
-       viewport_allocation.height = gdk_window_get_height (window);
-
--#if 0
--      {
--        gint x, y;
--
--        gdk_window_get_position (window, &x, &y);
--        g_printerr ("viewport parent window at %d, %d (%x x %x)\n",
--                    x, y,
--                    gdk_window_get_width (window),
--                    gdk_window_get_height (window));
--      }
--#endif
--
-       if (gtk_viewport_get_shadow_type (GTK_VIEWPORT (viewport)) != GTK_SHADOW_NONE)
-         {
-           GtkStyle *style = gtk_widget_get_style (viewport);
-@@ -222,17 +198,12 @@ gtk_ns_view_init (GtkNSView *ns_view)
-       rect.size.width = viewport_allocation.width;
-       rect.size.height = viewport_allocation.height;
-
--      CGContextSaveGState (cg_context);
-       CGContextClipToRect (cg_context, rect);
-+    }
-
--      [self myDrawRect: dirtyRect];
-+  [self myDrawRect: dirtyRect];
-
--      CGContextRestoreGState (cg_context);
--    }
--  else
--    {
--      [self myDrawRect: dirtyRect];
--    }
-+  CGContextRestoreGState (cg_context);
- }
- @end
-
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0047-gtk-first-attempt-to-also-clip-NSWindow-s-field-edit.patch b/bockbuild/mac-sdk/patches/gtk/0047-gtk-first-attempt-to-also-clip-NSWindow-s-field-edit.patch
deleted file mode 100644 (file)
index de1ffb3..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-From 56e863ef4b425c1ac79e53d35f9b8b9649cec7d3 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 15 Mar 2013 14:49:59 +0100
-Subject: [PATCH 47/68] gtk: first attempt to also clip NSWindow's field
- editor
-
-Also, factor out the method swizzling to a utility function.
----
- gtk/gtknsview.c |   75 ++++++++++++++++++++++++++++++++++++++++++-------------
- 1 file changed, 58 insertions(+), 17 deletions(-)
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index 1e0b7e6..b58a2c8 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -29,6 +29,7 @@
-
- #include "gtknsview.h"
- #include "gtkviewport.h"
-+#include "gtkwindow.h"
- #include "gtkprivate.h"
- #include "gtkintl.h"
- #include "gtkalias.h"
-@@ -147,6 +148,22 @@ gtk_ns_view_init (GtkNSView *ns_view)
-
-   ns_view = (GtkNSView *) objc_getAssociatedObject (self, "gtknsview");
-
-+  if (! ns_view && ([self class] == [NSTextView class]))
-+    {
-+      /*  if it's not a GtkNSView, check if it's the NSWindow's cell
-+       *  editor editing an NSTextField managed by a GtkNSView
-+       */
-+      GtkWindow *window = (GtkWindow *) objc_getAssociatedObject (self, "gtkwindow");
-+
-+      if (GTK_IS_WINDOW (window))
-+        {
-+          GtkWidget *focus = gtk_window_get_focus (window);
-+
-+          if (GTK_IS_NS_VIEW (focus))
-+            ns_view = GTK_NS_VIEW (focus);
-+        }
-+    }
-+
-   if (! ns_view)
-     {
-       [self myDrawRect: dirtyRect];
-@@ -208,38 +225,45 @@ gtk_ns_view_init (GtkNSView *ns_view)
- @end
-
- static void
--gtk_ns_view_constructed (GObject *object)
-+gtk_ns_view_swizzle_draw_rect (NSView *view)
- {
--  GtkNSView *ns_view = GTK_NS_VIEW (object);
-   Method original_drawRect;
-   Method my_drawRect;
-
--  G_OBJECT_CLASS (gtk_ns_view_parent_class)->constructed (object);
--
--  gtk_widget_set_can_focus (GTK_WIDGET (ns_view),
--                            [ns_view->priv->view acceptsFirstResponder]);
--
--#if DEBUG_FOCUS
--  g_printerr ("%s can focus: %d\n",
--              class_getName ([ns_view->priv->view class]),
--              gtk_widget_get_can_focus (GTK_WIDGET (ns_view)));
--#endif
--
--  original_drawRect = class_getInstanceMethod ([ns_view->priv->view class],
-+  original_drawRect = class_getInstanceMethod ([view class],
-                                                @selector (drawRect:));
--  my_drawRect = class_getInstanceMethod ([ns_view->priv->view class],
-+  my_drawRect = class_getInstanceMethod ([view class],
-                                          @selector (myDrawRect:));
-
--  if (class_addMethod ([ns_view->priv->view class],
-+  if (class_addMethod ([view class],
-                        @selector (myDrawRect:),
-                        method_getImplementation (original_drawRect),
-                        method_getTypeEncoding (original_drawRect)))
-     {
--      class_replaceMethod ([ns_view->priv->view class],
-+      class_replaceMethod ([view class],
-                            @selector (drawRect:),
-                            method_getImplementation (my_drawRect),
-                            method_getTypeEncoding (my_drawRect));
-     }
-+}
-+
-+static void
-+gtk_ns_view_constructed (GObject *object)
-+{
-+  GtkNSView *ns_view = GTK_NS_VIEW (object);
-+
-+  G_OBJECT_CLASS (gtk_ns_view_parent_class)->constructed (object);
-+
-+  gtk_widget_set_can_focus (GTK_WIDGET (ns_view),
-+                            [ns_view->priv->view acceptsFirstResponder]);
-+
-+#if DEBUG_FOCUS
-+  g_printerr ("%s can focus: %d\n",
-+              class_getName ([ns_view->priv->view class]),
-+              gtk_widget_get_can_focus (GTK_WIDGET (ns_view)));
-+#endif
-+
-+  gtk_ns_view_swizzle_draw_rect (ns_view->priv->view);
-
-   objc_setAssociatedObject (ns_view->priv->view, "gtknsview", (id) ns_view,
-                             OBJC_ASSOCIATION_ASSIGN);
-@@ -375,6 +399,7 @@ gtk_ns_view_map (GtkWidget *widget)
-   GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
-   GtkAllocation allocation;
-   NSView *parent_view;
-+  NSWindow *window;
-
-   gtk_widget_get_allocation (widget, &allocation);
-   gtk_ns_view_position_view (ns_view, &allocation);
-@@ -393,6 +418,22 @@ gtk_ns_view_map (GtkWidget *widget)
-                            G_OBJECT (widget), 0);
-
-   GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->map (widget);
-+
-+  window = [ns_view->priv->view window];
-+
-+  if (window)
-+    {
-+      NSText *text = [window fieldEditor: YES
-+                               forObject: nil];
-+
-+      if (text)
-+        {
-+          gtk_ns_view_swizzle_draw_rect (text);
-+
-+          objc_setAssociatedObject (text, "gtkwindow", (id) toplevel,
-+                                    OBJC_ASSOCIATION_ASSIGN);
-+        }
-+    }
- }
-
- static void
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0048-gtk-also-clip-the-NSView-s-subviews.patch b/bockbuild/mac-sdk/patches/gtk/0048-gtk-also-clip-the-NSView-s-subviews.patch
deleted file mode 100644 (file)
index ce8f7a6..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-From 20bf51d57fecdc6783aa3edee50a657243aa872a Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 15 Mar 2013 16:56:59 +0100
-Subject: [PATCH 48/68] gtk: also clip the NSView's subviews
-
----
- gtk/gtknsview.c |   29 ++++++++++++++++++++---------
- 1 file changed, 20 insertions(+), 9 deletions(-)
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index b58a2c8..e2d8f96 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -225,10 +225,14 @@ gtk_ns_view_init (GtkNSView *ns_view)
- @end
-
- static void
--gtk_ns_view_swizzle_draw_rect (NSView *view)
-+gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
-+                                         const gchar *associated_key,
-+                                         gpointer     associated_object)
- {
-   Method original_drawRect;
-   Method my_drawRect;
-+  NSArray *subviews;
-+  gint i;
-
-   original_drawRect = class_getInstanceMethod ([view class],
-                                                @selector (drawRect:));
-@@ -245,6 +249,18 @@ gtk_ns_view_swizzle_draw_rect (NSView *view)
-                            method_getImplementation (my_drawRect),
-                            method_getTypeEncoding (my_drawRect));
-     }
-+
-+  objc_setAssociatedObject (view, associated_key, (id) associated_object,
-+                            OBJC_ASSOCIATION_ASSIGN);
-+
-+  subviews = [view subviews];
-+
-+  for (i = 0; i < [subviews count]; i++)
-+    {
-+      gtk_ns_view_swizzle_draw_rect_recursive ([subviews objectAtIndex: i],
-+                                               associated_key,
-+                                               associated_object);
-+    }
- }
-
- static void
-@@ -263,10 +279,8 @@ gtk_ns_view_constructed (GObject *object)
-               gtk_widget_get_can_focus (GTK_WIDGET (ns_view)));
- #endif
-
--  gtk_ns_view_swizzle_draw_rect (ns_view->priv->view);
--
--  objc_setAssociatedObject (ns_view->priv->view, "gtknsview", (id) ns_view,
--                            OBJC_ASSOCIATION_ASSIGN);
-+  gtk_ns_view_swizzle_draw_rect_recursive (ns_view->priv->view,
-+                                           "gtknsview", ns_view);
- }
-
- static void
-@@ -428,10 +442,7 @@ gtk_ns_view_map (GtkWidget *widget)
-
-       if (text)
-         {
--          gtk_ns_view_swizzle_draw_rect (text);
--
--          objc_setAssociatedObject (text, "gtkwindow", (id) toplevel,
--                                    OBJC_ASSOCIATION_ASSIGN);
-+          gtk_ns_view_swizzle_draw_rect_recursive (text, "gtkwindow", toplevel);
-         }
-     }
- }
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0049-nsview-also-swizzle-DidAddSubview-and-clip-all-subvi.patch b/bockbuild/mac-sdk/patches/gtk/0049-nsview-also-swizzle-DidAddSubview-and-clip-all-subvi.patch
deleted file mode 100644 (file)
index a378568..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-From ef95f0fc2917e98ea48ea5a07031b6e4b4152634 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Thu, 25 Apr 2013 12:22:28 +0200
-Subject: [PATCH 49/68] nsview: also swizzle DidAddSubview and clip all
- subviews that are added
-
-Finally makes textviews being clipped correctly. Original patch
-from Kris, I fixed a minor clipping off-by-something.
----
- gtk/gtknsview.c |   63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 62 insertions(+), 1 deletion(-)
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index e2d8f96..bc3cbfb 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -139,6 +139,25 @@ gtk_ns_view_init (GtkNSView *ns_view)
-   gtk_widget_set_has_window (GTK_WIDGET (ns_view), FALSE);
- }
-
-+
-+static void   gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
-+                                                       const gchar *associated_key,
-+                                                       gpointer     associated_object);
-+
-+@implementation NSView (myDidAddSubview)
-+- (void) myDidAddSubview:(NSView *)aView
-+{
-+  void *associated_object;
-+
-+  associated_object = objc_getAssociatedObject (self, "gtknsview");
-+
-+  if (associated_object)
-+    gtk_ns_view_swizzle_draw_rect_recursive (aView, "gtknsview", associated_object);
-+
-+  [self myDidAddSubview:aView];
-+}
-+@end
-+
- @implementation NSView (myDrawRect)
- - (void) myDrawRect: (NSRect) dirtyRect
- {
-@@ -164,7 +183,8 @@ gtk_ns_view_init (GtkNSView *ns_view)
-         }
-     }
-
--  if (! ns_view)
-+  if (! ns_view ||
-+      ns_view->priv->view != [ns_view->priv->view ancestorSharedWithView: self])
-     {
-       [self myDrawRect: dirtyRect];
-       return;
-@@ -215,6 +235,18 @@ gtk_ns_view_init (GtkNSView *ns_view)
-       rect.size.width = viewport_allocation.width;
-       rect.size.height = viewport_allocation.height;
-
-+      /*  need to translate rect if this is not the view itself but a subview  */
-+      if (ns_view->priv->view != self)
-+        {
-+          NSRect offset = NSMakeRect (0, 0, 0, 0);
-+
-+          offset = [ns_view->priv->view convertRect: offset
-+                                           fromView: self];
-+
-+          rect.origin.x -= offset.origin.x;
-+          rect.origin.y -= offset.origin.y;
-+        }
-+
-       CGContextClipToRect (cg_context, rect);
-     }
-
-@@ -231,9 +263,20 @@ gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
- {
-   Method original_drawRect;
-   Method my_drawRect;
-+  Method original_didAddSubview;
-+  Method my_didAddSubview;
-   NSArray *subviews;
-   gint i;
-
-+  /* This is a private method that disable automatic focus ring handling.
-+   * It looks like automatic focus ring drawing is handled by a toplevel
-+   * NSView, so it cannot be caught by our clipping. If we disable this
-+   * automatic handling, the focus ring appears to be drawn locally and
-+   * is affected by our clipping.
-+   */
-+  [view _setAutomaticFocusRingDisabled:YES];
-+
-+  /* Swizzle drawRect */
-   original_drawRect = class_getInstanceMethod ([view class],
-                                                @selector (drawRect:));
-   my_drawRect = class_getInstanceMethod ([view class],
-@@ -250,6 +293,24 @@ gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
-                            method_getTypeEncoding (my_drawRect));
-     }
-
-+  /* Swizzle didAddSubView */
-+  original_didAddSubview = class_getInstanceMethod ([view class],
-+                                                    @selector (didAddSubview:));
-+  my_didAddSubview = class_getInstanceMethod ([view class],
-+                                              @selector (myDidAddSubview:));
-+
-+  if (class_addMethod ([view class],
-+                       @selector (myDidAddSubview:),
-+                       method_getImplementation (original_didAddSubview),
-+                       method_getTypeEncoding (original_didAddSubview)))
-+    {
-+      class_replaceMethod ([view class],
-+                           @selector (didAddSubview:),
-+                           method_getImplementation (my_didAddSubview),
-+                           method_getTypeEncoding (my_didAddSubview));
-+    }
-+
-+
-   objc_setAssociatedObject (view, associated_key, (id) associated_object,
-                             OBJC_ASSOCIATION_ASSIGN);
-
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0050-nsview-clip-text-field-cursor-drawing.patch b/bockbuild/mac-sdk/patches/gtk/0050-nsview-clip-text-field-cursor-drawing.patch
deleted file mode 100644 (file)
index a28cba6..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-From daf0f5ecb7b9a71d93d7e41b000369d977ea4816 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Thu, 25 Apr 2013 14:52:18 +0200
-Subject: [PATCH 50/68] nsview: clip text field cursor drawing
-
-by replacing (not "normal" swizzling) drawInsertionPointInRect. This
-fixes cursor clipping for the *blinking* cursor, but not if the
-cusor moves. Patch patially from Kris..
----
- gtk/gtknsview.c |  162 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
- 1 file changed, 159 insertions(+), 3 deletions(-)
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index bc3cbfb..5e3aa59 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -145,14 +145,23 @@ static void   gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
-                                                        gpointer     associated_object);
-
- @implementation NSView (myDidAddSubview)
--- (void) myDidAddSubview:(NSView *)aView
-+- (void) myDidAddSubview: (NSView *) aView
- {
-   void *associated_object;
-
-   associated_object = objc_getAssociatedObject (self, "gtknsview");
-
-   if (associated_object)
--    gtk_ns_view_swizzle_draw_rect_recursive (aView, "gtknsview", associated_object);
-+    {
-+      gtk_ns_view_swizzle_draw_rect_recursive (aView, "gtknsview", associated_object);
-+    }
-+  else
-+    {
-+      associated_object = objc_getAssociatedObject (self, "gtkwindow");
-+
-+      if (associated_object)
-+        gtk_ns_view_swizzle_draw_rect_recursive (aView, "gtkwindow", associated_object);
-+    }
-
-   [self myDidAddSubview:aView];
- }
-@@ -256,6 +265,110 @@ static void   gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
- }
- @end
-
-+@implementation NSTextView (myDrawInsertionPointInRect)
-+- (void) myDrawInsertionPointInRect: (NSRect) aRect
-+                              color: (NSColor *) aColor
-+                           turnedOn: (BOOL) flag
-+{
-+  GtkNSView *ns_view;
-+  GtkWidget *viewport;
-+  CGContextRef cg_context;
-+
-+  ns_view = (GtkNSView *) objc_getAssociatedObject (self, "gtknsview");
-+
-+  if (! ns_view && ([self class] == [NSTextView class]))
-+    {
-+      /*  if it's not a GtkNSView, check if it's the NSWindow's cell
-+       *  editor editing an NSTextField managed by a GtkNSView
-+       */
-+      GtkWindow *window = (GtkWindow *) objc_getAssociatedObject (self, "gtkwindow");
-+
-+      if (GTK_IS_WINDOW (window))
-+        {
-+          GtkWidget *focus = gtk_window_get_focus (window);
-+
-+          if (GTK_IS_NS_VIEW (focus))
-+            ns_view = GTK_NS_VIEW (focus);
-+        }
-+    }
-+
-+  if (! ns_view ||
-+      ns_view->priv->view != [ns_view->priv->view ancestorSharedWithView: self])
-+    {
-+      [self myDrawInsertionPointInRect: aRect
-+                                 color: aColor
-+                              turnedOn: flag];
-+      return;
-+    }
-+
-+  cg_context = [[NSGraphicsContext currentContext] graphicsPort];
-+  CGContextSaveGState (cg_context);
-+
-+  for (viewport = gtk_widget_get_ancestor (GTK_WIDGET (ns_view), GTK_TYPE_VIEWPORT);
-+       viewport;
-+       viewport = gtk_widget_get_ancestor (gtk_widget_get_parent (viewport),
-+                                           GTK_TYPE_VIEWPORT))
-+    {
-+      GdkWindow *window;
-+      GtkAllocation viewport_allocation;
-+      CGRect rect;
-+
-+      gtk_widget_get_allocation (viewport, &viewport_allocation);
-+
-+      /* evil: don't clip to the viewport's width/height but to that
-+       * of its parent window, because we know we hacked an
-+       * overshoot_window into GtkScrolledWindow and need to restrict
-+       * rendering to its area
-+       */
-+      window = gtk_widget_get_parent_window (viewport);
-+
-+      viewport_allocation.width = gdk_window_get_width (window);
-+      viewport_allocation.height = gdk_window_get_height (window);
-+
-+      if (gtk_viewport_get_shadow_type (GTK_VIEWPORT (viewport)) != GTK_SHADOW_NONE)
-+        {
-+          GtkStyle *style = gtk_widget_get_style (viewport);
-+
-+          viewport_allocation.x += style->xthickness;
-+          viewport_allocation.y += style->ythickness;
-+          viewport_allocation.width -= 2 * style->xthickness;
-+          viewport_allocation.height -= 2 * style->ythickness;
-+        }
-+
-+      gtk_widget_translate_coordinates (viewport, GTK_WIDGET (ns_view),
-+                                        viewport_allocation.x,
-+                                        viewport_allocation.y,
-+                                        &viewport_allocation.x,
-+                                        &viewport_allocation.y);
-+
-+      rect.origin.x = viewport_allocation.x;
-+      rect.origin.y = viewport_allocation.y;
-+      rect.size.width = viewport_allocation.width;
-+      rect.size.height = viewport_allocation.height;
-+
-+      /*  need to translate rect if this is not the view itself but a subview  */
-+      if (ns_view->priv->view != self)
-+        {
-+          NSRect offset = NSMakeRect (0, 0, 0, 0);
-+
-+          offset = [ns_view->priv->view convertRect: offset
-+                                           fromView: self];
-+
-+          rect.origin.x -= offset.origin.x;
-+          rect.origin.y -= offset.origin.y;
-+        }
-+
-+      CGContextClipToRect (cg_context, rect);
-+    }
-+
-+  [self myDrawInsertionPointInRect: aRect
-+                             color: aColor
-+                          turnedOn: flag];
-+
-+  CGContextRestoreGState (cg_context);
-+}
-+@end
-+
- static void
- gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
-                                          const gchar *associated_key,
-@@ -310,7 +423,6 @@ gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
-                            method_getTypeEncoding (my_didAddSubview));
-     }
-
--
-   objc_setAssociatedObject (view, associated_key, (id) associated_object,
-                             OBJC_ASSOCIATION_ASSIGN);
-
-@@ -325,6 +437,49 @@ gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
- }
-
- static void
-+gtk_ns_view_replace_draw_insertion_point (void)
-+{
-+  static volatile gsize draw_insertion_point_replaced = 0;
-+
-+  /* We replace the drawInsertPointInRect:color:turnedOn: method of the
-+   * NSTextView class. This should only be done once per application
-+   * instance.
-+   */
-+
-+  if (g_once_init_enter (&draw_insertion_point_replaced))
-+    {
-+      Method original_drawInsertionPointInRect;
-+      Method my_drawInsertionPointInRect;
-+      IMP original_implementation;
-+      Class text_view_class = [NSTextView class];
-+
-+      /* Get the original method and an explicit reference to the
-+       * implementation behind this method. This because after the
-+       * first replace method call, the method will point at a different
-+       * implementation.
-+       */
-+      original_drawInsertionPointInRect = class_getInstanceMethod (text_view_class,
-+                                                                   @selector (drawInsertionPointInRect:color:turnedOn:));
-+      original_implementation = method_getImplementation (original_drawInsertionPointInRect);
-+
-+      my_drawInsertionPointInRect = class_getInstanceMethod (text_view_class,
-+                                                             @selector (myDrawInsertionPointInRect:color:turnedOn:));
-+
-+      class_replaceMethod (text_view_class,
-+                           @selector (drawInsertionPointInRect:color:turnedOn:),
-+                           method_getImplementation (my_drawInsertionPointInRect),
-+                           method_getTypeEncoding (my_drawInsertionPointInRect));
-+
-+      class_replaceMethod (text_view_class,
-+                           @selector (myDrawInsertionPointInRect:color:turnedOn:),
-+                           original_implementation,
-+                           method_getTypeEncoding (original_drawInsertionPointInRect));
-+
-+      g_once_init_leave (&draw_insertion_point_replaced, TRUE);
-+    }
-+}
-+
-+static void
- gtk_ns_view_constructed (GObject *object)
- {
-   GtkNSView *ns_view = GTK_NS_VIEW (object);
-@@ -340,6 +495,7 @@ gtk_ns_view_constructed (GObject *object)
-               gtk_widget_get_can_focus (GTK_WIDGET (ns_view)));
- #endif
-
-+  gtk_ns_view_replace_draw_insertion_point ();
-   gtk_ns_view_swizzle_draw_rect_recursive (ns_view->priv->view,
-                                            "gtknsview", ns_view);
- }
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0051-nsview-factor-out-almost-all-code-from-the-overridde.patch b/bockbuild/mac-sdk/patches/gtk/0051-nsview-factor-out-almost-all-code-from-the-overridde.patch
deleted file mode 100644 (file)
index 8b77e6b..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-From 478d022cd553d33de59ec8ce22605b14a3837264 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 26 Apr 2013 15:50:14 +0200
-Subject: [PATCH 51/68] nsview: factor out almost all code from the overridden
- draw functions
-
----
- gtk/gtknsview.c |  151 +++++++++++++++++--------------------------------------
- 1 file changed, 47 insertions(+), 104 deletions(-)
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index 5e3aa59..b37b2fa 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -167,21 +167,19 @@ static void   gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
- }
- @end
-
--@implementation NSView (myDrawRect)
--- (void) myDrawRect: (NSRect) dirtyRect
-+static GtkNSView *
-+get_associated_gtknsview (NSView *view)
- {
-   GtkNSView *ns_view;
--  GtkWidget *viewport;
--  CGContextRef cg_context;
-
--  ns_view = (GtkNSView *) objc_getAssociatedObject (self, "gtknsview");
-+  ns_view = (GtkNSView *) objc_getAssociatedObject (view, "gtknsview");
-
--  if (! ns_view && ([self class] == [NSTextView class]))
-+  if (! ns_view && ([view class] == [NSTextView class]))
-     {
-       /*  if it's not a GtkNSView, check if it's the NSWindow's cell
-        *  editor editing an NSTextField managed by a GtkNSView
-        */
--      GtkWindow *window = (GtkWindow *) objc_getAssociatedObject (self, "gtkwindow");
-+      GtkWindow *window = (GtkWindow *) objc_getAssociatedObject (view, "gtkwindow");
-
-       if (GTK_IS_WINDOW (window))
-         {
-@@ -192,15 +190,21 @@ static void   gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
-         }
-     }
-
--  if (! ns_view ||
--      ns_view->priv->view != [ns_view->priv->view ancestorSharedWithView: self])
-+  if (ns_view &&
-+      ns_view->priv->view != [ns_view->priv->view ancestorSharedWithView: view])
-     {
--      [self myDrawRect: dirtyRect];
--      return;
-+      return NULL;
-     }
-
--  cg_context = [[NSGraphicsContext currentContext] graphicsPort];
--  CGContextSaveGState (cg_context);
-+  return ns_view;
-+}
-+
-+static CGContextRef
-+clip_to_parent_viewports (GtkNSView *ns_view,
-+                          NSView    *view)
-+{
-+  CGContextRef cg_context = nil;
-+  GtkWidget *viewport;
-
-   for (viewport = gtk_widget_get_ancestor (GTK_WIDGET (ns_view), GTK_TYPE_VIEWPORT);
-        viewport;
-@@ -245,23 +249,44 @@ static void   gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
-       rect.size.height = viewport_allocation.height;
-
-       /*  need to translate rect if this is not the view itself but a subview  */
--      if (ns_view->priv->view != self)
-+      if (ns_view->priv->view != view)
-         {
-           NSRect offset = NSMakeRect (0, 0, 0, 0);
-
-           offset = [ns_view->priv->view convertRect: offset
--                                           fromView: self];
-+                                           fromView: view];
-
-           rect.origin.x -= offset.origin.x;
-           rect.origin.y -= offset.origin.y;
-         }
-
-+      if (! cg_context)
-+        {
-+          cg_context = [[NSGraphicsContext currentContext] graphicsPort];
-+          CGContextSaveGState (cg_context);
-+        }
-+
-       CGContextClipToRect (cg_context, rect);
-     }
-
-+  return cg_context;
-+}
-+
-+@implementation NSView (myDrawRect)
-+- (void) myDrawRect: (NSRect) dirtyRect
-+{
-+  GtkNSView *ns_view;
-+  CGContextRef cg_context = nil;
-+
-+  ns_view = get_associated_gtknsview (self);
-+
-+  if (ns_view)
-+    cg_context = clip_to_parent_viewports (ns_view, self);
-+
-   [self myDrawRect: dirtyRect];
-
--  CGContextRestoreGState (cg_context);
-+  if (cg_context)
-+    CGContextRestoreGState (cg_context);
- }
- @end
-
-@@ -271,101 +296,19 @@ static void   gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
-                            turnedOn: (BOOL) flag
- {
-   GtkNSView *ns_view;
--  GtkWidget *viewport;
--  CGContextRef cg_context;
--
--  ns_view = (GtkNSView *) objc_getAssociatedObject (self, "gtknsview");
--
--  if (! ns_view && ([self class] == [NSTextView class]))
--    {
--      /*  if it's not a GtkNSView, check if it's the NSWindow's cell
--       *  editor editing an NSTextField managed by a GtkNSView
--       */
--      GtkWindow *window = (GtkWindow *) objc_getAssociatedObject (self, "gtkwindow");
--
--      if (GTK_IS_WINDOW (window))
--        {
--          GtkWidget *focus = gtk_window_get_focus (window);
--
--          if (GTK_IS_NS_VIEW (focus))
--            ns_view = GTK_NS_VIEW (focus);
--        }
--    }
--
--  if (! ns_view ||
--      ns_view->priv->view != [ns_view->priv->view ancestorSharedWithView: self])
--    {
--      [self myDrawInsertionPointInRect: aRect
--                                 color: aColor
--                              turnedOn: flag];
--      return;
--    }
--
--  cg_context = [[NSGraphicsContext currentContext] graphicsPort];
--  CGContextSaveGState (cg_context);
--
--  for (viewport = gtk_widget_get_ancestor (GTK_WIDGET (ns_view), GTK_TYPE_VIEWPORT);
--       viewport;
--       viewport = gtk_widget_get_ancestor (gtk_widget_get_parent (viewport),
--                                           GTK_TYPE_VIEWPORT))
--    {
--      GdkWindow *window;
--      GtkAllocation viewport_allocation;
--      CGRect rect;
--
--      gtk_widget_get_allocation (viewport, &viewport_allocation);
--
--      /* evil: don't clip to the viewport's width/height but to that
--       * of its parent window, because we know we hacked an
--       * overshoot_window into GtkScrolledWindow and need to restrict
--       * rendering to its area
--       */
--      window = gtk_widget_get_parent_window (viewport);
--
--      viewport_allocation.width = gdk_window_get_width (window);
--      viewport_allocation.height = gdk_window_get_height (window);
--
--      if (gtk_viewport_get_shadow_type (GTK_VIEWPORT (viewport)) != GTK_SHADOW_NONE)
--        {
--          GtkStyle *style = gtk_widget_get_style (viewport);
--
--          viewport_allocation.x += style->xthickness;
--          viewport_allocation.y += style->ythickness;
--          viewport_allocation.width -= 2 * style->xthickness;
--          viewport_allocation.height -= 2 * style->ythickness;
--        }
--
--      gtk_widget_translate_coordinates (viewport, GTK_WIDGET (ns_view),
--                                        viewport_allocation.x,
--                                        viewport_allocation.y,
--                                        &viewport_allocation.x,
--                                        &viewport_allocation.y);
-+  CGContextRef cg_context = nil;;
-
--      rect.origin.x = viewport_allocation.x;
--      rect.origin.y = viewport_allocation.y;
--      rect.size.width = viewport_allocation.width;
--      rect.size.height = viewport_allocation.height;
-+  ns_view = get_associated_gtknsview (self);
-
--      /*  need to translate rect if this is not the view itself but a subview  */
--      if (ns_view->priv->view != self)
--        {
--          NSRect offset = NSMakeRect (0, 0, 0, 0);
--
--          offset = [ns_view->priv->view convertRect: offset
--                                           fromView: self];
--
--          rect.origin.x -= offset.origin.x;
--          rect.origin.y -= offset.origin.y;
--        }
--
--      CGContextClipToRect (cg_context, rect);
--    }
-+  if (ns_view)
-+    cg_context = clip_to_parent_viewports (ns_view, self);
-
-   [self myDrawInsertionPointInRect: aRect
-                              color: aColor
-                           turnedOn: flag];
-
--  CGContextRestoreGState (cg_context);
-+  if (cg_context)
-+    CGContextRestoreGState (cg_context);
- }
- @end
-
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0052-nsview-also-focus-the-GtkNSView-if-a-focussable-subv.patch b/bockbuild/mac-sdk/patches/gtk/0052-nsview-also-focus-the-GtkNSView-if-a-focussable-subv.patch
deleted file mode 100644 (file)
index 479fd04..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-From 6bf17cdaffe648ce53dd39619c3ff9a65d272831 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 5 Jul 2013 11:49:22 +0200
-Subject: [PATCH 52/68] nsview: also focus the GtkNSView if a focussable
- subview was clicked
-
----
- gtk/gtknsview.c |   22 +++++++++++++++-------
- 1 file changed, 15 insertions(+), 7 deletions(-)
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index b37b2fa..3b30d3b 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -713,17 +713,25 @@ gtk_ns_view_native_child_event (GdkWindow *window,
-         {
-         case NSLeftMouseDown:
-           if (! gtk_widget_has_focus (GTK_WIDGET (ns_view)) &&
--
--              /*  other code can set can-focus, so check for both  */
--              gtk_widget_get_can_focus (GTK_WIDGET (ns_view)) &&
--              [ns_view->priv->view acceptsFirstResponder])
-+              gtk_widget_get_can_focus (GTK_WIDGET (ns_view)))
-             {
-+              NSPoint point = [[view superview ] convertPoint: [event locationInWindow]
-+                                                     fromView: nil];
-+              NSView *hit   = [view hitTest: point];
-+
-+              if (hit &&
-+                  (hit == view ||
-+                   [hit ancestorSharedWithView: view] == view) &&
-+                  ([hit acceptsFirstResponder] ||
-+                   [view acceptsFirstResponder]))
-+                {
- #if DEBUG_FOCUS
--              g_printerr ("grabbing focus on %s\n",
--                          class_getName ([ns_view->priv->view class]));
-+                  g_printerr ("grabbing focus on %s\n",
-+                              class_getName ([ns_view->priv->view class]));
- #endif
-
--              gtk_widget_grab_focus (GTK_WIDGET (ns_view));
-+                  gtk_widget_grab_focus (GTK_WIDGET (ns_view));
-+                }
-             }
-           break;
-
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0053-gtk-add-an-overlay-policy-API-to-GtkScrolledWindow.patch b/bockbuild/mac-sdk/patches/gtk/0053-gtk-add-an-overlay-policy-API-to-GtkScrolledWindow.patch
deleted file mode 100644 (file)
index 794a5c4..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-From 3e4fba4264957d704d9c01496eef57e897b7d691 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 3 May 2013 11:55:51 +0200
-Subject: [PATCH 53/68] gtk: add an "overlay policy" API to GtkScrolledWindow
-
-which allows to turn off drawing of the overlay scrollbars,
-while keeping scrolling enabled.
----
- gtk/gtkscrolledwindow.c |   68 ++++++++++++++++++++++++++++++++++++++++++-----
- gtk/gtkscrolledwindow.h |    6 +++++
- 2 files changed, 68 insertions(+), 6 deletions(-)
-
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 9def3aa..a643b7d 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -121,6 +121,9 @@ typedef struct {
-   gdouble                unclamped_hadj_value;
-   gdouble                unclamped_vadj_value;
-
-+  GtkPolicyType  hoverlay_policy;
-+  GtkPolicyType  voverlay_policy;
-+
-   GtkAllocation  viewport_allocation;
-   CALayer       *vbar_layer;
-   CALayer       *hbar_layer;
-@@ -536,6 +539,9 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
-                                 NULL);
-   g_object_ref_sink (priv->opacity);
-
-+  priv->hoverlay_policy = GTK_POLICY_AUTOMATIC;
-+  priv->voverlay_policy = GTK_POLICY_AUTOMATIC;
-+
-   priv->sb_min_height = 20;
-   priv->sb_padding = 2;
-   priv->sb_radius = 3;
-@@ -865,6 +871,42 @@ gtk_scrolled_window_get_policy (GtkScrolledWindow *scrolled_window,
-     *vscrollbar_policy = scrolled_window->vscrollbar_policy;
- }
-
-+void
-+gtk_scrolled_window_set_overlay_policy (GtkScrolledWindow *scrolled_window,
-+                                        GtkPolicyType      hoverlay_policy,
-+                                        GtkPolicyType      voverlay_policy)
-+{
-+  GtkScrolledWindowPrivate *priv;
-+
-+  g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
-+  g_return_if_fail (hoverlay_policy == GTK_POLICY_AUTOMATIC ||
-+                    hoverlay_policy == GTK_POLICY_NEVER);
-+  g_return_if_fail (voverlay_policy == GTK_POLICY_AUTOMATIC ||
-+                    voverlay_policy == GTK_POLICY_NEVER);
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  priv->hoverlay_policy = hoverlay_policy;
-+  priv->voverlay_policy = voverlay_policy;
-+}
-+
-+void
-+gtk_scrolled_window_get_overlay_policy (GtkScrolledWindow *scrolled_window,
-+                                        GtkPolicyType     *hoverlay_policy,
-+                                        GtkPolicyType     *voverlay_policy)
-+{
-+  GtkScrolledWindowPrivate *priv;
-+
-+  g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
-+
-+  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-+
-+  if (hoverlay_policy)
-+    *hoverlay_policy = priv->hoverlay_policy;
-+  if (voverlay_policy)
-+    *voverlay_policy = priv->voverlay_policy;
-+}
-+
- static void
- gtk_scrolled_window_update_real_placement (GtkScrolledWindow *scrolled_window)
- {
-@@ -1309,7 +1351,10 @@ gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window)
-                                         &vbar_rect, &vslider_rect,
-                                         &hbar_rect, &hslider_rect);
-
--  if (priv->sb_visible && scrolled_window->vscrollbar && vbar_rect.width > 0)
-+  if (priv->sb_visible                              &&
-+      scrolled_window->vscrollbar                   &&
-+      priv->voverlay_policy == GTK_POLICY_AUTOMATIC &&
-+      vbar_rect.width > 0)
-     {
-       rect.origin.x = priv->viewport_allocation.x + vbar_rect.x;
-       rect.origin.y = priv->viewport_allocation.y + vbar_rect.y;
-@@ -1326,7 +1371,10 @@ gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window)
-       priv->vbar_layer.opacity = 0.0;
-     }
-
--  if (priv->sb_visible && scrolled_window->hscrollbar && hbar_rect.width > 0)
-+  if (priv->sb_visible                              &&
-+      scrolled_window->hscrollbar                   &&
-+      priv->hoverlay_policy == GTK_POLICY_AUTOMATIC &&
-+      hbar_rect.width > 0)
-     {
-       rect.origin.x = priv->viewport_allocation.x + hbar_rect.x;
-       rect.origin.y = priv->viewport_allocation.y + hbar_rect.y;
-@@ -1334,8 +1382,12 @@ gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window)
-       rect.size.height = hbar_rect.height;
-
-       /* don't overlap in the corner */
--      if (scrolled_window->vscrollbar && vbar_rect.width > 0)
--        rect.size.width -= vbar_rect.width;
-+      if (scrolled_window->vscrollbar                   &&
-+          priv->voverlay_policy == GTK_POLICY_AUTOMATIC &&
-+          vbar_rect.width > 0)
-+        {
-+          rect.size.width -= vbar_rect.width;
-+        }
-
-       rect.origin.y = window_height - rect.origin.y - rect.size.height;
-
-@@ -1347,7 +1399,9 @@ gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window)
-       priv->hbar_layer.opacity = 0.0;
-     }
-
--  if (scrolled_window->vscrollbar && vslider_rect.width > 0)
-+  if (scrolled_window->vscrollbar                   &&
-+      priv->voverlay_policy == GTK_POLICY_AUTOMATIC &&
-+      vslider_rect.width > 0)
-     {
-       rect.origin.x = priv->viewport_allocation.x + vslider_rect.x;
-       rect.origin.y = priv->viewport_allocation.y + vslider_rect.y;
-@@ -1365,7 +1419,9 @@ gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window)
-       priv->vslider_layer.opacity = 0.0;
-     }
-
--  if (scrolled_window->hscrollbar && hslider_rect.width > 0)
-+  if (scrolled_window->hscrollbar                   &&
-+      priv->hoverlay_policy == GTK_POLICY_AUTOMATIC &&
-+      hslider_rect.width > 0)
-     {
-       rect.origin.x = priv->viewport_allocation.x + hslider_rect.x;
-       rect.origin.y = priv->viewport_allocation.y + hslider_rect.y;
-diff --git a/gtk/gtkscrolledwindow.h b/gtk/gtkscrolledwindow.h
-index f75596d..69dcb43 100644
---- a/gtk/gtkscrolledwindow.h
-+++ b/gtk/gtkscrolledwindow.h
-@@ -116,6 +116,12 @@ void           gtk_scrolled_window_set_policy        (GtkScrolledWindow *scrolle
- void           gtk_scrolled_window_get_policy        (GtkScrolledWindow *scrolled_window,
-                                                     GtkPolicyType     *hscrollbar_policy,
-                                                     GtkPolicyType     *vscrollbar_policy);
-+void          gtk_scrolled_window_set_overlay_policy (GtkScrolledWindow *scrolled_window,
-+                                                    GtkPolicyType      hoverlay_policy,
-+                                                    GtkPolicyType      voverlay_policy);
-+void          gtk_scrolled_window_get_overlay_policy (GtkScrolledWindow *scrolled_window,
-+                                                    GtkPolicyType     *hoverlay_policy,
-+                                                    GtkPolicyType     *voverlay_policy);
- void           gtk_scrolled_window_set_placement     (GtkScrolledWindow *scrolled_window,
-                                                     GtkCornerType      window_placement);
- void           gtk_scrolled_window_unset_placement   (GtkScrolledWindow *scrolled_window);
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0054-quartz-add-gdk_screen_-and-gdk_window_get_scale_fact.patch b/bockbuild/mac-sdk/patches/gtk/0054-quartz-add-gdk_screen_-and-gdk_window_get_scale_fact.patch
deleted file mode 100644 (file)
index 2829bb6..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-From 13bba88188cc3880d4eba9a93f9109154308d51a Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 18 Jan 2013 15:47:29 +0100
-Subject: [PATCH 54/68] quartz: add gdk_screen_ and
- gdk_window_get_scale_factor()
-
-which return 1.0 normally and 2.0 on retina displays.
----
- gdk/gdkscreen.h               |    2 ++
- gdk/gdkwindow.c               |   24 ++++++++++++++++++++++++
- gdk/gdkwindow.h               |    1 +
- gdk/gdkwindowimpl.h           |    3 +++
- gdk/quartz/gdkscreen-quartz.c |   33 +++++++++++++++++++++++++++++++++
- gdk/quartz/gdkwindow-quartz.c |   22 ++++++++++++++++++++++
- gdk/x11/gdkscreen-x11.c       |    7 +++++++
- 7 files changed, 92 insertions(+)
-
-diff --git a/gdk/gdkscreen.h b/gdk/gdkscreen.h
-index d3d4fe9..0c1e895 100644
---- a/gdk/gdkscreen.h
-+++ b/gdk/gdkscreen.h
-@@ -109,6 +109,8 @@ gint          gdk_screen_get_monitor_height_mm (GdkScreen *screen,
-                                                 gint       monitor_num);
- gchar *       gdk_screen_get_monitor_plug_name (GdkScreen *screen,
-                                                 gint       monitor_num);
-+gdouble       gdk_screen_get_monitor_scale_factor (GdkScreen *screen,
-+                                                   gint       monitor_num);
-
- void          gdk_screen_broadcast_client_message  (GdkScreen       *screen,
-                                                   GdkEvent        *event);
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index 3040321..29b96e2 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -11475,6 +11475,30 @@ gdk_window_get_height (GdkWindow *window)
-   return height;
- }
-
-+gdouble
-+gdk_window_get_scale_factor (GdkWindow *window)
-+{
-+  GdkWindowObject *private;
-+  GdkWindowImplIface *impl_iface;
-+
-+  g_return_val_if_fail (GDK_IS_WINDOW (window), 1.0);
-+
-+  private = (GdkWindowObject *) window;
-+  if (private->destroyed)
-+    return 1.0;
-+
-+  window = gdk_window_get_toplevel (window);
-+
-+  if (gdk_window_has_impl (private))
-+    {
-+      impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
-+
-+      if (impl_iface->get_scale_factor)
-+        return impl_iface->get_scale_factor (window);
-+    }
-+
-+  return 1.0;
-+}
-
- #define __GDK_WINDOW_C__
- #include "gdkaliasdef.c"
-diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h
-index 572797b..95a3665 100644
---- a/gdk/gdkwindow.h
-+++ b/gdk/gdkwindow.h
-@@ -341,6 +341,7 @@ GdkDisplay*   gdk_window_get_display           (GdkWindow     *window);
- GdkVisual*    gdk_window_get_visual            (GdkWindow     *window);
- int           gdk_window_get_width             (GdkWindow     *window);
- int           gdk_window_get_height            (GdkWindow     *window);
-+gdouble       gdk_window_get_scale_factor      (GdkWindow     *window);
-
- GdkWindow*    gdk_window_at_pointer            (gint          *win_x,
-                                                 gint          *win_y);
-diff --git a/gdk/gdkwindowimpl.h b/gdk/gdkwindowimpl.h
-index 3a5029b..d6a0c89 100644
---- a/gdk/gdkwindowimpl.h
-+++ b/gdk/gdkwindowimpl.h
-@@ -146,6 +146,9 @@ struct _GdkWindowImplIface
-   void         (* input_window_destroy) (GdkWindow       *window);
-   void         (* input_window_crossing)(GdkWindow       *window,
-                                        gboolean         enter);
-+
-+  gdouble      (* get_scale_factor)     (GdkWindow       *window);
-+
-   gboolean     supports_native_bg;
- };
-
-diff --git a/gdk/quartz/gdkscreen-quartz.c b/gdk/quartz/gdkscreen-quartz.c
-index 4bb573b..e6f0c44 100644
---- a/gdk/quartz/gdkscreen-quartz.c
-+++ b/gdk/quartz/gdkscreen-quartz.c
-@@ -494,6 +494,39 @@ gdk_screen_get_monitor_workarea (GdkScreen    *screen,
-   GDK_QUARTZ_RELEASE_POOL;
- }
-
-+/* Protocol to build cleanly for OSX < 10.7 */
-+@protocol ScaleFactor
-+- (CGFloat) backingScaleFactor;
-+@end
-+
-+gdouble
-+gdk_screen_get_monitor_scale_factor (GdkScreen *screen,
-+                                     gint       monitor_num)
-+{
-+  GdkScreenQuartz *quartz_screen;
-+  NSArray *array;
-+  NSScreen *nsscreen;
-+  gdouble scale_factor = 1.0;
-+
-+  g_return_val_if_fail (GDK_IS_SCREEN (screen), 1.0);
-+  g_return_val_if_fail (monitor_num < gdk_screen_get_n_monitors (screen), 1.0);
-+  g_return_val_if_fail (monitor_num >= 0, 1.0);
-+
-+  quartz_screen = GDK_SCREEN_QUARTZ (screen);
-+
-+  GDK_QUARTZ_ALLOC_POOL;
-+
-+  array = [NSScreen screens];
-+  nsscreen = [array objectAtIndex:monitor_num];
-+
-+  if (gdk_quartz_osx_version() >= GDK_OSX_LION)
-+    scale_factor = [(id <ScaleFactor>) nsscreen backingScaleFactor];
-+
-+  GDK_QUARTZ_RELEASE_POOL;
-+
-+  return scale_factor;
-+}
-+
- gchar *
- gdk_screen_make_display_name (GdkScreen *screen)
- {
-diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
-index 500776d..5b9ceef 100644
---- a/gdk/quartz/gdkwindow-quartz.c
-+++ b/gdk/quartz/gdkwindow-quartz.c
-@@ -3201,6 +3201,27 @@ _gdk_windowing_window_get_input_shape (GdkWindow *window)
-   return NULL;
- }
-
-+/* Protocol to build cleanly for OSX < 10.7 */
-+@protocol ScaleFactor
-+- (CGFloat) backingScaleFactor;
-+@end
-+
-+static gdouble
-+gdk_window_quartz_get_scale_factor (GdkWindow *window)
-+{
-+  GdkWindowImplQuartz *impl;
-+
-+  if (GDK_WINDOW_DESTROYED (window))
-+    return 1.0;
-+
-+  impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
-+
-+  if (gdk_quartz_osx_version() >= GDK_OSX_LION)
-+    return [(id <ScaleFactor>) impl->toplevel backingScaleFactor];
-+
-+  return 1.0;
-+}
-+
- static void
- gdk_window_impl_iface_init (GdkWindowImplIface *iface)
- {
-@@ -3229,4 +3250,5 @@ gdk_window_impl_iface_init (GdkWindowImplIface *iface)
-   iface->destroy = _gdk_quartz_window_destroy;
-   iface->input_window_destroy = _gdk_input_window_destroy;
-   iface->input_window_crossing = _gdk_input_window_crossing;
-+  iface->get_scale_factor = gdk_window_quartz_get_scale_factor;
- }
-diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c
-index 66a0d96..d09d0b6 100644
---- a/gdk/x11/gdkscreen-x11.c
-+++ b/gdk/x11/gdkscreen-x11.c
-@@ -454,6 +454,13 @@ gdk_screen_get_monitor_plug_name (GdkScreen *screen,
-   return g_strdup (screen_x11->monitors[monitor_num].output_name);
- }
-
-+gdouble
-+gdk_screen_get_monitor_scale_factor (GdkScreen *screen,
-+                                     gint       monitor_num)
-+{
-+  return 1.0;
-+}
-+
- /**
-  * gdk_x11_screen_get_monitor_output:
-  * @screen: a #GdkScreen
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0055-gtk-add-gtk_widget_get_scale_factor.patch b/bockbuild/mac-sdk/patches/gtk/0055-gtk-add-gtk_widget_get_scale_factor.patch
deleted file mode 100644 (file)
index 6ddd163..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-From 82dbf415e822d1bb687db09b9dfa0d1e43528e99 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 15 Feb 2013 15:35:13 +0100
-Subject: [PATCH 55/68] gtk: add gtk_widget_get_scale_factor()
-
----
- gtk/gtkwidget.c |   20 ++++++++++++++++++++
- gtk/gtkwidget.h |    1 +
- 2 files changed, 21 insertions(+)
-
-diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
-index 8e38ee1..c812bb9 100644
---- a/gtk/gtkwidget.c
-+++ b/gtk/gtkwidget.c
-@@ -7713,6 +7713,26 @@ gtk_widget_has_screen (GtkWidget *widget)
-   return (gtk_widget_get_screen_unchecked (widget) != NULL);
- }
-
-+gdouble
-+gtk_widget_get_scale_factor (GtkWidget *widget)
-+{
-+  GtkWidget *toplevel;
-+
-+  g_return_val_if_fail (GTK_IS_WIDGET (widget), 1.0);
-+
-+  toplevel = gtk_widget_get_toplevel (widget);
-+  if (toplevel && toplevel != widget)
-+    return gtk_widget_get_scale_factor (toplevel);
-+
-+  if (widget->window)
-+    return gdk_window_get_scale_factor (widget->window);
-+
-+  /* else fall back to something that is more likely to be right than
-+   * just returning 1.0:
-+   */
-+  return gdk_screen_get_monitor_scale_factor (gtk_widget_get_screen (widget), 0);
-+}
-+
- /**
-  * gtk_widget_get_display:
-  * @widget: a #GtkWidget
-diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
-index 1fcf21a..cee16cd 100644
---- a/gtk/gtkwidget.h
-+++ b/gtk/gtkwidget.h
-@@ -1055,6 +1055,7 @@ GdkVisual*   gtk_widget_get_visual       (GtkWidget      *widget);
-
- GdkScreen *   gtk_widget_get_screen      (GtkWidget *widget);
- gboolean      gtk_widget_has_screen      (GtkWidget *widget);
-+gdouble       gtk_widget_get_scale_factor (GtkWidget *widget);
- GdkDisplay *  gtk_widget_get_display     (GtkWidget *widget);
- GdkWindow *   gtk_widget_get_root_window (GtkWidget *widget);
- GtkSettings*  gtk_widget_get_settings    (GtkWidget *widget);
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0056-iconfactory-Add-_scaled-variants.patch b/bockbuild/mac-sdk/patches/gtk/0056-iconfactory-Add-_scaled-variants.patch
deleted file mode 100644 (file)
index 4a5fa54..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-From e9dfba023f756801f8931a08644c23809cb38412 Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlosg@gnome.org>
-Date: Tue, 12 Feb 2013 13:59:09 +0100
-Subject: [PATCH 56/68] iconfactory: Add _scaled() variants
-
-These functions can be used to deal with stock icons
-at sizes that are suitable for gdk_window_get_scale_factor()
----
- gtk/gtkiconfactory.c |  173 +++++++++++++++++++++++++++++++++++++++-----------
- gtk/gtkiconfactory.h |   14 +++-
- 2 files changed, 150 insertions(+), 37 deletions(-)
-
-diff --git a/gtk/gtkiconfactory.c b/gtk/gtkiconfactory.c
-index c4b6c9c..0dc31e6 100644
---- a/gtk/gtkiconfactory.c
-+++ b/gtk/gtkiconfactory.c
-@@ -801,6 +801,7 @@ icon_sizes_init_for_settings (GtkSettings *settings)
- static gboolean
- icon_size_lookup_intern (GtkSettings *settings,
-                        GtkIconSize  size,
-+                         gdouble      scale,
-                        gint        *widthp,
-                        gint        *heightp)
- {
-@@ -840,10 +841,16 @@ icon_size_lookup_intern (GtkSettings *settings,
-     }
-
-   if (widthp)
--    *widthp = width_for_settings >= 0 ? width_for_settings : icon_sizes[size].width;
-+    {
-+      *widthp = width_for_settings >= 0 ? width_for_settings : icon_sizes[size].width;
-+      (*widthp) *= scale;
-+    }
-
-   if (heightp)
--    *heightp = height_for_settings >= 0 ? height_for_settings : icon_sizes[size].height;
-+    {
-+      *heightp = height_for_settings >= 0 ? height_for_settings : icon_sizes[size].height;
-+      (*heightp) *= scale;
-+    }
-
-   return TRUE;
- }
-@@ -879,7 +886,7 @@ gtk_icon_size_lookup_for_settings (GtkSettings *settings,
- {
-   g_return_val_if_fail (GTK_IS_SETTINGS (settings), FALSE);
-
--  return icon_size_lookup_intern (settings, size, width, height);
-+  return icon_size_lookup_intern (settings, size, 1, width, height);
- }
-
- /**
-@@ -914,6 +921,18 @@ gtk_icon_size_lookup (GtkIconSize  size,
-                                           size, widthp, heightp);
- }
-
-+gboolean
-+gtk_icon_size_lookup_scaled (GtkSettings *settings,
-+                             GtkIconSize  size,
-+                             gdouble      scale,
-+                             gint        *width,
-+                             gint        *height)
-+{
-+  g_return_val_if_fail (GTK_IS_SETTINGS (settings), FALSE);
-+
-+  return icon_size_lookup_intern (settings, size, scale, width, height);
-+}
-+
- static GtkIconSize
- icon_size_register_intern (const gchar *name,
-                          gint         width,
-@@ -1000,7 +1019,7 @@ gtk_icon_size_register_alias (const gchar *alias,
-
-   init_icon_sizes ();
-
--  if (!icon_size_lookup_intern (NULL, target, NULL, NULL))
-+  if (!icon_size_lookup_intern (NULL, target, 1, NULL, NULL))
-     g_warning ("gtk_icon_size_register_alias: Icon size %u does not exist", target);
-
-   ia = g_hash_table_lookup (icon_aliases, alias);
-@@ -1288,8 +1307,8 @@ sizes_equivalent (GtkIconSize lhs,
-
-   gint r_w, r_h, l_w, l_h;
-
--  icon_size_lookup_intern (NULL, rhs, &r_w, &r_h);
--  icon_size_lookup_intern (NULL, lhs, &l_w, &l_h);
-+  icon_size_lookup_intern (NULL, rhs, 1, &r_w, &r_h);
-+  icon_size_lookup_intern (NULL, lhs, 1, &l_w, &l_h);
-
-   return r_w == l_w && r_h == l_h;
- #endif
-@@ -1372,7 +1391,8 @@ render_icon_name_pixbuf (GtkIconSource    *icon_source,
-                        GtkStateType      state,
-                        GtkIconSize       size,
-                        GtkWidget        *widget,
--                       const char       *detail)
-+                       const char       *detail,
-+                         gboolean          scale_requested)
- {
-   GdkPixbuf *pixbuf;
-   GdkPixbuf *tmp_pixbuf;
-@@ -1383,6 +1403,7 @@ render_icon_name_pixbuf (GtkIconSource    *icon_source,
-   gint width, height, pixel_size;
-   gint *sizes, *s, dist;
-   GError *error = NULL;
-+  gdouble scale = 1;
-
-   if (widget && gtk_widget_has_screen (widget))
-     screen = gtk_widget_get_screen (widget);
-@@ -1398,6 +1419,14 @@ render_icon_name_pixbuf (GtkIconSource    *icon_source,
-   icon_theme = gtk_icon_theme_get_for_screen (screen);
-   settings = gtk_settings_get_for_screen (screen);
-
-+  if (scale_requested && widget)
-+    {
-+      if (!widget->window)
-+        gtk_widget_realize (widget);
-+
-+      scale = gdk_window_get_scale_factor (widget->window);
-+    }
-+
-   if (!gtk_icon_size_lookup_for_settings (settings, size, &width, &height))
-     {
-       if (size == (GtkIconSize)-1)
-@@ -1440,7 +1469,7 @@ render_icon_name_pixbuf (GtkIconSource    *icon_source,
-       }
-     }
-
--  pixel_size = MIN (width, height);
-+  pixel_size = MIN (width, height) * scale;
-
-   if (icon_source->direction != GTK_TEXT_DIR_NONE)
-     {
-@@ -1504,7 +1533,8 @@ find_and_render_icon_source (GtkIconSet       *icon_set,
-                            GtkStateType      state,
-                            GtkIconSize       size,
-                            GtkWidget         *widget,
--                           const char        *detail)
-+                           const char        *detail,
-+                             gboolean           scale_requested)
- {
-   GSList *failed = NULL;
-   GdkPixbuf *pixbuf = NULL;
-@@ -1546,7 +1576,7 @@ find_and_render_icon_source (GtkIconSet       *icon_set,
-       case GTK_ICON_SOURCE_STATIC_ICON_NAME:
-         pixbuf = render_icon_name_pixbuf (source, style,
-                                           direction, state, size,
--                                          widget, detail);
-+                                          widget, detail, scale_requested);
-         if (!pixbuf)
-           failed = g_slist_prepend (failed, source);
-         break;
-@@ -1598,6 +1628,84 @@ render_fallback_image (GtkStyle          *style,
-                                 detail);
- }
-
-+static gdouble
-+_get_real_scale (GtkWidget   *widget,
-+                 GtkStyle    *style,
-+                 GtkIconSize  size,
-+                 GdkPixbuf   *icon)
-+{
-+  GtkSettings *settings;
-+  GdkScreen *screen;
-+  gint icon_width;
-+
-+  if (widget && gtk_widget_has_screen (widget))
-+    screen = gtk_widget_get_screen (widget);
-+  else if (style && style->colormap)
-+    screen = gdk_colormap_get_screen (style->colormap);
-+  else
-+    {
-+      screen = gdk_screen_get_default ();
-+      GTK_NOTE (MULTIHEAD,
-+                g_warning ("Using the default screen for gtk_icon_set_render_icon()"));
-+    }
-+
-+  settings = gtk_settings_get_for_screen (screen);
-+  gtk_icon_size_lookup_for_settings (settings, size, &icon_width, NULL);
-+
-+  return (gdouble) gdk_pixbuf_get_width (icon) / icon_width;
-+}
-+
-+GdkPixbuf*
-+gtk_icon_set_render_icon_internal (GtkIconSet        *icon_set,
-+                                   GtkStyle          *style,
-+                                   GtkTextDirection   direction,
-+                                   GtkStateType       state,
-+                                   GtkIconSize        size,
-+                                   GtkWidget         *widget,
-+                                   const char        *detail,
-+                                   gboolean           scale_requested,
-+                                   gdouble           *real_scale)
-+{
-+  GdkPixbuf *icon;
-+
-+  if (real_scale)
-+    *real_scale = 1;
-+
-+  if (icon_set->sources == NULL)
-+    return render_fallback_image (style, direction, state, size, widget, detail);
-+
-+  if (detail == NULL)
-+    {
-+      icon = find_in_cache (icon_set, style, direction,
-+                        state, size);
-+
-+      if (icon)
-+      {
-+        g_object_ref (icon);
-+
-+          if (scale_requested && real_scale)
-+            *real_scale = _get_real_scale (widget, style, size, icon);
-+
-+        return icon;
-+      }
-+    }
-+
-+
-+  icon = find_and_render_icon_source (icon_set, style, direction, state, size,
-+                                    widget, detail, scale_requested);
-+
-+  if (icon == NULL)
-+    icon = render_fallback_image (style, direction, state, size, widget, detail);
-+
-+  if (detail == NULL)
-+    add_to_cache (icon_set, style, direction, state, size, icon);
-+
-+  if (scale_requested && real_scale)
-+    *real_scale = _get_real_scale (widget, style, size, icon);
-+
-+  return icon;
-+}
-+
- /**
-  * gtk_icon_set_render_icon:
-  * @icon_set: a #GtkIconSet
-@@ -1631,37 +1739,30 @@ gtk_icon_set_render_icon (GtkIconSet        *icon_set,
-                           GtkWidget         *widget,
-                           const char        *detail)
- {
--  GdkPixbuf *icon;
--
-   g_return_val_if_fail (icon_set != NULL, NULL);
-   g_return_val_if_fail (style == NULL || GTK_IS_STYLE (style), NULL);
-
--  if (icon_set->sources == NULL)
--    return render_fallback_image (style, direction, state, size, widget, detail);
--
--  if (detail == NULL)
--    {
--      icon = find_in_cache (icon_set, style, direction,
--                        state, size);
--
--      if (icon)
--      {
--        g_object_ref (icon);
--        return icon;
--      }
--    }
--
--
--  icon = find_and_render_icon_source (icon_set, style, direction, state, size,
--                                    widget, detail);
--
--  if (icon == NULL)
--    icon = render_fallback_image (style, direction, state, size, widget, detail);
-+  return gtk_icon_set_render_icon_internal (icon_set, style, direction,
-+                                            state, size, widget, detail,
-+                                            FALSE, NULL);
-+}
-
--  if (detail == NULL)
--    add_to_cache (icon_set, style, direction, state, size, icon);
-+GdkPixbuf*
-+gtk_icon_set_render_icon_scaled (GtkIconSet        *icon_set,
-+                                 GtkStyle          *style,
-+                                 GtkTextDirection   direction,
-+                                 GtkStateType       state,
-+                                 GtkIconSize        size,
-+                                 GtkWidget         *widget,
-+                                 const char        *detail,
-+                                 gdouble           *real_scale)
-+{
-+  g_return_val_if_fail (icon_set != NULL, NULL);
-+  g_return_val_if_fail (style == NULL || GTK_IS_STYLE (style), NULL);
-
--  return icon;
-+  return gtk_icon_set_render_icon_internal (icon_set, style, direction,
-+                                            state, size, widget, detail,
-+                                            TRUE, real_scale);
- }
-
- /* Order sources by their "wildness", so that "wilder" sources are
-diff --git a/gtk/gtkiconfactory.h b/gtk/gtkiconfactory.h
-index ea97123..e38f8e6 100644
---- a/gtk/gtkiconfactory.h
-+++ b/gtk/gtkiconfactory.h
-@@ -105,6 +105,11 @@ gboolean gtk_icon_size_lookup_for_settings (GtkSettings *settings,
-                                           GtkIconSize  size,
-                                           gint        *width,
-                                           gint        *height);
-+gboolean gtk_icon_size_lookup_scaled       (GtkSettings *settings,
-+                                            GtkIconSize  size,
-+                                            gdouble      scale,
-+                                            gint        *width,
-+                                            gint        *height);
-
- GtkIconSize           gtk_icon_size_register       (const gchar *name,
-                                                     gint         width,
-@@ -134,7 +139,14 @@ GdkPixbuf*  gtk_icon_set_render_icon     (GtkIconSet      *icon_set,
-                                           GtkIconSize      size,
-                                           GtkWidget       *widget,
-                                           const char      *detail);
--
-+GdkPixbuf* gtk_icon_set_render_icon_scaled (GtkIconSet        *icon_set,
-+                                            GtkStyle          *style,
-+                                            GtkTextDirection   direction,
-+                                            GtkStateType       state,
-+                                            GtkIconSize        size,
-+                                            GtkWidget         *widget,
-+                                            const char        *detail,
-+                                            gdouble           *real_scale);
-
- void           gtk_icon_set_add_source   (GtkIconSet          *icon_set,
-                                           const GtkIconSource *source);
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0057-widget-Add-_scaled-variants-for-icon-rendering.patch b/bockbuild/mac-sdk/patches/gtk/0057-widget-Add-_scaled-variants-for-icon-rendering.patch
deleted file mode 100644 (file)
index e755cba..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-From de10316fb1045f610072ef7c2addbe969e0fe617 Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlosg@gnome.org>
-Date: Tue, 12 Feb 2013 14:01:15 +0100
-Subject: [PATCH 57/68] widget: Add _scaled() variants for icon rendering
-
-Likewise to the iconfactory changes, this API allows to
-deal with stock icons at sizes that are suitable for
-gdk_window_get_scale_factor()
----
- gtk/gtkwidget.c |   27 +++++++++++++++++++++++++++
- gtk/gtkwidget.h |    5 +++++
- 2 files changed, 32 insertions(+)
-
-diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
-index c812bb9..f093c39 100644
---- a/gtk/gtkwidget.c
-+++ b/gtk/gtkwidget.c
-@@ -7502,6 +7502,33 @@ gtk_widget_render_icon (GtkWidget      *widget,
-   return retval;
- }
-
-+GdkPixbuf*
-+gtk_widget_render_icon_scaled (GtkWidget      *widget,
-+                             const gchar    *stock_id,
-+                             GtkIconSize     size,
-+                             const gchar    *detail,
-+                             gdouble        *real_scale)
-+{
-+  GtkIconSet *icon_set;
-+  GdkPixbuf *retval;
-+
-+  g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
-+  g_return_val_if_fail (stock_id != NULL, NULL);
-+  g_return_val_if_fail (size > GTK_ICON_SIZE_INVALID || size == -1, NULL);
-+
-+  gtk_widget_ensure_style (widget);
-+
-+  icon_set = gtk_style_lookup_icon_set (widget->style, stock_id);
-+
-+  if (icon_set == NULL)
-+    return NULL;
-+
-+  return gtk_icon_set_render_icon_scaled (icon_set, widget->style,
-+                                          gtk_widget_get_direction (widget),
-+                                          gtk_widget_get_state (widget),
-+                                          size, widget, detail, real_scale);
-+}
-+
- /**
-  * gtk_widget_set_parent_window:
-  * @widget: a #GtkWidget.
-diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
-index cee16cd..f7ebf9b 100644
---- a/gtk/gtkwidget.h
-+++ b/gtk/gtkwidget.h
-@@ -1194,6 +1194,11 @@ GdkPixbuf    *gtk_widget_render_icon          (GtkWidget   *widget,
-                                                const gchar *stock_id,
-                                                GtkIconSize  size,
-                                                const gchar *detail);
-+GdkPixbuf    *gtk_widget_render_icon_scaled   (GtkWidget      *widget,
-+                                               const gchar    *stock_id,
-+                                               GtkIconSize     size,
-+                                               const gchar    *detail,
-+                                               gdouble        *real_scale);
-
- /* handle composite names for GTK_COMPOSITE_CHILD widgets,
-  * the returned name is newly allocated.
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0058-icontheme-Add-support-for-high-resolution-icons.patch b/bockbuild/mac-sdk/patches/gtk/0058-icontheme-Add-support-for-high-resolution-icons.patch
deleted file mode 100644 (file)
index 537ae8d..0000000
+++ /dev/null
@@ -1,399 +0,0 @@
-From 75299b2806b1bed9e14081f2e108afb39e31896e Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlos@lanedo.com>
-Date: Fri, 10 May 2013 18:06:00 +0200
-Subject: [PATCH 58/68] icontheme: Add support for high resolution icons
-
-An optional OutputScale integer key has been added to index.theme
-subdirs description, so icon themes may provide icons that are
-more suitable to render at a (typically 2x) integer upscaled
-resolution. This way it is possible to make eg. a 16x16@2x icon has a
-real size of 32x32, but contains a similar level of detail to the
-16x16 icon so things don't look any more cluttered on high-dpi
-screens.
-
-The pixbuf lookup has changed so it prefers a minimal scale change
-that yields the minimal real size difference, so if looking up for
-a 16x16 icon at 2x, it would first prefer 16x16@2x, then 32x32, and
-then any other icon that's closest to match
-
-There is now *_for_scale() variants for all GtkIconTheme ways
-to directly or indirectly fetch a GdkPixbuf.
----
- gtk/gtkicontheme.c |  152 ++++++++++++++++++++++++++++++++++++++++------------
- gtk/gtkicontheme.h |   17 +++++-
- 2 files changed, 135 insertions(+), 34 deletions(-)
-
-diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
-index bf81546..500f0ab 100644
---- a/gtk/gtkicontheme.c
-+++ b/gtk/gtkicontheme.c
-@@ -168,6 +168,7 @@ typedef struct
-   int min_size;
-   int max_size;
-   int threshold;
-+  int scale;
-
-   char *dir;
-   char *subdir;
-@@ -206,6 +207,7 @@ static void         theme_destroy     (IconTheme        *theme);
- static GtkIconInfo *theme_lookup_icon (IconTheme        *theme,
-                                      const char       *icon_name,
-                                      int               size,
-+                                       gdouble           scale,
-                                      gboolean          allow_svg,
-                                      gboolean          use_default_icons);
- static void         theme_list_icons  (IconTheme        *theme,
-@@ -1161,11 +1163,11 @@ _gtk_icon_theme_ensure_builtin_cache (void)
-   IconThemeDir *dir;
-   static IconThemeDir dirs[5] =
-     {
--      { ICON_THEME_DIR_THRESHOLD, 0, 16, 16, 16, 2, NULL, "16", -1, NULL, NULL, NULL },
--      { ICON_THEME_DIR_THRESHOLD, 0, 20, 20, 20, 2, NULL, "20", -1,  NULL, NULL, NULL },
--      { ICON_THEME_DIR_THRESHOLD, 0, 24, 24, 24, 2, NULL, "24", -1, NULL, NULL, NULL },
--      { ICON_THEME_DIR_THRESHOLD, 0, 32, 32, 32, 2, NULL, "32", -1, NULL, NULL, NULL },
--      { ICON_THEME_DIR_THRESHOLD, 0, 48, 48, 48, 2, NULL, "48", -1, NULL, NULL, NULL }
-+      { ICON_THEME_DIR_THRESHOLD, 0, 16, 16, 16, 2, 1, NULL, "16", -1, NULL, NULL, NULL },
-+      { ICON_THEME_DIR_THRESHOLD, 0, 20, 20, 20, 2, 1, NULL, "20", -1,  NULL, NULL, NULL },
-+      { ICON_THEME_DIR_THRESHOLD, 0, 24, 24, 24, 2, 1, NULL, "24", -1, NULL, NULL, NULL },
-+      { ICON_THEME_DIR_THRESHOLD, 0, 32, 32, 32, 2, 1, NULL, "32", -1, NULL, NULL, NULL },
-+      { ICON_THEME_DIR_THRESHOLD, 0, 48, 48, 48, 2, 1, NULL, "48", -1, NULL, NULL, NULL }
-     };
-   gint i;
-
-@@ -1242,6 +1244,7 @@ static GtkIconInfo *
- choose_icon (GtkIconTheme       *icon_theme,
-            const gchar        *icon_names[],
-            gint                size,
-+             gdouble             scale,
-            GtkIconLookupFlags  flags)
- {
-   GtkIconThemePrivate *priv;
-@@ -1271,7 +1274,7 @@ choose_icon (GtkIconTheme       *icon_theme,
-
-       for (i = 0; icon_names[i]; i++)
-         {
--          icon_info = theme_lookup_icon (theme, icon_names[i], size, allow_svg, use_builtin);
-+          icon_info = theme_lookup_icon (theme, icon_names[i], size, scale, allow_svg, use_builtin);
-           if (icon_info)
-             goto out;
-         }
-@@ -1400,12 +1403,32 @@ gtk_icon_theme_lookup_icon (GtkIconTheme       *icon_theme,
-                           gint                size,
-                           GtkIconLookupFlags  flags)
- {
-+  g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
-+  g_return_val_if_fail (icon_name != NULL, NULL);
-+  g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
-+                      (flags & GTK_ICON_LOOKUP_FORCE_SVG) == 0, NULL);
-+
-+  GTK_NOTE (ICONTHEME,
-+          g_print ("gtk_icon_theme_lookup_icon %s\n", icon_name));
-+
-+  return gtk_icon_theme_lookup_icon_for_scale (icon_theme, icon_name,
-+                                               size, 1, flags);
-+}
-+
-+GtkIconInfo *
-+gtk_icon_theme_lookup_icon_for_scale (GtkIconTheme       *icon_theme,
-+                                      const gchar        *icon_name,
-+                                      gint                size,
-+                                      gdouble             scale,
-+                                      GtkIconLookupFlags  flags)
-+{
-   GtkIconInfo *info;
-
-   g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
-   g_return_val_if_fail (icon_name != NULL, NULL);
-   g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
-                       (flags & GTK_ICON_LOOKUP_FORCE_SVG) == 0, NULL);
-+  g_return_val_if_fail (scale >= 1, NULL);
-
-   GTK_NOTE (ICONTHEME,
-           g_print ("gtk_icon_theme_lookup_icon %s\n", icon_name));
-@@ -1431,7 +1454,7 @@ gtk_icon_theme_lookup_icon (GtkIconTheme       *icon_theme,
-         }
-       names[dashes + 1] = NULL;
-
--      info = choose_icon (icon_theme, (const gchar **) names, size, flags);
-+      info = choose_icon (icon_theme, (const gchar **) names, size, scale, flags);
-
-       g_strfreev (names);
-     }
-@@ -1442,7 +1465,7 @@ gtk_icon_theme_lookup_icon (GtkIconTheme       *icon_theme,
-       names[0] = icon_name;
-       names[1] = NULL;
-
--      info = choose_icon (icon_theme, names, size, flags);
-+      info = choose_icon (icon_theme, names, size, scale, flags);
-     }
-
-   return info;
-@@ -1483,9 +1506,26 @@ gtk_icon_theme_choose_icon (GtkIconTheme       *icon_theme,
-   g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
-                       (flags & GTK_ICON_LOOKUP_FORCE_SVG) == 0, NULL);
-
--  return choose_icon (icon_theme, icon_names, size, flags);
-+  return choose_icon (icon_theme, icon_names, size, 1, flags);
-+}
-+
-+GtkIconInfo *
-+gtk_icon_theme_choose_icon_for_scale (GtkIconTheme       *icon_theme,
-+                                      const gchar        *icon_names[],
-+                                      gint                size,
-+                                      gdouble             scale,
-+                                      GtkIconLookupFlags  flags)
-+{
-+  g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
-+  g_return_val_if_fail (icon_names != NULL, NULL);
-+  g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
-+                      (flags & GTK_ICON_LOOKUP_FORCE_SVG) == 0, NULL);
-+  g_return_val_if_fail (scale >= 1, NULL);
-+
-+  return choose_icon (icon_theme, icon_names, size, scale, flags);
- }
-
-+
- /* Error quark */
- GQuark
- gtk_icon_theme_error_quark (void)
-@@ -1529,6 +1569,24 @@ gtk_icon_theme_load_icon (GtkIconTheme         *icon_theme,
-                         GtkIconLookupFlags    flags,
-                         GError              **error)
- {
-+  g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
-+  g_return_val_if_fail (icon_name != NULL, NULL);
-+  g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
-+                      (flags & GTK_ICON_LOOKUP_FORCE_SVG) == 0, NULL);
-+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-+
-+  return gtk_icon_theme_load_icon_for_scale (icon_theme, icon_name,
-+                                             size, 1, flags, error);
-+}
-+
-+GdkPixbuf *
-+gtk_icon_theme_load_icon_for_scale (GtkIconTheme        *icon_theme,
-+                                    const gchar         *icon_name,
-+                                    gint                 size,
-+                                    gdouble              scale,
-+                                    GtkIconLookupFlags   flags,
-+                                    GError             **error)
-+{
-   GtkIconInfo *icon_info;
-   GdkPixbuf *pixbuf = NULL;
-
-@@ -1537,9 +1595,10 @@ gtk_icon_theme_load_icon (GtkIconTheme         *icon_theme,
-   g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
-                       (flags & GTK_ICON_LOOKUP_FORCE_SVG) == 0, NULL);
-   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
--
--  icon_info = gtk_icon_theme_lookup_icon (icon_theme, icon_name, size,
--                                        flags | GTK_ICON_LOOKUP_USE_BUILTIN);
-+  g_return_val_if_fail (scale >= 1, NULL);
-+
-+  icon_info = gtk_icon_theme_lookup_icon_for_scale (icon_theme, icon_name, size, scale,
-+                                                    flags | GTK_ICON_LOOKUP_USE_BUILTIN);
-   if (!icon_info)
-     {
-       g_set_error (error, GTK_ICON_THEME_ERROR,  GTK_ICON_THEME_NOT_FOUND,
-@@ -1976,31 +2035,42 @@ theme_dir_destroy (IconThemeDir *dir)
- }
-
- static int
--theme_dir_size_difference (IconThemeDir *dir, int size, gboolean *smaller)
-+theme_dir_size_difference (IconThemeDir *dir,
-+                           int           size,
-+                           gdouble       scale,
-+                           gboolean     *smaller,
-+                           gint         *scale_diff)
- {
-+  int scaled_size, scaled_dir_size;
-   int min, max;
-+
-+  scaled_size = size * scale;
-+  scaled_dir_size = dir->size * dir->scale;
-+  *scale_diff = abs (scale - dir->scale);
-+
-   switch (dir->type)
-     {
-     case ICON_THEME_DIR_FIXED:
--      *smaller = size < dir->size;
--      return abs (size - dir->size);
-+      *smaller = scaled_size < scaled_dir_size;
-+      return abs (scaled_size - scaled_dir_size);
-       break;
-     case ICON_THEME_DIR_SCALABLE:
--      *smaller = size < dir->min_size;
--      if (size < dir->min_size)
--      return dir->min_size - size;
--      if (size > dir->max_size)
--      return size - dir->max_size;
-+      *scale_diff = 0;
-+      *smaller = scaled_size < (dir->min_size * dir->scale);
-+      if (scaled_size < (dir->min_size * dir->scale))
-+      return (dir->min_size * dir->scale) - scaled_size;
-+      if (size > (dir->max_size * dir->scale))
-+      return scaled_size - (dir->max_size * dir->scale);
-       return 0;
-       break;
-     case ICON_THEME_DIR_THRESHOLD:
--      min = dir->size - dir->threshold;
--      max = dir->size + dir->threshold;
--      *smaller = size < min;
--      if (size < min)
--      return min - size;
--      if (size > max)
--      return size - max;
-+      min = (dir->size - dir->threshold) * dir->scale;
-+      max = (dir->size + dir->threshold) * dir->scale;
-+      *smaller = scaled_size < min;
-+      if (scaled_size < min)
-+      return min - scaled_size;
-+      if (scaled_size > max)
-+      return scaled_size - max;
-       return 0;
-       break;
-     case ICON_THEME_DIR_UNTHEMED:
-@@ -2091,6 +2161,7 @@ static GtkIconInfo *
- theme_lookup_icon (IconTheme          *theme,
-                  const char         *icon_name,
-                  int                 size,
-+                   gdouble             scale,
-                  gboolean            allow_svg,
-                  gboolean            use_builtin)
- {
-@@ -2098,11 +2169,13 @@ theme_lookup_icon (IconTheme          *theme,
-   IconThemeDir *dir, *min_dir;
-   char *file;
-   int min_difference, difference;
-+  int min_scale_diff, scale_diff;
-   BuiltinIcon *closest_builtin = NULL;
-   gboolean smaller, has_larger, match;
-   IconSuffix suffix;
-
-   min_difference = G_MAXINT;
-+  min_scale_diff = G_MAXINT;
-   min_dir = NULL;
-   has_larger = FALSE;
-   match = FALSE;
-@@ -2135,9 +2208,10 @@ theme_lookup_icon (IconTheme          *theme,
-       suffix = theme_dir_get_icon_suffix (dir, icon_name, NULL);
-       if (best_suffix (suffix, allow_svg) != ICON_SUFFIX_NONE)
-       {
--        difference = theme_dir_size_difference (dir, size, &smaller);
-+        difference = theme_dir_size_difference (dir, size, scale,
-+                                                  &smaller, &scale_diff);
-
--        if (difference == 0)
-+        if (difference == 0 && scale_diff == 0)
-           {
-               if (dir->type == ICON_THEME_DIR_SCALABLE)
-                 {
-@@ -2156,13 +2230,15 @@ theme_lookup_icon (IconTheme          *theme,
-                    * going and look for a closer match
-                    */
-                   difference = abs (size - dir->size);
--                  if (!match || difference < min_difference)
-+                  if (!match ||
-+                      (scale_diff <= min_scale_diff && difference < min_difference))
-                     {
-                       match = TRUE;
-                       min_difference = difference;
-+                      min_scale_diff = scale_diff;
-                     min_dir = dir;
-                     }
--                  if (difference == 0)
-+                  if (difference == 0 && scale_diff == 0)
-                     break;
-                 }
-           }
-@@ -2171,18 +2247,20 @@ theme_lookup_icon (IconTheme          *theme,
-             {
-             if (!has_larger)
-               {
--                if (difference < min_difference || smaller)
-+                if ((scale_diff <= min_scale_diff && difference < min_difference) || (scale_diff == 0 && smaller))
-                   {
-                     min_difference = difference;
-+                      min_scale_diff = scale_diff;
-                     min_dir = dir;
-                     has_larger = smaller;
-                   }
-               }
-             else
-               {
--                if (difference < min_difference && smaller)
-+                if ((scale_diff <= min_scale_diff && difference < min_difference) && (scale_diff == 0 && smaller))
-                   {
-                     min_difference = difference;
-+                      min_scale_diff = scale_diff;
-                     min_dir = dir;
-                   }
-               }
-@@ -2484,6 +2562,7 @@ theme_subdir_load (GtkIconTheme *icon_theme,
-   char *full_dir;
-   GError *error = NULL;
-   IconThemeDirMtime *dir_mtime;
-+  int scale;
-
-   size = g_key_file_get_integer (theme_file, subdir, "Size", &error);
-   if (error)
-@@ -2543,6 +2622,11 @@ theme_subdir_load (GtkIconTheme *icon_theme,
-       error = NULL;
-     }
-
-+  if (g_key_file_has_key (theme_file, subdir, "OutputScale", NULL))
-+    scale = g_key_file_get_integer (theme_file, subdir, "OutputScale", NULL);
-+  else
-+    scale = 1;
-+
-   for (d = icon_theme->priv->dir_mtimes; d; d = d->next)
-     {
-       dir_mtime = (IconThemeDirMtime *)d->data;
-@@ -2571,6 +2655,8 @@ theme_subdir_load (GtkIconTheme *icon_theme,
-         dir->dir = full_dir;
-         dir->icon_data = NULL;
-         dir->subdir = g_strdup (subdir);
-+          dir->scale = scale;
-+
-         if (dir_mtime->cache != NULL)
-             {
-             dir->cache = _gtk_icon_cache_ref (dir_mtime->cache);
-diff --git a/gtk/gtkicontheme.h b/gtk/gtkicontheme.h
-index 3611c74..9b29f96 100644
---- a/gtk/gtkicontheme.h
-+++ b/gtk/gtkicontheme.h
-@@ -141,16 +141,31 @@ GtkIconInfo * gtk_icon_theme_lookup_icon           (GtkIconTheme
-                                                   const gchar                 *icon_name,
-                                                   gint                         size,
-                                                   GtkIconLookupFlags           flags);
-+GtkIconInfo * gtk_icon_theme_lookup_icon_for_scale (GtkIconTheme                *icon_theme,
-+                                                    const gchar                 *icon_name,
-+                                                    gint                         size,
-+                                                    gdouble                      scale,
-+                                                    GtkIconLookupFlags           flags);
- GtkIconInfo * gtk_icon_theme_choose_icon           (GtkIconTheme                *icon_theme,
-                                                   const gchar                 *icon_names[],
-                                                   gint                         size,
-                                                   GtkIconLookupFlags           flags);
-+GtkIconInfo * gtk_icon_theme_choose_icon_for_scale (GtkIconTheme                *icon_theme,
-+                                                  const gchar                 *icon_names[],
-+                                                  gint                         size,
-+                                                    gdouble                      scale,
-+                                                  GtkIconLookupFlags           flags);
- GdkPixbuf *   gtk_icon_theme_load_icon             (GtkIconTheme                *icon_theme,
-                                                   const gchar                 *icon_name,
-                                                   gint                         size,
-                                                   GtkIconLookupFlags           flags,
-                                                   GError                     **error);
--
-+GdkPixbuf *   gtk_icon_theme_load_icon_for_scale   (GtkIconTheme                *icon_theme,
-+                                                    const gchar                 *icon_name,
-+                                                    gint                         size,
-+                                                    gdouble                      scale,
-+                                                    GtkIconLookupFlags           flags,
-+                                                    GError                     **error);
- GtkIconInfo * gtk_icon_theme_lookup_by_gicon       (GtkIconTheme                *icon_theme,
-                                                     GIcon                       *icon,
-                                                     gint                         size,
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0059-iconfactory-Add-scale-info-to-GtkIconSource.patch b/bockbuild/mac-sdk/patches/gtk/0059-iconfactory-Add-scale-info-to-GtkIconSource.patch
deleted file mode 100644 (file)
index d696b45..0000000
+++ /dev/null
@@ -1,480 +0,0 @@
-From 431d1225b153c1a1389686920aed1d26ff3218b2 Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlos@lanedo.com>
-Date: Fri, 10 May 2013 18:24:26 +0200
-Subject: [PATCH 59/68] iconfactory: Add scale info to GtkIconSource
-
-GtkIconSource now has notions knows about scale, so it can correctly
-fetch the icon at the right scale for ICON_NAME source types.
-
-All default stock icons have been made to have a wildcarded scale,
-so it's up to the GtkIconTheme to do the scaling business.
----
- gtk/gtkiconfactory.c |  140 ++++++++++++++++++++++++++++++++------------------
- gtk/gtkiconfactory.h |    7 ++-
- 2 files changed, 97 insertions(+), 50 deletions(-)
-
-diff --git a/gtk/gtkiconfactory.c b/gtk/gtkiconfactory.c
-index 0dc31e6..41d1ee7 100644
---- a/gtk/gtkiconfactory.c
-+++ b/gtk/gtkiconfactory.c
-@@ -66,6 +66,7 @@ struct _GtkIconSource
-   GtkTextDirection direction;
-   GtkStateType state;
-   GtkIconSize size;
-+  gdouble scale;
-
-   /* If TRUE, then the parameter is wildcarded, and the above
-    * fields should be ignored. If FALSE, the parameter is
-@@ -74,6 +75,7 @@ struct _GtkIconSource
-   guint any_direction : 1;
-   guint any_state : 1;
-   guint any_size : 1;
-+  guint any_scale : 1;
-
- #if defined (G_OS_WIN32) && !defined (_WIN64)
-   /* System codepage version of filename, for DLL ABI backward
-@@ -106,10 +108,10 @@ static GtkIconSize icon_size_register_intern (const gchar *name,
-                                             gint         width,
-                                             gint         height);
-
--#define GTK_ICON_SOURCE_INIT(any_direction, any_state, any_size)      \
-+#define GTK_ICON_SOURCE_INIT(any_direction, any_state, any_size, any_scale)   \
-   { GTK_ICON_SOURCE_EMPTY, { NULL }, NULL,                            \
--   0, 0, 0,                                                           \
--   any_direction, any_state, any_size }
-+   0, 0, 0, 1,                                                                \
-+   any_direction, any_state, any_size, any_scale }
-
- G_DEFINE_TYPE_WITH_CODE (GtkIconFactory, gtk_icon_factory, G_TYPE_OBJECT,
-                        G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
-@@ -349,7 +351,7 @@ register_stock_icon (GtkIconFactory *factory,
-                      const gchar    *icon_name)
- {
-   GtkIconSet *set = gtk_icon_set_new ();
--  GtkIconSource source = GTK_ICON_SOURCE_INIT (TRUE, TRUE, TRUE);
-+  GtkIconSource source = GTK_ICON_SOURCE_INIT (TRUE, TRUE, TRUE, TRUE);
-
-   source.type = GTK_ICON_SOURCE_STATIC_ICON_NAME;
-   source.source.icon_name = (gchar *)icon_name;
-@@ -366,7 +368,7 @@ register_bidi_stock_icon (GtkIconFactory *factory,
-                           const gchar    *icon_name)
- {
-   GtkIconSet *set = gtk_icon_set_new ();
--  GtkIconSource source = GTK_ICON_SOURCE_INIT (FALSE, TRUE, TRUE);
-+  GtkIconSource source = GTK_ICON_SOURCE_INIT (FALSE, TRUE, TRUE, TRUE);
-
-   source.type = GTK_ICON_SOURCE_STATIC_ICON_NAME;
-   source.source.icon_name = (gchar *)icon_name;
-@@ -1094,12 +1096,14 @@ static GdkPixbuf *find_in_cache     (GtkIconSet       *icon_set,
-                                      GtkStyle         *style,
-                                      GtkTextDirection  direction,
-                                      GtkStateType      state,
--                                     GtkIconSize       size);
-+                                     GtkIconSize       size,
-+                                   gdouble           scale);
- static void       add_to_cache      (GtkIconSet       *icon_set,
-                                      GtkStyle         *style,
-                                      GtkTextDirection  direction,
-                                      GtkStateType      state,
-                                      GtkIconSize       size,
-+                                     gdouble           scale,
-                                      GdkPixbuf        *pixbuf);
- /* Clear icon set contents, drop references to all contained
-  * GdkPixbuf objects and forget all GtkIconSources. Used to
-@@ -1179,7 +1183,7 @@ gtk_icon_set_new_from_pixbuf (GdkPixbuf *pixbuf)
- {
-   GtkIconSet *set;
-
--  GtkIconSource source = GTK_ICON_SOURCE_INIT (TRUE, TRUE, TRUE);
-+  GtkIconSource source = GTK_ICON_SOURCE_INIT (TRUE, TRUE, TRUE, TRUE);
-
-   g_return_val_if_fail (pixbuf != NULL, NULL);
-
-@@ -1319,6 +1323,7 @@ find_best_matching_source (GtkIconSet       *icon_set,
-                          GtkTextDirection  direction,
-                          GtkStateType      state,
-                          GtkIconSize       size,
-+                         gdouble           scale,
-                          GSList           *failed)
- {
-   GtkIconSource *source;
-@@ -1340,7 +1345,8 @@ find_best_matching_source (GtkIconSet       *icon_set,
-
-       if ((s->any_direction || (s->direction == direction)) &&
-           (s->any_state || (s->state == state)) &&
--          (s->any_size || size == (GtkIconSize)-1 || (sizes_equivalent (size, s->size))))
-+          (s->any_size || size == (GtkIconSize)-1 || (sizes_equivalent (size, s->size))) &&
-+          (s->any_scale || (s->scale == scale)))
-         {
-         if (!g_slist_find (failed, s))
-           {
-@@ -1392,7 +1398,7 @@ render_icon_name_pixbuf (GtkIconSource    *icon_source,
-                        GtkIconSize       size,
-                        GtkWidget        *widget,
-                        const char       *detail,
--                         gboolean          scale_requested)
-+                         gdouble           scale)
- {
-   GdkPixbuf *pixbuf;
-   GdkPixbuf *tmp_pixbuf;
-@@ -1403,7 +1409,6 @@ render_icon_name_pixbuf (GtkIconSource    *icon_source,
-   gint width, height, pixel_size;
-   gint *sizes, *s, dist;
-   GError *error = NULL;
--  gdouble scale = 1;
-
-   if (widget && gtk_widget_has_screen (widget))
-     screen = gtk_widget_get_screen (widget);
-@@ -1419,14 +1424,6 @@ render_icon_name_pixbuf (GtkIconSource    *icon_source,
-   icon_theme = gtk_icon_theme_get_for_screen (screen);
-   settings = gtk_settings_get_for_screen (screen);
-
--  if (scale_requested && widget)
--    {
--      if (!widget->window)
--        gtk_widget_realize (widget);
--
--      scale = gdk_window_get_scale_factor (widget->window);
--    }
--
-   if (!gtk_icon_size_lookup_for_settings (settings, size, &width, &height))
-     {
-       if (size == (GtkIconSize)-1)
-@@ -1469,7 +1466,7 @@ render_icon_name_pixbuf (GtkIconSource    *icon_source,
-       }
-     }
-
--  pixel_size = MIN (width, height) * scale;
-+  pixel_size = MIN (width, height);
-
-   if (icon_source->direction != GTK_TEXT_DIR_NONE)
-     {
-@@ -1483,9 +1480,10 @@ render_icon_name_pixbuf (GtkIconSource    *icon_source,
-       names[1] = icon_source->source.icon_name;
-       names[2] = NULL;
-
--      info = gtk_icon_theme_choose_icon (icon_theme,
--                                         names,
--                                         pixel_size, GTK_ICON_LOOKUP_USE_BUILTIN);
-+      info = gtk_icon_theme_choose_icon_for_scale (icon_theme,
-+                                                   names,
-+                                                   pixel_size, scale,
-+                                                   GTK_ICON_LOOKUP_USE_BUILTIN);
-       g_free (name_with_dir);
-       if (info)
-         {
-@@ -1495,10 +1493,10 @@ render_icon_name_pixbuf (GtkIconSource    *icon_source,
-     }
-   else
-     {
--      tmp_pixbuf = gtk_icon_theme_load_icon (icon_theme,
--                                             icon_source->source.icon_name,
--                                             pixel_size, 0,
--                                             &error);
-+      tmp_pixbuf = gtk_icon_theme_load_icon_for_scale (icon_theme,
-+                                                       icon_source->source.icon_name,
-+                                                       pixel_size, scale, 0,
-+                                                       &error);
-     }
-
-   if (!tmp_pixbuf)
-@@ -1534,7 +1532,7 @@ find_and_render_icon_source (GtkIconSet       *icon_set,
-                            GtkIconSize       size,
-                            GtkWidget         *widget,
-                            const char        *detail,
--                             gboolean           scale_requested)
-+                           gdouble           scale)
- {
-   GSList *failed = NULL;
-   GdkPixbuf *pixbuf = NULL;
-@@ -1551,7 +1549,7 @@ find_and_render_icon_source (GtkIconSet       *icon_set,
-    */
-   while (pixbuf == NULL)
-     {
--      GtkIconSource *source = find_best_matching_source (icon_set, direction, state, size, failed);
-+      GtkIconSource *source = find_best_matching_source (icon_set, direction, state, size, scale, failed);
-
-       if (source == NULL)
-       break;
-@@ -1576,7 +1574,7 @@ find_and_render_icon_source (GtkIconSet       *icon_set,
-       case GTK_ICON_SOURCE_STATIC_ICON_NAME:
-         pixbuf = render_icon_name_pixbuf (source, style,
-                                           direction, state, size,
--                                          widget, detail, scale_requested);
-+                                          widget, detail, scale);
-         if (!pixbuf)
-           failed = g_slist_prepend (failed, source);
-         break;
-@@ -1601,7 +1599,7 @@ render_fallback_image (GtkStyle          *style,
-                        const char        *detail)
- {
-   /* This icon can be used for any direction/state/size */
--  static GtkIconSource fallback_source = GTK_ICON_SOURCE_INIT (TRUE, TRUE, TRUE);
-+  static GtkIconSource fallback_source = GTK_ICON_SOURCE_INIT (TRUE, TRUE, TRUE, TRUE);
-
-   if (fallback_source.type == GTK_ICON_SOURCE_EMPTY)
-     {
-@@ -1652,7 +1650,7 @@ _get_real_scale (GtkWidget   *widget,
-   settings = gtk_settings_get_for_screen (screen);
-   gtk_icon_size_lookup_for_settings (settings, size, &icon_width, NULL);
-
--  return (gdouble) gdk_pixbuf_get_width (icon) / icon_width;
-+  return round ((gdouble) gdk_pixbuf_get_width (icon) / icon_width);
- }
-
- GdkPixbuf*
-@@ -1663,28 +1661,23 @@ gtk_icon_set_render_icon_internal (GtkIconSet        *icon_set,
-                                    GtkIconSize        size,
-                                    GtkWidget         *widget,
-                                    const char        *detail,
--                                   gboolean           scale_requested,
--                                   gdouble           *real_scale)
-+                                 gdouble           *scale)
- {
-   GdkPixbuf *icon;
-
--  if (real_scale)
--    *real_scale = 1;
--
-   if (icon_set->sources == NULL)
-     return render_fallback_image (style, direction, state, size, widget, detail);
-
-   if (detail == NULL)
-     {
-       icon = find_in_cache (icon_set, style, direction,
--                        state, size);
-+                          state, size, *scale);
-
-       if (icon)
-       {
-         g_object_ref (icon);
-
--          if (scale_requested && real_scale)
--            *real_scale = _get_real_scale (widget, style, size, icon);
-+        *scale = _get_real_scale (widget, style, size, icon);
-
-         return icon;
-       }
-@@ -1692,16 +1685,15 @@ gtk_icon_set_render_icon_internal (GtkIconSet        *icon_set,
-
-
-   icon = find_and_render_icon_source (icon_set, style, direction, state, size,
--                                    widget, detail, scale_requested);
-+                                    widget, detail, *scale);
-
-   if (icon == NULL)
-     icon = render_fallback_image (style, direction, state, size, widget, detail);
-
--  if (detail == NULL)
--    add_to_cache (icon_set, style, direction, state, size, icon);
-+  *scale = _get_real_scale (widget, style, size, icon);
-
--  if (scale_requested && real_scale)
--    *real_scale = _get_real_scale (widget, style, size, icon);
-+  if (detail == NULL)
-+    add_to_cache (icon_set, style, direction, state, size, *scale, icon);
-
-   return icon;
- }
-@@ -1739,12 +1731,14 @@ gtk_icon_set_render_icon (GtkIconSet        *icon_set,
-                           GtkWidget         *widget,
-                           const char        *detail)
- {
-+  gdouble scale = 1;
-+
-   g_return_val_if_fail (icon_set != NULL, NULL);
-   g_return_val_if_fail (style == NULL || GTK_IS_STYLE (style), NULL);
-
-   return gtk_icon_set_render_icon_internal (icon_set, style, direction,
-                                             state, size, widget, detail,
--                                            FALSE, NULL);
-+                                            &scale);
- }
-
- GdkPixbuf*
-@@ -1755,19 +1749,22 @@ gtk_icon_set_render_icon_scaled (GtkIconSet        *icon_set,
-                                  GtkIconSize        size,
-                                  GtkWidget         *widget,
-                                  const char        *detail,
--                                 gdouble           *real_scale)
-+                                 gdouble           *scale)
- {
-   g_return_val_if_fail (icon_set != NULL, NULL);
-   g_return_val_if_fail (style == NULL || GTK_IS_STYLE (style), NULL);
-+  g_return_val_if_fail (scale != NULL, NULL);
-+
-+  *scale = MAX (*scale, 1);
-
-   return gtk_icon_set_render_icon_internal (icon_set, style, direction,
-                                             state, size, widget, detail,
--                                            TRUE, real_scale);
-+                                            scale);
- }
-
- /* Order sources by their "wildness", so that "wilder" sources are
-  * greater than "specific" sources; for determining ordering,
-- * direction beats state beats size.
-+ * direction beats state beats size beats scale.
-  */
-
- static int
-@@ -1788,6 +1785,10 @@ icon_source_compare (gconstpointer ap, gconstpointer bp)
-     return -1;
-   else if (a->any_size && !b->any_size)
-     return 1;
-+  else if (!a->any_scale && b->any_scale)
-+    return -1;
-+  else if (a->any_scale && !b->any_scale)
-+    return 1;
-   else
-     return 0;
- }
-@@ -1965,10 +1966,12 @@ gtk_icon_source_new (void)
-   src->direction = GTK_TEXT_DIR_NONE;
-   src->size = GTK_ICON_SIZE_INVALID;
-   src->state = GTK_STATE_NORMAL;
-+  src->scale = 1;
-
-   src->any_direction = TRUE;
-   src->any_state = TRUE;
-   src->any_size = TRUE;
-+  src->any_scale = TRUE;
-
-   return src;
- }
-@@ -2319,6 +2322,15 @@ gtk_icon_source_set_size_wildcarded (GtkIconSource *source,
-   source->any_size = setting != FALSE;
- }
-
-+void
-+gtk_icon_source_set_scale_wildcarded (GtkIconSource *source,
-+                                      gboolean       setting)
-+{
-+  g_return_if_fail (source != NULL);
-+
-+  source->any_scale = setting != FALSE;
-+}
-+
- /**
-  * gtk_icon_source_get_size_wildcarded:
-  * @source: a #GtkIconSource
-@@ -2367,6 +2379,14 @@ gtk_icon_source_get_direction_wildcarded (const GtkIconSource *source)
-   return source->any_direction;
- }
-
-+gboolean
-+gtk_icon_source_get_scale_wildcarded (const GtkIconSource *source)
-+{
-+  g_return_val_if_fail (source != NULL, TRUE);
-+
-+  return source->any_scale;
-+}
-+
- /**
-  * gtk_icon_source_set_direction:
-  * @source: a #GtkIconSource
-@@ -2433,6 +2453,15 @@ gtk_icon_source_set_size (GtkIconSource *source,
-   source->size = size;
- }
-
-+void
-+gtk_icon_source_set_scale (GtkIconSource *source,
-+                           gdouble        scale)
-+{
-+  g_return_if_fail (source != NULL);
-+
-+  source->scale = scale;
-+}
-+
- /**
-  * gtk_icon_source_get_direction:
-  * @source: a #GtkIconSource
-@@ -2486,6 +2515,14 @@ gtk_icon_source_get_size (const GtkIconSource *source)
-   return source->size;
- }
-
-+gdouble
-+gtk_icon_source_get_scale (const GtkIconSource *source)
-+{
-+  g_return_val_if_fail (source != NULL, 0);
-+
-+  return source->scale;
-+}
-+
- #define NUM_CACHED_ICONS 8
-
- typedef struct _CachedIcon CachedIcon;
-@@ -2499,6 +2536,7 @@ struct _CachedIcon
-   GtkTextDirection direction;
-   GtkStateType state;
-   GtkIconSize size;
-+  gdouble scale;
-
-   GdkPixbuf *pixbuf;
- };
-@@ -2529,7 +2567,8 @@ find_in_cache (GtkIconSet      *icon_set,
-                GtkStyle        *style,
-                GtkTextDirection direction,
-                GtkStateType     state,
--               GtkIconSize      size)
-+               GtkIconSize      size,
-+               gdouble          scale)
- {
-   GSList *tmp_list;
-   GSList *prev;
-@@ -2545,6 +2584,7 @@ find_in_cache (GtkIconSet      *icon_set,
-       if (icon->style == style &&
-           icon->direction == direction &&
-           icon->state == state &&
-+          icon->scale == scale &&
-           (size == (GtkIconSize)-1 || icon->size == size))
-         {
-           if (prev)
-@@ -2571,6 +2611,7 @@ add_to_cache (GtkIconSet      *icon_set,
-               GtkTextDirection direction,
-               GtkStateType     state,
-               GtkIconSize      size,
-+              gdouble          scale,
-               GdkPixbuf       *pixbuf)
- {
-   CachedIcon *icon;
-@@ -2595,6 +2636,7 @@ add_to_cache (GtkIconSet      *icon_set,
-   icon->direction = direction;
-   icon->state = state;
-   icon->size = size;
-+  icon->scale = scale;
-   icon->pixbuf = pixbuf;
-
-   if (icon->style)
-diff --git a/gtk/gtkiconfactory.h b/gtk/gtkiconfactory.h
-index e38f8e6..d646ed9 100644
---- a/gtk/gtkiconfactory.h
-+++ b/gtk/gtkiconfactory.h
-@@ -177,19 +177,24 @@ void             gtk_icon_source_set_state_wildcarded     (GtkIconSource       *
-                                                            gboolean             setting);
- void             gtk_icon_source_set_size_wildcarded      (GtkIconSource       *source,
-                                                            gboolean             setting);
-+void             gtk_icon_source_set_scale_wildcarded     (GtkIconSource       *source,
-+                                                           gboolean             setting);
- gboolean         gtk_icon_source_get_size_wildcarded      (const GtkIconSource *source);
- gboolean         gtk_icon_source_get_state_wildcarded     (const GtkIconSource *source);
- gboolean         gtk_icon_source_get_direction_wildcarded (const GtkIconSource *source);
-+gboolean         gtk_icon_source_get_scale_wildcarded     (const GtkIconSource *source);
- void             gtk_icon_source_set_direction            (GtkIconSource       *source,
-                                                            GtkTextDirection     direction);
- void             gtk_icon_source_set_state                (GtkIconSource       *source,
-                                                            GtkStateType         state);
- void             gtk_icon_source_set_size                 (GtkIconSource       *source,
-                                                            GtkIconSize          size);
-+void             gtk_icon_source_set_scale                (GtkIconSource       *source,
-+                                                           gdouble              scale);
- GtkTextDirection gtk_icon_source_get_direction            (const GtkIconSource *source);
- GtkStateType     gtk_icon_source_get_state                (const GtkIconSource *source);
- GtkIconSize      gtk_icon_source_get_size                 (const GtkIconSource *source);
--
-+gdouble          gtk_icon_source_get_scale                (const GtkIconSource *source);
-
- /* ignore this */
- void _gtk_icon_set_invalidate_caches (void);
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0060-iconfactory-Add-gtk_cairo_set_source_icon_set.patch b/bockbuild/mac-sdk/patches/gtk/0060-iconfactory-Add-gtk_cairo_set_source_icon_set.patch
deleted file mode 100644 (file)
index 15b5bac..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-From 2c894a76c7fb002ed276d1d82552fb4e91bb3a78 Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlos@lanedo.com>
-Date: Fri, 10 May 2013 18:29:05 +0200
-Subject: [PATCH 60/68] iconfactory: Add gtk_cairo_set_source_icon_set()
-
-As GtkIconSet remains a good candidate to delay pixbuf lookup until
-the moment of rendering, a cairo helper function has been added
-to easy enabling support for high resolution icons.
----
- gtk/gtkiconfactory.c |   32 ++++++++++++++++++++++++++++++++
- gtk/gtkiconfactory.h |    9 +++++++++
- 2 files changed, 41 insertions(+)
-
-diff --git a/gtk/gtkiconfactory.c b/gtk/gtkiconfactory.c
-index 41d1ee7..ab9a212 100644
---- a/gtk/gtkiconfactory.c
-+++ b/gtk/gtkiconfactory.c
-@@ -3127,5 +3127,37 @@ gtk_icon_source_get_filename (const GtkIconSource *source)
-
- #endif
-
-+void
-+gtk_cairo_set_source_icon_set (cairo_t         *cr,
-+                               GtkWidget       *widget,
-+                               GtkIconSet      *icon_set,
-+                               GtkIconSize      size,
-+                               gdouble          scale,
-+                               gdouble          icon_x,
-+                               gdouble          icon_y)
-+{
-+  cairo_pattern_t *pattern;
-+  cairo_matrix_t matrix;
-+  GdkPixbuf *pixbuf;
-+
-+  g_return_if_fail (GTK_IS_WIDGET (widget));
-+  g_return_if_fail (cr != NULL);
-+  g_return_if_fail (icon_set != NULL);
-+
-+  pixbuf = gtk_icon_set_render_icon_scaled (icon_set,
-+                                            gtk_widget_get_style (widget),
-+                                            gtk_widget_get_direction (widget),
-+                                            gtk_widget_get_state (widget),
-+                                            size, widget, NULL, &scale);
-+  gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
-+
-+  pattern = cairo_get_source (cr);
-+  cairo_matrix_init_scale (&matrix, scale, scale);
-+  cairo_matrix_translate (&matrix, -icon_x, -icon_y);
-+  cairo_pattern_set_matrix (pattern, &matrix);
-+
-+  g_object_unref (pixbuf);
-+}
-+
- #define __GTK_ICON_FACTORY_C__
- #include "gtkaliasdef.c"
-diff --git a/gtk/gtkiconfactory.h b/gtk/gtkiconfactory.h
-index d646ed9..67e318a 100644
---- a/gtk/gtkiconfactory.h
-+++ b/gtk/gtkiconfactory.h
-@@ -196,6 +196,15 @@ GtkStateType     gtk_icon_source_get_state                (const GtkIconSource *
- GtkIconSize      gtk_icon_source_get_size                 (const GtkIconSource *source);
- gdouble          gtk_icon_source_get_scale                (const GtkIconSource *source);
-
-+/* Cairo helper */
-+void             gtk_cairo_set_source_icon_set            (cairo_t             *cr,
-+                                                           GtkWidget           *widget,
-+                                                           GtkIconSet          *icon_set,
-+                                                           GtkIconSize          size,
-+                                                           gdouble              scale,
-+                                                           gdouble              icon_x,
-+                                                           gdouble              icon_y);
-+
- /* ignore this */
- void _gtk_icon_set_invalidate_caches (void);
- GList* _gtk_icon_factory_list_ids (void);
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0061-image-Use-scaled-icons-on-windows-with-a-scaling-fac.patch b/bockbuild/mac-sdk/patches/gtk/0061-image-Use-scaled-icons-on-windows-with-a-scaling-fac.patch
deleted file mode 100644 (file)
index eaff472..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-From a7d250bd2126a146d0e5d77c1083a47285d5dfb7 Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlosg@gnome.org>
-Date: Tue, 12 Feb 2013 14:03:40 +0100
-Subject: [PATCH 61/68] image: Use scaled icons on windows with a scaling
- factor
-
----
- gtk/gtkimage.c |  112 ++++++++++++++++++++++++++++++++++----------------------
- 1 file changed, 68 insertions(+), 44 deletions(-)
-
-diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c
-index c35d962..b492d73 100644
---- a/gtk/gtkimage.c
-+++ b/gtk/gtkimage.c
-@@ -1717,9 +1717,11 @@ ensure_pixbuf_for_icon_name (GtkImage *image)
-           }
-       }
-       image->data.name.pixbuf =
--      gtk_icon_theme_load_icon (icon_theme,
--                                image->data.name.icon_name,
--                                MIN (width, height), flags, &error);
-+      gtk_icon_theme_load_icon_for_scale (icon_theme,
-+                                            image->data.name.icon_name,
-+                                            MIN (width, height),
-+                                            gtk_widget_get_scale_factor (GTK_WIDGET (image)),
-+                                            flags, &error);
-       if (image->data.name.pixbuf == NULL)
-       {
-         g_error_free (error);
-@@ -1757,9 +1759,10 @@ ensure_pixbuf_for_gicon (GtkImage *image)
-         width = height = priv->pixel_size;
-           flags |= GTK_ICON_LOOKUP_FORCE_SIZE;
-       }
--      else if (!gtk_icon_size_lookup_for_settings (settings,
--                                                 image->icon_size,
--                                                 &width, &height))
-+      else if (!gtk_icon_size_lookup_scaled (settings,
-+                                             image->icon_size,
-+                                             gtk_widget_get_scale_factor (GTK_WIDGET (image)),
-+                                             &width, &height))
-       {
-         if (image->icon_size == -1)
-           width = height = 48;
-@@ -1848,11 +1851,11 @@ gtk_image_expose (GtkWidget      *widget,
-       GdkBitmap *mask;
-       GdkPixbuf *pixbuf;
-       gboolean needs_state_transform;
-+      gdouble render_scale = 1.0;
-
-       image = GTK_IMAGE (widget);
-       misc = GTK_MISC (widget);
-       priv = GTK_IMAGE_GET_PRIVATE (image);
--
-       area = event->area;
-
-       /* For stock items and icon sets, we lazily calculate
-@@ -1954,12 +1957,13 @@ gtk_image_expose (GtkWidget      *widget,
-           break;
-
-         case GTK_IMAGE_STOCK:
--          pixbuf = gtk_widget_render_icon (widget,
--                                           image->data.stock.stock_id,
--                                           image->icon_size,
--                                           NULL);
-+          render_scale = gtk_widget_get_scale_factor (widget);
-+          pixbuf = gtk_widget_render_icon_scaled (widget,
-+                                                  image->data.stock.stock_id,
-+                                                  image->icon_size,
-+                                                  NULL, &render_scale);
-           if (pixbuf)
--            {
-+            {
-               image_bound.width = gdk_pixbuf_get_width (pixbuf);
-               image_bound.height = gdk_pixbuf_get_height (pixbuf);
-             }
-@@ -1969,14 +1973,15 @@ gtk_image_expose (GtkWidget      *widget,
-           break;
-
-         case GTK_IMAGE_ICON_SET:
-+          render_scale = gtk_widget_get_scale_factor (widget);
-           pixbuf =
--            gtk_icon_set_render_icon (image->data.icon_set.icon_set,
--                                      widget->style,
--                                      gtk_widget_get_direction (widget),
--                                      gtk_widget_get_state (widget),
--                                      image->icon_size,
--                                      widget,
--                                      NULL);
-+            gtk_icon_set_render_icon_scaled (image->data.icon_set.icon_set,
-+                                             widget->style,
-+                                             gtk_widget_get_direction (widget),
-+                                             gtk_widget_get_state (widget),
-+                                             image->icon_size,
-+                                             widget,
-+                                             NULL, &render_scale);
-
-           if (pixbuf)
-             {
-@@ -2082,17 +2087,35 @@ gtk_image_expose (GtkWidget      *widget,
-
-               if (pixbuf)
-                 {
--                  gdk_draw_pixbuf (widget->window,
--                                 widget->style->black_gc,
--                                 pixbuf,
--                                 image_bound.x - x,
--                                 image_bound.y - y,
--                                 image_bound.x,
--                                 image_bound.y,
--                                 image_bound.width,
--                                 image_bound.height,
--                                 GDK_RGB_DITHER_NORMAL,
--                                 0, 0);
-+                  if (render_scale == 1)
-+                    {
-+                      gdk_draw_pixbuf (widget->window,
-+                                       widget->style->black_gc,
-+                                       pixbuf,
-+                                       image_bound.x - x,
-+                                       image_bound.y - y,
-+                                       image_bound.x,
-+                                       image_bound.y,
-+                                       image_bound.width,
-+                                       image_bound.height,
-+                                       GDK_RGB_DITHER_NORMAL,
-+                                       0, 0);
-+                    }
-+                  else
-+                    {
-+                      cairo_t *cr = gdk_cairo_create (widget->window);
-+
-+                      gdk_cairo_region (cr, event->region);
-+                      cairo_clip (cr);
-+
-+                      cairo_scale (cr, 1.0 / render_scale, 1.0 / render_scale);
-+                      gdk_cairo_set_source_pixbuf (cr, pixbuf,
-+                                                   image_bound.x * render_scale,
-+                                                   image_bound.y * render_scale);
-+
-+                      cairo_paint (cr);
-+                      cairo_destroy (cr);
-+                    }
-                 }
-             }
-           else
-@@ -2298,8 +2321,10 @@ gtk_image_calc_size (GtkImage *image)
-   GtkWidget *widget = GTK_WIDGET (image);
-   GdkPixbuf *pixbuf = NULL;
-   GtkImagePrivate *priv;
-+  gdouble render_scale;
-
-   priv = GTK_IMAGE_GET_PRIVATE (image);
-+  render_scale = gtk_widget_get_scale_factor (widget);
-
-   priv->need_calc_size = 0;
-
-@@ -2311,20 +2336,20 @@ gtk_image_calc_size (GtkImage *image)
-   switch (image->storage_type)
-     {
-     case GTK_IMAGE_STOCK:
--      pixbuf = gtk_widget_render_icon (widget,
--                                     image->data.stock.stock_id,
--                                       image->icon_size,
--                                       NULL);
-+      pixbuf = gtk_widget_render_icon_scaled (widget,
-+                                              image->data.stock.stock_id,
-+                                              image->icon_size,
-+                                              NULL, &render_scale);
-       break;
-
-     case GTK_IMAGE_ICON_SET:
--      pixbuf = gtk_icon_set_render_icon (image->data.icon_set.icon_set,
--                                         widget->style,
--                                         gtk_widget_get_direction (widget),
--                                         gtk_widget_get_state (widget),
--                                         image->icon_size,
--                                         widget,
--                                         NULL);
-+      pixbuf = gtk_icon_set_render_icon_scaled (image->data.icon_set.icon_set,
-+                                                widget->style,
-+                                                gtk_widget_get_direction (widget),
-+                                                gtk_widget_get_state (widget),
-+                                                image->icon_size,
-+                                                widget,
-+                                                NULL, &render_scale);
-       break;
-     case GTK_IMAGE_ICON_NAME:
-       ensure_pixbuf_for_icon_name (image);
-@@ -2343,9 +2368,8 @@ gtk_image_calc_size (GtkImage *image)
-
-   if (pixbuf)
-     {
--      widget->requisition.width = gdk_pixbuf_get_width (pixbuf) + GTK_MISC (image)->xpad * 2;
--      widget->requisition.height = gdk_pixbuf_get_height (pixbuf) + GTK_MISC (image)->ypad * 2;
--
-+      widget->requisition.width = (gdk_pixbuf_get_width (pixbuf) / render_scale) + GTK_MISC (image)->xpad * 2;
-+      widget->requisition.height = (gdk_pixbuf_get_height (pixbuf) / render_scale) + GTK_MISC (image)->ypad * 2;
-       g_object_unref (pixbuf);
-     }
- }
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0062-cellrendererpixbuf-Use-scaled-icons-on-windows-with-.patch b/bockbuild/mac-sdk/patches/gtk/0062-cellrendererpixbuf-Use-scaled-icons-on-windows-with-.patch
deleted file mode 100644 (file)
index eda1435..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-From 52cba71be7d226b628731ea92c2064bf41f08b54 Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlosg@gnome.org>
-Date: Tue, 12 Feb 2013 14:04:09 +0100
-Subject: [PATCH 62/68] cellrendererpixbuf: Use scaled icons on windows with a
- scale factor
-
----
- gtk/gtkcellrendererpixbuf.c |  115 ++++++++++++++++++++++++++++++++++++++-----
- 1 file changed, 102 insertions(+), 13 deletions(-)
-
-diff --git a/gtk/gtkcellrendererpixbuf.c b/gtk/gtkcellrendererpixbuf.c
-index f689784..7c767b6 100644
---- a/gtk/gtkcellrendererpixbuf.c
-+++ b/gtk/gtkcellrendererpixbuf.c
-@@ -63,7 +63,8 @@ enum {
-   PROP_STOCK_DETAIL,
-   PROP_FOLLOW_STATE,
-   PROP_ICON_NAME,
--  PROP_GICON
-+  PROP_GICON,
-+  PROP_ICON_SET
- };
-
-
-@@ -78,6 +79,8 @@ struct _GtkCellRendererPixbufPrivate
-   gboolean follow_state;
-   gchar *icon_name;
-   GIcon *gicon;
-+  GtkIconSet *icon_set;
-+  gdouble render_scale;
- };
-
- G_DEFINE_TYPE (GtkCellRendererPixbuf, gtk_cell_renderer_pixbuf, GTK_TYPE_CELL_RENDERER)
-@@ -173,6 +176,14 @@ gtk_cell_renderer_pixbuf_class_init (GtkCellRendererPixbufClass *class)
-                                                       NULL,
-                                                       GTK_PARAM_READWRITE));
-
-+  g_object_class_install_property (object_class,
-+                                   PROP_ICON_SET,
-+                                   g_param_spec_boxed ("icon-set",
-+                                                       P_("Icon set"),
-+                                                       P_("Icon set to render the image from"),
-+                                                       GTK_TYPE_ICON_SET,
-+                                                       GTK_PARAM_READWRITE));
-+
-   /**
-    * GtkCellRendererPixbuf:follow-state:
-    *
-@@ -277,6 +288,9 @@ gtk_cell_renderer_pixbuf_get_property (GObject        *object,
-     case PROP_GICON:
-       g_value_set_object (value, priv->gicon);
-       break;
-+    case PROP_ICON_SET:
-+      g_value_set_boxed (value, priv->icon_set);
-+      break;
-     default:
-       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
-       break;
-@@ -300,6 +314,7 @@ gtk_cell_renderer_pixbuf_set_property (GObject      *object,
-       if (cellpixbuf->pixbuf)
-       g_object_unref (cellpixbuf->pixbuf);
-       cellpixbuf->pixbuf = (GdkPixbuf*) g_value_dup_object (value);
-+      priv->render_scale = 1;
-       if (cellpixbuf->pixbuf)
-         {
-           if (priv->stock_id)
-@@ -422,6 +437,7 @@ gtk_cell_renderer_pixbuf_set_property (GObject      *object,
-         g_object_unref (priv->gicon);
-       }
-       priv->gicon = (GIcon *) g_value_dup_object (value);
-+      priv->render_scale = 1;
-       if (priv->gicon)
-         {
-         if (cellpixbuf->pixbuf)
-@@ -444,6 +460,49 @@ gtk_cell_renderer_pixbuf_set_property (GObject      *object,
-             }
-         }
-       break;
-+    case PROP_ICON_SET:
-+      if (priv->icon_set)
-+      {
-+        if (cellpixbuf->pixbuf)
-+          {
-+            g_object_unref (cellpixbuf->pixbuf);
-+            cellpixbuf->pixbuf = NULL;
-+              g_object_notify (object, "pixbuf");
-+          }
-+
-+          gtk_icon_set_unref (priv->icon_set);
-+      }
-+
-+      priv->icon_set = g_value_dup_boxed (value);
-+
-+      if (priv->icon_set)
-+        {
-+        if (cellpixbuf->pixbuf)
-+          {
-+              g_object_unref (cellpixbuf->pixbuf);
-+              cellpixbuf->pixbuf = NULL;
-+              g_object_notify (object, "pixbuf");
-+          }
-+          if (priv->stock_id)
-+            {
-+              g_free (priv->stock_id);
-+              priv->stock_id = NULL;
-+              g_object_notify (object, "stock-id");
-+            }
-+          if (priv->icon_name)
-+            {
-+              g_free (priv->icon_name);
-+              priv->icon_name = NULL;
-+              g_object_notify (object, "icon-name");
-+            }
-+          if (priv->gicon)
-+            {
-+              g_object_unref (priv->gicon);
-+              priv->gicon = NULL;
-+              g_object_notify (object, "gicon");
-+            }
-+        }
-+      break;
-     default:
-       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
-       break;
-@@ -474,16 +533,19 @@ gtk_cell_renderer_pixbuf_create_stock_pixbuf (GtkCellRendererPixbuf *cellpixbuf,
-                                               GtkWidget             *widget)
- {
-   GtkCellRendererPixbufPrivate *priv;
-+  GtkIconSet *icon_set;
-
-   priv = GTK_CELL_RENDERER_PIXBUF_GET_PRIVATE (cellpixbuf);
-
-   if (cellpixbuf->pixbuf)
-     g_object_unref (cellpixbuf->pixbuf);
-
--  cellpixbuf->pixbuf = gtk_widget_render_icon (widget,
--                                               priv->stock_id,
--                                               priv->stock_size,
--                                               priv->stock_detail);
-+  priv->render_scale = gtk_widget_get_scale_factor (widget);
-+  cellpixbuf->pixbuf = gtk_widget_render_icon_scaled (widget,
-+                                                      priv->stock_id,
-+                                                      priv->stock_size,
-+                                                      priv->stock_detail,
-+                                                      &priv->render_scale);
-
-   g_object_notify (G_OBJECT (cellpixbuf), "pixbuf");
- }
-@@ -510,15 +572,24 @@ gtk_cell_renderer_pixbuf_create_themed_pixbuf (GtkCellRendererPixbuf *cellpixbuf
-   icon_theme = gtk_icon_theme_get_for_screen (screen);
-   settings = gtk_settings_get_for_screen (screen);
-
--  if (!gtk_icon_size_lookup_for_settings (settings,
--                                        priv->stock_size,
--                                        &width, &height))
-+  if (!gtk_icon_size_lookup_scaled (settings,
-+                                    priv->stock_size,
-+                                    gdk_window_get_scale_factor (GTK_WIDGET (widget)->window),
-+                                    &width, &height))
-     {
-       g_warning ("Invalid icon size %u\n", priv->stock_size);
-       width = height = 24;
-     }
-
--  if (priv->icon_name)
-+  if (priv->icon_set)
-+    cellpixbuf->pixbuf =
-+      gtk_icon_set_render_icon_scaled (priv->icon_set,
-+                                       widget->style,
-+                                       gtk_widget_get_direction (widget),
-+                                       gtk_widget_get_state (widget),
-+                                       priv->stock_size, widget,
-+                                       NULL, &priv->render_scale);
-+  else if (priv->icon_name)
-     cellpixbuf->pixbuf = gtk_icon_theme_load_icon (icon_theme,
-                                                  priv->icon_name,
-                                                  MIN (width, height),
-@@ -611,14 +682,28 @@ gtk_cell_renderer_pixbuf_get_size (GtkCellRenderer *cell,
-     {
-       if (priv->stock_id)
-       gtk_cell_renderer_pixbuf_create_stock_pixbuf (cellpixbuf, widget);
-+      else if (priv->icon_set)
-+        {
-+          gdouble scale;
-+
-+          scale = gtk_widget_get_scale_factor (widget);
-+          cellpixbuf->pixbuf =
-+            gtk_icon_set_render_icon_scaled (priv->icon_set,
-+                                             widget->style,
-+                                             gtk_widget_get_direction (widget),
-+                                             gtk_widget_get_state (widget),
-+                                             priv->stock_size,
-+                                             widget, priv->stock_detail,
-+                                             &scale);
-+        }
-       else if (priv->icon_name || priv->gicon)
-       gtk_cell_renderer_pixbuf_create_themed_pixbuf (cellpixbuf, widget);
-     }
-
-   if (cellpixbuf->pixbuf)
-     {
--      pixbuf_width  = gdk_pixbuf_get_width (cellpixbuf->pixbuf);
--      pixbuf_height = gdk_pixbuf_get_height (cellpixbuf->pixbuf);
-+      pixbuf_width  = gdk_pixbuf_get_width (cellpixbuf->pixbuf) / priv->render_scale;
-+      pixbuf_height = gdk_pixbuf_get_height (cellpixbuf->pixbuf) / priv->render_scale;
-     }
-   if (cellpixbuf->pixbuf_expander_open)
-     {
-@@ -761,10 +846,14 @@ gtk_cell_renderer_pixbuf_render (GtkCellRenderer      *cell,
-       pixbuf = colorized;
-     }
-
-+  draw_rect.x -= pix_rect.x;
-+  draw_rect.y -= pix_rect.y;
-+
-   cr = gdk_cairo_create (window);
--
--  gdk_cairo_set_source_pixbuf (cr, pixbuf, pix_rect.x, pix_rect.y);
-+  cairo_translate (cr, pix_rect.x, pix_rect.y);
-   gdk_cairo_rectangle (cr, &draw_rect);
-+  cairo_scale (cr, 1 / priv->render_scale, 1 / priv->render_scale);
-+  gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
-   cairo_fill (cr);
-
-   cairo_destroy (cr);
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0063-entry-Use-scaled-icons-on-windows-with-a-scale-facto.patch b/bockbuild/mac-sdk/patches/gtk/0063-entry-Use-scaled-icons-on-windows-with-a-scale-facto.patch
deleted file mode 100644 (file)
index 81c969d..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-From aba260146c099864e69379e31bd3decbf3681817 Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlosg@gnome.org>
-Date: Tue, 12 Feb 2013 14:04:37 +0100
-Subject: [PATCH 63/68] entry: Use scaled icons on windows with a scale factor
-
----
- gtk/gtkentry.c |  184 ++++++++++++++++++++++++++++++++++++++++++++++++++------
- gtk/gtkentry.h |    7 +++
- 2 files changed, 171 insertions(+), 20 deletions(-)
-
-diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
-index 0d16d71..313804e 100644
---- a/gtk/gtkentry.c
-+++ b/gtk/gtkentry.c
-@@ -105,9 +105,11 @@ typedef struct
-   gchar        *stock_id;
-   gchar        *icon_name;
-   GIcon        *gicon;
-+  GtkIconSet   *icon_set;
-
-   GtkTargetList *target_list;
-   GdkDragAction actions;
-+  gdouble render_scale;
- } EntryIconInfo;
-
- struct _GtkEntryPrivate
-@@ -207,6 +209,8 @@ enum {
-   PROP_ICON_NAME_SECONDARY,
-   PROP_GICON_PRIMARY,
-   PROP_GICON_SECONDARY,
-+  PROP_ICON_SET_PRIMARY,
-+  PROP_ICON_SET_SECONDARY,
-   PROP_STORAGE_TYPE_PRIMARY,
-   PROP_STORAGE_TYPE_SECONDARY,
-   PROP_ACTIVATABLE_PRIMARY,
-@@ -1009,7 +1013,21 @@ gtk_entry_class_init (GtkEntryClass *class)
-                                                         P_("GIcon for secondary icon"),
-                                                         G_TYPE_ICON,
-                                                         GTK_PARAM_READWRITE));
--
-+  g_object_class_install_property (gobject_class,
-+                                   PROP_ICON_SET_PRIMARY,
-+                                   g_param_spec_boxed ("primary-icon-set",
-+                                                       P_("Primary icon set"),
-+                                                       P_("GtkIconSet for the primary icon"),
-+                                                       GTK_TYPE_ICON_SET,
-+                                                       GTK_PARAM_READWRITE));
-+  g_object_class_install_property (gobject_class,
-+                                   PROP_ICON_SET_SECONDARY,
-+                                   g_param_spec_boxed ("secondary-icon-set",
-+                                                       P_("Secondary icon set"),
-+                                                       P_("GtkIconSet for the secondary icon"),
-+                                                       GTK_TYPE_ICON_SET,
-+                                                       GTK_PARAM_READWRITE));
-+
-   /**
-    * GtkEntry:primary-icon-storage-type:
-    *
-@@ -1940,6 +1958,18 @@ gtk_entry_set_property (GObject         *object,
-                                      g_value_get_object (value));
-       break;
-
-+    case PROP_ICON_SET_PRIMARY:
-+      gtk_entry_set_icon_from_icon_set (entry,
-+                                        GTK_ENTRY_ICON_PRIMARY,
-+                                        g_value_get_boxed (value));
-+      break;
-+
-+    case PROP_ICON_SET_SECONDARY:
-+      gtk_entry_set_icon_from_icon_set (entry,
-+                                        GTK_ENTRY_ICON_SECONDARY,
-+                                        g_value_get_boxed (value));
-+      break;
-+
-     case PROP_ACTIVATABLE_PRIMARY:
-       gtk_entry_set_icon_activatable (entry,
-                                       GTK_ENTRY_ICON_PRIMARY,
-@@ -2158,6 +2188,18 @@ gtk_entry_get_property (GObject         *object,
-                                                     GTK_ENTRY_ICON_SECONDARY));
-       break;
-
-+    case PROP_ICON_SET_PRIMARY:
-+      g_value_set_boxed (value,
-+                         gtk_entry_get_icon_set (entry,
-+                                                 GTK_ENTRY_ICON_PRIMARY));
-+      break;
-+
-+    case PROP_ICON_SET_SECONDARY:
-+      g_value_set_boxed (value,
-+                         gtk_entry_get_icon_set (entry,
-+                                                 GTK_ENTRY_ICON_SECONDARY));
-+      break;
-+
-     case PROP_STORAGE_TYPE_PRIMARY:
-       g_value_set_enum (value,
-                         gtk_entry_get_icon_storage_type (entry,
-@@ -2334,7 +2376,9 @@ get_icon_width (GtkEntry             *entry,
-   gtk_icon_size_lookup_for_settings (settings, GTK_ICON_SIZE_MENU,
-                                      &menu_icon_width, NULL);
-
--  return MAX (gdk_pixbuf_get_width (icon_info->pixbuf), menu_icon_width);
-+  return MAX (gdk_pixbuf_get_width (icon_info->pixbuf) /
-+              gtk_widget_get_scale_factor (GTK_WIDGET (entry)),
-+              menu_icon_width);
- }
-
- static void
-@@ -3188,6 +3232,7 @@ draw_icon (GtkWidget            *widget,
-   EntryIconInfo *icon_info = priv->icons[icon_pos];
-   GdkPixbuf *pixbuf;
-   gint x, y, width, height;
-+  gdouble window_scale;
-   cairo_t *cr;
-
-   if (!icon_info)
-@@ -3198,8 +3243,9 @@ draw_icon (GtkWidget            *widget,
-   if (icon_info->pixbuf == NULL)
-     return;
-
--  width = gdk_window_get_width (icon_info->window);
--  height = gdk_window_get_height (icon_info->window);
-+  window_scale = gdk_window_get_scale_factor (widget->window);
-+  width = gdk_window_get_width (icon_info->window) / window_scale;
-+  height = gdk_window_get_height (icon_info->window) / window_scale;
-
-   /* size_allocate hasn't been called yet. These are the default values.
-    */
-@@ -3209,20 +3255,20 @@ draw_icon (GtkWidget            *widget,
-   pixbuf = icon_info->pixbuf;
-   g_object_ref (pixbuf);
-
--  if (gdk_pixbuf_get_height (pixbuf) > height)
-+  if (gdk_pixbuf_get_height (pixbuf) > (height * window_scale))
-     {
-       GdkPixbuf *temp_pixbuf;
-       gint scale;
-
--      scale = height - 2 * priv->icon_margin;
-+      scale = (height - 2 * priv->icon_margin) * window_scale;
-       temp_pixbuf = gdk_pixbuf_scale_simple (pixbuf, scale, scale,
-                                              GDK_INTERP_BILINEAR);
-       g_object_unref (pixbuf);
-       pixbuf = temp_pixbuf;
-     }
-
--  x = (width  - gdk_pixbuf_get_width (pixbuf)) / 2;
--  y = (height - gdk_pixbuf_get_height (pixbuf)) / 2;
-+  x = (width  - (gdk_pixbuf_get_width (pixbuf) / window_scale)) / 2;
-+  y = (height - (gdk_pixbuf_get_height (pixbuf) / window_scale)) / 2;
-
-   if (!gtk_widget_is_sensitive (widget) ||
-       icon_info->insensitive)
-@@ -6455,6 +6501,17 @@ gtk_entry_clear (GtkEntry             *entry,
-                        icon_pos == GTK_ENTRY_ICON_PRIMARY ? "primary-icon-gicon" : "secondary-icon-gicon");
-       break;
-
-+    case GTK_IMAGE_ICON_SET:
-+      if (icon_info->icon_set)
-+        {
-+          gtk_icon_set_unref (icon_info->icon_set);
-+          icon_info->icon_set = NULL;
-+        }
-+
-+      g_object_notify (G_OBJECT (entry),
-+                       icon_pos == GTK_ENTRY_ICON_PRIMARY ? "primary-icon-set" : "secondary-icon-set");
-+      break;
-+
-     default:
-       g_assert_not_reached ();
-       break;
-@@ -6494,15 +6551,18 @@ gtk_entry_ensure_pixbuf (GtkEntry             *entry,
-     case GTK_IMAGE_STOCK:
-       state = gtk_widget_get_state (widget);
-       gtk_widget_set_state (widget, GTK_STATE_NORMAL);
--      icon_info->pixbuf = gtk_widget_render_icon (widget,
--                                                  icon_info->stock_id,
--                                                  GTK_ICON_SIZE_MENU,
--                                                  NULL);
-+      icon_info->render_scale = gtk_widget_get_scale_factor (widget);
-+      icon_info->pixbuf = gtk_widget_render_icon_scaled (widget,
-+                                                         icon_info->stock_id,
-+                                                         GTK_ICON_SIZE_MENU,
-+                                                         NULL,
-+                                                         &icon_info->render_scale);
-       if (!icon_info->pixbuf)
--        icon_info->pixbuf = gtk_widget_render_icon (widget,
--                                                    GTK_STOCK_MISSING_IMAGE,
--                                                    GTK_ICON_SIZE_MENU,
--                                                    NULL);
-+        icon_info->pixbuf = gtk_widget_render_icon_scaled (widget,
-+                                                           GTK_STOCK_MISSING_IMAGE,
-+                                                           GTK_ICON_SIZE_MENU,
-+                                                           NULL,
-+                                                           &icon_info->render_scale);
-       gtk_widget_set_state (widget, state);
-       break;
-
-@@ -6514,8 +6574,9 @@ gtk_entry_ensure_pixbuf (GtkEntry             *entry,
-           settings = gtk_settings_get_for_screen (screen);
-
-           gtk_icon_size_lookup_for_settings (settings,
--                                             GTK_ICON_SIZE_MENU,
--                                             &width, &height);
-+                                       GTK_ICON_SIZE_MENU,
-+                                //                                       gdk_window_get_scale_factor (widget->window),
-+                                       &width, &height);
-
-           icon_info->pixbuf = gtk_icon_theme_load_icon (icon_theme,
-                                                         icon_info->icon_name,
-@@ -6543,8 +6604,9 @@ gtk_entry_ensure_pixbuf (GtkEntry             *entry,
-           settings = gtk_settings_get_for_screen (screen);
-
-           gtk_icon_size_lookup_for_settings (settings,
--                                             GTK_ICON_SIZE_MENU,
--                                             &width, &height);
-+                                       GTK_ICON_SIZE_MENU,
-+                                             //gdk_window_get_scale_factor (widget->window),
-+                                       &width, &height);
-
-           info = gtk_icon_theme_lookup_by_gicon (icon_theme,
-                                                  icon_info->gicon,
-@@ -6569,6 +6631,17 @@ gtk_entry_ensure_pixbuf (GtkEntry             *entry,
-         }
-       break;
-
-+    case GTK_IMAGE_ICON_SET:
-+      icon_info->render_scale = gtk_widget_get_scale_factor (widget);
-+      icon_info->pixbuf =
-+        gtk_icon_set_render_icon_scaled (icon_info->icon_set,
-+                                         widget->style,
-+                                         gtk_widget_get_direction (widget),
-+                                         gtk_widget_get_state (widget),
-+                                         GTK_ICON_SIZE_MENU, widget,
-+                                         NULL, &icon_info->render_scale);
-+      break;
-+
-     default:
-       g_assert_not_reached ();
-       break;
-@@ -7847,6 +7920,58 @@ gtk_entry_set_icon_from_gicon (GtkEntry             *entry,
-   g_object_thaw_notify (G_OBJECT (entry));
- }
-
-+void
-+gtk_entry_set_icon_from_icon_set (GtkEntry             *entry,
-+                                  GtkEntryIconPosition  icon_pos,
-+                                  GtkIconSet           *icon_set)
-+{
-+  GtkEntryPrivate *priv;
-+  EntryIconInfo *icon_info;
-+
-+  g_return_if_fail (GTK_IS_ENTRY (entry));
-+  g_return_if_fail (IS_VALID_ICON_POSITION (icon_pos));
-+
-+  priv = GTK_ENTRY_GET_PRIVATE (entry);
-+
-+  if ((icon_info = priv->icons[icon_pos]) == NULL)
-+    icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos);
-+
-+  g_object_freeze_notify (G_OBJECT (entry));
-+
-+  /* need to ref before clearing */
-+  if (icon_set)
-+    gtk_icon_set_ref (icon_set);
-+
-+  gtk_entry_clear (entry, icon_pos);
-+
-+  if (icon_set)
-+    {
-+      icon_info->storage_type = GTK_IMAGE_ICON_SET;
-+      icon_info->icon_set = icon_set;
-+
-+      if (icon_pos == GTK_ENTRY_ICON_PRIMARY)
-+        {
-+          g_object_notify (G_OBJECT (entry), "primary-icon-set");
-+          g_object_notify (G_OBJECT (entry), "primary-icon-storage-type");
-+        }
-+      else
-+        {
-+          g_object_notify (G_OBJECT (entry), "secondary-icon-set");
-+          g_object_notify (G_OBJECT (entry), "secondary-icon-storage-type");
-+        }
-+
-+      if (gtk_widget_get_mapped (GTK_WIDGET (entry)))
-+          gdk_window_show_unraised (icon_info->window);
-+    }
-+
-+  gtk_entry_ensure_pixbuf (entry, icon_pos);
-+
-+  if (gtk_widget_get_visible (GTK_WIDGET (entry)))
-+    gtk_widget_queue_resize (GTK_WIDGET (entry));
-+
-+  g_object_thaw_notify (G_OBJECT (entry));
-+}
-+
- /**
-  * gtk_entry_set_icon_activatable:
-  * @entry: A #GtkEntry
-@@ -8050,6 +8175,25 @@ gtk_entry_get_icon_name (GtkEntry             *entry,
-   return icon_info->storage_type == GTK_IMAGE_ICON_NAME ? icon_info->icon_name : NULL;
- }
-
-+const GtkIconSet *
-+gtk_entry_get_icon_set (GtkEntry             *entry,
-+                        GtkEntryIconPosition  icon_pos)
-+{
-+  GtkEntryPrivate *priv;
-+  EntryIconInfo *icon_info;
-+
-+  g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL);
-+  g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), NULL);
-+
-+  priv = GTK_ENTRY_GET_PRIVATE (entry);
-+  icon_info = priv->icons[icon_pos];
-+
-+  if (!icon_info)
-+    return NULL;
-+
-+  return icon_info->storage_type == GTK_IMAGE_ICON_SET ? icon_info->icon_set : NULL;
-+}
-+
- /**
-  * gtk_entry_set_icon_sensitive:
-  * @entry: A #GtkEntry
-diff --git a/gtk/gtkentry.h b/gtk/gtkentry.h
-index f771e17..0153f49 100644
---- a/gtk/gtkentry.h
-+++ b/gtk/gtkentry.h
-@@ -264,6 +264,9 @@ void           gtk_entry_set_icon_from_icon_name         (GtkEntry             *
- void           gtk_entry_set_icon_from_gicon             (GtkEntry             *entry,
-                                                         GtkEntryIconPosition  icon_pos,
-                                                         GIcon                *icon);
-+void           gtk_entry_set_icon_from_icon_set          (GtkEntry             *entry,
-+                                                        GtkEntryIconPosition  icon_pos,
-+                                                        GtkIconSet           *icon_set);
- GtkImageType gtk_entry_get_icon_storage_type             (GtkEntry             *entry,
-                                                         GtkEntryIconPosition  icon_pos);
- GdkPixbuf*   gtk_entry_get_icon_pixbuf                   (GtkEntry             *entry,
-@@ -274,6 +277,10 @@ const gchar* gtk_entry_get_icon_name                     (GtkEntry             *
-                                                         GtkEntryIconPosition  icon_pos);
- GIcon*       gtk_entry_get_icon_gicon                    (GtkEntry             *entry,
-                                                         GtkEntryIconPosition  icon_pos);
-+const GtkIconSet *
-+             gtk_entry_get_icon_set                      (GtkEntry             *entry,
-+                                                          GtkEntryIconPosition  icon_pos);
-+
- void         gtk_entry_set_icon_activatable              (GtkEntry             *entry,
-                                                         GtkEntryIconPosition  icon_pos,
-                                                         gboolean              activatable);
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0064-gdk-Lookup-double-scaled-variants-on-pixbufs.patch b/bockbuild/mac-sdk/patches/gtk/0064-gdk-Lookup-double-scaled-variants-on-pixbufs.patch
deleted file mode 100644 (file)
index 2aeac73..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-From 67197e562dbdfdbd518d1e8ffb4746af41c3f731 Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlosg@gnome.org>
-Date: Fri, 17 May 2013 15:58:15 +0200
-Subject: [PATCH 64/68] gdk: Lookup double scaled variants on pixbufs
-
-if the pixbuf contains its @2x variant as gobject data and
-the display has a doubled scale factor, use such pixbuf
-for rendering
----
- gdk/gdkcairo.c |   36 ++++++++++++++++++++++++++++++++++--
- gdk/gdkdraw.c  |   18 ++++++++++++++++++
- 2 files changed, 52 insertions(+), 2 deletions(-)
-
-diff --git a/gdk/gdkcairo.c b/gdk/gdkcairo.c
-index c423871..9aab5e1 100644
---- a/gdk/gdkcairo.c
-+++ b/gdk/gdkcairo.c
-@@ -23,6 +23,8 @@
- #include "gdkregion-generic.h"
- #include "gdkalias.h"
-
-+static const cairo_user_data_key_t gdk_cairo_drawable_pointer;
-+
- static void
- gdk_ensure_surface_flush (gpointer surface)
- {
-@@ -58,6 +60,7 @@ gdk_cairo_create (GdkDrawable *drawable)
-
-   surface = _gdk_drawable_ref_cairo_surface (drawable);
-   cr = cairo_create (surface);
-+  cairo_set_user_data (cr, &gdk_cairo_drawable_pointer, drawable, NULL);
-
-   if (GDK_DRAWABLE_GET_CLASS (drawable)->set_cairo_clip)
-     GDK_DRAWABLE_GET_CLASS (drawable)->set_cairo_clip (drawable, cr);
-@@ -202,7 +205,32 @@ gdk_cairo_set_source_pixbuf (cairo_t         *cr,
-   cairo_format_t format;
-   cairo_surface_t *surface;
-   static const cairo_user_data_key_t key;
--  int j;
-+  GdkWindow *window;
-+  cairo_pattern_t *pattern;
-+  cairo_matrix_t matrix;
-+  int j, scale = 1;
-+
-+  window = cairo_get_user_data (cr, &gdk_cairo_drawable_pointer);
-+
-+  if (window &&
-+      (int) gdk_window_get_scale_factor (window) == 2)
-+    {
-+      GdkPixbuf *scaled_pixbuf;
-+
-+      scaled_pixbuf = g_object_get_data (G_OBJECT (pixbuf),
-+                                         "gdk-pixbuf-2x-variant");
-+      if (scaled_pixbuf)
-+        {
-+          scale = 2;
-+          pixbuf = scaled_pixbuf;
-+        }
-+    }
-+
-+  width = gdk_pixbuf_get_width (pixbuf);
-+  height = gdk_pixbuf_get_height (pixbuf);
-+  gdk_pixels = gdk_pixbuf_get_pixels (pixbuf);
-+  gdk_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
-+  n_channels = gdk_pixbuf_get_n_channels (pixbuf);
-
-   if (n_channels == 3)
-     format = CAIRO_FORMAT_RGB24;
-@@ -274,7 +302,11 @@ gdk_cairo_set_source_pixbuf (cairo_t         *cr,
-       cairo_pixels += cairo_stride;
-     }
-
--  cairo_set_source_surface (cr, surface, pixbuf_x, pixbuf_y);
-+  cairo_set_source_surface (cr, surface, 0, 0);
-+  pattern = cairo_get_source (cr);
-+  cairo_matrix_init_scale (&matrix, scale, scale);
-+  cairo_matrix_translate (&matrix, -pixbuf_x, -pixbuf_y);
-+  cairo_pattern_set_matrix (pattern, &matrix);
-   cairo_surface_destroy (surface);
- }
-
-diff --git a/gdk/gdkdraw.c b/gdk/gdkdraw.c
-index 932de97..6ebd8c7 100644
---- a/gdk/gdkdraw.c
-+++ b/gdk/gdkdraw.c
-@@ -819,6 +819,8 @@ gdk_draw_pixbuf (GdkDrawable     *drawable,
-                  gint             x_dither,
-                  gint             y_dither)
- {
-+  GdkPixbuf *scaled_pixbuf;
-+
-   g_return_if_fail (GDK_IS_DRAWABLE (drawable));
-   g_return_if_fail (gc == NULL || GDK_IS_GC (gc));
-   g_return_if_fail (GDK_IS_PIXBUF (pixbuf));
-@@ -826,6 +828,22 @@ gdk_draw_pixbuf (GdkDrawable     *drawable,
-   if (width == 0 || height == 0)
-     return;
-
-+  scaled_pixbuf = g_object_get_data (G_OBJECT (pixbuf),
-+                                     "gdk-pixbuf-2x-variant");
-+
-+  if (scaled_pixbuf && GDK_IS_WINDOW (drawable) &&
-+      (int) gdk_window_get_scale_factor (GDK_WINDOW (drawable)) == 2)
-+    {
-+      cairo_t *cr;
-+
-+      cr = gdk_cairo_create (GDK_WINDOW (drawable));
-+      gdk_cairo_set_source_pixbuf (cr, pixbuf, dest_x, dest_y);
-+      cairo_paint (cr);
-+
-+      cairo_destroy (cr);
-+      return;
-+    }
-+
-   if (width == -1)
-     width = gdk_pixbuf_get_width (pixbuf);
-   if (height == -1)
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0065-Make-usual-calls-to-get-a-GdkPixbuf-attach-a-2x-vari.patch b/bockbuild/mac-sdk/patches/gtk/0065-Make-usual-calls-to-get-a-GdkPixbuf-attach-a-2x-vari.patch
deleted file mode 100644 (file)
index 665c950..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-From 318b7822a8a737a826aab50e1a829a6b59c9704f Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlosg@gnome.org>
-Date: Fri, 14 Jun 2013 15:47:44 +0200
-Subject: [PATCH 65/68] Make usual calls to get a GdkPixbuf attach a 2x
- variant if available
-
----
- gtk/gtkiconfactory.c |   24 ++++++++++++++++++---
- gtk/gtkicontheme.c   |   57 +++++++++++++++++++++++++++++++++++++++++++++-----
- gtk/gtkwidget.c      |   20 ++++++++++++++----
- 3 files changed, 89 insertions(+), 12 deletions(-)
-
-diff --git a/gtk/gtkiconfactory.c b/gtk/gtkiconfactory.c
-index ab9a212..291c05e 100644
---- a/gtk/gtkiconfactory.c
-+++ b/gtk/gtkiconfactory.c
-@@ -1731,14 +1731,32 @@ gtk_icon_set_render_icon (GtkIconSet        *icon_set,
-                           GtkWidget         *widget,
-                           const char        *detail)
- {
-+  GdkPixbuf *pixbuf, *variant;
-   gdouble scale = 1;
-
-   g_return_val_if_fail (icon_set != NULL, NULL);
-   g_return_val_if_fail (style == NULL || GTK_IS_STYLE (style), NULL);
-
--  return gtk_icon_set_render_icon_internal (icon_set, style, direction,
--                                            state, size, widget, detail,
--                                            &scale);
-+  pixbuf = gtk_icon_set_render_icon_internal (icon_set, style, direction,
-+                                              state, size, widget, detail,
-+                                              &scale);
-+  if (pixbuf && scale == 1)
-+    {
-+      scale = 2;
-+      variant = gtk_icon_set_render_icon_internal (icon_set, style, direction,
-+                                                   state, size, widget, detail,
-+                                                   &scale);
-+      if (variant &&
-+        gdk_pixbuf_get_width (variant) > gdk_pixbuf_get_width (pixbuf))
-+        g_object_set_data_full (G_OBJECT (pixbuf),
-+                                "gdk-pixbuf-2x-variant",
-+                                variant,
-+                                (GDestroyNotify) g_object_unref);
-+      else if (variant)
-+        g_object_unref (variant);
-+    }
-+
-+  return pixbuf;
- }
-
- GdkPixbuf*
-diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
-index 500f0ab..0e42adc 100644
---- a/gtk/gtkicontheme.c
-+++ b/gtk/gtkicontheme.c
-@@ -1403,6 +1403,8 @@ gtk_icon_theme_lookup_icon (GtkIconTheme       *icon_theme,
-                           gint                size,
-                           GtkIconLookupFlags  flags)
- {
-+  GtkIconInfo *retval, *variant;
-+
-   g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
-   g_return_val_if_fail (icon_name != NULL, NULL);
-   g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
-@@ -1411,8 +1413,22 @@ gtk_icon_theme_lookup_icon (GtkIconTheme       *icon_theme,
-   GTK_NOTE (ICONTHEME,
-           g_print ("gtk_icon_theme_lookup_icon %s\n", icon_name));
-
--  return gtk_icon_theme_lookup_icon_for_scale (icon_theme, icon_name,
--                                               size, 1, flags);
-+  retval = gtk_icon_theme_lookup_icon_for_scale (icon_theme, icon_name,
-+                                                 size, 1, flags);
-+
-+  variant = gtk_icon_theme_lookup_icon_for_scale (icon_theme, icon_name,
-+                                                  size, 2, flags);
-+  if (retval && variant &&
-+      retval->pixbuf && variant->pixbuf &&
-+      gdk_pixbuf_get_width (variant->pixbuf) > gdk_pixbuf_get_width (retval->pixbuf))
-+    g_object_set_data_full (G_OBJECT (retval->pixbuf),
-+                            "gdk-pixbuf-2x-variant",
-+                            g_object_ref (variant->pixbuf),
-+                            (GDestroyNotify) g_object_unref);
-+  if (variant)
-+    gtk_icon_info_free (variant);
-+
-+  return retval;
- }
-
- GtkIconInfo *
-@@ -1501,12 +1517,27 @@ gtk_icon_theme_choose_icon (GtkIconTheme       *icon_theme,
-                           gint                size,
-                           GtkIconLookupFlags  flags)
- {
-+  GtkIconInfo *retval, *variant;
-+
-   g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
-   g_return_val_if_fail (icon_names != NULL, NULL);
-   g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
-                       (flags & GTK_ICON_LOOKUP_FORCE_SVG) == 0, NULL);
-
--  return choose_icon (icon_theme, icon_names, size, 1, flags);
-+  retval = choose_icon (icon_theme, icon_names, size, 1, flags);
-+  variant = choose_icon (icon_theme, icon_names, size, 2, flags);
-+
-+  if (retval && variant &&
-+      retval->pixbuf && variant->pixbuf &&
-+      gdk_pixbuf_get_width (variant->pixbuf) > gdk_pixbuf_get_width (retval->pixbuf))
-+    g_object_set_data_full (G_OBJECT (retval->pixbuf),
-+                            "gdk-pixbuf-2x-variant",
-+                            g_object_ref (variant->pixbuf),
-+                            (GDestroyNotify) g_object_unref);
-+  if (variant)
-+    gtk_icon_info_free (variant);
-+
-+  return retval;
- }
-
- GtkIconInfo *
-@@ -1569,14 +1600,30 @@ gtk_icon_theme_load_icon (GtkIconTheme         *icon_theme,
-                         GtkIconLookupFlags    flags,
-                         GError              **error)
- {
-+  GdkPixbuf *pixbuf, *variant;
-+
-   g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
-   g_return_val_if_fail (icon_name != NULL, NULL);
-   g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
-                       (flags & GTK_ICON_LOOKUP_FORCE_SVG) == 0, NULL);
-   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
--  return gtk_icon_theme_load_icon_for_scale (icon_theme, icon_name,
--                                             size, 1, flags, error);
-+  pixbuf = gtk_icon_theme_load_icon_for_scale (icon_theme, icon_name,
-+                                               size, 1, flags, error);
-+
-+  variant = gtk_icon_theme_load_icon_for_scale (icon_theme, icon_name,
-+                                               size, 2, flags, NULL);
-+
-+  if (pixbuf && variant &&
-+      gdk_pixbuf_get_width (variant) > gdk_pixbuf_get_width (pixbuf))
-+    g_object_set_data_full (G_OBJECT (pixbuf),
-+                            "gdk-pixbuf-2x-variant",
-+                            g_object_ref (variant),
-+                            (GDestroyNotify) g_object_unref);
-+  if (variant)
-+    g_object_unref (variant);
-+
-+  return pixbuf;
- }
-
- GdkPixbuf *
-diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
-index f093c39..464cb59 100644
---- a/gtk/gtkwidget.c
-+++ b/gtk/gtkwidget.c
-@@ -7477,15 +7477,16 @@ gtk_widget_render_icon (GtkWidget      *widget,
-                         GtkIconSize     size,
-                         const gchar    *detail)
- {
-+  GdkPixbuf *retval, *variant;
-   GtkIconSet *icon_set;
--  GdkPixbuf *retval;
--
-+  gdouble scale = 2;
-+
-   g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
-   g_return_val_if_fail (stock_id != NULL, NULL);
-   g_return_val_if_fail (size > GTK_ICON_SIZE_INVALID || size == -1, NULL);
--
-+
-   gtk_widget_ensure_style (widget);
--
-+
-   icon_set = gtk_style_lookup_icon_set (widget->style, stock_id);
-
-   if (icon_set == NULL)
-@@ -7499,6 +7500,17 @@ gtk_widget_render_icon (GtkWidget      *widget,
-                                      widget,
-                                      detail);
-
-+  variant = gtk_icon_set_render_icon_scaled (icon_set, widget->style,
-+                                             gtk_widget_get_direction (widget),
-+                                             gtk_widget_get_state (widget),
-+                                             size, widget, detail, &scale);
-+
-+  if (variant)
-+    g_object_set_data_full (G_OBJECT (retval),
-+                            "gdk-pixbuf-2x-variant",
-+                            variant,
-+                            (GDestroyNotify) g_object_unref);
-+
-   return retval;
- }
-
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0066-cellrendererpixbuf-let-2x-variants-go-through-pixel-.patch b/bockbuild/mac-sdk/patches/gtk/0066-cellrendererpixbuf-let-2x-variants-go-through-pixel-.patch
deleted file mode 100644 (file)
index 1d41e20..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-From 0f14c053a91185715f276dffe286698e0c3b43ba Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlosg@gnome.org>
-Date: Fri, 28 Jun 2013 19:35:02 +0200
-Subject: [PATCH 66/68] cellrendererpixbuf: let 2x variants go through
- pixel-mangling code
-
----
- gtk/gtkcellrendererpixbuf.c |   26 ++++++++++++++++++++++++--
- 1 file changed, 24 insertions(+), 2 deletions(-)
-
-diff --git a/gtk/gtkcellrendererpixbuf.c b/gtk/gtkcellrendererpixbuf.c
-index 7c767b6..5969792 100644
---- a/gtk/gtkcellrendererpixbuf.c
-+++ b/gtk/gtkcellrendererpixbuf.c
-@@ -614,8 +614,8 @@ gtk_cell_renderer_pixbuf_create_themed_pixbuf (GtkCellRendererPixbuf *cellpixbuf
- }
-
- static GdkPixbuf *
--create_colorized_pixbuf (GdkPixbuf *src,
--                       GdkColor  *new_color)
-+create_colorized_pixbuf_single (GdkPixbuf *src,
-+                              GdkColor  *new_color)
- {
-   gint i, j;
-   gint width, height, has_alpha, src_row_stride, dst_row_stride;
-@@ -659,6 +659,28 @@ create_colorized_pixbuf (GdkPixbuf *src,
-   return dest;
- }
-
-+static GdkPixbuf *
-+create_colorized_pixbuf (GdkPixbuf *src,
-+                       GdkColor  *new_color)
-+{
-+  GdkPixbuf *colorized, *variant, *colorized_variant;
-+
-+  colorized = create_colorized_pixbuf_single (src, new_color);
-+
-+  variant = g_object_get_data (G_OBJECT (src),
-+                               "gdk-pixbuf-2x-variant");
-+
-+  if (colorized && variant)
-+    {
-+      colorized_variant = create_colorized_pixbuf_single (variant, new_color);
-+      g_object_set_data_full (G_OBJECT (colorized),
-+                              "gdk-pixbuf-2x-variant",
-+                              colorized_variant,
-+                              (GDestroyNotify) g_object_unref);
-+    }
-+
-+  return colorized;
-+}
-
- static void
- gtk_cell_renderer_pixbuf_get_size (GtkCellRenderer *cell,
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0067-quartz-Make-event-loop-deal-with-recursive-poll-invo.patch b/bockbuild/mac-sdk/patches/gtk/0067-quartz-Make-event-loop-deal-with-recursive-poll-invo.patch
deleted file mode 100644 (file)
index a7ae3f2..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-From 5d0dfb203a4945eff28ad1696647b19dd0ef10e5 Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Mon, 8 Jul 2013 12:04:04 +0200
-Subject: [PATCH 67/68] quartz: Make event loop deal with recursive poll
- invocations
-
-This patch addresses a number of problems with the recursion in
-poll_func() that happens on OS X. Firstly, autorelease pool refreshes
-are done from prepare and only if we are at the base level of *both*
-main loops and not recursing in poll. This first part incorporates
-suggestions from Daniel Sabo and John Ralls.
-
-Secondly, a mechanism is implemented to detect if poll has been
-called recursively. This is used to discard file descriptor state
-at the base level, retrieved before possibly recursing (through the
-NSApp get next event).
----
- gdk/quartz/gdkeventloop-quartz.c |  106 ++++++++++++++++++++++++++++----------
- 1 file changed, 78 insertions(+), 28 deletions(-)
-
-diff --git a/gdk/quartz/gdkeventloop-quartz.c b/gdk/quartz/gdkeventloop-quartz.c
-index 224d84c..36c716a 100644
---- a/gdk/quartz/gdkeventloop-quartz.c
-+++ b/gdk/quartz/gdkeventloop-quartz.c
-@@ -168,6 +168,12 @@ static pthread_cond_t select_thread_cond = PTHREAD_COND_INITIALIZER;
- static GPollFD *current_pollfds;
- static guint current_n_pollfds;
-
-+/* We maintain serial numbers for calls to the start function. Because we
-+ * only test for equality of this number (and not smaller/greater than)
-+ * no special handling is needed for wrap around.
-+ */
-+static guint select_thread_start_serial = 0;
-+
- /* These are the file descriptors that the select thread should pick
-  * up and start polling when it has a chance.
-  */
-@@ -399,6 +405,8 @@ select_thread_start_poll (GPollFD *ufds,
-   gint poll_fd_index = -1;
-   gint i;
-
-+  select_thread_start_serial++;
-+
-   for (i = 0; i < nfds; i++)
-     if (ufds[i].fd == -1)
-       {
-@@ -703,15 +721,33 @@ poll_func (GPollFD *ufds,
-   NSEvent *event;
-   NSDate *limit_date;
-   gint n_ready;
-+  guint current_select_thread_serial;
-
--  static GPollFD *last_ufds;
-+  /* Maintain current poll parameters as static parameters. On recursive
-+   * calls to poll, we update the values. This way, if the poll array
-+   * is updated in an recursive call, we can still access the new array
-+   * when the recursion is wound down.
-+   *
-+   * The ufds value that is pushed in is allocated in g_main_context_iterate()
-+   * and is only reallocated for enlargement of this array. The array thus
-+   * never shrinks.
-+   */
-+  static GPollFD *current_ufds = NULL;
-+  static int current_nfds = 0;
-
--  last_ufds = ufds;
-+  current_ufds = ufds;
-+  current_nfds = nfds;
-
-   n_ready = select_thread_start_poll (ufds, nfds, timeout_);
-   if (n_ready > 0)
-     timeout_ = 0;
-
-+  /* Using this serial number, we can check below whether the select
-+   * thread was started/collected in a recursive invocation of this
-+   * function.
-+   */
-+  current_select_thread_serial = select_thread_start_serial;
-+
-   if (timeout_ == -1)
-     limit_date = [NSDate distantFuture];
-   else if (timeout_ == 0)
-@@ -726,17 +762,31 @@ poll_func (GPollFD *ufds,
-                                dequeue: YES];
-   getting_events--;
-
--  /* We check if last_ufds did not change since the time this function was
--   * called. It is possible that a recursive main loop (and thus recursive
--   * invocation of this poll function) is triggered while in
--   * nextEventMatchingMask:. If during that time new fds are added,
--   * the cached fds array might be replaced in g_main_context_iterate().
--   * So, we should avoid accessing the old fd array (still pointed at by
--   * ufds) here in that case, since it might have been freed. We avoid this
--   * by not calling the collect stage.
--   */
--  if (last_ufds == ufds && n_ready < 0)
--    n_ready = select_thread_collect_poll (ufds, nfds);
-+  /* Note that, from this point onwards, ufds might point to freed memory! */
-+
-+  if (current_select_thread_serial == select_thread_start_serial)
-+    {
-+      if (n_ready < 0)
-+        n_ready = select_thread_collect_poll (current_ufds, nfds);
-+
-+      /* Nothing should be done in case no poll func recursion occurred
-+       * and n_ready > 0.
-+       */
-+    }
-+  else
-+    {
-+      /* In this case, a recursive invocation of the poll function has
-+       * collected results from the select thread. We clear the ufds
-+       * values so that stale poll results are not returned. In case
-+       * we did not receive results from start poll above, we also
-+       * set n_ready to zero.
-+       */
-+      int i;
-+
-+      n_ready = 0;
-+      for (i = 0; i < nfds; i++)
-+        current_ufds[i].revents = 0;
-+    }
-
-   if (event &&
-       [event type] == NSApplicationDefined &&
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0068-nsview-implement-a-few-text-view-command-accelerator.patch b/bockbuild/mac-sdk/patches/gtk/0068-nsview-implement-a-few-text-view-command-accelerator.patch
deleted file mode 100644 (file)
index 4f61fa1..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-From da200e6664615a5ef9e89d0a295aa435f60522c9 Mon Sep 17 00:00:00 2001
-From: Michael Natterer <mitch@gimp.org>
-Date: Fri, 26 Jul 2013 14:48:57 +0200
-Subject: [PATCH 68/68] nsview: implement a few text view command accelerators
- manually
-
-so cut, copy, paste and select all work.
----
- gtk/gtknsview.c |   50 ++++++++++++++++++++++++++++++++++++++++++++------
- 1 file changed, 44 insertions(+), 6 deletions(-)
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index 3b30d3b..d5eb307 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -664,14 +664,52 @@ gtk_ns_view_key_press (GtkWidget   *widget,
- {
-   GtkNSView *ns_view = GTK_NS_VIEW (widget);
-   NSEvent *nsevent = gdk_quartz_event_get_nsevent ((GdkEvent *) event);
--  NSWindow *ns_window;
-
-   if (gtk_ns_view_forward_event (widget, event))
-     {
--      ns_window = [ns_view->priv->view window];
--      [ns_window sendEvent:nsevent];
-+      NSWindow *ns_window = [ns_view->priv->view window];
-+      NSResponder *responder = [ns_window firstResponder];
-
--      return TRUE;
-+      if ([responder isKindOfClass: [NSTextView class]] &&
-+          (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK |
-+                           GDK_MOD1_MASK | GDK_MOD2_MASK)) == GDK_MOD2_MASK)
-+        {
-+          NSTextView *text_view = (NSTextView *) responder;
-+          NSRange range = [text_view selectedRange];
-+          gboolean has_selection = range.length > 0;
-+
-+          switch (event->keyval)
-+            {
-+            case GDK_KEY_c: /* copy */
-+              if (has_selection)
-+                [text_view copy: text_view];
-+              return TRUE;
-+
-+            case GDK_KEY_x: /* cut */
-+              if (has_selection)
-+                [text_view cut: text_view];
-+              return TRUE;
-+
-+            case GDK_KEY_v: /* paste */
-+              [text_view paste: text_view];
-+              return TRUE;
-+
-+            case GDK_KEY_a: /* all */
-+              range.location = 0;
-+              range.length = [[text_view string] length];
-+              [text_view setSelectedRange: range];
-+              return TRUE;
-+
-+            default:
-+              break;
-+            }
-+        }
-+      else
-+        {
-+          [ns_window sendEvent:nsevent];
-+
-+          return TRUE;
-+        }
-     }
-
-   return GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->key_press_event (widget, event);
-@@ -683,11 +721,11 @@ gtk_ns_view_key_release (GtkWidget   *widget,
- {
-   GtkNSView *ns_view = GTK_NS_VIEW (widget);
-   NSEvent *nsevent = gdk_quartz_event_get_nsevent ((GdkEvent *) event);
--  NSWindow *ns_window;
-
-   if (gtk_ns_view_forward_event (widget, event))
-     {
--      ns_window = [ns_view->priv->view window];
-+      NSWindow *ns_window = [ns_view->priv->view window];
-+
-       [ns_window sendEvent:nsevent];
-
-       return TRUE;
---
-1.7.10.2 (Apple Git-33)
diff --git a/bockbuild/mac-sdk/patches/gtk/0069-menu-scrolling.patch b/bockbuild/mac-sdk/patches/gtk/0069-menu-scrolling.patch
deleted file mode 100644 (file)
index 0d01982..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
-index fc25098..de9a4b0 100644
---- a/gtk/gtkmenu.c
-+++ b/gtk/gtkmenu.c
-@@ -55,6 +55,7 @@
- #define MENU_SCROLL_FAST_ZONE  8
- #define MENU_SCROLL_TIMEOUT1  50
- #define MENU_SCROLL_TIMEOUT2  20
-+#define GTK_SCROLL_STEP_SMOOTH 2
-
- #define ATTACH_INFO_KEY "gtk-menu-child-attach-info-key"
- #define ATTACHED_MENUS "gtk-attached-menus"
-@@ -3504,17 +3505,25 @@ gtk_menu_scroll (GtkWidget     *widget,
-                GdkEventScroll *event)
- {
-   GtkMenu *menu = GTK_MENU (widget);
-+  gdouble dx, dy;
-
--  switch (event->direction)
-+  if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &dx, &dy))
-     {
--    case GDK_SCROLL_RIGHT:
--    case GDK_SCROLL_DOWN:
--      gtk_menu_scroll_by (menu, MENU_SCROLL_STEP2);
--      break;
--    case GDK_SCROLL_LEFT:
--    case GDK_SCROLL_UP:
--      gtk_menu_scroll_by (menu, - MENU_SCROLL_STEP2);
--      break;
-+      gtk_menu_scroll_by (menu, GTK_SCROLL_STEP_SMOOTH * dy);
-+    }
-+  else
-+    {
-+      switch (event->direction)
-+        {
-+        case GDK_SCROLL_RIGHT:
-+        case GDK_SCROLL_DOWN:
-+          gtk_menu_scroll_by (menu, MENU_SCROLL_STEP2);
-+          break;
-+        case GDK_SCROLL_LEFT:
-+        case GDK_SCROLL_UP:
-+          gtk_menu_scroll_by (menu, - MENU_SCROLL_STEP2);
-+          break;
-+        }
-     }
-
-   return TRUE;
diff --git a/bockbuild/mac-sdk/patches/gtk/0070-tooltips-focus.patch b/bockbuild/mac-sdk/patches/gtk/0070-tooltips-focus.patch
deleted file mode 100644 (file)
index 0e661c4..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c
-index 9918165..0efe4ff 100644
---- a/gtk/gtktooltip.c
-+++ b/gtk/gtktooltip.c
-@@ -98,6 +98,9 @@ static void       gtk_tooltip_display_closed       (GdkDisplay      *display,
- static void       gtk_tooltip_set_last_window      (GtkTooltip      *tooltip,
-                                                   GdkWindow       *window);
- static void       update_shape                     (GtkTooltip      *tooltip);
-+static void       toplevel_focus_out               (GtkWidget       *widget,
-+                                                    GdkEventFocus   *event,
-+                                                    GtkTooltip      *tooltip);
-
-
- G_DEFINE_TYPE (GtkTooltip, gtk_tooltip, G_TYPE_OBJECT);
-@@ -1169,6 +1172,7 @@ gtk_tooltip_show_tooltip (GdkDisplay *display)
-   GdkScreen *screen;
-
-   GdkWindow *window;
-+  GtkWidget *toplevel;
-   GtkWidget *tooltip_widget;
-   GtkWidget *pointer_widget;
-   GtkTooltip *tooltip;
-@@ -1220,6 +1224,11 @@ gtk_tooltip_show_tooltip (GdkDisplay *display)
-       tooltip->current_window = GTK_WINDOW (GTK_TOOLTIP (tooltip)->window);
-     }
-
-+  toplevel = gtk_widget_get_toplevel (GTK_WIDGET (tooltip_widget));
-+  g_signal_connect (toplevel, "focus-out-event",
-+                    G_CALLBACK (toplevel_focus_out),
-+                    tooltip);
-+
-   screen = gtk_widget_get_screen (tooltip_widget);
-
-   /* FIXME: should use tooltip->current_window iso tooltip->window */
-@@ -1251,6 +1260,8 @@ gtk_tooltip_show_tooltip (GdkDisplay *display)
- static void
- gtk_tooltip_hide_tooltip (GtkTooltip *tooltip)
- {
-+  GtkWidget *toplevel;
-+
-   if (!tooltip)
-     return;
-
-@@ -1263,6 +1274,10 @@ gtk_tooltip_hide_tooltip (GtkTooltip *tooltip)
-   if (!GTK_TOOLTIP_VISIBLE (tooltip))
-     return;
-
-+  toplevel = gtk_widget_get_toplevel (tooltip->tooltip_widget);
-+  if (toplevel)
-+    g_signal_handlers_disconnect_by_func (toplevel, G_CALLBACK (toplevel_focus_out), tooltip);
-+
-   tooltip->tooltip_widget = NULL;
-
-   if (!tooltip->keyboard_mode_enabled)
-@@ -1302,6 +1317,14 @@ gtk_tooltip_hide_tooltip (GtkTooltip *tooltip)
-     }
- }
-
-+static void
-+toplevel_focus_out (GtkWidget    *widget,
-+                    GdkEventFocus *event,
-+                    GtkTooltip    *tooltip)
-+{
-+  gtk_tooltip_hide_tooltip (tooltip);
-+}
-+
- static gint
- tooltip_popup_timeout (gpointer data)
- {
diff --git a/bockbuild/mac-sdk/patches/gtk/0071-light-and-dark-overlay-scrollbars.patch b/bockbuild/mac-sdk/patches/gtk/0071-light-and-dark-overlay-scrollbars.patch
deleted file mode 100644 (file)
index 9c4f7de..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index a643b7d..02920ce 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -282,6 +282,10 @@ static gboolean gtk_scrolled_window_calculate_velocity  (GtkScrolledWindow *scro
-                                                          GdkEvent          *event);
- static void gtk_scrolled_window_init_overlay_scrollbars (GtkScrolledWindow *window);
-
-+static void gtk_scrolled_window_style_changed (GtkWidget  *widget,
-+                                             GParamSpec *property,
-+                                             gpointer    user_data);
-+static void update_overlay_scrollbar_color (GtkWidget *widget);
-
- static guint signals[LAST_SIGNAL] = {0};
-
-@@ -1149,7 +1153,7 @@ gtk_scrolled_window_set_property (GObject      *object,
-                                 GParamSpec   *pspec)
- {
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (object);
--
-+
-   switch (prop_id)
-     {
-     case PROP_HADJUSTMENT:
-@@ -1457,7 +1461,6 @@ gtk_scrolled_window_expose (GtkWidget      *widget,
-                           GdkEventExpose *event)
- {
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
--  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (widget);
-
-   if (gtk_widget_is_drawable (widget))
-     {
-@@ -3085,6 +3088,11 @@ gtk_scrolled_window_add (GtkContainer *container,
-   bin->child = child;
-   gtk_widget_set_parent (child, GTK_WIDGET (bin));
-
-+  g_signal_connect (scrolled_window,
-+                  "notify::style",
-+                  G_CALLBACK (gtk_scrolled_window_style_changed),
-+                  NULL);
-+
-   /* this is a temporary message */
-   if (!gtk_widget_set_scroll_adjustments (child,
-                                           gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
-@@ -3224,6 +3232,43 @@ _gtk_scrolled_window_get_scrollbar_spacing (GtkScrolledWindow *scrolled_window)
- }
-
- static void
-+gtk_scrolled_window_style_changed (GtkWidget  *widget,
-+                                 GParamSpec *property,
-+                                 gpointer    user_data)
-+{
-+  update_overlay_scrollbar_color (widget);
-+}
-+
-+static void
-+update_overlay_scrollbar_color (GtkWidget *widget)
-+{
-+  GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (widget);
-+  GtkStyle *style;
-+  GdkColor c;
-+  gdouble r, g, b;
-+  gfloat cc;
-+  gint brightness;
-+
-+  style = gtk_widget_get_style (widget);
-+  c = style->bg[GTK_STATE_NORMAL];
-+
-+  r = (gdouble)c.red;
-+  g = (gdouble)c.green;
-+  b = (gdouble)c.blue;
-+
-+  brightness = (int)(sqrt (r * r * 0.241 +
-+                         g * g * 0.691 +
-+                         b * b * 0.068) / 256.0);
-+
-+  cc = brightness < 130 ? 1.0 : 0.0;
-+
-+  [priv->vbar_layer setBackgroundColor: CGColorCreateGenericRGB (cc, cc, cc, 0.5)];
-+  [priv->vslider_layer setBackgroundColor: CGColorCreateGenericRGB (cc, cc, cc, 1.0)];
-+  [priv->hbar_layer setBackgroundColor: CGColorCreateGenericRGB (cc, cc, cc, 0.5)];
-+  [priv->hslider_layer setBackgroundColor: CGColorCreateGenericRGB (cc, cc, cc, 1.0)];
-+}
-+
-+static void
- gtk_scrolled_window_realize (GtkWidget *widget)
- {
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-@@ -3313,21 +3358,22 @@ gtk_scrolled_window_realize (GtkWidget *widget)
-   parent_layer = [layer_view layer];
-
-   priv->vbar_layer = [[CALayer layer] retain];
--  priv->vbar_layer.backgroundColor = CGColorCreateGenericRGB (0.0, 0.0, 0.0, 0.5);
-   priv->vbar_layer.hidden = YES;
-
-   priv->vslider_layer = [[CALayer layer] retain];
--  priv->vslider_layer.backgroundColor = CGColorCreateGenericRGB (0.0, 0.0, 0.0, 1.0);
-   priv->vslider_layer.hidden = YES;
-
-   priv->hbar_layer = [[CALayer layer] retain];
--  priv->hbar_layer.backgroundColor = CGColorCreateGenericRGB (0.0, 0.0, 0.0, 0.5);
-   priv->hbar_layer.hidden = YES;
-
-   priv->hslider_layer = [[CALayer layer] retain];
--  priv->hslider_layer.backgroundColor = CGColorCreateGenericRGB (0.0, 0.0, 0.0, 1.0);
-   priv->hslider_layer.hidden = YES;
-
-+  priv->vbar_layer.backgroundColor = CGColorCreateGenericRGB (0, 0, 0, 0.5);
-+  priv->vslider_layer.backgroundColor = CGColorCreateGenericRGB (0, 0, 0, 1.0);
-+  priv->hbar_layer.backgroundColor = CGColorCreateGenericRGB (0, 0, 0, 0.5);
-+  priv->hslider_layer.backgroundColor = CGColorCreateGenericRGB (0, 0, 0, 1.0);
-+
-   [parent_layer addSublayer:priv->vbar_layer];
-   [parent_layer addSublayer:priv->vslider_layer];
diff --git a/bockbuild/mac-sdk/patches/gtk/0072-let-global-keyboard-shortcuts-pass-through.patch b/bockbuild/mac-sdk/patches/gtk/0072-let-global-keyboard-shortcuts-pass-through.patch
deleted file mode 100644 (file)
index 7ddb135..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-diff --git a/gdk/quartz/gdkkeys-quartz.c b/gdk/quartz/gdkkeys-quartz.c
-index a034bbd..e81ea4d 100644
---- a/gdk/quartz/gdkkeys-quartz.c
-+++ b/gdk/quartz/gdkkeys-quartz.c
-@@ -812,9 +812,41 @@ gdk_keymap_map_virtual_modifiers (GdkKeymap       *keymap,
- GdkEventType
- _gdk_quartz_keys_event_type (NSEvent *event)
- {
--  unsigned short keycode;
--  unsigned int flags;
-+  unsigned short keycode = [event keyCode];
-+  unsigned int flags = [event modifierFlags];
-+  CFArrayRef global_keys = NULL;
-+  unsigned int eventmods = (flags & NSCommandKeyMask ? cmdKey : 0) |
-+                           (flags & NSAlternateKeyMask ? optionKey : 0) |
-+                           (flags & NSControlKeyMask ? controlKey : 0) |
-+                           (flags & NSShiftKeyMask ? shiftKey : 0);
-   int i;
-+
-+  if (CopySymbolicHotKeys (&global_keys) == noErr && global_keys != NULL)
-+    {
-+      CFIndex length = CFArrayGetCount (global_keys);
-+
-+      for (i = 0; i < length; i++)
-+      {
-+        CFDictionaryRef key_info = CFArrayGetValueAtIndex (global_keys, i);
-+
-+        CFNumberRef code = CFDictionaryGetValue (key_info, kHISymbolicHotKeyCode);
-+        CFNumberRef mods = CFDictionaryGetValue (key_info, kHISymbolicHotKeyModifiers);
-+        CFBooleanRef enabled = CFDictionaryGetValue (key_info, kHISymbolicHotKeyEnabled);
-+
-+        gint32 mod_value;
-+        gushort tmp_keycode;
-+
-+        CFNumberGetValue (mods, kCFNumberSInt32Type, &mod_value);
-+        CFNumberGetValue (code, kCFNumberShortType, &tmp_keycode);
-+
-+        if (CFBooleanGetValue (enabled) && keycode == tmp_keycode && mod_value == eventmods)
-+          {
-+            return GDK_NOTHING;
-+          }
-+      }
-+    }
-+
-+    CFRelease (global_keys);
-
-   switch ([event type])
-     {
-@@ -830,9 +862,6 @@ _gdk_quartz_keys_event_type (NSEvent *event)
-
-   /* For flags-changed events, we have to find the special key that caused the
-    * event, and see if it's in the modifier mask. */
--  keycode = [event keyCode];
--  flags = [event modifierFlags];
--
-   for (i = 0; i < G_N_ELEMENTS (modifier_keys); i++)
-     {
-       if (modifier_keys[i].keycode == keycode)
diff --git a/bockbuild/mac-sdk/patches/gtk/0073-disable-combobox-scrolling.patch b/bockbuild/mac-sdk/patches/gtk/0073-disable-combobox-scrolling.patch
deleted file mode 100644 (file)
index b975004..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
-index 39514fd..bd83a1e 100644
---- a/gtk/gtkcombobox.c
-+++ b/gtk/gtkcombobox.c
-@@ -330,8 +330,6 @@ static void     gtk_combo_box_forall               (GtkContainer     *container,
-                                                     gpointer          callback_data);
- static gboolean gtk_combo_box_expose_event         (GtkWidget        *widget,
-                                                     GdkEventExpose   *event);
--static gboolean gtk_combo_box_scroll_event         (GtkWidget        *widget,
--                                                    GdkEventScroll   *event);
- static void     gtk_combo_box_set_active_internal  (GtkComboBox      *combo_box,
-                                                   GtkTreePath      *path);
-
-@@ -551,7 +549,6 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass)
-   widget_class->size_allocate = gtk_combo_box_size_allocate;
-   widget_class->size_request = gtk_combo_box_size_request;
-   widget_class->expose_event = gtk_combo_box_expose_event;
--  widget_class->scroll_event = gtk_combo_box_scroll_event;
-   widget_class->mnemonic_activate = gtk_combo_box_mnemonic_activate;
-   widget_class->grab_focus = gtk_combo_box_grab_focus;
-   widget_class->style_set = gtk_combo_box_style_set;
-@@ -2963,31 +2960,6 @@ tree_first (GtkComboBox  *combo,
-   return search_data.set;
- }
-
--static gboolean
--gtk_combo_box_scroll_event (GtkWidget          *widget,
--                            GdkEventScroll     *event)
--{
--  GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
--  gboolean found;
--  GtkTreeIter iter;
--  GtkTreeIter new_iter;
--
--  if (!gtk_combo_box_get_active_iter (combo_box, &iter))
--    return TRUE;
--
--  if (event->direction == GDK_SCROLL_UP)
--    found = tree_prev (combo_box, combo_box->priv->model,
--                     &iter, &new_iter, FALSE);
--  else
--    found = tree_next (combo_box, combo_box->priv->model,
--                     &iter, &new_iter, FALSE);
--
--  if (found)
--    gtk_combo_box_set_active_iter (combo_box, &new_iter);
--
--  return TRUE;
--}
--
- /*
-  * menu style
-  */
diff --git a/bockbuild/mac-sdk/patches/gtk/0074-fix-NULL-pointer-in-clipboard.patch b/bockbuild/mac-sdk/patches/gtk/0074-fix-NULL-pointer-in-clipboard.patch
deleted file mode 100644 (file)
index b52c8a3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-commit 124e814f478936e017e58359240c540ad6678f3b
-Author: John Ralls <jralls@ceridwen.us>
-Date:   Sat Sep 28 10:55:22 2013 -0700
-
-    Bug 651224 - Potential NULL display ptr from quartz gtk_clipboard_wait_for_contents
-
-diff --git a/gtk/gtkclipboard-quartz.c b/gtk/gtkclipboard-quartz.c
-index ab7732b..a68d1cf 100644
---- a/gtk/gtkclipboard-quartz.c
-+++ b/gtk/gtkclipboard-quartz.c
-@@ -701,10 +701,12 @@ gtk_clipboard_wait_for_contents (GtkClipboard *clipboard,
-       GdkAtom *atoms;
-
-       length = [types count] * sizeof (GdkAtom);
--
-+
-       selection_data = g_slice_new0 (GtkSelectionData);
-       selection_data->selection = clipboard->selection;
-       selection_data->target = target;
-+      if (!selection_data->display)
-+      selection_data->display = gdk_display_get_default ();
-
-       atoms = g_malloc (length);
diff --git a/bockbuild/mac-sdk/patches/gtk/0075-filechooserwidget-location-entry-activation.patch b/bockbuild/mac-sdk/patches/gtk/0075-filechooserwidget-location-entry-activation.patch
deleted file mode 100644 (file)
index 5058a74..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
-index f94f4d6..eeb501b 100644
---- a/gtk/gtkfilechooserdefault.c
-+++ b/gtk/gtkfilechooserdefault.c
-@@ -4409,17 +4409,26 @@ file_pane_create (GtkFileChooserDefault *impl,
- }
-
- static void
-+on_folder_loaded (GtkFileChooserEntry *entry, GtkFileChooserDefault *chooser)
-+{
-+  gtk_file_chooser_default_should_respond (GTK_FILE_CHOOSER_EMBED (chooser));
-+  g_signal_emit_by_name (chooser, "response-requested");
-+}
-+
-+static void
- location_entry_create (GtkFileChooserDefault *impl)
- {
-   if (!impl->location_entry)
--    impl->location_entry = _gtk_file_chooser_entry_new (TRUE);
-+    {
-+      impl->location_entry = _gtk_file_chooser_entry_new (TRUE);
-+      g_signal_connect (impl->location_entry, "xam-load-folder", G_CALLBACK (on_folder_loaded), impl);
-+    }
-
-   _gtk_file_chooser_entry_set_file_system (GTK_FILE_CHOOSER_ENTRY (impl->location_entry),
-                                          impl->file_system);
-   _gtk_file_chooser_entry_set_local_only (GTK_FILE_CHOOSER_ENTRY (impl->location_entry), impl->local_only);
-   _gtk_file_chooser_entry_set_action (GTK_FILE_CHOOSER_ENTRY (impl->location_entry), impl->action);
-   gtk_entry_set_width_chars (GTK_ENTRY (impl->location_entry), 45);
--  gtk_entry_set_activates_default (GTK_ENTRY (impl->location_entry), TRUE);
- }
-
- /* Creates the widgets specific to Save mode */
-diff --git a/gtk/gtkfilechooserdialog.c b/gtk/gtkfilechooserdialog.c
-index c06fe3f..a0548a6 100644
---- a/gtk/gtkfilechooserdialog.c
-+++ b/gtk/gtkfilechooserdialog.c
-@@ -254,7 +254,7 @@ file_chooser_widget_response_requested (GtkWidget            *widget,
-
-   g_list_free (children);
- }
--
-+
- static GObject*
- gtk_file_chooser_dialog_constructor (GType                  type,
-                                    guint                  n_construct_properties,
-diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c
-index 3caa7b8..44cf665 100644
---- a/gtk/gtkfilechooserentry.c
-+++ b/gtk/gtkfilechooserentry.c
-@@ -28,6 +28,7 @@
- #include "gtkfilechooserentry.h"
- #include "gtklabel.h"
- #include "gtkmain.h"
-+#include "gtkmarshalers.h"
- #include "gtkwindow.h"
- #include "gtkintl.h"
- #include "gtkalias.h"
-@@ -45,6 +46,11 @@ struct _GtkFileChooserEntryClass
-   GtkEntryClass parent_class;
- };
-
-+enum {
-+  XAM_LOAD_FOLDER,
-+  LAST_SIGNAL
-+};
-+
- /* Action to take when the current folder finishes loading (for explicit or automatic completion) */
- typedef enum {
-   LOAD_COMPLETE_NOTHING,
-@@ -168,6 +174,8 @@ static void pop_up_completion_feedback (GtkFileChooserEntry *chooser_entry,
-
- static GtkEditableClass *parent_editable_iface;
-
-+static guint signals[LAST_SIGNAL] = { 0 };
-+
- G_DEFINE_TYPE_WITH_CODE (GtkFileChooserEntry, _gtk_file_chooser_entry, GTK_TYPE_ENTRY,
-                        G_IMPLEMENT_INTERFACE (GTK_TYPE_EDITABLE,
-                                               gtk_file_chooser_entry_iface_init))
-@@ -188,6 +196,14 @@ _gtk_file_chooser_entry_class_init (GtkFileChooserEntryClass *class)
-   widget_class->focus_out_event = gtk_file_chooser_entry_focus_out_event;
-
-   entry_class->activate = gtk_file_chooser_entry_activate;
-+
-+  signals[XAM_LOAD_FOLDER] = g_signal_new (I_("xam-load-folder"),
-+                                           G_OBJECT_CLASS_TYPE (gobject_class),
-+                                           G_SIGNAL_RUN_LAST,
-+                                           NULL,
-+                                           NULL, NULL,
-+                                           _gtk_marshal_VOID__VOID,
-+                                           G_TYPE_NONE, 0);
- }
-
- static void
-@@ -1301,6 +1317,7 @@ gtk_file_chooser_entry_activate (GtkEntry *entry)
-   GtkFileChooserEntry *chooser_entry = GTK_FILE_CHOOSER_ENTRY (entry);
-
-   commit_completion_and_refresh (chooser_entry);
-+  g_signal_emit (chooser_entry, signals[XAM_LOAD_FOLDER], 0);
-   GTK_ENTRY_CLASS (_gtk_file_chooser_entry_parent_class)->activate (entry);
- }
-
-diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
-index d69d854..3ad8a19 100644
---- a/gtk/gtkfilechooserwidget.c
-+++ b/gtk/gtkfilechooserwidget.c
-@@ -24,6 +24,7 @@
- #include "gtkfilechooserwidget.h"
- #include "gtkfilechooserdefault.h"
- #include "gtkfilechooserutils.h"
-+#include "gtkmarshalers.h"
- #include "gtktypebuiltins.h"
- #include "gtkfilechooserembed.h"
- #include "gtkintl.h"
-@@ -101,7 +102,6 @@ gtk_file_chooser_widget_constructor (GType                  type,
-   gtk_widget_push_composite_child ();
-
-   priv->impl = _gtk_file_chooser_default_new ();
--
-   gtk_box_pack_start (GTK_BOX (object), priv->impl, TRUE, TRUE, 0);
-   gtk_widget_show (priv->impl);
diff --git a/bockbuild/mac-sdk/patches/gtk/0076-iconfactory-treat-gt-1-0-icons-as-2-0.patch b/bockbuild/mac-sdk/patches/gtk/0076-iconfactory-treat-gt-1-0-icons-as-2-0.patch
deleted file mode 100644 (file)
index 8c84743..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-commit 072cd971ff3c9f48bd43b1e6f1e771dcb46f822a
-Author: Cody Russell <cody@jhu.edu>
-Date:   Thu Apr 24 16:37:14 2014 -0500
-
-    When finding matching icon sources or cached icons, any scale greater than
-    1.0 should be treated as 2.0. This is important on Windows where scales can
-    be things like 1.25 or 1.5.
-
-diff --git a/gtk/gtkiconfactory.c b/gtk/gtkiconfactory.c
-index 291c05e..5e356b7 100644
---- a/gtk/gtkiconfactory.c
-+++ b/gtk/gtkiconfactory.c
-@@ -1323,11 +1323,12 @@ find_best_matching_source (GtkIconSet       *icon_set,
-                          GtkTextDirection  direction,
-                          GtkStateType      state,
-                          GtkIconSize       size,
--                         gdouble           scale,
-+                         gdouble           _scale,
-                          GSList           *failed)
- {
-   GtkIconSource *source;
-   GSList *tmp_list;
-+  gdouble scale = (_scale > 1.0 ? 2.0 : 1.0);
-
-   /* We need to find the best icon source.  Direction matters more
-    * than state, state matters more than size. icon_set->sources
-@@ -2586,10 +2587,11 @@ find_in_cache (GtkIconSet      *icon_set,
-                GtkTextDirection direction,
-                GtkStateType     state,
-                GtkIconSize      size,
--               gdouble          scale)
-+               gdouble          _scale)
- {
-   GSList *tmp_list;
-   GSList *prev;
-+  gdouble scale = (_scale > 1.0 ? 2.0 : 1.0);
-
-   ensure_cache_up_to_date (icon_set);
diff --git a/bockbuild/mac-sdk/patches/gtk/bgo702841-fix-kana-eisu-keys.patch b/bockbuild/mac-sdk/patches/gtk/bgo702841-fix-kana-eisu-keys.patch
deleted file mode 100644 (file)
index 178a48b..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-From b93535cc5d60149edc3a45d5b7f31f62a80234bf Mon Sep 17 00:00:00 2001
-From: Takuro Ashie <ashie@clear-code.com>
-Date: Fri, 21 Jun 2013 21:29:14 +0900
-Subject: [PATCH] Quartz: translate JIS Hiragana & Eisu keys.
-
-Since UCKeyTranslate() converts these keys to Space key unexpectedly,
-applications can't distinguish these keys by keysyms.
-To solve it, this fix translates these keys by same way with function
-keys & keypad keys.
----
- gdk/quartz/gdkkeys-quartz.c | 31 +++++++++++++++++++++++++++++++
- 1 file changed, 31 insertions(+)
-
-diff --git a/gdk/quartz/gdkkeys-quartz.c b/gdk/quartz/gdkkeys-quartz.c
-index a4df2cf..fb11c33 100644
---- a/gdk/quartz/gdkkeys-quartz.c
-+++ b/gdk/quartz/gdkkeys-quartz.c
-@@ -191,6 +191,29 @@ const static struct {
-   { 92, GDK_KEY_9, GDK_KEY_KP_9 }
- };
-
-+/* Keys only in JIS layout.
-+ * The rationale of these key codes is <HIToolbox/Events.h> in Carbon.
-+ */
-+const static struct {
-+  guint keycode;
-+  guint keyval;
-+} jis_keys[] = {
-+#if 0
-+  /* Although These keys are also defined in <HIToolbox/Events.h>, they can be
-+   * translated by UCKeyTranslate correctly.
-+   */
-+  { 0x5D, GDK_KEY_yen },
-+  { 0x5E, GDK_KEY_underscore },
-+  { 0x5F, GDK_KEY_comma },
-+#endif
-+  /* These keys are unexpectedly translated to Space key by UCKeyTranslate,
-+   * and there is no suitable ucs value for them to add to special_ucs_table.
-+   * So we should translate them particularly.
-+   */
-+  { 0x66 /* 102 */, GDK_KEY_Eisu_toggle },
-+  { 0x68 /* 104 */, GDK_KEY_Hiragana }
-+};
-+
- /* These values aren't covered by gdk_unicode_to_keyval */
- const static struct {
-   gunichar ucs_value;
-@@ -498,6 +521,14 @@ maybe_update_keymap (void)
-         if (p[0] == known_numeric_keys[i].normal_keyval)
-             p[0] = known_numeric_keys[i].keypad_keyval;
-       }
-+
-+      for (i = 0; i < G_N_ELEMENTS (jis_keys); i++)
-+      {
-+        p = keyval_array + jis_keys[i].keycode * KEYVALS_PER_KEYCODE;
-+
-+          p[0] = jis_keys[i].keyval;
-+          p[1] = p[2] = p[3] = 0;
-+      }
-
-       if (current_layout)
-       g_signal_emit_by_name (default_keymap, "keys_changed");
---
-1.7.12.4 (Apple Git-37)
diff --git a/bockbuild/mac-sdk/patches/gtk/bxc-41657.patch b/bockbuild/mac-sdk/patches/gtk/bxc-41657.patch
deleted file mode 100644 (file)
index ba9fbea..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-From ccd93c714859737d9b40b547e433a690ad6a9e55 Mon Sep 17 00:00:00 2001
-From: iain holmes <iain@xamarin.com>
-Date: Thu, 30 Jun 2016 12:34:56 +0100
-Subject: [PATCH] [Gdk] Don't crash when turning screen off
-
-Check the length of characters in the NSFlagsChanged event before accessing
-the individual characters because cmd+alt+power key doesn't have any characters
-so an ObjC will throw an exception.
-
-Fixes BXC #41657
----
- gdk/quartz/gdkevents-quartz.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index 8cb05c0..0fa63be 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -1847,7 +1847,7 @@ gdk_event_translate (GdkEvent *event,
-         NSView *tmp_view = [nswindow firstResponder];
-         gboolean gtk_child = FALSE;
-
--        if (event_type == NSKeyDown && ([nsevent modifierFlags] & NSCommandKeyMask) != 0 && [[nsevent characters] characterAtIndex:0] == 'z')
-+        if (event_type == NSKeyDown && ([nsevent modifierFlags] & NSCommandKeyMask) != 0 && [[nsevent characters] length] > 0 && [[nsevent characters] characterAtIndex:0] == 'z')
-           {
-             if ([tmp_view respondsToSelector:@selector(undoManager)])
-               {
diff --git a/bockbuild/mac-sdk/patches/gtk/bxc2158_workaround_crash_triggering_context_menu.patch b/bockbuild/mac-sdk/patches/gtk/bxc2158_workaround_crash_triggering_context_menu.patch
deleted file mode 100644 (file)
index f82905f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index a8800f7..a7d3f75 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -682,11 +682,25 @@ find_window_for_ns_event (NSEvent *nsevent,
-             else
-               {
-                 /* Finally check the grab window. */
--              GdkWindow *grab_toplevel;
-+              GdkWindow *grab_toplevel = NULL;
-
--              grab_toplevel = gdk_window_get_effective_toplevel (grab->window);
--                get_window_point_from_screen_point (grab_toplevel,
--                                                    screen_point, x, y);
-+                if (grab->window == NULL)
-+                  {
-+                    g_warning ("grab->window == NULL");
-+                  }
-+                else
-+                  {
-+                    grab_toplevel = gdk_window_get_effective_toplevel (grab->window);
-+                    if (grab_toplevel == NULL)
-+                      {
-+                        g_warning ("grab_toplevel == NULL");
-+                      }
-+                    else
-+                      {
-+                        get_window_point_from_screen_point (grab_toplevel,
-+                                                            screen_point, x, y);
-+                      }
-+                  }
-
-               return grab_toplevel;
-             }
diff --git a/bockbuild/mac-sdk/patches/gtk/bxc3457_more_standard_keyboard_shortcuts.patch b/bockbuild/mac-sdk/patches/gtk/bxc3457_more_standard_keyboard_shortcuts.patch
deleted file mode 100644 (file)
index 68256cc..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/gtk/gtkrc.key.mac b/gtk/gtkrc.key.mac
-index 980f3e4..91033a6 100644
---- a/gtk/gtkrc.key.mac
-+++ b/gtk/gtkrc.key.mac
-@@ -10,6 +10,8 @@ binding "gtk-mac-alt-arrows"
-   bind "<shift><alt>KP_Right" { "move-cursor" (words, 1, 1) }
-   bind "<shift><alt>Left"     { "move-cursor" (words, -1, 1) }
-   bind "<shift><alt>KP_Left"  { "move-cursor" (words, -1, 1) }
-+  bind "<ctrl>p"              { "move-cursor" (display-lines, -1, 0) }
-+  bind "<ctrl>n"              { "move-cursor" (display-lines, 1, 0) }
- }
-
- class "GtkTextView" binding "gtk-mac-alt-arrows"
-@@ -19,6 +21,8 @@ class "GtkEntry" binding "gtk-mac-alt-arrows"
-
- binding "gtk-mac-alt-delete"
- {
-+  bind "<ctrl>d" { "delete-from-cursor" (chars, 1) }
-+  bind "<ctrl>k" { "delete-from-cursor" (paragraph-ends, 1) }
-   bind "<alt>Delete" { "delete-from-cursor" (word-ends, 1) }
-   bind "<alt>KP_Delete" { "delete-from-cursor" (word-ends, 1) }
-   bind "<alt>BackSpace" { "delete-from-cursor" (word-ends, -1) }
diff --git a/bockbuild/mac-sdk/patches/gtk/bxc_10256_window_tools_get_confused.diff b/bockbuild/mac-sdk/patches/gtk/bxc_10256_window_tools_get_confused.diff
deleted file mode 100644 (file)
index 5346958..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-From c7143a37ec4d802710442380bc4cfd0d521350bd Mon Sep 17 00:00:00 2001
-From: Kristian Rietveld <kris@lanedo.com>
-Date: Sat, 23 Feb 2013 13:51:18 +0100
-Subject: [PATCH] Call NSApp finishLaunching before polling the first event
- from Cocoa
-
----
- gdk/quartz/gdkeventloop-quartz.c |   20 ++++++++++++++++++++
- 1 files changed, 20 insertions(+), 0 deletions(-)
-
-diff --git a/gdk/quartz/gdkeventloop-quartz.c b/gdk/quartz/gdkeventloop-quartz.c
-index 224d84c..80ef87f 100644
---- a/gdk/quartz/gdkeventloop-quartz.c
-+++ b/gdk/quartz/gdkeventloop-quartz.c
-@@ -695,6 +695,23 @@ static GSourceFuncs event_funcs = {
-  *********             Our Poll Function            *********
-  ************************************************************/
-
-+static inline void
-+ensure_finish_launching_called (void)
-+{
-+  static volatile gsize finish_launched_called = 0;
-+
-+  if (g_once_init_enter (&finish_launched_called))
-+    {
-+      /* This call finished application start up and enables for example
-+       * accessibility support. This function is called from poll_func
-+       * and an autorelease pool is set up at that point.
-+       */
-+      [NSApp finishLaunching];
-+
-+      g_once_init_leave (&finish_launched_called, TRUE);
-+    }
-+}
-+
- static gint
- poll_func (GPollFD *ufds,
-          guint    nfds,
-@@ -706,6 +723,9 @@ poll_func (GPollFD *ufds,
-   static GPollFD *current_ufds = NULL;
-   static int current_nfds = 0;
-
-+  /* This is performed *once* before we poll Cocoa for the first event. */
-+  ensure_finish_launching_called ();
-+
-   current_ufds = ufds;
-   current_nfds = nfds;
-
---
-1.7.4.4
diff --git a/bockbuild/mac-sdk/patches/gtk/combobox-crossing-events.patch b/bockbuild/mac-sdk/patches/gtk/combobox-crossing-events.patch
deleted file mode 100644 (file)
index fad3581..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index 9e57edd..e8c28ad 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -46,6 +46,8 @@
- /* This is the window corresponding to the key window */
- static GdkWindow   *current_keyboard_window;
-
-+static GdkWindow   *crossing_current_window = NULL;
-+
- /* This is the event mask from the last event */
- static GdkEventMask current_event_mask;
-
-@@ -1129,12 +1131,18 @@ synthesize_crossing_event (GdkWindow *window,
-       if (!(private->event_mask & GDK_ENTER_NOTIFY_MASK))
-         return FALSE;
-
-+      if (crossing_current_window == window)
-+        return FALSE;
-+
-       fill_crossing_event (window, event, nsevent,
-                            x, y,
-                            x_root, y_root,
-                            GDK_ENTER_NOTIFY,
-                            GDK_CROSSING_NORMAL,
-                            GDK_NOTIFY_NONLINEAR);
-+
-+      crossing_current_window = window;
-+
-       return TRUE;
-
-     case NSMouseExited:
-@@ -1142,6 +1150,11 @@ synthesize_crossing_event (GdkWindow *window,
-       if (!(private->event_mask & GDK_LEAVE_NOTIFY_MASK))
-         return FALSE;
-
-+      if (crossing_current_window != NULL && crossing_current_window != window)
-+        return FALSE;
-+
-+      crossing_current_window = NULL;
-+
-       fill_crossing_event (window, event, nsevent,
-                            x, y,
-                            x_root, y_root,
diff --git a/bockbuild/mac-sdk/patches/gtk/create-accessibility-object.patch b/bockbuild/mac-sdk/patches/gtk/create-accessibility-object.patch
deleted file mode 100644 (file)
index 987c5ed..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-commit 6ed9fd7a27d85b5abecc0f727282586bc616b79d
-Author: iain holmes <iain@xamarin.com>
-Date:   Mon Jul 25 17:00:40 2016 +0100
-
-    [GtkWidget] Always create an accessibilityy object for every widget
-
-    Create an accessibility once the widget has been fully constructed.
-
-diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
-index facc0db..55d1fbc 100644
---- a/gtk/gtkwidget.c
-+++ b/gtk/gtkwidget.c
-@@ -255,6 +255,7 @@ static void        gtk_widget_get_property          (GObject           *object,
- static void   gtk_widget_dispose               (GObject           *object);
- static void   gtk_widget_real_destroy          (GtkObject         *object);
- static void   gtk_widget_finalize              (GObject           *object);
-+static void gtk_widget_constructed (GObject     *object);
- static void   gtk_widget_real_show             (GtkWidget         *widget);
- static void   gtk_widget_real_hide             (GtkWidget         *widget);
- static void   gtk_widget_real_map              (GtkWidget         *widget);
-@@ -481,6 +482,7 @@ gtk_widget_class_init (GtkWidgetClass *klass)
-
-   gobject_class->dispose = gtk_widget_dispose;
-   gobject_class->finalize = gtk_widget_finalize;
-+  gobject_class->constructed = gtk_widget_constructed;
-   gobject_class->set_property = gtk_widget_set_property;
-   gobject_class->get_property = gtk_widget_get_property;
-
-@@ -2961,6 +2963,13 @@ gtk_widget_init (GtkWidget *widget)
-   g_object_ref (widget->style);
- }
-
-+static void
-+gtk_widget_constructed (GObject *object)
-+{
-+  // Always create an accessible for widgets
-+  gtk_widget_get_accessible (GTK_WIDGET (object));
-+  G_OBJECT_CLASS (gtk_widget_parent_class)->constructed (object);
-+}
-
- static void
- gtk_widget_dispatch_child_properties_changed (GtkWidget   *widget,
diff --git a/bockbuild/mac-sdk/patches/gtk/disable-eye-dropper.patch b/bockbuild/mac-sdk/patches/gtk/disable-eye-dropper.patch
deleted file mode 100644 (file)
index a5ce90a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-diff --git a/gtk/gtkcolorsel.c b/gtk/gtkcolorsel.c
-index 78a483d..06b9d0e 100644
---- a/gtk/gtkcolorsel.c
-+++ b/gtk/gtkcolorsel.c
-@@ -367,6 +367,7 @@ gtk_color_selection_init (GtkColorSelection *colorsel)
-   gtk_container_add (GTK_CONTAINER (frame), priv->sample_area);
-   gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
-
-+  /*
-   button = gtk_button_new ();
-
-   gtk_widget_set_events (button, GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);
-@@ -380,6 +381,7 @@ gtk_color_selection_init (GtkColorSelection *colorsel)
-
-   gtk_widget_set_tooltip_text (button,
-                         _("Click the eyedropper, then click a color anywhere on your screen to select that color."));
-+                        */
-
-   top_right_vbox = gtk_vbox_new (FALSE, 6);
-   gtk_box_pack_start (GTK_BOX (top_hbox), top_right_vbox, FALSE, FALSE, 0);
diff --git a/bockbuild/mac-sdk/patches/gtk/dont-call-CopySymbolicHotKeys-so-much.patch b/bockbuild/mac-sdk/patches/gtk/dont-call-CopySymbolicHotKeys-so-much.patch
deleted file mode 100644 (file)
index 2bca866..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index f4ae401..d601ee3 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -680,6 +680,8 @@ _gdk_quartz_events_update_focus_window (GdkWindow *window,
-        * everything in the window is set to correct state.
-        */
-       generate_motion_event (window);
-+
-+      _gdk_quartz_update_symbolic_hotkeys ();
-     }
- }
-
-diff --git a/gdk/quartz/gdkinput.c b/gdk/quartz/gdkinput.c
-index 6f5f8ea..8d5698f 100644
---- a/gdk/quartz/gdkinput.c
-+++ b/gdk/quartz/gdkinput.c
-@@ -568,6 +568,8 @@ _gdk_input_exit (void)
-       g_free (tmp_list->data);
-     }
-   g_list_free (_gdk_input_windows);
-+
-+  _gdk_quartz_release_symbolic_hotkeys ();
- }
-
- gboolean
-diff --git a/gdk/quartz/gdkkeys-quartz.c b/gdk/quartz/gdkkeys-quartz.c
-index e81ea4d..746881b 100644
---- a/gdk/quartz/gdkkeys-quartz.c
-+++ b/gdk/quartz/gdkkeys-quartz.c
-@@ -55,6 +55,7 @@
- #include <AppKit/NSEvent.h>
- #include "gdk.h"
- #include "gdkkeysyms.h"
-+#include "gdkprivate-quartz.h"
-
- #define NUM_KEYCODES 128
- #define KEYVALS_PER_KEYCODE 4
-@@ -65,6 +66,7 @@ static GdkKeymap *default_keymap = NULL;
-  * TThere is 1 keyval per modifier (Nothing, Shift, Alt, Shift+Alt);
-  */
- static guint *keyval_array = NULL;
-+static CFArrayRef global_hotkeys = NULL;
-
- static inline UniChar
- macroman2ucs (unsigned char c)
-@@ -806,6 +808,24 @@ gdk_keymap_map_virtual_modifiers (GdkKeymap       *keymap,
-   return TRUE;
- }
-
-+void
-+_gdk_quartz_update_symbolic_hotkeys ()
-+{
-+  _gdk_quartz_release_symbolic_hotkeys ();
-+
-+  CopySymbolicHotKeys (&global_hotkeys);
-+}
-+
-+void
-+_gdk_quartz_release_symbolic_hotkeys ()
-+{
-+  if (global_hotkeys != NULL)
-+    {
-+      CFRelease (global_hotkeys);
-+      global_hotkeys = NULL;
-+    }
-+}
-+
- /* What sort of key event is this? Returns one of
-  * GDK_KEY_PRESS, GDK_KEY_RELEASE, GDK_NOTHING (should be ignored)
-  */
-@@ -814,20 +834,19 @@ _gdk_quartz_keys_event_type (NSEvent *event)
- {
-   unsigned short keycode = [event keyCode];
-   unsigned int flags = [event modifierFlags];
--  CFArrayRef global_keys = NULL;
-   unsigned int eventmods = (flags & NSCommandKeyMask ? cmdKey : 0) |
-                            (flags & NSAlternateKeyMask ? optionKey : 0) |
-                            (flags & NSControlKeyMask ? controlKey : 0) |
-                            (flags & NSShiftKeyMask ? shiftKey : 0);
-   int i;
-
--  if (CopySymbolicHotKeys (&global_keys) == noErr && global_keys != NULL)
-+  if (global_hotkeys != NULL)
-     {
--      CFIndex length = CFArrayGetCount (global_keys);
-+      CFIndex length = CFArrayGetCount (global_hotkeys);
-
-       for (i = 0; i < length; i++)
-       {
--        CFDictionaryRef key_info = CFArrayGetValueAtIndex (global_keys, i);
-+        CFDictionaryRef key_info = CFArrayGetValueAtIndex (global_hotkeys, i);
-
-         CFNumberRef code = CFDictionaryGetValue (key_info, kHISymbolicHotKeyCode);
-         CFNumberRef mods = CFDictionaryGetValue (key_info, kHISymbolicHotKeyModifiers);
-@@ -846,8 +865,6 @@ _gdk_quartz_keys_event_type (NSEvent *event)
-       }
-     }
-
--    CFRelease (global_keys);
--
-   switch ([event type])
-     {
-     case NSKeyDown:
-diff --git a/gdk/quartz/gdkprivate-quartz.h b/gdk/quartz/gdkprivate-quartz.h
-index f8b382d..0b0f66b 100644
---- a/gdk/quartz/gdkprivate-quartz.h
-+++ b/gdk/quartz/gdkprivate-quartz.h
-@@ -200,6 +200,8 @@ GdkImage *_gdk_quartz_image_copy_to_image (GdkDrawable *drawable,
-                                           gint         height);
-
- /* Keys */
-+void         _gdk_quartz_update_symbolic_hotkeys  ();
-+void         _gdk_quartz_release_symbolic_hotkeys ();
- GdkEventType _gdk_quartz_keys_event_type  (NSEvent   *event);
- gboolean     _gdk_quartz_keys_is_modifier (guint      keycode);
- void         _gdk_quartz_synthesize_null_key_event (GdkWindow *window);
diff --git a/bockbuild/mac-sdk/patches/gtk/embedded-nstextview-has-focus.patch b/bockbuild/mac-sdk/patches/gtk/embedded-nstextview-has-focus.patch
deleted file mode 100644 (file)
index a24649d..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h
-index e9428d0..8bd02d7 100644
---- a/gdk/gdkwindow.h
-+++ b/gdk/gdkwindow.h
-@@ -724,6 +724,8 @@ void       gdk_window_remove_redirection     (GdkWindow     *window);
-
- /* NSView embedding */
- gboolean   gdk_window_supports_nsview_embedding ();
-+gboolean   gdk_window_has_embedded_nsview_focus (GdkWindow *window);
-+void       gdk_window_set_has_embedded_nsview_focus (GdkWindow *window, gboolean value);
-
- #ifndef GDK_DISABLE_DEPRECATED
- #ifndef GDK_MULTIHEAD_SAFE
-diff --git a/gdk/quartz/GdkQuartzWindow.c b/gdk/quartz/GdkQuartzWindow.c
-index b6b794e..124427e 100644
---- a/gdk/quartz/GdkQuartzWindow.c
-+++ b/gdk/quartz/GdkQuartzWindow.c
-@@ -247,6 +247,15 @@
-         }
-     }
-
-+  if (responder != NULL && [responder isKindOfClass: [NSTextView class]])
-+    {
-+      gdk_window_set_has_embedded_nsview_focus (window, TRUE);
-+    }
-+  else
-+    {
-+      gdk_window_set_has_embedded_nsview_focus (window, FALSE);
-+    }
-+
-   return [super makeFirstResponder:responder];
- }
-
-diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
-index 050139a..cd5cc26 100644
---- a/gdk/quartz/gdkwindow-quartz.c
-+++ b/gdk/quartz/gdkwindow-quartz.c
-@@ -895,6 +895,24 @@ gdk_window_supports_nsview_embedding ()
-   return TRUE;
- }
-
-+gboolean
-+gdk_window_has_embedded_nsview_focus (GdkWindow *window)
-+{
-+  GdkWindowObject *private = GDK_WINDOW_OBJECT (window);
-+  GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
-+
-+  return impl->has_nsview_focus;
-+}
-+
-+void
-+gdk_window_set_has_embedded_nsview_focus (GdkWindow *window, gboolean value)
-+{
-+  GdkWindowObject *private = GDK_WINDOW_OBJECT (window);
-+  GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
-+
-+  impl->has_nsview_focus = value;
-+}
-+
- void
- _gdk_window_impl_new (GdkWindow     *window,
-                     GdkWindow     *real_parent,
-diff --git a/gdk/quartz/gdkwindow-quartz.h b/gdk/quartz/gdkwindow-quartz.h
-index f35238b..b619914 100644
---- a/gdk/quartz/gdkwindow-quartz.h
-+++ b/gdk/quartz/gdkwindow-quartz.h
-@@ -61,6 +61,7 @@ struct _GdkWindowImplQuartz
-   GList *sorted_children;
-
-   GdkRegion *needs_display_region;
-+  gboolean has_nsview_focus;
- };
-
- struct _GdkWindowImplQuartzClass
diff --git a/bockbuild/mac-sdk/patches/gtk/emit-container-add.patch b/bockbuild/mac-sdk/patches/gtk/emit-container-add.patch
deleted file mode 100644 (file)
index 153cf53..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-From 74a81cbb03a4b6a27b0e9c58099d54bc1537865d Mon Sep 17 00:00:00 2001
-From: iain holmes <iain@xamarin.com>
-Date: Fri, 22 Jul 2016 14:39:28 +0100
-Subject: [PATCH] [GtkBox] Emit GtkContainer's add signal
-
-Even though GtkBox is a subclass of GtkContainer, it won't emit
-GtkContainer::add when a widget is added via gtk_box_pack functions.
-
-We emit that signal, and guard against cycles caused by the signal triggering
-another gtk_box_add call.
----
- gtk/gtkbox.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c
-index 1ebcbcf..26c66cf 100644
---- a/gtk/gtkbox.c
-+++ b/gtk/gtkbox.c
-@@ -760,6 +760,8 @@ gtk_box_pack (GtkBox      *box,
-   gtk_widget_child_notify (child, "pack-type");
-   gtk_widget_child_notify (child, "position");
-   gtk_widget_thaw_child_notify (child);
-+
-+  g_signal_emit_by_name (G_OBJECT (box), "add", child);
- }
-
- /**
-@@ -1188,6 +1190,11 @@ gtk_box_add (GtkContainer *container,
- {
-   GtkBoxPrivate *private = GTK_BOX_GET_PRIVATE (container);
-
-+  if (widget->parent == container) {
-+    // Break the add signal cycle
-+    return;
-+  }
-+
-   gtk_box_pack_start (GTK_BOX (container), widget,
-                       private->default_expand,
-                       private->default_expand,
diff --git a/bockbuild/mac-sdk/patches/gtk/enable-swizzle-property.patch b/bockbuild/mac-sdk/patches/gtk/enable-swizzle-property.patch
deleted file mode 100644 (file)
index 137c82a..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index ad003d9..483f105 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -41,7 +41,8 @@
- enum
- {
-   PROP_0,
--  PROP_VIEW
-+  PROP_VIEW,
-+  PROP_ENABLE_SWIZZLE
- };
-
-
-@@ -49,6 +50,7 @@ struct _GtkNSViewPrivate
- {
-   NSView *view;
-   guint   map_timeout;
-+  gboolean enable_swizzle;
- };
-
- #define GTK_NS_VIEW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
-@@ -130,6 +132,14 @@ gtk_ns_view_class_init (GtkNSViewClass *klass)
-                                                          P_("The NSView"),
-                                                          GTK_PARAM_READWRITE |
-                                                          G_PARAM_CONSTRUCT_ONLY));
-+
-+  g_object_class_install_property (object_class,
-+                                 PROP_ENABLE_SWIZZLE,
-+                                 g_param_spec_boolean ("enable-swizzle",
-+                                                       P_("Enable swizzle"),
-+                                                       P_("Enable swizzle"),
-+                                                       FALSE,
-+                                                       GTK_PARAM_READWRITE));
- }
-
- static void
-@@ -149,12 +159,18 @@ static void   gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
- - (void) myDidAddSubview: (NSView *) aView
- {
-   void *associated_object;
-+  GtkNSView *gtknsview;
-
-   associated_object = objc_getAssociatedObject (self, "gtknsview");
-
-   if (associated_object)
-     {
--      gtk_ns_view_swizzle_draw_rect_recursive (aView, "gtknsview", associated_object);
-+      gtknsview = (GtkNSView *)associated_object;
-+
-+      if (gtknsview->priv->enable_swizzle)
-+      {
-+        gtk_ns_view_swizzle_draw_rect_recursive (aView, "gtknsview", associated_object);
-+      }
-     }
-   else
-     {
-@@ -443,8 +459,11 @@ gtk_ns_view_constructed (GObject *object)
- #endif
-
-   gtk_ns_view_replace_draw_insertion_point ();
--  gtk_ns_view_swizzle_draw_rect_recursive (ns_view->priv->view,
--                                           "gtknsview", ns_view);
-+  if (ns_view->priv->enable_swizzle)
-+    {
-+      gtk_ns_view_swizzle_draw_rect_recursive (ns_view->priv->view,
-+                                             "gtknsview", ns_view);
-+    }
- }
-
- static void
-@@ -477,6 +496,10 @@ gtk_ns_view_set_property (GObject      *object,
-         [ns_view->priv->view retain];
-       break;
-
-+    case PROP_ENABLE_SWIZZLE:
-+      ns_view->priv->enable_swizzle = g_value_get_boolean (value);
-+      break;
-+
-     default:
-       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-       break;
-@@ -497,6 +520,9 @@ gtk_ns_view_get_property (GObject      *object,
-       g_value_set_pointer (value, ns_view->priv->view);
-       break;
-
-+    case PROP_ENABLE_SWIZZLE:
-+      g_value_set_boolean (value, ns_view->priv->enable_swizzle);
-+
-     default:
-       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-       break;
-@@ -617,7 +643,7 @@ really_map (GtkWidget *widget) {
-       NSText *text = [window fieldEditor: YES
-                                forObject: nil];
-
--      if (text)
-+      if (text && ns_view->priv->enable_swizzle)
-         {
-           gtk_ns_view_swizzle_draw_rect_recursive (text, "gtkwindow", toplevel);
-         }
diff --git a/bockbuild/mac-sdk/patches/gtk/fix-imquartz-crasher.patch b/bockbuild/mac-sdk/patches/gtk/fix-imquartz-crasher.patch
deleted file mode 100644 (file)
index 6e8c27d..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-From 4ba1fbfdb15fdf31643b7c88ca457b0eb71a0c00 Mon Sep 17 00:00:00 2001
-From: David Lechner <david@lechnology.com>
-Date: Fri, 2 Oct 2015 13:45:00 +0000
-Subject: [PATCH] Bug 753992 - im-quartz discard_preedit segmentation fault
-
-Replace checking if the NSView is really a GdkWindow, which will crash
-in the likely event it's not a GObject, with ensuring that the parent
-GdkWindow is really a GdkWindowQuartz.
----
- modules/input/imquartz.c | 12 +-----------
- 1 file changed, 1 insertion(+), 11 deletions(-)
-
-diff --git a/modules/input/imquartz.c b/modules/input/imquartz.c
-index 67c7d6c..f6d8f0f 100644
---- a/modules/input/imquartz.c
-+++ b/modules/input/imquartz.c
-@@ -195,11 +195,7 @@ quartz_filter_keypress (GtkIMContext *context,
-     return FALSE;
-
-   nsview = gdk_quartz_window_get_nsview (qc->client_window);
--  if (GDK_IS_WINDOW (nsview))
--       /* it gets GDK_WINDOW in some cases */
--    return gtk_im_context_filter_keypress (qc->slave, event);
--  else
--    win = (GdkWindow *)[ (GdkQuartzView *)nsview gdkWindow];
-+  win = (GdkWindow *)[ (GdkQuartzView *)nsview gdkWindow];
-   GTK_NOTE (MISC, g_print ("client_window: %p, win: %p, nsview: %p\n",
-                          qc->client_window, win, nsview));
-
-@@ -251,9 +247,6 @@ discard_preedit (GtkIMContext *context)
-   if (!nsview)
-     return;
-
--  if (GDK_IS_WINDOW (nsview))
--    return;
--
-   /* reset any partial input for this NSView */
-   [(GdkQuartzView *)nsview unmarkText];
-   NSInputManager *currentInputManager = [NSInputManager currentInputManager];
-@@ -334,9 +327,6 @@ quartz_set_cursor_location (GtkIMContext *context, GdkRectangle *area)
-   qc->cursor_rect->y = area->y + y;
-
-   nsview = gdk_quartz_window_get_nsview (qc->client_window);
--  if (GDK_IS_WINDOW (nsview))
--    /* it returns GDK_WINDOW in some cases */
--    return;
-
-   win = (GdkWindow *)[ (GdkQuartzView*)nsview gdkWindow];
-   g_object_set_data (G_OBJECT (win), GIC_CURSOR_RECT, qc->cursor_rect);
diff --git a/bockbuild/mac-sdk/patches/gtk/flip-command-mask-between-mod1-and-mod2.patch b/bockbuild/mac-sdk/patches/gtk/flip-command-mask-between-mod1-and-mod2.patch
deleted file mode 100644 (file)
index 1ad1efd..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-commit d15d466cc479630ac27925b0edaa769c5ab0bead
-Author: Cody Russell <cody@jhu.edu>
-Date:   Tue Jan 13 16:44:46 2015 -0600
-
-    [GtkNSView] Flip command mask between MOD1 and MOD2 depending on gdk_quartz_get_fix_modifiers
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index ad003d9..d5f8c76 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -700,9 +700,11 @@ gtk_ns_view_key_press (GtkWidget   *widget,
-       NSWindow *ns_window = [ns_view->priv->view window];
-       NSResponder *responder = [ns_window firstResponder];
-
-+      gint command_mask = gdk_quartz_get_fix_modifiers () ? GDK_MOD2_MASK : GDK_MOD1_MASK;
-+
-       if ([responder isKindOfClass: [NSTextView class]] &&
-           (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK |
--                           GDK_MOD1_MASK | GDK_MOD2_MASK)) == GDK_MOD2_MASK)
-+                           GDK_MOD1_MASK | GDK_MOD2_MASK)) == command_mask)
-         {
-           NSTextView *text_view = (NSTextView *) responder;
-           NSRange range = [text_view selectedRange];
diff --git a/bockbuild/mac-sdk/patches/gtk/gtk-check-grab_toplevel-is-destroyed.patch b/bockbuild/mac-sdk/patches/gtk/gtk-check-grab_toplevel-is-destroyed.patch
deleted file mode 100644 (file)
index ce227dd..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index 23e879c..b7b2665 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -831,7 +831,7 @@ find_window_for_ns_event (NSEvent *nsevent,
-                       {
-                         g_warning ("grab_toplevel == NULL");
-                       }
--                    else
-+                    else if (!gdk_window_is_destroyed (grab_toplevel))
-                       {
-                         get_window_point_from_screen_point (grab_toplevel,
-                                                             screen_point, x, y);
diff --git a/bockbuild/mac-sdk/patches/gtk/gtk-imquartz-defer-signals-in-output_result.patch b/bockbuild/mac-sdk/patches/gtk/gtk-imquartz-defer-signals-in-output_result.patch
deleted file mode 100644 (file)
index ac863d1..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-diff --git a/modules/input/imquartz.c b/modules/input/imquartz.c
-index 67c7d6c..a8ebd02 100644
---- a/modules/input/imquartz.c
-+++ b/modules/input/imquartz.c
-@@ -132,6 +132,8 @@ output_result (GtkIMContext *context,
-   GtkIMContextQuartz *qc = GTK_IM_CONTEXT_QUARTZ (context);
-   gboolean retval = FALSE;
-   gchar *fixed_str, *marked_str;
-+  gboolean needs_commit = FALSE;
-+  gboolean needs_preedit_change = FALSE;
-
-   fixed_str = g_object_get_data (G_OBJECT (win), TIC_INSERT_TEXT);
-   marked_str = g_object_get_data (G_OBJECT (win), TIC_MARKED_TEXT);
-@@ -141,8 +143,8 @@ output_result (GtkIMContext *context,
-       g_free (qc->preedit_str);
-       qc->preedit_str = NULL;
-       g_object_set_data (G_OBJECT (win), TIC_INSERT_TEXT, NULL);
--      g_signal_emit_by_name (context, "commit", fixed_str);
--      g_signal_emit_by_name (context, "preedit_changed");
-+      needs_commit = TRUE;
-+      needs_preedit_change = TRUE;
-
-       unsigned int filtered =
-          GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (win),
-@@ -162,10 +164,11 @@ output_result (GtkIMContext *context,
-       qc->selected_len =
-          GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (win),
-                                               TIC_SELECTED_LEN));
--      g_free (qc->preedit_str);
-+      if (qc->preedit_str)
-+        g_free (qc->preedit_str);
-       qc->preedit_str = g_strdup (marked_str);
-       g_object_set_data (G_OBJECT (win), TIC_MARKED_TEXT, NULL);
--      g_signal_emit_by_name (context, "preedit_changed");
-+      needs_preedit_change = TRUE;
-       retval = TRUE;
-     }
-   if (!fixed_str && !marked_str)
-@@ -174,8 +177,15 @@ output_result (GtkIMContext *context,
-         retval = TRUE;
-     }
-
--  g_free (fixed_str);
--  g_free (marked_str);
-+  if (needs_commit)
-+    g_signal_emit_by_name (context, "commit", fixed_str);
-+  if (needs_preedit_change)
-+    g_signal_emit_by_name (context, "preedit-changed");
-+
-+  if (fixed_str)
-+    g_free (fixed_str);
-+  if (marked_str)
-+    g_free (marked_str);
-
-   return retval;
- }
-@@ -261,8 +271,6 @@ discard_preedit (GtkIMContext *context)
-
-   if (qc->preedit_str && strlen (qc->preedit_str) > 0)
-     {
--      g_signal_emit_by_name (context, "commit", qc->preedit_str);
--
-       g_free (qc->preedit_str);
-       qc->preedit_str = NULL;
-       g_signal_emit_by_name (context, "preedit_changed");
diff --git a/bockbuild/mac-sdk/patches/gtk/gtknsview-defer-map-and-lock-in-clipping.patch b/bockbuild/mac-sdk/patches/gtk/gtknsview-defer-map-and-lock-in-clipping.patch
deleted file mode 100644 (file)
index a5d3bfd..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-commit 33da74a9ab13bba4f46b2455cc858c7ae02bd923
-Author: Cody Russell <cody@jhu.edu>
-Date:   Mon Mar 31 08:51:25 2014 -0500
-
-    This is an attempt to solve an issue in GtkNSView that occurs in
-    Xamarin Studio when we try to use an animating NSProgressIndicator.
-    The error only occurred if the indicator was in animating mode,
-    and it seems likely to be a threading race condition somewhere.
-
-    This patch does two things. I've found the issue to be reproducible
-    if we do one of these things but not the other, but I have not been
-    able to reproduce it with both of these.
-
-    First, we slightly defer the mapping of the widget.
-    Second, we lock the view during clip_to_parent_viewports().
-
-    https://bugzilla.xamarin.com/show_bug.cgi?id=17401
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index d5eb307..31c4970 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -280,6 +280,7 @@ clip_to_parent_viewports (GtkNSView *ns_view,
-
-   ns_view = get_associated_gtknsview (self);
-
-+  [self lockFocusIfCanDraw];
-   if (ns_view)
-     cg_context = clip_to_parent_viewports (ns_view, self);
-
-@@ -287,6 +288,8 @@ clip_to_parent_viewports (GtkNSView *ns_view,
-
-   if (cg_context)
-     CGContextRestoreGState (cg_context);
-+
-+  [self unlockFocus];
- }
- @end
-
-@@ -566,15 +569,17 @@ gtk_ns_view_unrealize (GtkWidget *widget)
-   GTK_WIDGET_CLASS (gtk_ns_view_parent_class)->unrealize (widget);
- }
-
--static void
--gtk_ns_view_map (GtkWidget *widget)
--{
-+static gboolean
-+really_map (GtkWidget *widget) {
-   GtkNSView *ns_view = GTK_NS_VIEW (widget);
-   GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
-   GtkAllocation allocation;
-   NSView *parent_view;
-   NSWindow *window;
-
-+  if (gtk_widget_get_mapped (widget))
-+    return FALSE;
-+
-   gtk_widget_get_allocation (widget, &allocation);
-   gtk_ns_view_position_view (ns_view, &allocation);
-
-@@ -605,6 +610,14 @@ gtk_ns_view_map (GtkWidget *widget)
-           gtk_ns_view_swizzle_draw_rect_recursive (text, "gtkwindow", toplevel);
-         }
-     }
-+
-+  return FALSE;
-+}
-+
-+static void
-+gtk_ns_view_map (GtkWidget *widget)
-+{
-+   g_timeout_add (50, (GSourceFunc)really_map, widget);
- }
-
- static void
diff --git a/bockbuild/mac-sdk/patches/gtk/gtknsview-fix-invalid-casts.patch b/bockbuild/mac-sdk/patches/gtk/gtknsview-fix-invalid-casts.patch
deleted file mode 100644 (file)
index 0e79a71..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index bb9ae06..6820113 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -534,7 +534,7 @@ gtk_ns_view_notify (GObject    *object,
-                     GParamSpec *pspec)
- {
-   GtkNSView *ns_view = GTK_NS_VIEW (object);
--  GtkWindow *window = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (object)));
-+  GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (object));
-
-   if (G_OBJECT_CLASS (gtk_ns_view_parent_class)->notify)
-     G_OBJECT_CLASS (gtk_ns_view_parent_class)->notify (object, pspec);
-@@ -551,7 +551,7 @@ gtk_ns_view_notify (GObject    *object,
-
-       if (gtk_widget_has_focus (GTK_WIDGET (object)))
-         [ns_window makeFirstResponder:ns_view->priv->view];
--      else if ([ns_window firstResponder] == ns_view->priv->view || !gtk_window_is_active (window))
-+      else if ([ns_window firstResponder] == ns_view->priv->view || (GTK_IS_WINDOW (toplevel) && !gtk_window_is_active (GTK_WINDOW (toplevel))))
-         [ns_window makeFirstResponder:nil];
-     }
- }
diff --git a/bockbuild/mac-sdk/patches/gtk/gtknsview-forward-cmdz-to-textview-undo-manager.patch b/bockbuild/mac-sdk/patches/gtk/gtknsview-forward-cmdz-to-textview-undo-manager.patch
deleted file mode 100644 (file)
index 7649b61..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-commit ea748772ee7fd99d70a1ce119bc377c3e2083954
-Author: Cody Russell <cody@jhu.edu>
-Date:   Tue Jan 13 16:46:03 2015 -0600
-
-    [GtkNSView] Add support for forwarding Cmd-Z to an NSTextView's undo manager
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index d5f8c76..9ba080d 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -712,6 +712,11 @@ gtk_ns_view_key_press (GtkWidget   *widget,
-
-           switch (event->keyval)
-             {
-+            case GDK_KEY_z: /* undo */
-+              if ([[text_view undoManager] canUndo])
-+                [[text_view undoManager] undo];
-+              return TRUE;
-+
-             case GDK_KEY_c: /* copy */
-               if (has_selection)
-                 [text_view copy: text_view];
diff --git a/bockbuild/mac-sdk/patches/gtk/gtknsview-getter.patch b/bockbuild/mac-sdk/patches/gtk/gtknsview-getter.patch
deleted file mode 100644 (file)
index e860b73..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index 2540a81..e5c48c3 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -914,5 +914,13 @@ gtk_ns_view_new (gpointer nsview)
-                        NULL);
- }
-
-+gpointer
-+gtk_ns_view_get_nsview (GtkNSView *gtknsview)
-+{
-+  g_return_val_if_fail (GTK_IS_NS_VIEW (gtknsview), NULL);
-+
-+  return gtknsview->priv->view;
-+}
-+
- #define __GTK_NS_VIEW_C__
- #include "gtkaliasdef.c"
-diff --git a/gtk/gtknsview.h b/gtk/gtknsview.h
-index 2c0aab7..a923827 100644
---- a/gtk/gtknsview.h
-+++ b/gtk/gtknsview.h
-@@ -56,6 +56,7 @@ struct _GtkNSViewClass
-
- GType       gtk_ns_view_get_type (void) G_GNUC_CONST;
- GtkWidget * gtk_ns_view_new      (gpointer  nsview);
-+gpointer    gtk_ns_view_get_nsview (GtkNSView *gtknsview);
-
- G_END_DECLS
diff --git a/bockbuild/mac-sdk/patches/gtk/gtknsview-only-unset-first-responder-if-it-is-our-view.patch b/bockbuild/mac-sdk/patches/gtk/gtknsview-only-unset-first-responder-if-it-is-our-view.patch
deleted file mode 100644 (file)
index 1a5504d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-commit f35387716481b79c353f098cb80ded665bd7d399
-Author: Cody Russell <cody@jhu.edu>
-Date:   Sat Feb 28 11:27:07 2015 -0600
-
-    GtkNSView should only unset the first responder if either it is
-    our embedded view or if our toplevel window is no longer focused.
-
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index b325bda..645231d 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -534,6 +534,7 @@ gtk_ns_view_notify (GObject    *object,
-                     GParamSpec *pspec)
- {
-   GtkNSView *ns_view = GTK_NS_VIEW (object);
-+  GtkWindow *window = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (object)));
-
-   if (G_OBJECT_CLASS (gtk_ns_view_parent_class)->notify)
-     G_OBJECT_CLASS (gtk_ns_view_parent_class)->notify (object, pspec);
-@@ -550,7 +551,7 @@ gtk_ns_view_notify (GObject    *object,
-
-       if (gtk_widget_has_focus (GTK_WIDGET (object)))
-         [ns_window makeFirstResponder:ns_view->priv->view];
--      else
-+      else if ([ns_window firstResponder] == ns_view->priv->view || !gtk_window_is_active (window))
-         [ns_window makeFirstResponder:nil];
-     }
- }
diff --git a/bockbuild/mac-sdk/patches/gtk/gtknsview-timeout-fix.patch b/bockbuild/mac-sdk/patches/gtk/gtknsview-timeout-fix.patch
deleted file mode 100644 (file)
index a8e99f8..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index 31c4970..ad003d9 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -48,6 +48,7 @@ enum
- struct _GtkNSViewPrivate
- {
-   NSView *view;
-+  guint   map_timeout;
- };
-
- #define GTK_NS_VIEW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
-@@ -563,6 +564,15 @@ gtk_ns_view_position_view (GtkNSView     *ns_view,
- static void
- gtk_ns_view_unrealize (GtkWidget *widget)
- {
-+  GtkNSView *ns_view = GTK_NS_VIEW (widget);
-+
-+  if (ns_view->priv->map_timeout != 0)
-+    {
-+      g_source_remove (ns_view->priv->map_timeout);
-+      ns_view->priv->map_timeout = 0;
-+      g_object_unref (widget);
-+    }
-+
-   if (gtk_widget_get_mapped (widget))
-     gtk_widget_unmap (widget);
-
-@@ -577,6 +587,8 @@ really_map (GtkWidget *widget) {
-   NSView *parent_view;
-   NSWindow *window;
-
-+  g_object_unref (widget);
-+
-   if (gtk_widget_get_mapped (widget))
-     return FALSE;
-
-@@ -611,13 +623,18 @@ really_map (GtkWidget *widget) {
-         }
-     }
-
-+  ns_view->priv->map_timeout = 0;
-+
-   return FALSE;
- }
-
- static void
- gtk_ns_view_map (GtkWidget *widget)
- {
--   g_timeout_add (50, (GSourceFunc)really_map, widget);
-+  GtkNSView *ns_view = GTK_NS_VIEW (widget);
-+
-+  g_object_ref (widget);
-+  ns_view->priv->map_timeout = g_timeout_add (50, (GSourceFunc)really_map, widget);
- }
-
- static void
diff --git a/bockbuild/mac-sdk/patches/gtk/make-gtkpaned-emit-signals.patch b/bockbuild/mac-sdk/patches/gtk/make-gtkpaned-emit-signals.patch
deleted file mode 100644 (file)
index a26a068..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-From 1646b8a78f00cbddc00f6138d80fbc42dec82dac Mon Sep 17 00:00:00 2001
-From: iain holmes <iain@xamarin.com>
-Date: Tue, 13 Sep 2016 16:06:39 +0100
-Subject: [PATCH] [a11y] Make the GtkPaned widget emit GtkContainer::add
- signals
-
----
- gtk/gtkpaned.c | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c
-index f6225f0..0e3afd6 100644
---- a/gtk/gtkpaned.c
-+++ b/gtk/gtkpaned.c
-@@ -1375,6 +1375,10 @@ gtk_paned_pack1 (GtkPaned  *paned,
-       paned->child1_shrink = shrink;
-
-       gtk_widget_set_parent (child, GTK_WIDGET (paned));
-+
-+      /* We need to emit this signal so that the accessibility system knows
-+         that a widget has been added to the pane */
-+      g_signal_emit_by_name (G_OBJECT (paned), "add", child);
-     }
- }
-
-@@ -1394,6 +1398,10 @@ gtk_paned_pack2 (GtkPaned  *paned,
-       paned->child2_shrink = shrink;
-
-       gtk_widget_set_parent (child, GTK_WIDGET (paned));
-+
-+      /* We need to emit this signal so that the accessibility system knows
-+         that a widget has been added to the pane */
-+      g_signal_emit_by_name (G_OBJECT (paned), "add", child);
-     }
- }
-
-@@ -1406,6 +1414,11 @@ gtk_paned_add (GtkContainer *container,
-
-   g_return_if_fail (GTK_IS_PANED (container));
-
-+  /* Break the add signal cycle */
-+  if (widget->parent == container) {
-+    return;
-+  }
-+
-   paned = GTK_PANED (container);
-
-   if (!paned->child1)
diff --git a/bockbuild/mac-sdk/patches/gtk/nsview-check-for-superview.patch b/bockbuild/mac-sdk/patches/gtk/nsview-check-for-superview.patch
deleted file mode 100644 (file)
index ff7a195..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index 183537f..ee7dc96 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -1831,7 +1831,10 @@ gdk_event_translate (GdkEvent *event,
-             if (tmp_view && [tmp_view respondsToSelector:@selector(isGtkView)])
-               gtk_child = TRUE;
-
--            tmp_view = [tmp_view superview];
-+            if ([tmp_view respondsToSelector:@selector(superview)])
-+              tmp_view = [tmp_view superview];
-+            else
-+              tmp_view = NULL;
-           }
-
-         if (!gtk_child && ![[nswindow firstResponder] respondsToSelector:@selector(isGtkView)])
diff --git a/bockbuild/mac-sdk/patches/gtk/nsview-embedding-fix-keyboard-routing.patch b/bockbuild/mac-sdk/patches/gtk/nsview-embedding-fix-keyboard-routing.patch
deleted file mode 100644 (file)
index e1403df..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-commit 291c4626867885c74aa3a544eb9f74cd974895a0
-Author: Cody Russell <cody@jhu.edu>
-Date:   Wed Jan 14 14:56:34 2015 -0600
-
-    When determining if the event is destined for an NSView outside our
-    view hierarchy, we can't just check if it's not a gtkview, we need to
-    also ensure that none of its superviews are gtkviews.
-
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index 31c5d33..183537f 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -1823,7 +1823,18 @@ gdk_event_translate (GdkEvent *event,
-         GdkQuartzWindow *nswindow = ((GdkWindowImplQuartz *)private->impl)->toplevel;
-         GdkQuartzView *nsview = ((GdkWindowImplQuartz *)private->impl)->view;
-
--        if (![[nswindow firstResponder] respondsToSelector:@selector(isGtkView)])
-+        NSView *tmp_view = [nswindow firstResponder];
-+        gboolean gtk_child = FALSE;
-+
-+        while (tmp_view != NULL)
-+          {
-+            if (tmp_view && [tmp_view respondsToSelector:@selector(isGtkView)])
-+              gtk_child = TRUE;
-+
-+            tmp_view = [tmp_view superview];
-+          }
-+
-+        if (!gtk_child && ![[nswindow firstResponder] respondsToSelector:@selector(isGtkView)])
-           {
-             return_val = FALSE;
-             break;
diff --git a/bockbuild/mac-sdk/patches/gtk/nsview-embedding.patch b/bockbuild/mac-sdk/patches/gtk/nsview-embedding.patch
deleted file mode 100644 (file)
index 1c74b71..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index 6d4abc0..cf8b626 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -1468,6 +1468,8 @@ gdk_window_new (GdkWindow     *parent,
-     private->parent->children = g_list_prepend (private->parent->children, window);
-
-   native = _gdk_native_windows; /* Default */
-+  if (attributes->type_hint == 100)
-+      native = TRUE;
-   if (private->parent->window_type == GDK_WINDOW_ROOT)
-     native = TRUE; /* Always use native windows for toplevels */
-   else if (!private->input_only &&
-diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h
-index 95a3665..e9428d0 100644
---- a/gdk/gdkwindow.h
-+++ b/gdk/gdkwindow.h
-@@ -722,6 +722,9 @@ void       gdk_window_redirect_to_drawable   (GdkWindow     *window,
-                                               gint           height);
- void       gdk_window_remove_redirection     (GdkWindow     *window);
-
-+/* NSView embedding */
-+gboolean   gdk_window_supports_nsview_embedding ();
-+
- #ifndef GDK_DISABLE_DEPRECATED
- #ifndef GDK_MULTIHEAD_SAFE
- GdkPointerHooks *gdk_set_pointer_hooks (const GdkPointerHooks *new_hooks);
-diff --git a/gdk/quartz/GdkQuartzView.c b/gdk/quartz/GdkQuartzView.c
-index 1c92714..3c7ba37 100644
---- a/gdk/quartz/GdkQuartzView.c
-+++ b/gdk/quartz/GdkQuartzView.c
-@@ -122,6 +122,11 @@
-   return selectedRange;
- }
-
-+-(BOOL)isGtkView
-+{
-+  return YES;
-+}
-+
- -(void)unmarkText
- {
-   GDK_NOTE (EVENTS, g_print ("unmarkText\n"));
-diff --git a/gdk/quartz/GdkQuartzView.h b/gdk/quartz/GdkQuartzView.h
-index 2f86de7..04acb62 100644
---- a/gdk/quartz/GdkQuartzView.h
-+++ b/gdk/quartz/GdkQuartzView.h
-@@ -47,5 +47,6 @@
- - (GdkWindow *)gdkWindow;
- - (NSTrackingRectTag)trackingRect;
- - (void)setNeedsInvalidateShadow: (BOOL)invalidate;
-+- (void)mouseDown:(NSEvent *)theEvent;
-
- @end
-diff --git a/gdk/quartz/GdkQuartzWindow.c b/gdk/quartz/GdkQuartzWindow.c
-index 8face0c..b6b794e 100644
---- a/gdk/quartz/GdkQuartzWindow.c
-+++ b/gdk/quartz/GdkQuartzWindow.c
-@@ -228,6 +228,28 @@
-   [self checkSendEnterNotify];
- }
-
-+-(BOOL)makeFirstResponder:(NSResponder *)responder
-+{
-+  GdkWindow *window = [[self contentView] gdkWindow];
-+  GdkWindowObject *private = (GdkWindowObject *)window;
-+  GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
-+
-+  if (impl->type_hint == GDK_WINDOW_TYPE_HINT_TOOLBAR)
-+    {
-+      if ([responder respondsToSelector:@selector(isGtkView)] ||
-+          [responder isKindOfClass:[GdkQuartzView class]])
-+        {
-+          _gdk_quartz_events_update_focus_window (window, TRUE);
-+        }
-+      else
-+        {
-+          _gdk_quartz_events_update_focus_window (window, FALSE);
-+        }
-+    }
-+
-+  return [super makeFirstResponder:responder];
-+}
-+
- -(id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag screen:(NSScreen *)screen
- {
-   self = [super initWithContentRect:contentRect
-diff --git a/gdk/quartz/GdkQuartzWindow.h b/gdk/quartz/GdkQuartzWindow.h
-index 9cdee6b..928f961 100644
---- a/gdk/quartz/GdkQuartzWindow.h
-+++ b/gdk/quartz/GdkQuartzWindow.h
-@@ -44,6 +44,7 @@
- -(BOOL)trackManualResize;
- -(void)showAndMakeKey:(BOOL)makeKey;
- -(void)hide;
-+-(BOOL)makeFirstResponder:(NSResponder *)responder;
-
- @end
-
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index b7b2665..f5bf65a 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -703,6 +703,37 @@ _gdk_quartz_events_send_map_event (GdkWindow *window)
-     }
- }
-
-+static NSView *
-+find_nsview_at_pos (GdkWindowImplQuartz *impl, gint x, gint y)
-+{
-+  NSView *view = impl->view;
-+  guint n_subviews;
-+  guint i;
-+
-+  n_subviews = [[view subviews] count];
-+
-+  for (i = 0; i < n_subviews; ++i)
-+    {
-+      NSView* sv = [[view subviews] objectAtIndex:i];
-+      NSRect r = [sv frame];
-+
-+      if (sv == impl->layer_view)
-+        continue;
-+
-+      if (r.origin.x <= x && r.origin.x + r.size.width >= x &&
-+          r.origin.y <= y && r.origin.y + r.size.height >= y)
-+        {
-+          NSView* child = find_nsview_at_pos (impl, x - r.origin.x, y - r.origin.y);
-+          if (child != NULL)
-+            return child;
-+          else
-+            return sv;
-+        }
-+    }
-+
-+  return NULL;
-+}
-+
- static GdkWindow *
- find_toplevel_under_pointer (GdkDisplay *display,
-                              NSPoint     screen_point,
-@@ -869,34 +900,21 @@ find_window_for_ns_event (NSEvent *nsevent,
-               {
-                 GdkWindowObject *toplevel_private;
-                 GdkWindowImplQuartz *toplevel_impl;
--                guint n_subviews;
--                guint i;
-+                NSView *subview;
-
-                 toplevel = toplevel_under_pointer;
-
-                 toplevel_private = (GdkWindowObject *)toplevel;
-                 toplevel_impl = (GdkWindowImplQuartz *)toplevel_private->impl;
-
--                n_subviews = [[toplevel_impl->view subviews] count];
--
--                for (i = 0; i < n_subviews; ++i)
--                  {
--                    NSView* sv = [[toplevel_impl->view subviews] objectAtIndex:i];
--                    NSRect r = [sv frame];
--
--                    if (sv == toplevel_impl->layer_view)
--                      continue;
--
--                    if (r.origin.x <= *x && r.origin.x + r.size.width >= *x &&
--                        r.origin.y <= *y && r.origin.y + r.size.height >= *y)
--                      {
--                        g_signal_emit_by_name (toplevel, "native-child-event",
--                                               sv, nsevent);
-+                subview = find_nsview_at_pos (toplevel_impl, *x, *y);
-+                if (subview != NULL && ![subview isKindOfClass:[GdkQuartzView class]]) {
-+                  g_signal_emit_by_name (toplevel, "native-child-event",
-+                                         subview, nsevent);
-
--                        /* event is within subview, forward back to Cocoa */
--                        return NULL;
--                      }
--                  }
-+                  /* event is within subview, forward back to Cocoa */
-+                  return NULL;
-+                }
-
-                 *x = x_tmp;
-                 *y = y_tmp;
-@@ -1665,6 +1683,11 @@ gdk_event_translate (GdkEvent *event,
-       GdkWindowObject *private = (GdkWindowObject *)window;
-       GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
-
-+      GdkQuartzWindow *nswindow = ((GdkWindowImplQuartz *)private->impl)->toplevel;
-+      GdkQuartzView *nsview = ((GdkWindowImplQuartz *)private->impl)->view;
-+
-+      [nswindow makeFirstResponder:nsview];
-+
-       if (![NSApp isActive])
-         {
-           [NSApp activateIgnoringOtherApps:YES];
-@@ -1796,6 +1819,15 @@ gdk_event_translate (GdkEvent *event,
-     case NSFlagsChanged:
-       {
-         GdkEventType type;
-+        GdkWindowObject *private = (GdkWindowObject *)window;
-+        GdkQuartzWindow *nswindow = ((GdkWindowImplQuartz *)private->impl)->toplevel;
-+        GdkQuartzView *nsview = ((GdkWindowImplQuartz *)private->impl)->view;
-+
-+        if (![[nswindow firstResponder] respondsToSelector:@selector(isGtkView)])
-+          {
-+            return_val = FALSE;
-+            break;
-+          }
-
-         type = _gdk_quartz_keys_event_type (nsevent);
-         if (type == GDK_NOTHING)
-diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
-index 5b9ceef..050139a 100644
---- a/gdk/quartz/gdkwindow-quartz.c
-+++ b/gdk/quartz/gdkwindow-quartz.c
-@@ -889,6 +889,12 @@ get_nsscreen_for_point (gint x, gint y)
-   return screen;
- }
-
-+gboolean
-+gdk_window_supports_nsview_embedding ()
-+{
-+  return TRUE;
-+}
-+
- void
- _gdk_window_impl_new (GdkWindow     *window,
-                     GdkWindow     *real_parent,
diff --git a/bockbuild/mac-sdk/patches/gtk/quartz-call-undo-redo-on-cmdz.patch b/bockbuild/mac-sdk/patches/gtk/quartz-call-undo-redo-on-cmdz.patch
deleted file mode 100644 (file)
index 98db2ef..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
-index ee7dc96..f4ae401 100644
---- a/gdk/quartz/gdkevents-quartz.c
-+++ b/gdk/quartz/gdkevents-quartz.c
-@@ -1826,6 +1826,33 @@ gdk_event_translate (GdkEvent *event,
-         NSView *tmp_view = [nswindow firstResponder];
-         gboolean gtk_child = FALSE;
-
-+        if (event_type == NSKeyDown && ([nsevent modifierFlags] & NSCommandKeyMask) != 0 && [[nsevent characters] characterAtIndex:0] == 'z')
-+          {
-+            if ([tmp_view respondsToSelector:@selector(undoManager)])
-+              {
-+                NSUndoManager *undo_manager = [tmp_view undoManager];
-+
-+                if (([nsevent modifierFlags] & NSShiftKeyMask) != 0)
-+                  {
-+                    if ([undo_manager canRedo])
-+                      {
-+                        [undo_manager redo];
-+                        return_val = FALSE;
-+                        break;
-+                      }
-+                  }
-+                else
-+                  {
-+                    if ([undo_manager canUndo])
-+                      {
-+                        [undo_manager undo];
-+                        return_val = FALSE;
-+                        break;
-+                      }
-+                  }
-+              }
-+          }
-+
-         while (tmp_view != NULL)
-           {
-             if (tmp_view && [tmp_view respondsToSelector:@selector(isGtkView)])
-diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
-index 71fd917..182c82d 100644
---- a/gtk/gtknsview.c
-+++ b/gtk/gtknsview.c
-@@ -742,11 +742,6 @@ gtk_ns_view_key_press (GtkWidget   *widget,
-
-           switch (event->keyval)
-             {
--            case GDK_KEY_z: /* undo */
--              if ([[text_view undoManager] canUndo])
--                [[text_view undoManager] undo];
--              return TRUE;
--
-             case GDK_KEY_c: /* copy */
-               if (has_selection)
-                 [text_view copy: text_view];
diff --git a/bockbuild/mac-sdk/patches/gtk/remove-demos-from-build.patch b/bockbuild/mac-sdk/patches/gtk/remove-demos-from-build.patch
deleted file mode 100644 (file)
index 082970a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-commit d91f9583f6a3b0d40912ba35a71534255500b371
-Author: Alexis Christoforides <alexis@thenull.net>
-Date:   Fri Mar 6 15:30:34 2015 -0500
-
-    Remove demos from build, they fail when using a gdk-pixbuf that is staged.
-
-diff --git a/Makefile.am b/Makefile.am
-index 8e3a2f1..7288db2 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -1,7 +1,7 @@
- ## Makefile.am for GTK+
- include $(top_srcdir)/Makefile.decl
-
--SRC_SUBDIRS = gdk gtk modules demos tests perf
-+SRC_SUBDIRS = gdk gtk modules tests perf
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros build
-
- # require automake 1.4
diff --git a/bockbuild/mac-sdk/patches/gtk/remove-mouse-scrolling-from-GtkNotebook-tabs.patch b/bockbuild/mac-sdk/patches/gtk/remove-mouse-scrolling-from-GtkNotebook-tabs.patch
deleted file mode 100644 (file)
index 5fb4ce7..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-commit ad48f4d52bbac6139dd829fcc421ad16441f34d2
-Author: Cody Russell <bratsche@gnome.org>
-Date:   Tue Sep 21 16:18:22 2010 -0500
-
-    Remove mouse scrolling from GtkNotebook tabs.  Bug #630226.
-
-diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
-index 0770de6..9931b4c 100644
---- a/gtk/gtknotebook.c
-+++ b/gtk/gtknotebook.c
-@@ -257,8 +257,6 @@ static void gtk_notebook_size_allocate       (GtkWidget        *widget,
-                                             GtkAllocation    *allocation);
- static gint gtk_notebook_expose              (GtkWidget        *widget,
-                                             GdkEventExpose   *event);
--static gboolean gtk_notebook_scroll          (GtkWidget        *widget,
--                                              GdkEventScroll   *event);
- static gint gtk_notebook_button_press        (GtkWidget        *widget,
-                                             GdkEventButton   *event);
- static gint gtk_notebook_button_release      (GtkWidget        *widget,
-@@ -542,7 +540,6 @@ gtk_notebook_class_init (GtkNotebookClass *class)
-   widget_class->size_request = gtk_notebook_size_request;
-   widget_class->size_allocate = gtk_notebook_size_allocate;
-   widget_class->expose_event = gtk_notebook_expose;
--  widget_class->scroll_event = gtk_notebook_scroll;
-   widget_class->button_press_event = gtk_notebook_button_press;
-   widget_class->button_release_event = gtk_notebook_button_release;
-   widget_class->popup_menu = gtk_notebook_popup_menu;
-@@ -1658,7 +1655,6 @@ gtk_notebook_get_property (GObject         *object,
-  * gtk_notebook_size_request
-  * gtk_notebook_size_allocate
-  * gtk_notebook_expose
-- * gtk_notebook_scroll
-  * gtk_notebook_button_press
-  * gtk_notebook_button_release
-  * gtk_notebook_popup_menu
-@@ -1852,8 +1848,7 @@ gtk_notebook_realize (GtkWidget *widget)
-   attributes.event_mask = gtk_widget_get_events (widget);
-   attributes.event_mask |= (GDK_BUTTON_PRESS_MASK |
-                           GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK |
--                          GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK |
--                          GDK_SCROLL_MASK);
-+                          GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
-   attributes_mask = GDK_WA_X | GDK_WA_Y;
-
-   notebook->event_window = gdk_window_new (gtk_widget_get_parent_window (widget),
-@@ -2604,49 +2599,6 @@ get_widget_coordinates (GtkWidget *widget,
-     return FALSE;
- }
-
--static gboolean
--gtk_notebook_scroll (GtkWidget      *widget,
--                     GdkEventScroll *event)
--{
--  GtkNotebookPrivate *priv = GTK_NOTEBOOK_GET_PRIVATE (widget);
--  GtkNotebook *notebook = GTK_NOTEBOOK (widget);
--  GtkWidget *child, *event_widget;
--  gint i;
--
--  if (!notebook->cur_page)
--    return FALSE;
--
--  child = notebook->cur_page->child;
--  event_widget = gtk_get_event_widget ((GdkEvent *)event);
--
--  /* ignore scroll events from the content of the page */
--  if (!event_widget || gtk_widget_is_ancestor (event_widget, child) || event_widget == child)
--    return FALSE;
--
--  /* nor from the action area */
--  for (i = 0; i < 2; i++)
--    {
--      if (event_widget == priv->action_widget[i] ||
--          (priv->action_widget[i] &&
--           gtk_widget_is_ancestor (event_widget, priv->action_widget[i])))
--        return FALSE;
--    }
--
--  switch (event->direction)
--    {
--    case GDK_SCROLL_RIGHT:
--    case GDK_SCROLL_DOWN:
--      gtk_notebook_next_page (notebook);
--      break;
--    case GDK_SCROLL_LEFT:
--    case GDK_SCROLL_UP:
--      gtk_notebook_prev_page (notebook);
--      break;
--    }
--
--  return TRUE;
--}
--
- static GList*
- get_tab_at_pos (GtkNotebook *notebook, gint x, gint y)
- {
diff --git a/bockbuild/mac-sdk/patches/gtk/scrolled-window-draw-child-bg.patch b/bockbuild/mac-sdk/patches/gtk/scrolled-window-draw-child-bg.patch
deleted file mode 100644 (file)
index 1edc25c..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
-index 02920ce..3999d7d 100644
---- a/gtk/gtkscrolledwindow.c
-+++ b/gtk/gtkscrolledwindow.c
-@@ -442,6 +442,13 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
-                                                                GTK_PARAM_READABLE));
-
-   gtk_widget_class_install_style_property (widget_class,
-+             g_param_spec_boolean ("draw-child-bg",
-+                       P_("Draw Child Background"),
-+                       P_("Fill window with child background color"),
-+                       FALSE,
-+                       GTK_PARAM_READABLE));
-+
-+  gtk_widget_class_install_style_property (widget_class,
-                                          g_param_spec_int ("scrollbar-spacing",
-                                                            P_("Scrollbar spacing"),
-                                                            P_("Number of pixels between the scrollbars and the scrolled window"),
-@@ -1296,8 +1303,10 @@ gtk_scrolled_window_paint (GtkWidget      *widget,
-   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
-   GdkRectangle *area = &event->area;
-   GtkAllocation relative_allocation;
-+  gboolean draw_child_bg;
-+  gtk_widget_style_get (widget, "draw-child-bg", &draw_child_bg, NULL);
-
--  if (scrolled_window->shadow_type != GTK_SHADOW_NONE)
-+  if (draw_child_bg || scrolled_window->shadow_type != GTK_SHADOW_NONE)
-     {
-       gboolean scrollbars_within_bevel;
-
-@@ -1322,13 +1331,47 @@ gtk_scrolled_window_paint (GtkWidget      *widget,
-           relative_allocation.height = widget->allocation.height - 2 * container->border_width;
-         }
-
--      gtk_paint_shadow (widget->style, widget->window,
--                      GTK_STATE_NORMAL, scrolled_window->shadow_type,
--                      area, widget, "scrolled_window",
--                      widget->allocation.x + relative_allocation.x,
--                      widget->allocation.y + relative_allocation.y,
--                      relative_allocation.width,
--                      relative_allocation.height);
-+      if (draw_child_bg)
-+        {
-+          GtkWidget *child  = gtk_bin_get_child (GTK_BIN (widget));
-+          if (child != NULL)
-+            {
-+              GdkColor *bgcolor = NULL;
-+              if (GTK_IS_TREE_VIEW (child))
-+                {
-+                  gtk_widget_style_get (child, "even-row-color", &bgcolor, NULL);
-+                  if (!bgcolor)
-+                    bgcolor = &child->style->base[child->state];
-+                } else
-+                  bgcolor = &child->style->bg[child->state];
-+
-+              if (bgcolor)
-+                {
-+                  cairo_t *cr = gdk_cairo_create (widget->window);
-+                  cairo_rectangle (cr,
-+                                  widget->allocation.x + relative_allocation.x,
-+                                  widget->allocation.y + relative_allocation.y,
-+                                  relative_allocation.width,
-+                                  relative_allocation.height);
-+                  cairo_clip_preserve (cr);
-+                  gdk_cairo_set_source_color (cr, bgcolor);
-+                  cairo_fill (cr);
-+                  cairo_destroy (cr);
-+                }
-+            }
-+        }
-+
-+      if (scrolled_window->shadow_type != GTK_SHADOW_NONE)
-+        {
-+
-+          gtk_paint_shadow (widget->style, widget->window,
-+                           GTK_STATE_NORMAL, scrolled_window->shadow_type,
-+                           area, widget, "scrolled_window",
-+                           widget->allocation.x + relative_allocation.x,
-+                           widget->allocation.y + relative_allocation.y,
-+                           relative_allocation.width,
-+                           relative_allocation.height);
-+        }
-     }
- }
index c0485ceff7ed4535d3e57f15878b3877862e8a2d..8b7481ea2e0d95ba6f7d6e15b9fbcc53888beca2 160000 (submodule)
@@ -1 +1 @@
-Subproject commit c0485ceff7ed4535d3e57f15878b3877862e8a2d
+Subproject commit 8b7481ea2e0d95ba6f7d6e15b9fbcc53888beca2