summaryrefslogtreecommitdiffstats
path: root/twin
diff options
context:
space:
mode:
authorMichele Calgaro <[email protected]>2023-11-17 18:56:13 +0900
committerMichele Calgaro <[email protected]>2023-11-26 17:49:51 +0900
commitdf3439920c8464295b6f15128e2b62bc1eed8f43 (patch)
tree43813caab4b29fbed41df376f46b00c263cd3c90 /twin
parent71b2eaec0969200f80450667fb08b7602f669b2e (diff)
downloadtdebase-df3439920c8464295b6f15128e2b62bc1eed8f43.tar.gz
tdebase-df3439920c8464295b6f15128e2b62bc1eed8f43.zip
Fix unwanted window resizing. This resolves issue TDE/tde#57.
Some applications (like xfce4-terminal) try to manage their sizes by requesting the window manager a different size. The WM responds by resizing the window and the application tries once again to adjust its own size. This can lead to a repeated loop of request-resize which results in the application window to either shrink to the minimum allowed size or expand to the display size. Signed-off-by: Michele Calgaro <[email protected]> (cherry picked from commit a9bd5b50e9b77b8b360dd3620013a320733139aa)
Diffstat (limited to 'twin')
-rw-r--r--twin/client.cpp9
-rw-r--r--twin/client.h2
-rw-r--r--twin/events.cpp2
-rw-r--r--twin/geometry.cpp2
4 files changed, 14 insertions, 1 deletions
diff --git a/twin/client.cpp b/twin/client.cpp
index 74bee8535..d76dda619 100644
--- a/twin/client.cpp
+++ b/twin/client.cpp
@@ -128,6 +128,9 @@ Client::Client( Workspace *ws )
autoRaiseTimer = 0;
shadeHoverTimer = 0;
+ configureRequestTimer = new TQTimer(this);
+ connect(configureRequestTimer, TQT_SIGNAL(timeout()), TQT_SLOT(configureRequestTimeout()));
+
shadowDelayTimer = new TQTimer(this);
opacityCache = &activeOpacityCache;
shadowAfterClient = NULL;
@@ -969,6 +972,12 @@ void Client::setShade( ShadeMode mode )
updateWindowRules();
}
+void Client::configureRequestTimeout()
+ {
+ moveResizeMode = false;
+ sendSyntheticConfigureNotify();
+ }
+
void Client::shadeHover()
{
setShade( ShadeHover );
diff --git a/twin/client.h b/twin/client.h
index 98ff68c1a..00703608d 100644
--- a/twin/client.h
+++ b/twin/client.h
@@ -339,6 +339,7 @@ class Client : public TQObject, public KDecorationDefines
private slots:
void autoRaise();
void shadeHover();
+ void configureRequestTimeout();
void shortcutActivated();
void updateOpacityCache();
@@ -558,6 +559,7 @@ class Client : public TQObject, public KDecorationDefines
WinInfo* info;
TQTimer* autoRaiseTimer;
TQTimer* shadeHoverTimer;
+ TQTimer* configureRequestTimer;
Colormap cmap;
TQCString resource_name;
TQCString resource_class;
diff --git a/twin/events.cpp b/twin/events.cpp
index 8660f8776..ff0cc8e7c 100644
--- a/twin/events.cpp
+++ b/twin/events.cpp
@@ -818,7 +818,7 @@ void Client::configureRequestEvent( XConfigureRequestEvent* e )
restackWindow( e->above, e->detail, NET::FromApplication, userTime(), false );
// TODO sending a synthetic configure notify always is fine, even in cases where
- // the ICCCM doesn't require this - it can be though of as 'the WM decided to move
+ // the ICCCM doesn't require this - it can be thought of as 'the WM decided to move
// the window later'. The client should not cause that many configure request,
// so this should not have any significant impact. With user moving/resizing
// the it should be optimized though (see also Client::setGeometry()/plainResize()/move()).
diff --git a/twin/geometry.cpp b/twin/geometry.cpp
index 8d08a502c..65285cab6 100644
--- a/twin/geometry.cpp
+++ b/twin/geometry.cpp
@@ -1451,6 +1451,8 @@ const TQPoint Client::calculateGravitation( bool invert, int gravity ) const
void Client::configureRequest( int value_mask, int rx, int ry, int rw, int rh, int gravity, bool from_tool )
{
+ moveResizeMode = true;
+ configureRequestTimer->start(100, true);
if( gravity == 0 ) // default (nonsense) value for the argument
gravity = xSizeHint.win_gravity;
if( value_mask & ( CWX | CWY ))