Changeset b336bfd8 in mainline for uspace/app/nav/nav.c


Ignore:
Timestamp:
2025-02-06T20:42:14Z (6 days ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
a7a16a2f
Parents:
accdf882
Message:

Start text editor if open action is used on .txt file.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/nav/nav.c

    raccdf882 rb336bfd8  
    7070
    7171static void navigator_panel_activate_req(void *, panel_t *);
     72static void navigator_panel_file_open(void *, panel_t *, const char *);
    7273
    7374static panel_cb_t navigator_panel_cb = {
    74         .activate_req = navigator_panel_activate_req
     75        .activate_req = navigator_panel_activate_req,
     76        .file_open = navigator_panel_file_open
    7577};
    7678
     
    328330/** Open file in text editor.
    329331 *
    330  * @param panel Panel
     332 * @param navigator Navigator
    331333 * @param fname File name
    332334 *
     
    367369}
    368370
     371/** Execute file entry.
     372 *
     373 * @param navigator Navigator
     374 * @param fname File name
     375 *
     376 * @return EOK on success or an error code
     377 */
     378static errno_t navigator_exec_file(navigator_t *navigator, const char *fname)
     379{
     380        task_id_t id;
     381        task_wait_t wait;
     382        task_exit_t texit;
     383        int retval;
     384        errno_t rc;
     385
     386        /* Free up and clean console for the child task. */
     387        rc = ui_suspend(navigator->ui);
     388        if (rc != EOK)
     389                return rc;
     390
     391        rc = task_spawnl(&id, &wait, fname, fname, NULL);
     392        if (rc != EOK)
     393                goto error;
     394
     395        rc = task_wait(&wait, &texit, &retval);
     396        if ((rc != EOK) || (texit != TASK_EXIT_NORMAL))
     397                goto error;
     398
     399        /* Resume UI operation */
     400        rc = ui_resume(navigator->ui);
     401        if (rc != EOK)
     402                return rc;
     403
     404        (void) ui_paint(navigator->ui);
     405        return EOK;
     406error:
     407        (void) ui_resume(navigator->ui);
     408        (void) ui_paint(navigator->ui);
     409        return rc;
     410}
     411
     412/** Open panel file entry.
     413 *
     414 * Perform Open action on a file entry (based on extension).
     415 *
     416 * @param navigator Navigator
     417 * @param fname File name
     418 *
     419 * @return EOK on success or an error code
     420 */
     421static errno_t navigator_open_file(navigator_t *navigator, const char *fname)
     422{
     423        const char *ext;
     424
     425        ext = str_rchr(fname, '.');
     426        if (ext != NULL) {
     427                if (str_casecmp(ext, ".txt") == 0)
     428                        return navigator_edit_file(navigator, fname);
     429        }
     430
     431        return navigator_exec_file(navigator, fname);
     432}
     433
    369434/** File / Edit menu entry selected */
    370435static void navigator_file_edit(void *arg)
     
    403468}
    404469
     470/** Panel callback requesting file open.
     471 *
     472 * @param arg Argument (navigator_t *)
     473 * @param panel Panel
     474 * @param fname File name
     475 */
     476void navigator_panel_file_open(void *arg, panel_t *panel, const char *fname)
     477{
     478        navigator_t *navigator = (navigator_t *)arg;
     479
     480        (void)panel;
     481        navigator_open_file(navigator, fname);
     482}
     483
    405484/** @}
    406485 */
Note: See TracChangeset for help on using the changeset viewer.