From cf1fa718a8cb308d36794c79be590bc2a3973923 Mon Sep 17 00:00:00 2001
From: 23rd <23rd@vivaldi.net>
Date: Thu, 30 Jan 2025 11:00:50 +0300
Subject: [PATCH] Improved conflict handle between IV shortcuts and Shortcuts.

---
 Telegram/SourceFiles/dialogs/dialogs_widget.cpp |  1 +
 Telegram/SourceFiles/history/history_widget.cpp |  1 +
 Telegram/SourceFiles/info/info_wrap_widget.cpp  |  1 +
 Telegram/SourceFiles/iv/iv_controller.cpp       | 16 +++++++++++++++-
 4 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp
index ecabae874..752e431a9 100644
--- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp
+++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp
@@ -1214,6 +1214,7 @@ void Widget::setupShortcuts() {
 			});
 			request->check(Command::ShowChatMenu, 1) && request->handle([=] {
 				if (_inner) {
+					Window::ActivateWindow(controller());
 					_inner->showPeerMenu();
 				}
 				return true;
diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp
index 67d49cad7..6c337f9c0 100644
--- a/Telegram/SourceFiles/history/history_widget.cpp
+++ b/Telegram/SourceFiles/history/history_widget.cpp
@@ -2010,6 +2010,7 @@ void HistoryWidget::setupShortcuts() {
 			return true;
 		});
 		request->check(Command::ShowChatMenu, 1) && request->handle([=] {
+			Window::ActivateWindow(controller());
 			_topBar->showPeerMenu();
 			return true;
 		});
diff --git a/Telegram/SourceFiles/info/info_wrap_widget.cpp b/Telegram/SourceFiles/info/info_wrap_widget.cpp
index 212e541f4..3e86ccb36 100644
--- a/Telegram/SourceFiles/info/info_wrap_widget.cpp
+++ b/Telegram/SourceFiles/info/info_wrap_widget.cpp
@@ -502,6 +502,7 @@ void WrapWidget::addTopBarMenuButton() {
 		using Command = Shortcuts::Command;
 
 		request->check(Command::ShowChatMenu, 1) && request->handle([=] {
+			Window::ActivateWindow(_controller->parentController());
 			showTopBarMenu(false);
 			return true;
 		});
diff --git a/Telegram/SourceFiles/iv/iv_controller.cpp b/Telegram/SourceFiles/iv/iv_controller.cpp
index bf699adb7..87befe5bf 100644
--- a/Telegram/SourceFiles/iv/iv_controller.cpp
+++ b/Telegram/SourceFiles/iv/iv_controller.cpp
@@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 */
 #include "iv/iv_controller.h"
 
+#include "base/event_filter.h"
 #include "base/platform/base_platform_info.h"
 #include "base/qt/qt_key_modifiers.h"
 #include "base/invoke_queued.h"
@@ -679,18 +680,31 @@ void Controller::createWebview(const Webview::StorageId &storageId) {
 			if (event->key() == Qt::Key_Escape) {
 				escape();
 			}
+		}
+	}, window->lifetime());
+
+	base::install_event_filter(window, qApp, [=](not_null<QEvent*> e) {
+		if (e->type() == QEvent::ShortcutOverride) {
+			if (!window->isActiveWindow()) {
+				return base::EventFilterResult::Continue;
+			}
+			const auto event = static_cast<QKeyEvent*>(e.get());
 			if (event->modifiers() & Qt::ControlModifier) {
 				if (event->key() == Qt::Key_Plus
 					|| event->key() == Qt::Key_Equal) {
 					_delegate->ivSetZoom(_delegate->ivZoom() + kZoomStep);
+					return base::EventFilterResult::Cancel;
 				} else if (event->key() == Qt::Key_Minus) {
 					_delegate->ivSetZoom(_delegate->ivZoom() - kZoomStep);
+					return base::EventFilterResult::Cancel;
 				} else if (event->key() == Qt::Key_0) {
 					_delegate->ivSetZoom(kDefaultZoom);
+					return base::EventFilterResult::Cancel;
 				}
 			}
 		}
-	}, window->lifetime());
+		return base::EventFilterResult::Continue;
+	});
 
 	const auto widget = raw->widget();
 	if (!widget) {