Commit Graph

1193 Commits

Author SHA1 Message Date
Ilya Fedin 798998203a Get XDG activation token from native notification on Linux 2022-06-15 12:55:59 +04:00
Ilya Fedin 6ee08faa24 Migrate from kwayland to QtWaylandScanner 2022-06-14 16:36:44 +04:00
Ilya Fedin 391a3a77f6 Use Qt's xdg-desktop-portal file dialog implementation 2022-06-14 16:36:44 +04:00
Ilya Fedin 2477b35b42 Move tray availability logging to the appropriate class 2022-06-14 16:36:44 +04:00
Ilya Fedin 4d997a26b0 Don't update global menu on Linux without focus widget
The window loses focus when menu is open and edit options are deactivated
2022-06-14 16:36:44 +04:00
Ilya Fedin 4410aeb3eb Make QMenuBar on Linux work without private API 2022-06-14 16:36:44 +04:00
Ilya Fedin 088cca7452 Adapt for XCB::IsSupportedByWM changes 2022-06-14 16:36:44 +04:00
John Preston fc07954276 Improve premium section bottom. 2022-06-13 13:49:45 +04:00
23rd 7bf9db8644 Fixed logging out with opened non-primary windows. 2022-06-08 11:59:30 +03:00
John Preston a780fbd09b Add "ctrl-click-chat-new-window" option. 2022-06-07 22:05:37 +04:00
John Preston 6f285874f3 Fix build on macOS. 2022-05-19 17:27:01 +04:00
John Preston 5874ae7c51 Update API scheme on layer 142: Premium stickers. 2022-05-19 17:27:01 +04:00
Ilya Fedin a2a401c0b0 Use public Qt API for native dialogs modality 2022-05-19 17:23:47 +04:00
Ilya Fedin acd18a57fb Get rid of the IBUS_USE_PORTAL workaround
It's been a while after the ibus breaking change, the new socket path should be in all major distros and this hack shouldn't be needed anymore.
2022-05-19 17:23:47 +04:00
Ilya Fedin 6a80b1b94c Get rid of __HAIKU__ checks
This is a leftover of something that wasn't finiched and looks like won't be finished. It also feels that's not a good idea to mix Linux and Haiku in the same file though...
2022-05-19 17:23:47 +04:00
23rd c47140c62d Fixed window activation by clicking on tray icon for macOS. 2022-05-05 16:52:09 +03:00
John Preston b28d5a63d1 Handle alert/confirm/prompt with custom dialog on Linux. 2022-05-03 23:30:42 +04:00
23rd 0e16a50bbc Completely removed common and platform code for tray from main window. 2022-05-03 04:25:36 +03:00
23rd 9de372d715 Replaced macOS Qt tray with native implementation. 2022-05-03 04:25:36 +03:00
23rd fbae5bdbcf Removed macOS tray implementation from main window. 2022-05-03 04:25:36 +03:00
23rd aee1ef78da Moved out static job for Linux tray icon to separated class. 2022-05-03 04:25:36 +03:00
23rd 27c5c4b8f2 Removed Linux tray implementation from main window. 2022-05-03 04:25:36 +03:00
23rd 94e06c6846 Removed Windows tray implementation from main window. 2022-05-03 04:25:36 +03:00
23rd 7948d971e8 Added initial implementation of Linux tray. 2022-05-03 04:25:36 +03:00
23rd 70acc7a0e3 Added initial implementation of Windows tray. 2022-05-03 04:25:36 +03:00
23rd 56fdc7d39a Added common and macOS tray implementations. 2022-05-03 04:25:36 +03:00
23rd f67c3bbf65 Added placeholders for platform dependent implementations of tray. 2022-05-03 04:25:35 +03:00
23rd de194c4aa2 Initialized empty files for tray implementations. 2022-05-03 04:25:35 +03:00
Sergey A. Osokin 3ba5b825e5 Fix -Wunused-const-variable warnings by removing unused variables
Fixes #24432
2022-04-26 21:25:05 +04:00
Hugo Osvaldo Barrera c52a5927e5 Avoid a second query for the current color-scheme
Telegram listens for a signal that indicates when the color-scheme
changes. The signal itself includes the new value, but Telegram
currently queries for the value immediately after getting the signal.
This second round-trip is unnecessary, since the signal itself contains
the same information.

