summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorfvogelnew1@free.fr <fvogel>2015-11-14 09:11:48 (GMT)
committerfvogelnew1@free.fr <fvogel>2015-11-14 09:11:48 (GMT)
commit4059f3efe47abf038277cda2f28581f439bde741 (patch)
tree5de798bb84f6fa0d65abeb57ebcc8969af5b1968 /generic
parent3bd41d1660b2b5814eee27982f16ce90f8144139 (diff)
downloadtk-4059f3efe47abf038277cda2f28581f439bde741.zip
tk-4059f3efe47abf038277cda2f28581f439bde741.tar.gz
tk-4059f3efe47abf038277cda2f28581f439bde741.tar.bz2
TIP #438 - [.text pendingyupdate] command added, with corresponding new tests
Diffstat (limited to 'generic')
-rw-r--r--generic/tkText.c21
-rw-r--r--generic/tkText.h1
-rw-r--r--generic/tkTextDisp.c30
3 files changed, 47 insertions, 5 deletions
diff --git a/generic/tkText.c b/generic/tkText.c
index 4d2df7e..36bb4d4 100644
--- a/generic/tkText.c
+++ b/generic/tkText.c
@@ -689,15 +689,16 @@ TextWidgetObjCmd(
static const char *optionStrings[] = {
"bbox", "cget", "compare", "configure", "count", "debug", "delete",
"dlineinfo", "dump", "edit", "get", "image", "index", "insert",
- "mark", "peer", "replace", "scan", "search", "see", "tag", "window",
- "xview", "yupdate", "yview", NULL
+ "mark", "peer", "pendingyupdate", "replace", "scan", "search",
+ "see", "tag", "window", "xview", "yupdate", "yview", NULL
};
enum options {
TEXT_BBOX, TEXT_CGET, TEXT_COMPARE, TEXT_CONFIGURE, TEXT_COUNT,
TEXT_DEBUG, TEXT_DELETE, TEXT_DLINEINFO, TEXT_DUMP, TEXT_EDIT,
TEXT_GET, TEXT_IMAGE, TEXT_INDEX, TEXT_INSERT, TEXT_MARK,
- TEXT_PEER, TEXT_REPLACE, TEXT_SCAN, TEXT_SEARCH, TEXT_SEE,
- TEXT_TAG, TEXT_WINDOW, TEXT_XVIEW, TEXT_YUPDATE, TEXT_YVIEW
+ TEXT_PEER, TEXT_PENDINGYUPDATE, TEXT_REPLACE, TEXT_SCAN,
+ TEXT_SEARCH, TEXT_SEE, TEXT_TAG, TEXT_WINDOW, TEXT_XVIEW,
+ TEXT_YUPDATE, TEXT_YVIEW
};
if (objc < 2) {
@@ -1372,6 +1373,18 @@ TextWidgetObjCmd(
case TEXT_PEER:
result = TextPeerCmd(textPtr, interp, objc, objv);
break;
+ case TEXT_PENDINGYUPDATE: {
+ int number;
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ result = TCL_ERROR;
+ goto done;
+ }
+ number = TkTextPendingyupdate(textPtr);
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(number));
+ break;
+ }
case TEXT_REPLACE: {
const TkTextIndex *indexFromPtr, *indexToPtr;
diff --git a/generic/tkText.h b/generic/tkText.h
index 6f5f153..2d1bcaa 100644
--- a/generic/tkText.h
+++ b/generic/tkText.h
@@ -1124,6 +1124,7 @@ MODULE_SCOPE int TkTextMarkNameToIndex(TkText *textPtr,
MODULE_SCOPE void TkTextMarkSegToIndex(TkText *textPtr,
TkTextSegment *markPtr, TkTextIndex *indexPtr);
MODULE_SCOPE void TkTextEventuallyRepick(TkText *textPtr);
+MODULE_SCOPE int TkTextPendingyupdate(TkText *textPtr);
MODULE_SCOPE void TkTextPickCurrent(TkText *textPtr, XEvent *eventPtr);
MODULE_SCOPE void TkTextPixelIndex(TkText *textPtr, int x, int y,
TkTextIndex *indexPtr, int *nearest);
diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c
index 6036222..d740181 100644
--- a/generic/tkTextDisp.c
+++ b/generic/tkTextDisp.c
@@ -2920,6 +2920,8 @@ AsyncUpdateLineMetrics(
lineNum = TkTextUpdateLineMetrics(textPtr, lineNum,
dInfoPtr->lastMetricUpdateLine, 256);
+ dInfoPtr->currentMetricUpdateLine = lineNum;
+
if (tkTextDebug) {
char buffer[2 * TCL_INTEGER_SPACE + 1];
@@ -2946,7 +2948,6 @@ AsyncUpdateLineMetrics(
}
return;
}
- dInfoPtr->currentMetricUpdateLine = lineNum;
/*
* Re-arm the timer. We already have a refCount on the text widget so no
@@ -6034,6 +6035,33 @@ TkTextYviewCmd(
/*
*--------------------------------------------------------------
*
+ * TkTextPendingyupdate --
+ *
+ * This function computes how many lines are not up-to-date regarding
+ * asynchronous height calculations.
+ *
+ * Results:
+ * Returns a positive integer corresponding to the number of lines for
+ * which the height is outdated.
+ *
+ * Side effects:
+ * None.
+ *
+ *--------------------------------------------------------------
+ */
+
+int
+TkTextPendingyupdate(
+ TkText *textPtr) /* Information about text widget. */
+{
+ TextDInfo *dInfoPtr = textPtr->dInfoPtr;
+
+ return (dInfoPtr->lastMetricUpdateLine - dInfoPtr->currentMetricUpdateLine);
+}
+
+/*
+ *--------------------------------------------------------------
+ *
* TkTextScanCmd --
*
* This function is invoked to process the "scan" option for the widget