diff --git a/clients/riscos/Manager.cpp b/clients/riscos/Manager.cpp index 0099d676d4..a18a24c3e1 100644 --- a/clients/riscos/Manager.cpp +++ b/clients/riscos/Manager.cpp @@ -20,10 +20,14 @@ Boston, MA 02111-1307, USA. */ +#include // for usleep + #include #include #include +#include + #include "../../options.h" #include "../../workspace.h" @@ -319,6 +323,48 @@ Manager::slotHelp() contextHelp(); } + void +Manager::animateIconifyOrDeiconify(bool iconify) +{ + NETRect r = netWinInfo()->iconGeometry(); + + QRect icongeom(r.pos.x, r.pos.y, r.size.width, r.size.height); + + if (!icongeom.isValid()) + return; + + QRect wingeom(x(), y(), width(), height()); + + XGrabServer(qt_xdisplay()); + + QPainter p(workspace()->desktopWidget()); + + p.setRasterOp(Qt::NotROP); + + if (iconify) + p.setClipRegion(QRegion(workspace()->desktopWidget()->rect()) - wingeom); + + p.drawLine(wingeom.bottomRight(), icongeom.bottomRight()); + p.drawLine(wingeom.bottomLeft(), icongeom.bottomLeft()); + p.drawLine(wingeom.topLeft(), icongeom.topLeft()); + p.drawLine(wingeom.topRight(), icongeom.topRight()); + + p.flush(); + + XSync( qt_xdisplay(), FALSE ); + + usleep(30000); + + p.drawLine(wingeom.bottomRight(), icongeom.bottomRight()); + p.drawLine(wingeom.bottomLeft(), icongeom.bottomLeft()); + p.drawLine(wingeom.topLeft(), icongeom.topLeft()); + p.drawLine(wingeom.topRight(), icongeom.topRight()); + + p.end(); + + XUngrabServer( qt_xdisplay() ); +} + } // End namespace diff --git a/clients/riscos/Manager.h b/clients/riscos/Manager.h index 7fbca2e1b2..dc4112a1ac 100644 --- a/clients/riscos/Manager.h +++ b/clients/riscos/Manager.h @@ -73,6 +73,7 @@ class Manager : public Client void paintEvent(QPaintEvent *); void resizeEvent(QResizeEvent *); void mouseDoubleClickEvent(QMouseEvent *); + void animateIconifyOrDeiconify(bool); protected slots: