Mercurial > octave
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 |
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 } |