aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dw/layout.cc3
-rw-r--r--dw/layout.hh7
-rw-r--r--dw/widget.cc26
-rw-r--r--dw/widget.hh19
4 files changed, 55 insertions, 0 deletions
diff --git a/dw/layout.cc b/dw/layout.cc
index 8495f2b9..9e667cff 100644
--- a/dw/layout.cc
+++ b/dw/layout.cc
@@ -218,6 +218,9 @@ Layout::Layout (Platform *platform)
platform->setLayout (this);
selectionState.setLayout(this);
+
+ queueResizeCounter = sizeAllocateCounter = sizeRequestCounter =
+ getExtremesCounter = 0;
}
Layout::~Layout ()
diff --git a/dw/layout.hh b/dw/layout.hh
index 46fc9ffe..730c35f1 100644
--- a/dw/layout.hh
+++ b/dw/layout.hh
@@ -211,6 +211,13 @@ private:
void queueResize ();
void removeWidget ();
+ /* For tests regarding the respective Widget methods. Accessed by
+ respective methods (enter..., leave..., ...Entered) defined in
+ Widget. */
+
+ int queueResizeCounter, sizeAllocateCounter, sizeRequestCounter,
+ getExtremesCounter;
+
public:
Layout (Platform *platform);
~Layout ();
diff --git a/dw/widget.cc b/dw/widget.cc
index d8d6a1d4..916703cd 100644
--- a/dw/widget.cc
+++ b/dw/widget.cc
@@ -128,6 +128,10 @@ void Widget::queueDrawArea (int x, int y, int width, int height)
*/
void Widget::queueResize (int ref, bool extremesChanged)
{
+ assert (!queueResizeEntered ());
+
+ enterQueueResize ();
+
Widget *widget2, *child;
//printf("The %stop-level %s %p with parentRef = %d has changed its size. "
@@ -180,6 +184,8 @@ void Widget::queueResize (int ref, bool extremesChanged)
if (layout)
layout->queueResize ();
+
+ leaveQueueResize ();
}
@@ -189,6 +195,10 @@ void Widget::queueResize (int ref, bool extremesChanged)
*/
void Widget::sizeRequest (Requisition *requisition)
{
+ assert (!queueResizeEntered ());
+
+ enterSizeRequest ();
+
//printf ("The %stop-level %s %p with parentRef = %d: needsResize: %s\n",
// parent ? "non-" : "", getClassName(), this, parentRef,
// needsResize () ? "true" : "false");
@@ -207,6 +217,8 @@ void Widget::sizeRequest (Requisition *requisition)
//printf (" ==> Result: %d x (%d + %d)\n",
// requisition->width, requisition->ascent, requisition->descent);
+
+ leaveSizeRequest ();
}
/**
@@ -214,6 +226,10 @@ void Widget::sizeRequest (Requisition *requisition)
*/
void Widget::getExtremes (Extremes *extremes)
{
+ assert (!queueResizeEntered ());
+
+ enterGetExtremes ();
+
if (extremesChanged ()) {
getExtremesImpl (extremes);
this->extremes = *extremes;
@@ -223,6 +239,8 @@ void Widget::getExtremes (Extremes *extremes)
DBG_OBJ_SET_NUM (this, "extremes->maxWidth", extremes->maxWidth);
} else
*extremes = this->extremes;
+
+ leaveGetExtremes ();
}
/**
@@ -231,6 +249,12 @@ void Widget::getExtremes (Extremes *extremes)
*/
void Widget::sizeAllocate (Allocation *allocation)
{
+ assert (!queueResizeEntered ());
+ assert (!sizeRequestEntered ());
+ assert (!getExtremesEntered ());
+
+ enterSizeAllocate ();
+
/*printf ("The %stop-level %s %p is allocated:\n",
parent ? "non-" : "", getClassName(), this);
printf (" old = (%d, %d, %d + (%d + %d))\n",
@@ -281,6 +305,8 @@ void Widget::sizeAllocate (Allocation *allocation)
}
/*unsetFlags (NEEDS_RESIZE);*/
+
+ leaveSizeAllocate ();
}
bool Widget::buttonPress (EventButton *event)
diff --git a/dw/widget.hh b/dw/widget.hh
index 088c39a6..1b0b7b60 100644
--- a/dw/widget.hh
+++ b/dw/widget.hh
@@ -261,6 +261,25 @@ public:
inline void setDeleteCallback(DW_Callback_t func, void *data)
{ deleteCallbackFunc = func; deleteCallbackData = data; }
+private:
+
+ void enterQueueResize () { if (layout) layout->queueResizeCounter++; }
+ void leaveQueueResize () { if (layout) layout->queueResizeCounter--; }
+ bool queueResizeEntered () { return layout && layout->queueResizeCounter; }
+
+ void enterSizeAllocate () { if (layout) layout->sizeAllocateCounter++; }
+ void leaveSizeAllocate () { if (layout) layout->sizeAllocateCounter--; }
+ bool sizeAllocateEntered () { return layout && layout->sizeAllocateCounter; }
+
+ void enterSizeRequest () { if (layout) layout->sizeRequestCounter++; }
+ void leaveSizeRequest () { if (layout) layout->sizeRequestCounter--; }
+ bool sizeRequestEntered () { return layout && layout->sizeRequestCounter; }
+
+ void enterGetExtremes () { if (layout) layout->getExtremesCounter++; }
+ void leaveGetExtremes () { if (layout) layout->getExtremesCounter--; }
+ bool getExtremesEntered () { return layout && layout->getExtremesCounter; }
+
+
public:
static int CLASS_ID;