Skip to content

Commit 0ff58ea

Browse files
23rdjohn-preston
authored andcommitted
Fixed Qt6 work area offset moving notifications off screen on Windows.
1 parent 29fb24e commit 0ff58ea

8 files changed

Lines changed: 33 additions & 3 deletions

File tree

‎Telegram/SourceFiles/platform/linux/main_window_linux.cpp‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,4 +566,8 @@ QString ScreenDisplayLabel(const QScreen *screen) {
566566
return screen->name();
567567
}
568568

569+
QRect ScreenAvailableGeometry(const QScreen *screen) {
570+
return screen ? screen->availableGeometry() : QRect();
571+
}
572+
569573
} // namespace Platform

‎Telegram/SourceFiles/platform/linux/main_window_linux.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,6 @@ class MainWindow : public Window::MainWindow {
6868

6969
[[nodiscard]] QString ScreenDisplayLabel(const QScreen *screen);
7070

71+
[[nodiscard]] QRect ScreenAvailableGeometry(const QScreen *screen);
72+
7173
} // namespace Platform

‎Telegram/SourceFiles/platform/mac/main_window_mac.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,6 @@ class MainWindow : public Window::MainWindow {
7070

7171
[[nodiscard]] QString ScreenDisplayLabel(const QScreen *screen);
7272

73+
[[nodiscard]] QRect ScreenAvailableGeometry(const QScreen *screen);
74+
7375
} // namespace Platform

‎Telegram/SourceFiles/platform/mac/main_window_mac.mm‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,4 +335,8 @@ QString ScreenDisplayLabel(const QScreen *screen) {
335335
return screen ? screen->name() : QString();
336336
}
337337

338+
QRect ScreenAvailableGeometry(const QScreen *screen) {
339+
return screen ? screen->availableGeometry() : QRect();
340+
}
341+
338342
} // namespace

‎Telegram/SourceFiles/platform/win/main_window_win.cpp‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ For license and copyright information please follow this link:
1616
#include "window/window_session_controller.h"
1717
#include "mainwindow.h"
1818
#include "main/main_session.h"
19+
#include "base/algorithm.h"
1920
#include "base/crc32hash.h"
2021
#include "base/platform/win/base_windows_wrl.h"
2122
#include "base/platform/base_platform_info.h"
@@ -845,4 +846,19 @@ QString ScreenDisplayLabel(const QScreen *screen) {
845846
return name;
846847
}
847848

849+
QRect ScreenAvailableGeometry(const QScreen *screen) {
850+
if (!screen) {
851+
return QRect();
852+
}
853+
auto result = screen->availableGeometry();
854+
const auto geometry = screen->geometry();
855+
const auto ratio = screen->devicePixelRatio();
856+
if (ratio > 0.) {
857+
result.moveTopLeft(geometry.topLeft() + QPoint(
858+
int(base::SafeRound((result.x() - geometry.x()) / ratio)),
859+
int(base::SafeRound((result.y() - geometry.y()) / ratio))));
860+
}
861+
return result;
862+
}
863+
848864
} // namespace Platform

‎Telegram/SourceFiles/platform/win/main_window_win.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,6 @@ class MainWindow : public Window::MainWindow {
110110

111111
[[nodiscard]] QString ScreenDisplayLabel(const QScreen *screen);
112112

113+
[[nodiscard]] QRect ScreenAvailableGeometry(const QScreen *screen);
114+
113115
} // namespace Platform

‎Telegram/SourceFiles/window/main_window.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ using Core::WindowPosition;
7373
// When the last monitor is removed Qt keeps delivering resize events
7474
// while QGuiApplication has no screens at all, so screen() is nullptr.
7575
const auto screen = widget->screen();
76-
return screen ? screen->availableGeometry() : QRect();
76+
return screen ? Platform::ScreenAvailableGeometry(screen) : QRect();
7777
}
7878

7979
[[nodiscard]] QPoint ChildSkip() {

‎Telegram/SourceFiles/window/notifications_manager.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1713,14 +1713,14 @@ QRect NotificationDisplayRect(Window::Controller *controller) {
17131713
}
17141714

17151715
if (screen) {
1716-
return screen->availableGeometry();
1716+
return Platform::ScreenAvailableGeometry(screen);
17171717
} else if (controller) {
17181718
return controller->widget()->desktopRect();
17191719
}
17201720
// When the last monitor is removed QGuiApplication has no screens at
17211721
// all, so primaryScreen() is nullptr.
17221722
const auto primary = QGuiApplication::primaryScreen();
1723-
return primary ? primary->availableGeometry() : QRect();
1723+
return primary ? Platform::ScreenAvailableGeometry(primary) : QRect();
17241724
}
17251725

17261726
} // namespace Notifications

0 commit comments

Comments
 (0)