Skip to content

[BUG] Multiple instances at once #631

@ackledotdev

Description

@ackledotdev

Describe the bug
When launching from desktop (GNOME) with one instance running, a new instance is created.

To Reproduce
Open one instance from GUI. Close main window, but keep application running in taskbar. Launch another instance from GUI.

Expected behavior
No new instance is created; simply opens the window (or focuses, if already open) for the single running instance.

Screenshots
Will add upon request.

Desktop (please complete the following information):

  • OS: Fedora Workstation 42, GNOME, Wayland, English (US)
  • Application version: 5.1.1.0 (from Flatpak)

Additional context
None.

Log files

2025-07-06 17:38:13.102 -07:00 [INF] PlatformImpl: Using LinuxPlatformImplCreator
2025-07-06 17:38:13.125 -07:00 [INF] IpcService: Service listening on the session bus
2025-07-06 17:38:13.574 -07:00 [INF] Translator mode file location: /home/ackle/.var/app/me.timschneeberger.GalaxyBudsClient/data/GalaxyBudsClient/custom_language.xaml
2025-07-06 17:38:13.575 -07:00 [INF] User script directory: /home/ackle/.var/app/me.timschneeberger.GalaxyBudsClient/data/GalaxyBudsClient/scripts
2025-07-06 17:38:13.576 -07:00 [INF] ScriptManager: 0 user script(s) found
2025-07-06 17:38:13.578 -07:00 [DBG] Environment: "Production"
2025-07-06 17:38:13.633 -07:00 [DBG] Linux.BluetoothService: Using Bluetooth adapter: hci0
2025-07-06 17:38:13.653 -07:00 [DBG] Linux.BluetoothService: Connecting... (attempt 1/5)
2025-07-06 17:38:13.660 -07:00 [DBG] Linux.BluetoothService: Device ready. Registering profile client for UUID 2e73a4ad-332d-41fc-90e2-16bef06523f2...
2025-07-06 17:38:13.661 -07:00 [INF] Linux.BluetoothService: Unregistering profile failed: org.bluez.Error.DoesNotExist: Does Not Exist
2025-07-06 17:38:13.664 -07:00 [DBG] Linux.BluetoothService: Connecting to profile... (attempt 1/10)
2025-07-06 17:38:13.782 -07:00 [DBG] Linux.BluetoothSocket: Connected to profile
2025-07-06 17:38:13.782 -07:00 [DBG] Linux.BluetoothService: Connection established. Launching BluetoothServiceLoop
2025-07-06 17:38:13.874 -07:00 [INF] Startup time: "00:00:01.0720534"
2025-07-06 17:38:14.739 -07:00 [DBG] Linux.HotkeyReceiver: All hotkeys unregistered
2025-07-06 17:38:14.740 -07:00 [DBG] Hotkey successfully registered (Win+B: Connect to device)
2025-07-06 17:38:14.743 -07:00 [INF] Window startup time: "00:00:01.9415566"
2025-07-06 17:40:03.136 -07:00 [DBG] FirmwareRemoteClient: Searching for firmware binaries...
2025-07-06 17:40:03.778 -07:00 [WRN] FirmwareRemoteBinary: Device version info length is wrong: 13 vs 13
2025-07-06 17:40:03.778 -07:00 [WRN] FirmwareRemoteBinary: Device version info length is wrong: 13 vs 13
2025-07-06 17:40:03.778 -07:00 [WRN] FirmwareRemoteBinary: Device version info length is wrong: 13 vs 13
2025-07-06 17:40:03.779 -07:00 [WRN] FirmwareRemoteBinary: Device version info length is wrong: 13 vs 13
2025-07-06 17:40:03.779 -07:00 [DBG] FirmwareRemoteClient: 0 firmware found
2025-07-06 17:40:04.377 -07:00 [DBG] FirmwareRemoteClient: Searching for firmware binaries...
2025-07-06 17:40:04.565 -07:00 [WRN] FirmwareRemoteBinary: Device version info length is wrong: 13 vs 13
2025-07-06 17:40:04.565 -07:00 [WRN] FirmwareRemoteBinary: Device version info length is wrong: 13 vs 13
2025-07-06 17:40:04.565 -07:00 [WRN] FirmwareRemoteBinary: Device version info length is wrong: 13 vs 13
2025-07-06 17:40:04.566 -07:00 [WRN] FirmwareRemoteBinary: Device version info length is wrong: 13 vs 13
2025-07-06 17:40:04.566 -07:00 [DBG] FirmwareRemoteClient: 0 firmware found
2025-07-06 17:40:33.221 -07:00 [ERR] Unhandled exception in main thread
System.ArgumentException: Expected Device as first value
   at GalaxyBudsClient.Interface.Converters.DeviceSelectStateConverter.Convert(IList`1 values, Type targetType, Object parameter, CultureInfo culture) in /run/build/GalaxyBudsClient/GalaxyBudsClient/Interface/Converters/DeviceSelectStateConverter.cs:line 29
   at Avalonia.Data.Core.MultiBindingExpression.PublishValue()
   at Avalonia.Data.Core.MultiBindingExpression.Avalonia.Data.Core.IBindingExpressionSink.OnChanged(UntypedBindingExpressionBase instance, Boolean hasValueChanged, Boolean hasErrorChanged, Object value, BindingError error)
   at Avalonia.Data.Core.BindingExpression.ConvertAndPublishValue(Object value, BindingError error)
   at Avalonia.Data.Core.ExpressionNodes.ExpressionNode.SetValue(Object valueOrNotification)
   at Avalonia.Data.Core.ExpressionNodes.DataContextNode.OnPropertyChanged(Object sender, AvaloniaPropertyChangedEventArgs e)
   at Avalonia.PropertyStore.ValueStore.InheritedValueChanged(AvaloniaProperty property, EffectiveValue oldValue, EffectiveValue newValue)
   at Avalonia.PropertyStore.ValueStore.InheritedValueChanged(AvaloniaProperty property, EffectiveValue oldValue, EffectiveValue newValue)
   at Avalonia.PropertyStore.ValueStore.InheritedValueChanged(AvaloniaProperty property, EffectiveValue oldValue, EffectiveValue newValue)
   at Avalonia.PropertyStore.ValueStore.InheritedValueChanged(AvaloniaProperty property, EffectiveValue oldValue, EffectiveValue newValue)
   at Avalonia.PropertyStore.ValueStore.SetInheritanceParent(AvaloniaObject newParent)
   at Avalonia.StyledElement.Avalonia.Controls.ISetLogicalParent.SetParent(ILogical parent)
   at Avalonia.StyledElement.ClearLogicalParent(IList children)
   at Avalonia.Visual.LogicalChildrenCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
   at Avalonia.Collections.AvaloniaList`1.NotifyRemove(T item, Int32 index)
   at Avalonia.Collections.AvaloniaList`1.Remove(T item)
   at Avalonia.Controls.Presenters.ContentPresenter.UpdateChild(Object content)
   at Avalonia.Controls.Presenters.ContentPresenter.ApplyTemplate()
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Controls.VirtualizingStackPanel.RealizeElements(IReadOnlyList`1 items, Size availableSize, MeasureViewport& viewport)
   at Avalonia.Controls.VirtualizingStackPanel.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Controls.Presenters.ScrollContentPresenter.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
   at Avalonia.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
   at Avalonia.Controls.Grid.MeasureOverride(Size constraint)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Layout.LayoutHelper.MeasureChild(Layoutable control, Size availableSize, Thickness padding, Thickness borderThickness)
   at Avalonia.Controls.Border.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
   at Avalonia.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
   at Avalonia.Controls.Grid.MeasureOverride(Size constraint)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Layout.LayoutHelper.MeasureChild(Layoutable control, Size availableSize, Thickness padding, Thickness borderThickness)
   at Avalonia.Controls.Border.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Layout.LayoutHelper.MeasureChild(Layoutable control, Size availableSize, Thickness padding, Thickness borderThickness)
   at Avalonia.Controls.Presenters.ContentPresenter.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Layout.LayoutHelper.MeasureChild(Layoutable control, Size availableSize, Thickness padding, Thickness borderThickness)
   at Avalonia.Controls.Presenters.ContentPresenter.MeasureOverride(Size availableSize)
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize)
   at Avalonia.Layout.Layoutable.Measure(Size availableSize)
   at Avalonia.Layout.LayoutManager.Measure(Layoutable control)
   at Avalonia.Layout.LayoutManager.ExecuteLayoutPass()
   at Avalonia.Media.MediaContext.FireInvokeOnRenderCallbacks()
   at Avalonia.Media.MediaContext.RenderCore()
   at Avalonia.Media.MediaContext.Render()
   at Avalonia.Threading.DispatcherOperation.InvokeCore()
   at Avalonia.Threading.DispatcherOperation.Execute()
   at Avalonia.Threading.Dispatcher.ExecuteJob(DispatcherOperation job)
   at Avalonia.Threading.Dispatcher.ExecuteJobsCore(Boolean fromExplicitBackgroundProcessingCallback)
   at Avalonia.Threading.Dispatcher.Signaled()
   at Avalonia.X11.X11PlatformThreading.CheckSignaled()
   at Avalonia.X11.X11PlatformThreading.RunLoop(CancellationToken cancellationToken)
   at Avalonia.Threading.DispatcherFrame.Run(IControlledDispatcherImpl impl)
   at Avalonia.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken)
   at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.StartCore(String[] args)
   at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args)
   at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime(AppBuilder builder, String[] args, ShutdownMode shutdownMode)
   at GalaxyBudsClient.Program.Main(String[] args) in /run/build/GalaxyBudsClient/GalaxyBudsClient/Program.cs:line 127

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions