286 lines
11 KiB
Diff
286 lines
11 KiB
Diff
From c60f5dab3729d587eb025afefaf1f5555706368d Mon Sep 17 00:00:00 2001
|
|
From: Tuomas Nurmi <tuomas@norsumanageri.org>
|
|
Date: Thu, 9 Mar 2023 18:07:10 +0200
|
|
Subject: [PATCH 1/3] Port away from deprecated QDesktopWidget functions.
|
|
|
|
Following the instructions on https://doc.qt.io/qt-5/qdesktopwidget-obsolete.html
|
|
---
|
|
src/covermanager/CoverManager.cpp | 4 ++--
|
|
src/covermanager/CoverViewDialog.cpp | 3 +--
|
|
src/dialogs/OrganizeCollectionDialog.cpp | 4 ++--
|
|
src/widgets/Osd.cpp | 22 +++++++++++-----------
|
|
src/widgets/PixmapViewer.cpp | 6 +++---
|
|
5 files changed, 19 insertions(+), 20 deletions(-)
|
|
|
|
diff --git a/src/covermanager/CoverManager.cpp b/src/covermanager/CoverManager.cpp
|
|
index e67a89416a..eb0d63f637 100644
|
|
--- a/src/covermanager/CoverManager.cpp
|
|
+++ b/src/covermanager/CoverManager.cpp
|
|
@@ -39,11 +39,11 @@
|
|
|
|
#include <QAction>
|
|
#include <QApplication>
|
|
-#include <QDesktopWidget>
|
|
#include <QDialogButtonBox>
|
|
#include <QMenu> //showCoverMenu()
|
|
#include <QProgressBar>
|
|
#include <QPushButton>
|
|
+#include <QScreen>
|
|
#include <QSplitter>
|
|
#include <QStatusBar>
|
|
#include <QStringList>
|
|
@@ -228,7 +228,7 @@ CoverManager::slotContinueConstruction() //SLOT
|
|
|
|
connect( m_progress, &CompoundProgressBar::allDone, this, &CoverManager::progressAllDone );
|
|
|
|
- QSize size = QApplication::desktop()->screenGeometry( this ).size() / 1.5;
|
|
+ QSize size = this->screen()->size() / 1.5;
|
|
QSize sz = Amarok::config( "Cover Manager" ).readEntry( "Window Size", size );
|
|
resize( sz.width(), sz.height() );
|
|
|
|
diff --git a/src/covermanager/CoverViewDialog.cpp b/src/covermanager/CoverViewDialog.cpp
|
|
index bb01e1f7fb..d3a1b96f7e 100644
|
|
--- a/src/covermanager/CoverViewDialog.cpp
|
|
+++ b/src/covermanager/CoverViewDialog.cpp
|
|
@@ -25,7 +25,6 @@
|
|
#include <KLocalizedString>
|
|
#include <KWindowSystem>
|
|
|
|
-#include <QDesktopWidget>
|
|
#include <QHBoxLayout>
|
|
#include <KConfigGroup>
|
|
|
|
@@ -72,7 +71,7 @@ CoverViewDialog::zoomFactorChanged( qreal value )
|
|
void
|
|
CoverViewDialog::createViewer( const QImage &image, const QWidget *widget )
|
|
{
|
|
- int screenNumber = QApplication::desktop()->screenNumber( widget );
|
|
+ int screenNumber = QApplication::screens().indexOf( widget->screen() );
|
|
PixmapViewer *pixmapViewer = new PixmapViewer( this, QPixmap::fromImage(image), screenNumber );
|
|
QHBoxLayout *layout = new QHBoxLayout( this );
|
|
layout->addWidget( pixmapViewer );
|
|
diff --git a/src/dialogs/OrganizeCollectionDialog.cpp b/src/dialogs/OrganizeCollectionDialog.cpp
|
|
index fb59c98224..cfda1f109c 100644
|
|
--- a/src/dialogs/OrganizeCollectionDialog.cpp
|
|
+++ b/src/dialogs/OrganizeCollectionDialog.cpp
|
|
@@ -30,9 +30,9 @@
|
|
#include "ui_OrganizeCollectionDialogBase.h"
|
|
|
|
#include <QApplication>
|
|
-#include <QDesktopWidget>
|
|
#include <QDir>
|
|
#include <QPushButton>
|
|
+#include <QScreen>
|
|
#include <QTimer>
|
|
|
|
#include <KColorScheme>
|
|
@@ -84,7 +84,7 @@ OrganizeCollectionWidget::OrganizeCollectionWidget( QWidget *parent )
|
|
|
|
// show some non-editable tags before and after
|
|
// but only if screen size is large enough (BR: 283361)
|
|
- const QRect screenRect = QApplication::desktop()->screenGeometry();
|
|
+ const QRect screenRect = QApplication::primaryScreen()->geometry();
|
|
if( screenRect.width() >= 1024 )
|
|
{
|
|
m_schemaLineLayout->insertWidget( 0,
|
|
diff --git a/src/widgets/Osd.cpp b/src/widgets/Osd.cpp
|
|
index dc1cf722e3..062f3ceeb9 100644
|
|
--- a/src/widgets/Osd.cpp
|
|
+++ b/src/widgets/Osd.cpp
|
|
@@ -45,6 +45,7 @@
|
|
#include <QPainter>
|
|
#include <QPixmap>
|
|
#include <QRegExp>
|
|
+#include <QScreen>
|
|
#include <QTimeLine>
|
|
#include <QTimer>
|
|
|
|
@@ -245,7 +246,7 @@ OSDWidget::determineMetrics( const int M )
|
|
// determine a sensible maximum size, don't cover the whole desktop or cross the screen
|
|
const QSize margin( ( M + MARGIN ) * 2, ( M + MARGIN ) * 2 ); //margins
|
|
const QSize image = m_cover.isNull() ? QSize( 0, 0 ) : minImageSize;
|
|
- const QSize max = QApplication::desktop()->screen( m_screen )->size() - margin;
|
|
+ const QSize max = QApplication::screens()[ screen() ]->size() - margin;
|
|
|
|
// If we don't do that, the boundingRect() might not be suitable for drawText() (Qt issue N67674)
|
|
m_text.replace( QRegExp( " +\n" ), "\n" );
|
|
@@ -311,7 +312,7 @@ OSDWidget::determineMetrics( const int M )
|
|
rect.adjust( -M, -M, M, M );
|
|
|
|
const QSize newSize = rect.size();
|
|
- const QRect screen = QApplication::desktop()->screenGeometry( m_screen );
|
|
+ const QRect screenRect = QApplication::screens()[ screen() ]->geometry();
|
|
QPoint newPos( MARGIN, m_yOffset );
|
|
|
|
switch( m_alignment )
|
|
@@ -320,25 +321,25 @@ OSDWidget::determineMetrics( const int M )
|
|
break;
|
|
|
|
case Right:
|
|
- newPos.rx() = screen.width() - MARGIN - newSize.width();
|
|
+ newPos.rx() = screenRect.width() - MARGIN - newSize.width();
|
|
break;
|
|
|
|
case Center:
|
|
- newPos.ry() = ( screen.height() - newSize.height() ) / 2;
|
|
+ newPos.ry() = ( screenRect.height() - newSize.height() ) / 2;
|
|
|
|
Q_FALLTHROUGH();
|
|
|
|
case Middle:
|
|
- newPos.rx() = ( screen.width() - newSize.width() ) / 2;
|
|
+ newPos.rx() = ( screenRect.width() - newSize.width() ) / 2;
|
|
break;
|
|
}
|
|
|
|
//ensure we don't dip below the screen
|
|
- if ( newPos.y() + newSize.height() > screen.height() - MARGIN )
|
|
- newPos.ry() = screen.height() - MARGIN - newSize.height();
|
|
+ if ( newPos.y() + newSize.height() > screenRect.height() - MARGIN )
|
|
+ newPos.ry() = screenRect.height() - MARGIN - newSize.height();
|
|
|
|
// correct for screen position
|
|
- newPos += screen.topLeft();
|
|
+ newPos += screenRect.topLeft();
|
|
|
|
return QRect( newPos, rect.size() );
|
|
}
|
|
@@ -551,7 +552,7 @@ OSDPreviewWidget::mouseMoveEvent( QMouseEvent *e )
|
|
{
|
|
// Here we implement a "snap-to-grid" like positioning system for the preview widget
|
|
|
|
- const QRect screenRect = QApplication::desktop()->screenGeometry( screen() );
|
|
+ const QRect screenRect = QApplication::screens()[ screen() ]->geometry();
|
|
const uint hcenter = screenRect.width() / 2;
|
|
const uint eGlobalPosX = e->globalPos().x() - screenRect.left();
|
|
const uint snapZone = screenRect.width() / 24;
|
|
@@ -592,8 +593,7 @@ OSDPreviewWidget::mouseMoveEvent( QMouseEvent *e )
|
|
move( destination );
|
|
|
|
// compute current Position && Y-offset
|
|
- QDesktopWidget *desktop = QApplication::desktop();
|
|
- const int currentScreen = desktop->screenNumber( pos() );
|
|
+ const int currentScreen = QGuiApplication::screens().indexOf( QGuiApplication::screenAt( pos() ) );
|
|
|
|
// set new data
|
|
OSDWidget::setScreen( currentScreen );
|
|
diff --git a/src/widgets/PixmapViewer.cpp b/src/widgets/PixmapViewer.cpp
|
|
index 158540f541..332dbc5d5e 100644
|
|
--- a/src/widgets/PixmapViewer.cpp
|
|
+++ b/src/widgets/PixmapViewer.cpp
|
|
@@ -21,11 +21,11 @@
|
|
|
|
#include <QApplication>
|
|
|
|
-#include <QDesktopWidget>
|
|
#include <QMouseEvent>
|
|
#include <QLabel>
|
|
#include <QPixmap>
|
|
#include <QPainter>
|
|
+#include <QScreen>
|
|
#include <QWheelEvent>
|
|
|
|
|
|
@@ -35,8 +35,8 @@ PixmapViewer::PixmapViewer( QWidget *parent, const QPixmap &pix, int screenNumbe
|
|
{
|
|
m_zoomFactor = 1.0; // initial zoom
|
|
|
|
- int screenWidth = QApplication::desktop()->availableGeometry( screenNumber ).width();
|
|
- int screenHeight = QApplication::desktop()->availableGeometry( screenNumber ).height();
|
|
+ int screenWidth = QApplication::screens()[ screenNumber ]->availableGeometry().width();
|
|
+ int screenHeight = QApplication::screens()[ screenNumber ]->availableGeometry().height();
|
|
if( screenWidth < m_pixmap.width() || screenHeight < m_pixmap.height() )
|
|
{
|
|
qreal zoomFactorX = qreal(screenWidth) / m_pixmap.width();
|
|
--
|
|
GitLab
|
|
|
|
|
|
From b95c439ebba30ba257ba75d060b237a293415ea8 Mon Sep 17 00:00:00 2001
|
|
From: Tuomas Nurmi <tuomas@norsumanageri.org>
|
|
Date: Sat, 11 Mar 2023 15:22:18 +0200
|
|
Subject: [PATCH 2/3] Disable OSD options not available on Wayland.
|
|
|
|
---
|
|
src/configdialog/dialogs/NotificationsConfig.cpp | 6 +++++-
|
|
src/widgets/Osd.cpp | 8 ++++++--
|
|
2 files changed, 11 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/configdialog/dialogs/NotificationsConfig.cpp b/src/configdialog/dialogs/NotificationsConfig.cpp
|
|
index 0c16fdcb17..1c3387206a 100644
|
|
--- a/src/configdialog/dialogs/NotificationsConfig.cpp
|
|
+++ b/src/configdialog/dialogs/NotificationsConfig.cpp
|
|
@@ -51,7 +51,11 @@ NotificationsConfig::NotificationsConfig( Amarok2ConfigDialog* parent )
|
|
#endif
|
|
|
|
// Enable/disable the translucency option depending on availability of desktop compositing
|
|
- kcfg_OsdUseTranslucency->setEnabled( KWindowSystem::compositingActive() );
|
|
+ // As opacity functionality is not available on Wayland at least with current implementation, don't enable option there
|
|
+ kcfg_OsdUseTranslucency->setEnabled( !KWindowSystem::isPlatformWayland() && KWindowSystem::compositingActive() );
|
|
+
|
|
+ // Also disable other functionalities not (yet?) available on Wayland
|
|
+ kcfg_OsdScreen->setEnabled( !KWindowSystem::isPlatformWayland() );
|
|
|
|
connect( m_osdPreview, &OSDPreviewWidget::positionChanged, this, &NotificationsConfig::slotPositionChanged );
|
|
|
|
diff --git a/src/widgets/Osd.cpp b/src/widgets/Osd.cpp
|
|
index 062f3ceeb9..e29a1b2347 100644
|
|
--- a/src/widgets/Osd.cpp
|
|
+++ b/src/widgets/Osd.cpp
|
|
@@ -509,7 +509,9 @@ OSDPreviewWidget::OSDPreviewWidget( QWidget *parent )
|
|
setDuration( 0 );
|
|
setImage( Amarok::icon() );
|
|
setTranslucent( AmarokConfig::osdUseTranslucency() );
|
|
- setText( i18n( "On-Screen-Display preview\nDrag to reposition" ) );
|
|
+ // Drag-positioning not available on Wayland, so let's hide any untrue ideas about dragging
|
|
+ // TODO maybe one day Wayland will be first-class OSD citizen
|
|
+ setText( KWindowSystem::isPlatformWayland() ? i18n ( "Preview" ) : i18n( "On-Screen-Display preview\nDrag to reposition" ) );
|
|
}
|
|
|
|
void
|
|
@@ -517,7 +519,9 @@ OSDPreviewWidget::mousePressEvent( QMouseEvent *event )
|
|
{
|
|
m_dragYOffset = event->pos();
|
|
|
|
- if( event->button() == Qt::LeftButton && !m_dragging )
|
|
+ // As we can't position OSD on Wayland at the moment, and grabbing mouse doesn't quite work
|
|
+ // either, let's disable this for now.
|
|
+ if( !KWindowSystem::isPlatformWayland() && event->button() == Qt::LeftButton && !m_dragging )
|
|
{
|
|
grabMouse( Qt::SizeAllCursor );
|
|
m_dragging = true;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From d70177ab4a57c3aecf63cfd3937044c575ee1a6a Mon Sep 17 00:00:00 2001
|
|
From: Tuomas Nurmi <tuomas@norsumanageri.org>
|
|
Date: Sat, 11 Mar 2023 17:58:59 +0200
|
|
Subject: [PATCH 3/3] Remove obsolete ifdef.
|
|
|
|
Apparently Q_WS's are not defined any more. Turns out, if run, the setType
|
|
actually makes the OSD positioning to go totally bonkers on X11, so let's just
|
|
remove it.
|
|
---
|
|
src/widgets/Osd.cpp | 4 ----
|
|
1 file changed, 4 deletions(-)
|
|
|
|
diff --git a/src/widgets/Osd.cpp b/src/widgets/Osd.cpp
|
|
index e29a1b2347..1eee135be4 100644
|
|
--- a/src/widgets/Osd.cpp
|
|
+++ b/src/widgets/Osd.cpp
|
|
@@ -87,10 +87,6 @@ OSDWidget::OSDWidget( QWidget *parent, const char *name )
|
|
setObjectName( name );
|
|
setFocusPolicy( Qt::NoFocus );
|
|
|
|
- #ifdef Q_WS_X11
|
|
- KWindowSystem::setType( winId(), NET::Notification );
|
|
- #endif
|
|
-
|
|
m_timer->setSingleShot( true );
|
|
connect( m_timer, &QTimer::timeout, this, &OSDWidget::hide );
|
|
|
|
--
|
|
GitLab
|
|
|