From 4cd5817775a7e3618081bfed788f361307cfef41 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Fri, 2 Aug 2024 13:45:09 +0900 Subject: Add support for window tiling to the taskbar and window's popup menus. This relates to TDE/tdebase#349. Signed-off-by: Michele Calgaro --- twin/useractions.cpp | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'twin/useractions.cpp') diff --git a/twin/useractions.cpp b/twin/useractions.cpp index 567255fa5..64f3199d6 100644 --- a/twin/useractions.cpp +++ b/twin/useractions.cpp @@ -44,6 +44,33 @@ namespace KWinInternal // Workspace //**************************************** +TQPopupMenu* Workspace::makeTileMenu() +{ + TQPopupMenu *m = new TQPopupMenu; + + // Tile to side (the menu id matched the ActiveBorder index used for tiling) + int id = m->insertItem( i18n("&Left"), this, TQ_SLOT( tileCurrentWindowToBorder(int) ) ); + m->setItemParameter( id, 6 ); + id = m->insertItem( i18n("&Right"), this, TQ_SLOT( tileCurrentWindowToBorder(int) ) ); + m->setItemParameter( id, 2 ); + id = m->insertItem( i18n("&Top"), this, TQ_SLOT( tileCurrentWindowToBorder(int) ) ); + m->setItemParameter( id, 0 ); + id = m->insertItem( i18n("&Bottom"), this, TQ_SLOT( tileCurrentWindowToBorder(int) ) ); + m->setItemParameter( id, 4 ); + + // Tile to corner (the menu id matched the ActiveBorder index used for tiling) + id = m->insertItem( i18n("Top &Left"), this, TQ_SLOT( tileCurrentWindowToBorder(int) ) ); + m->setItemParameter( id, 7 ); + id = m->insertItem( i18n("Top &Right"), this, TQ_SLOT( tileCurrentWindowToBorder(int) ) ); + m->setItemParameter( id, 1 ); + id = m->insertItem( i18n("Bottom L&eft"), this, TQ_SLOT( tileCurrentWindowToBorder(int) ) ); + m->setItemParameter( id, 5 ); + id = m->insertItem( i18n("&Bottom R&ight"), this, TQ_SLOT( tileCurrentWindowToBorder(int) ) ); + m->setItemParameter( id, 3 ); + + return m; +} + TQPopupMenu* Workspace::clientPopup() { if ( !popup ) @@ -76,6 +103,7 @@ TQPopupMenu* Workspace::clientPopup() advanced_popup->insertItem( SmallIconSet( "wizard" ), i18n("&Special Application Settingsā€¦"), Options::ApplicationRulesOp ); popup->insertItem(i18n("Ad&vanced"), advanced_popup ); + tile_popup_index = popup->insertItem(i18n("T&ile"), makeTileMenu()); desk_popup_index = popup->count(); if (options->useTranslucency){ @@ -179,10 +207,11 @@ void Workspace::clientPopupAboutToShow() advanced_popup->setItemEnabled( Options::ResumeWindowOp, active_popup_client->isResumeable() ); advanced_popup->setItemChecked( Options::NoBorderOp, active_popup_client->noBorder() ); advanced_popup->setItemEnabled( Options::NoBorderOp, active_popup_client->userCanSetNoBorder() ); - advanced_popup->setItemEnabled( Options::ShadowOp, (options->shadowWindowType(active_popup_client->windowType()) && options->shadowEnabled(active_popup_client->isActive())) ); advanced_popup->setItemChecked( Options::ShadowOp, active_popup_client->isShadowed() ); + popup->setItemEnabled( tile_popup_index, active_popup_client->isMovable() && active_popup_client->isResizable()); + popup->setItemEnabled( Options::MinimizeOp, active_popup_client->isMinimizable() ); popup->setItemEnabled( Options::CloseOp, active_popup_client->isCloseable() ); if (options->useTranslucency) @@ -664,6 +693,14 @@ void Workspace::showWindowMenu( unsigned long window ) } } +void Workspace::tileCurrentWindowToBorder(int position) +{ + Client *c = active_popup_client ? active_popup_client : active_client; + if (!c) return; + + c->tileToBorder((ActiveBorder)position); +} + void Workspace::tileWindowToBorder(unsigned long w1, int location) { if (location < ActiveTop || location >= ACTIVE_BORDER_COUNT) return; -- cgit v1.2.1