annotate libgui/src/octave-qobject.cc @ 28851:1ac5a76ae91d

use [=] capture default specification where possible Files affected: Canvas.cc, GLCanvas.cc, file-editor-tab.cc, file-editor.cc, octave-qscintilla.cc, main-window.cc, octave-qobject.cc, set-path-model.cc, variable-editor-model.cc, workspace-view.cc, call-stack.cc, graphics.cc, input.cc, interpreter.cc, load-path.cc, pr-output.cc, strfns.cc, sysdep.cc, audiodevinfo.cc, audioread.cc, convhulln.cc, oct-parse.yy, pt-eval.cc, lo-sysdep.cc, oct-glob.cc, oct-string.cc, and url-transfer.cc.
author John W. Eaton <jwe@octave.org>
date Fri, 02 Oct 2020 13:25:00 -0400
parents 6aba3944b608
children 02ee34a30351
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
3 // Copyright (C) 2011-2020 The Octave Project Developers
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ////////////////////////////////////////////////////////////////////////
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26 #if defined (HAVE_CONFIG_H)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27 # include "config.h"
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28 #endif
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
29
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
30 #include <utility>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
31
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 #include <QApplication>
27648
2952471e29a7 eliminate global access to resource_manager in qterminal widget
John W. Eaton <jwe@octave.org>
parents: 27630
diff changeset
33 #include <QClipboard>
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34 #include <QFile>
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 #include <QTextCodec>
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 #include <QThread>
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
37 #include <QTimer>
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38 #include <QTranslator>
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
40 #include "interpreter-qobject.h"
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
41 #include "main-window.h"
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
42 #include "octave-qobject.h"
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
43 #include "qt-application.h"
27263
99aa1bcb8848 rename octave_link and octave_link_events classes, move inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 27261
diff changeset
44 #include "qt-interpreter-events.h"
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
45 #include "resource-manager.h"
27630
262cdd0f7619 don't use singleton pattern for shortcut manager in GUI
John W. Eaton <jwe@octave.org>
parents: 27624
diff changeset
46 #include "shortcut-manager.h"
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
47
27616
1c13a0f36160 Temporarily disable code in cset d0fe6e344c41 (bug #55940)
Rik <rik@octave.org>
parents: 27604
diff changeset
48 // Bug #55940 (Disable App Nap on Mac)
27575
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
49 #if defined (Q_OS_MAC)
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
50 # include <objc/runtime.h>
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
51 # include <objc/message.h>
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
52 #endif
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
53
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
54 #include "oct-env.h"
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
55 #include "version.h"
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
56
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
57 #include "ovl.h"
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
58
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
59
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
60 // Bug #55940 (Disable App Nap on Mac)
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
61 #if defined (Q_OS_MAC)
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
62 static void disable_app_nap (void)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
63 {
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
64 Class process_info_class;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
65 SEL process_info_selector;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
66 SEL begin_activity_with_options_selector;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
67 id process_info;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
68 id reason_string;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
69 id osx_latencycritical_activity;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
70
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
71 // Option codes found at https://stackoverflow.com/questions/22784886/what-can-make-nanosleep-drift-with-exactly-10-sec-on-mac-os-x-10-9/32729281#32729281
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
72 unsigned long long NSActivityUserInitiatedAllowingIdleSystemSleep = 0x00FFFFFFULL;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
73 unsigned long long NSActivityLatencyCritical = 0xFF00000000ULL;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
74
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
75 // Avoid errors on older versions of OS X
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
76 process_info_class = static_cast<Class> (objc_getClass ("NSProcessInfo"));
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
77 if (process_info_class == nil)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
78 return;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
79
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
80 process_info_selector = sel_getUid ("processInfo");
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
81 if (class_getClassMethod (process_info_class, process_info_selector)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
82 == nullptr)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
83 return;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
84
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
85 begin_activity_with_options_selector = sel_getUid ("beginActivityWithOptions:reason:");
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
86 if (class_getInstanceMethod (process_info_class,
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27923
diff changeset
87 begin_activity_with_options_selector)
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
88 == nullptr)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
89 return;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
90
28063
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
91 process_info = reinterpret_cast<id (*) (id, SEL)> (objc_msgSend)
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
92 (reinterpret_cast<id> (process_info_class),
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
93 process_info_selector);
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
94 if (process_info == nil)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
95 return;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
96
28063
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
97 reason_string = reinterpret_cast<id (*) (id, SEL)> (objc_msgSend)
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
98 (reinterpret_cast<id> (objc_getClass ("NSString")),
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
99 sel_getUid ("alloc"));
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
100 reason_string = reinterpret_cast<id (*) (id, SEL, const char *)> (objc_msgSend)
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
101 (reason_string, sel_getUid ("initWithUTF8String:"),
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
102 "App Nap causes pause() malfunction");
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
103
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
104 // Start an Activity that suppresses App Nap. This Activity will run for
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
105 // the entire duration of the Octave process. This is intentional,
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
106 // not a leak.
28063
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
107 osx_latencycritical_activity =
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
108 reinterpret_cast<id (*) (id, SEL, unsigned long long, id)> (objc_msgSend)
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
109 (process_info,
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
110 begin_activity_with_options_selector,
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
111 NSActivityUserInitiatedAllowingIdleSystemSleep
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
112 | NSActivityLatencyCritical,
60e4a9909fac Fix App Nap for new prototype of "objc_msgSend" in OS X Mojave (bug #57754).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27935
diff changeset
113 reason_string);
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
114 }
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
115 #endif
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
116
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
117 namespace octave
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
118 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
119 // Disable all Qt messages by default.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
120
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
121 static void
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
122 message_handler (QtMsgType, const QMessageLogContext &, const QString &)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
123 { }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
124
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
125 //! Reimplement QApplication::notify. Octave's own exceptions are
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
126 //! caught and rethrown in the interpreter thread.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
127
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
128 bool octave_qapplication::notify (QObject *receiver, QEvent *ev)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
129 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
130 try
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
131 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
132 return QApplication::notify (receiver, ev);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
133 }
27481
458adc344819 avoid possible crash due to execution_exception in GUI thread
John W. Eaton <jwe@octave.org>
parents: 27412
diff changeset
134 catch (execution_exception& ee)
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
135 {
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
136 emit interpreter_event
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28799
diff changeset
137 ([=] (void)
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
138 {
27393
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27302
diff changeset
139 // INTERPRETER THREAD
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27302
diff changeset
140
27481
458adc344819 avoid possible crash due to execution_exception in GUI thread
John W. Eaton <jwe@octave.org>
parents: 27412
diff changeset
141 throw ee;
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
142 });
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
143 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
144
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27923
diff changeset
145 return false;
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
146 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
147
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
148 // We will create a QApplication object, even if START_GUI is false,
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
149 // so that we can use Qt widgets for plot windows when running in
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
150 // command-line mode. Note that we are creating an
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
151 // octave_qapplication object but handling it as a QApplication object
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
152 // because the octave_qapplication should behave identically to a
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
153 // QApplication object except that it overrides the notify method so
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
154 // we can handle forward Octave interpreter exceptions from the GUI
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
155 // thread to the interpreter thread.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
156
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
157 base_qobject::base_qobject (qt_application& app_context)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
158 : QObject (), m_app_context (app_context),
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
159 m_argc (m_app_context.sys_argc ()),
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
160 m_argv (m_app_context.sys_argv ()),
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
161 m_qapplication (new octave_qapplication (m_argc, m_argv)),
27630
262cdd0f7619 don't use singleton pattern for shortcut manager in GUI
John W. Eaton <jwe@octave.org>
parents: 27624
diff changeset
162 m_resource_manager (), m_shortcut_manager (*this),
28795
901a92f45ff0 provide access to worksapce model via base_object
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28348
diff changeset
163 m_workspace_model (new workspace_model (*this)),
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
164 m_qt_tr (new QTranslator ()), m_gui_tr (new QTranslator ()),
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
165 m_qsci_tr (new QTranslator ()), m_translators_installed (false),
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
166 m_qt_interpreter_events (new qt_interpreter_events (*this)),
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
167 m_interpreter_qobj (new interpreter_qobject (*this)),
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
168 m_main_thread (new QThread ())
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
169 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
170 std::string show_gui_msgs =
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
171 sys::env::getenv ("OCTAVE_SHOW_GUI_MESSAGES");
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
172
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
173 // Installing our handler suppresses the messages.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
174
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
175 if (show_gui_msgs.empty ())
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
176 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
177 qInstallMessageHandler (message_handler);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
178 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
179
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
180 // Set the codec for all strings (before wizard or any GUI object)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
181 #if ! defined (Q_OS_WIN32)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
182 QTextCodec::setCodecForLocale (QTextCodec::codecForName ("UTF-8"));
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
183 #endif
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
184
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
185 // Initialize global Qt application metadata.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
186
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
187 QCoreApplication::setApplicationName ("GNU Octave");
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
188 QCoreApplication::setApplicationVersion (OCTAVE_VERSION);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
189
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
190 // Register octave_value_list for connecting thread crossing signals.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
191
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
192 qRegisterMetaType<octave_value_list> ("octave_value_list");
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
193
27616
1c13a0f36160 Temporarily disable code in cset d0fe6e344c41 (bug #55940)
Rik <rik@octave.org>
parents: 27604
diff changeset
194 // Bug #55940 (Disable App Nap on Mac)
27575
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
195 #if defined (Q_OS_MAC)
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
196 // Mac App Nap feature causes pause() and sleep() to misbehave.
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
197 // Disable it for the entire program run.
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
198 disable_app_nap ();
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
199 #endif
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
200
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
201 // Force left-to-right alignment (see bug #46204)
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
202 m_qapplication->setLayoutDirection (Qt::LeftToRight);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
203
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
204 connect (m_interpreter_qobj, SIGNAL (execution_finished (int)),
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
205 this, SLOT (handle_interpreter_execution_finished (int)));
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
206
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
207 connect (this, SIGNAL (request_interpreter_shutdown (int)),
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
208 m_interpreter_qobj, SLOT (shutdown (int)));
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
209
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
210 connect (m_interpreter_qobj, SIGNAL (shutdown_finished (int)),
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
211 this, SLOT (handle_interpreter_shutdown_finished (int)));
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
212
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
213 connect (m_main_thread, SIGNAL (finished (void)),
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
214 m_main_thread, SLOT (deleteLater (void)));
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
215
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
216 // Handle any interpreter_event signal from the octave_qapplication
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
217 // object here.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
218
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
219 connect (m_qapplication, SIGNAL (interpreter_event (const fcn_callback&)),
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
220 this, SLOT (interpreter_event (const fcn_callback&)));
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
221
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
222 connect (m_qapplication, SIGNAL (interpreter_event (const meth_callback&)),
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
223 this, SLOT (interpreter_event (const meth_callback&)));
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
224
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
225 connect (qt_link (),
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
226 SIGNAL (copy_image_to_clipboard_signal (const QString&, bool)),
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
227 this, SLOT (copy_image_to_clipboard (const QString&, bool)));
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
228 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
229
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
230 base_qobject::~base_qobject (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
231 {
27219
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
232 // Note that we don't delete m_main_thread here. That is handled by
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
233 // deleteLater slot that is called when the m_main_thread issues a
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
234 // finished signal.
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
235
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
236 delete m_interpreter_qobj;
27219
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
237 delete m_qsci_tr;
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
238 delete m_gui_tr;
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
239 delete m_qt_tr;
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
240 delete m_qapplication;
28799
6aba3944b608 fix deleting pointer when octave exists
Torsten Lilge <ttl-octave@mailbox.org>
parents: 28795
diff changeset
241 delete m_workspace_model;
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
242
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
243 string_vector::delete_c_str_vec (m_argv);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
244 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
245
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
246 void base_qobject::config_translators (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
247 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
248 if (m_translators_installed)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
249 return;
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
250
27620
45bb5bbaf291 don't use singleton pattern for resource manager in GUI
John W. Eaton <jwe@octave.org>
parents: 27619
diff changeset
251 m_resource_manager.config_translators (m_qt_tr, m_qsci_tr, m_gui_tr);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
252
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
253 m_qapplication->installTranslator (m_qt_tr);
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
254 m_qapplication->installTranslator (m_gui_tr);
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
255 m_qapplication->installTranslator (m_qsci_tr);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
256
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
257 m_translators_installed = true;
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
258 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
259
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
260 void base_qobject::start_main_thread (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
261 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
262 // Defer initializing and executing the interpreter until after the main
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
263 // window and QApplication are running to prevent race conditions
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
264 QTimer::singleShot (0, m_interpreter_qobj, SLOT (execute (void)));
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
265
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
266 m_interpreter_qobj->moveToThread (m_main_thread);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
267
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
268 m_main_thread->start ();
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
269 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
270
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
271 int base_qobject::exec (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
272 {
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
273 return m_qapplication->exec ();
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
274 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
275
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
276 bool base_qobject::confirm_shutdown (void)
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
277 {
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
278 return true;
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
279 }
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
280
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
281 void base_qobject::handle_interpreter_execution_finished (int exit_status)
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
282 {
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
283 emit request_interpreter_shutdown (exit_status);
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
284 }
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
285
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
286 void base_qobject::handle_interpreter_shutdown_finished (int exit_status)
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
287 {
27485
1bbeb8aeb1cd Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents: 27481
diff changeset
288 #if defined (Q_OS_MAC)
1bbeb8aeb1cd Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents: 27481
diff changeset
289 // fprintf to stderr is needed by macOS, for poorly-understood reasons.
1bbeb8aeb1cd Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents: 27481
diff changeset
290 fprintf (stderr, "\n");
27498
1a4defb4dfc2 call quit on main thread in handle_octave_finished (bug #50025, #56952)
John W. Eaton <jwe@octave.org>
parents: 27485
diff changeset
291 #endif
1a4defb4dfc2 call quit on main thread in handle_octave_finished (bug #50025, #56952)
John W. Eaton <jwe@octave.org>
parents: 27485
diff changeset
292
27485
1bbeb8aeb1cd Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents: 27481
diff changeset
293 m_main_thread->quit ();
27498
1a4defb4dfc2 call quit on main thread in handle_octave_finished (bug #50025, #56952)
John W. Eaton <jwe@octave.org>
parents: 27485
diff changeset
294
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
295 qApp->exit (exit_status);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
296 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
297
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
298 void base_qobject::interpreter_event (const fcn_callback& fcn)
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
299 {
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
300 // The following is a direct function call across threads. It works
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
301 // because the it is accessing a thread-safe queue of events that
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
302 // are later executed by the Octave interpreter in the other thread.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
303
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
304 // See also the comments in interpreter-qobject.h about
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
305 // interpreter_qobject slots.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
306
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
307 m_interpreter_qobj->interpreter_event (fcn);
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
308 }
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
309
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
310 void base_qobject::interpreter_event (const meth_callback& meth)
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
311 {
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
312 // The following is a direct function call across threads. It works
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
313 // because the it is accessing a thread-safe queue of events that
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
314 // are later executed by the Octave interpreter in the other thread.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
315
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
316 // See also the comments in interpreter-qobject.h about
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
317 // interpreter_qobject slots.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
318
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
319 m_interpreter_qobj->interpreter_event (meth);
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
320 }
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
321
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
322 void base_qobject::copy_image_to_clipboard (const QString& file,
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
323 bool remove_file)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
324 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
325 QClipboard *clipboard = QApplication::clipboard ();
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
326
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
327 QImage img (file);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
328
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
329 if (img.isNull ())
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
330 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
331 // Report error?
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
332 return;
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
333 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
334
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
335 clipboard->setImage (img);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
336
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
337 if (remove_file)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
338 QFile::remove (file);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
339 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
340
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
341 cli_qobject::cli_qobject (qt_application& app_context)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
342 : base_qobject (app_context)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
343 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
344 // Get settings file.
27620
45bb5bbaf291 don't use singleton pattern for resource manager in GUI
John W. Eaton <jwe@octave.org>
parents: 27619
diff changeset
345 m_resource_manager.reload_settings ();
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
346
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
347 // After settings.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
348 config_translators ();
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
349
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
350 m_qapplication->setQuitOnLastWindowClosed (false);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
351
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
352 start_main_thread ();
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
353 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
354
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
355 gui_qobject::gui_qobject (qt_application& app_context)
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
356 : base_qobject (app_context), m_main_window (new main_window (*this))
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
357 {
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
358 connect (m_interpreter_qobj, SIGNAL (ready (void)),
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
359 m_main_window, SLOT (handle_octave_ready (void)));
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
360
27669
271b5cd640d7 Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 27649
diff changeset
361 connect (qt_link (),
271b5cd640d7 Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 27649
diff changeset
362 SIGNAL (focus_window_signal (const QString&)),
271b5cd640d7 Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 27649
diff changeset
363 m_main_window, SLOT (focus_window (const QString&)));
271b5cd640d7 Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 27649
diff changeset
364
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
365 m_app_context.gui_running (true);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
366
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
367 start_main_thread ();
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
368 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
369
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
370 gui_qobject::~gui_qobject (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
371 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
372 delete m_main_window;
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
373 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
374
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
375 bool gui_qobject::confirm_shutdown (void)
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
376 {
27604
9bc81bf5d8a6 * octave-qobject.cc: Add comment.
John W. Eaton <jwe@octave.org>
parents: 27588
diff changeset
377 // Currently, we forward to main_window::confirm_shutdown instead of
9bc81bf5d8a6 * octave-qobject.cc: Add comment.
John W. Eaton <jwe@octave.org>
parents: 27588
diff changeset
378 // just displaying a dialog box here because the main_window also
9bc81bf5d8a6 * octave-qobject.cc: Add comment.
John W. Eaton <jwe@octave.org>
parents: 27588
diff changeset
379 // knows about and is responsible for notifying the editor.
9bc81bf5d8a6 * octave-qobject.cc: Add comment.
John W. Eaton <jwe@octave.org>
parents: 27588
diff changeset
380
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
381 return m_main_window ? m_main_window->confirm_shutdown () : true;
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
382 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
383 }