--- old/src/solaris/native/sun/awt/swing_GTKEngine.c 2018-09-05 12:09:40.871671999 +0530 +++ new/src/solaris/native/sun/awt/swing_GTKEngine.c 2018-09-05 12:09:40.551512000 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,9 +24,24 @@ */ #include -#include "gtk2_interface.h" +#include "gtk_interface.h" #include "com_sun_java_swing_plaf_gtk_GTKEngine.h" +/* Static buffer for conversion from java.lang.String to UTF-8 */ +static char conversionBuffer[CONV_BUFFER_SIZE]; + +const char *getStrFor(JNIEnv *env, jstring val) +{ + int length = (*env)->GetStringLength(env, val); + if (length > CONV_BUFFER_SIZE-1) + { + length = CONV_BUFFER_SIZE-1; + } + + (*env)->GetStringUTFRegion(env, val, 0, length, conversionBuffer); + return conversionBuffer; +} + /* * Class: com_sun_java_swing_plaf_gtk_GTKEngine * Method: native_paint_arrow @@ -38,10 +53,10 @@ jint widget_type, jint state, jint shadow_type, jstring detail, jint x, jint y, jint w, jint h, jint arrow_type) { - fp_gdk_threads_enter(); - gtk2_paint_arrow(widget_type, state, shadow_type, getStrFor(env, detail), + gtk->gdk_threads_enter(); + gtk->paint_arrow(widget_type, state, shadow_type, getStrFor(env, detail), x, y, w, h, arrow_type, TRUE); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -56,10 +71,10 @@ jint x, jint y, jint w, jint h, jint synth_state, jint dir) { - fp_gdk_threads_enter(); - gtk2_paint_box(widget_type, state, shadow_type, getStrFor(env, detail), + gtk->gdk_threads_enter(); + gtk->paint_box(widget_type, state, shadow_type, getStrFor(env, detail), x, y, w, h, synth_state, dir); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -74,10 +89,10 @@ jint x, jint y, jint w, jint h, jint gap_side, jint gap_x, jint gap_w) { - fp_gdk_threads_enter(); - gtk2_paint_box_gap(widget_type, state, shadow_type, getStrFor(env, detail), + gtk->gdk_threads_enter(); + gtk->paint_box_gap(widget_type, state, shadow_type, getStrFor(env, detail), x, y, w, h, gap_side, gap_x, gap_w); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -91,10 +106,10 @@ jint widget_type, jint synth_state, jstring detail, jint x, jint y, jint w, jint h) { - fp_gdk_threads_enter(); - gtk2_paint_check(widget_type, synth_state, getStrFor(env, detail), + gtk->gdk_threads_enter(); + gtk->paint_check(widget_type, synth_state, getStrFor(env, detail), x, y, w, h); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -108,10 +123,10 @@ jint widget_type, jint state, jstring detail, jint x, jint y, jint w, jint h, jint expander_style) { - fp_gdk_threads_enter(); - gtk2_paint_expander(widget_type, state, getStrFor(env, detail), + gtk->gdk_threads_enter(); + gtk->paint_expander(widget_type, state, getStrFor(env, detail), x, y, w, h, expander_style); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -125,10 +140,10 @@ jint widget_type, jint state, jint shadow_type, jstring detail, jint x, jint y, jint w, jint h, jint placement) { - fp_gdk_threads_enter(); - gtk2_paint_extension(widget_type, state, shadow_type, + gtk->gdk_threads_enter(); + gtk->paint_extension(widget_type, state, shadow_type, getStrFor(env, detail), x, y, w, h, placement); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -142,10 +157,10 @@ jint widget_type, jint state, jint shadow_type, jstring detail, jint x, jint y, jint w, jint h, jboolean has_focus) { - fp_gdk_threads_enter(); - gtk2_paint_flat_box(widget_type, state, shadow_type, + gtk->gdk_threads_enter(); + gtk->paint_flat_box(widget_type, state, shadow_type, getStrFor(env, detail), x, y, w, h, has_focus); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -159,10 +174,10 @@ jint widget_type, jint state, jstring detail, jint x, jint y, jint w, jint h) { - fp_gdk_threads_enter(); - gtk2_paint_focus(widget_type, state, getStrFor(env, detail), + gtk->gdk_threads_enter(); + gtk->paint_focus(widget_type, state, getStrFor(env, detail), x, y, w, h); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -176,10 +191,10 @@ jint widget_type, jint state, jint shadow_type, jstring detail, jint x, jint y, jint w, jint h, jint orientation) { - fp_gdk_threads_enter(); - gtk2_paint_handle(widget_type, state, shadow_type, getStrFor(env, detail), + gtk->gdk_threads_enter(); + gtk->paint_handle(widget_type, state, shadow_type, getStrFor(env, detail), x, y, w, h, orientation); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -193,10 +208,10 @@ jint widget_type, jint state, jstring detail, jint x, jint y, jint w, jint h) { - fp_gdk_threads_enter(); - gtk2_paint_hline(widget_type, state, getStrFor(env, detail), + gtk->gdk_threads_enter(); + gtk->paint_hline(widget_type, state, getStrFor(env, detail), x, y, w, h); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -210,10 +225,10 @@ jint widget_type, jint synth_state, jstring detail, jint x, jint y, jint w, jint h) { - fp_gdk_threads_enter(); - gtk2_paint_option(widget_type, synth_state, getStrFor(env, detail), + gtk->gdk_threads_enter(); + gtk->paint_option(widget_type, synth_state, getStrFor(env, detail), x, y, w, h); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -228,10 +243,10 @@ jint x, jint y, jint w, jint h, jint synth_state, jint dir) { - fp_gdk_threads_enter(); - gtk2_paint_shadow(widget_type, state, shadow_type, getStrFor(env, detail), + gtk->gdk_threads_enter(); + gtk->paint_shadow(widget_type, state, shadow_type, getStrFor(env, detail), x, y, w, h, synth_state, dir); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -243,12 +258,12 @@ Java_com_sun_java_swing_plaf_gtk_GTKEngine_native_1paint_1slider( JNIEnv *env, jobject this, jint widget_type, jint state, jint shadow_type, jstring detail, - jint x, jint y, jint w, jint h, jint orientation) + jint x, jint y, jint w, jint h, jint orientation, jboolean has_focus) { - fp_gdk_threads_enter(); - gtk2_paint_slider(widget_type, state, shadow_type, getStrFor(env, detail), - x, y, w, h, orientation); - fp_gdk_threads_leave(); + gtk->gdk_threads_enter(); + gtk->paint_slider(widget_type, state, shadow_type, getStrFor(env, detail), + x, y, w, h, orientation, has_focus); + gtk->gdk_threads_leave(); } /* @@ -262,10 +277,10 @@ jint widget_type, jint state, jstring detail, jint x, jint y, jint w, jint h) { - fp_gdk_threads_enter(); - gtk2_paint_vline(widget_type, state, getStrFor(env, detail), + gtk->gdk_threads_enter(); + gtk->paint_vline(widget_type, state, getStrFor(env, detail), x, y, w, h); - fp_gdk_threads_leave(); + gtk->gdk_threads_leave(); } /* @@ -278,9 +293,9 @@ JNIEnv *env, jobject this, jint widget_type, jint state, jint x, jint y, jint w, jint h) { - fp_gdk_threads_enter(); - gtk_paint_background(widget_type, state, x, y, w, h); - fp_gdk_threads_leave(); + gtk->gdk_threads_enter(); + gtk->paint_background(widget_type, state, x, y, w, h); + gtk->gdk_threads_leave(); } /* @@ -292,9 +307,9 @@ Java_com_sun_java_swing_plaf_gtk_GTKEngine_nativeStartPainting( JNIEnv *env, jobject this, jint w, jint h) { - fp_gdk_threads_enter(); - gtk2_init_painting(env, w, h); - fp_gdk_threads_leave(); + gtk->gdk_threads_enter(); + gtk->init_painting(env, w, h); + gtk->gdk_threads_leave(); } /* @@ -308,9 +323,9 @@ { jint transparency; gint *buffer = (gint*) (*env)->GetPrimitiveArrayCritical(env, dest, 0); - fp_gdk_threads_enter(); - transparency = gtk2_copy_image(buffer, width, height); - fp_gdk_threads_leave(); + gtk->gdk_threads_enter(); + transparency = gtk->copy_image(buffer, width, height); + gtk->gdk_threads_leave(); (*env)->ReleasePrimitiveArrayCritical(env, dest, buffer, 0); return transparency; } @@ -324,7 +339,9 @@ JNIEnv *env, jobject this) { // Note that flush_gtk_event_loop takes care of locks (7053002) - flush_gtk_event_loop(); + gtk->gdk_threads_enter(); + gtk->flush_event_loop(); + gtk->gdk_threads_leave(); } /* @@ -336,9 +353,9 @@ JNIEnv *env, jobject this, jint property) { jobject obj; - fp_gdk_threads_enter(); - obj = gtk2_get_setting(env, property); - fp_gdk_threads_leave(); + gtk->gdk_threads_enter(); + obj = gtk->get_setting(env, property); + gtk->gdk_threads_leave(); return obj; } @@ -352,7 +369,7 @@ JNIEnv *env, jobject this, jint widget_type, jdouble value, jdouble min, jdouble max, jdouble visible) { - fp_gdk_threads_enter(); - gtk2_set_range_value(widget_type, value, min, max, visible); - fp_gdk_threads_leave(); + gtk->gdk_threads_enter(); + gtk->set_range_value(widget_type, value, min, max, visible); + gtk->gdk_threads_leave(); }