Ignore:
File:
1 edited

Legend:

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

    r7470d97 r211fd68  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3434#include <ui/pbutton.h>
    3535#include <ui/resource.h>
     36#include <ui/ui.h>
    3637#include <ui/wdecor.h>
    3738#include "../private/wdecor.h"
     
    6263};
    6364
     65static void test_wdecor_sysmenu_open(ui_wdecor_t *, void *, sysarg_t);
     66static void test_wdecor_sysmenu_left(ui_wdecor_t *, void *, sysarg_t);
     67static void test_wdecor_sysmenu_right(ui_wdecor_t *, void *, sysarg_t);
     68static void test_wdecor_sysmenu_accel(ui_wdecor_t *, void *, char32_t,
     69    sysarg_t);
     70static void test_wdecor_minimize(ui_wdecor_t *, void *);
     71static void test_wdecor_maximize(ui_wdecor_t *, void *);
     72static void test_wdecor_unmaximize(ui_wdecor_t *, void *);
    6473static void test_wdecor_close(ui_wdecor_t *, void *);
    65 static void test_wdecor_move(ui_wdecor_t *, void *, gfx_coord2_t *);
     74static void test_wdecor_move(ui_wdecor_t *, void *, gfx_coord2_t *, sysarg_t);
    6675static void test_wdecor_resize(ui_wdecor_t *, void *, ui_wdecor_rsztype_t,
    67     gfx_coord2_t *);
     76    gfx_coord2_t *, sysarg_t);
    6877static void test_wdecor_set_cursor(ui_wdecor_t *, void *, ui_stock_cursor_t);
    6978
    7079static ui_wdecor_cb_t test_wdecor_cb = {
     80        .sysmenu_open = test_wdecor_sysmenu_open,
     81        .sysmenu_left = test_wdecor_sysmenu_left,
     82        .sysmenu_right = test_wdecor_sysmenu_right,
     83        .sysmenu_accel = test_wdecor_sysmenu_accel,
     84        .minimize = test_wdecor_minimize,
     85        .maximize = test_wdecor_maximize,
     86        .unmaximize = test_wdecor_unmaximize,
    7187        .close = test_wdecor_close,
    7288        .move = test_wdecor_move,
     
    96112
    97113typedef struct {
     114        bool sysmenu_open;
     115        bool sysmenu_left;
     116        bool sysmenu_right;
     117        bool sysmenu_accel;
     118        bool minimize;
     119        bool maximize;
     120        bool unmaximize;
    98121        bool close;
    99122        bool move;
    100123        gfx_coord2_t pos;
     124        sysarg_t pos_id;
     125        sysarg_t idev_id;
     126        char32_t accel;
    101127        bool resize;
    102128        ui_wdecor_rsztype_t rsztype;
     
    105131} test_cb_resp_t;
    106132
    107 /** Create and destroy button */
     133/** Create and destroy window decoration */
    108134PCUT_TEST(create_destroy)
    109135{
     
    127153PCUT_TEST(set_rect)
    128154{
     155        gfx_context_t *gc = NULL;
     156        test_gc_t tgc;
     157        ui_resource_t *resource = NULL;
    129158        ui_wdecor_t *wdecor;
    130159        gfx_rect_t rect;
    131160        errno_t rc;
    132161
    133         rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     162        memset(&tgc, 0, sizeof(tgc));
     163        rc = gfx_context_new(&ops, &tgc, &gc);
     164        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     165
     166        rc = ui_resource_create(gc, false, &resource);
     167        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     168        PCUT_ASSERT_NOT_NULL(resource);
     169
     170        rc = ui_wdecor_create(resource, "Hello", ui_wds_none, &wdecor);
    134171        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    135172
     
    146183
    147184        ui_wdecor_destroy(wdecor);
     185        ui_resource_destroy(resource);
     186
     187        rc = gfx_context_delete(gc);
     188        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    148189}
    149190
     
    168209}
    169210
    170 /** Paint button */
    171 PCUT_TEST(paint)
     211/** Set window decoration maximized sets internal field */
     212PCUT_TEST(set_maximized)
     213{
     214        ui_wdecor_t *wdecor;
     215        errno_t rc;
     216
     217        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     218        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     219
     220        PCUT_ASSERT_TRUE(wdecor->active);
     221
     222        ui_wdecor_set_maximized(wdecor, false);
     223        PCUT_ASSERT_FALSE(wdecor->maximized);
     224
     225        ui_wdecor_set_maximized(wdecor, true);
     226        PCUT_ASSERT_TRUE(wdecor->maximized);
     227
     228        ui_wdecor_destroy(wdecor);
     229}
     230
     231/** Setting system menu handle as active/inactive */
     232PCUT_TEST(sysmenu_hdl_set_active)
    172233{
    173234        errno_t rc;
     
    185246        PCUT_ASSERT_NOT_NULL(resource);
    186247
    187         rc = ui_wdecor_create(resource, "Hello", ui_wds_none, &wdecor);
     248        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
     249        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     250
     251        PCUT_ASSERT_FALSE(wdecor->sysmenu_hdl_active);
     252        ui_wdecor_sysmenu_hdl_set_active(wdecor, true);
     253        PCUT_ASSERT_TRUE(wdecor->sysmenu_hdl_active);
     254        ui_wdecor_sysmenu_hdl_set_active(wdecor, false);
     255        PCUT_ASSERT_FALSE(wdecor->sysmenu_hdl_active);
     256
     257        ui_wdecor_destroy(wdecor);
     258        ui_resource_destroy(resource);
     259
     260        rc = gfx_context_delete(gc);
     261        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     262}
     263
     264/** Paint system menu handle */
     265PCUT_TEST(sysmenu_hdl_paint)
     266{
     267        errno_t rc;
     268        gfx_context_t *gc = NULL;
     269        test_gc_t tgc;
     270        ui_resource_t *resource = NULL;
     271        ui_wdecor_t *wdecor;
     272        ui_wdecor_geom_t geom;
     273
     274        memset(&tgc, 0, sizeof(tgc));
     275        rc = gfx_context_new(&ops, &tgc, &gc);
     276        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     277
     278        rc = ui_resource_create(gc, false, &resource);
     279        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     280        PCUT_ASSERT_NOT_NULL(resource);
     281
     282        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
     283        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     284
     285        ui_wdecor_get_geom(wdecor, &geom);
     286        rc = ui_wdecor_sysmenu_hdl_paint(wdecor, &geom.sysmenu_hdl_rect);
     287        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     288
     289        ui_wdecor_destroy(wdecor);
     290        ui_resource_destroy(resource);
     291
     292        rc = gfx_context_delete(gc);
     293        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     294}
     295
     296/** Paint window decoration */
     297PCUT_TEST(paint)
     298{
     299        errno_t rc;
     300        gfx_context_t *gc = NULL;
     301        test_gc_t tgc;
     302        ui_resource_t *resource = NULL;
     303        ui_wdecor_t *wdecor;
     304
     305        memset(&tgc, 0, sizeof(tgc));
     306        rc = gfx_context_new(&ops, &tgc, &gc);
     307        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     308
     309        rc = ui_resource_create(gc, false, &resource);
     310        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     311        PCUT_ASSERT_NOT_NULL(resource);
     312
     313        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
    188314        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    189315
     
    196322        rc = gfx_context_delete(gc);
    197323        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     324}
     325
     326/** Test ui_wdecor_sysmenu_open() */
     327PCUT_TEST(sysmenu_open)
     328{
     329        errno_t rc;
     330        ui_wdecor_t *wdecor;
     331        test_cb_resp_t resp;
     332
     333        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     334        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     335
     336        /* Sysmenu open callback with no callbacks set */
     337        ui_wdecor_sysmenu_open(wdecor, 42);
     338
     339        /* Sysmenu open callback with sysmenu callback not implemented */
     340        ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL);
     341        ui_wdecor_sysmenu_open(wdecor, 42);
     342
     343        /* Sysmenu open callback with real callback set */
     344        resp.sysmenu_open = false;
     345        resp.idev_id = 0;
     346        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp);
     347        ui_wdecor_sysmenu_open(wdecor, 42);
     348        PCUT_ASSERT_TRUE(resp.sysmenu_open);
     349        PCUT_ASSERT_INT_EQUALS(42, resp.idev_id);
     350
     351        ui_wdecor_destroy(wdecor);
     352}
     353
     354/** Test ui_wdecor_sysmenu_left() */
     355PCUT_TEST(sysmenu_left)
     356{
     357        errno_t rc;
     358        ui_wdecor_t *wdecor;
     359        test_cb_resp_t resp;
     360
     361        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     362        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     363
     364        /* Sysmenu left callback with no callbacks set */
     365        ui_wdecor_sysmenu_left(wdecor, 42);
     366
     367        /* Sysmenu left callback with sysmenu callback not implemented */
     368        ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL);
     369        ui_wdecor_sysmenu_left(wdecor, 42);
     370
     371        /* Sysmenu left callback with real callback set */
     372        resp.sysmenu_left = false;
     373        resp.idev_id = 0;
     374        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp);
     375        ui_wdecor_sysmenu_left(wdecor, 42);
     376        PCUT_ASSERT_TRUE(resp.sysmenu_left);
     377        PCUT_ASSERT_INT_EQUALS(42, resp.idev_id);
     378
     379        ui_wdecor_destroy(wdecor);
     380}
     381
     382/** Test ui_wdecor_sysmenu_right() */
     383PCUT_TEST(sysmenu_right)
     384{
     385        errno_t rc;
     386        ui_wdecor_t *wdecor;
     387        test_cb_resp_t resp;
     388
     389        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     390        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     391
     392        /* Sysmenu right callback with no callbacks set */
     393        ui_wdecor_sysmenu_right(wdecor, 42);
     394
     395        /* Sysmenu right callback with sysmenu callback not implemented */
     396        ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL);
     397        ui_wdecor_sysmenu_right(wdecor, 42);
     398
     399        /* Sysmenu right callback with real callback set */
     400        resp.sysmenu_right = false;
     401        resp.idev_id = 0;
     402        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp);
     403        ui_wdecor_sysmenu_right(wdecor, 42);
     404        PCUT_ASSERT_TRUE(resp.sysmenu_right);
     405        PCUT_ASSERT_INT_EQUALS(42, resp.idev_id);
     406
     407        ui_wdecor_destroy(wdecor);
     408}
     409
     410/** Test ui_wdecor_sysmenu_accel() */
     411PCUT_TEST(sysmenu_accel)
     412{
     413        errno_t rc;
     414        ui_wdecor_t *wdecor;
     415        test_cb_resp_t resp;
     416
     417        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     418        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     419
     420        /* Sysmenu accelerator callback with no callbacks set */
     421        ui_wdecor_sysmenu_accel(wdecor, 'a', 42);
     422
     423        /* Sysmenu accelerator callback with sysmenu callback not implemented */
     424        ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL);
     425        ui_wdecor_sysmenu_accel(wdecor, 'a', 42);
     426
     427        /* Sysmenu accelerator callback with real callback set */
     428        resp.sysmenu_accel = false;
     429        resp.idev_id = 0;
     430        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp);
     431        ui_wdecor_sysmenu_accel(wdecor, 'a', 42);
     432        PCUT_ASSERT_TRUE(resp.sysmenu_accel);
     433        PCUT_ASSERT_INT_EQUALS('a', resp.accel);
     434        PCUT_ASSERT_INT_EQUALS(42, resp.idev_id);
     435
     436        ui_wdecor_destroy(wdecor);
     437}
     438
     439/** Test ui_wdecor_minimize() */
     440PCUT_TEST(minimize)
     441{
     442        errno_t rc;
     443        ui_wdecor_t *wdecor;
     444        test_cb_resp_t resp;
     445
     446        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     447        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     448
     449        /* Minimize callback with no callbacks set */
     450        ui_wdecor_minimize(wdecor);
     451
     452        /* Minimize callback with minimize callback not implemented */
     453        ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL);
     454        ui_wdecor_minimize(wdecor);
     455
     456        /* Minimize callback with real callback set */
     457        resp.minimize = false;
     458        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp);
     459        ui_wdecor_minimize(wdecor);
     460        PCUT_ASSERT_TRUE(resp.minimize);
     461
     462        ui_wdecor_destroy(wdecor);
     463}
     464
     465/** Test ui_wdecor_maximize() */
     466PCUT_TEST(maximize)
     467{
     468        errno_t rc;
     469        ui_wdecor_t *wdecor;
     470        test_cb_resp_t resp;
     471
     472        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     473        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     474
     475        /* Maximize callback with no callbacks set */
     476        ui_wdecor_maximize(wdecor);
     477
     478        /* Maxmimize callback with maximize callback not implemented */
     479        ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL);
     480        ui_wdecor_maximize(wdecor);
     481
     482        /* Maximize callback with real callback set */
     483        resp.maximize = false;
     484        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp);
     485        ui_wdecor_maximize(wdecor);
     486        PCUT_ASSERT_TRUE(resp.maximize);
     487
     488        ui_wdecor_destroy(wdecor);
     489}
     490
     491/** Test ui_wdecor_unmaximize() */
     492PCUT_TEST(unmaximize)
     493{
     494        errno_t rc;
     495        ui_wdecor_t *wdecor;
     496        test_cb_resp_t resp;
     497
     498        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     499        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     500
     501        /* Unmaximize callback with no callbacks set */
     502        ui_wdecor_unmaximize(wdecor);
     503
     504        /* Unmaximize callback with unmaximize callback not implemented */
     505        ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL);
     506        ui_wdecor_unmaximize(wdecor);
     507
     508        /* Unmaximize callback with real callback set */
     509        resp.unmaximize = false;
     510        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp);
     511        ui_wdecor_unmaximize(wdecor);
     512        PCUT_ASSERT_TRUE(resp.unmaximize);
     513
     514        ui_wdecor_destroy(wdecor);
    198515}
    199516
     
    231548        test_cb_resp_t resp;
    232549        gfx_coord2_t pos;
     550        sysarg_t pos_id;
    233551
    234552        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     
    237555        pos.x = 3;
    238556        pos.y = 4;
     557        pos_id = 5;
    239558
    240559        /* Move callback with no callbacks set */
    241         ui_wdecor_move(wdecor, &pos);
     560        ui_wdecor_move(wdecor, &pos, pos_id);
    242561
    243562        /* Move callback with move callback not implemented */
    244563        ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL);
    245         ui_wdecor_move(wdecor, &pos);
     564        ui_wdecor_move(wdecor, &pos, pos_id);
    246565
    247566        /* Move callback with real callback set */
     
    249568        resp.pos.x = 0;
    250569        resp.pos.y = 0;
     570        resp.pos_id = 0;
    251571        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp);
    252         ui_wdecor_move(wdecor, &pos);
     572        ui_wdecor_move(wdecor, &pos, pos_id);
    253573        PCUT_ASSERT_TRUE(resp.move);
    254574        PCUT_ASSERT_INT_EQUALS(pos.x, resp.pos.x);
    255575        PCUT_ASSERT_INT_EQUALS(pos.y, resp.pos.y);
     576        PCUT_ASSERT_INT_EQUALS(pos_id, resp.pos_id);
    256577
    257578        ui_wdecor_destroy(wdecor);
     
    266587        ui_wdecor_rsztype_t rsztype;
    267588        gfx_coord2_t pos;
     589        sysarg_t pos_id;
    268590
    269591        rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     
    273595        pos.x = 3;
    274596        pos.y = 4;
     597        pos_id = 5;
    275598
    276599        /* Resize callback with no callbacks set */
    277         ui_wdecor_resize(wdecor, rsztype, &pos);
     600        ui_wdecor_resize(wdecor, rsztype, &pos, pos_id);
    278601
    279602        /* Resize callback with move callback not implemented */
    280603        ui_wdecor_set_cb(wdecor, &dummy_wdecor_cb, NULL);
    281         ui_wdecor_resize(wdecor, rsztype, &pos);
     604        ui_wdecor_resize(wdecor, rsztype, &pos, pos_id);
    282605
    283606        /* Resize callback with real callback set */
     
    287610        resp.pos.y = 0;
    288611        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, &resp);
    289         ui_wdecor_resize(wdecor, rsztype, &pos);
     612        ui_wdecor_resize(wdecor, rsztype, &pos, pos_id);
    290613        PCUT_ASSERT_TRUE(resp.resize);
    291614        PCUT_ASSERT_INT_EQUALS(rsztype, resp.rsztype);
    292615        PCUT_ASSERT_INT_EQUALS(pos.x, resp.pos.x);
    293616        PCUT_ASSERT_INT_EQUALS(pos.y, resp.pos.y);
     617        PCUT_ASSERT_INT_EQUALS(pos_id, resp.pos_id);
    294618
    295619        ui_wdecor_destroy(wdecor);
     
    330654PCUT_TEST(close_btn_clicked)
    331655{
     656        gfx_context_t *gc = NULL;
     657        test_gc_t tgc;
     658        ui_resource_t *resource = NULL;
    332659        ui_wdecor_t *wdecor;
    333660        gfx_rect_t rect;
     
    335662        errno_t rc;
    336663
    337         rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     664        memset(&tgc, 0, sizeof(tgc));
     665        rc = gfx_context_new(&ops, &tgc, &gc);
     666        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     667
     668        rc = ui_resource_create(gc, false, &resource);
     669        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     670        PCUT_ASSERT_NOT_NULL(resource);
     671
     672        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
    338673        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    339674
     
    353688
    354689        ui_wdecor_destroy(wdecor);
     690        ui_resource_destroy(resource);
     691
     692        rc = gfx_context_delete(gc);
     693        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    355694}
    356695
     
    407746}
    408747
    409 /** ui_wdecor_get_geom() with ui_wds_none produces the correct geometry */
    410 PCUT_TEST(get_geom_none)
    411 {
     748/** Pressing F10 generates sysmenu event.
     749 *
     750 * Note that in a window with menu bar the menu bar would claim F10
     751 * so it would never be delivered to window decoration.
     752 */
     753PCUT_TEST(kbd_f10_sysmenu)
     754{
     755        errno_t rc;
     756        gfx_rect_t rect;
     757        kbd_event_t event;
    412758        gfx_context_t *gc = NULL;
    413759        test_gc_t tgc;
     760        test_cb_resp_t resp;
    414761        ui_resource_t *resource = NULL;
    415762        ui_wdecor_t *wdecor;
    416         gfx_rect_t rect;
    417         ui_wdecor_geom_t geom;
    418         errno_t rc;
    419763
    420764        memset(&tgc, 0, sizeof(tgc));
     
    426770        PCUT_ASSERT_NOT_NULL(resource);
    427771
    428         rc = ui_wdecor_create(resource, "Hello", ui_wds_none, &wdecor);
     772        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
    429773        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    430774
     
    435779
    436780        ui_wdecor_set_rect(wdecor, &rect);
     781
     782        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, (void *) &resp);
     783
     784        resp.sysmenu_open = false;
     785
     786        event.type = KEY_PRESS;
     787        event.mods = 0;
     788        event.key = KC_F10;
     789        event.kbd_id = 42;
     790        ui_wdecor_kbd_event(wdecor, &event);
     791
     792        PCUT_ASSERT_TRUE(resp.sysmenu_open);
     793        PCUT_ASSERT_INT_EQUALS(event.kbd_id, resp.idev_id);
     794
     795        ui_wdecor_destroy(wdecor);
     796        ui_resource_destroy(resource);
     797
     798        rc = gfx_context_delete(gc);
     799        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     800}
     801
     802/** Down key with active sysmenu handle generates sysmenu open event */
     803PCUT_TEST(kbd_down_sysmenu)
     804{
     805        errno_t rc;
     806        gfx_rect_t rect;
     807        kbd_event_t event;
     808        gfx_context_t *gc = NULL;
     809        test_gc_t tgc;
     810        test_cb_resp_t resp;
     811        ui_resource_t *resource = NULL;
     812        ui_wdecor_t *wdecor;
     813
     814        memset(&tgc, 0, sizeof(tgc));
     815        rc = gfx_context_new(&ops, &tgc, &gc);
     816        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     817
     818        rc = ui_resource_create(gc, false, &resource);
     819        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     820        PCUT_ASSERT_NOT_NULL(resource);
     821
     822        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
     823        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     824
     825        rect.p0.x = 10;
     826        rect.p0.y = 20;
     827        rect.p1.x = 100;
     828        rect.p1.y = 200;
     829
     830        ui_wdecor_set_rect(wdecor, &rect);
     831
     832        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, (void *) &resp);
     833
     834        ui_wdecor_sysmenu_hdl_set_active(wdecor, true);
     835
     836        resp.sysmenu_open = false;
     837
     838        event.type = KEY_PRESS;
     839        event.mods = 0;
     840        event.key = KC_DOWN;
     841        event.kbd_id = 42;
     842        ui_wdecor_kbd_event(wdecor, &event);
     843
     844        PCUT_ASSERT_TRUE(resp.sysmenu_open);
     845        PCUT_ASSERT_INT_EQUALS(event.kbd_id, resp.idev_id);
     846
     847        ui_wdecor_destroy(wdecor);
     848        ui_resource_destroy(resource);
     849
     850        rc = gfx_context_delete(gc);
     851        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     852}
     853
     854/** Left key with active sysmenu handle generates sysmenu left event */
     855PCUT_TEST(kbd_left_sysmenu)
     856{
     857        errno_t rc;
     858        gfx_rect_t rect;
     859        kbd_event_t event;
     860        gfx_context_t *gc = NULL;
     861        test_gc_t tgc;
     862        test_cb_resp_t resp;
     863        ui_resource_t *resource = NULL;
     864        ui_wdecor_t *wdecor;
     865
     866        memset(&tgc, 0, sizeof(tgc));
     867        rc = gfx_context_new(&ops, &tgc, &gc);
     868        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     869
     870        rc = ui_resource_create(gc, false, &resource);
     871        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     872        PCUT_ASSERT_NOT_NULL(resource);
     873
     874        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
     875        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     876
     877        rect.p0.x = 10;
     878        rect.p0.y = 20;
     879        rect.p1.x = 100;
     880        rect.p1.y = 200;
     881
     882        ui_wdecor_set_rect(wdecor, &rect);
     883
     884        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, (void *) &resp);
     885
     886        ui_wdecor_sysmenu_hdl_set_active(wdecor, true);
     887
     888        resp.sysmenu_left = false;
     889
     890        event.type = KEY_PRESS;
     891        event.mods = 0;
     892        event.key = KC_LEFT;
     893        event.kbd_id = 42;
     894        ui_wdecor_kbd_event(wdecor, &event);
     895
     896        PCUT_ASSERT_TRUE(resp.sysmenu_left);
     897        PCUT_ASSERT_INT_EQUALS(event.kbd_id, resp.idev_id);
     898
     899        ui_wdecor_destroy(wdecor);
     900        ui_resource_destroy(resource);
     901
     902        rc = gfx_context_delete(gc);
     903        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     904}
     905
     906/** Right key with active sysmenu handle generates sysmenu right event */
     907PCUT_TEST(kbd_right_sysmenu)
     908{
     909        errno_t rc;
     910        gfx_rect_t rect;
     911        kbd_event_t event;
     912        gfx_context_t *gc = NULL;
     913        test_gc_t tgc;
     914        test_cb_resp_t resp;
     915        ui_resource_t *resource = NULL;
     916        ui_wdecor_t *wdecor;
     917
     918        memset(&tgc, 0, sizeof(tgc));
     919        rc = gfx_context_new(&ops, &tgc, &gc);
     920        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     921
     922        rc = ui_resource_create(gc, false, &resource);
     923        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     924        PCUT_ASSERT_NOT_NULL(resource);
     925
     926        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
     927        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     928
     929        rect.p0.x = 10;
     930        rect.p0.y = 20;
     931        rect.p1.x = 100;
     932        rect.p1.y = 200;
     933
     934        ui_wdecor_set_rect(wdecor, &rect);
     935
     936        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, (void *) &resp);
     937
     938        ui_wdecor_sysmenu_hdl_set_active(wdecor, true);
     939
     940        resp.sysmenu_right = false;
     941
     942        event.type = KEY_PRESS;
     943        event.mods = 0;
     944        event.key = KC_RIGHT;
     945        event.kbd_id = 42;
     946        ui_wdecor_kbd_event(wdecor, &event);
     947
     948        PCUT_ASSERT_TRUE(resp.sysmenu_right);
     949        PCUT_ASSERT_INT_EQUALS(event.kbd_id, resp.idev_id);
     950
     951        ui_wdecor_destroy(wdecor);
     952        ui_resource_destroy(resource);
     953
     954        rc = gfx_context_delete(gc);
     955        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     956}
     957
     958/** Character key with active sysmenu handle generates sysmenu accel event */
     959PCUT_TEST(kbd_accel_sysmenu)
     960{
     961        errno_t rc;
     962        gfx_rect_t rect;
     963        kbd_event_t event;
     964        gfx_context_t *gc = NULL;
     965        test_gc_t tgc;
     966        test_cb_resp_t resp;
     967        ui_resource_t *resource = NULL;
     968        ui_wdecor_t *wdecor;
     969
     970        memset(&tgc, 0, sizeof(tgc));
     971        rc = gfx_context_new(&ops, &tgc, &gc);
     972        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     973
     974        rc = ui_resource_create(gc, false, &resource);
     975        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     976        PCUT_ASSERT_NOT_NULL(resource);
     977
     978        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
     979        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     980
     981        rect.p0.x = 10;
     982        rect.p0.y = 20;
     983        rect.p1.x = 100;
     984        rect.p1.y = 200;
     985
     986        ui_wdecor_set_rect(wdecor, &rect);
     987
     988        ui_wdecor_set_cb(wdecor, &test_wdecor_cb, (void *) &resp);
     989
     990        ui_wdecor_sysmenu_hdl_set_active(wdecor, true);
     991
     992        resp.sysmenu_accel = false;
     993
     994        event.type = KEY_PRESS;
     995        event.mods = 0;
     996        event.key = KC_A;
     997        event.c = 'a';
     998        event.kbd_id = 42;
     999        ui_wdecor_kbd_event(wdecor, &event);
     1000
     1001        PCUT_ASSERT_TRUE(resp.sysmenu_accel);
     1002        PCUT_ASSERT_INT_EQUALS(event.c, resp.accel);
     1003        PCUT_ASSERT_INT_EQUALS(event.kbd_id, resp.idev_id);
     1004
     1005        ui_wdecor_destroy(wdecor);
     1006        ui_resource_destroy(resource);
     1007
     1008        rc = gfx_context_delete(gc);
     1009        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1010}
     1011
     1012/** ui_wdecor_get_geom() with ui_wds_none produces the correct geometry */
     1013PCUT_TEST(get_geom_none)
     1014{
     1015        gfx_context_t *gc = NULL;
     1016        test_gc_t tgc;
     1017        ui_resource_t *resource = NULL;
     1018        ui_wdecor_t *wdecor;
     1019        gfx_rect_t rect;
     1020        ui_wdecor_geom_t geom;
     1021        errno_t rc;
     1022
     1023        memset(&tgc, 0, sizeof(tgc));
     1024        rc = gfx_context_new(&ops, &tgc, &gc);
     1025        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1026
     1027        rc = ui_resource_create(gc, false, &resource);
     1028        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1029        PCUT_ASSERT_NOT_NULL(resource);
     1030
     1031        rc = ui_wdecor_create(resource, "Hello", ui_wds_none, &wdecor);
     1032        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1033
     1034        rect.p0.x = 10;
     1035        rect.p0.y = 20;
     1036        rect.p1.x = 100;
     1037        rect.p1.y = 200;
     1038
     1039        ui_wdecor_set_rect(wdecor, &rect);
    4371040        ui_wdecor_get_geom(wdecor, &geom);
    4381041
     
    4471050        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p1.y);
    4481051
     1052        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.x);
     1053        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.y);
     1054        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.x);
     1055        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.y);
     1056
     1057        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p0.x);
     1058        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p0.y);
     1059        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p1.x);
     1060        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p1.y);
     1061
     1062        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.x);
     1063        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.y);
     1064        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.x);
     1065        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.y);
     1066
     1067        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.x);
     1068        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.y);
     1069        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.x);
     1070        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.y);
     1071
    4491072        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.x);
    4501073        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.y);
     
    5041127        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p1.y);
    5051128
     1129        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.x);
     1130        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.y);
     1131        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.x);
     1132        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.y);
     1133
     1134        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p0.x);
     1135        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p0.y);
     1136        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p1.x);
     1137        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p1.y);
     1138
     1139        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.x);
     1140        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.y);
     1141        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.x);
     1142        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.y);
     1143
     1144        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.x);
     1145        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.y);
     1146        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.x);
     1147        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.y);
     1148
    5061149        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.x);
    5071150        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.y);
     
    5621205        PCUT_ASSERT_INT_EQUALS(46, geom.title_bar_rect.p1.y);
    5631206
     1207        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.x);
     1208        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.y);
     1209        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.x);
     1210        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.y);
     1211
     1212        PCUT_ASSERT_INT_EQUALS(18, geom.caption_rect.p0.x);
     1213        PCUT_ASSERT_INT_EQUALS(24, geom.caption_rect.p0.y);
     1214        PCUT_ASSERT_INT_EQUALS(91, geom.caption_rect.p1.x);
     1215        PCUT_ASSERT_INT_EQUALS(46, geom.caption_rect.p1.y);
     1216
     1217        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.x);
     1218        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.y);
     1219        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.x);
     1220        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.y);
     1221
     1222        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.x);
     1223        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.y);
     1224        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.x);
     1225        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.y);
     1226
    5641227        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.x);
    5651228        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.y);
     
    6191282        PCUT_ASSERT_INT_EQUALS(46, geom.title_bar_rect.p1.y);
    6201283
     1284        PCUT_ASSERT_INT_EQUALS(15, geom.sysmenu_hdl_rect.p0.x);
     1285        PCUT_ASSERT_INT_EQUALS(25, geom.sysmenu_hdl_rect.p0.y);
     1286        PCUT_ASSERT_INT_EQUALS(35, geom.sysmenu_hdl_rect.p1.x);
     1287        PCUT_ASSERT_INT_EQUALS(45, geom.sysmenu_hdl_rect.p1.y);
     1288
     1289        PCUT_ASSERT_INT_EQUALS(38, geom.caption_rect.p0.x);
     1290        PCUT_ASSERT_INT_EQUALS(24, geom.caption_rect.p0.y);
     1291        PCUT_ASSERT_INT_EQUALS(51, geom.caption_rect.p1.x);
     1292        PCUT_ASSERT_INT_EQUALS(46, geom.caption_rect.p1.y);
     1293
     1294        PCUT_ASSERT_INT_EQUALS(55, geom.btn_min_rect.p0.x);
     1295        PCUT_ASSERT_INT_EQUALS(25, geom.btn_min_rect.p0.y);
     1296        PCUT_ASSERT_INT_EQUALS(75, geom.btn_min_rect.p1.x);
     1297        PCUT_ASSERT_INT_EQUALS(45, geom.btn_min_rect.p1.y);
     1298
     1299        /* Maximize button is not in ui_wds_decorated */
     1300        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.x);
     1301        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.y);
     1302        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.x);
     1303        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.y);
     1304
    6211305        PCUT_ASSERT_INT_EQUALS(75, geom.btn_close_rect.p0.x);
    6221306        PCUT_ASSERT_INT_EQUALS(25, geom.btn_close_rect.p0.y);
     
    6391323PCUT_TEST(rect_from_app)
    6401324{
     1325        errno_t rc;
     1326        ui_t *ui = NULL;
    6411327        gfx_rect_t arect;
    6421328        gfx_rect_t rect;
     1329
     1330        rc = ui_create_disp(NULL, &ui);
     1331        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    6431332
    6441333        arect.p0.x = 14;
     
    6471336        arect.p1.y = 196;
    6481337
    649         ui_wdecor_rect_from_app(ui_wds_none, &arect, &rect);
     1338        ui_wdecor_rect_from_app(ui, ui_wds_none, &arect, &rect);
    6501339
    6511340        PCUT_ASSERT_INT_EQUALS(14, rect.p0.x);
     
    6541343        PCUT_ASSERT_INT_EQUALS(196, rect.p1.y);
    6551344
    656         ui_wdecor_rect_from_app(ui_wds_frame, &arect, &rect);
     1345        ui_wdecor_rect_from_app(ui, ui_wds_frame, &arect, &rect);
    6571346
    6581347        PCUT_ASSERT_INT_EQUALS(10, rect.p0.x);
     
    6611350        PCUT_ASSERT_INT_EQUALS(200, rect.p1.y);
    6621351
    663         ui_wdecor_rect_from_app(ui_wds_decorated, &arect, &rect);
     1352        ui_wdecor_rect_from_app(ui, ui_wds_decorated, &arect, &rect);
    6641353
    6651354        PCUT_ASSERT_INT_EQUALS(10, rect.p0.x);
     
    6681357        PCUT_ASSERT_INT_EQUALS(200, rect.p1.y);
    6691358
     1359        ui_destroy(ui);
    6701360}
    6711361
     
    6731363PCUT_TEST(get_rsztype)
    6741364{
     1365        gfx_context_t *gc = NULL;
     1366        test_gc_t tgc;
     1367        ui_resource_t *resource = NULL;
    6751368        ui_wdecor_t *wdecor;
    6761369        gfx_rect_t rect;
     
    6791372        errno_t rc;
    6801373
    681         rc = ui_wdecor_create(NULL, "Hello", ui_wds_resizable, &wdecor);
     1374        memset(&tgc, 0, sizeof(tgc));
     1375        rc = gfx_context_new(&ops, &tgc, &gc);
     1376        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1377
     1378        rc = ui_resource_create(gc, false, &resource);
     1379        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1380        PCUT_ASSERT_NOT_NULL(resource);
     1381
     1382        rc = ui_wdecor_create(resource, "Hello", ui_wds_resizable, &wdecor);
    6821383        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    6831384
     
    7591460        /* Non-resizable window */
    7601461
    761         rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     1462        rc = ui_wdecor_create(resource, "Hello", ui_wds_none, &wdecor);
    7621463        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7631464
     
    7751476
    7761477        ui_wdecor_destroy(wdecor);
     1478        ui_resource_destroy(resource);
     1479
     1480        rc = gfx_context_delete(gc);
     1481        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7771482}
    7781483
     
    8031508PCUT_TEST(frame_pos_event)
    8041509{
     1510        gfx_context_t *gc = NULL;
     1511        test_gc_t tgc;
     1512        ui_resource_t *resource = NULL;
    8051513        ui_wdecor_t *wdecor;
    8061514        gfx_rect_t rect;
     
    8091517        errno_t rc;
    8101518
    811         rc = ui_wdecor_create(NULL, "Hello", ui_wds_resizable, &wdecor);
     1519        memset(&tgc, 0, sizeof(tgc));
     1520        rc = gfx_context_new(&ops, &tgc, &gc);
     1521        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1522
     1523        rc = ui_resource_create(gc, false, &resource);
     1524        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1525        PCUT_ASSERT_NOT_NULL(resource);
     1526
     1527        rc = ui_wdecor_create(resource, "Hello", ui_wds_resizable, &wdecor);
    8121528        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    8131529
     
    8451561
    8461562        ui_wdecor_destroy(wdecor);
     1563        ui_resource_destroy(resource);
     1564
     1565        rc = gfx_context_delete(gc);
     1566        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    8471567}
    8481568
     
    9361656}
    9371657
     1658static void test_wdecor_sysmenu_open(ui_wdecor_t *wdecor, void *arg,
     1659    sysarg_t idev_id)
     1660{
     1661        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     1662
     1663        resp->sysmenu_open = true;
     1664        resp->idev_id = idev_id;
     1665}
     1666
     1667static void test_wdecor_sysmenu_left(ui_wdecor_t *wdecor, void *arg,
     1668    sysarg_t idev_id)
     1669{
     1670        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     1671
     1672        resp->sysmenu_left = true;
     1673        resp->idev_id = idev_id;
     1674}
     1675
     1676static void test_wdecor_sysmenu_right(ui_wdecor_t *wdecor, void *arg,
     1677    sysarg_t idev_id)
     1678{
     1679        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     1680
     1681        resp->sysmenu_right = true;
     1682        resp->idev_id = idev_id;
     1683}
     1684
     1685static void test_wdecor_sysmenu_accel(ui_wdecor_t *wdecor, void *arg,
     1686    char32_t accel, sysarg_t idev_id)
     1687{
     1688        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     1689
     1690        resp->sysmenu_accel = true;
     1691        resp->accel = accel;
     1692        resp->idev_id = idev_id;
     1693}
     1694
     1695static void test_wdecor_minimize(ui_wdecor_t *wdecor, void *arg)
     1696{
     1697        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     1698
     1699        resp->minimize = true;
     1700}
     1701
     1702static void test_wdecor_maximize(ui_wdecor_t *wdecor, void *arg)
     1703{
     1704        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     1705
     1706        resp->maximize = true;
     1707}
     1708
     1709static void test_wdecor_unmaximize(ui_wdecor_t *wdecor, void *arg)
     1710{
     1711        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     1712
     1713        resp->unmaximize = true;
     1714}
     1715
    9381716static void test_wdecor_close(ui_wdecor_t *wdecor, void *arg)
    9391717{
     
    9431721}
    9441722
    945 static void test_wdecor_move(ui_wdecor_t *wdecor, void *arg, gfx_coord2_t *pos)
     1723static void test_wdecor_move(ui_wdecor_t *wdecor, void *arg, gfx_coord2_t *pos,
     1724    sysarg_t pos_id)
    9461725{
    9471726        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     
    9491728        resp->move = true;
    9501729        resp->pos = *pos;
     1730        resp->pos_id = pos_id;
    9511731}
    9521732
    9531733static void test_wdecor_resize(ui_wdecor_t *wdecor, void *arg,
    954     ui_wdecor_rsztype_t rsztype, gfx_coord2_t *pos)
     1734    ui_wdecor_rsztype_t rsztype, gfx_coord2_t *pos, sysarg_t pos_id)
    9551735{
    9561736        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     
    9591739        resp->rsztype = rsztype;
    9601740        resp->pos = *pos;
     1741        resp->pos_id = pos_id;
    9611742}
    9621743
Note: See TracChangeset for help on using the changeset viewer.