< prev index next >
modules/graphics/src/main/native-glass/gtk/glass_window_ime.cpp
Print this page
*** 20,29 ****
--- 20,31 ----
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
+
+ #include "com_sun_glass_ui_View.h"
#include "glass_window.h"
#include "glass_general.h"
#include "glass_gtkcompat.h"
#include <cstring>
*** 143,168 ****
(void)im_xim;
(void)call;
XIMPreeditDrawCallbackStruct *data = (XIMPreeditDrawCallbackStruct*) call;
jstring text = NULL;
! if (data->text != NULL && data->text->string.multi_byte != NULL) {
if (data->text->encoding_is_wchar) {
size_t csize = wcstombs(NULL, data->text->string.wide_char, 0);
char *ctext = new char[csize + 1];
wcstombs(ctext, data->text->string.wide_char, csize + 1);
text = mainEnv->NewStringUTF(ctext);
- EXCEPTION_OCCURED(mainEnv);
delete[] ctext;
} else {
text = mainEnv->NewStringUTF(data->text->string.multi_byte);
! EXCEPTION_OCCURED(mainEnv);
}
}
mainEnv->CallVoidMethod((jobject)client, jViewNotifyInputMethodDraw,
! text, data->chg_first, data->chg_length, data->caret);
CHECK_JNI_EXCEPTION(mainEnv)
}
static void im_preedit_caret(XIM im_xim, XPointer client, XPointer call) {
(void)im_xim;
--- 145,193 ----
(void)im_xim;
(void)call;
XIMPreeditDrawCallbackStruct *data = (XIMPreeditDrawCallbackStruct*) call;
jstring text = NULL;
! jbyteArray attr = NULL;
!
! if (data->text != NULL) {
! if (data->text->string.multi_byte) {
if (data->text->encoding_is_wchar) {
size_t csize = wcstombs(NULL, data->text->string.wide_char, 0);
char *ctext = new char[csize + 1];
wcstombs(ctext, data->text->string.wide_char, csize + 1);
text = mainEnv->NewStringUTF(ctext);
delete[] ctext;
+ CHECK_JNI_EXCEPTION(mainEnv);
} else {
text = mainEnv->NewStringUTF(data->text->string.multi_byte);
! CHECK_JNI_EXCEPTION(mainEnv);
! }
! }
!
! if (XIMFeedback* fb = data->text->feedback) {
! attr = mainEnv->NewByteArray(data->text->length);
! CHECK_JNI_EXCEPTION(mainEnv)
! jbyte v[data->text->length];
! for (int i = 0; i < data->text->length; i++) {
! if (fb[i] & XIMReverse) {
! v[i] = com_sun_glass_ui_View_IME_ATTR_TARGET_NOTCONVERTED;
! } else if (fb[i] & XIMHighlight) {
! v[i] = com_sun_glass_ui_View_IME_ATTR_TARGET_CONVERTED;
! } else if (fb[i] & XIMUnderline) {
! v[i] = com_sun_glass_ui_View_IME_ATTR_CONVERTED;
! } else {
! v[i] = com_sun_glass_ui_View_IME_ATTR_INPUT;
! }
! }
! mainEnv->SetByteArrayRegion(attr, 0, data->text->length, v);
! CHECK_JNI_EXCEPTION(mainEnv)
}
}
mainEnv->CallVoidMethod((jobject)client, jViewNotifyInputMethodDraw,
! text, data->chg_first, data->chg_length, data->caret, attr);
CHECK_JNI_EXCEPTION(mainEnv)
}
static void im_preedit_caret(XIM im_xim, XPointer client, XPointer call) {
(void)im_xim;
< prev index next >