Changeset c632c96 in mainline
- Timestamp:
- 2021-10-25T00:32:45Z (3 years ago)
- Branches:
- master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 39ab17c
- Parents:
- f59212cc
- git-author:
- Jiri Svoboda <jiri@…> (2021-10-20 22:22:04)
- git-committer:
- jxsvoboda <5887334+jxsvoboda@…> (2021-10-25 00:32:45)
- Location:
- uspace
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/nav/panel.c
rf59212cc rc632c96 1079 1079 int retval; 1080 1080 errno_t rc; 1081 ui_t *ui; 1081 1082 1082 1083 /* It's not a directory */ … … 1085 1086 assert(entry->svc == 0); 1086 1087 1088 ui = ui_window_get_ui(panel->window); 1089 1090 /* Free up and clean console for the child task. */ 1091 rc = ui_suspend(ui); 1092 if (rc != EOK) 1093 return rc; 1094 1087 1095 rc = task_spawnl(&id, &wait, entry->name, entry->name, NULL); 1088 1096 if (rc != EOK) 1089 return rc;1097 goto error; 1090 1098 1091 1099 rc = task_wait(&wait, &texit, &retval); 1092 1100 if ((rc != EOK) || (texit != TASK_EXIT_NORMAL)) 1101 goto error; 1102 1103 /* Resume UI operation */ 1104 rc = ui_resume(ui); 1105 if (rc != EOK) 1093 1106 return rc; 1094 1107 1095 1108 (void) ui_paint(ui_window_get_ui(panel->window)); 1096 1109 return EOK; 1110 error: 1111 (void) ui_resume(ui); 1112 (void) ui_paint(ui_window_get_ui(panel->window)); 1113 return rc; 1097 1114 } 1098 1115 -
uspace/lib/congfx/include/congfx/console.h
rf59212cc rc632c96 47 47 extern errno_t console_gc_create(console_ctrl_t *, FILE *, console_gc_t **); 48 48 extern errno_t console_gc_delete(console_gc_t *); 49 extern errno_t console_gc_suspend(console_gc_t *); 50 extern errno_t console_gc_resume(console_gc_t *); 49 51 extern gfx_context_t *console_gc_get_ctx(console_gc_t *); 50 52 -
uspace/lib/congfx/src/console.c
rf59212cc rc632c96 281 281 } 282 282 283 /** Free up console for other users, suspending GC operation. 284 * 285 * @param cgc Console GC 286 * @return EOK on success or an error code 287 */ 288 errno_t console_gc_suspend(console_gc_t *cgc) 289 { 290 console_unmap(cgc->con, cgc->buf); 291 cgc->buf = NULL; 292 293 console_clear(cgc->con); 294 console_cursor_visibility(cgc->con, true); 295 return EOK; 296 } 297 298 /** Resume GC operation after suspend. 299 * 300 * @param cgc Console GC 301 * @return EOK on success or an error code 302 */ 303 errno_t console_gc_resume(console_gc_t *cgc) 304 { 305 errno_t rc; 306 307 console_clear(cgc->con); 308 309 rc = console_map(cgc->con, cgc->rect.p1.x, cgc->rect.p1.y, &cgc->buf); 310 if (rc != EOK) 311 return rc; 312 313 return EOK; 314 } 315 283 316 /** Get generic graphic context from console GC. 284 317 * -
uspace/lib/ui/include/ui/ui.h
rf59212cc rc632c96 52 52 extern bool ui_is_textmode(ui_t *); 53 53 extern bool ui_is_fullscreen(ui_t *); 54 extern errno_t ui_suspend(ui_t *); 55 extern errno_t ui_resume(ui_t *); 54 56 55 57 #endif -
uspace/lib/ui/src/ui.c
rf59212cc rc632c96 40 40 #include <fibril.h> 41 41 #include <gfx/color.h> 42 #include <gfx/cursor.h> 42 43 #include <gfx/render.h> 43 44 #include <io/console.h> … … 355 356 } 356 357 358 /** Free up console for other users. 359 * 360 * Release console resources for another application (that the current 361 * task is starting). After the other application finishes, resume 362 * operation with ui_resume(). No calls to UI must happen inbetween 363 * and no events must be processed (i.e. the calling function must not 364 * return control to UI. 365 * 366 * @param ui UI 367 * @return EOK on success or an error code 368 */ 369 errno_t ui_suspend(ui_t *ui) 370 { 371 if (ui->cgc == NULL) 372 return EOK; 373 374 return console_gc_suspend(ui->cgc); 375 } 376 377 /** Resume suspended UI. 378 * 379 * Reclaim console resources (after child application has finished running) 380 * and restore UI operation previously suspended by calling ui_suspend(). 381 * 382 * @param ui UI 383 * @return EOK on success or an error code 384 */ 385 errno_t ui_resume(ui_t *ui) 386 { 387 errno_t rc; 388 389 if (ui->cgc == NULL) 390 return EOK; 391 392 rc = console_gc_resume(ui->cgc); 393 if (rc != EOK) 394 return rc; 395 396 return gfx_cursor_set_visible(console_gc_get_ctx(ui->cgc), false); 397 } 398 357 399 /** Terminate user interface. 358 400 * -
uspace/lib/ui/test/ui.c
rf59212cc rc632c96 67 67 { 68 68 ui_destroy(NULL); 69 } 70 71 /** ui_suspend() / ui_resume() do nothing if we don't have a console */ 72 PCUT_TEST(suspend_resume) 73 { 74 ui_t *ui = NULL; 75 errno_t rc; 76 77 rc = ui_create_disp(NULL, &ui); 78 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 79 PCUT_ASSERT_NOT_NULL(ui); 80 81 rc = ui_suspend(ui); 82 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 83 rc = ui_resume(ui); 84 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 85 86 ui_destroy(ui); 69 87 } 70 88
Note:
See TracChangeset
for help on using the changeset viewer.