Create task bar clock. * * @param window Containing window * @param rclock Place to store pointer to new clock * @return EOK on success or an error code */
| 67 | * @return EOK on success or an error code |
| 68 | */ |
| 69 | errno_t taskbar_clock_create(ui_window_t *window, taskbar_clock_t **rclock) |
| 70 | { |
| 71 | taskbar_clock_t *clock; |
| 72 | errno_t rc; |
| 73 | |
| 74 | clock = calloc(1, sizeof(taskbar_clock_t)); |
| 75 | if (clock == NULL) |
| 76 | return ENOMEM; |
| 77 | |
| 78 | rc = ui_control_new(&taskbar_clock_ctl_ops, (void *)clock, |
| 79 | &clock->control); |
| 80 | if (rc != EOK) { |
| 81 | free(clock); |
| 82 | return rc; |
| 83 | } |
| 84 | |
| 85 | clock->timer = fibril_timer_create(NULL); |
| 86 | if (clock->timer == NULL) { |
| 87 | rc = ENOMEM; |
| 88 | goto error; |
| 89 | } |
| 90 | |
| 91 | fibril_mutex_initialize(&clock->lock); |
| 92 | fibril_condvar_initialize(&clock->timer_done_cv); |
| 93 | fibril_timer_set(clock->timer, 1000000, taskbar_clock_timer, clock); |
| 94 | |
| 95 | clock->window = window; |
| 96 | *rclock = clock; |
| 97 | return EOK; |
| 98 | error: |
| 99 | ui_control_delete(clock->control); |
| 100 | free(clock); |
| 101 | return rc; |
| 102 | } |
| 103 | |
| 104 | /** Destroy task bar clock. |
| 105 | * |
no test coverage detected