diff options
author | Mavridis Philippe <[email protected]> | 2023-12-05 15:53:55 +0200 |
---|---|---|
committer | Michele Calgaro <[email protected]> | 2024-03-29 11:23:31 +0900 |
commit | 7482fe22830ce974a15e3a132dcc3ac6cee1a65f (patch) | |
tree | 42ac4d2e0a6cd7546ee8354eab07f47056437c0a | |
parent | 8d642b33a1c5b6b2d0d94e395df83704b3610b55 (diff) | |
download | tdebase-7482fe22830ce974a15e3a132dcc3ac6cee1a65f.tar.gz tdebase-7482fe22830ce974a15e3a132dcc3ac6cee1a65f.zip |
TWin: add tileHorizontally(), tileVertically(), tileGrid() DCOP calls
Signed-off-by: Mavridis Philippe <[email protected]>
-rw-r--r-- | twin/KWinInterface.h | 3 | ||||
-rw-r--r-- | twin/client.h | 1 | ||||
-rw-r--r-- | twin/geometry.cpp | 12 | ||||
-rw-r--r-- | twin/useractions.cpp | 38 | ||||
-rw-r--r-- | twin/workspace.h | 4 |
5 files changed, 58 insertions, 0 deletions
diff --git a/twin/KWinInterface.h b/twin/KWinInterface.h index 4eb7948fe..34e35a5bd 100644 --- a/twin/KWinInterface.h +++ b/twin/KWinInterface.h @@ -29,6 +29,9 @@ class KWinInterface : virtual public DCOPObject virtual void circulateDesktopApplications() = 0; virtual void updateOverlappingShadows(unsigned long window) = 0; virtual void setShadowed(unsigned long window, bool shadowed) = 0; + virtual void tileHorizontally(unsigned long w1, unsigned long w2) = 0; + virtual void tileVertically(unsigned long w1, unsigned long w2) = 0; + virtual void tileGrid(unsigned long w1, unsigned long w2, unsigned long w3, unsigned long w4) = 0; // kompmgr stuff virtual void startKompmgr() = 0; diff --git a/twin/client.h b/twin/client.h index 944b837f6..30cf7bc8d 100644 --- a/twin/client.h +++ b/twin/client.h @@ -240,6 +240,7 @@ class Client : public TQObject, public KDecorationDefines void cancelActiveBorderMaximizing(); bool isActiveBorderMaximizing() const; TQRect activeBorderMaximizeGeometry(); + void tile(ActiveBorder border); void growHorizontal(); void shrinkHorizontal(); diff --git a/twin/geometry.cpp b/twin/geometry.cpp index f729c702c..34117da20 100644 --- a/twin/geometry.cpp +++ b/twin/geometry.cpp @@ -2828,4 +2828,16 @@ TQRect Client::activeBorderMaximizeGeometry() return ret; } +void Client::tile(ActiveBorder border) { + if (!isResizable()) return; + activeTiled = true; + setActiveBorderMode(ActiveTilingMode); + setActiveBorder(border); + TQRect geo = activeBorderMaximizeGeometry(); + if (geo.isValid() && !geo.isEmpty()) { + setGeometry(geo); + } + workspace()->raiseClient(this); +} + } // namespace diff --git a/twin/useractions.cpp b/twin/useractions.cpp index ac017aacf..e22b63af0 100644 --- a/twin/useractions.cpp +++ b/twin/useractions.cpp @@ -664,6 +664,44 @@ void Workspace::showWindowMenu( unsigned long window ) } } +void Workspace::tileHorizontally(unsigned long w1, unsigned long w2) { + if (w1 == w2) return; + + Client *c1 = findClient(WindowMatchPredicate((WId)w1)); + Client *c2 = findClient(WindowMatchPredicate((WId)w2)); + if (!c1 || !c2) return; + + c1->tile(ActiveTop); + c2->tile(ActiveBottom); +} + +void Workspace::tileVertically(unsigned long w1, unsigned long w2) { + if (w1 == w2) return; + + Client *c1 = findClient(WindowMatchPredicate((WId)w1)); + Client *c2 = findClient(WindowMatchPredicate((WId)w2)); + if (!c1 || !c2) return; + + c1->tile(ActiveLeft); + c2->tile(ActiveRight); +} + +void Workspace::tileGrid(unsigned long w1, unsigned long w2, unsigned long w3, unsigned long w4) { + if (w1 == w2 || w1 == w3 || w1 == w4 || w2 == w3 || w2 == w4 || w3 == w4) + return; + + Client *c1 = findClient(WindowMatchPredicate((WId)w1)); + Client *c2 = findClient(WindowMatchPredicate((WId)w2)); + Client *c3 = findClient(WindowMatchPredicate((WId)w3)); + Client *c4 = findClient(WindowMatchPredicate((WId)w4)); + if (!c1 || !c2 || !c3 || !c4) return; + + c1->tile(ActiveTopLeft); + c2->tile(ActiveTopRight); + c3->tile(ActiveBottomLeft); + c4->tile(ActiveBottomRight); +} + void Workspace::slotActivateAttentionWindow() { if( attention_chain.count() > 0 ) diff --git a/twin/workspace.h b/twin/workspace.h index 954ea5191..b6f97f1a8 100644 --- a/twin/workspace.h +++ b/twin/workspace.h @@ -206,6 +206,10 @@ class Workspace : public TQObject, public KWinInterface, public KDecorationDefin void showWindowMenuAt( unsigned long id, int x, int y ); void showWindowMenu( unsigned long id ); + + void tileHorizontally(unsigned long w1, unsigned long w2); + void tileVertically(unsigned long w1, unsigned long w2); + void tileGrid(unsigned long w1, unsigned long w2, unsigned long w3, unsigned long w4); void kDestopResized(); /** |