Changeset 1af103e in mainline for uspace/lib/ui/test/wdecor.c


Ignore:
Timestamp:
2023-09-13T17:29:07Z (20 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
61643c8
Parents:
46bd63c9
Message:

System menu (WIP)

The system menu provides browsable, keyboard-accessible access to window
management functions (such as closing, minimizing, maximizing, resizing,
moving).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/test/wdecor.c

    r46bd63c9 r1af103e  
    6262};
    6363
     64static void test_wdecor_sysmenu(ui_wdecor_t *, void *, sysarg_t);
    6465static void test_wdecor_minimize(ui_wdecor_t *, void *);
    6566static void test_wdecor_maximize(ui_wdecor_t *, void *);
     
    7273
    7374static ui_wdecor_cb_t test_wdecor_cb = {
     75        .sysmenu = test_wdecor_sysmenu,
    7476        .minimize = test_wdecor_minimize,
    7577        .maximize = test_wdecor_maximize,
     
    102104
    103105typedef struct {
     106        bool sysmenu;
    104107        bool minimize;
    105108        bool maximize;
     
    109112        gfx_coord2_t pos;
    110113        sysarg_t pos_id;
     114        sysarg_t idev_id;
    111115        bool resize;
    112116        ui_wdecor_rsztype_t rsztype;
     
    241245        rc = gfx_context_delete(gc);
    242246        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     247}
     248
     249/** Test ui_wdecor_sysmenu() */
     250PCUT_TEST(sysmenu)
     251{
     252        errno_t rc;
     253        ui_wdecor_t *wdecor;
     254        test_cb_resp_t resp;
     255
     256        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     257        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     258
     259        /* Sysmenu callback with no callbacks set */
     260        ui_wdecor_sysmenu(wdecor, 42);
     261
     262        /* Sysmenu callback with sysmenu callback not implemented */
     263        ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL);
     264        ui_wdecor_sysmenu(wdecor, 42);
     265
     266        /* Sysmenu callback with real callback set */
     267        resp.sysmenu = false;
     268        resp.idev_id = 0;
     269        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp);
     270        ui_wdecor_sysmenu(wdecor, 42);
     271        PCUT_ASSERT_TRUE(resp.sysmenu);
     272        PCUT_ASSERT_INT_EQUALS(42, resp.idev_id);
     273
     274        ui_wdecor_destroy(wdecor);
    243275}
    244276
     
    544576        PCUT_ASSERT_INT_EQUALS(event.hpos, resp.pos.x);
    545577        PCUT_ASSERT_INT_EQUALS(event.vpos, resp.pos.y);
     578
     579        ui_wdecor_destroy(wdecor);
     580        ui_resource_destroy(resource);
     581
     582        rc = gfx_context_delete(gc);
     583        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     584}
     585
     586/** Pressing F9 generates sysmenu event */
     587PCUT_TEST(kbd_f9_sysmenu)
     588{
     589        errno_t rc;
     590        gfx_rect_t rect;
     591        kbd_event_t event;
     592        gfx_context_t *gc = NULL;
     593        test_gc_t tgc;
     594        test_cb_resp_t resp;
     595        ui_resource_t *resource = NULL;
     596        ui_wdecor_t *wdecor;
     597
     598        memset(&tgc, 0, sizeof(tgc));
     599        rc = gfx_context_new(&ops, &tgc, &gc);
     600        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     601
     602        rc = ui_resource_create(gc, false, &resource);
     603        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     604        PCUT_ASSERT_NOT_NULL(resource);
     605
     606        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
     607        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     608
     609        rect.p0.x = 10;
     610        rect.p0.y = 20;
     611        rect.p1.x = 100;
     612        rect.p1.y = 200;
     613
     614        ui_wdecor_set_rect(wdecor, &rect);
     615
     616        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, (void *) &resp);
     617
     618        resp.move = false;
     619        resp.pos.x = 0;
     620        resp.pos.y = 0;
     621
     622        event.type = KEY_PRESS;
     623        event.mods = 0;
     624        event.key = KC_F9;
     625        event.kbd_id = 42;
     626        ui_wdecor_kbd_event(wdecor, &event);
     627
     628        PCUT_ASSERT_TRUE(resp.sysmenu);
     629        PCUT_ASSERT_INT_EQUALS(event.kbd_id, resp.idev_id);
    546630
    547631        ui_wdecor_destroy(wdecor);
     
    11111195}
    11121196
     1197static void test_wdecor_sysmenu(ui_wdecor_t *wdecor, void *arg,
     1198    sysarg_t idev_id)
     1199{
     1200        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     1201
     1202        resp->sysmenu = true;
     1203        resp->idev_id = idev_id;
     1204}
     1205
    11131206static void test_wdecor_minimize(ui_wdecor_t *wdecor, void *arg)
    11141207{
Note: See TracChangeset for help on using the changeset viewer.