Changes in / [56a3c29e:4f6368c] in mainline


Ignore:
Files:
45 added
33 deleted
65 edited

Legend:

Unmodified
Added
Removed
  • meson/arch/ia64/meson.build

    r56a3c29e r4f6368c  
    3636arch_boot_c_args = [ '-D__LE__', '-fno-unwind-tables', '-mfixed-range=f32-f127', '-mno-pic', '-mno-sdata' ]
    3737
     38# work around GCC bug 112604
     39arch_uspace_c_args += ['-fno-unswitch-loops']
     40
    3841arch_uspace_link_args = [ '-nostdlib', '-lgcc' ]
    3942arch_kernel_link_args = [ '-nostdlib', '-Wl,-EL', '-Wl,--no-warn-rwx-segments']
  • uspace/app/corecfg/meson.build

    r56a3c29e r4f6368c  
    11#
    2 # Copyright (c) 2013 Jiri Svoboda
     2# Copyright (c) 2023 Jiri Svoboda
    33# All rights reserved.
    44#
     
    2727#
    2828
     29deps = [ 'corecfg' ]
    2930src = files('corecfg.c')
  • uspace/app/hbench/meson.build

    r56a3c29e r4f6368c  
    11#
    2 # Copyright (c) 2018 Jiri Svoboda
     2# Copyright (c) 2023 Jiri Svoboda
    33# All rights reserved.
    44#
     
    2727#
    2828
    29 deps = [ 'math' ]
     29deps = [ 'math', 'ipctest' ]
    3030src = files(
    3131        'benchlist.c',
  • uspace/app/mkbd/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
    29 deps = [ 'usb', 'usbdev', 'usbhid', 'drv' ]
     29deps = [ 'usb', 'usbdev', 'usbhid', 'drv', 'console' ]
    3030src = files('main.c')
  • uspace/app/modplay/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
    29 deps = [ 'trackmod', 'hound', 'pcm' ]
     29deps = [ 'trackmod', 'hound', 'pcm', 'console' ]
    3030src = files('modplay.c')
    3131
  • uspace/app/netecho/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
    29 deps = [ 'inet' ]
     29deps = [ 'inet', 'console' ]
    3030src = files('comm.c', 'netecho.c')
  • uspace/app/nterm/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
    29 deps = [ 'inet' ]
     29deps = [ 'inet', 'console' ]
    3030src = files('conn.c', 'nterm.c')
  • uspace/app/ping/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
    29 deps = [ 'inet' ]
     29deps = [ 'inet', 'console' ]
    3030src = files('ping.c')
  • uspace/app/taskbar-cfg/smeedit.c

    r56a3c29e r4f6368c  
    4141#include "taskbar-cfg.h"
    4242#include "smeedit.h"
     43#include "startmenu.h"
    4344
    4445static void wnd_close(ui_window_t *, void *);
     
    111112        }
    112113
     114        smee->startmenu = smenu;
    113115        smee->smentry = smentry;
    114116
     
    361363
    362364        (void)smenu_entry_save(smee->smentry->entry);
    363 
     365        startmenu_entry_update(smee->smentry);
    364366        smeedit_destroy(smee);
    365367}
  • uspace/app/taskbar-cfg/startmenu.c

    r56a3c29e r4f6368c  
    349349        smentry->entry = entry;
    350350
    351         printf("startmenu_insert: smentry=%p entry=%p\n",
    352             smentry, entry);
    353351        ui_list_entry_attr_init(&attr);
    354352        attr.caption = smenu_entry_get_caption(entry);
     
    390388        smentry = startmenu_get_selected(smenu);
    391389
    392         printf("smeedit_create:entry=%p\n", smentry);
    393390        rc = smeedit_create(smenu, smentry, &smee);
    394391        if (rc != EOK)
     
    398395}
    399396
     397/** Update start menu entry caption.
     398 *
     399 * When editing an entry the entry's label might change. We need
     400 * to update the list entry caption to reflect that.
     401 *
     402 * @param entry Start menu entry
     403 */
     404errno_t startmenu_entry_update(startmenu_entry_t *entry)
     405{
     406        return ui_list_entry_set_caption(entry->lentry,
     407            smenu_entry_get_caption(entry->entry));
     408}
     409
    400410/** Entry in entry list is selected.
    401411 *
  • uspace/app/taskbar-cfg/startmenu.h

    r56a3c29e r4f6368c  
    4848extern startmenu_entry_t *startmenu_get_selected(startmenu_t *);
    4949extern void startmenu_edit(startmenu_t *);
     50extern errno_t startmenu_entry_update(startmenu_entry_t *);
    5051
    5152#endif
  • uspace/app/tester/meson.build

    r56a3c29e r4f6368c  
    11#
    2 # Copyright (c) 2021 Jiri Svoboda
     2# Copyright (c) 2023 Jiri Svoboda
    33# Copyright (c) 2005 Martin Decky
    44# Copyright (c) 2007 Jakub Jermar
     
    2929#
    3030
    31 deps = [ 'block', 'codepage', 'drv', 'math' ]
     31deps = [ 'block', 'codepage', 'drv', 'math', 'ipctest', 'console' ]
    3232src = files(
    3333        'tester.c',
  • uspace/app/tetris/meson.build

    r56a3c29e r4f6368c  
    2828#
    2929
     30deps = [ 'console' ]
    3031src = files(
    3132        'shapes.c',
  • uspace/app/top/meson.build

    r56a3c29e r4f6368c  
    2828#
    2929
     30deps = [ 'console' ]
    3031src = files(
    3132        'top.c',
  • uspace/app/trace/meson.build

    r56a3c29e r4f6368c  
    2828#
    2929
     30deps = [ 'console' ]
    3031src = files(
    3132        'trace.c',
  • uspace/app/uidemo/uidemo.c

    r56a3c29e r4f6368c  
    288288        pos = ui_scrollbar_get_pos(scrollbar);
    289289        ui_scrollbar_set_pos(scrollbar, pos -
    290             ui_scrollbar_through_length(scrollbar) / 4);
     290            ui_scrollbar_trough_length(scrollbar) / 4);
    291291
    292292        pos = ui_scrollbar_get_pos(scrollbar);
     
    305305        pos = ui_scrollbar_get_pos(scrollbar);
    306306        ui_scrollbar_set_pos(scrollbar, pos +
    307             ui_scrollbar_through_length(scrollbar) / 4);
     307            ui_scrollbar_trough_length(scrollbar) / 4);
    308308
    309309        pos = ui_scrollbar_get_pos(scrollbar);
     
    12701270
    12711271        ui_scrollbar_set_thumb_length(demo.hscrollbar,
    1272             ui_scrollbar_through_length(demo.hscrollbar) / 4);
     1272            ui_scrollbar_trough_length(demo.hscrollbar) / 4);
    12731273
    12741274        rc = ui_fixed_add(demo.bfixed, ui_scrollbar_ctl(demo.hscrollbar));
     
    13021302
    13031303        ui_scrollbar_set_thumb_length(demo.vscrollbar,
    1304             ui_scrollbar_through_length(demo.vscrollbar) / 4);
     1304            ui_scrollbar_trough_length(demo.vscrollbar) / 4);
    13051305
    13061306        rc = ui_fixed_add(demo.bfixed, ui_scrollbar_ctl(demo.vscrollbar));
  • uspace/drv/hid/adb-kbd/adb-kbd.c

    r56a3c29e r4f6368c  
    3434#include <ddf/log.h>
    3535#include <errno.h>
    36 #include <io/console.h>
     36#include <io/kbd_event.h>
    3737#include <ipc/adb.h>
    3838#include <ipc/kbdev.h>
  • uspace/drv/hid/adb-kbd/ctl.c

    r56a3c29e r4f6368c  
    3333
    3434#include <errno.h>
    35 #include <io/console.h>
     35#include <io/kbd_event.h>
    3636#include <io/keycode.h>
    3737
  • uspace/drv/hid/adb-kbd/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
     29deps = [ 'input' ]
    2930src = files(
    3031        'main.c',
  • uspace/drv/hid/adb-mouse/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
     29deps = [ 'input' ]
    2930src = files('main.c', 'adb-mouse.c')
  • uspace/drv/hid/atkbd/atkbd.c

    r56a3c29e r4f6368c  
    3838#include <errno.h>
    3939#include <ddf/log.h>
     40#include <io/kbd_event.h>
    4041#include <io/keycode.h>
    4142#include <io/chardev.h>
    42 #include <io/console.h>
    4343#include <ipc/kbdev.h>
    4444#include <abi/ipc/methods.h>
  • uspace/drv/hid/atkbd/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
     29deps = [ 'input' ]
    2930src = files('main.c', 'atkbd.c')
  • uspace/drv/hid/ps2mouse/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
     29deps = [ 'input' ]
    2930src = files('main.c', 'ps2mouse.c')
  • uspace/drv/hid/ps2mouse/ps2mouse.c

    r56a3c29e r4f6368c  
    4040#include <io/keycode.h>
    4141#include <io/chardev.h>
    42 #include <io/console.h>
    4342#include <ipc/mouseev.h>
    4443#include <abi/ipc/methods.h>
  • uspace/drv/hid/usbhid/kbd/kbddev.c

    r56a3c29e r4f6368c  
    4141
    4242#include <io/keycode.h>
    43 #include <io/console.h>
     43#include <io/kbd_event.h>
    4444#include <abi/ipc/methods.h>
    4545#include <ipc/kbdev.h>
  • uspace/drv/hid/usbhid/kbd/kbdrepeat.c

    r56a3c29e r4f6368c  
    3636
    3737#include <fibril_synch.h>
     38#include <io/kbd_event.h>
    3839#include <io/keycode.h>
    39 #include <io/console.h>
    4040#include <errno.h>
    4141
  • uspace/drv/hid/usbhid/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
    29 deps = [ 'usbhid', 'usbdev', 'usb' ]
     29deps = [ 'usbhid', 'usbdev', 'usb', 'input' ]
    3030includes += [ include_directories('.') ]
    3131src = files(
  • uspace/drv/hid/usbhid/mouse/mousedev.c

    r56a3c29e r4f6368c  
    4646#include <str_error.h>
    4747#include <ipc/mouseev.h>
    48 #include <io/console.h>
    4948
    5049#include <ipc/kbdev.h>
  • uspace/drv/hid/usbhid/multimedia/multimedia.c

    r56a3c29e r4f6368c  
    5151
    5252#include <ipc/kbdev.h>
    53 #include <io/console.h>
     53#include <io/kbd_event.h>
    5454
    5555#define NAME  "multimedia-keys"
  • uspace/drv/hid/xtkbd/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
     29deps = [ 'input' ]
    2930src = files('main.c', 'xtkbd.c')
  • uspace/drv/hid/xtkbd/xtkbd.c

    r56a3c29e r4f6368c  
    3939#include <io/keycode.h>
    4040#include <io/chardev.h>
    41 #include <io/console.h>
     41#include <io/kbd_event.h>
    4242#include <ipc/kbdev.h>
    4343#include <abi/ipc/methods.h>
  • uspace/lib/c/meson.build

    r56a3c29e r4f6368c  
    4949allow_shared = true
    5050
    51 # FIXME: symlinks from uspace to kernel will break in future Meson version
    52 #        we should instead move the duplicated library parts into a shared location.
    53 
    5451uspace_lib_devel_install_script_text += 'mkdir -p "${DESTDIR}include/libc"'
    5552foreach idir : incdirs
     
    6663        'common/adt/hash_table.c',
    6764        'common/adt/odict.c',
    68         'common/adt/prodcons.c',
    6965        'common/printf/printf_core.c',
    7066        'common/stdc/ctype.c',
     
    7975
    8076        'generic/libc.c',
     77        'generic/adt/prodcons.c',
    8178        'generic/as.c',
    8279        'generic/ddi.c',
    8380        'generic/perm.c',
    8481        'generic/capa.c',
    85         'generic/clipboard.c',
    8682        'generic/config.c',
    8783        'generic/context.c',
    88         'generic/corecfg.c',
    8984        'generic/device/clock_dev.c',
    9085        'generic/device/hw_res.c',
     
    9994        'generic/errno.c',
    10095        'generic/inttypes.c',
    101         'generic/ipc_test.c',
    10296        'generic/loc.c',
    10397        'generic/string.c',
     
    109103        'generic/imath.c',
    110104        'generic/io/asprintf.c',
    111         'generic/io/input.c',
    112105        'generic/io/io.c',
    113         'generic/io/chargrid.c',
    114         'generic/io/output.c',
    115106        'generic/io/printf.c',
    116107        'generic/io/log.c',
     
    121112        'generic/io/vprintf.c',
    122113        'generic/io/vsnprintf.c',
    123         'generic/io/con_srv.c',
    124         'generic/io/console.c',
    125114        'generic/io/table.c',
    126115        'generic/irq.c',
  • uspace/lib/clui/meson.build

    r56a3c29e r4f6368c  
    11#
    2 # Copyright (c) 2010 Jiri Svoboda
     2# Copyright (c) 2023 Jiri Svoboda
    33# All rights reserved.
    44#
     
    2727#
    2828
     29deps = [ 'clipboard', 'console' ]
    2930src = files(
    3031        'nchoice.c',
  • uspace/lib/congfx/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
    29 deps = [ 'gfx' ]
     29deps = [ 'gfx', 'console' ]
    3030src = files(
    3131        'src/console.c',
  • uspace/lib/display/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
    29 deps = [ 'gfx', 'ipcgfx' ]
     29deps = [ 'gfx', 'ipcgfx', 'input' ]
    3030src = files(
    3131        'src/display.c',
  • uspace/lib/fmtutil/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
     29deps = [ 'console' ]
    2930src = files('fmtutil.c')
  • uspace/lib/meson.build

    r56a3c29e r4f6368c  
    5353        'inet',
    5454
     55        'input',
     56        'output',
     57        'console',
    5558        'device',
    5659
    5760        'block',
     61        'clipboard',
    5862        'clui',
    5963        'codepage',
    6064        'compress',
     65        'corecfg',
    6166        'cpp',
    6267        'crypto',
     
    6873        'gfx',
    6974        'http',
     75        'ipctest',
    7076        'label',
    7177        'math',
  • uspace/lib/posix/meson.build

    r56a3c29e r4f6368c  
    6666uspace_lib_devel_install_script_text += 'mkdir -p "${DESTDIR}include/libposix"'
    6767uspace_lib_devel_install_script_text += 'cp -R -L -T "@0@" "${DESTDIR}include/libposix"'.format(_sdir)
    68 
    69 # TODO: exports
     68uspace_lib_devel_install_script_text += 'ln -s -r "${DESTDIR}include/libc" "${DESTDIR}/include/common"'
  • uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h

    r56a3c29e r4f6368c  
    3838
    3939#include <errno.h>
     40#include <sif.h>
    4041#include <types/tbarcfg/tbarcfg.h>
    4142
     43extern errno_t tbarcfg_create(const char *, tbarcfg_t **);
    4244extern errno_t tbarcfg_open(const char *, tbarcfg_t **);
    4345extern void tbarcfg_close(tbarcfg_t *);
     
    4951extern errno_t smenu_entry_set_cmd(smenu_entry_t *, const char *);
    5052extern errno_t smenu_entry_save(smenu_entry_t *);
     53extern errno_t smenu_entry_create(tbarcfg_t *, const char *, const char *);
     54extern errno_t smenu_entry_destroy(smenu_entry_t *);
    5155
    5256#endif
  • uspace/lib/tbarcfg/private/tbarcfg.h

    r56a3c29e r4f6368c  
    4848        /** List of start menu entries (smenu_entry_t) */
    4949        list_t entries;
     50        /** Entries SIF node */
     51        sif_node_t *nentries;
    5052};
    5153
     
    6466};
    6567
    66 extern errno_t smenu_entry_create(tbarcfg_t *, sif_node_t *, const char *,
     68extern errno_t smenu_entry_new(tbarcfg_t *, sif_node_t *, const char *,
    6769    const char *);
     70extern void smenu_entry_delete(smenu_entry_t *);
    6871
    6972#endif
  • uspace/lib/tbarcfg/src/tbarcfg.c

    r56a3c29e r4f6368c  
    4141#include "../private/tbarcfg.h"
    4242
     43/** Create taskbar configuration.
     44 *
     45 * @param repopath Pathname of the new menu repository
     46 * @param rtbcfg Place to store pointer to taskbar configuration
     47 * @return EOK on success or an error code
     48 */
     49errno_t tbarcfg_create(const char *repopath, tbarcfg_t **rtbcfg)
     50{
     51        tbarcfg_t *tbcfg;
     52        sif_sess_t *repo = NULL;
     53        sif_node_t *rnode;
     54        errno_t rc;
     55        sif_trans_t *trans = NULL;
     56
     57        tbcfg = calloc(1, sizeof(tbarcfg_t));
     58        if (tbcfg == NULL) {
     59                rc = ENOMEM;
     60                goto error;
     61        }
     62
     63        list_initialize(&tbcfg->entries);
     64
     65        rc = sif_create(repopath, &repo);
     66        if (rc != EOK)
     67                goto error;
     68
     69        tbcfg->repo = repo;
     70
     71        rnode = sif_get_root(repo);
     72
     73        rc = sif_trans_begin(repo, &trans);
     74        if (rc != EOK)
     75                goto error;
     76
     77        rc = sif_node_append_child(trans, rnode, "entries", &tbcfg->nentries);
     78        if (rc != EOK)
     79                goto error;
     80
     81        rc = sif_trans_end(trans);
     82        if (rc != EOK)
     83                goto error;
     84
     85        *rtbcfg = tbcfg;
     86        return EOK;
     87error:
     88        if (trans != NULL)
     89                sif_trans_abort(trans);
     90        if (repo != NULL)
     91                sif_close(repo);
     92        if (tbcfg != NULL)
     93                free(tbcfg);
     94        return rc;
     95}
     96
    4397/** Open taskbar configuration.
    4498 *
     
    52106        sif_sess_t *repo = NULL;
    53107        sif_node_t *rnode;
    54         sif_node_t *nentries;
    55108        sif_node_t *nentry;
    56109        const char *ntype;
     
    74127
    75128        rnode = sif_get_root(repo);
    76         nentries = sif_node_first_child(rnode);
    77         ntype = sif_node_get_type(nentries);
     129        tbcfg->nentries = sif_node_first_child(rnode);
     130        ntype = sif_node_get_type(tbcfg->nentries);
    78131        if (str_cmp(ntype, "entries") != 0) {
    79132                rc = EIO;
     
    81134        }
    82135
    83         nentry = sif_node_first_child(nentries);
     136        nentry = sif_node_first_child(tbcfg->nentries);
    84137        while (nentry != NULL) {
    85138                ntype = sif_node_get_type(nentry);
     
    101154                }
    102155
    103                 rc = smenu_entry_create(tbcfg, nentry, caption, cmd);
     156                rc = smenu_entry_new(tbcfg, nentry, caption, cmd);
    104157                if (rc != EOK)
    105158                        goto error;
     
    124177void tbarcfg_close(tbarcfg_t *tbcfg)
    125178{
     179        smenu_entry_t *entry;
     180
     181        entry = tbarcfg_smenu_first(tbcfg);
     182        while (entry != NULL) {
     183                smenu_entry_delete(entry);
     184                entry = tbarcfg_smenu_first(tbcfg);
     185        }
     186
    126187        (void)sif_close(tbcfg->repo);
     188        free(tbcfg);
    127189}
    128190
     
    229291errno_t smenu_entry_save(smenu_entry_t *entry)
    230292{
    231         sif_trans_t *trans;
     293        sif_trans_t *trans = NULL;
    232294        errno_t rc;
    233295
     
    255317}
    256318
    257 /** Create a start menu entry and append it to the start menu (internal).
     319/** Allocate a start menu entry and append it to the start menu (internal).
    258320 *
    259321 * This only creates the entry in memory, but does not update the repository.
     
    264326 * @param cmd Command to run
    265327 */
    266 errno_t smenu_entry_create(tbarcfg_t *smenu, sif_node_t *nentry,
     328errno_t smenu_entry_new(tbarcfg_t *smenu, sif_node_t *nentry,
    267329    const char *caption, const char *cmd)
    268330{
     
    305367}
    306368
     369/** Delete start menu entry.
     370 *
     371 * This only deletes the entry from, but does not update the
     372 * repository.
     373 *
     374 * @param entry Start menu entry
     375 */
     376void smenu_entry_delete(smenu_entry_t *entry)
     377{
     378        list_remove(&entry->lentries);
     379        free(entry->caption);
     380        free(entry->cmd);
     381        free(entry);
     382}
     383
     384/** Create new start menu entry.
     385 *
     386 * @param smenu Start menu
     387 * @param nentry Backing SIF node
     388 * @param caption Caption
     389 * @param cmd Command to run
     390 */
     391errno_t smenu_entry_create(tbarcfg_t *smenu, const char *caption,
     392    const char *cmd)
     393{
     394        sif_node_t *nentry;
     395        errno_t rc;
     396        sif_trans_t *trans = NULL;
     397
     398        rc = sif_trans_begin(smenu->repo, &trans);
     399        if (rc != EOK)
     400                goto error;
     401
     402        rc = sif_node_append_child(trans, smenu->nentries, "entry",
     403            &nentry);
     404        if (rc != EOK)
     405                goto error;
     406
     407        rc = smenu_entry_new(smenu, nentry, caption, cmd);
     408        if (rc != EOK)
     409                goto error;
     410
     411        rc = sif_trans_end(trans);
     412        if (rc != EOK)
     413                goto error;
     414
     415        return EOK;
     416error:
     417        if (trans != NULL)
     418                sif_trans_abort(trans);
     419        return rc;
     420}
     421
     422/** Destroy start menu entry..
     423 *
     424 * @param entry Start menu entry
     425 * @return EOK on success or an error code
     426 */
     427errno_t smenu_entry_destroy(smenu_entry_t *entry)
     428{
     429        errno_t rc;
     430        sif_trans_t *trans = NULL;
     431
     432        rc = sif_trans_begin(entry->smenu->repo, &trans);
     433        if (rc != EOK)
     434                goto error;
     435
     436        sif_node_destroy(trans, entry->nentry);
     437
     438        rc = sif_trans_end(trans);
     439        if (rc != EOK)
     440                goto error;
     441
     442        smenu_entry_delete(entry);
     443error:
     444        if (trans != NULL)
     445                sif_trans_abort(trans);
     446        return rc;
     447}
     448
    307449/** @}
    308450 */
  • uspace/lib/tbarcfg/test/tbarcfg.c

    r56a3c29e r4f6368c  
    3636PCUT_TEST_SUITE(tbarcfg);
    3737
    38 /** Opening and closing taskbar configuration */
    39 PCUT_TEST(open_close)
    40 {
    41         errno_t rc;
    42         tbarcfg_t *tbcfg;
    43         FILE *f;
    44         int rv;
    45 
    46         f = fopen("/tmp/test", "wt");
    47         PCUT_ASSERT_NOT_NULL(f);
    48 
    49         rv = fputs("[sif](){[entries](){}}", f);
    50         PCUT_ASSERT_TRUE(rv >= 0);
    51 
    52         rv = fclose(f);
    53         PCUT_ASSERT_INT_EQUALS(0, rv);
    54 
    55         rc = tbarcfg_open("/tmp/test", &tbcfg);
    56         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    57 
    58         tbarcfg_close(tbcfg);
     38/** Creating, opening and closing taskbar configuration */
     39PCUT_TEST(create_open_close)
     40{
     41        errno_t rc;
     42        tbarcfg_t *tbcfg;
     43        char fname[L_tmpnam], *p;
     44
     45        p = tmpnam(fname);
     46        PCUT_ASSERT_NOT_NULL(p);
     47
     48        /* Create new repository */
     49        rc = tbarcfg_create(fname, &tbcfg);
     50        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     51
     52        tbarcfg_close(tbcfg);
     53
     54        /* Re-open the repository */
     55
     56        rc = tbarcfg_open(fname, &tbcfg);
     57        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     58
     59        tbarcfg_close(tbcfg);
     60        remove(fname);
    5961}
    6062
     
    6466        errno_t rc;
    6567        tbarcfg_t *tbcfg;
    66         smenu_entry_t *e;
    67         FILE *f;
    68         int rv;
    69 
    70         f = fopen("/tmp/test", "wt");
    71         PCUT_ASSERT_NOT_NULL(f);
    72 
    73         rv = fputs("[sif](){[entries](){"
    74             "[entry]([caption]=[A][cmd]=[a]){}"
    75             "[entry]([caption]=[B][cmd]=[b]){}"
    76             "}}", f);
    77         PCUT_ASSERT_TRUE(rv >= 0);
    78 
    79         rv = fclose(f);
    80         PCUT_ASSERT_INT_EQUALS(0, rv);
    81 
    82         rc = tbarcfg_open("/tmp/test", &tbcfg);
     68        char fname[L_tmpnam], *p;
     69        smenu_entry_t *e;
     70
     71        p = tmpnam(fname);
     72        PCUT_ASSERT_NOT_NULL(p);
     73
     74        rc = tbarcfg_create(fname, &tbcfg);
     75        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     76
     77        rc = smenu_entry_create(tbcfg, "A", "a");
     78        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     79
     80        rc = smenu_entry_create(tbcfg, "B", "b");
    8381        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    8482
     
    9189
    9290        tbarcfg_close(tbcfg);
     91        remove(fname);
    9392}
    9493
     
    9897        errno_t rc;
    9998        tbarcfg_t *tbcfg;
     99        char fname[L_tmpnam], *p;
    100100        smenu_entry_t *e;
    101101        const char *caption;
    102102        const char *cmd;
    103         FILE *f;
    104         int rv;
    105 
    106         f = fopen("/tmp/test", "wt");
    107         PCUT_ASSERT_NOT_NULL(f);
    108 
    109         rv = fputs("[sif](){[entries](){"
    110             "[entry]([caption]=[A][cmd]=[a]){}"
    111             "}}", f);
    112         PCUT_ASSERT_TRUE(rv >= 0);
    113 
    114         rv = fclose(f);
    115         PCUT_ASSERT_INT_EQUALS(0, rv);
    116 
    117         rc = tbarcfg_open("/tmp/test", &tbcfg);
     103
     104        p = tmpnam(fname);
     105        PCUT_ASSERT_NOT_NULL(p);
     106
     107        rc = tbarcfg_create(fname, &tbcfg);
     108        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     109
     110        rc = smenu_entry_create(tbcfg, "A", "a");
    118111        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    119112
     
    127120
    128121        tbarcfg_close(tbcfg);
     122        remove(fname);
     123}
     124
     125/** Setting menu entry properties */
     126PCUT_TEST(set_caption_cmd)
     127{
     128        errno_t rc;
     129        tbarcfg_t *tbcfg;
     130        char fname[L_tmpnam], *p;
     131        smenu_entry_t *e;
     132        const char *caption;
     133        const char *cmd;
     134
     135        p = tmpnam(fname);
     136        PCUT_ASSERT_NOT_NULL(p);
     137
     138        rc = tbarcfg_create(fname, &tbcfg);
     139        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     140
     141        rc = smenu_entry_create(tbcfg, "A", "a");
     142        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     143
     144        e = tbarcfg_smenu_first(tbcfg);
     145        PCUT_ASSERT_NOT_NULL(e);
     146
     147        caption = smenu_entry_get_caption(e);
     148        PCUT_ASSERT_STR_EQUALS("A", caption);
     149        cmd = smenu_entry_get_cmd(e);
     150        PCUT_ASSERT_STR_EQUALS("a", cmd);
     151
     152        /* Set properties */
     153        rc = smenu_entry_set_caption(e, "B");
     154        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     155        rc = smenu_entry_set_cmd(e, "b");
     156        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     157
     158        rc = smenu_entry_save(e);
     159        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     160
     161        /* Check that properties have been set */
     162        caption = smenu_entry_get_caption(e);
     163        PCUT_ASSERT_STR_EQUALS("B", caption);
     164        cmd = smenu_entry_get_cmd(e);
     165        PCUT_ASSERT_STR_EQUALS("b", cmd);
     166
     167        tbarcfg_close(tbcfg);
     168
     169        /* Re-open repository */
     170
     171        rc = tbarcfg_open(fname, &tbcfg);
     172        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     173
     174        e = tbarcfg_smenu_first(tbcfg);
     175        PCUT_ASSERT_NOT_NULL(e);
     176
     177        /* Check that new values of properties have persisted */
     178        caption = smenu_entry_get_caption(e);
     179        PCUT_ASSERT_STR_EQUALS("B", caption);
     180        cmd = smenu_entry_get_cmd(e);
     181        PCUT_ASSERT_STR_EQUALS("b", cmd);
     182
     183        tbarcfg_close(tbcfg);
     184        remove(fname);
     185}
     186
     187/** Create start menu entry */
     188PCUT_TEST(entry_create)
     189{
     190        errno_t rc;
     191        tbarcfg_t *tbcfg;
     192        char fname[L_tmpnam], *p;
     193        smenu_entry_t *e;
     194        const char *caption;
     195        const char *cmd;
     196
     197        p = tmpnam(fname);
     198        PCUT_ASSERT_NOT_NULL(p);
     199
     200        rc = tbarcfg_create(fname, &tbcfg);
     201        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     202
     203        rc = smenu_entry_create(tbcfg, "A", "a");
     204        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     205
     206        e = tbarcfg_smenu_first(tbcfg);
     207        PCUT_ASSERT_NOT_NULL(e);
     208
     209        caption = smenu_entry_get_caption(e);
     210        PCUT_ASSERT_STR_EQUALS("A", caption);
     211        cmd = smenu_entry_get_cmd(e);
     212        PCUT_ASSERT_STR_EQUALS("a", cmd);
     213
     214        tbarcfg_close(tbcfg);
     215        remove(fname);
    129216}
    130217
  • uspace/lib/ui/include/ui/list.h

    r56a3c29e r4f6368c  
    6060extern void *ui_list_entry_get_arg(ui_list_entry_t *);
    6161extern ui_list_t *ui_list_entry_get_list(ui_list_entry_t *);
     62extern errno_t ui_list_entry_set_caption(ui_list_entry_t *, const char *);
    6263extern size_t ui_list_entries_cnt(ui_list_t *);
    6364extern errno_t ui_list_sort(ui_list_t *);
  • uspace/lib/ui/include/ui/scrollbar.h

    r56a3c29e r4f6368c  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5454extern void ui_scrollbar_set_rect(ui_scrollbar_t *, gfx_rect_t *);
    5555extern errno_t ui_scrollbar_paint(ui_scrollbar_t *);
    56 extern gfx_coord_t ui_scrollbar_through_length(ui_scrollbar_t *);
     56extern gfx_coord_t ui_scrollbar_trough_length(ui_scrollbar_t *);
    5757extern gfx_coord_t ui_scrollbar_move_length(ui_scrollbar_t *);
    5858extern gfx_coord_t ui_scrollbar_get_pos(ui_scrollbar_t *);
     
    6060extern void ui_scrollbar_set_pos(ui_scrollbar_t *, gfx_coord_t);
    6161extern void ui_scrollbar_thumb_press(ui_scrollbar_t *, gfx_coord2_t *);
    62 extern void ui_scrollbar_up_through_press(ui_scrollbar_t *);
    63 extern void ui_scrollbar_down_through_press(ui_scrollbar_t *);
     62extern void ui_scrollbar_upper_trough_press(ui_scrollbar_t *);
     63extern void ui_scrollbar_lower_trough_press(ui_scrollbar_t *);
    6464extern void ui_scrollbar_release(ui_scrollbar_t *, gfx_coord2_t *);
    6565extern void ui_scrollbar_update(ui_scrollbar_t *, gfx_coord2_t *);
    66 extern void ui_scrollbar_throughs_update(ui_scrollbar_t *, gfx_coord2_t *);
     66extern void ui_scrollbar_troughs_update(ui_scrollbar_t *, gfx_coord2_t *);
    6767extern void ui_scrollbar_up(ui_scrollbar_t *);
    6868extern void ui_scrollbar_down(ui_scrollbar_t *);
  • uspace/lib/ui/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
    29 deps = [ 'gfx', 'gfxfont', 'memgfx', 'display', 'congfx' ]
     29deps = [ 'gfx', 'gfxfont', 'memgfx', 'display', 'congfx', 'clipboard' ]
    3030src = files(
    3131        'src/accel.c',
  • uspace/lib/ui/private/resource.h

    r56a3c29e r4f6368c  
    118118        gfx_color_t *entry_sel_text_bg_color;
    119119
    120         /** Scrollbar through color */
    121         gfx_color_t *sbar_through_color;
    122         /** Scrollbar active through color */
    123         gfx_color_t *sbar_act_through_color;
     120        /** Scrollbar trough color */
     121        gfx_color_t *sbar_trough_color;
     122        /** Scrollbar active trough color */
     123        gfx_color_t *sbar_act_trough_color;
    124124
    125125        /** Expose callback or @c NULL */
  • uspace/lib/ui/private/scrollbar.h

    r56a3c29e r4f6368c  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6969        /** Thumb is currently held down */
    7070        bool thumb_held;
    71         /** Up through is currently held down */
    72         bool up_through_held;
    73         /** Pointer is inside up through */
    74         bool up_through_inside;
    75         /** Down through is currently held down */
    76         bool down_through_held;
    77         /** Pointer is inside down through */
    78         bool down_through_inside;
     71        /** Upper trough is currently held down */
     72        bool upper_trough_held;
     73        /** Pointer is inside upper trough */
     74        bool upper_trough_inside;
     75        /** Lower trough is currently held down */
     76        bool lower_trough_held;
     77        /** Pointer is inside lower trough */
     78        bool lower_trough_inside;
    7979        /** Position where thumb was pressed */
    8080        gfx_coord2_t press_pos;
     
    8383        /** Thumb position */
    8484        gfx_coord_t pos;
    85         /** Last cursor position (when through is held) */
     85        /** Last cursor position (when trough is held) */
    8686        gfx_coord2_t last_curs_pos;
    8787};
     
    9494        /** Up button rectangle */
    9595        gfx_rect_t up_btn_rect;
    96         /** Through rectangle */
    97         gfx_rect_t through_rect;
    98         /** Up through rectangle */
    99         gfx_rect_t up_through_rect;
     96        /** Trough rectangle */
     97        gfx_rect_t trough_rect;
     98        /** Upper trough rectangle */
     99        gfx_rect_t upper_trough_rect;
    100100        /** Thumb rectangle */
    101101        gfx_rect_t thumb_rect;
    102         /** Down through rectangle */
    103         gfx_rect_t down_through_rect;
     102        /** Lower trough rectangle */
     103        gfx_rect_t lower_trough_rect;
    104104        /** Down button rectangle */
    105105        gfx_rect_t down_btn_rect;
  • uspace/lib/ui/src/clickmatic.c

    r56a3c29e r4f6368c  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3535 * Clickmatic is used to periodically generate events in particular cases
    3636 * when a mouse button is held down, such as when holding the button or
    37  * through of a scrollbar.
     37 * trough of a scrollbar.
    3838 */
    3939
  • uspace/lib/ui/src/list.c

    r56a3c29e r4f6368c  
    800800}
    801801
     802/** Change list entry caption.
     803 *
     804 * @param entry UI list entry
     805 * @param caption New caption
     806 *
     807 * @return EOK on success, ENOMEM if out of memory
     808 */
     809errno_t ui_list_entry_set_caption(ui_list_entry_t *entry, const char *caption)
     810{
     811        char *dcaption;
     812
     813        dcaption = str_dup(caption);
     814        if (dcaption == NULL)
     815                return ENOMEM;
     816
     817        free(entry->caption);
     818        entry->caption = dcaption;
     819
     820        (void)ui_list_entry_paint(entry, ui_list_entry_get_idx(entry));
     821        return EOK;
     822}
     823
    802824/** Clear UI list entry list.
    803825 *
  • uspace/lib/ui/src/resource.c

    r56a3c29e r4f6368c  
    8686        gfx_color_t *entry_sel_text_fg_color = NULL;
    8787        gfx_color_t *entry_sel_text_bg_color = NULL;
    88         gfx_color_t *sbar_through_color = NULL;
    89         gfx_color_t *sbar_act_through_color = NULL;
     88        gfx_color_t *sbar_trough_color = NULL;
     89        gfx_color_t *sbar_act_trough_color = NULL;
    9090        errno_t rc;
    9191
     
    221221
    222222        rc = gfx_color_new_rgb_i16(0xe4e4, 0xe4e4, 0xe4e4,
    223             &sbar_through_color);
     223            &sbar_trough_color);
    224224        if (rc != EOK)
    225225                goto error;
    226226
    227227        rc = gfx_color_new_rgb_i16(0x5858, 0x5858, 0x5858,
    228             &sbar_act_through_color);
     228            &sbar_act_trough_color);
    229229        if (rc != EOK)
    230230                goto error;
     
    265265        resource->entry_sel_text_bg_color = entry_sel_text_bg_color;
    266266
    267         resource->sbar_through_color = sbar_through_color;
    268         resource->sbar_act_through_color = sbar_act_through_color;
     267        resource->sbar_trough_color = sbar_trough_color;
     268        resource->sbar_act_trough_color = sbar_act_trough_color;
    269269
    270270        *rresource = resource;
     
    327327                gfx_color_delete(entry_act_bg_color);
    328328
    329         if (sbar_through_color != NULL)
    330                 gfx_color_delete(sbar_through_color);
    331         if (sbar_act_through_color != NULL)
    332                 gfx_color_delete(sbar_act_through_color);
     329        if (sbar_trough_color != NULL)
     330                gfx_color_delete(sbar_trough_color);
     331        if (sbar_act_trough_color != NULL)
     332                gfx_color_delete(sbar_act_trough_color);
    333333
    334334        if (tface != NULL)
     
    376376        gfx_color_t *entry_sel_text_bg_color = NULL;
    377377        gfx_color_t *entry_act_bg_color = NULL;
    378         gfx_color_t *sbar_through_color = NULL;
    379         gfx_color_t *sbar_act_through_color = NULL;
     378        gfx_color_t *sbar_trough_color = NULL;
     379        gfx_color_t *sbar_act_trough_color = NULL;
    380380        errno_t rc;
    381381
     
    497497                goto error;
    498498
    499         rc = gfx_color_new_ega(0x07, &sbar_through_color);
    500         if (rc != EOK)
    501                 goto error;
    502 
    503         rc = gfx_color_new_ega(0x07, &sbar_act_through_color);
     499        rc = gfx_color_new_ega(0x07, &sbar_trough_color);
     500        if (rc != EOK)
     501                goto error;
     502
     503        rc = gfx_color_new_ega(0x07, &sbar_act_trough_color);
    504504        if (rc != EOK)
    505505                goto error;
     
    540540        resource->entry_sel_text_bg_color = entry_sel_text_bg_color;
    541541
    542         resource->sbar_through_color = sbar_through_color;
    543         resource->sbar_act_through_color = sbar_act_through_color;
     542        resource->sbar_trough_color = sbar_trough_color;
     543        resource->sbar_act_trough_color = sbar_act_trough_color;
    544544
    545545        *rresource = resource;
     
    601601        if (entry_sel_text_bg_color != NULL)
    602602                gfx_color_delete(entry_sel_text_bg_color);
    603         if (sbar_through_color != NULL)
    604                 gfx_color_delete(sbar_through_color);
    605         if (sbar_act_through_color != NULL)
    606                 gfx_color_delete(sbar_act_through_color);
     603        if (sbar_trough_color != NULL)
     604                gfx_color_delete(sbar_trough_color);
     605        if (sbar_act_trough_color != NULL)
     606                gfx_color_delete(sbar_act_trough_color);
    607607
    608608        if (tface != NULL)
     
    665665        gfx_color_delete(resource->entry_sel_text_bg_color);
    666666
    667         gfx_color_delete(resource->sbar_through_color);
    668         gfx_color_delete(resource->sbar_act_through_color);
     667        gfx_color_delete(resource->sbar_trough_color);
     668        gfx_color_delete(resource->sbar_act_trough_color);
    669669
    670670        gfx_font_close(resource->font);
  • uspace/lib/ui/src/scrollbar.c

    r56a3c29e r4f6368c  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3535 * Anatomy of a horizontal scrollbar:
    3636 *
    37  *       Up                Down
    38  *      through           through
    39  * +---+------+--------+---------+---+
    40  * | < |      |   |||  |         | > |
    41  * +---+------+--------+---------+---+
    42  *  Up           Thumb           Down
    43  * button                       button
    44  *
    45  *     +-------- Through --------+
     37 *        Upper             Lower
     38 *       trough            trough
     39 *  +---+------+--------+---------+---+
     40 *  | < |      |   |||  |         | > |
     41 *  +---+------+--------+---------+---+
     42 *   Up           Thumb           Down
     43 * button                        button
     44 *
     45 *     +-------- Trough --------+
    4646 *
    4747 * Scrollbar uses the same terminology whether it is running in horizontal
     
    5151 * The thumb can be dragged to a specific position, resulting in a move
    5252 * event. The up/down buttons generate up/down events. Pressing a mouse
    53  * button on the up/down through generates page up / page down events.
    54  *
    55  * Pressing and holding down mouse button on up / down button or up / down
    56  * through will auto-scroll (using clickmatic).
     53 * button on the upper/lower trough generates page up / page down events.
     54 *
     55 * Pressing and holding down mouse button on up / down button or upper /
     56 * lower trough will auto-scroll (using clickmatic).
    5757 */
    5858
     
    360360}
    361361
    362 /** Determine scrollbar through length.
     362/** Determine scrollbar trough length.
    363363 *
    364364 * Return the size of the space within which the thumb can move
     
    366366 *
    367367 * @param scrollbar Scrollbar
    368  * @return Scrollbar through length in pixels
    369  */
    370 gfx_coord_t ui_scrollbar_through_length(ui_scrollbar_t *scrollbar)
     368 * @return Scrollbar trough length in pixels
     369 */
     370gfx_coord_t ui_scrollbar_trough_length(ui_scrollbar_t *scrollbar)
    371371{
    372372        ui_resource_t *resource;
     
    396396gfx_coord_t ui_scrollbar_move_length(ui_scrollbar_t *scrollbar)
    397397{
    398         return ui_scrollbar_through_length(scrollbar) -
     398        return ui_scrollbar_trough_length(scrollbar) -
    399399            scrollbar->thumb_len;
    400400}
     
    417417            ui_scrollbar_min_thumb_len;
    418418
    419         max_len = ui_scrollbar_through_length(scrollbar);
     419        max_len = ui_scrollbar_trough_length(scrollbar);
    420420        if (len < min_len)
    421421                len = min_len;
     
    459459                scrollbar->pos = pos;
    460460                (void) ui_scrollbar_paint(scrollbar);
    461                 ui_scrollbar_throughs_update(scrollbar,
     461                ui_scrollbar_troughs_update(scrollbar,
    462462                    &scrollbar->last_curs_pos);
    463463        }
     
    487487                goto error;
    488488
    489         /* Paint scrollbar up through */
     489        /* Paint scrollbar upper trough */
    490490        rc = gfx_set_color(resource->gc,
    491             scrollbar->up_through_held && scrollbar->up_through_inside ?
    492             resource->sbar_act_through_color :
    493             resource->sbar_through_color);
    494         if (rc != EOK)
    495                 goto error;
    496 
    497         rc = gfx_fill_rect(resource->gc, &geom.up_through_rect);
    498         if (rc != EOK)
    499                 goto error;
    500 
    501         /* Paint scrollbar down through */
     491            scrollbar->upper_trough_held && scrollbar->upper_trough_inside ?
     492            resource->sbar_act_trough_color :
     493            resource->sbar_trough_color);
     494        if (rc != EOK)
     495                goto error;
     496
     497        rc = gfx_fill_rect(resource->gc, &geom.upper_trough_rect);
     498        if (rc != EOK)
     499                goto error;
     500
     501        /* Paint scrollbar lower trough */
    502502
    503503        rc = gfx_set_color(resource->gc,
    504             scrollbar->down_through_held && scrollbar->down_through_inside ?
    505             resource->sbar_act_through_color :
    506             resource->sbar_through_color);
    507         if (rc != EOK)
    508                 goto error;
    509 
    510         rc = gfx_fill_rect(resource->gc, &geom.down_through_rect);
     504            scrollbar->lower_trough_held && scrollbar->lower_trough_inside ?
     505            resource->sbar_act_trough_color :
     506            resource->sbar_trough_color);
     507        if (rc != EOK)
     508                goto error;
     509
     510        rc = gfx_fill_rect(resource->gc, &geom.lower_trough_rect);
    511511        if (rc != EOK)
    512512                goto error;
     
    561561        ui_scrollbar_get_geom(scrollbar, &geom);
    562562
    563         /* Paint scrollbar through */
    564 
    565         rc = ui_paint_text_rect(resource, &geom.through_rect,
    566             resource->sbar_through_color, "\u2592");
     563        /* Paint scrollbar trough */
     564
     565        rc = ui_paint_text_rect(resource, &geom.trough_rect,
     566            resource->sbar_trough_color, "\u2592");
    567567        if (rc != EOK)
    568568                goto error;
     
    571571
    572572        rc = ui_paint_text_rect(resource, &geom.thumb_rect,
    573             resource->sbar_through_color, "\u25a0");
     573            resource->sbar_trough_color, "\u25a0");
    574574        if (rc != EOK)
    575575                goto error;
     
    647647                geom->up_btn_rect.p1.y = orect.p1.y;
    648648
    649                 /* Through */
    650                 geom->through_rect.p0.x = geom->up_btn_rect.p1.x;
    651                 geom->through_rect.p0.y = irect.p0.y;
    652                 geom->through_rect.p1.x = orect.p1.x - btn_len;
    653                 geom->through_rect.p1.y = irect.p1.y;
     649                /* Trough */
     650                geom->trough_rect.p0.x = geom->up_btn_rect.p1.x;
     651                geom->trough_rect.p0.y = irect.p0.y;
     652                geom->trough_rect.p1.x = orect.p1.x - btn_len;
     653                geom->trough_rect.p1.y = irect.p1.y;
    654654
    655655                /* Thumb */
     
    661661                geom->thumb_rect.p1.y = orect.p1.y;
    662662
    663                 /* Up through */
    664                 geom->up_through_rect.p0 = geom->through_rect.p0;
    665                 geom->up_through_rect.p1.x = geom->thumb_rect.p0.x;
    666                 geom->up_through_rect.p1.y = geom->through_rect.p1.y;
    667 
    668                 /* Down through */
    669                 geom->down_through_rect.p0.x = geom->thumb_rect.p1.x;
    670                 geom->down_through_rect.p0.y = geom->through_rect.p0.y;
    671                 geom->down_through_rect.p1 = geom->through_rect.p1;
     663                /* Upper trough */
     664                geom->upper_trough_rect.p0 = geom->trough_rect.p0;
     665                geom->upper_trough_rect.p1.x = geom->thumb_rect.p0.x;
     666                geom->upper_trough_rect.p1.y = geom->trough_rect.p1.y;
     667
     668                /* Lower trough */
     669                geom->lower_trough_rect.p0.x = geom->thumb_rect.p1.x;
     670                geom->lower_trough_rect.p0.y = geom->trough_rect.p0.y;
     671                geom->lower_trough_rect.p1 = geom->trough_rect.p1;
    672672
    673673                /* Down button */
    674                 geom->down_btn_rect.p0.x = geom->through_rect.p1.x;
     674                geom->down_btn_rect.p0.x = geom->trough_rect.p1.x;
    675675                geom->down_btn_rect.p0.y = orect.p0.y;
    676676                geom->down_btn_rect.p1.x = orect.p1.x;
     
    683683                geom->up_btn_rect.p1.y = orect.p0.y + btn_len;
    684684
    685                 /* Through */
    686                 geom->through_rect.p0.x = irect.p0.x;
    687                 geom->through_rect.p0.y = geom->up_btn_rect.p1.y;
    688                 geom->through_rect.p1.x = irect.p1.x;
    689                 geom->through_rect.p1.y = orect.p1.y - btn_len;
     685                /* Trough */
     686                geom->trough_rect.p0.x = irect.p0.x;
     687                geom->trough_rect.p0.y = geom->up_btn_rect.p1.y;
     688                geom->trough_rect.p1.x = irect.p1.x;
     689                geom->trough_rect.p1.y = orect.p1.y - btn_len;
    690690
    691691                /* Thumb */
     
    697697                    scrollbar->thumb_len;
    698698
    699                 /* Up through */
    700                 geom->up_through_rect.p0 = geom->through_rect.p0;
    701                 geom->up_through_rect.p1.x = geom->through_rect.p1.x;
    702                 geom->up_through_rect.p1.y = geom->thumb_rect.p0.y;
    703 
    704                 /* Down through */
    705                 geom->down_through_rect.p0.x = geom->through_rect.p0.x;
    706                 geom->down_through_rect.p0.y = geom->thumb_rect.p1.y;
    707                 geom->down_through_rect.p1 = geom->through_rect.p1;
     699                /* Upper trough */
     700                geom->upper_trough_rect.p0 = geom->trough_rect.p0;
     701                geom->upper_trough_rect.p1.x = geom->trough_rect.p1.x;
     702                geom->upper_trough_rect.p1.y = geom->thumb_rect.p0.y;
     703
     704                /* Lower trough */
     705                geom->lower_trough_rect.p0.x = geom->trough_rect.p0.x;
     706                geom->lower_trough_rect.p0.y = geom->thumb_rect.p1.y;
     707                geom->lower_trough_rect.p1 = geom->trough_rect.p1;
    708708
    709709                /* Down button */
    710710                geom->down_btn_rect.p0.x = orect.p0.x;
    711                 geom->down_btn_rect.p0.y = geom->through_rect.p1.y;
     711                geom->down_btn_rect.p0.y = geom->trough_rect.p1.y;
    712712                geom->down_btn_rect.p1.x = orect.p1.x;
    713713                geom->down_btn_rect.p1.y = orect.p1.y;
     
    732732}
    733733
    734 /** Press down scrollbar up through.
    735  *
    736  * @param scrollbar Scrollbar
    737  */
    738 void ui_scrollbar_up_through_press(ui_scrollbar_t *scrollbar)
     734/** Press down scrollbar upper trough.
     735 *
     736 * @param scrollbar Scrollbar
     737 */
     738void ui_scrollbar_upper_trough_press(ui_scrollbar_t *scrollbar)
    739739{
    740740        ui_clickmatic_t *clickmatic = ui_get_clickmatic(scrollbar->ui);
    741741
    742         scrollbar->up_through_held = true;
    743         scrollbar->up_through_inside = true;
     742        scrollbar->upper_trough_held = true;
     743        scrollbar->upper_trough_inside = true;
    744744
    745745        ui_clickmatic_set_cb(clickmatic, &ui_scrollbar_clickmatic_page_up_cb,
     
    748748}
    749749
    750 /** Press down scrollbar down through.
    751  *
    752  * @param scrollbar Scrollbar
    753  */
    754 void ui_scrollbar_down_through_press(ui_scrollbar_t *scrollbar)
     750/** Press down scrollbar lower trough.
     751 *
     752 * @param scrollbar Scrollbar
     753 */
     754void ui_scrollbar_lower_trough_press(ui_scrollbar_t *scrollbar)
    755755{
    756756        ui_clickmatic_t *clickmatic = ui_get_clickmatic(scrollbar->ui);
    757757
    758         scrollbar->down_through_held = true;
    759         scrollbar->down_through_inside = true;
     758        scrollbar->lower_trough_held = true;
     759        scrollbar->lower_trough_inside = true;
    760760
    761761        ui_clickmatic_set_cb(clickmatic, &ui_scrollbar_clickmatic_page_down_cb,
     
    778778        }
    779779
    780         if (scrollbar->up_through_held || scrollbar->down_through_held) {
     780        if (scrollbar->upper_trough_held || scrollbar->lower_trough_held) {
    781781                clickmatic = ui_get_clickmatic(scrollbar->ui);
    782782                ui_clickmatic_release(clickmatic);
    783783                ui_clickmatic_set_cb(clickmatic, NULL, NULL);
    784784
    785                 scrollbar->up_through_held = false;
    786                 scrollbar->down_through_held = false;
     785                scrollbar->upper_trough_held = false;
     786                scrollbar->lower_trough_held = false;
    787787                (void) ui_scrollbar_paint(scrollbar);
    788788        }
     
    791791/** Update state of scrollbar throuhgs.
    792792 *
    793  * Update state of scrollbar throughs after mouse cursor or thumb has moved.
     793 * Update state of scrollbar troughs after mouse cursor or thumb has moved.
    794794 *
    795795 * @param scrollbar Scrollbar
    796796 * @param pos Mouse cursor position
    797797 */
    798 void ui_scrollbar_throughs_update(ui_scrollbar_t *scrollbar, gfx_coord2_t *pos)
     798void ui_scrollbar_troughs_update(ui_scrollbar_t *scrollbar, gfx_coord2_t *pos)
    799799{
    800800        ui_scrollbar_geom_t geom;
     
    804804        ui_scrollbar_get_geom(scrollbar, &geom);
    805805
    806         inside_up = gfx_pix_inside_rect(pos, &geom.up_through_rect);
    807         inside_down = gfx_pix_inside_rect(pos, &geom.down_through_rect);
    808 
    809         if (inside_up && !scrollbar->up_through_inside) {
    810                 scrollbar->up_through_inside = true;
     806        inside_up = gfx_pix_inside_rect(pos, &geom.upper_trough_rect);
     807        inside_down = gfx_pix_inside_rect(pos, &geom.lower_trough_rect);
     808
     809        if (inside_up && !scrollbar->upper_trough_inside) {
     810                scrollbar->upper_trough_inside = true;
    811811                (void) ui_scrollbar_paint(scrollbar);
    812         } else if (!inside_up && scrollbar->up_through_inside) {
    813                 scrollbar->up_through_inside = false;
     812        } else if (!inside_up && scrollbar->upper_trough_inside) {
     813                scrollbar->upper_trough_inside = false;
    814814                (void) ui_scrollbar_paint(scrollbar);
    815815        }
    816816
    817         if (inside_down && !scrollbar->down_through_inside) {
    818                 scrollbar->down_through_inside = true;
     817        if (inside_down && !scrollbar->lower_trough_inside) {
     818                scrollbar->lower_trough_inside = true;
    819819                (void) ui_scrollbar_paint(scrollbar);
    820         } else if (!inside_down && scrollbar->down_through_inside) {
    821                 scrollbar->down_through_inside = false;
     820        } else if (!inside_down && scrollbar->lower_trough_inside) {
     821                scrollbar->lower_trough_inside = false;
    822822                (void) ui_scrollbar_paint(scrollbar);
    823823        }
     
    843843        }
    844844
    845         ui_scrollbar_throughs_update(scrollbar, pos);
     845        ui_scrollbar_troughs_update(scrollbar, pos);
    846846}
    847847
     
    866866}
    867867
    868 /** Scrollbar up through was pressed.
     868/** Scrollbar upper trough was pressed.
    869869 *
    870870 * @param scrollbar Scrollbar
     
    876876}
    877877
    878 /** Scrollbar down through was pressed.
     878/** Scrollbar lower trough was pressed.
    879879 *
    880880 * @param scrollbar Scrollbar
     
    927927                        return ui_claimed;
    928928                }
    929                 if (gfx_pix_inside_rect(&pos, &geom.up_through_rect)) {
    930                         ui_scrollbar_up_through_press(scrollbar);
     929                if (gfx_pix_inside_rect(&pos, &geom.upper_trough_rect)) {
     930                        ui_scrollbar_upper_trough_press(scrollbar);
    931931                        return ui_claimed;
    932932                }
    933                 if (gfx_pix_inside_rect(&pos, &geom.down_through_rect)) {
    934                         ui_scrollbar_down_through_press(scrollbar);
     933                if (gfx_pix_inside_rect(&pos, &geom.lower_trough_rect)) {
     934                        ui_scrollbar_lower_trough_press(scrollbar);
    935935                        return ui_claimed;
    936936                }
    937937                break;
    938938        case POS_RELEASE:
    939                 if (scrollbar->thumb_held || scrollbar->up_through_held ||
    940                     scrollbar->down_through_held) {
     939                if (scrollbar->thumb_held || scrollbar->upper_trough_held ||
     940                    scrollbar->lower_trough_held) {
    941941                        ui_scrollbar_release(scrollbar, &pos);
    942942                        return ui_claimed;
     
    11181118}
    11191119
    1120 /** Scrollbar clickmatic up through click event.
     1120/** Scrollbar clickmatic upper trough click event.
    11211121 *
    11221122 * @param clickmatic Clickmatic
     
    11271127        ui_scrollbar_t *scrollbar = (ui_scrollbar_t *)arg;
    11281128
    1129         if (scrollbar->up_through_inside)
     1129        if (scrollbar->upper_trough_inside)
    11301130                ui_scrollbar_page_up(scrollbar);
    11311131}
    11321132
    1133 /** Scrollbar clickmatic down through click event.
     1133/** Scrollbar clickmatic lower trough click event.
    11341134 *
    11351135 * @param clickmatic Clickmatic
     
    11401140        ui_scrollbar_t *scrollbar = (ui_scrollbar_t *)arg;
    11411141
    1142         if (scrollbar->down_through_inside)
     1142        if (scrollbar->lower_trough_inside)
    11431143                ui_scrollbar_page_down(scrollbar);
    11441144}
  • uspace/lib/ui/test/list.c

    r56a3c29e r4f6368c  
    10391039}
    10401040
     1041/** ui_list_entry_set_caption() sets entry captino */
     1042PCUT_TEST(entry_set_caption)
     1043{
     1044        ui_t *ui;
     1045        ui_window_t *window;
     1046        ui_wnd_params_t params;
     1047        ui_list_t *list;
     1048        ui_list_entry_attr_t attr;
     1049        ui_list_entry_t *entry;
     1050        errno_t rc;
     1051
     1052        rc = ui_create_disp(NULL, &ui);
     1053        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1054
     1055        ui_wnd_params_init(&params);
     1056        params.caption = "Test";
     1057
     1058        rc = ui_window_create(ui, &params, &window);
     1059        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1060
     1061        rc = ui_list_create(window, true, &list);
     1062        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1063
     1064        ui_list_entry_attr_init(&attr);
     1065
     1066        /* Append entry and get pointer to it */
     1067        attr.caption = "a";
     1068        attr.arg = (void *)1;
     1069        entry = NULL;
     1070        rc = ui_list_entry_append(list, &attr, &entry);
     1071        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1072        PCUT_ASSERT_NOT_NULL(entry);
     1073
     1074        /* Change caption */
     1075        rc = ui_list_entry_set_caption(entry, "b");
     1076        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1077        PCUT_ASSERT_STR_EQUALS("b", entry->caption);
     1078
     1079        ui_list_destroy(list);
     1080        ui_window_destroy(window);
     1081        ui_destroy(ui);
     1082}
     1083
    10411084/** ui_list_entries_cnt() returns the number of entries */
    10421085PCUT_TEST(entries_cnt)
  • uspace/lib/ui/test/scrollbar.c

    r56a3c29e r4f6368c  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    284284}
    285285
    286 /** ui_scrollbar_through_length() gives correct scrollbar through length */
    287 PCUT_TEST(through_length)
     286/** ui_scrollbar_trough_length() gives correct scrollbar trough length */
     287PCUT_TEST(trough_length)
    288288{
    289289        ui_t *ui = NULL;
     
    316316        ui_scrollbar_set_rect(scrollbar, &rect);
    317317
    318         length = ui_scrollbar_through_length(scrollbar);
     318        length = ui_scrollbar_trough_length(scrollbar);
    319319
    320320        /* Total length minus buttons */
     
    620620}
    621621
    622 /** Press and release up through */
    623 PCUT_TEST(up_through_press_release)
     622/** Press and release upper trough */
     623PCUT_TEST(upper_trough_press_release)
    624624{
    625625        ui_t *ui = NULL;
     
    654654        ui_scrollbar_set_cb(scrollbar, &test_scrollbar_cb, &resp);
    655655
    656         PCUT_ASSERT_FALSE(scrollbar->up_through_held);
    657 
    658         ui_scrollbar_up_through_press(scrollbar);
    659         PCUT_ASSERT_TRUE(scrollbar->up_through_held);
     656        PCUT_ASSERT_FALSE(scrollbar->upper_trough_held);
     657
     658        ui_scrollbar_upper_trough_press(scrollbar);
     659        PCUT_ASSERT_TRUE(scrollbar->upper_trough_held);
    660660        PCUT_ASSERT_TRUE(resp.page_up);
    661661
     
    665665
    666666        ui_scrollbar_release(scrollbar, &pos);
    667         PCUT_ASSERT_FALSE(scrollbar->up_through_held);
    668 
    669         ui_scrollbar_destroy(scrollbar);
    670         ui_window_destroy(window);
    671         ui_destroy(ui);
    672 }
    673 
    674 /** Press and release down through */
    675 PCUT_TEST(down_through_press_release)
     667        PCUT_ASSERT_FALSE(scrollbar->upper_trough_held);
     668
     669        ui_scrollbar_destroy(scrollbar);
     670        ui_window_destroy(window);
     671        ui_destroy(ui);
     672}
     673
     674/** Press and release lower trough */
     675PCUT_TEST(lower_trough_press_release)
    676676{
    677677        ui_t *ui = NULL;
     
    706706        ui_scrollbar_set_cb(scrollbar, &test_scrollbar_cb, &resp);
    707707
    708         PCUT_ASSERT_FALSE(scrollbar->down_through_held);
    709 
    710         ui_scrollbar_down_through_press(scrollbar);
    711         PCUT_ASSERT_TRUE(scrollbar->down_through_held);
     708        PCUT_ASSERT_FALSE(scrollbar->lower_trough_held);
     709
     710        ui_scrollbar_lower_trough_press(scrollbar);
     711        PCUT_ASSERT_TRUE(scrollbar->lower_trough_held);
    712712        PCUT_ASSERT_TRUE(resp.page_down);
    713713
     
    717717
    718718        ui_scrollbar_release(scrollbar, &pos);
    719         PCUT_ASSERT_FALSE(scrollbar->down_through_held);
    720 
    721         ui_scrollbar_destroy(scrollbar);
    722         ui_window_destroy(window);
    723         ui_destroy(ui);
    724 }
    725 
    726 /** Updating state of throughs when cursor or thumb moves */
    727 PCUT_TEST(throughs_update)
     719        PCUT_ASSERT_FALSE(scrollbar->lower_trough_held);
     720
     721        ui_scrollbar_destroy(scrollbar);
     722        ui_window_destroy(window);
     723        ui_destroy(ui);
     724}
     725
     726/** Updating state of troughs when cursor or thumb moves */
     727PCUT_TEST(troughs_update)
    728728{
    729729        ui_t *ui = NULL;
     
    754754        ui_scrollbar_set_rect(scrollbar, &rect);
    755755
    756         PCUT_ASSERT_FALSE(scrollbar->down_through_inside);
     756        PCUT_ASSERT_FALSE(scrollbar->lower_trough_inside);
    757757
    758758        pos.x = 60;
    759759        pos.y = 22;
    760760
    761         ui_scrollbar_throughs_update(scrollbar, &pos);
    762         PCUT_ASSERT_TRUE(scrollbar->down_through_inside);
     761        ui_scrollbar_troughs_update(scrollbar, &pos);
     762        PCUT_ASSERT_TRUE(scrollbar->lower_trough_inside);
    763763
    764764        ui_scrollbar_destroy(scrollbar);
     
    10821082}
    10831083
    1084 /** ui_scrollbar_pos_event() detects up through press/release */
    1085 PCUT_TEST(pos_event_press_release_up_through)
     1084/** ui_scrollbar_pos_event() detects upper trough press/release */
     1085PCUT_TEST(pos_event_press_release_upper_trough)
    10861086{
    10871087        ui_t *ui = NULL;
     
    11071107        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    11081108
    1109         PCUT_ASSERT_FALSE(scrollbar->up_through_held);
     1109        PCUT_ASSERT_FALSE(scrollbar->upper_trough_held);
    11101110
    11111111        rect.p0.x = 20;
     
    11151115        ui_scrollbar_set_rect(scrollbar, &rect);
    11161116
    1117         /* Need to move thumb so that up through can be accessed */
     1117        /* Need to move thumb so that upper trough can be accessed */
    11181118        ui_scrollbar_set_pos(scrollbar, 42);
    11191119
    1120         /* Press inside up through is claimed and depresses it */
     1120        /* Press inside upper trough is claimed and depresses it */
    11211121        event.type = POS_PRESS;
    11221122        event.hpos = 50;
    11231123        event.vpos = 20;
    11241124        claim = ui_scrollbar_pos_event(scrollbar, &event);
    1125         PCUT_ASSERT_TRUE(scrollbar->up_through_held);
     1125        PCUT_ASSERT_TRUE(scrollbar->upper_trough_held);
    11261126        PCUT_ASSERT_EQUALS(ui_claimed, claim);
    11271127
    1128         /* Release outside (or anywhere) is claimed and relases up through */
     1128        /* Release outside (or anywhere) is claimed and relases upper trough */
    11291129        event.type = POS_RELEASE;
    11301130        event.hpos = 41;
    11311131        event.vpos = 32;
    11321132        claim = ui_scrollbar_pos_event(scrollbar, &event);
    1133         PCUT_ASSERT_FALSE(scrollbar->up_through_held);
     1133        PCUT_ASSERT_FALSE(scrollbar->upper_trough_held);
    11341134        PCUT_ASSERT_EQUALS(ui_claimed, claim);
    11351135
     
    11391139}
    11401140
    1141 /** ui_scrollbar_pos_event() detects down through press/release */
    1142 PCUT_TEST(pos_event_press_release_down_through)
     1141/** ui_scrollbar_pos_event() detects lower trough press/release */
     1142PCUT_TEST(pos_event_press_release_lower_trough)
    11431143{
    11441144        ui_t *ui = NULL;
     
    11641164        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    11651165
    1166         PCUT_ASSERT_FALSE(scrollbar->up_through_held);
     1166        PCUT_ASSERT_FALSE(scrollbar->upper_trough_held);
    11671167
    11681168        rect.p0.x = 20;
     
    11721172        ui_scrollbar_set_rect(scrollbar, &rect);
    11731173
    1174         /* Press inside down through is claimed and depresses it */
     1174        /* Press inside lower trough is claimed and depresses it */
    11751175        event.type = POS_PRESS;
    11761176        event.hpos = 70;
    11771177        event.vpos = 20;
    11781178        claim = ui_scrollbar_pos_event(scrollbar, &event);
    1179         PCUT_ASSERT_TRUE(scrollbar->down_through_held);
     1179        PCUT_ASSERT_TRUE(scrollbar->lower_trough_held);
    11801180        PCUT_ASSERT_EQUALS(ui_claimed, claim);
    11811181
    1182         /* Release outside (or anywhere) is claimed and relases up through */
     1182        /* Release outside (or anywhere) is claimed and relases upper trough */
    11831183        event.type = POS_RELEASE;
    11841184        event.hpos = 41;
    11851185        event.vpos = 32;
    11861186        claim = ui_scrollbar_pos_event(scrollbar, &event);
    1187         PCUT_ASSERT_FALSE(scrollbar->down_through_held);
     1187        PCUT_ASSERT_FALSE(scrollbar->lower_trough_held);
    11881188        PCUT_ASSERT_EQUALS(ui_claimed, claim);
    11891189
  • uspace/srv/clipboard/meson.build

    r56a3c29e r4f6368c  
    11#
     2# Copyright (c) 2023 Jiri Svoboda
    23# Copyright (c) 2005 Martin Decky
    34# Copyright (c) 2007 Jakub Jermar
     
    2829#
    2930
     31deps = [ 'clipboard' ]
    3032src = files('clipboard.c')
  • uspace/srv/hid/console/console.c

    r56a3c29e r4f6368c  
    3737#include <stdio.h>
    3838#include <adt/prodcons.h>
     39#include <io/console.h>
    3940#include <io/input.h>
    4041#include <ipc/vfs.h>
  • uspace/srv/hid/console/meson.build

    r56a3c29e r4f6368c  
    2828#
    2929
     30deps = [ 'console', 'input', 'output' ]
    3031src = files('console.c')
  • uspace/srv/hid/display/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
    29 deps = [ 'ipcgfx', 'memgfx', 'display', 'ddev', 'dispcfg', 'wndmgt' ]
     29deps = [ 'ipcgfx', 'memgfx', 'display', 'ddev', 'dispcfg', 'wndmgt', 'input' ]
    3030
    3131src = files(
  • uspace/srv/hid/input/meson.build

    r56a3c29e r4f6368c  
    2828#
    2929
    30 deps = [ 'drv' ]
     30deps = [ 'drv', 'console', 'input' ]
    3131src = files(
    3232        'layout/cz.c',
  • uspace/srv/hid/isdv4_tablet/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
    29 deps = [ 'drv' ]
     29deps = [ 'drv', 'input' ]
    3030src = files('main.c', 'isdv4.c')
  • uspace/srv/hid/output/meson.build

    r56a3c29e r4f6368c  
    2828#
    2929
    30 deps = [ 'codepage', 'drv', 'fbfont', 'pixconv', 'ddev' ]
     30deps = [ 'codepage', 'console', 'drv', 'fbfont', 'pixconv', 'ddev', 'output' ]
    3131src = files(
    3232        'ctl/serial.c',
  • uspace/srv/hid/remcons/meson.build

    r56a3c29e r4f6368c  
    2828#
    2929
    30 deps = [ 'inet' ]
     30deps = [ 'inet', 'console' ]
    3131src = files('remcons.c', 'user.c')
  • uspace/srv/hid/s3c24xx_ts/meson.build

    r56a3c29e r4f6368c  
    2727#
    2828
     29deps = [ 'input' ]
    2930src = files('s3c24xx_ts.c')
  • uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c

    r56a3c29e r4f6368c  
    3939#include <ddi.h>
    4040#include <loc.h>
    41 #include <io/console.h>
    4241#include <vfs/vfs.h>
    4342#include <ipc/mouseev.h>
  • uspace/srv/taskmon/meson.build

    r56a3c29e r4f6368c  
    11#
    2 # Copyright (c) 2010 Jiri Svoboda
     2# Copyright (c) 2023 Jiri Svoboda
    33# All rights reserved.
    44#
     
    2727#
    2828
     29deps = [ 'corecfg' ]
    2930src = files('taskmon.c')
  • uspace/srv/test/ipc-test/meson.build

    r56a3c29e r4f6368c  
    11#
    2 # Copyright (c) 2018 Jiri Svoboda
     2# Copyright (c) 2023 Jiri Svoboda
    33# All rights reserved.
    44#
     
    2727#
    2828
     29deps = [ 'ipctest' ]
    2930src = files('main.c')
Note: See TracChangeset for help on using the changeset viewer.