Changeset 806d761 in mainline for uspace/app/taskbar/tbsmenu.c
- Timestamp:
- 2024-02-07T23:44:59Z (12 months ago)
- Branches:
- master
- Children:
- 242e3c3
- Parents:
- 74cb6610
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/taskbar/tbsmenu.c
r74cb6610 r806d761 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 131 131 const char *caption; 132 132 const char *cmd; 133 bool terminal; 133 134 errno_t rc; 134 135 … … 141 142 caption = smenu_entry_get_caption(sme); 142 143 cmd = smenu_entry_get_cmd(sme); 143 144 rc = tbsmenu_add(tbsmenu, caption, cmd, &tentry); 144 terminal = smenu_entry_get_terminal(sme); 145 146 rc = tbsmenu_add(tbsmenu, caption, cmd, terminal, &tentry); 145 147 if (rc != EOK) 146 148 goto error; … … 226 228 * @param caption Caption 227 229 * @param cmd Command to run 230 * @param terminal Start in terminal 228 231 * @param entry Start menu entry 229 232 * @return @c EOK on success or an error code 230 233 */ 231 234 errno_t tbsmenu_add(tbsmenu_t *tbsmenu, const char *caption, 232 const char *cmd, tbsmenu_entry_t **rentry)235 const char *cmd, bool terminal, tbsmenu_entry_t **rentry) 233 236 { 234 237 errno_t rc; … … 250 253 goto error; 251 254 } 255 256 entry->terminal = terminal; 252 257 253 258 rc = ui_menu_entry_create(tbsmenu->smenu, caption, "", &entry->mentry); … … 438 443 } 439 444 445 cmd->argv[cnt] = NULL; 446 440 447 return EOK; 441 448 } … … 465 472 int retval; 466 473 bool suspended; 474 int i; 475 int cnt; 476 char **cp; 477 const char **targv = NULL; 467 478 errno_t rc; 468 479 ui_t *ui; … … 482 493 suspended = true; 483 494 484 rc = task_spawnv(&id, &wait, cmd.argv[0], (const char *const *) 485 cmd.argv); 486 if (rc != EOK) 487 goto error; 495 /* Don't start in terminal if not running in a window */ 496 if (entry->terminal && !ui_is_fullscreen(ui)) { 497 cnt = 0; 498 cp = cmd.argv; 499 while (*cp != NULL) { 500 ++cnt; 501 ++cp; 502 } 503 504 targv = calloc(cnt + 3, sizeof(char **)); 505 if (targv == NULL) 506 goto error; 507 508 targv[0] = "/app/terminal"; 509 targv[1] = "-c"; 510 511 for (i = 0; i <= cnt; i++) { 512 if (cmd.argv[i] != NULL) 513 printf(" - '%s'\n", cmd.argv[i]); 514 else 515 printf(" - NULL\n"); 516 517 targv[2 + i] = cmd.argv[i]; 518 } 519 520 rc = task_spawnv(&id, &wait, targv[0], targv); 521 if (rc != EOK) 522 goto error; 523 524 free(targv); 525 targv = NULL; 526 } else { 527 rc = task_spawnv(&id, &wait, cmd.argv[0], (const char *const *) 528 cmd.argv); 529 if (rc != EOK) 530 goto error; 531 } 488 532 489 533 rc = task_wait(&wait, &texit, &retval); … … 499 543 return EOK; 500 544 error: 545 if (targv != NULL) 546 free(targv); 501 547 tbsmenu_cmd_fini(&cmd); 502 548 if (suspended)
Note:
See TracChangeset
for help on using the changeset viewer.