# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1621805965 0 # Node ID 2acc7ba5dea0ffac81177f57f43468f8db20c433 # Parent 1d2f5c4eccc5126b691e8bfaf9a5e2294ec90a83 Add HTIMER type and change dw_timer_() functions to use it. On existing platforms, HTIMER will be int for now allowing API backward compatibility. On new platforms, iOS and Android, these will be pointers to the timer objects. This allows simplifying the code paths on those platforms. May change it on other platforms such as Mac in a future major version. diff -r 1d2f5c4eccc5 -r 2acc7ba5dea0 android/dw.cpp --- a/android/dw.cpp Sun May 23 09:43:04 2021 +0000 +++ b/android/dw.cpp Sun May 23 21:39:25 2021 +0000 @@ -280,7 +280,7 @@ int (*timerfunc)(void *) = (int (* API)(void *))handler->signalfunction; if(!timerfunc(handler->data)) - dw_timer_disconnect(handler->id); + dw_timer_disconnect(handler->window); retval = 0; break; } @@ -5800,10 +5800,10 @@ * Returns: * Timer ID for use with dw_timer_disconnect(), 0 on error. */ -int API dw_timer_connect(int interval, void *sigfunc, void *data) +HTIMER API dw_timer_connect(int interval, void *sigfunc, void *data) { JNIEnv *env; - int retval = 0; + HTIMER retval = 0; if((env = (JNIEnv *)pthread_getspecific(_dw_env_key))) { @@ -5815,8 +5815,8 @@ jmethodID timerConnect = env->GetMethodID(clazz, "timerConnect", "(JJJ)Ljava/util/Timer;"); // Call the method on the object - retval = DW_POINTER_TO_INT(_dw_jni_check_result(env, env->CallObjectMethod(_dw_obj, - timerConnect, longinterval, (jlong)sigfunc, (jlong)data), _DW_REFERENCE_STRONG)); + retval = _dw_jni_check_result(env, env->CallObjectMethod(_dw_obj, + timerConnect, longinterval, (jlong)sigfunc, (jlong)data), _DW_REFERENCE_STRONG); } return retval; } @@ -5826,21 +5826,19 @@ * Parameters: * id: Timer ID returned by dw_timer_connect(). */ -void API dw_timer_disconnect(int timerid) +void API dw_timer_disconnect(HTIMER timerid) { JNIEnv *env; if(timerid && (env = (JNIEnv *)pthread_getspecific(_dw_env_key))) { - // Use a long parameter - jobject timer = (jobject)timerid; // First get the class that contains the method you need to call jclass clazz = _dw_find_class(env, DW_CLASS_NAME); // Get the method that you want to call jmethodID timerDisconnect = env->GetMethodID(clazz, "timerDisconnect", "(Ljava/util/Timer;)V"); // Call the method on the object - env->CallVoidMethod(_dw_obj, timerDisconnect, timer); + env->CallVoidMethod(_dw_obj, timerDisconnect, timerid); _dw_jni_check_exception(env); } } diff -r 1d2f5c4eccc5 -r 2acc7ba5dea0 dw.h --- a/dw.h Sun May 23 09:43:04 2021 +0000 +++ b/dw.h Sun May 23 21:39:25 2021 +0000 @@ -358,6 +358,10 @@ #define FALSE 0 typedef void *HWND; +#ifdef __IOS__ +typedef void *HTIMER +#define HTIMER_TYPEDEFED 1 +#endif typedef void *HSHM; typedef unsigned long ULONG; typedef long LONG; @@ -741,6 +745,8 @@ #define FALSE 0 typedef jobject HWND; +typedef jobject HTIMER; +#define HTIMER_TYPEDEFED 1 typedef unsigned long ULONG; typedef long LONG; @@ -1597,6 +1603,11 @@ #define DW_DIR_SEPARATOR '\\' #endif +#ifndef HTIMER_TYPEDEFED +typedef int HTIMER; +#define HTIMER_TYPEDEFED 1 +#endif + /* Some dark mode constants for supported platforms */ #define DW_DARK_MODE_DISABLED 0 #define DW_DARK_MODE_BASIC 1 @@ -2128,8 +2139,8 @@ int API dw_module_load(const char *name, HMOD *handle); int API dw_module_symbol(HMOD handle, const char *name, void**func); int API dw_module_close(HMOD handle); -int API dw_timer_connect(int interval, void *sigfunc, void *data); -void API dw_timer_disconnect(int id); +HTIMER API dw_timer_connect(int interval, void *sigfunc, void *data); +void API dw_timer_disconnect(HTIMER id); void API dw_signal_connect(HWND window, const char *signame, void *sigfunc, void *data); void API dw_signal_connect_data(HWND window, const char *signame, void *sigfunc, void *discfunc, void *data); void API dw_signal_disconnect_by_window(HWND window); diff -r 1d2f5c4eccc5 -r 2acc7ba5dea0 dwtest.c --- a/dwtest.c Sun May 23 09:43:04 2021 +0000 +++ b/dwtest.c Sun May 23 21:39:25 2021 +0000 @@ -151,7 +151,7 @@ int font_height=12; int rows=10,width1=6,cols=80; char *current_file = NULL; -int timerid; +HTIMER timerid; int num_lines=0; int max_linewidth=0; int current_row=0,current_col=0; diff -r 1d2f5c4eccc5 -r 2acc7ba5dea0 gtk/dw.c --- a/gtk/dw.c Sun May 23 09:43:04 2021 +0000 +++ b/gtk/dw.c Sun May 23 21:39:25 2021 +0000 @@ -13545,7 +13545,7 @@ * Returns: * Timer ID for use with dw_timer_disconnect(), 0 on error. */ -int API dw_timer_connect(int interval, void *sigfunc, void *data) +HTIMER API dw_timer_connect(int interval, void *sigfunc, void *data) { int tag, _locked_by_me = FALSE; @@ -13560,7 +13560,7 @@ * Parameters: * id: Timer ID returned by dw_timer_connect(). */ -void API dw_timer_disconnect(int id) +void API dw_timer_disconnect(HTIMER id) { int _locked_by_me = FALSE; diff -r 1d2f5c4eccc5 -r 2acc7ba5dea0 gtk3/dw.c --- a/gtk3/dw.c Sun May 23 09:43:04 2021 +0000 +++ b/gtk3/dw.c Sun May 23 21:39:25 2021 +0000 @@ -12208,7 +12208,7 @@ * Returns: * Timer ID for use with dw_timer_disconnect(), 0 on error. */ -int API dw_timer_connect(int interval, void *sigfunc, void *data) +HTIMER API dw_timer_connect(int interval, void *sigfunc, void *data) { int *tag, _locked_by_me = FALSE; char tmpbuf[31] = {0}; @@ -12230,7 +12230,7 @@ * Parameters: * id: Timer ID returned by dw_timer_connect(). */ -void API dw_timer_disconnect(int id) +void API dw_timer_disconnect(HTIMER id) { int _locked_by_me = FALSE; char tmpbuf[31] = {0}; diff -r 1d2f5c4eccc5 -r 2acc7ba5dea0 gtk4/dw.c --- a/gtk4/dw.c Sun May 23 09:43:04 2021 +0000 +++ b/gtk4/dw.c Sun May 23 21:39:25 2021 +0000 @@ -10664,7 +10664,7 @@ * Returns: * Timer ID for use with dw_timer_disconnect(), 0 on error. */ -int API dw_timer_connect(int interval, void *sigfunc, void *data) +HTIMER API dw_timer_connect(int interval, void *sigfunc, void *data) { int *tag; char tmpbuf[31] = {0}; @@ -10684,7 +10684,7 @@ * Parameters: * id: Timer ID returned by dw_timer_connect(). */ -void API dw_timer_disconnect(int id) +void API dw_timer_disconnect(HTIMER id) { char tmpbuf[31] = {0}; diff -r 1d2f5c4eccc5 -r 2acc7ba5dea0 ios/dw.m --- a/ios/dw.m Sun May 23 09:43:04 2021 +0000 +++ b/ios/dw.m Sun May 23 21:39:25 2021 +0000 @@ -9361,9 +9361,6 @@ return FALSE; } -#define DW_TIMER_MAX 64 -static NSTimer *DWTimers[DW_TIMER_MAX]; - /* * Add a callback to a timer event. * Parameters: @@ -9373,27 +9370,19 @@ * Returns: * Timer ID for use with dw_timer_disconnect(), 0 on error. */ -DW_FUNCTION_DEFINITION(dw_timer_connect, int, int interval, void *sigfunc, void *data) +DW_FUNCTION_DEFINITION(dw_timer_connect, HTIMER, int interval, void *sigfunc, void *data) DW_FUNCTION_ADD_PARAM3(interval, sigfunc, data) -DW_FUNCTION_RETURN(dw_timer_connect, int) +DW_FUNCTION_RETURN(dw_timer_connect, HTIMER) DW_FUNCTION_RESTORE_PARAM3(interval, int, sigfunc, void *, data, void *) { - int z, retval = 0; - - for(z=0;z 0 && timerid < DW_TIMER_MAX && DWTimers[timerid-1]) - { - thistimer = DWTimers[timerid-1]; - DWTimers[timerid-1] = nil; + if(timerid) + { + NSTimer *thistimer = timerid; [thistimer invalidate]; while(tmp) { - if(tmp->id == timerid && tmp->window == thistimer) + if(tmp->window == thistimer) { if(prev) { diff -r 1d2f5c4eccc5 -r 2acc7ba5dea0 mac/dw.m --- a/mac/dw.m Sun May 23 09:43:04 2021 +0000 +++ b/mac/dw.m Sun May 23 21:39:25 2021 +0000 @@ -11518,7 +11518,7 @@ * Returns: * Timer ID for use with dw_timer_disconnect(), 0 on error. */ -int API dw_timer_connect(int interval, void *sigfunc, void *data) +HTIMER API dw_timer_connect(int interval, void *sigfunc, void *data) { int z; @@ -11545,7 +11545,7 @@ * Parameters: * id: Timer ID returned by dw_timer_connect(). */ -void API dw_timer_disconnect(int timerid) +void API dw_timer_disconnect(HTIMER timerid) { SignalHandler *prev = NULL, *tmp = DWRoot; NSTimer *thistimer; diff -r 1d2f5c4eccc5 -r 2acc7ba5dea0 os2/dw.c --- a/os2/dw.c Sun May 23 09:43:04 2021 +0000 +++ b/os2/dw.c Sun May 23 21:39:25 2021 +0000 @@ -13525,7 +13525,7 @@ * Returns: * Timer ID for use with dw_timer_disconnect(), 0 on error. */ -int API dw_timer_connect(int interval, void *sigfunc, void *data) +HTIMER API dw_timer_connect(int interval, void *sigfunc, void *data) { if(sigfunc) { @@ -13545,7 +13545,7 @@ * Parameters: * id: Timer ID returned by dw_timer_connect(). */ -void API dw_timer_disconnect(int id) +void API dw_timer_disconnect(HTIMER id) { SignalHandler *prev = NULL, *tmp = Root; diff -r 1d2f5c4eccc5 -r 2acc7ba5dea0 template/dw.c --- a/template/dw.c Sun May 23 09:43:04 2021 +0000 +++ b/template/dw.c Sun May 23 21:39:25 2021 +0000 @@ -3130,7 +3130,7 @@ * Returns: * Timer ID for use with dw_timer_disconnect(), 0 on error. */ -int API dw_timer_connect(int interval, void *sigfunc, void *data) +HTIMER API dw_timer_connect(int interval, void *sigfunc, void *data) { return 0; } @@ -3140,7 +3140,7 @@ * Parameters: * id: Timer ID returned by dw_timer_connect(). */ -void API dw_timer_disconnect(int timerid) +void API dw_timer_disconnect(HTIMER timerid) { } diff -r 1d2f5c4eccc5 -r 2acc7ba5dea0 win/dw.c --- a/win/dw.c Sun May 23 09:43:04 2021 +0000 +++ b/win/dw.c Sun May 23 21:39:25 2021 +0000 @@ -13572,7 +13572,7 @@ * Returns: * Timer ID for use with dw_timer_disconnect(), 0 on error. */ -int API dw_timer_connect(int interval, void *sigfunc, void *data) +HTIMER API dw_timer_connect(int interval, void *sigfunc, void *data) { if(sigfunc) { @@ -13595,7 +13595,7 @@ * Parameters: * id: Timer ID returned by dw_timer_connect(). */ -void API dw_timer_disconnect(int id) +void API dw_timer_disconnect(HTIMER id) { SignalHandler *prev = NULL, *tmp = Root;