diff options
author | fvogel <fvogelnew1@free.fr> | 2015-12-13 20:10:47 (GMT) |
---|---|---|
committer | fvogel <fvogelnew1@free.fr> | 2015-12-13 20:10:47 (GMT) |
commit | f9684bb9628898c72e0372871542a674f8389312 (patch) | |
tree | 24af41e09fc2eff88fd59cd53fa3e7fda38523ac | |
parent | e6a82e18a1f52de96da71d0b31a1bb3f46ed7ba1 (diff) | |
parent | 47c6cf375321a9f00b0446e3753d6f9d8c357cd8 (diff) | |
download | tk-f9684bb9628898c72e0372871542a674f8389312.zip tk-f9684bb9628898c72e0372871542a674f8389312.tar.gz tk-f9684bb9628898c72e0372871542a674f8389312.tar.bz2 |
Merged core-8-5-branch
-rw-r--r-- | generic/tkTextDisp.c | 27 | ||||
-rw-r--r-- | tests/spinbox.test | 4 | ||||
-rw-r--r-- | tests/textDisp.test | 11 |
3 files changed, 27 insertions, 15 deletions
diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c index 9738c95..108cc4a 100644 --- a/generic/tkTextDisp.c +++ b/generic/tkTextDisp.c @@ -659,17 +659,8 @@ TkTextCreateDInfo( dInfoPtr->metricEpoch = -1; dInfoPtr->metricIndex.textPtr = NULL; dInfoPtr->metricIndex.linePtr = NULL; - - /* - * Add a refCount for each of the idle call-backs. - */ - - textPtr->refCount++; - dInfoPtr->lineUpdateTimer = Tcl_CreateTimerHandler(0, - AsyncUpdateLineMetrics, (ClientData) textPtr); - textPtr->refCount++; - dInfoPtr->scrollbarTimer = Tcl_CreateTimerHandler(200, - AsyncUpdateYScrollbar, (ClientData) textPtr); + dInfoPtr->lineUpdateTimer = NULL; + dInfoPtr->scrollbarTimer = NULL; textPtr->dInfoPtr = dInfoPtr; } @@ -2913,9 +2904,10 @@ AsyncUpdateLineMetrics( dInfoPtr->lineUpdateTimer = NULL; - if ((textPtr->tkwin == NULL) || (textPtr->flags & DESTROYED)) { + if ((textPtr->tkwin == NULL) || (textPtr->flags & DESTROYED) + || !Tk_IsMapped(textPtr->tkwin)) { /* - * The widget has been deleted. Don't do anything. + * The widget has been deleted, or is not mapped. Don't do anything. */ if (--textPtr->refCount == 0) { @@ -5302,6 +5294,15 @@ TkTextSetYView( } /* + * If the window height is smaller than the line height, prefer to make + * the top of the line visible. + */ + + if (dInfoPtr->maxY - dInfoPtr->y < lineHeight) { + bottomY = lineHeight; + } + + /* * Our job now is to arrange the display so that indexPtr appears as low * on the screen as possible but with its bottom no lower than bottomY. * BottomY is the bottom of the window if the desired line is just below diff --git a/tests/spinbox.test b/tests/spinbox.test index 430e176..0661635 100644 --- a/tests/spinbox.test +++ b/tests/spinbox.test @@ -1568,9 +1568,9 @@ test spinbox-22.3 {spinbox config, -from changes SF bug 559078} { set val } {6} -test entry-23.1 {selection present while disabled, bug 637828} { +test spinbox-23.1 {selection present while disabled, bug 637828} { destroy .e - entry .e + spinbox .e .e insert end 0123456789 .e select from 3 .e select to 6 diff --git a/tests/textDisp.test b/tests/textDisp.test index 90406df..d5372b8 100644 --- a/tests/textDisp.test +++ b/tests/textDisp.test @@ -1574,6 +1574,17 @@ test textDisp-11.20 {TkTextSetYView, see in elided lines} { # this shall not crash (null chunkPtr in TkTextSeeCmd is tested) .top.t see 3.0 } {} +test textDisp-11.21 {TkTextSetYView, window height smaller than the line height} { + .top.t delete 1.0 end + for {set i 1} {$i <= 10} {incr i} { + .top.t insert end "Line $i\n" + } + set lineheight [font metrics [.top.t cget -font] -linespace] + wm geometry .top 200x[expr {$lineheight / 2}] + update + .top.t see 1.0 + .top.t index @0,[expr {$lineheight - 2}] +} {1.0} .t configure -wrap word .t delete 50.0 51.0 |