summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-08-16 16:56:31 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-08-16 16:56:31 +0200
commit77fd8f3416361bb6fc5d868e3472ae805668ad69 (patch)
treea95590378d71b37eacb9c0c0165585281bc1ccab
parentc3fd8752d2f6e70e4553293a831e6e337cd2361e (diff)
parentde27df5da30ebf3576cd545b7ef3c55788efd083 (diff)
downloadredot-engine-77fd8f3416361bb6fc5d868e3472ae805668ad69.tar.gz
Merge pull request #80673 from YeldhamDev/give_me_my_windows!
Allow to get a list of visible embedded `Window`s
-rw-r--r--doc/classes/Viewport.xml7
-rw-r--r--scene/main/viewport.cpp11
-rw-r--r--scene/main/viewport.h1
3 files changed, 19 insertions, 0 deletions
diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml
index 98836db157..101717966e 100644
--- a/doc/classes/Viewport.xml
+++ b/doc/classes/Viewport.xml
@@ -52,6 +52,13 @@
Returns an individual bit on the rendering layer mask.
</description>
</method>
+ <method name="get_embedded_subwindows" qualifiers="const">
+ <return type="Window[]" />
+ <description>
+ Returns a list of the visible embedded [Window]s inside the viewport.
+ [b]Note:[/b] [Window]s inside other viewports will not be listed.
+ </description>
+ </method>
<method name="get_final_transform" qualifiers="const">
<return type="Transform2D" />
<description>
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index 180efaaa60..41034466f9 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -2439,6 +2439,7 @@ Window *Viewport::get_base_window() const {
return w;
}
+
void Viewport::_gui_remove_focus_for_window(Node *p_window) {
if (get_base_window() == p_window) {
gui_release_focus();
@@ -3656,6 +3657,15 @@ bool Viewport::is_embedding_subwindows() const {
return gui.embed_subwindows_hint;
}
+TypedArray<Window> Viewport::get_embedded_subwindows() const {
+ TypedArray<Window> windows;
+ for (int i = 0; i < gui.sub_windows.size(); i++) {
+ windows.append(gui.sub_windows[i].window);
+ }
+
+ return windows;
+}
+
void Viewport::subwindow_set_popup_safe_rect(Window *p_window, const Rect2i &p_rect) {
int index = _sub_window_find(p_window);
ERR_FAIL_COND(index == -1);
@@ -4384,6 +4394,7 @@ void Viewport::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_embedding_subwindows", "enable"), &Viewport::set_embedding_subwindows);
ClassDB::bind_method(D_METHOD("is_embedding_subwindows"), &Viewport::is_embedding_subwindows);
+ ClassDB::bind_method(D_METHOD("get_embedded_subwindows"), &Viewport::get_embedded_subwindows);
ClassDB::bind_method(D_METHOD("set_canvas_cull_mask", "mask"), &Viewport::set_canvas_cull_mask);
ClassDB::bind_method(D_METHOD("get_canvas_cull_mask"), &Viewport::get_canvas_cull_mask);
diff --git a/scene/main/viewport.h b/scene/main/viewport.h
index 1e107ea99c..346dc6af7e 100644
--- a/scene/main/viewport.h
+++ b/scene/main/viewport.h
@@ -653,6 +653,7 @@ public:
void set_embedding_subwindows(bool p_embed);
bool is_embedding_subwindows() const;
+ TypedArray<Window> get_embedded_subwindows() const;
void subwindow_set_popup_safe_rect(Window *p_window, const Rect2i &p_rect);
Rect2i subwindow_get_popup_safe_rect(Window *p_window) const;