Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4.c
Original file line number Diff line number Diff line change
Expand Up @@ -1844,6 +1844,18 @@ JNIEXPORT jlong JNICALL GTK4_NATIVE(gtk_1gesture_1zoom_1new)
}
#endif

#ifndef NO_gtk_1header_1bar_1new
JNIEXPORT jlong JNICALL GTK4_NATIVE(gtk_1header_1bar_1new)
(JNIEnv *env, jclass that)
{
jlong rc = 0;
GTK4_NATIVE_ENTER(env, that, gtk_1header_1bar_1new_FUNC);
rc = (jlong)gtk_header_bar_new();
GTK4_NATIVE_EXIT(env, that, gtk_1header_1bar_1new_FUNC);
return rc;
}
#endif

#ifndef NO_gtk_1hsv_1to_1rgb
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1hsv_1to_1rgb)
(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloatArray arg3, jfloatArray arg4, jfloatArray arg5)
Expand Down Expand Up @@ -2509,6 +2521,18 @@ JNIEXPORT jlong JNICALL GTK4_NATIVE(gtk_1widget_1get_1first_1child)
}
#endif

#ifndef NO_gtk_1widget_1get_1height
JNIEXPORT jint JNICALL GTK4_NATIVE(gtk_1widget_1get_1height)
(JNIEnv *env, jclass that, jlong arg0)
{
jint rc = 0;
GTK4_NATIVE_ENTER(env, that, gtk_1widget_1get_1height_FUNC);
rc = (jint)gtk_widget_get_height((GtkWidget *)arg0);
GTK4_NATIVE_EXIT(env, that, gtk_1widget_1get_1height_FUNC);
return rc;
}
#endif

#ifndef NO_gtk_1widget_1get_1last_1child
JNIEXPORT jlong JNICALL GTK4_NATIVE(gtk_1widget_1get_1last_1child)
(JNIEnv *env, jclass that, jlong arg0)
Expand Down Expand Up @@ -2598,6 +2622,18 @@ JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1widget_1get_1size_1request)
}
#endif

#ifndef NO_gtk_1widget_1get_1width
JNIEXPORT jint JNICALL GTK4_NATIVE(gtk_1widget_1get_1width)
(JNIEnv *env, jclass that, jlong arg0)
{
jint rc = 0;
GTK4_NATIVE_ENTER(env, that, gtk_1widget_1get_1width_FUNC);
rc = (jint)gtk_widget_get_width((GtkWidget *)arg0);
GTK4_NATIVE_EXIT(env, that, gtk_1widget_1get_1width_FUNC);
return rc;
}
#endif

#ifndef NO_gtk_1widget_1insert_1after
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1widget_1insert_1after)
(JNIEnv *env, jclass that, jlong arg0, jlong arg1, jlong arg2)
Expand Down Expand Up @@ -2843,6 +2879,16 @@ JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1window_1set_1icon_1name)
}
#endif

#ifndef NO_gtk_1window_1set_1titlebar
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1window_1set_1titlebar)
(JNIEnv *env, jclass that, jlong arg0, jlong arg1)
{
GTK4_NATIVE_ENTER(env, that, gtk_1window_1set_1titlebar_FUNC);
gtk_window_set_titlebar((GtkWindow *)arg0, (GtkWidget *)arg1);
GTK4_NATIVE_EXIT(env, that, gtk_1window_1set_1titlebar_FUNC);
}
#endif

#ifndef NO_gtk_1window_1unminimize
JNIEXPORT void JNICALL GTK4_NATIVE(gtk_1window_1unminimize)
(JNIEnv *env, jclass that, jlong arg0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ typedef enum {
gtk_1gesture_1rotate_1new_FUNC,
gtk_1gesture_1set_1sequence_1state_FUNC,
gtk_1gesture_1zoom_1new_FUNC,
gtk_1header_1bar_1new_FUNC,
gtk_1hsv_1to_1rgb_FUNC,
gtk_1icon_1paintable_1get_1file_FUNC,
gtk_1icon_1theme_1get_1for_1display_FUNC,
Expand Down Expand Up @@ -204,13 +205,15 @@ typedef enum {
gtk_1widget_1class_1add_1binding_1signal_FUNC,
gtk_1widget_1get_1clipboard_FUNC,
gtk_1widget_1get_1first_1child_FUNC,
gtk_1widget_1get_1height_FUNC,
gtk_1widget_1get_1last_1child_FUNC,
gtk_1widget_1get_1native_FUNC,
gtk_1widget_1get_1next_1sibling_FUNC,
gtk_1widget_1get_1prev_1sibling_FUNC,
gtk_1widget_1get_1receives_1default_FUNC,
gtk_1widget_1get_1root_FUNC,
gtk_1widget_1get_1size_1request_FUNC,
gtk_1widget_1get_1width_FUNC,
gtk_1widget_1insert_1after_FUNC,
gtk_1widget_1insert_1before_FUNC,
gtk_1widget_1measure_FUNC,
Expand All @@ -232,5 +235,6 @@ typedef enum {
gtk_1window_1set_1child_FUNC,
gtk_1window_1set_1default_1widget_FUNC,
gtk_1window_1set_1icon_1name_FUNC,
gtk_1window_1set_1titlebar_FUNC,
gtk_1window_1unminimize_FUNC,
} GTK4_FUNCS;
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,11 @@ public class GTK4 {
/** @param window cast=(GtkWindow *) */
public static final native long gtk_window_get_titlebar(long window);

/** @param window cast=(GtkWindow *)
* @param titlebar cast=(GtkWidget *)
**/
public static final native void gtk_window_set_titlebar(long window, long titlebar);

/** @param window cast=(GtkWindow *) */
public static final native void gtk_window_present(long window) ;

Expand Down Expand Up @@ -1064,4 +1069,16 @@ public class GTK4 {
*/
public static final native long gtk_gesture_get_last_updated_sequence(long gesture);

/**
* @param widget cast=(GtkWidget *)
*/
public static final native int gtk_widget_get_width(long widget);

/**
* @param widget cast=(GtkWidget *)
*/
public static final native int gtk_widget_get_height(long widget);

public static final native long gtk_header_bar_new();

}
Original file line number Diff line number Diff line change
Expand Up @@ -728,6 +728,14 @@ Rectangle computeTrimInPixels (int x, int y, int width, int height) {
trim.y -= menuBarHeight;
trim.height += menuBarHeight;
}
if (GTK.GTK4 && OS.isWayland()) {
long titlebar = GTK4.gtk_window_get_titlebar(shellHandle);
if (titlebar != 0) {
int titleBarHeight = GTK4.gtk_widget_get_height (titlebar);
trim.y -= titleBarHeight;
trim.height += titleBarHeight;
}
}
return trim;
}

Expand All @@ -743,6 +751,15 @@ void createHandle (int index) {
if (GTK.GTK4) {
// TODO: GTK4 need to handle for GTK_WINDOW_POPUP type
shellHandle = GTK4.gtk_window_new();
if (OS.isWayland()) {
long headerbar = GTK4.gtk_window_get_titlebar(shellHandle);
if (headerbar == 0) {
// Force-install a headerbar if none exists in order to be able to qurey its size later
// If none set by the app gtk_window_get_titlebar returns 0 but Gtk still draws one internally
long hb = GTK4.gtk_header_bar_new();
GTK4.gtk_window_set_titlebar(shellHandle, hb);
}
}
} else {
shellHandle = GTK3.gtk_window_new(type);
}
Expand Down
Loading