diff options
-rw-r--r-- | doc/ttk_panedwindow.n | 4 | ||||
-rw-r--r-- | generic/tkCanvas.c | 14 | ||||
-rw-r--r-- | generic/tkTextTag.c | 14 | ||||
-rw-r--r-- | generic/ttk/ttkPanedwindow.c | 14 | ||||
-rw-r--r-- | generic/ttk/ttkWidget.c | 2 | ||||
-rw-r--r-- | library/ttk/panedwindow.tcl | 2 |
6 files changed, 31 insertions, 19 deletions
diff --git a/doc/ttk_panedwindow.n b/doc/ttk_panedwindow.n index d6b3ea3..5b6f728 100644 --- a/doc/ttk_panedwindow.n +++ b/doc/ttk_panedwindow.n @@ -117,9 +117,7 @@ widget subcommands (see \fIttk::widget(n)\fR for details): .SH "VIRTUAL EVENTS" .PP The panedwindow widget generates an \fB<<EnteredChild>>\fR virtual event on -LeaveNotify/NotifyInferior events, because Tk does not execute binding scripts -for <Leave> 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 aaac122..ccd3cac 100644 --- a/generic/tkCanvas.c +++ b/generic/tkCanvas.c @@ -4963,9 +4963,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 400b2d1..d734b8d 100644 --- a/generic/tkTextTag.c +++ b/generic/tkTextTag.c @@ -1803,9 +1803,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 ab67377..133de96 100644 --- a/generic/ttk/ttkPanedwindow.c +++ b/generic/ttk/ttkPanedwindow.c @@ -469,14 +469,16 @@ static Ttk_ManagerSpec PanedManagerSpec = { /*------------------------------------------------------------------------ * +++ Event handler. * - * <<NOTE-PW-LEAVE-NOTIFYINFERIOR>> - * Tk does not execute binding scripts for <Leave> 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 <<EnteredChild>> virtual event * on LeaveNotify/NotifyInferior. + * This was originally introduced because Tk used to discard events with + * detail field NotifyInferior. The <<EnteredChild>> 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 <Leave> event will trigger even with NotifyInferior + * detail field. The generated <<EnteredChild>> 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 75ca39c..37cc5ed 100644 --- a/generic/ttk/ttkWidget.c +++ b/generic/ttk/ttkWidget.c @@ -242,8 +242,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 1989b89..e2682f1 100644 --- a/library/ttk/panedwindow.tcl +++ b/library/ttk/panedwindow.tcl @@ -22,8 +22,6 @@ bind TPanedwindow <ButtonRelease-1> { ttk::panedwindow::Release %W %x %y } bind TPanedwindow <Motion> { ttk::panedwindow::SetCursor %W %x %y } bind TPanedwindow <Enter> { ttk::panedwindow::SetCursor %W %x %y } bind TPanedwindow <Leave> { ttk::panedwindow::ResetCursor %W } -# See <<NOTE-PW-LEAVE-NOTIFYINFERIOR>> -bind TPanedwindow <<EnteredChild>> { ttk::panedwindow::ResetCursor %W } ## Sash movement: # |