This changeset avoids this follow-up query, and drops the now-unused
`Setter`.
2022-04-25 22:38:08 +04:00
Ilya Fedin cee593c423 Check whether notification image has alpha channel 2022-04-25 22:33:22 +04:00
John Preston 1bc8d6fb18 Fix non-working Qt-on-Windows bug workaround. 2022-04-25 14:03:43 +04:00
Ilya Fedin 62e82a42fb Adapt to lib_base's XDP API changes 2022-04-14 09:15:50 +04:00
Ilya Fedin 80f1f079f1 Move waitForInterfaceAnnounce call to the uses of announced interfaces 2022-04-14 09:11:05 +04:00
Ilya Fedin 572eb1f5f8 Remove unneeded anymore xdg-open workaround for snap 2022-04-13 15:06:06 +04:00
Ilya Fedin 17fcc729a2 Implement org.freedesktop.appearance.color-scheme 2022-04-12 17:35:51 +04:00
Ilya Fedin e5d8a1aa3c Use QWidget::screen/QWidget::mask instead of QWindow ones 2022-03-23 09:42:51 +04:00
John Preston e84bfe0420 Fix build for Windows Store. 2022-03-12 09:06:50 +04:00
John Preston 32d09f189b Use rpl::empty instead of rpl::empty_value(). 2022-03-11 09:56:29 +04:00
Ilya Fedin 6fd02ccbae Match socket length check with Qt 2022-03-08 12:41:38 +04:00
23rd 0f00d90c29 Removed unused argument when pin animation in touchbar is cancelled. 2022-03-05 17:43:49 +03:00
Ilya Fedin b39e4a3138 Do not call CloseNotification for activatable services
If the notification daemon is an activatable GApplication service (e.g.
on Mate), then the notification daemon may terminate a short time after
the notification has vanished (usually 15s). In that case the
notification daemon may reuse notification IDs, which is incompatible
with our notification clearing.
Also the service may not be running at all, when we call the
CloseNotification endpoint.

To fix this, we simply disable the entire notification history clearing
functionality on such desktops by proactively clearing all notification
references from our internal notification manager.

Signed-off-by: Magnus Groß <magnus.gross@rwth-aachen.de>
2022-03-05 16:51:02 +04:00
Magnus Groß 4dd14b81e1 Do not remove notification reference on NotificationClosed
In general we need to keep a reference to the notification id, so that
we can delete the notification later from history - unless the
NotificationClosed reason was that the user actively dismissed it, in
which case it is not kept in history anyway (so we can dismiss our
reference too).

-- Background --
Some desktop environments such as KDE keep a history of notifications.
An API is provided to delete notifications from that history by calling
the org.freedesktop.Notifications.CloseNotification endpoint with the ID
of that notification. If the notification was already closed (timed
out), then this will delete the notification from history.

The intent is to clear these notifications from the notification history
as soon as a chat with notifications originating from that person is
opened, as the user is then not interested anymore in those
notifications and to prevent unnecessary clutter in the history widget.
It is also cleared when the chat is read on another device.

-- Problem --
Telegram already has all the code in place to support this
functionality, but unfortunately this did not work on Linux before,
because we listen to the NotificationClosed signal and remove our
reference to the notification id from our internal manager as soon as we
get that signal. This means that we do not clear that notification from
history once we open the chat with that person (unless we open the chat
before the notification has timed out, i.e. if we didn't get the
NotificationClosed signal).

-- Fix --
To fix this, we keep our notification reference (if the notification was
not dismissed by the user), which means that our reference will be kept
around until we open the chat with that person (or close Telegram
entirely).

Since all the needed functionality for deleting notifications was
already in place, this patch is quite short as we only need to keep the
reference around longer than we did before this patch.

Note also that code is already in place to clear notifications for
messages that were read on another device: History::inboxRead() calls
Core::App().notifications().clearIncomingFromHistory()

