Skip to content

Commit de3b6d6

Browse files
committed
feat: Add unrefs and factor GetObject calls
Signed-off-by: Felicitas Pojtinger <[email protected]>
1 parent fc30e43 commit de3b6d6

File tree

4 files changed

+178
-75
lines changed

4 files changed

+178
-75
lines changed

internal/components/assistant.go

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -67,55 +67,84 @@ func OpenAssistantWindow(
6767
app.GetStyleManager().SetColorScheme(adw.ColorSchemeDefaultValue)
6868

6969
builder := gtk.NewBuilderFromResource(resources.GResourceAssistantPath)
70-
71-
var window adw.ApplicationWindow
70+
defer builder.Unref()
71+
72+
var (
73+
window adw.ApplicationWindow
74+
overlay adw.ToastOverlay
75+
buttonHeaderbarTitle gtk.Label
76+
buttonHeaderbarSubtitle gtk.Label
77+
previousButton gtk.Button
78+
nextButton gtk.Button
79+
menuButton gtk.MenuButton
80+
headerbarSpinner gtk.Spinner
81+
stack gtk.Stack
82+
magnetLinkEntry gtk.Entry
83+
mediaSelectionGroup adw.PreferencesGroup
84+
rightsConfirmationButton gtk.CheckButton
85+
downloadAndPlayButton adw.SplitButton
86+
streamWithoutDownloadingButton gtk.Button
87+
streamPopover gtk.Popover
88+
mediaInfoDisplay gtk.Box
89+
mediaInfoButton gtk.Button
90+
)
7291
builder.GetObject("main-window").Cast(&window)
73-
var overlay adw.ToastOverlay
92+
defer window.Unref()
7493
builder.GetObject("toast-overlay").Cast(&overlay)
75-
var buttonHeaderbarTitle gtk.Label
94+
defer overlay.Unref()
7695
builder.GetObject("button-headerbar-title").Cast(&buttonHeaderbarTitle)
77-
var buttonHeaderbarSubtitle gtk.Label
96+
defer buttonHeaderbarTitle.Unref()
7897
builder.GetObject("button-headerbar-subtitle").Cast(&buttonHeaderbarSubtitle)
79-
var previousButton gtk.Button
98+
defer buttonHeaderbarSubtitle.Unref()
8099
builder.GetObject("previous-button").Cast(&previousButton)
81-
var nextButton gtk.Button
100+
defer previousButton.Unref()
82101
builder.GetObject("next-button").Cast(&nextButton)
83-
var menuButton gtk.MenuButton
102+
defer nextButton.Unref()
84103
builder.GetObject("menu-button").Cast(&menuButton)
85-
var headerbarSpinner gtk.Spinner
104+
defer menuButton.Unref()
86105
builder.GetObject("headerbar-spinner").Cast(&headerbarSpinner)
87-
var stack gtk.Stack
106+
defer headerbarSpinner.Unref()
88107
builder.GetObject("stack").Cast(&stack)
89-
var magnetLinkEntry gtk.Entry
108+
defer stack.Unref()
90109
builder.GetObject("magnet-link-entry").Cast(&magnetLinkEntry)
91-
var mediaSelectionGroup adw.PreferencesGroup
110+
defer magnetLinkEntry.Unref()
92111
builder.GetObject("media-selection-group").Cast(&mediaSelectionGroup)
93-
var rightsConfirmationButton gtk.CheckButton
112+
defer mediaSelectionGroup.Unref()
94113
builder.GetObject("rights-confirmation-button").Cast(&rightsConfirmationButton)
95-
var downloadAndPlayButton adw.SplitButton
114+
defer rightsConfirmationButton.Unref()
96115
builder.GetObject("download-and-play-button").Cast(&downloadAndPlayButton)
97-
var streamWithoutDownloadingButton gtk.Button
116+
defer downloadAndPlayButton.Unref()
98117
builder.GetObject("stream-without-downloading-button").Cast(&streamWithoutDownloadingButton)
99-
var streamPopover gtk.Popover
118+
defer streamWithoutDownloadingButton.Unref()
100119
builder.GetObject("stream-popover").Cast(&streamPopover)
101-
var mediaInfoDisplay gtk.Box
120+
defer streamPopover.Unref()
102121
builder.GetObject("media-info-display").Cast(&mediaInfoDisplay)
103-
var mediaInfoButton gtk.Button
122+
defer mediaInfoDisplay.Unref()
104123
builder.GetObject("media-info-button").Cast(&mediaInfoButton)
124+
defer mediaInfoButton.Unref()
105125

106126
descriptionBuilder := gtk.NewBuilderFromResource(resources.GResourceDescriptionPath)
107-
var descriptionWindow adw.Window
127+
defer descriptionBuilder.Unref()
128+
var (
129+
descriptionWindow adw.Window
130+
descriptionText gtk.TextView
131+
descriptionHeaderbarTitle gtk.Label
132+
descriptionHeaderbarSubtitle gtk.Label
133+
)
108134
descriptionBuilder.GetObject("description-window").Cast(&descriptionWindow)
109-
var descriptionText gtk.TextView
135+
defer descriptionWindow.Unref()
110136
descriptionBuilder.GetObject("description-text").Cast(&descriptionText)
111-
var descriptionHeaderbarTitle gtk.Label
137+
defer descriptionText.Unref()
112138
descriptionBuilder.GetObject("headerbar-title").Cast(&descriptionHeaderbarTitle)
113-
var descriptionHeaderbarSubtitle gtk.Label
139+
defer descriptionHeaderbarTitle.Unref()
114140
descriptionBuilder.GetObject("headerbar-subtitle").Cast(&descriptionHeaderbarSubtitle)
141+
defer descriptionHeaderbarSubtitle.Unref()
115142

116143
warningBuilder := gtk.NewBuilderFromResource(resources.GResourceWarningPath)
144+
defer warningBuilder.Unref()
117145
var warningDialog adw.AlertDialog
118146
warningBuilder.GetObject("warning-dialog").Cast(&warningDialog)
147+
defer warningDialog.Unref()
119148

120149
magnetLink := ""
121150
torrentTitle := ""

internal/components/controls.go

Lines changed: 96 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -148,95 +148,150 @@ func OpenControlsWindow(
148148
app.GetStyleManager().SetColorScheme(adw.ColorSchemePreferDarkValue)
149149

150150
builder := gtk.NewBuilderFromResource(resources.GResourceControlsPath)
151-
152-
var window adw.ApplicationWindow
151+
defer builder.Unref()
152+
153+
var (
154+
window adw.ApplicationWindow
155+
overlay adw.ToastOverlay
156+
buttonHeaderbarTitle gtk.Label
157+
buttonHeaderbarSubtitle gtk.Label
158+
playButton gtk.Button
159+
stopButton gtk.Button
160+
volumeScale gtk.Scale
161+
volumeButton gtk.MenuButton
162+
volumeMuteButton gtk.Button
163+
subtitleButton gtk.Button
164+
audiotracksButton gtk.Button
165+
fullscreenButton gtk.ToggleButton
166+
mediaInfoButton gtk.Button
167+
headerbarSpinner gtk.Spinner
168+
menuButton gtk.MenuButton
169+
elapsedTrackLabel gtk.Label
170+
remainingTrackLabel gtk.Label
171+
seeker gtk.Scale
172+
watchingWithTitleLabel gtk.Label
173+
streamCodeInput gtk.Entry
174+
copyStreamCodeButton gtk.Button
175+
)
153176
builder.GetObject("main-window").Cast(&window)
154-
var overlay adw.ToastOverlay
177+
defer window.Unref()
155178
builder.GetObject("toast-overlay").Cast(&overlay)
156-
var buttonHeaderbarTitle gtk.Label
179+
defer overlay.Unref()
157180
builder.GetObject("button-headerbar-title").Cast(&buttonHeaderbarTitle)
158-
var buttonHeaderbarSubtitle gtk.Label
181+
defer buttonHeaderbarTitle.Unref()
159182
builder.GetObject("button-headerbar-subtitle").Cast(&buttonHeaderbarSubtitle)
160-
var playButton gtk.Button
183+
defer buttonHeaderbarSubtitle.Unref()
161184
builder.GetObject("play-button").Cast(&playButton)
162-
var stopButton gtk.Button
185+
defer playButton.Unref()
163186
builder.GetObject("stop-button").Cast(&stopButton)
164-
var volumeScale gtk.Scale
187+
defer stopButton.Unref()
165188
builder.GetObject("volume-scale").Cast(&volumeScale)
166-
var volumeButton gtk.MenuButton
189+
defer volumeScale.Unref()
167190
builder.GetObject("volume-button").Cast(&volumeButton)
168-
var volumeMuteButton gtk.Button
191+
defer volumeButton.Unref()
169192
builder.GetObject("audiovolume-button-mute-button").Cast(&volumeMuteButton)
170-
var subtitleButton gtk.Button
193+
defer volumeMuteButton.Unref()
171194
builder.GetObject("subtitle-button").Cast(&subtitleButton)
172-
var audiotracksButton gtk.Button
195+
defer subtitleButton.Unref()
173196
builder.GetObject("audiotracks-button").Cast(&audiotracksButton)
174-
var fullscreenButton gtk.ToggleButton
197+
defer audiotracksButton.Unref()
175198
builder.GetObject("fullscreen-button").Cast(&fullscreenButton)
176-
var mediaInfoButton gtk.Button
199+
defer fullscreenButton.Unref()
177200
builder.GetObject("media-info-button").Cast(&mediaInfoButton)
178-
var headerbarSpinner gtk.Spinner
201+
defer mediaInfoButton.Unref()
179202
builder.GetObject("headerbar-spinner").Cast(&headerbarSpinner)
180-
var menuButton gtk.MenuButton
203+
defer headerbarSpinner.Unref()
181204
builder.GetObject("menu-button").Cast(&menuButton)
182-
var elapsedTrackLabel gtk.Label
205+
defer menuButton.Unref()
183206
builder.GetObject("elapsed-track-label").Cast(&elapsedTrackLabel)
184-
var remainingTrackLabel gtk.Label
207+
defer elapsedTrackLabel.Unref()
185208
builder.GetObject("remaining-track-label").Cast(&remainingTrackLabel)
186-
var seeker gtk.Scale
209+
defer remainingTrackLabel.Unref()
187210
builder.GetObject("seeker").Cast(&seeker)
188-
var watchingWithTitleLabel gtk.Label
211+
defer seeker.Unref()
189212
builder.GetObject("watching-with-title-label").Cast(&watchingWithTitleLabel)
190-
var streamCodeInput gtk.Entry
213+
defer watchingWithTitleLabel.Unref()
191214
builder.GetObject("stream-code-input").Cast(&streamCodeInput)
192-
var copyStreamCodeButton gtk.Button
215+
defer streamCodeInput.Unref()
193216
builder.GetObject("copy-stream-code-button").Cast(&copyStreamCodeButton)
217+
defer copyStreamCodeButton.Unref()
194218

195219
descriptionBuilder := gtk.NewBuilderFromResource(resources.GResourceDescriptionPath)
196-
var descriptionWindow adw.Window
220+
defer descriptionBuilder.Unref()
221+
var (
222+
descriptionWindow adw.Window
223+
descriptionText gtk.TextView
224+
descriptionHeaderbarTitle gtk.Label
225+
descriptionHeaderbarSubtitle gtk.Label
226+
descriptionProgressBar gtk.ProgressBar
227+
)
197228
descriptionBuilder.GetObject("description-window").Cast(&descriptionWindow)
198-
var descriptionText gtk.TextView
229+
defer descriptionWindow.Unref()
199230
descriptionBuilder.GetObject("description-text").Cast(&descriptionText)
200-
var descriptionHeaderbarTitle gtk.Label
231+
defer descriptionText.Unref()
201232
descriptionBuilder.GetObject("headerbar-title").Cast(&descriptionHeaderbarTitle)
202-
var descriptionHeaderbarSubtitle gtk.Label
233+
defer descriptionHeaderbarTitle.Unref()
203234
descriptionBuilder.GetObject("headerbar-subtitle").Cast(&descriptionHeaderbarSubtitle)
204-
var descriptionProgressBar gtk.ProgressBar
235+
defer descriptionHeaderbarSubtitle.Unref()
205236
descriptionBuilder.GetObject("preparing-progress-bar").Cast(&descriptionProgressBar)
237+
defer descriptionProgressBar.Unref()
206238

207239
subtitlesBuilder := gtk.NewBuilderFromResource(resources.GResourceSubtitlesPath)
208-
var subtitlesDialog adw.Window
240+
defer subtitlesBuilder.Unref()
241+
var (
242+
subtitlesDialog adw.Window
243+
subtitlesCancelButton gtk.Button
244+
subtitlesSpinner gtk.Spinner
245+
subtitlesOKButton gtk.Button
246+
subtitlesSelectionGroup adw.PreferencesGroup
247+
addSubtitlesFromFileButton gtk.Button
248+
subtitlesOverlay adw.ToastOverlay
249+
)
209250
subtitlesBuilder.GetObject("subtitles-dialog").Cast(&subtitlesDialog)
210-
var subtitlesCancelButton gtk.Button
251+
defer subtitlesDialog.Unref()
211252
subtitlesBuilder.GetObject("button-cancel").Cast(&subtitlesCancelButton)
212-
var subtitlesSpinner gtk.Spinner
253+
defer subtitlesCancelButton.Unref()
213254
subtitlesBuilder.GetObject("headerbar-spinner").Cast(&subtitlesSpinner)
214-
var subtitlesOKButton gtk.Button
255+
defer subtitlesSpinner.Unref()
215256
subtitlesBuilder.GetObject("button-ok").Cast(&subtitlesOKButton)
216-
var subtitlesSelectionGroup adw.PreferencesGroup
257+
defer subtitlesOKButton.Unref()
217258
subtitlesBuilder.GetObject("subtitle-tracks").Cast(&subtitlesSelectionGroup)
218-
var addSubtitlesFromFileButton gtk.Button
259+
defer subtitlesSelectionGroup.Unref()
219260
subtitlesBuilder.GetObject("add-from-file-button").Cast(&addSubtitlesFromFileButton)
220-
var subtitlesOverlay adw.ToastOverlay
261+
defer addSubtitlesFromFileButton.Unref()
221262
subtitlesBuilder.GetObject("toast-overlay").Cast(&subtitlesOverlay)
263+
defer subtitlesOverlay.Unref()
222264

223265
audiotracksBuilder := gtk.NewBuilderFromResource(resources.GResourceAudiotracksPath)
224-
var audiotracksDialog adw.Window
266+
defer audiotracksBuilder.Unref()
267+
var (
268+
audiotracksDialog adw.Window
269+
audiotracksCancelButton gtk.Button
270+
audiotracksOKButton gtk.Button
271+
audiotracksSelectionGroup adw.PreferencesGroup
272+
)
225273
audiotracksBuilder.GetObject("audiotracks-dialog").Cast(&audiotracksDialog)
226-
var audiotracksCancelButton gtk.Button
274+
defer audiotracksDialog.Unref()
227275
audiotracksBuilder.GetObject("button-cancel").Cast(&audiotracksCancelButton)
228-
var audiotracksOKButton gtk.Button
276+
defer audiotracksCancelButton.Unref()
229277
audiotracksBuilder.GetObject("button-ok").Cast(&audiotracksOKButton)
230-
var audiotracksSelectionGroup adw.PreferencesGroup
278+
defer audiotracksOKButton.Unref()
231279
audiotracksBuilder.GetObject("audiotracks").Cast(&audiotracksSelectionGroup)
280+
defer audiotracksSelectionGroup.Unref()
232281

233282
preparingBuilder := gtk.NewBuilderFromResource(resources.GResourcePreparingPath)
234-
var preparingWindow adw.Window
283+
defer preparingBuilder.Unref()
284+
var (
285+
preparingWindow adw.Window
286+
preparingProgressBar gtk.ProgressBar
287+
preparingCancelButton gtk.Button
288+
)
235289
preparingBuilder.GetObject("preparing-window").Cast(&preparingWindow)
236-
var preparingProgressBar gtk.ProgressBar
290+
defer preparingWindow.Unref()
237291
preparingBuilder.GetObject("preparing-progress-bar").Cast(&preparingProgressBar)
238-
var preparingCancelButton gtk.Button
292+
defer preparingProgressBar.Unref()
239293
preparingBuilder.GetObject("cancel-preparing-button").Cast(&preparingCancelButton)
294+
defer preparingCancelButton.Unref()
240295

241296
buttonHeaderbarTitle.SetLabel(torrentTitle)
242297
descriptionHeaderbarTitle.SetLabel(torrentTitle)

internal/components/error_dialog.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ func OpenErrorDialog(ctx context.Context, window *adw.ApplicationWindow, err err
2121
Msg("Could not continue due to a fatal error")
2222

2323
errorBuilder := gtk.NewBuilderFromResource(resources.GResourceErrorPath)
24+
defer errorBuilder.Unref()
2425
var errorDialog adw.AlertDialog
2526
errorBuilder.GetObject("error-dialog").Cast(&errorDialog)
27+
defer errorDialog.Unref()
2628

2729
errorDialog.SetBody(err.Error())
2830

internal/components/main_menu.go

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,39 +28,56 @@ func AddMainMenu(
2828
cancel func(),
2929
) (*adw.PreferencesWindow, *adw.EntryRow) {
3030
menuBuilder := gtk.NewBuilderFromResource(resources.GResourceMenuPath)
31+
defer menuBuilder.Unref()
3132
var menu gio.Menu
3233
menuBuilder.GetObject("main-menu").Cast(&menu)
34+
defer menu.Unref()
3335

3436
aboutDialog := adw.NewAboutDialogFromAppdata(resources.GResourceMetainfoPath, "0.1.7")
3537
aboutDialog.SetDevelopers([]string{"Felicitas Pojtinger"})
3638
aboutDialog.SetArtists([]string{"Brage Fuglseth"})
3739
aboutDialog.SetCopyright("© 2025 Felicitas Pojtinger")
3840

3941
preferencesBuilder := gtk.NewBuilderFromResource(resources.GResourcePreferencesPath)
40-
var preferencesDialog adw.PreferencesWindow
42+
defer preferencesBuilder.Unref()
43+
var (
44+
preferencesDialog adw.PreferencesWindow
45+
storageLocationInput gtk.Button
46+
mpvCommandInput adw.EntryRow
47+
verbosityLevelInput adw.SpinRow
48+
remoteGatewaySwitchInput gtk.Switch
49+
remoteGatewayURLInput adw.EntryRow
50+
remoteGatewayUsernameInput adw.EntryRow
51+
remoteGatewayPasswordInput adw.PasswordEntryRow
52+
weronURLInput adw.EntryRow
53+
weronICEInput adw.EntryRow
54+
weronTimeoutInput adw.SpinRow
55+
weronForceRelayInput gtk.Switch
56+
)
4157
preferencesBuilder.GetObject("preferences-dialog").Cast(&preferencesDialog)
42-
var storageLocationInput gtk.Button
58+
defer preferencesDialog.Unref()
4359
preferencesBuilder.GetObject("storage-location-input").Cast(&storageLocationInput)
44-
var mpvCommandInput adw.EntryRow
60+
defer storageLocationInput.Unref()
4561
preferencesBuilder.GetObject("mpv-command-input").Cast(&mpvCommandInput)
46-
var verbosityLevelInput adw.SpinRow
62+
defer mpvCommandInput.Unref()
4763
preferencesBuilder.GetObject("verbosity-level-input").Cast(&verbosityLevelInput)
48-
var remoteGatewaySwitchInput gtk.Switch
64+
defer verbosityLevelInput.Unref()
4965
preferencesBuilder.GetObject("htorrent-remote-gateway-switch").Cast(&remoteGatewaySwitchInput)
50-
var remoteGatewayURLInput adw.EntryRow
66+
defer remoteGatewaySwitchInput.Unref()
5167
preferencesBuilder.GetObject("htorrent-url-input").Cast(&remoteGatewayURLInput)
52-
var remoteGatewayUsernameInput adw.EntryRow
68+
defer remoteGatewayURLInput.Unref()
5369
preferencesBuilder.GetObject("htorrent-username-input").Cast(&remoteGatewayUsernameInput)
54-
var remoteGatewayPasswordInput adw.PasswordEntryRow
70+
defer remoteGatewayUsernameInput.Unref()
5571
preferencesBuilder.GetObject("htorrent-password-input").Cast(&remoteGatewayPasswordInput)
56-
var weronURLInput adw.EntryRow
72+
defer remoteGatewayPasswordInput.Unref()
5773
preferencesBuilder.GetObject("weron-url-input").Cast(&weronURLInput)
58-
var weronICEInput adw.EntryRow
74+
defer weronURLInput.Unref()
5975
preferencesBuilder.GetObject("weron-ice-input").Cast(&weronICEInput)
60-
var weronTimeoutInput adw.SpinRow
76+
defer weronICEInput.Unref()
6177
preferencesBuilder.GetObject("weron-timeout-input").Cast(&weronTimeoutInput)
62-
var weronForceRelayInput gtk.Switch
78+
defer weronTimeoutInput.Unref()
6379
preferencesBuilder.GetObject("weron-force-relay-input").Cast(&weronForceRelayInput)
80+
defer weronForceRelayInput.Unref()
6481

6582
preferencesHaveChanged := false
6683

0 commit comments

Comments
 (0)