Changeset 379cd75f in mainline
- Timestamp:
- 2021-04-01T21:04:11Z (4 years ago)
- Children:
- 0563982
- Parents:
- cd62879
- Location:
- uspace/lib/ui
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/include/types/ui/control.h
rcd62879 r379cd75f 52 52 /** Position event */ 53 53 ui_evclaim_t (*pos_event)(void *, pos_event_t *); 54 /** Unfocus */ 55 void (*unfocus)(void *); 54 56 } ui_control_ops_t; 55 57 -
uspace/lib/ui/include/ui/control.h
rcd62879 r379cd75f 47 47 extern errno_t ui_control_paint(ui_control_t *); 48 48 extern ui_evclaim_t ui_control_pos_event(ui_control_t *, pos_event_t *); 49 extern void ui_control_unfocus(ui_control_t *); 49 50 50 51 #endif -
uspace/lib/ui/include/ui/fixed.h
rcd62879 r379cd75f 50 50 extern errno_t ui_fixed_paint(ui_fixed_t *); 51 51 extern ui_evclaim_t ui_fixed_pos_event(ui_fixed_t *, pos_event_t *); 52 extern void ui_fixed_unfocus(ui_fixed_t *); 52 53 53 54 #endif -
uspace/lib/ui/include/ui/menubar.h
rcd62879 r379cd75f 52 52 extern errno_t ui_menu_bar_paint(ui_menu_bar_t *); 53 53 extern ui_evclaim_t ui_menu_bar_pos_event(ui_menu_bar_t *, pos_event_t *); 54 extern void ui_menu_bar_unfocus(ui_menu_bar_t *); 54 55 55 56 #endif -
uspace/lib/ui/include/ui/window.h
rcd62879 r379cd75f 61 61 extern errno_t ui_window_def_paint(ui_window_t *); 62 62 extern void ui_window_def_pos(ui_window_t *, pos_event_t *); 63 extern void ui_window_def_unfocus(ui_window_t *); 63 64 64 65 #endif -
uspace/lib/ui/src/control.c
rcd62879 r379cd75f 112 112 } 113 113 114 /** Inform UI control that window has been unfocused. 115 * 116 * @param control Control 117 */ 118 void ui_control_unfocus(ui_control_t *control) 119 { 120 if (control->ops->unfocus != NULL) 121 control->ops->unfocus(control->ext); 122 } 123 114 124 /** @} 115 125 */ -
uspace/lib/ui/src/fixed.c
rcd62879 r379cd75f 47 47 static errno_t ui_fixed_ctl_paint(void *); 48 48 static ui_evclaim_t ui_fixed_ctl_pos_event(void *, pos_event_t *); 49 static void ui_fixed_ctl_unfocus(void *); 49 50 50 51 /** Push button control ops */ … … 52 53 .destroy = ui_fixed_ctl_destroy, 53 54 .paint = ui_fixed_ctl_paint, 54 .pos_event = ui_fixed_ctl_pos_event 55 .pos_event = ui_fixed_ctl_pos_event, 56 .unfocus = ui_fixed_ctl_unfocus 55 57 }; 56 58 … … 232 234 } 233 235 236 /** Handle fixed layout window unfocus notification. 237 * 238 * @param fixed Fixed layout 239 */ 240 void ui_fixed_unfocus(ui_fixed_t *fixed) 241 { 242 ui_fixed_elem_t *elem; 243 244 elem = ui_fixed_first(fixed); 245 while (elem != NULL) { 246 ui_control_unfocus(elem->control); 247 248 elem = ui_fixed_next(elem); 249 } 250 } 251 234 252 /** Destroy fixed layout control. 235 253 * … … 268 286 } 269 287 288 /** Handle fixed layout control window unfocus notification. 289 * 290 * @param arg Argument (ui_fixed_t *) 291 */ 292 void ui_fixed_ctl_unfocus(void *arg) 293 { 294 ui_fixed_t *fixed = (ui_fixed_t *) arg; 295 296 ui_fixed_unfocus(fixed); 297 } 298 270 299 /** @} 271 300 */ -
uspace/lib/ui/src/menubar.c
rcd62879 r379cd75f 60 60 static errno_t ui_menu_bar_ctl_paint(void *); 61 61 static ui_evclaim_t ui_menu_bar_ctl_pos_event(void *, pos_event_t *); 62 static void ui_menu_bar_ctl_unfocus(void *); 62 63 63 64 /** Menu bar control ops */ … … 65 66 .destroy = ui_menu_bar_ctl_destroy, 66 67 .paint = ui_menu_bar_ctl_paint, 67 .pos_event = ui_menu_bar_ctl_pos_event 68 .pos_event = ui_menu_bar_ctl_pos_event, 69 .unfocus = ui_menu_bar_ctl_unfocus 68 70 }; 69 71 … … 328 330 } 329 331 332 /** Handle menu bar window unfocus notification. 333 * 334 * @param mbar Menu bar 335 */ 336 void ui_menu_bar_unfocus(ui_menu_bar_t *mbar) 337 { 338 ui_menu_bar_select(mbar, NULL, NULL); 339 } 340 330 341 /** Destroy menu bar control. 331 342 * … … 364 375 } 365 376 377 /** Handle menu bar control window unfocus notification. 378 * 379 * @param arg Argument (ui_menu_bar_t *) 380 */ 381 void ui_menu_bar_ctl_unfocus(void *arg) 382 { 383 ui_menu_bar_t *mbar = (ui_menu_bar_t *) arg; 384 385 ui_menu_bar_unfocus(mbar); 386 } 387 366 388 /** @} 367 389 */ -
uspace/lib/ui/src/window.c
rcd62879 r379cd75f 815 815 if (window->cb != NULL && window->cb->unfocus != NULL) 816 816 window->cb->unfocus(window, window->arg); 817 else 818 return ui_window_def_unfocus(window); 817 819 } 818 820 … … 850 852 * 851 853 * @param window Window 852 * @return EOK on success or an error code853 854 */ 854 855 void ui_window_def_pos(ui_window_t *window, pos_event_t *pos) … … 856 857 if (window->control != NULL) 857 858 ui_control_pos_event(window->control, pos); 859 } 860 861 /** Default window unfocus routine. 862 * 863 * @param window Window 864 * @return EOK on success or an error code 865 */ 866 void ui_window_def_unfocus(ui_window_t *window) 867 { 868 if (window->control != NULL) 869 ui_control_unfocus(window->control); 858 870 } 859 871 -
uspace/lib/ui/test/control.c
rcd62879 r379cd75f 42 42 static errno_t test_ctl_paint(void *); 43 43 static ui_evclaim_t test_ctl_pos_event(void *, pos_event_t *); 44 static void test_ctl_unfocus(void *); 44 45 45 46 static ui_control_ops_t test_ctl_ops = { 46 47 .destroy = test_ctl_destroy, 47 48 .paint = test_ctl_paint, 48 .pos_event = test_ctl_pos_event 49 .pos_event = test_ctl_pos_event, 50 .unfocus = test_ctl_unfocus 49 51 }; 50 52 … … 66 68 /** Position event that was sent */ 67 69 pos_event_t pevent; 70 71 /** @c true iff unfocus was called */ 72 bool unfocus; 68 73 } test_resp_t; 69 74 … … 166 171 } 167 172 173 /** Test sending unfocus to control */ 174 PCUT_TEST(unfocus) 175 { 176 ui_control_t *control = NULL; 177 test_resp_t resp; 178 errno_t rc; 179 180 rc = ui_control_new(&test_ctl_ops, &resp, &control); 181 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 182 PCUT_ASSERT_NOT_NULL(control); 183 184 resp.unfocus = false; 185 186 ui_control_unfocus(control); 187 PCUT_ASSERT_TRUE(resp.unfocus); 188 189 ui_control_delete(control); 190 } 191 168 192 static void test_ctl_destroy(void *arg) 169 193 { … … 191 215 } 192 216 217 static void test_ctl_unfocus(void *arg) 218 { 219 test_resp_t *resp = (test_resp_t *) arg; 220 221 resp->unfocus = true; 222 } 223 193 224 PCUT_EXPORT(control); -
uspace/lib/ui/test/fixed.c
rcd62879 r379cd75f 41 41 static errno_t test_ctl_paint(void *); 42 42 static ui_evclaim_t test_ctl_pos_event(void *, pos_event_t *); 43 static void test_ctl_unfocus(void *); 43 44 44 45 static ui_control_ops_t test_ctl_ops = { 45 46 .destroy = test_ctl_destroy, 46 47 .paint = test_ctl_paint, 47 .pos_event = test_ctl_pos_event 48 .pos_event = test_ctl_pos_event, 49 .unfocus = test_ctl_unfocus 48 50 }; 49 51 … … 62 64 /** Position event that was sent */ 63 65 pos_event_t pevent; 66 /** @c true iff unfocus was called */ 67 bool unfocus; 64 68 } test_resp_t; 65 69 … … 230 234 } 231 235 236 /** ui_fixed_unfocus() delivers unfocus notification to control */ 237 PCUT_TEST(unfocus) 238 { 239 ui_fixed_t *fixed = NULL; 240 ui_control_t *control; 241 test_resp_t resp; 242 errno_t rc; 243 244 rc = ui_fixed_create(&fixed); 245 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 246 247 rc = ui_control_new(&test_ctl_ops, (void *) &resp, &control); 248 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 249 250 rc = ui_fixed_add(fixed, control); 251 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 252 253 resp.unfocus = false; 254 255 ui_fixed_unfocus(fixed); 256 PCUT_ASSERT_TRUE(resp.unfocus); 257 258 ui_fixed_destroy(fixed); 259 } 260 232 261 static void test_ctl_destroy(void *arg) 233 262 { … … 255 284 } 256 285 286 static void test_ctl_unfocus(void *arg) 287 { 288 test_resp_t *resp = (test_resp_t *) arg; 289 290 resp->unfocus = true; 291 } 292 257 293 PCUT_EXPORT(fixed); -
uspace/lib/ui/test/window.c
rcd62879 r379cd75f 66 66 static errno_t test_ctl_paint(void *); 67 67 static ui_evclaim_t test_ctl_pos_event(void *, pos_event_t *); 68 static void test_ctl_unfocus(void *); 68 69 69 70 static ui_control_ops_t test_ctl_ops = { 70 71 .paint = test_ctl_paint, 71 .pos_event = test_ctl_pos_event 72 .pos_event = test_ctl_pos_event, 73 .unfocus = test_ctl_unfocus 72 74 }; 73 75 … … 90 92 bool pos; 91 93 pos_event_t pos_event; 94 bool unfocus; 92 95 } test_ctl_resp_t; 93 96 … … 388 391 PCUT_ASSERT_INT_EQUALS(event.hpos, resp.pos_event.hpos); 389 392 PCUT_ASSERT_INT_EQUALS(event.vpos, resp.pos_event.vpos); 393 394 /* Need to remove first because we didn't implement the destructor */ 395 ui_window_remove(window, control); 396 397 ui_window_destroy(window); 398 ui_destroy(ui); 399 } 400 401 /** ui_window_def_unfocus() delivers unfocus event to control in window */ 402 PCUT_TEST(def_unfocus) 403 { 404 errno_t rc; 405 ui_t *ui = NULL; 406 ui_wnd_params_t params; 407 ui_window_t *window = NULL; 408 ui_control_t *control = NULL; 409 test_ctl_resp_t resp; 410 411 rc = ui_create_disp(NULL, &ui); 412 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 413 414 ui_wnd_params_init(¶ms); 415 params.caption = "Hello"; 416 417 rc = ui_window_create(ui, ¶ms, &window); 418 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 419 420 rc = ui_control_new(&test_ctl_ops, &resp, &control); 421 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 422 423 ui_window_add(window, control); 424 425 resp.unfocus = false; 426 427 ui_window_def_unfocus(window); 428 PCUT_ASSERT_TRUE(resp.unfocus); 390 429 391 430 /* Need to remove first because we didn't implement the destructor */ … … 701 740 } 702 741 742 static void test_ctl_unfocus(void *arg) 743 { 744 test_ctl_resp_t *resp = (test_ctl_resp_t *) arg; 745 746 resp->unfocus = true; 747 } 748 703 749 PCUT_EXPORT(window);
Note:
See TracChangeset
for help on using the changeset viewer.