Commit Graph
27 Commits
Author SHA1 Message Date
Edouard Griffiths 62ce6c7b88 Merge pull request #2955 from rgetz/rgetz-fix-message-queue-leaks
tree wide: Fix message ownership and reporting for unhandled queue messages
2026-09-27 00:56:58 +02:00
Robin Getz c2b30d4fa8 tree wide: Fix message ownership and reporting for unhandled queue messages
MessageQueue::pop() transfers ownership of the popped message to the
caller, but many handleInputMessages() implementations only deleted
the message when handleMessage() returned true. When a message was not
handled, ownership had already been transferred from the queue and the
message was leaked.

This was identified while investigating an ASAN leak in the audio
subsystem.

Update the applicable handleInputMessages() implementations to always
delete messages after handleMessage() returns. Unhandled messages are
also logged with the component and message identifier so unexpected
message routing is visible during debugging.

This change:
- Ensures every message popped from a queue has its ownership resolved.
- Prevents leaks when handleMessage() returns false.
- Makes unhandled messages visible instead of silently discarding them.
- Preserves the existing message handling logic and does not require
  components to handle message types that are legitimately irrelevant
  to them.

The changes are intentionally mechanical and limited to the common
message queue ownership and diagnostic pattern.

Signed-off-by: Robin Getz <rgetz503@gmail.com>
2026-09-25 23:49:05 -04:00
Jon BenistonandClaude Opus 5 71d8650c6d Drive feature state from a signal rather than polling it
Every feature GUI ran its own one second QTimer, read getState(), compared
it against a remembered m_lastFeatureState and restyled its start/stop
button when the two differed. The same twenty five lines appeared in each
of them.

Feature now keeps m_state private behind setState(), which emits
stateChanged() when it actually changes, and FeatureGUI grows a shared
updateStartStopButton() that restyles the button and reports an error
state. A GUI connects to the signal and calls that, so the state is
reflected as soon as it changes rather than up to a second later, and the
per feature timers and m_lastFeatureState members are gone.

FeatureUISet disconnects the feature from its GUI before the feature is
deleted: QObject emits destroyed() before dropping its connections, so a
stateChanged() emitted from the feature's destructor could otherwise reach
a GUI that has already deleted its ui object.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 17:49:02 +01:00
f4exb 5d0fa7fa67 Removed destroy method leftovers and Sonar lint 2024-08-27 09:54:09 +02:00
f4exb 00b041d762 Rewriting of copyright notices for plugins/features. Part of #1893 2023-11-18 13:12:18 +01:00
Jon Beniston e799e5eb72 Fix resize cursor not being cleared when mouse moves over child widgets 2023-11-13 20:51:03 +00:00
Jon Beniston 0dd466a900 Add DialogPositioner to ensure dialogs are fully on screen and remain on
screen when screen orientation changes.
Add DialPopup to allow dials to adjusted with a slider, which is easier
on touchscreens.
Add TableTapAndHold to support table context menus on touchscreens.
2022-12-20 10:31:15 +00:00
f4exb 541b8449fd RigCrl Server feature: Make settings assignments atomic. Part of #1329 2022-11-27 13:36:48 +01:00
Jon Beniston c966f1cb5a dd maximize button to MainSpectrum and expandible Channels and Features.
Add sizeToContents in ChannelGUI and FeatureGUI, called when widget is
rolled, so we can remove resizing code from all of the individual
channels and features.

In RollupContents, use minimumSizeHint for calculated size, so that
minimumWidth can come from .ui file.

In DeviceGUI::sizeToContents(), call adjustSize(), so Device GUIs start
out at minimum needed size (which should restore appearance prior to
last patch).

In stackSubWindows, use available space for channels if no
spectrum/features present.
In stackSubWindows, fix spectrum from being sized too big, resulting in
scroll bars appearing.
Reset user-defined channel width in stackSubWindows, when channels are
removed.
Don't stack maximized windows.

There's one hack in Channel/FeatureGUI::maximizeWindow(). It seems that
when maximimzing a window, QOpenGLWidgets aren't always paint properly
immediately afterwards, so the code forces an additional update. I can't
see why the first call to paintGL doesn't work.
2022-11-11 12:24:27 +00:00
f4exb 9e5c629473 v7: API: added workspace handling for device, spectrum, feature and channel. Implements #1242 2022-05-13 22:24:48 +02:00
f4exb f77e38eb3f Massive UI revamping (v7): Fixed sizing of feature windows. Part of #1209 2022-04-24 19:34:48 +02:00
f4exb 632378205a Merge branch 'v7' of https://github.com/f4exb/sdrangel into v7 2022-04-23 11:38:03 +02:00
Jon Beniston 99fce0dce0 Add FramelessWindowResizer class for resizig frameless windows.
Remove top-right resize grip from windows.
In channels and features, make sure enterEvent and leaveEvent are passed
to parent class.
2022-04-22 18:21:24 +01:00
f4exb 90386842ca Massive UI revamping (v7): fixed widget size handling: features. Part of #1209 2022-04-21 23:31:01 +02:00
f4exb 560d61abcb Massive UI revamping (v7): feature window basic feature settings dialog: implemented reset to default title. Some cosmetic changes 2022-04-18 12:08:33 +02:00
f4exb 4e2a4b7f6c Massive UI revamping (v7): more cleanup 2022-04-15 19:53:50 +02:00
f4exb 5abef702e4 Massive UI revamping (v7): features 2022-04-05 16:28:07 +02:00
f4exb 98b305f320 Make rollup state a serializable object so that it can be dumped in JSON format for the API. Prerequisite tp #1050 2022-01-09 05:27:12 +01:00
Jon Beniston 03004e00f7 Add links to documentation 2021-11-24 11:31:51 +00:00
Jon Beniston f72f18debf Save/restore rollup state in features 2021-11-23 13:35:57 +00:00
f4exb 7a6636b63a Fixed -Wunused-variable warnings 2020-11-14 18:45:05 +01:00
f4exb 8ba95addc0 Use MainCore instance in place of MainWindow 2020-10-12 22:11:13 +02:00
f4exb e9a32528d7 Delete Feature in FeatureUISet 2020-10-04 22:16:09 +02:00
f4exb 4ab683fa7d Feature plugins: use specialized FeatureGUI superclass. Handle GUI lifecycle in DeviceUISet 2020-10-04 22:16:09 +02:00
f4exb d085b4eb7d Removed undesirable methods from PluginInstanceGUI and related common plugins 2020-10-04 22:16:09 +02:00
f4exb efaba0fa67 Feature plugins: register feature instances outside of their GUI classes 2020-10-04 22:16:09 +02:00
f4exb 586d07bcb7 RigCtl Server: added plugin 2020-09-28 19:37:40 +02:00