Fixes #17111
2022-03-05 16:51:02 +04:00
Ilya Fedin daaa654065 Get rid of unneeded MainWindow::Private class on Linux 2022-03-05 16:47:38 +04:00
Ilya Fedin 8db567ba7a Don't hold a dbus connection unecessarily in main window 2022-03-05 16:47:38 +04:00
Ilya Fedin 805e6de1dc Add global menu event hook on Linux just like on macOS 2022-03-05 16:47:38 +04:00
Ilya Fedin ffbafcb5fb Get rid of Q_OBJECT in macOS MainWindow 2022-03-05 16:47:38 +04:00
Ilya Fedin 1c8d4ee7ab Get rid of Q_OBJECT in HistoryInner 2022-03-05 16:47:38 +04:00
23rd 5718789d53 Replaced Ui::InformBox and Ui::ConfirmBox with GenericBox. 2022-02-28 09:08:01 +03:00
Ilya Fedin 99e8d22c51 Move xdg-foreign support to lib_base 2022-02-04 16:31:40 +03:00
Ilya Fedin 7f0bdc5d36 Fix desktop environment list deduplication 2022-02-02 09:23:14 +03:00
Ilya Fedin e5981ed22b Move jemalloc initialization code to cmake_helpers 2022-02-01 14:41:54 +03:00
John Preston ca21b7efae Allow disable Cmd+Q warning on macOS. 2022-02-01 00:43:20 +03:00
John Preston 6207770120 Paint unread mention badge as an icon. 2022-01-28 19:10:07 +03:00
John Preston 28f2c213f7 Remove app module. Support delayed quit by Cmd+Q on macOS. 2022-01-27 15:54:20 +03:00
Ilya Fedin ceb323ac7c Use QMenuBar instead of own global menu implementation on Linux
This is another attempt of 79f96480c2
2022-01-22 21:18:37 +04:00
Ilya Fedin b65d40a22b Get rid of custom SNI implementation
XDG is inventing new tray specification, so SNI will be outdated soon and it's better to just use QSystemTrayIcon.
I believe all the major drawbacks of QSystemTrayIcon are solved and we can live with minor ones.
Given the planned MainWindow refactoring, it seems it's the best time to do that.
2022-01-22 21:18:37 +04:00
John Preston 3ff17a8789 Refactor image transformation interfaces. 2022-01-21 15:33:44 +03:00
John Preston 1f194da2f0 Improve macOS title bar font and rounding. 2022-01-17 16:48:32 +03:00
Ilya Fedin 30810e95f4 Log when DE is unknown 2022-01-08 10:59:47 +03:00
Ilya Fedin a3d84f69ea fixup! Use more sources for DE detection 2022-01-08 10:45:13 +03:00
Ilya Fedin b3bb1a537c Use more sources for DE detection 2022-01-08 09:55:34 +03:00
Ilya Fedin 726aa3316d Rework DE detection
Variables can point to a mixed environment, make DE detection non-exclusive.
Remove unused methods.
2022-01-07 19:14:59 +03:00
John Preston ba6c3eaf73 Add dummy Platform::Integration on Linux. 2022-01-06 15:44:02 +03:00
John Preston 3f0fed19d8 Fix build for macOS. 2022-01-06 15:41:17 +03:00
John Preston 18e6e2da9e Open specific chat only in one window. 2022-01-04 19:36:33 +03:00
John Preston 8b0725650d Move global event filter to Platform::Integration on Windows. 2022-01-04 15:29:40 +03:00
John Preston 3cb89339c8 Version 3.4.2: Fix build for Mac App Store. 2021-12-31 23:40:36 +03:00
Klemens Nanni 078a2af385 Fix -Wunused-const-variable warnings under DESKTOP_APP_DISABLE_DBUS_INTEGRATION
OpenBSD builds without dbus integration (for now);  this fixes the warnings.
Those variables have been introduced in multiple commits.
2021-12-29 20:16:04 +03:00
John Preston e7e34d50ba Fix building on Windows. 2021-12-14 16:27:57 +04:00
Ilya Fedin 48ab88a9ca Don't use QPlatformNativeInterface for native window handle on Windows 2021-12-13 14:24:34 +04:00
Ilya Fedin 33b7ac209e Don't use QPlatformNativeInterface-based XCB::GetRootWindowFromQt 2021-12-13 14:24:34 +04:00
John Preston 01c2be3f01 Add some checks for actions in a locked state. 2021-12-07 10:01:56 +04:00
Ilya Fedin 8592326a3c Revert "Use kernel accelerated sendfile to copy files on Linux"
This reverts commit 34534a9653.
2021-12-02 09:15:23 +04:00
Ilya Fedin 2ad20d6c4a Instantiate a local dbus server for webview IPC 2021-11-29 16:23:51 +04:00
Ilya Fedin 8fda1169e5 Get rid of Platform::MainWindow::psLinux* 2021-11-26 18:28:37 +04:00
Ilya Fedin 53305f5f46 Fix paste check in Linux global menu 2021-11-26 18:28:37 +04:00
23rd 0eee937e6d Moved ChatRestrictionsInfo and ChatAdminRightsInfo to separated file. 2021-11-26 18:00:21 +04:00
John Preston 773755d70e Send as a channel in HistoryWidget. 2021-11-26 18:00:18 +04:00
Ilya Fedin 22b37c4bf8 Use webkitgtk without its headers 2021-11-06 16:33:39 +04:00
John Preston 1ea6224e60 Fix autostart toggling. 2021-11-05 10:15:41 +04:00
John Preston f10ed4b9bc Support autostart in Windows Store version.
Fixes #3234.
2021-11-04 12:36:28 +04:00
John Preston 3743dd0161 Fix small window icon counter.
Regression was introduced in aef45b3a1d.
2021-11-03 16:14:20 +04:00
John Preston aef45b3a1d Refactor icon unread counter painting. 2021-11-02 20:12:57 +04:00
John Preston dab3bce8ba Fix crash on macOS before the app starts. 2021-11-02 00:07:22 +04:00
John Preston f204b9fca0 RegisterBundledResources only on macOS. 2021-10-29 17:42:57 +04:00
23rd 93ae5e71f7 Guarded timers for online processing in touchbar's PinnedDialogButton. 2021-10-29 16:10:07 +04:00
Ilya Fedin c50a5db277 Restore dbusmenu-qt dependent functionality with Qt 6 2021-10-24 20:01:55 +04:00
John Preston 389ea2af83 Fix compilation error on Linux. 2021-10-22 18:34:59 +04:00
John Preston 4cf9bf18e9 Fix clearing of macOS native notifications. 2021-10-21 23:37:14 +04:00
John Preston d361f5c6b0 Hide native notifications of deleted messages. 2021-10-21 23:01:13 +04:00
John Preston f7085b40b1 Support building macOS version with Qt 6.2. 2021-10-21 19:49:48 +04:00
Ilya Fedin 847c01d605 Add Qt 6 support
Tested only on Linux so far
2021-10-21 13:15:00 +04:00
23rd 80461bd9fe Moved ConfirmBox to Ui namespace. 2021-10-19 06:34:27 +03:00
23rd 6148edbc7d Moved ConfirmBox to td_ui. 2021-10-19 06:34:27 +03:00
John Preston 8cca75da5c Handle foreign instance in COM toast activator. 2021-10-08 13:46:52 +04:00
John Preston 8d0ff1b61d Try setting current window as foreground on activate. 2021-10-08 12:20:24 +04:00
John Preston dd856b9e4a Use real QWindow for taskbar icon hider.
Fixes #17081.
2021-10-08 12:19:41 +04:00
John Preston 352768053d Beta version 3.1.6: Fix build on Linux. 2021-10-06 21:07:18 +04:00
John Preston 5cd0a3719e Beta version 3.1.6: Detach FastReply from MarkAsRead. 2021-10-06 19:24:30 +04:00
John Preston 8b7cd4a0c7 Beta version 3.1.6: Fix crash on old Windows 10 versions. 2021-10-06 17:36:30 +04:00
John Preston e7cf560da0 Handle toast activations by COM activator. 2021-10-06 11:02:57 +04:00
John Preston 86e07518ad Fix clearing notifications from Action Center.
Regression was introduced in 997913be25.
2021-10-05 16:53:36 +04:00
John Preston 8c71d03959 Add reply from Windows native notifications. 2021-10-05 16:52:46 +04:00
John Preston 967e86f4ab Rewrite Windows native notifications using C++/WinRT. 2021-10-05 12:09:15 +04:00
John Preston 5136cc3c9c Rename Dialogs::Layout to Dialogs::Ui. 2021-10-04 23:45:21 +04:00
John Preston b78b27f517 Move dialogs_layout to dialogs/ui/. 2021-10-04 23:45:21 +04:00
Ilya Fedin c2212c719e Inform Qt about taskbar hider
This allows the feature to work without patching Qt
2021-10-04 23:23:50 +04:00
23rd 21f7cec781 Fixed build for macOS. 2021-09-30 21:21:07 +04:00
23rd 64af456d29 Fixed build for macOS. 2021-09-30 21:16:45 +04:00
Ilya Fedin d2a41a42e0 Move applicationDidFinishLaunching code to init
This should make the Qt patch catching the event unneeded
2021-09-29 09:04:23 +04:00
John Preston 844fd58a97 Support Windows 11 rounded corners and themeable title bar. 2021-09-28 21:11:35 +04:00
John Preston 19ce1edc16 Use base::SafeRound instead of std::round.
Previous assertion violations because of NaN from std::round were
in video streaming, see commits 27d58ba07b, 8f5830d520.

