Mercurial > octave
annotate libgui/src/octave-qobject.cc @ 27669:271b5cd640d7
Add functions to show GUI windows (bug #57213)
* event-manager.h (interpreter_events::focus_window): New empty method.
(event_manager::focus_window): New vistual method that executes the instance's
focus_window method.
* event_manager.cc (commandwindow, commandhistory, filebrowser, workspace): New
builtin interpreter functions.
* qt-interpreter-events.[h, cc] (qt_interpreter_events::focus_window_signal):
New signal.
(qt_interpreter_events::focus_window): Implements event_manager::focus_window,
emits focus_window_signal.
* main-window.[h, cc] (main_window::focus_window): New slot that activates the
named window.
* octave-qobject.cc (gui_qobject::gui_qobject): Connect
qt_interpreter_events::focus_window_signal to main_window::focus_window.
* __unimplemented__.m: Remove commandwindow, commandhistory, filebrowser, and
workspace from the list.
* gui.txi: Add commandwindow, commandhistory, filebrowser, workspace docstrings.
author | Pantxo Diribarne <pantxo.diribarne@gmail.com> |
---|---|
date | Tue, 12 Nov 2019 14:54:25 +0100 |
parents | 91d43a00620d |
children | b442ec6dda5c |
rev | line source |
---|---|
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1 /* |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3 Copyright (C) 2013-2019 John W. Eaton |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4 Copyright (C) 2011-2019 Jacob Dawid |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
5 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
6 This file is part of Octave. |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
7 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
8 Octave is free software: you can redistribute it and/or modify it |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
9 under the terms of the GNU General Public License as published by |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
10 the Free Software Foundation, either version 3 of the License, or |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
11 (at your option) any later version. |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
12 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
13 Octave is distributed in the hope that it will be useful, but |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
14 WITHOUT ANY WARRANTY; without even the implied warranty of |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
16 GNU General Public License for more details. |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
17 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
18 You should have received a copy of the GNU General Public License |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
19 along with Octave; see the file COPYING. If not, see |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
20 <https://www.gnu.org/licenses/>. |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
21 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
22 */ |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
23 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
24 #if defined (HAVE_CONFIG_H) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
25 # include "config.h" |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
26 #endif |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
27 |
27412
da1f59fe04b3
try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents:
27393
diff
changeset
|
28 #include <utility> |
da1f59fe04b3
try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents:
27393
diff
changeset
|
29 |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
30 #include <QApplication> |
27648
2952471e29a7
eliminate global access to resource_manager in qterminal widget
John W. Eaton <jwe@octave.org>
parents:
27630
diff
changeset
|
31 #include <QClipboard> |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
32 #include <QFile> |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
33 #include <QTextCodec> |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
34 #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
|
35 #include <QTimer> |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
36 #include <QTranslator> |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
37 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
38 #include "interpreter-qobject.h" |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
39 #include "main-window.h" |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
40 #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
|
41 #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
|
42 #include "qt-interpreter-events.h" |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
43 #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
|
44 #include "shortcut-manager.h" |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
45 |
27616
1c13a0f36160
Temporarily disable code in cset d0fe6e344c41 (bug #55940)
Rik <rik@octave.org>
parents:
27604
diff
changeset
|
46 // 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
|
47 #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
|
48 # 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
|
49 # 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
|
50 #endif |
d0fe6e344c41
Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents:
27551
diff
changeset
|
51 |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
52 #include "oct-env.h" |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
53 #include "version.h" |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
54 |
27412
da1f59fe04b3
try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents:
27393
diff
changeset
|
55 #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
|
56 |
27621
39fac14ab25a
Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents:
27620
diff
changeset
|
57 |
39fac14ab25a
Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents:
27620
diff
changeset
|
58 // 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
|
59 #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
|
60 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
|
61 { |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
62 Class process_info_class; |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
63 SEL process_info_selector; |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
64 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
|
65 id process_info; |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
66 id reason_string; |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
67 id osx_latencycritical_activity; |
27621
39fac14ab25a
Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents:
27620
diff
changeset
|
68 |
27624
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
69 // 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
|
70 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
|
71 unsigned long long NSActivityLatencyCritical = 0xFF00000000ULL; |
27621
39fac14ab25a
Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents:
27620
diff
changeset
|
72 |
27624
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
73 // 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
|
74 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
|
75 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
|
76 return; |
27621
39fac14ab25a
Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents:
27620
diff
changeset
|
77 |
27624
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
78 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
|
79 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
|
80 == nullptr) |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
81 return; |
27621
39fac14ab25a
Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents:
27620
diff
changeset
|
82 |
27624
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
83 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
|
84 if (class_getInstanceMethod (process_info_class, |
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) |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
86 == nullptr) |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
87 return; |
27621
39fac14ab25a
Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents:
27620
diff
changeset
|
88 |
27624
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
89 process_info = objc_msgSend (reinterpret_cast<id> (process_info_class), |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
90 process_info_selector); |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
91 if (process_info == nil) |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
92 return; |
27621
39fac14ab25a
Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents:
27620
diff
changeset
|
93 |
27624
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
94 reason_string = objc_msgSend (reinterpret_cast<id> (objc_getClass ("NSString")), |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
95 sel_getUid ("alloc")); |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
96 reason_string = objc_msgSend (reason_string, |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
97 sel_getUid ("initWithUTF8String:"), |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
98 "App Nap causes pause() malfunction"); |
27621
39fac14ab25a
Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents:
27620
diff
changeset
|
99 |
27624
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
100 // 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
|
101 // 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
|
102 // not a leak. |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
103 osx_latencycritical_activity = objc_msgSend (process_info, |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
104 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
|
105 NSActivityUserInitiatedAllowingIdleSystemSleep |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
106 | NSActivityLatencyCritical, |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
107 reason_string); |
d6b561842eeb
maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents:
27621
diff
changeset
|
108 } |
27621
39fac14ab25a
Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents:
27620
diff
changeset
|
109 #endif |
39fac14ab25a
Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents:
27620
diff
changeset
|
110 |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
111 namespace octave |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
112 { |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
113 // Disable all Qt messages by default. |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
114 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
115 static void |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
116 #if defined (QTMESSAGEHANDLER_ACCEPTS_QMESSAGELOGCONTEXT) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
117 message_handler (QtMsgType, const QMessageLogContext &, const QString &) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
118 #else |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
119 message_handler (QtMsgType, const char *) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
120 #endif |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
121 { } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
122 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
123 //! 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
|
124 //! caught and rethrown in the interpreter thread. |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
125 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
126 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
|
127 { |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
128 try |
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 return QApplication::notify (receiver, ev); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
131 } |
27481
458adc344819
avoid possible crash due to execution_exception in GUI thread
John W. Eaton <jwe@octave.org>
parents:
27412
diff
changeset
|
132 catch (execution_exception& ee) |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
133 { |
27302
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
134 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
|
135 ([ee] (void) |
27302
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
136 { |
27393
efe72866b483
mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents:
27302
diff
changeset
|
137 // INTERPRETER THREAD |
efe72866b483
mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents:
27302
diff
changeset
|
138 |
27481
458adc344819
avoid possible crash due to execution_exception in GUI thread
John W. Eaton <jwe@octave.org>
parents:
27412
diff
changeset
|
139 throw ee; |
27302
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
140 }); |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
141 } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
142 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
143 return false; |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
144 } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
145 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
146 // 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
|
147 // 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
|
148 // 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
|
149 // 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
|
150 // 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
|
151 // 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
|
152 // 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
|
153 // thread to the interpreter thread. |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
154 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
155 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
|
156 : QObject (), m_app_context (app_context), |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
157 m_argc (m_app_context.sys_argc ()), |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
158 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
|
159 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
|
160 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
|
161 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
|
162 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
|
163 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
|
164 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
|
165 m_main_thread (new QThread ()) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
166 { |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
167 std::string show_gui_msgs = |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
168 sys::env::getenv ("OCTAVE_SHOW_GUI_MESSAGES"); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
169 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
170 // Installing our handler suppresses the 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 if (show_gui_msgs.empty ()) |
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 defined (HAVE_QINSTALLMESSAGEHANDLER) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
175 qInstallMessageHandler (message_handler); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
176 #else |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
177 qInstallMsgHandler (message_handler); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
178 #endif |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
179 } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
180 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
181 // 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
|
182 #if ! defined (Q_OS_WIN32) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
183 QTextCodec::setCodecForLocale (QTextCodec::codecForName ("UTF-8")); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
184 #endif |
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 #if defined (HAVE_QT4) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
187 QTextCodec::setCodecForCStrings (QTextCodec::codecForName ("UTF-8")); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
188 #endif |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
189 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
190 // Initialize global Qt application metadata. |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
191 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
192 QCoreApplication::setApplicationName ("GNU Octave"); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
193 QCoreApplication::setApplicationVersion (OCTAVE_VERSION); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
194 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
195 // 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
|
196 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
197 qRegisterMetaType<octave_value_list> ("octave_value_list"); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
198 |
27616
1c13a0f36160
Temporarily disable code in cset d0fe6e344c41 (bug #55940)
Rik <rik@octave.org>
parents:
27604
diff
changeset
|
199 |
1c13a0f36160
Temporarily disable code in cset d0fe6e344c41 (bug #55940)
Rik <rik@octave.org>
parents:
27604
diff
changeset
|
200 // 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
|
201 #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
|
202 // 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
|
203 // 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
|
204 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
|
205 #endif |
d0fe6e344c41
Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents:
27551
diff
changeset
|
206 |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
207 // 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
|
208 m_qapplication->setLayoutDirection (Qt::LeftToRight); |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
209 |
27218
a044202208af
more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents:
27197
diff
changeset
|
210 connect (m_interpreter_qobj, SIGNAL (octave_finished_signal (int)), |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
211 this, SLOT (handle_octave_finished (int))); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
212 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
213 connect (m_main_thread, SIGNAL (finished (void)), |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
214 m_main_thread, SLOT (deleteLater (void))); |
27302
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
215 |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
216 // Handle any interpreter_event signal from the octave_qapplication |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
217 // object here. |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
218 |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
219 connect (m_qapplication, SIGNAL (interpreter_event (const fcn_callback&)), |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
220 this, SLOT (interpreter_event (const fcn_callback&))); |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
221 |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
222 connect (m_qapplication, SIGNAL (interpreter_event (const meth_callback&)), |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
223 this, SLOT (interpreter_event (const meth_callback&))); |
27588
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27582
diff
changeset
|
224 |
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27582
diff
changeset
|
225 connect (qt_link (), |
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27582
diff
changeset
|
226 SIGNAL (copy_image_to_clipboard_signal (const QString&, bool)), |
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27582
diff
changeset
|
227 this, SLOT (copy_image_to_clipboard (const QString&, bool))); |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
228 } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
229 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
230 base_qobject::~base_qobject (void) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
231 { |
27219
b88d66c631c8
delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents:
27218
diff
changeset
|
232 // Note that we don't delete m_main_thread here. That is handled by |
b88d66c631c8
delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents:
27218
diff
changeset
|
233 // deleteLater slot that is called when the m_main_thread issues a |
b88d66c631c8
delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents:
27218
diff
changeset
|
234 // finished signal. |
b88d66c631c8
delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents:
27218
diff
changeset
|
235 |
27218
a044202208af
more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents:
27197
diff
changeset
|
236 delete m_interpreter_qobj; |
27219
b88d66c631c8
delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents:
27218
diff
changeset
|
237 delete m_qsci_tr; |
b88d66c631c8
delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents:
27218
diff
changeset
|
238 delete m_gui_tr; |
b88d66c631c8
delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents:
27218
diff
changeset
|
239 delete m_qt_tr; |
27218
a044202208af
more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents:
27197
diff
changeset
|
240 delete m_qapplication; |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
241 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
242 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
|
243 } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
244 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
245 void base_qobject::config_translators (void) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
246 { |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
247 if (m_translators_installed) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
248 return; |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
249 |
27620
45bb5bbaf291
don't use singleton pattern for resource manager in GUI
John W. Eaton <jwe@octave.org>
parents:
27619
diff
changeset
|
250 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
|
251 |
27218
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_qt_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_gui_tr); |
a044202208af
more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents:
27197
diff
changeset
|
254 m_qapplication->installTranslator (m_qsci_tr); |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
255 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
256 m_translators_installed = true; |
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 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
259 void base_qobject::start_main_thread (void) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
260 { |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
261 // 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
|
262 // 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
|
263 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
|
264 |
27218
a044202208af
more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents:
27197
diff
changeset
|
265 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
|
266 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
267 m_main_thread->start (); |
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 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
270 int base_qobject::exec (void) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
271 { |
27218
a044202208af
more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents:
27197
diff
changeset
|
272 return m_qapplication->exec (); |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
273 } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
274 |
27588
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27582
diff
changeset
|
275 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
|
276 { |
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27582
diff
changeset
|
277 return true; |
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27582
diff
changeset
|
278 } |
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27582
diff
changeset
|
279 |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
280 void base_qobject::handle_octave_finished (int exit_status) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
281 { |
27485
1bbeb8aeb1cd
Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents:
27481
diff
changeset
|
282 #if defined (Q_OS_MAC) |
1bbeb8aeb1cd
Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents:
27481
diff
changeset
|
283 // 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
|
284 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
|
285 #endif |
1a4defb4dfc2
call quit on main thread in handle_octave_finished (bug #50025, #56952)
John W. Eaton <jwe@octave.org>
parents:
27485
diff
changeset
|
286 |
27485
1bbeb8aeb1cd
Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents:
27481
diff
changeset
|
287 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
|
288 |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
289 qApp->exit (exit_status); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
290 } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
291 |
27302
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
292 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
|
293 { |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
294 // 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
|
295 // 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
|
296 // 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
|
297 |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
298 // 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
|
299 // interpreter_qobject slots. |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
300 |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
301 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
|
302 } |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
303 |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
304 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
|
305 { |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
306 // 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
|
307 // 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
|
308 // 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
|
309 |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
310 // 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
|
311 // interpreter_qobject slots. |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
312 |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
313 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
|
314 } |
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
315 |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
316 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
|
317 bool remove_file) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
318 { |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
319 QClipboard *clipboard = QApplication::clipboard (); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
320 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
321 QImage img (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 if (img.isNull ()) |
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 // Report error? |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
326 return; |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
327 } |
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 clipboard->setImage (img); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
330 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
331 if (remove_file) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
332 QFile::remove (file); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
333 } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
334 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
335 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
|
336 : base_qobject (app_context) |
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 // 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
|
339 m_resource_manager.reload_settings (); |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
340 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
341 // After settings. |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
342 config_translators (); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
343 |
27218
a044202208af
more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents:
27197
diff
changeset
|
344 m_qapplication->setQuitOnLastWindowClosed (false); |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
345 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
346 start_main_thread (); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
347 } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
348 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
349 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
|
350 : 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
|
351 { |
27218
a044202208af
more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents:
27197
diff
changeset
|
352 connect (m_interpreter_qobj, SIGNAL (octave_ready_signal (void)), |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
353 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
|
354 |
27669
271b5cd640d7
Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27649
diff
changeset
|
355 connect (qt_link (), |
271b5cd640d7
Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27649
diff
changeset
|
356 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
|
357 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
|
358 |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
359 m_app_context.gui_running (true); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
360 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
361 start_main_thread (); |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
362 } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
363 |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
364 gui_qobject::~gui_qobject (void) |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
365 { |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
366 delete m_main_window; |
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 |
27588
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27582
diff
changeset
|
369 bool gui_qobject::confirm_shutdown (void) |
27197
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
370 { |
27604
9bc81bf5d8a6
* octave-qobject.cc: Add comment.
John W. Eaton <jwe@octave.org>
parents:
27588
diff
changeset
|
371 // 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
|
372 // 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
|
373 // 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
|
374 |
27588
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27582
diff
changeset
|
375 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
|
376 } |
b8c0d5ad024f
refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
377 } |