Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset b48e680f in mainline


Ignore:
Timestamp:
2021-11-03T10:23:28Z (4 weeks ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
ec8a1bf
Parents:
ce862ac
git-author:
Jiri Svoboda <jiri@…> (2021-11-02 19:19:50)
git-committer:
Jiri Svoboda <jiri@…> (2021-11-03 10:23:28)
Message:

Allow console application to set the terminal window caption

Location:
uspace
Files:
13 edited

Legend:

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

    rce862ac rb48e680f  
    8888static void term_set_rgb_color(con_srv_t *, pixel_t, pixel_t);
    8989static void term_set_cursor_visibility(con_srv_t *, bool);
     90static errno_t term_set_caption(con_srv_t *, const char *);
    9091static errno_t term_get_event(con_srv_t *, cons_event_t *);
    9192static errno_t term_map(con_srv_t *, sysarg_t, sysarg_t, charfield_t **);
     
    109110        .set_rgb_color = term_set_rgb_color,
    110111        .set_cursor_visibility = term_set_cursor_visibility,
     112        .set_caption = term_set_caption,
    111113        .get_event = term_get_event,
    112114        .map = term_map,
     
    645647}
    646648
     649static errno_t term_set_caption(con_srv_t *srv, const char *caption)
     650{
     651        terminal_t *term = srv_to_terminal(srv);
     652        const char *cap;
     653
     654        fibril_mutex_lock(&term->mtx);
     655
     656        if (str_size(caption) > 0)
     657                cap = caption;
     658        else
     659                cap = "Terminal";
     660
     661        ui_window_set_caption(term->window, cap);
     662        fibril_mutex_unlock(&term->mtx);
     663
     664        term_update(term);
     665        gfx_update(term->gc);
     666        return EOK;
     667}
     668
    647669static errno_t term_get_event(con_srv_t *srv, cons_event_t *event)
    648670{
  • uspace/lib/c/generic/io/con_srv.c

    rce862ac rb48e680f  
    281281}
    282282
     283static void con_set_caption_srv(con_srv_t *srv, ipc_call_t *icall)
     284{
     285        char *caption;
     286        errno_t rc;
     287
     288        rc = async_data_write_accept((void **) &caption, true, 0,
     289            CON_CAPTION_MAXLEN, 0, NULL);
     290        if (rc != EOK) {
     291                async_answer_0(icall, rc);
     292                return;
     293        }
     294
     295        if (srv->srvs->ops->set_caption == NULL) {
     296                async_answer_0(icall, ENOTSUP);
     297                return;
     298        }
     299
     300        srv->srvs->ops->set_caption(srv, caption);
     301        free(caption);
     302        async_answer_0(icall, EOK);
     303}
     304
    283305static void con_get_event_srv(con_srv_t *srv, ipc_call_t *icall)
    284306{
     
    488510                        con_set_cursor_visibility_srv(srv, &call);
    489511                        break;
     512                case CONSOLE_SET_CAPTION:
     513                        con_set_caption_srv(srv, &call);
     514                        break;
    490515                case CONSOLE_GET_EVENT:
    491516                        con_get_event_srv(srv, &call);
  • uspace/lib/c/generic/io/console.c

    rce862ac rb48e680f  
    4040#include <errno.h>
    4141#include <stdlib.h>
     42#include <str.h>
    4243#include <vfs/vfs_sess.h>
    4344#include <io/console.h>
     
    128129        async_req_1_0(exch, CONSOLE_SET_CURSOR_VISIBILITY, (show != false));
    129130        async_exchange_end(exch);
     131}
     132
     133/** Set console caption.
     134 *
     135 * Set caption text for the console (if the console suports captions).
     136 *
     137 * @param ctrl Console
     138 * @param caption Caption text
     139 * @return EOK on success or an error code
     140 */
     141errno_t console_set_caption(console_ctrl_t *ctrl, const char *caption)
     142{
     143        async_exch_t *exch = async_exchange_begin(ctrl->output_sess);
     144        ipc_call_t answer;
     145        aid_t req = async_send_0(exch, CONSOLE_SET_CAPTION, &answer);
     146        errno_t retval = async_data_write_start(exch, caption, str_size(caption));
     147
     148        if (retval != EOK) {
     149                async_forget(req);
     150                async_exchange_end(exch);
     151                return retval;
     152        }
     153
     154        async_wait_for(req, &retval);
     155        async_exchange_end(exch);
     156        return EOK;
    130157}
    131158
  • uspace/lib/c/include/io/con_srv.h

    rce862ac rb48e680f  
    5151typedef struct con_ops con_ops_t;
    5252
     53#define CON_CAPTION_MAXLEN 255
     54
    5355/** Service setup (per sevice) */
    5456typedef struct {
     
    8385        void (*set_rgb_color)(con_srv_t *, pixel_t, pixel_t);
    8486        void (*set_cursor_visibility)(con_srv_t *, bool);
     87        errno_t (*set_caption)(con_srv_t *, const char *);
    8588        errno_t (*get_event)(con_srv_t *, cons_event_t *);
    8689        errno_t (*map)(con_srv_t *, sysarg_t, sysarg_t, charfield_t **);
  • uspace/lib/c/include/io/console.h

    rce862ac rb48e680f  
    8383
    8484extern void console_cursor_visibility(console_ctrl_t *, bool);
     85extern errno_t console_set_caption(console_ctrl_t *, const char *);
    8586extern errno_t console_get_color_cap(console_ctrl_t *, sysarg_t *);
    8687extern errno_t console_get_event(console_ctrl_t *, cons_event_t *);
  • uspace/lib/c/include/ipc/console.h

    rce862ac rb48e680f  
    5050        CONSOLE_SET_RGB_COLOR,
    5151        CONSOLE_SET_CURSOR_VISIBILITY,
     52        CONSOLE_SET_CAPTION,
    5253        CONSOLE_MAP,
    5354        CONSOLE_UNMAP,
  • uspace/lib/ui/include/ui/wdecor.h

    rce862ac rb48e680f  
    11/*
    2  * Copyright (c) 2020 Jiri Svoboda
     2 * Copyright (c) 2021 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5151extern void ui_wdecor_set_rect(ui_wdecor_t *, gfx_rect_t *);
    5252extern void ui_wdecor_set_active(ui_wdecor_t *, bool);
     53extern errno_t ui_wdecor_set_caption(ui_wdecor_t *, const char *);
    5354extern errno_t ui_wdecor_paint(ui_wdecor_t *);
    5455extern ui_evclaim_t ui_wdecor_pos_event(ui_wdecor_t *, pos_event_t *);
  • uspace/lib/ui/include/ui/window.h

    rce862ac rb48e680f  
    5151    ui_window_t **);
    5252extern void ui_window_set_cb(ui_window_t *, ui_window_cb_t *, void *);
     53extern errno_t ui_window_set_caption(ui_window_t *, const char *);
    5354extern void ui_window_destroy(ui_window_t *);
    5455extern void ui_window_add(ui_window_t *, ui_control_t *);
  • uspace/lib/ui/private/window.h

    rce862ac rb48e680f  
    9595        /** Current cursor */
    9696        ui_stock_cursor_t cursor;
     97        /** Window placement */
     98        ui_wnd_placement_t placement;
    9799};
    98100
  • uspace/lib/ui/src/ui.c

    rce862ac rb48e680f  
    5050#include <ui/wdecor.h>
    5151#include <ui/window.h>
     52#include "../private/wdecor.h"
    5253#include "../private/window.h"
    5354#include "../private/ui.h"
     
    372373                return EOK;
    373374
     375        (void) console_set_caption(ui->console, "");
    374376        return console_gc_suspend(ui->cgc);
    375377}
     
    386388{
    387389        errno_t rc;
     390        ui_window_t *awnd;
    388391
    389392        if (ui->cgc == NULL)
     
    393396        if (rc != EOK)
    394397                return rc;
     398
     399        awnd = ui_window_get_active(ui);
     400        if (awnd != NULL)
     401                (void) console_set_caption(ui->console, awnd->wdecor->caption);
    395402
    396403        return gfx_cursor_set_visible(console_gc_get_ctx(ui->cgc), false);
  • uspace/lib/ui/src/wdecor.c

    rce862ac rb48e680f  
    157157{
    158158        wdecor->active = active;
     159}
     160
     161/** Change caption.
     162 *
     163 * @param wdecor Window decoration
     164 * @param caption New caption
     165 *
     166 * @return EOK on success or an error code
     167 */
     168errno_t ui_wdecor_set_caption(ui_wdecor_t *wdecor, const char *caption)
     169{
     170        char *cdup;
     171
     172        cdup = str_dup(caption);
     173        if (cdup == NULL)
     174                return ENOMEM;
     175
     176        free(wdecor->caption);
     177        wdecor->caption = cdup;
     178
     179        ui_wdecor_paint(wdecor);
     180        return EOK;
    159181}
    160182
  • uspace/lib/ui/src/window.c

    rce862ac rb48e680f  
    262262                        gfx_coord2_add(&dparams.rect.p0, &scr_dims,
    263263                            &dparams.rect.p1);
     264                        (void) console_set_caption(ui->console,
     265                            params->caption);
    264266                }
    265267        } else {
     
    355357        window->wdecor = wdecor;
    356358        window->cursor = ui_curs_arrow;
     359        window->placement = params->placement;
    357360        *rwindow = window;
    358361
     
    412415                ui_paint(ui);
    413416        }
     417
     418        if (ui->console != NULL &&
     419            window->placement == ui_wnd_place_full_screen) {
     420                (void) console_set_caption(ui->console, "");
     421        }
    414422}
    415423
     
    599607        window->cb = cb;
    600608        window->arg = arg;
     609}
     610
     611/** Change window caption.
     612 *
     613 * @param window Window
     614 * @param caption New caption
     615 *
     616 * @return EOK on success or an error code
     617 */
     618errno_t ui_window_set_caption(ui_window_t *window, const char *caption)
     619{
     620        return ui_wdecor_set_caption(window->wdecor, caption);
    601621}
    602622
  • uspace/srv/hid/console/console.c

    rce862ac rb48e680f  
    151151static void cons_set_rgb_color(con_srv_t *, pixel_t, pixel_t);
    152152static void cons_set_cursor_visibility(con_srv_t *, bool);
     153static errno_t cons_set_caption(con_srv_t *, const char *);
    153154static errno_t cons_get_event(con_srv_t *, cons_event_t *);
    154155static errno_t cons_map(con_srv_t *, sysarg_t, sysarg_t, charfield_t **);
     
    172173        .set_rgb_color = cons_set_rgb_color,
    173174        .set_cursor_visibility = cons_set_cursor_visibility,
     175        .set_caption = cons_set_caption,
    174176        .get_event = cons_get_event,
    175177        .map = cons_map,
     
    669671}
    670672
     673static errno_t cons_set_caption(con_srv_t *srv, const char *caption)
     674{
     675        console_t *cons = srv_to_console(srv);
     676
     677        (void) cons;
     678        (void) caption;
     679        return EOK;
     680}
     681
    671682static errno_t cons_get_event(con_srv_t *srv, cons_event_t *event)
    672683{
Note: See TracChangeset for help on using the changeset viewer.