From 6068ac2eb8f10fe1a6f9c3bb02b72416e20cf523 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Thu, 31 Oct 2024 16:50:15 +0100 Subject: [PATCH] View.setSystemUiVisibility(): implement fullscreen For now we only allow fullscreen for maximized windows --- .../generated_headers/android_view_View.h | 8 ++++++++ src/api-impl-jni/views/android_view_View.c | 14 ++++++++++++++ src/api-impl/android/view/View.java | 3 +++ 3 files changed, 25 insertions(+) diff --git a/src/api-impl-jni/generated_headers/android_view_View.h b/src/api-impl-jni/generated_headers/android_view_View.h index 025f5277..f64f0e8f 100644 --- a/src/api-impl-jni/generated_headers/android_view_View.h +++ b/src/api-impl-jni/generated_headers/android_view_View.h @@ -311,6 +311,14 @@ JNIEXPORT void JNICALL Java_android_view_View_native_1drawBackground JNIEXPORT void JNICALL Java_android_view_View_native_1drawContent (JNIEnv *, jobject, jlong, jlong); +/* + * Class: android_view_View + * Method: nativeSetFullscreen + * Signature: (JZ)V + */ +JNIEXPORT void JNICALL Java_android_view_View_nativeSetFullscreen + (JNIEnv *, jobject, jlong, jboolean); + /* * Class: android_view_View * Method: nativeInvalidate diff --git a/src/api-impl-jni/views/android_view_View.c b/src/api-impl-jni/views/android_view_View.c index 2886fa1f..a7a03117 100644 --- a/src/api-impl-jni/views/android_view_View.c +++ b/src/api-impl-jni/views/android_view_View.c @@ -577,3 +577,17 @@ JNIEXPORT void JNICALL Java_android_view_View_native_1drawContent(JNIEnv *env, j GdkSnapshot *snapshot = GDK_SNAPSHOT(_PTR(snapshot_ptr)); gtk_widget_snapshot_child(&wrapper->parent_instance, wrapper->child, snapshot); } + +JNIEXPORT void JNICALL Java_android_view_View_nativeSetFullscreen(JNIEnv *env, jobject this, jlong widget_ptr, jboolean fullscreen) +{ + GtkWidget *widget = GTK_WIDGET(_PTR(widget_ptr)); + GtkWindow *window = GTK_WINDOW(gtk_widget_get_native(widget)); + if (fullscreen) { + if (gtk_window_is_maximized(window)) + gtk_window_fullscreen(window); + else + printf("blocking fullscreen request, because window is not maximized\n"); + } else { + gtk_window_unfullscreen(window); + } +} diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java index 4edaf113..ae4c7eac 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -1038,7 +1038,10 @@ public class View implements Drawable.Callback { return true; } + private native void nativeSetFullscreen(long widget, boolean fullscreen); + public void setSystemUiVisibility(int visibility) { + nativeSetFullscreen(widget, (visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0); system_ui_visibility = visibility; } public int getSystemUiVisibility() {