BOOL ssd_dialog_set_dialog_focus( SsdDialog dialog, SsdWidget new_focus) { SsdWidget last_focus; SsdWidget w; if( new_focus && !new_focus->tab_stop) { //assert( 0 && "ssd_dialog_set_dialog_focus() - Invalid input"); return FALSE; } w = ssd_widget_get(new_focus,"focus_image"); if( w != NULL) ssd_widget_show( w->children); // Setting the same one twice... if( dialog->in_focus == new_focus){ if (new_focus && !new_focus->in_focus) ssd_widget_set_focus(new_focus); return TRUE; } if( new_focus && (dialog != new_focus->parent_dialog)) { /*/[BOOKMARK]:[NOTE]:[PAZ] - If 'new_focus->parent_dialog' is NULL: Maybe 'ssd_dialog_sort_tab_order()' was called before 'ssd_dialog_draw'? Note that 'ssd_dialog_draw' will call 'ssd_dialog_sort_tab_order()', thus no need to call it directly. */ assert( 0 && "ssd_dialog_set_dialog_focus() - widget does not belong to this dialog"); return FALSE; } last_focus = dialog->in_focus; if (dialog->in_focus) { ssd_widget_loose_focus(dialog->in_focus); dialog->in_focus = NULL; } if( !new_focus) return TRUE; if( !ssd_widget_set_focus(new_focus)) { assert(0); if( ssd_widget_set_focus( last_focus)) dialog->in_focus = last_focus; return FALSE; } dialog->in_focus = new_focus; ssd_dialog_allign_focus(); return TRUE; }
static int button_callback (SsdWidget widget, const char *new_value) { RoadMapCallback callback = (RoadMapCallback) widget->context; (*callback)(); #ifdef TOUCH_SCREEN if (widget->parent) ssd_widget_loose_focus(widget->parent); #endif /* Hide dialog */ while (widget->parent) widget = widget->parent; return 0; }