};
var x = 1;
var count = function (){
- label.Top = x;
d = new Date();
label.Text = "count="+x+"\n"+d;
x++;
- setTimeout( count, 1000 );
+ //setTimeout( count, 1000 );
};
var chtxt = function (){
label.Text = "Changed";
var mywindow = new xawWindow("Test");
var form = new xawForm(mywindow, "form", 0);
var label = new xawWidget(form, "Hello world!\n"+d);
-var button = new xawWidget(form, "Klick!", "chtxt()");
+var button = new xawWidget(form, "Klick!", count);
+button.Top = 25;
print("objects ready.\n");
-count();
+//count();
mywindow.Show();
-/* コールバック関数 */
+/* コールバック関数 (メモリの解放どうしようか。) */
#pragma GCC optimization_level 0
void xawJsCallbackFunction( Widget w, XtPointer client, XtPointer called )
{
- //JSObjectCallAsFunction((*(jsCallbackInfo*)client).Context, (*(jsCallbackInfo*)client).Function, NULL, 0,resources,NULL);
+ jsCallbackInfo* widgetEventCallback = (jsCallbackInfo*)client;
+ assert(((*widgetEventCallback).Context != NULL) && ((*widgetEventCallback).Function != NULL) );
+ JSContextRef ctx = jsGlobalCtx;
+ const JSObjectRef f = widgetEventCallback->Function;
+
+ if (JSValueIsString(ctx, f)) {
+ JSStringRef jstrSource = JSValueToStringCopy(ctx, f, NULL);
+ JSEvaluateScript(ctx, jstrSource, NULL, NULL, 1, NULL);
+ JSStringRelease(jstrSource);
+ }else {
+ JSObjectCallAsFunction(jsGlobalCtx, widgetEventCallback->Function , NULL, 0,NULL,NULL);
+ }
}
#pragma GCC optimization_level reset
myWidgets[objIDc] = XtVaCreateManagedWidget(widgetName, commandWidgetClass, myWidgets[parentObjectID], XtNlabel, text, NULL);
- /*memmove(timeOutCallback, &((jsCallbackInfo){ctx, arguments[2]}), sizeof(jsCallbackInfo));
+ jsCallbackInfo* widgetEventCallback = (jsCallbackInfo *)malloc( sizeof(jsCallbackInfo));
+ if( widgetEventCallback == NULL )//stop if empty pointer for some reason
+ {
+ printf( "Memory alloc failed!\n" );
+ return JSValueToObject(ctx, JSValueMakeNull(ctx), exception);
+ }
- JSObjectCallAsFunction(ctx, arguments[2], NULL, 0,NULL,NULL);
- tmp = args[0];
- XtAppAddTimeOut(app_con, (unsigned long)JSValueToNumber( ctx, args[1], jobjExp), (XtTimerCallbackProc)jsXawAppAddTimeOutCallback,(XtPointer)timeOutCallback);
- */
+ memmove(widgetEventCallback, &((jsCallbackInfo){ctx, arguments[2]}), sizeof(jsCallbackInfo));
+ XtAddCallback(myWidgets[objIDc], XtNcallback , (XtCallbackProc)xawJsCallbackFunction,(XtPointer)widgetEventCallback);
//Construct a class and create object out of it, send it back to JavaScript.
widgetObj = JSObjectMake(ctx, JSClassCreate(&classDefinition), NULL);