Now the crashes happened in the ConvertScale() call from a background
thread when preparing an image from clipboard for sending to a chat.
2021-09-27 12:13:57 +04:00
John Preston 8759ca4577 Rewrite bingmaps check to C++/WinRT. 2021-09-26 17:17:57 +04:00
Hermesis d5c6d9a231 Open map in browser if default "bingmaps:" handler is not found 2021-09-26 17:16:38 +04:00
Gleb Smirnoff 59f2f750b4 On FreeBSD the system malloc is jemalloc and non-portable
extensions are enabled including malloc_np.h.
2021-09-15 23:24:39 +03:00
John Preston 8069fdd873 Use base/random.h instead of openssl::RandomValue. 2021-09-15 13:42:22 +03:00
Ilya Fedin e92ae40ecb Implement close to taskbar option 2021-09-13 17:46:53 +03:00
Ilya Fedin 3fbd68cff9 Don't link glib with DESKTOP_APP_DISABLE_DBUS_INTEGRATION 2021-09-12 00:12:13 +03:00
Gleb Smirnoff 720f238cf8 Close a race between Gio threads and Qt application init.
QApplication has a historical feature[1] of calling setlocale(3) at init,
which today cause more harm than good.  Such call isn't thread safe neither
per C standard, not per any known libc implementation.  The Gio threads
would call into locale reading functions all the time, so early access to
locale by Gio may race with setlocale() by Qt leading to undefined behavior.

