diff options
-rw-r--r-- | dw/layout.cc | 3 | ||||
-rw-r--r-- | dw/layout.hh | 7 | ||||
-rw-r--r-- | dw/widget.cc | 26 | ||||
-rw-r--r-- | dw/widget.hh | 19 |
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; |