@@ -331,6 +331,10 @@ base_qobject::~base_qobject ()
331
331
// deleteLater slot that is called when the m_main_thread issues a
332
332
// finished signal.
333
333
334
+ // Prevent Qt from delivering signals to widgets during destruction
335
+ if (m_qapplication)
336
+ disconnect (m_qapplication, &QApplication::focusChanged, nullptr , nullptr );
337
+
334
338
// FIXME: Why are dock widget settings and/or the main window
335
339
// configuration not saved correctly if the main window is deleted
336
340
// after the dock widgets?
@@ -341,31 +345,58 @@ base_qobject::~base_qobject ()
341
345
if (! m_main_window)
342
346
{
343
347
if (m_terminal_widget)
344
- m_terminal_widget->close ();
348
+ {
349
+ disconnect (m_terminal_widget, nullptr , nullptr , nullptr );
350
+ m_terminal_widget->close ();
351
+ }
345
352
346
353
if (m_documentation_widget)
347
- m_documentation_widget->close ();
354
+ {
355
+ disconnect (m_documentation_widget, nullptr , nullptr , nullptr );
356
+ m_documentation_widget->close ();
357
+ }
348
358
349
359
if (m_file_browser_widget)
350
- m_file_browser_widget->close ();
360
+ {
361
+ disconnect (m_file_browser_widget, nullptr , nullptr , nullptr );
362
+ m_file_browser_widget->close ();
363
+ }
351
364
352
365
if (m_history_widget)
353
- m_history_widget->close ();
366
+ {
367
+ disconnect (m_history_widget, nullptr , nullptr , nullptr );
368
+ m_history_widget->close ();
369
+ }
354
370
355
371
if (m_workspace_widget)
356
- m_workspace_widget->close ();
372
+ {
373
+ disconnect (m_workspace_widget, nullptr , nullptr , nullptr );
374
+ m_workspace_widget->close ();
375
+ }
357
376
358
377
if (m_editor_widget)
359
- m_editor_widget->close ();
378
+ {
379
+ disconnect (m_editor_widget, nullptr , nullptr , nullptr );
380
+ m_editor_widget->close ();
381
+ }
360
382
361
383
if (m_variable_editor_widget)
362
- m_variable_editor_widget->close ();
384
+ {
385
+ disconnect (m_variable_editor_widget, nullptr , nullptr , nullptr );
386
+ m_variable_editor_widget->close ();
387
+ }
363
388
364
389
if (m_community_news)
365
- m_community_news->close ();
390
+ {
391
+ disconnect (m_community_news, nullptr , nullptr , nullptr );
392
+ m_community_news->close ();
393
+ }
366
394
}
367
395
else
368
396
{
397
+ if (m_main_window)
398
+ disconnect (m_main_window, nullptr , nullptr , nullptr );
399
+
369
400
m_main_window->deleteLater ();
370
401
}
371
402
@@ -378,6 +409,10 @@ base_qobject::~base_qobject ()
378
409
delete m_variable_editor_widget;
379
410
delete m_community_news;
380
411
412
+ // Disconnect interpreter signals before deletion
413
+ if (m_interpreter_qobj)
414
+ disconnect (m_interpreter_qobj, nullptr , nullptr , nullptr );
415
+
381
416
delete m_interpreter_qobj;
382
417
delete m_qsci_tr;
383
418
delete m_gui_tr;
0 commit comments