aboutsummaryrefslogtreecommitdiff
path: root/dw
diff options
context:
space:
mode:
authorRodrigo Arias Mallo <rodarima@gmail.com>2024-11-14 19:54:37 +0100
committerRodrigo Arias Mallo <rodarima@gmail.com>2024-11-14 19:54:37 +0100
commitc2629b5f08a874109ac0b22cb21ed0fc79bc6531 (patch)
tree6e6e4c5265a2b14a61d89b19410b2b9ecf9763e1 /dw
parentd26ad8f97c37987fc919a3c156538b3671a0ef1d (diff)
Only limit resizes on the top-level layout
Buttons also have their own Layout, which will try to resize every time the window has changed. We are only interested in the top-level layout, as is the one that has a problem on some pages.
Diffstat (limited to 'dw')
-rw-r--r--dw/layout.cc5
-rw-r--r--dw/layout.hh3
-rw-r--r--dw/ui.cc4
3 files changed, 8 insertions, 4 deletions
diff --git a/dw/layout.cc b/dw/layout.cc
index 4a5be74e..ed6f55db 100644
--- a/dw/layout.cc
+++ b/dw/layout.cc
@@ -255,7 +255,7 @@ Layout::Anchor::~Anchor ()
// ---------------------------------------------------------------------
-Layout::Layout (Platform *platform)
+Layout::Layout (Platform *platform, bool limit)
{
this->platform = platform;
view = NULL;
@@ -308,6 +308,7 @@ Layout::Layout (Platform *platform)
resizeIdleCounter = queueResizeCounter = sizeAllocateCounter
= sizeRequestCounter = getExtremesCounter = resizeCounter = 0;
+ resizeLimit = limit;
}
Layout::~Layout ()
@@ -882,7 +883,7 @@ void Layout::resizeIdle ()
/* Prevent infinite resize loop, if we reach this point it is very likely
* there is a bug in the layouting process */
- if (resizeCounter >= 1000) {
+ if (resizeLimit && resizeCounter >= 1000) {
MSG_ERR("Emergency layout stop after %d iterations\n", resizeCounter);
MSG_ERR("Please file a bug report with the complete console output\n");
resizeIdleId = -1;
diff --git a/dw/layout.hh b/dw/layout.hh
index e2b64901..08360e19 100644
--- a/dw/layout.hh
+++ b/dw/layout.hh
@@ -247,12 +247,13 @@ private:
int resizeIdleCounter, queueResizeCounter, sizeAllocateCounter,
sizeRequestCounter, getExtremesCounter, resizeCounter;
+ bool resizeLimit;
void enterResizeIdle () { resizeIdleCounter++; }
void leaveResizeIdle () { resizeIdleCounter--; }
public:
- Layout (Platform *platform);
+ Layout (Platform *platform, bool limit=true);
~Layout ();
inline void connectLink (LinkReceiver *receiver)
diff --git a/dw/ui.cc b/dw/ui.cc
index 540ead8f..f14d27aa 100644
--- a/dw/ui.cc
+++ b/dw/ui.cc
@@ -2,6 +2,7 @@
* Dillo Widget
*
* Copyright 2005-2007 Sebastian Geerken <sgeerken@dillo.org>
+ * Copyright 2024 Rodrigo Arias Mallo <rodarima@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -343,7 +344,8 @@ void ComplexButtonResource::init (Widget *widget)
{
childWidget = widget;
- layout = new Layout (createPlatform ());
+ /* FIXME: Buttons should not need a full Layout */
+ layout = new Layout (createPlatform (), false);
setLayout (layout);
DBG_OBJ_ASSOC_CHILD (layout);
layout->setWidget (widget);