Extract the OS event filter implementation#2422
Extract the OS event filter implementation#2422droidmonkey merged 1 commit intokeepassxreboot:developfrom brainplot:extract-eventfilter
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
XcbEventFilterandWinEventFilterclasses 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 theifstatement.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
XcbEventFilterandWinEventFilterclasses 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.cppfelt 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]