summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/ttk_panedwindow.n4
-rw-r--r--generic/tkCanvas.c14
-rw-r--r--generic/tkTextTag.c14
-rw-r--r--generic/ttk/ttkPanedwindow.c14
-rw-r--r--generic/ttk/ttkWidget.c2
-rw-r--r--library/ttk/panedwindow.tcl2
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:
#