Platform specific start before the Sandbox (aka QApplication) is at core
design of tdesktop and that order can't be changed. There is no way to pause
Gio until QApplication instantiates.

Fortunately, Qt library itself has a static global flag that prevents it
from calling setlocale() twice. We don't even need to instantiate a
temporary QCoreApplication, we can just call into the method.  So call
it form Platform::start before any existing or future calls to Gio.

Fixes #16922

[1] https://chat.stackoverflow.com/rooms/63812/discussion-between-phil-armstrong-and-matteo-italia
2021-09-10 13:18:20 +03:00
23rd 900a7d0b2b Appended references to const auto types in loop to prevent copying.
Suggested by Apple Clang.
2021-09-09 16:32:04 +03:00
Ilya Fedin 45360adbc2 Remove unneeded libraries from snapcraft.yaml 2021-09-07 23:40:08 +03:00
Ilya Fedin 05d4d58f8b Replace GTK integration with xsettings + XDP 2021-09-06 15:43:28 +03:00
John Preston 1d2a18929a Use QOperatingSystemVersion. 2021-09-01 18:33:53 +03:00
John Preston 3cd0f9d189 Start non-unique ChatTheme. 2021-08-30 20:32:57 +03:00
Ilya Fedin 6192413f0b Split webview initialization from GtkIntegration class 2021-08-25 12:52:43 +03:00
Ilya Fedin 51df482571 Get rid of gtk open with dialog
Portal open with dialog works just fine and is a more universal solution... That allows to get rid of an additional process.
2021-08-25 12:52:43 +03:00
John Preston ddda7b8c52 Fix crash in application Dock menu on macOS. 2021-08-18 15:44:38 +03:00
Ilya Fedin e7d39e6046 Get rid of GtkIntegration::initializeSettings use 2021-08-13 15:21:19 +03:00
Ilya Fedin 63a92cb90a Log icon theme 2021-08-13 15:21:19 +03:00
Ilya Fedin 414456d003 Revert "Use gtk clipboard when available to avoid https://bugreports.qt.io/browse/QTBUG-56595"
Fixed in Qt by https://codereview.qt-project.org/c/qt/qtbase/+/306771

