annotate libgui/src/octave-qobject.cc @ 28348:d73e4749d8dd

maint: Merge stable to default.
author John W. Eaton <jwe@octave.org>
date Fri, 22 May 2020 16:22:08 -0400
parents 0c6dcf803529 00a9a49c7670
children 901a92f45ff0
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
27481
458adc344819 avoid possible crash due to execution_exception in GUI thread
John W. Eaton <jwe@octave.org>
parents: 27412
diff changeset
137 ([ee] (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),
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
163 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
164 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
165 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
166 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
167 m_main_thread (new QThread ())
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
168 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
169 std::string show_gui_msgs =
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
170 sys::env::getenv ("OCTAVE_SHOW_GUI_MESSAGES");
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
171
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
172 // Installing our handler suppresses the messages.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
173
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
174 if (show_gui_msgs.empty ())
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
175 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
176 qInstallMessageHandler (message_handler);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
177 }
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 // 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
180 #if ! defined (Q_OS_WIN32)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
181 QTextCodec::setCodecForLocale (QTextCodec::codecForName ("UTF-8"));
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
182 #endif
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
183
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
184 // Initialize global Qt application metadata.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
185
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
186 QCoreApplication::setApplicationName ("GNU Octave");
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
187 QCoreApplication::setApplicationVersion (OCTAVE_VERSION);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
188
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
189 // 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
190
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
191 qRegisterMetaType<octave_value_list> ("octave_value_list");
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
192
27616
1c13a0f36160 Temporarily disable code in cset d0fe6e344c41 (bug #55940)
Rik <rik@octave.org>
parents: 27604
diff changeset
193 // 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
194 #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
195 // 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
196 // 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
197 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
198 #endif
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
199
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
200 // 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
201 m_qapplication->setLayoutDirection (Qt::LeftToRight);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
202
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
203 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
204 this, SLOT (handle_interpreter_execution_finished (int)));
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
205
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
206 connect (this, SIGNAL (request_interpreter_shutdown (int)),
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
207 m_interpreter_qobj, SLOT (shutdown (int)));
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
208
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
209 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
210 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
211
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
212 connect (m_main_thread, SIGNAL (finished (void)),
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
213 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
214
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
215 // 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
216 // object here.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
217
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
218 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
219 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
220
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
221 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
222 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
223
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
224 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
225 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
226 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
227 }
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 base_qobject::~base_qobject (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
230 {
27219
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
231 // 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
232 // 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
233 // finished signal.
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
234
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
235 delete m_interpreter_qobj;
27219
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
236 delete m_qsci_tr;
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
237 delete m_gui_tr;
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
238 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
239 delete m_qapplication;
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
240
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
241 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
242 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
243
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
244 void base_qobject::config_translators (void)
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 if (m_translators_installed)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
247 return;
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
248
27620
45bb5bbaf291 don't use singleton pattern for resource manager in GUI
John W. Eaton <jwe@octave.org>
parents: 27619
diff changeset
249 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
250
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
251 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
252 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
253 m_qapplication->installTranslator (m_qsci_tr);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
254
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
255 m_translators_installed = true;
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
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
258 void base_qobject::start_main_thread (void)
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 // 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
261 // 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
262 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
263
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
264 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
265
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
266 m_main_thread->start ();
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
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
269 int base_qobject::exec (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
270 {
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
271 return m_qapplication->exec ();
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
272 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
273
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
274 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
275 {
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
276 return true;
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
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
279 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
280 {
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
281 emit request_interpreter_shutdown (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
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
284 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
285 {
27485
1bbeb8aeb1cd Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents: 27481
diff changeset
286 #if defined (Q_OS_MAC)
1bbeb8aeb1cd Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents: 27481
diff changeset
287 // 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
288 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
289 #endif
1a4defb4dfc2 call quit on main thread in handle_octave_finished (bug #50025, #56952)
John W. Eaton <jwe@octave.org>
parents: 27485
diff changeset
290
27485
1bbeb8aeb1cd Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents: 27481
diff changeset
291 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
292
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
293 qApp->exit (exit_status);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
294 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
295
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
296 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
297 {
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
298 // 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
299 // 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
300 // 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
301
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
302 // 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
303 // interpreter_qobject slots.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
304
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
305 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
306 }
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
307
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
308 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
309 {
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
310 // 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
311 // 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
312 // 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
313
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
314 // 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
315 // interpreter_qobject slots.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
316
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
317 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
318 }
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
319
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
320 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
321 bool remove_file)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
322 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
323 QClipboard *clipboard = QApplication::clipboard ();
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 QImage img (file);
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 if (img.isNull ())
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 // Report error?
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
330 return;
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
331 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
332
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
333 clipboard->setImage (img);
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 if (remove_file)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
336 QFile::remove (file);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
337 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
338
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
339 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
340 : base_qobject (app_context)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
341 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
342 // 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
343 m_resource_manager.reload_settings ();
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
344
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
345 // After settings.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
346 config_translators ();
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
347
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
348 m_qapplication->setQuitOnLastWindowClosed (false);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
349
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
350 start_main_thread ();
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
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
353 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
354 : 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
355 {
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28063
diff changeset
356 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
357 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
358
27669
271b5cd640d7 Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 27649
diff changeset
359 connect (qt_link (),
271b5cd640d7 Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 27649
diff changeset
360 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
361 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
362
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
363 m_app_context.gui_running (true);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
364
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
365 start_main_thread ();
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
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
368 gui_qobject::~gui_qobject (void)
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 delete m_main_window;
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
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
373 bool gui_qobject::confirm_shutdown (void)
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
374 {
27604
9bc81bf5d8a6 * octave-qobject.cc: Add comment.
John W. Eaton <jwe@octave.org>
parents: 27588
diff changeset
375 // 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
376 // 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
377 // 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
378
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
379 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
380 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
381 }