Merge branch 'master' into table

This commit is contained in:
Pietro Gagliardi 2018-05-13 18:05:50 -04:00
commit 31090442be
3 changed files with 16 additions and 2 deletions

View File

@ -6,6 +6,7 @@ struct uiDateTimePicker {
NSDatePicker *dp; NSDatePicker *dp;
void (*onChanged)(uiDateTimePicker *, void *); void (*onChanged)(uiDateTimePicker *, void *);
void *onChangedData; void *onChangedData;
BOOL blockSendOnce;
}; };
// TODO see if target-action works here or not; I forgot what cody271@ originally said // TODO see if target-action works here or not; I forgot what cody271@ originally said
@ -54,6 +55,10 @@ struct uiDateTimePicker {
v = (NSValue *) [timer userInfo]; v = (NSValue *) [timer userInfo];
d = (uiDateTimePicker *) [v pointerValue]; d = (uiDateTimePicker *) [v pointerValue];
if (d->blockSendOnce) {
d->blockSendOnce = NO;
return;
}
(*(d->onChanged))(d, d->onChangedData); (*(d->onChanged))(d, d->onChangedData);
} }
@ -105,6 +110,8 @@ void uiDateTimePickerSetTime(uiDateTimePicker *d, const struct tm *time)
memcpy(&tmbuf, time, sizeof (struct tm)); memcpy(&tmbuf, time, sizeof (struct tm));
t = mktime(&tmbuf); t = mktime(&tmbuf);
// TODO get rid of the need for this
d->blockSendOnce = YES;
[d->dp setDateValue:[NSDate dateWithTimeIntervalSince1970:t]]; [d->dp setDateValue:[NSDate dateWithTimeIntervalSince1970:t]];
} }

View File

@ -1,5 +1,6 @@
#include <string.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <time.h> #include <time.h>
#include "../../ui.h" #include "../../ui.h"

View File

@ -558,6 +558,7 @@ struct uiDateTimePicker {
uiprivDateTimePickerWidget *d; uiprivDateTimePickerWidget *d;
void (*onChanged)(uiDateTimePicker *, void *); void (*onChanged)(uiDateTimePicker *, void *);
void *onChangedData; void *onChangedData;
gulong setBlock;
}; };
uiUnixControlAllDefaults(uiDateTimePicker) uiUnixControlAllDefaults(uiDateTimePicker)
@ -588,12 +589,17 @@ void uiDateTimePickerSetTime(uiDateTimePicker *d, const struct tm *time)
time_t t; time_t t;
struct tm tmbuf; struct tm tmbuf;
// TODO find a better way to avoid this; possibly by removing the signal entirely, or the call to dateTimeChanged() (most likely both)
g_signal_handler_block(d->d, d->setBlock);
// Copy time because mktime() modifies its argument // Copy time because mktime() modifies its argument
memcpy(&tmbuf, time, sizeof (struct tm)); memcpy(&tmbuf, time, sizeof (struct tm));
t = mktime(&tmbuf); t = mktime(&tmbuf);
uiprivDateTimePickerWidget_setTime(d->d, g_date_time_new_from_unix_local(t)); uiprivDateTimePickerWidget_setTime(d->d, g_date_time_new_from_unix_local(t));
dateTimeChanged(d->d); dateTimeChanged(d->d);
g_signal_handler_unblock(d->d, d->setBlock);
} }
void uiDateTimePickerOnChanged(uiDateTimePicker *d, void (*f)(uiDateTimePicker *, void *), void *data) void uiDateTimePickerOnChanged(uiDateTimePicker *d, void (*f)(uiDateTimePicker *, void *), void *data)
@ -647,7 +653,7 @@ uiDateTimePicker *finishNewDateTimePicker(GtkWidget *(*fn)(void))
d->widget = (*fn)(); d->widget = (*fn)();
d->d = uiprivDateTimePickerWidget(d->widget); d->d = uiprivDateTimePickerWidget(d->widget);
g_signal_connect(d->widget, "changed", G_CALLBACK(onChanged), d); d->setBlock = g_signal_connect(d->widget, "changed", G_CALLBACK(onChanged), d);
uiDateTimePickerOnChanged(d, defaultOnChanged, NULL); uiDateTimePickerOnChanged(d, defaultOnChanged, NULL);
return d; return d;