summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorJoe Mistachkin <joe@mistachkin.com>2015-02-05 22:26:58 (GMT)
committerJoe Mistachkin <joe@mistachkin.com>2015-02-05 22:26:58 (GMT)
commit8e9e78d52fa9ba2522f175585e3299f03c5b82d0 (patch)
treefd2d0c47bc7f3a6d897ad98ded8ad583a8cb7f84 /generic
parentb15c525eedc93a453dfea94482bc1198e27748fc (diff)
parentbedea5a5c74e0fb7f66c572836dc4d98a3285147 (diff)
downloadtk-8e9e78d52fa9ba2522f175585e3299f03c5b82d0.zip
tk-8e9e78d52fa9ba2522f175585e3299f03c5b82d0.tar.gz
tk-8e9e78d52fa9ba2522f175585e3299f03c5b82d0.tar.bz2
Merge updates from core-8-5-branch.bindScriptCount
Diffstat (limited to 'generic')
-rw-r--r--generic/tkFont.c2
-rw-r--r--generic/tkTextDisp.c48
2 files changed, 37 insertions, 13 deletions
diff --git a/generic/tkFont.c b/generic/tkFont.c
index 9eaaf94..5d2ad43 100644
--- a/generic/tkFont.c
+++ b/generic/tkFont.c
@@ -3015,7 +3015,6 @@ ConfigAttributesObj(
for (i = 0; i < objc; i += 2) {
optionPtr = objv[i];
- valuePtr = objv[i + 1];
if (Tcl_GetIndexFromObj(interp, optionPtr, fontOpt, "option", 1,
&index) != TCL_OK) {
@@ -3034,6 +3033,7 @@ ConfigAttributesObj(
}
return TCL_ERROR;
}
+ valuePtr = objv[i + 1];
switch (index) {
case FONT_FAMILY:
diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c
index cd232bf..548e47e 100644
--- a/generic/tkTextDisp.c
+++ b/generic/tkTextDisp.c
@@ -1019,7 +1019,7 @@ FreeStyle(
* whose leftmost character is given by indexPtr.
*
* Results:
- * The return value is a pointer to a DLine structure desribing the
+ * The return value is a pointer to a DLine structure describing the
* display line. All fields are filled in and correct except for y and
* nextPtr.
*
@@ -1908,7 +1908,7 @@ UpdateDisplayInfo(
prevPtr->index.linePtr) != lineHeight)) {
/*
* The logical line height we just calculated is actually
- * differnt to the currently cached height of the text line.
+ * different to the currently cached height of the text line.
* That is fine (the text line heights are only calculated
* asynchronously), but we must update the cached height so
* that any counts made with DLine pointers are the same as
@@ -3883,6 +3883,21 @@ TkTextUpdateOneLine(
*
*----------------------------------------------------------------------
*/
+#ifdef MAC_OSX_TK
+static void
+RedisplayText(
+ ClientData clientData )
+{
+ register TkText *textPtr = (TkText *) clientData;
+ TextDInfo *dInfoPtr = textPtr->dInfoPtr;
+ TkRegion damageRegion = TkCreateRegion();
+ XRectangle rectangle = {0, 0, dInfoPtr->maxX, dInfoPtr->maxY};
+ TkUnionRectWithRegion(&rectangle, damageRegion, damageRegion);
+
+ TextInvalidateRegion(textPtr, damageRegion);
+ DisplayText(clientData);
+}
+#endif
static void
DisplayText(
@@ -3897,6 +3912,9 @@ DisplayText(
int bottomY = 0; /* Initialization needed only to stop compiler
* warnings. */
Tcl_Interp *interp;
+#ifdef MAC_OSX_TK
+ Tcl_TimerToken macRefreshTimer = NULL;
+#endif
if ((textPtr->tkwin == NULL) || (textPtr->flags & DESTROYED)) {
/*
@@ -3968,16 +3986,6 @@ DisplayText(
UpdateDisplayInfo(textPtr);
dInfoPtr->dLinesInvalidated = 0;
-#ifdef MAC_OSX_TK
- /*
- * Make sure that unmapped subwindows really have been unmapped.
- * If the unmap request is pending as an idle request, the window
- * can get redrawn on top of the widget.
- */
- while (Tcl_DoOneEvent(TCL_IDLE_EVENTS|TCL_DONT_WAIT)) {}
-#endif
-
-
/*
* See if it's possible to bring some parts of the screen up-to-date by
* scrolling (copying from other parts of the screen). We have to be
@@ -4099,6 +4107,22 @@ DisplayText(
oldY, dInfoPtr->maxX-dInfoPtr->x, height, 0, y-oldY,
damageRgn)) {
TextInvalidateRegion(textPtr, damageRgn);
+
+#ifdef MAC_OSX_TK
+
+ /*
+ * On OS X large scrolls sometimes leave garbage on the screen.
+ * This attempts to clean it up by redisplaying the Text window
+ * after 200 milliseconds.
+ */
+ if ( abs(y-oldY) > 14 ) {
+ Tcl_DeleteTimerHandler(macRefreshTimer);
+ macRefreshTimer = Tcl_CreateTimerHandler(200,
+ RedisplayText,
+ clientData);
+ }
+#endif
+
}
numCopies++;
TkDestroyRegion(damageRgn);