This reverts commit 3a91003eea.
2021-08-12 08:51:10 +03:00
Ilya Fedin 8b7b0fa570 Remove -externalupdater flag
Having a path to executable in /etc/tdesktop/externalupdater is a way more convenient and is enough
2021-08-11 18:20:52 +03:00
Ilya Fedin 97262a99c7 Get rid of osx and linux32 special targets 2021-08-11 16:59:27 +03:00
John Preston 1dec054766 Check if native window frame fits for saved geometry. 2021-08-10 15:46:18 +03:00
Ilya Fedin ac86f3e5bd Use Communications category for tray icon
Since tdesktop fits it
2021-08-10 15:42:21 +03:00
Ilya Fedin d986e70a89 Fix global menu on 64-bit systems with X11
When Wayland support for global menu was added (0b86feeeb5), X11 support was broken since QWindow::winId returns WId what is a quintptr that expands to uint32 on 32-bit and to uint64 on 64-bit, while AppMenu d-bus service accepts only uint32.
2021-07-28 23:41:36 +03:00
Ilya Fedin 1ebf27bfa1 Switch MainWindow to Ui::RpWindow 2021-07-28 18:05:39 +03:00
Ilya Fedin f71ce9afdf Fix dark titlebar on Windows 10 17763 2021-07-28 16:01:50 +03:00
John Preston 245909e381 Beta version 2.8.12: Prune icon cache on Linux. 2021-07-23 19:39:31 +03:00
John Preston 87ca2c891a Update Windows taskbar icon in new version. 2021-07-20 20:21:21 +03:00
John Preston 1ce66e5198 Pack and deploy d3dcompiler_47.dll. 2021-07-20 17:10:23 +03:00
Ilya Fedin 087fbe89ce Add additional checks to NotificationData::setImage 2021-07-19 22:56:38 +03:00
Ilya Fedin dc81f9eeaf Remove SetWatchingMediaKeys
Since SPMediaKeyTap has been removed on Mac, Linux is the only platform where this function is implemented, but that's not really needed due to MPRIS support, so SetWatchingMediaKeys can be dropped entirely
2021-07-19 22:56:14 +03:00
Ilya Fedin 49fed41dfa Use RegisterUrlScheme from lib_base 2021-07-19 22:55:57 +03:00
Ilya Fedin 9b1d967967 Move NotificationServiceWatcher to notifications manager 2021-07-19 22:39:38 +03:00
Ilya Fedin 6f151f20e9 Add support for DESKTOP_APP_DISABLE_WEBKITGTK
Co-authored-by: mid-kid <esteve.varela@gmail.com>
2021-07-19 22:31:27 +03:00
Ilya Fedin ae70dfb1f4 Return after throwing access denied error 2021-07-19 22:31:27 +03:00
Ilya Fedin ba9b72e038 Fix -Wunused-variable warnings with gcc 2021-07-19 22:31:27 +03:00
John Preston 4276b6cce0 Use rpl for Window::Theme::Background updates. 2021-07-15 16:42:36 +03:00
Ilya Fedin 79cc797aff Fix -Wunused-variable warnings 2021-07-13 21:43:34 +03:00