File indexing completed on 2024-05-19 04:39:29

0001 /*
0002     SPDX-FileCopyrightText: 2004 David Faure <faure@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-only
0005 */
0006 
0007 #include "overlaywidget.h"
0008 
0009 #include <QHBoxLayout>
0010 #include <QResizeEvent>
0011 #include <QEvent>
0012 #include <QApplication>
0013 
0014 using namespace KDevelop;
0015 
0016 OverlayWidget::OverlayWidget( QWidget* alignWidget, QWidget* parent, const char* name )
0017     : QWidget( parent, Qt::Window | Qt::FramelessWindowHint | Qt::ToolTip ), mAlignWidget( nullptr )
0018 {
0019     auto hboxHBoxLayout = new QHBoxLayout(this);
0020     hboxHBoxLayout->setContentsMargins(0, 0, 0, 0);
0021 
0022     setObjectName(QString::fromUtf8(name));
0023     setAlignWidget( alignWidget );
0024 
0025     setWindowFlags(Qt::WindowDoesNotAcceptFocus | windowFlags());
0026 
0027     qApp->installEventFilter(this);
0028 }
0029 
0030 OverlayWidget::~OverlayWidget()
0031 {
0032 }
0033 
0034 void OverlayWidget::reposition()
0035 {
0036     if ( !mAlignWidget )
0037         return;
0038     // p is in the alignWidget's coordinates
0039     QPoint p;
0040     // We are always above the alignWidget, right-aligned with it.
0041     p.setX( mAlignWidget->width() - width() );
0042     p.setY( -height() );
0043     // Position in the global coordinates
0044     QPoint global = mAlignWidget->mapToGlobal( p );
0045     // Move 'this' to that position.
0046     move( global );
0047 }
0048 
0049 void OverlayWidget::setAlignWidget( QWidget * w )
0050 {
0051     if (w == mAlignWidget)
0052         return;
0053 
0054     mAlignWidget = w;
0055 
0056     reposition();
0057 }
0058 
0059 bool OverlayWidget::eventFilter( QObject* o, QEvent* e)
0060 {
0061     if (e->type() == QEvent::Move || e->type() == QEvent::Resize) {
0062         reposition();
0063     } else if (e->type() == QEvent::Close) {
0064         close();
0065     }
0066 
0067     return QWidget::eventFilter(o,e);
0068 }
0069 
0070 void OverlayWidget::resizeEvent( QResizeEvent* ev )
0071 {
0072     reposition();
0073     QWidget::resizeEvent( ev );
0074 }
0075 
0076 #include "moc_overlaywidget.cpp"