From fbebea374b5d45ad3dc41df6f9b008b79b66204e Mon Sep 17 00:00:00 2001 From: Onek8 Date: Wed, 24 Jun 2026 10:30:21 -0700 Subject: [PATCH] Update --- .../System/Android/Sources/kinc/backend/window.c.h | 2 ++ .../System/Emscripten/Sources/kinc/backend/window.c.h | 2 ++ .../System/Linux/Sources/kinc/backend/funcs.h | 1 + .../System/Linux/Sources/kinc/backend/linuxunit.c | 2 ++ .../Linux/Sources/kinc/backend/wayland/window.c.h | 4 ++++ .../System/Linux/Sources/kinc/backend/window.c.h | 4 ++++ .../System/Linux/Sources/kinc/backend/x11/window.c.h | 11 +++++++++++ .../System/Wasm/Sources/kinc/backend/window.c.h | 2 ++ .../System/Windows/Sources/kinc/backend/window.c.h | 5 +++++ .../System/iOS/Sources/kinc/backend/window.c.h | 2 ++ .../System/macOS/Sources/kinc/backend/window.c.h | 2 ++ Kore/Sources/kinc/window.h | 5 +++++ Sources/main.cpp | 4 ++-- 13 files changed, 44 insertions(+), 2 deletions(-) diff --git a/Kore/Backends/System/Android/Sources/kinc/backend/window.c.h b/Kore/Backends/System/Android/Sources/kinc/backend/window.c.h index 2eeb18f..e1faa7d 100644 --- a/Kore/Backends/System/Android/Sources/kinc/backend/window.c.h +++ b/Kore/Backends/System/Android/Sources/kinc/backend/window.c.h @@ -49,6 +49,8 @@ void kinc_window_show(int window_index) {} void kinc_window_hide(int window_index) {} +void kinc_window_set_foreground(int window_index) {} + void kinc_window_set_title(int window_index, const char *title) {} int kinc_window_create(kinc_window_options_t *win, kinc_framebuffer_options_t *frame) { diff --git a/Kore/Backends/System/Emscripten/Sources/kinc/backend/window.c.h b/Kore/Backends/System/Emscripten/Sources/kinc/backend/window.c.h index 3f1220c..9982f3e 100644 --- a/Kore/Backends/System/Emscripten/Sources/kinc/backend/window.c.h +++ b/Kore/Backends/System/Emscripten/Sources/kinc/backend/window.c.h @@ -63,6 +63,8 @@ void kinc_window_show(int window_index) {} void kinc_window_hide(int window_index) {} +void kinc_window_set_foreground(int window_index) {} + // TODO: change browser title. void kinc_window_set_title(int window_index, const char *title) {} diff --git a/Kore/Backends/System/Linux/Sources/kinc/backend/funcs.h b/Kore/Backends/System/Linux/Sources/kinc/backend/funcs.h index cf66fb8..2982339 100644 --- a/Kore/Backends/System/Linux/Sources/kinc/backend/funcs.h +++ b/Kore/Backends/System/Linux/Sources/kinc/backend/funcs.h @@ -29,6 +29,7 @@ struct linux_procs { int (*window_display)(int window_index); void (*window_show)(int window_index); void (*window_hide)(int window_index); + void (*window_set_foreground)(int window_index); void (*window_set_title)(int window_index, const char *title); void (*window_change_mode)(int window_index, kinc_window_mode_t mode); kinc_window_mode_t (*window_get_mode)(int window_index); diff --git a/Kore/Backends/System/Linux/Sources/kinc/backend/linuxunit.c b/Kore/Backends/System/Linux/Sources/kinc/backend/linuxunit.c index e86e33d..111fba3 100644 --- a/Kore/Backends/System/Linux/Sources/kinc/backend/linuxunit.c +++ b/Kore/Backends/System/Linux/Sources/kinc/backend/linuxunit.c @@ -59,6 +59,7 @@ void kinc_linux_init_procs() { procs.window_resize = kinc_wayland_window_resize; procs.window_show = kinc_wayland_window_show; procs.window_hide = kinc_wayland_window_hide; + procs.window_set_foreground = kinc_wayland_window_set_foreground; procs.count_windows = kinc_wayland_count_windows; procs.mouse_can_lock = kinc_wl_mouse_can_lock; @@ -111,6 +112,7 @@ void kinc_linux_init_procs() { procs.window_resize = kinc_x11_window_resize; procs.window_show = kinc_x11_window_show; procs.window_hide = kinc_x11_window_hide; + procs.window_set_foreground = kinc_x11_window_set_foreground; procs.count_windows = kinc_x11_count_windows; procs.display_init = kinc_x11_display_init; diff --git a/Kore/Backends/System/Linux/Sources/kinc/backend/wayland/window.c.h b/Kore/Backends/System/Linux/Sources/kinc/backend/wayland/window.c.h index bc49016..2c5d6c4 100644 --- a/Kore/Backends/System/Linux/Sources/kinc/backend/wayland/window.c.h +++ b/Kore/Backends/System/Linux/Sources/kinc/backend/wayland/window.c.h @@ -499,6 +499,10 @@ void kinc_wayland_window_hide(int window_index) { kinc_log(KINC_LOG_LEVEL_ERROR, "Wayland does not support hiding windows."); } +void kinc_wayland_window_set_foreground(int window_index) { + kinc_log(KINC_LOG_LEVEL_ERROR, "Wayland does not support activating windows."); +} + kinc_window_mode_t kinc_wayland_window_get_mode(int window_index) { return wl_ctx.windows[window_index].mode; } diff --git a/Kore/Backends/System/Linux/Sources/kinc/backend/window.c.h b/Kore/Backends/System/Linux/Sources/kinc/backend/window.c.h index 47df1af..262cd26 100644 --- a/Kore/Backends/System/Linux/Sources/kinc/backend/window.c.h +++ b/Kore/Backends/System/Linux/Sources/kinc/backend/window.c.h @@ -80,6 +80,10 @@ void kinc_window_hide(int window_index) { procs.window_hide(window_index); } +void kinc_window_set_foreground(int window_index) { + procs.window_set_foreground(window_index); +} + void kinc_window_set_title(int window_index, const char *title) { procs.window_set_title(window_index, title); } diff --git a/Kore/Backends/System/Linux/Sources/kinc/backend/x11/window.c.h b/Kore/Backends/System/Linux/Sources/kinc/backend/x11/window.c.h index fb8ada0..748b0cc 100644 --- a/Kore/Backends/System/Linux/Sources/kinc/backend/x11/window.c.h +++ b/Kore/Backends/System/Linux/Sources/kinc/backend/x11/window.c.h @@ -13,6 +13,7 @@ struct MwmHints { #define MWM_HINTS_DECORATIONS (1L << 1) void kinc_x11_window_set_title(int window_index, const char *title); +void kinc_x11_window_set_foreground(int window_index); void kinc_x11_window_change_mode(int window_index, kinc_window_mode_t mode); int kinc_x11_window_create(kinc_window_options_t *win, kinc_framebuffer_options_t *frame) { @@ -145,6 +146,16 @@ void kinc_x11_window_hide(int window_index) { xlib.XUnmapWindow(x11_ctx.display, window->window); } +void kinc_x11_window_set_foreground(int window_index) { + struct kinc_x11_window *window = &x11_ctx.windows[window_index]; + if (window->window == None) { + return; + } + xlib.XRaiseWindow(x11_ctx.display, window->window); + xlib.XSetInputFocus(x11_ctx.display, window->window, RevertToParent, CurrentTime); + xlib.XFlush(x11_ctx.display); +} + kinc_window_mode_t kinc_x11_window_get_mode(int window_index) { return x11_ctx.windows[window_index].mode; } diff --git a/Kore/Backends/System/Wasm/Sources/kinc/backend/window.c.h b/Kore/Backends/System/Wasm/Sources/kinc/backend/window.c.h index 3f1220c..9982f3e 100644 --- a/Kore/Backends/System/Wasm/Sources/kinc/backend/window.c.h +++ b/Kore/Backends/System/Wasm/Sources/kinc/backend/window.c.h @@ -63,6 +63,8 @@ void kinc_window_show(int window_index) {} void kinc_window_hide(int window_index) {} +void kinc_window_set_foreground(int window_index) {} + // TODO: change browser title. void kinc_window_set_title(int window_index, const char *title) {} diff --git a/Kore/Backends/System/Windows/Sources/kinc/backend/window.c.h b/Kore/Backends/System/Windows/Sources/kinc/backend/window.c.h index b22d623..a3d1357 100644 --- a/Kore/Backends/System/Windows/Sources/kinc/backend/window.c.h +++ b/Kore/Backends/System/Windows/Sources/kinc/backend/window.c.h @@ -392,6 +392,11 @@ void kinc_window_hide(int window_index) { UpdateWindow(windows[window_index].handle); } +void kinc_window_set_foreground(int window_index) { + SetForegroundWindow(windows[window_index].handle); + SetFocus(windows[window_index].handle); +} + void kinc_window_set_title(int window_index, const char *title) { wchar_t buffer[1024]; MultiByteToWideChar(CP_UTF8, 0, title, -1, buffer, 1024); diff --git a/Kore/Backends/System/iOS/Sources/kinc/backend/window.c.h b/Kore/Backends/System/iOS/Sources/kinc/backend/window.c.h index f564d95..25c0c0d 100644 --- a/Kore/Backends/System/iOS/Sources/kinc/backend/window.c.h +++ b/Kore/Backends/System/iOS/Sources/kinc/backend/window.c.h @@ -41,6 +41,8 @@ void kinc_window_show(int window) {} void kinc_window_hide(int window) {} +void kinc_window_set_foreground(int window) {} + void kinc_window_set_title(int window, const char *title) {} int kinc_window_create(kinc_window_options_t *win, kinc_framebuffer_options_t *frame) { diff --git a/Kore/Backends/System/macOS/Sources/kinc/backend/window.c.h b/Kore/Backends/System/macOS/Sources/kinc/backend/window.c.h index e4b0de2..71127a4 100644 --- a/Kore/Backends/System/macOS/Sources/kinc/backend/window.c.h +++ b/Kore/Backends/System/macOS/Sources/kinc/backend/window.c.h @@ -46,6 +46,8 @@ void kinc_window_show(int window) {} void kinc_window_hide(int window) {} +void kinc_window_set_foreground(int window) {} + void kinc_window_set_title(int window, const char *title) {} int kinc_window_create(kinc_window_options_t *win, kinc_framebuffer_options_t *frame) { diff --git a/Kore/Sources/kinc/window.h b/Kore/Sources/kinc/window.h index 966053b..8905b2b 100644 --- a/Kore/Sources/kinc/window.h +++ b/Kore/Sources/kinc/window.h @@ -139,6 +139,11 @@ KINC_FUNC void kinc_window_show(int window); /// KINC_FUNC void kinc_window_hide(int window); +/// +/// Brings a window to the foreground and sets focus to it. +/// +KINC_FUNC void kinc_window_set_foreground(int window); + /// /// Sets the title of a window. /// diff --git a/Sources/main.cpp b/Sources/main.cpp index 809df8e..5ca5a9e 100644 --- a/Sources/main.cpp +++ b/Sources/main.cpp @@ -2708,7 +2708,7 @@ namespace { void runt_window_set_foreground(const FunctionCallbackInfo &args) { HandleScope scope(args.GetIsolate()); int windowId = args[0]->ToInt32(isolate->GetCurrentContext()).ToLocalChecked()->Value(); - // kinc_window_set_foreground(windowId); // TODO: add to Kore + kinc_window_set_foreground(windowId); } #define SET_FUNCTION_FAST(object, name, fn)\ @@ -4038,7 +4038,7 @@ int kickstart(int argc, char **argv) { start_runt(snapshot_found ? NULL : code); - #ifdef WITH_NETWORKING + #ifdef WITH_VIEWPORT if (viewport_server_mode) { kinc_log(KINC_LOG_LEVEL_INFO, "Initializing viewport server: %dx%d, shmem=%s", viewport_width, viewport_height, viewport_shmem_name);