diff --git a/.github/workflows/win-build.yml b/.github/workflows/win-build.yml index 4ef735fce..2161addab 100644 --- a/.github/workflows/win-build.yml +++ b/.github/workflows/win-build.yml @@ -110,8 +110,8 @@ jobs: matrix: config: - "" - - "--enable-config=mem" - - "--enable-config=all" + - "--enable-symbols=mem" + - "--enable-symbols=all" - "--disable-shared" steps: - name: Install MSYS2 diff --git a/doc/ttk_panedwindow.n b/doc/ttk_panedwindow.n index beab06380..20a27179b 100644 --- a/doc/ttk_panedwindow.n +++ b/doc/ttk_panedwindow.n @@ -112,9 +112,7 @@ Returns the new position of sash number \fIindex\fR. .SH "VIRTUAL EVENTS" .PP The panedwindow widget generates an \fB<>\fR virtual event on -LeaveNotify/NotifyInferior events, because Tk does not execute binding scripts -for events when the pointer crosses from a parent to a child. The -panedwindow widget needs to know when that happens. +LeaveNotify/NotifyInferior events. .SH "STYLING OPTIONS" .PP The class name for a \fBttk::panedwindow\fP is \fBTPanedwindow\fP. The diff --git a/generic/tkCanvas.c b/generic/tkCanvas.c index c93baa7cd..3a0b1b079 100644 --- a/generic/tkCanvas.c +++ b/generic/tkCanvas.c @@ -5339,9 +5339,17 @@ PickCurrentItem( event.type = LeaveNotify; /* - * If the event's detail happens to be NotifyInferior the binding - * mechanism will discard the event. To be consistent, always use - * NotifyAncestor. + * Behaviour before ticket #47d4f29159: + * If the event's detail happens to be NotifyInferior the binding + * mechanism will discard the event. To be consistent, always use + * NotifyAncestor. + * + * Behaviour after ticket #47d4f29159: + * The binding mechanism doesn't discard events with detail field + * NotifyInferior anymore. It would be best to base the detail + * field on the ancestry relationship between the old and new + * canvas items. For the time being, retain the choice from before + * ticket #47d4f29159, which doesn't harm. */ event.xcrossing.detail = NotifyAncestor; diff --git a/generic/tkTextTag.c b/generic/tkTextTag.c index 70eb0a567..ef318b70f 100644 --- a/generic/tkTextTag.c +++ b/generic/tkTextTag.c @@ -1808,9 +1808,17 @@ TkTextPickCurrent( event.type = LeaveNotify; /* - * Always use a detail of NotifyAncestor. Besides being - * consistent, this avoids problems where the binding code will - * discard NotifyInferior events. + * Behaviour before ticket #47d4f29159: + * Always use a detail of NotifyAncestor. Besides being + * consistent, this avoids problems where the binding code will + * discard NotifyInferior events. + * + * Behaviour after ticket #47d4f29159: + * The binding mechanism doesn't discard events with detail field + * NotifyInferior anymore. It would be best to base the detail + * field on the ancestry relationship between the old and new + * tags. For the time being, retain the choice from before + * ticket #47d4f29159, which doesn't harm. */ event.xcrossing.detail = NotifyAncestor; diff --git a/generic/ttk/ttkPanedwindow.c b/generic/ttk/ttkPanedwindow.c index 62b11a459..7cd2fd998 100644 --- a/generic/ttk/ttkPanedwindow.c +++ b/generic/ttk/ttkPanedwindow.c @@ -469,14 +469,16 @@ static const Ttk_ManagerSpec PanedManagerSpec = { /*------------------------------------------------------------------------ * +++ Event handler. * - * <> - * Tk does not execute binding scripts for events when - * the pointer crosses from a parent to a child. This widget - * needs to know when that happens, though, so it can reset - * the cursor. - * * This event handler generates an <> virtual event * on LeaveNotify/NotifyInferior. + * This was originally introduced because Tk used to discard events with + * detail field NotifyInferior. The <> event was then used + * to reset the cursor when the pointer crosses from a parent to a child. + * Since ticket #47d4f29159, LeaveNotify/NotifyInferior are no longer + * discarded: the event will trigger even with NotifyInferior + * detail field. The generated <> is nevertheless kept for + * backwards compatibility purpose since it is publicly documented, + * meaning that someone could bind to it. */ static const unsigned PanedEventMask = LeaveWindowMask; diff --git a/generic/ttk/ttkWidget.c b/generic/ttk/ttkWidget.c index 21315be1c..9339aa9ee 100644 --- a/generic/ttk/ttkWidget.c +++ b/generic/ttk/ttkWidget.c @@ -247,8 +247,6 @@ DestroyWidget(WidgetCore *corePtr) * For Destroy events, handle the cleanup process. * * For Focus events, set/clear the focus bit in the state field. - * It turns out this is impossible to do correctly in a binding script, - * because Tk filters out focus events with detail == NotifyInferior. * * For Deactivate/Activate pseudo-events, set/clear the background state * flag. diff --git a/library/ttk/panedwindow.tcl b/library/ttk/panedwindow.tcl index 877f48636..d5e25cdd5 100644 --- a/library/ttk/panedwindow.tcl +++ b/library/ttk/panedwindow.tcl @@ -22,8 +22,6 @@ bind TPanedwindow { ttk::panedwindow::Release %W %x %y } bind TPanedwindow { ttk::panedwindow::SetCursor %W %x %y } bind TPanedwindow { ttk::panedwindow::SetCursor %W %x %y } bind TPanedwindow { ttk::panedwindow::ResetCursor %W } -# See <> -bind TPanedwindow <> { ttk::panedwindow::ResetCursor %W } ## Sash movement: #