Implemented uiComboboxSetSelected() on GTK+.

This commit is contained in:
Pietro Gagliardi 2015-10-09 13:54:34 -04:00
parent 581cbaecc9
commit 843ea0d46c
3 changed files with 12 additions and 3 deletions

View File

@ -235,6 +235,6 @@ void populateComboboxWithTests(uiCombobox *c)
{ {
size_t i; size_t i;
for (i = 0; test[i].name != NULL; i++) for (i = 0; tests[i].name != NULL; i++)
uiComboboxAppend(c, tests[i].name); uiComboboxAppend(c, tests[i].name);
} }

View File

@ -80,7 +80,7 @@ static void onAmountChanged(uiSpinbox *s, void *data)
static void shouldntHappen(uiCombobox *c, void *data) static void shouldntHappen(uiCombobox *c, void *data)
{ {
fprintf(stderr, "YOU SHOULD NOT SEE THIS. If you do, uiComboboxSetSelected() is triggering uiComboboxOnSelected(), which it should not."); fprintf(stderr, "YOU SHOULD NOT SEE THIS. If you do, uiComboboxSetSelected() is triggering uiComboboxOnSelected(), which it should not.\n");
} }
static void redraw(uiCombobox *c, void *data) static void redraw(uiCombobox *c, void *data)

View File

@ -8,6 +8,7 @@ struct uiCombobox {
GtkComboBoxText *comboboxText; GtkComboBoxText *comboboxText;
void (*onSelected)(uiCombobox *, void *); void (*onSelected)(uiCombobox *, void *);
void *onSelectedData; void *onSelectedData;
gulong onSelectedSignal;
}; };
uiUnixDefineControl( uiUnixDefineControl(
@ -38,6 +39,14 @@ intmax_t uiComboboxSelected(uiCombobox *c)
return gtk_combo_box_get_active(c->combobox); return gtk_combo_box_get_active(c->combobox);
} }
void uiComboboxSetSelected(uiCombobox *c, intmax_t n)
{
// we need to inhibit sending of ::changed because this WILL send a ::changed otherwise
g_signal_handler_block(c->combobox, c->onSelectedSignal);
gtk_combo_box_set_active(c->combobox, n);
g_signal_handler_unblock(c->combobox, c->onSelectedSignal);
}
void uiComboboxOnSelected(uiCombobox *c, void (*f)(uiCombobox *c, void *data), void *data) void uiComboboxOnSelected(uiCombobox *c, void (*f)(uiCombobox *c, void *data), void *data)
{ {
c->onSelected = f; c->onSelected = f;
@ -54,7 +63,7 @@ static uiCombobox *finishNewCombobox(GtkWidget *(*newfunc)(void))
c->combobox = GTK_COMBO_BOX(c->widget); c->combobox = GTK_COMBO_BOX(c->widget);
c->comboboxText = GTK_COMBO_BOX_TEXT(c->widget); c->comboboxText = GTK_COMBO_BOX_TEXT(c->widget);
g_signal_connect(c->widget, "changed", G_CALLBACK(onChanged), c); c->onSelectedSignal = g_signal_connect(c->widget, "changed", G_CALLBACK(onChanged), c);
uiComboboxOnSelected(c, defaultOnSelected, NULL); uiComboboxOnSelected(c, defaultOnSelected, NULL);
uiUnixFinishNewControl(c, uiCombobox); uiUnixFinishNewControl(c, uiCombobox);