-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Extract the OS event filter implementation #2422
Extract the OS event filter implementation #2422
Conversation
Now these are the kind of PRs I wanna see! Great work. Can we follow this architecture for the global hotkey detection as well? |
@droidmonkey thank you! I think I've not yet read through the code that handles the global hotkey detection; but I can look into that and see if I can spot something that can be improved! |
Please rebase on develop, not sure what happened to the CI. |
@droidmonkey sure! I'm gonna do that. I have a little question though. Does installNativeEventFilter(new OSEventFilter()); I looked up on the documentation and I haven't found anything related to this. Maybe I'm missing something but if the method doesn't, I think we're introducing a leak. I coded it that way because it's how it was previously coded. We could use a |
The docs don't say the application owns the filter object after calling the function so I agree with a scoped pointer. |
@droidmonkey I added the scoped pointer. However, I think there's something weird going on. OSEventFilter::~OSEventFilter()
{
qWarning("Destructor was invoked.\n");
} and the message I spent some time trying to figure out why but I didn't succeed 🤔 |
I wouldn't worry about it since it lives the whole length of the application. Does ASAN report issues? |
This is the application output:
which is what I've always got since I first started checking out the code. |
None of the Qt plugin destructors is called reliably. |
- New Database Wizard [#1952] - Advanced Search [#1797] - Automatic update checker [#2648] - KeeShare database synchronization [#2109, #1992, #2738, #2742, #2746, #2739] - Improve favicon fetching; transition to Duck-Duck-Go [#2795, #2011, #2439] - Remove KeePassHttp support [#1752] - CLI: output info to stderr for easier scripting [#2558] - CLI: Add --quiet option [#2507] - CLI: Add create command [#2540] - CLI: Add recursive listing of entries [#2345] - CLI: Fix stdin/stdout encoding on Windows [#2425] - SSH Agent: Support OpenSSH for Windows [#1994] - macOS: TouchID Quick Unlock [#1851] - macOS: Multiple improvements; include CLI in DMG [#2165, #2331, #2583] - Linux: Prevent Klipper from storing secrets in clipboard [#1969] - Linux: Use polling based file watching for NFS [#2171] - Linux: Enable use of browser plugin in Snap build [#2802] - TOTP QR Code Generator [#1167] - High-DPI Scaling for 4k screens [#2404] - Make keyboard shortcuts more consistent [#2431] - Warn user if deleting referenced entries [#1744] - Allow toolbar to be hidden and repositioned [#1819, #2357] - Increase max allowed database timeout to 12 hours [#2173] - Password generator uses existing password length by default [#2318] - Improve alert message box button labels [#2376] - Show message when a database merge makes no changes [#2551] - Browser Integration Enhancements [#1497, #2253, #1904, #2232, #1850, #2218, #2391, #2396, #2542, #2622, #2637, #2790] - Overall Code Improvements [#2316, #2284, #2351, #2402, #2410, #2419, #2422, #2443, #2491, #2506, #2610, #2667, #2709, #2731]
Description
The
XcbEventFilter
andWinEventFilter
classes have been extracted into a separate file and a single class.The new file has then been added to the build chain.
The new class, called
OSEventFilter
, implements the inheritednativeEventFilter()
method and a preprocessor condition picks the right test for theif
statement.Installing a native event filter has now become this:
which is oblivious of the actual implementation. The new structure should make it easier to add new event filters for new platforms: you just add a new preprocessor case in the
nativeEventFilter()
implementation.Motivation and context
The
XcbEventFilter
andWinEventFilter
classes had basically the same implementation, except for a single line: the condition in the if statement within thenativeEventFilter()
method.This made for a lot of code duplication. In addition to that, the release build generated the following warning:
In order to get rid of the warning, a base class's virtual method must have an out-of-line implementation in one of the derived classes. This will make the compiler place the vtable in that translation unit.
Moreover,
Application.cpp
felt a bit cluttered in my humble opinion: to reach the constructor implementation I had to scroll quite a few lines down.How has this been tested?
I performed a dev build and a release build; and ran all the tests.
Tests n.30, n.31 and n.32 failed but they failed before I made any change as well.
Types of changes
Checklist:
-DWITH_ASAN=ON
. [REQUIRED]