Changeset 344f8b9 in mainline


Ignore:
Timestamp:
2021-05-20T15:34:03Z (4 years ago)
Author:
Jiri Svoboda <jiri@…>
Children:
f2416ec3
Parents:
da15002
Message:

Open menu in separate popup window (WIP)

Location:
uspace
Files:
5 added
15 edited

Legend:

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

    rda15002 r344f8b9  
    887887        }
    888888
    889         rc = ui_menu_bar_create(ui_res, &calc.menubar);
     889        rc = ui_menu_bar_create(ui, ui_res, &calc.menubar);
    890890        if (rc != EOK) {
    891891                printf("Error creating menu bar.\n");
  • uspace/app/uidemo/uidemo.c

    rda15002 r344f8b9  
    331331        }
    332332
    333         rc = ui_menu_bar_create(ui_res, &demo.mbar);
     333        rc = ui_menu_bar_create(ui, ui_res, &demo.mbar);
    334334        if (rc != EOK) {
    335335                printf("Error creating menu bar.\n");
  • uspace/lib/ui/include/ui/menu.h

    rda15002 r344f8b9  
    5050extern const char *ui_menu_caption(ui_menu_t *);
    5151extern void ui_menu_get_rect(ui_menu_t *, gfx_coord2_t *, gfx_rect_t *);
     52extern errno_t ui_menu_open(ui_menu_t *, gfx_rect_t *);
     53extern void ui_menu_close(ui_menu_t *);
    5254extern errno_t ui_menu_paint(ui_menu_t *, gfx_coord2_t *);
    53 extern errno_t ui_menu_unpaint(ui_menu_t *);
    5455extern ui_evclaim_t ui_menu_pos_event(ui_menu_t *, gfx_coord2_t *,
    5556    pos_event_t *);
  • uspace/lib/ui/include/ui/menubar.h

    rda15002 r344f8b9  
    4444#include <types/ui/event.h>
    4545#include <types/ui/resource.h>
     46#include <types/ui/ui.h>
    4647
    47 extern errno_t ui_menu_bar_create(ui_resource_t *,
     48extern errno_t ui_menu_bar_create(ui_t *, ui_resource_t *,
    4849    ui_menu_bar_t **);
    4950extern void ui_menu_bar_destroy(ui_menu_bar_t *);
  • uspace/lib/ui/meson.build

    rda15002 r344f8b9  
    4242        'src/paint.c',
    4343        'src/pbutton.c',
     44        'src/popup.c',
    4445        'src/rbutton.c',
    4546        'src/resource.c',
     
    6465        'test/paint.c',
    6566        'test/pbutton.c',
     67        'test/popup.c',
    6668        'test/rbutton.c',
    6769        'test/resource.c',
  • uspace/lib/ui/private/menu.h

    rda15002 r344f8b9  
    4242#include <stdbool.h>
    4343#include <types/ui/menu.h>
     44#include <types/ui/resource.h>
    4445
    4546/** Actual structure of menu.
     
    5455        /** Caption */
    5556        char *caption;
    56         /** Menu is currently open */
    57         bool open;
     57        /** Popup window or @c NULL if menu is not currently open */
     58        struct ui_popup *popup;
    5859        /** Selected menu entry or @c NULL */
    5960        struct ui_menu_entry *selected;
     
    8081
    8182extern void ui_menu_get_geom(ui_menu_t *, gfx_coord2_t *, ui_menu_geom_t *);
     83extern ui_resource_t *ui_menu_get_res(ui_menu_t *);
    8284
    8385#endif
  • uspace/lib/ui/private/menubar.h

    rda15002 r344f8b9  
    5050        /** Base control object */
    5151        struct ui_control *control;
    52         /** UI resource */
     52        /** UI */
     53        struct ui *ui;
     54        /** UI resource (for window containing menu bar) */
    5355        struct ui_resource *res;
    5456        /** Menu bar rectangle */
     
    5658        /** Selected menu or @c NULL */
    5759        struct ui_menu *selected;
    58         /** Position of selected entry */
    59         gfx_coord2_t sel_pos;
    6060        /** List of menus (ui_menu_t) */
    6161        list_t menus;
    6262};
    6363
    64 extern void ui_menu_bar_select(ui_menu_bar_t *, gfx_coord2_t *, ui_menu_t *);
     64extern void ui_menu_bar_select(ui_menu_bar_t *, gfx_rect_t *, ui_menu_t *);
    6565
    6666#endif
  • uspace/lib/ui/src/menu.c

    rda15002 r344f8b9  
    4545#include <ui/control.h>
    4646#include <ui/paint.h>
     47#include <ui/popup.h>
    4748#include <ui/menu.h>
    4849#include <ui/menuentry.h>
     
    5960};
    6061
     62static void ui_menu_popup_pos(ui_popup_t *, void *, pos_event_t *);
     63
     64static ui_popup_cb_t ui_menu_popup_cb = {
     65        .pos = ui_menu_popup_pos
     66};
     67
    6168/** Create new menu.
    6269 *
     
    203210}
    204211
     212/** Get UI resource from menu.
     213 *
     214 * @param menu Menu
     215 * @return UI resource
     216 */
     217ui_resource_t *ui_menu_get_res(ui_menu_t *menu)
     218{
     219        return ui_popup_get_res(menu->popup);
     220}
     221
     222/** Open menu.
     223 *
     224 * @param menu Menu
     225 * @param prect Parent rectangle around which the menu should be placed
     226 */
     227errno_t ui_menu_open(ui_menu_t *menu, gfx_rect_t *prect)
     228{
     229        ui_popup_t *popup = NULL;
     230        ui_popup_params_t params;
     231        ui_menu_geom_t geom;
     232        gfx_coord2_t mpos;
     233        errno_t rc;
     234
     235        /* Determine menu dimensions */
     236
     237        mpos.x = 0;
     238        mpos.y = 0;
     239        ui_menu_get_geom(menu, &mpos, &geom);
     240
     241        ui_popup_params_init(&params);
     242        params.rect = geom.outer_rect;
     243
     244        rc = ui_popup_create(menu->mbar->ui, &params, &popup);
     245        if (rc != EOK)
     246                return rc;
     247
     248        menu->popup = popup;
     249        ui_popup_set_cb(popup, &ui_menu_popup_cb, menu);
     250
     251        return ui_menu_paint(menu, &mpos);
     252}
     253
     254/** Close menu.
     255 *
     256 * @param menu Menu
     257 */
     258void ui_menu_close(ui_menu_t *menu)
     259{
     260        ui_popup_destroy(menu->popup);
     261        menu->popup = NULL;
     262}
     263
    205264/** Paint menu.
    206265 *
     
    218277        errno_t rc;
    219278
    220         res = menu->mbar->res;
     279        res = ui_menu_get_res(menu);
    221280        ui_menu_get_geom(menu, spos, &geom);
    222281
     
    261320error:
    262321        return rc;
    263 }
    264 
    265 /** Unpaint menu.
    266  *
    267  * @param menu Menu
    268  * @return EOK on success or an error code
    269  */
    270 errno_t ui_menu_unpaint(ui_menu_t *menu)
    271 {
    272         ui_resource_expose(menu->mbar->res);
    273         return EOK;
    274322}
    275323
     
    312360        } else {
    313361                /* Press outside menu - close it */
    314                 if (event->type == POS_PRESS)
    315                         ui_menu_bar_select(menu->mbar, NULL, NULL);
     362//              if (event->type == POS_PRESS)
     363//                      ui_menu_bar_select(menu->mbar, NULL, NULL);
    316364        }
    317365
     
    319367}
    320368
     369/** Handle position event in menu popup window.
     370 *
     371 * @param popup Menu popup window
     372 * @param arg Argument (ui_menu_t *)
     373 * @param event Position event
     374 */
     375static void ui_menu_popup_pos(ui_popup_t *popup, void *arg, pos_event_t *event)
     376{
     377        ui_menu_t *menu = (ui_menu_t *)arg;
     378        gfx_coord2_t spos;
     379
     380        spos.x = 0;
     381        spos.y = 0;
     382        ui_menu_pos_event(menu, &spos, event);
     383}
     384
    321385/** @}
    322386 */
  • uspace/lib/ui/src/menubar.c

    rda15002 r344f8b9  
    7272/** Create new menu bar.
    7373 *
     74 * @param ui UI
    7475 * @param res UI resource
    7576 * @param rmbar Place to store pointer to new menu bar
    7677 * @return EOK on success, ENOMEM if out of memory
    7778 */
    78 errno_t ui_menu_bar_create(ui_resource_t *res, ui_menu_bar_t **rmbar)
     79errno_t ui_menu_bar_create(ui_t *ui, ui_resource_t *res,
     80    ui_menu_bar_t **rmbar)
    7981{
    8082        ui_menu_bar_t *mbar;
     
    9193        }
    9294
     95        mbar->ui = ui;
    9396        mbar->res = res;
    9497        list_initialize(&mbar->menus);
     
    232235 *
    233236 * @param mbar Menu bar
    234  * @param pos Position (top-left corner) of menu bar entry
     237 * @param rect Menu bar entry rectangle
    235238 * @param menu Menu to select (or deselect if selected) or @c NULL
    236239 */
    237 void ui_menu_bar_select(ui_menu_bar_t *mbar, gfx_coord2_t *pos,
     240void ui_menu_bar_select(ui_menu_bar_t *mbar, gfx_rect_t *rect,
    238241    ui_menu_t *menu)
    239242{
    240         gfx_coord2_t spos;
    241243        ui_menu_t *old_menu;
    242244
     
    248250                mbar->selected = NULL;
    249251
    250         /* Need to clear the menu has just been closed */
     252        /* Close previously open menu */
    251253        if (old_menu != NULL)
    252                 (void) ui_menu_unpaint(old_menu);
     254                (void) ui_menu_close(old_menu);
    253255
    254256        (void) ui_menu_bar_paint(mbar);
    255257
    256258        if (mbar->selected != NULL) {
    257                 /* Cache position of selected entry */
    258                 mbar->sel_pos = *pos;
    259 
    260                 /* Position menu under selected menu bar entry */
    261                 spos.x = pos->x;
    262                 spos.y = mbar->rect.p1.y;
    263 
    264                 (void) ui_menu_paint(mbar->selected, &spos);
     259                (void) ui_menu_open(mbar->selected, rect);
    265260        }
    266261}
     
    275270{
    276271        gfx_coord2_t pos;
    277         gfx_coord2_t spos;
    278272        gfx_rect_t rect;
    279273        ui_menu_t *menu;
     
    282276        gfx_coord_t hpad;
    283277        gfx_coord2_t ppos;
    284         ui_evclaim_t claimed;
    285278
    286279        ppos.x = event->hpos;
     
    307300                if (event->type == POS_PRESS &&
    308301                    gfx_pix_inside_rect(&ppos, &rect)) {
    309                         ui_menu_bar_select(mbar, &pos, menu);
     302                        ui_menu_bar_select(mbar, &rect, menu);
    310303                        return ui_claimed;
    311304                }
    312305
    313                 if (menu == mbar->selected) {
    314                         /* Open menu is positioned below menu bar entry */
    315                         spos.x = pos.x;
    316                         spos.y = mbar->rect.p1.y;
    317 
    318                         ui_menu_get_rect(menu, &spos, &rect);
    319 
    320                         claimed = ui_menu_pos_event(menu, &spos, event);
    321                         if (claimed == ui_claimed)
    322                                 return ui_claimed;
    323                 }
    324 
    325306                pos.x += width;
    326307                menu = ui_menu_next(menu);
     
    336317void ui_menu_bar_unfocus(ui_menu_bar_t *mbar)
    337318{
    338         ui_menu_bar_select(mbar, NULL, NULL);
     319//      ui_menu_bar_select(mbar, NULL, NULL);
    339320}
    340321
  • uspace/lib/ui/src/menuentry.c

    rda15002 r344f8b9  
    203203        ui_resource_t *res;
    204204
     205        /*
     206         * This needs to work even if the menu is not open, so we cannot
     207         * use the menu's resource, which is only created after the menu
     208         * is open (and its window is created). Use the menu bar's
     209         * resource instead.
     210         */
    205211        res = mentry->menu->mbar->res;
    206212
     
    223229        gfx_coord_t width;
    224230
     231        /*
     232         * This needs to work even if the menu is not open, so we cannot
     233         * use the menu's resource, which is only created after the menu
     234         * is open (and its window is created). Use the menu bar's
     235         * resource instead.
     236         */
    225237        res = menu->mbar->res;
    226238
     
    256268        gfx_coord_t vpad;
    257269
     270        /*
     271         * This needs to work even if the menu is not open, so we cannot
     272         * use the menu's resource, which is only created after the menu
     273         * is open (and its window is created). Use the menu bar's
     274         * resource instead.
     275         */
    258276        res = mentry->menu->mbar->res;
    259277
     
    294312        errno_t rc;
    295313
    296         res = mentry->menu->mbar->res;
     314        res = ui_menu_get_res(mentry->menu);
    297315
    298316        ui_menu_entry_get_geom(mentry, pos, &geom);
     
    379397        if (mentry->inside) {
    380398                /* Close menu */
    381                 ui_menu_bar_select(mentry->menu->mbar,
    382                     &mentry->menu->mbar->sel_pos, NULL);
     399                ui_menu_bar_select(mentry->menu->mbar, NULL, NULL);
    383400
    384401                /* Call back */
     
    487504        gfx_coord_t width;
    488505
    489         res = mentry->menu->mbar->res;
     506        res = ui_menu_get_res(mentry->menu);
    490507
    491508        if (res->textmode) {
  • uspace/lib/ui/src/window.c

    rda15002 r344f8b9  
    336336 * is added, the results are undefined.
    337337 *
    338  * @param fixed Fixed layout
     338 * @param window Window
    339339 * @param control Control
    340340 * @return EOK on success, ENOMEM if out of memory
     
    509509 *
    510510 * @param window Window
    511  * @param cb Window decoration callbacks
     511 * @param cb Window callbacks
    512512 * @param arg Callback argument
    513513 */
  • uspace/lib/ui/test/main.c

    rda15002 r344f8b9  
    4242PCUT_IMPORT(paint);
    4343PCUT_IMPORT(pbutton);
     44PCUT_IMPORT(popup);
    4445PCUT_IMPORT(rbutton);
    4546PCUT_IMPORT(resource);
  • uspace/lib/ui/test/menu.c

    rda15002 r344f8b9  
    4646PCUT_TEST_SUITE(menu);
    4747
    48 typedef struct {
    49         bool expose;
    50 } test_resp_t;
    51 
    52 static void test_expose(void *);
    53 
    5448/** Create and destroy menu */
    5549PCUT_TEST(create_destroy)
     
    5953        errno_t rc;
    6054
    61         rc = ui_menu_bar_create(NULL, &mbar);
     55        rc = ui_menu_bar_create(NULL, NULL, &mbar);
    6256        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    6357
     
    10296        PCUT_ASSERT_NOT_NULL(resource);
    10397
    104         rc = ui_menu_bar_create(resource, &mbar);
     98        rc = ui_menu_bar_create(NULL, resource, &mbar);
    10599        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    106100        PCUT_ASSERT_NOT_NULL(mbar);
     
    148142        PCUT_ASSERT_NOT_NULL(resource);
    149143
    150         rc = ui_menu_bar_create(resource, &mbar);
     144        rc = ui_menu_bar_create(NULL, resource, &mbar);
    151145        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    152146        PCUT_ASSERT_NOT_NULL(mbar);
     
    188182        PCUT_ASSERT_NOT_NULL(resource);
    189183
    190         rc = ui_menu_bar_create(resource, &mbar);
     184        rc = ui_menu_bar_create(NULL, resource, &mbar);
    191185        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    192186        PCUT_ASSERT_NOT_NULL(mbar);
     
    218212        dummy_gc_t *dgc;
    219213        gfx_context_t *gc;
    220         ui_resource_t *resource = NULL;
    221         ui_menu_bar_t *mbar = NULL;
    222         ui_menu_t *menu = NULL;
     214        ui_t *ui = NULL;
     215        ui_resource_t *resource = NULL;
     216        ui_menu_bar_t *mbar = NULL;
     217        ui_menu_t *menu = NULL;
     218        gfx_rect_t prect;
    223219        gfx_coord2_t pos;
    224220        errno_t rc;
     
    229225        gc = dummygc_get_ctx(dgc);
    230226
    231         rc = ui_resource_create(gc, false, &resource);
    232         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    233         PCUT_ASSERT_NOT_NULL(resource);
    234 
    235         rc = ui_menu_bar_create(resource, &mbar);
    236         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    237         PCUT_ASSERT_NOT_NULL(mbar);
    238 
    239         rc = ui_menu_create(mbar, "Test", &menu);
    240         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    241         PCUT_ASSERT_NOT_NULL(menu);
     227        rc = ui_create_disp(NULL, &ui);
     228        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     229
     230        rc = ui_resource_create(gc, false, &resource);
     231        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     232        PCUT_ASSERT_NOT_NULL(resource);
     233
     234        rc = ui_menu_bar_create(ui, resource, &mbar);
     235        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     236        PCUT_ASSERT_NOT_NULL(mbar);
     237
     238        rc = ui_menu_create(mbar, "Test", &menu);
     239        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     240        PCUT_ASSERT_NOT_NULL(menu);
     241
     242        prect.p0.x = 0;
     243        prect.p0.y = 0;
     244        prect.p1.x = 0;
     245        prect.p1.y = 0;
     246
     247        /* Menu needs to be open to be able to paint it */
     248        rc = ui_menu_open(menu, &prect);
     249        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    242250
    243251        pos.x = 0;
     
    248256        ui_menu_bar_destroy(mbar);
    249257        ui_resource_destroy(resource);
    250         dummygc_destroy(dgc);
    251 }
    252 
    253 /** ui_menu_unpaint() calls expose callback */
    254 PCUT_TEST(unpaint)
    255 {
    256         dummy_gc_t *dgc;
    257         gfx_context_t *gc;
    258         ui_resource_t *resource = NULL;
    259         ui_menu_bar_t *mbar = NULL;
    260         ui_menu_t *menu = NULL;
    261         test_resp_t resp;
    262         errno_t rc;
    263 
    264         rc = dummygc_create(&dgc);
    265         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    266 
    267         gc = dummygc_get_ctx(dgc);
    268 
    269         rc = ui_resource_create(gc, false, &resource);
    270         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    271         PCUT_ASSERT_NOT_NULL(resource);
    272 
    273         rc = ui_menu_bar_create(resource, &mbar);
    274         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    275         PCUT_ASSERT_NOT_NULL(mbar);
    276 
    277         rc = ui_menu_create(mbar, "Test", &menu);
    278         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    279         PCUT_ASSERT_NOT_NULL(menu);
    280 
    281         ui_resource_set_expose_cb(resource, test_expose, &resp);
    282 
    283         resp.expose = false;
    284         rc = ui_menu_unpaint(menu);
    285         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    286         PCUT_ASSERT_TRUE(resp.expose);
    287 
    288         ui_menu_bar_destroy(mbar);
    289         ui_resource_destroy(resource);
     258        ui_destroy(ui);
    290259        dummygc_destroy(dgc);
    291260}
     
    313282        PCUT_ASSERT_NOT_NULL(resource);
    314283
    315         rc = ui_menu_bar_create(resource, &mbar);
     284        rc = ui_menu_bar_create(NULL, resource, &mbar);
    316285        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    317286        PCUT_ASSERT_NOT_NULL(mbar);
     
    334303}
    335304
    336 /** ui_menu_pos_event() outside menu closes it */
    337 PCUT_TEST(pos_event_outside)
    338 {
    339         dummy_gc_t *dgc;
    340         gfx_context_t *gc;
    341         ui_resource_t *resource = NULL;
    342         ui_menu_bar_t *mbar = NULL;
    343         ui_menu_t *menu = NULL;
    344         ui_evclaim_t claimed;
    345         gfx_coord2_t pos;
    346         pos_event_t event;
    347         errno_t rc;
    348 
    349         rc = dummygc_create(&dgc);
    350         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    351 
    352         gc = dummygc_get_ctx(dgc);
    353 
    354         rc = ui_resource_create(gc, false, &resource);
    355         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    356         PCUT_ASSERT_NOT_NULL(resource);
    357 
    358         rc = ui_menu_bar_create(resource, &mbar);
    359         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    360         PCUT_ASSERT_NOT_NULL(mbar);
    361 
    362         rc = ui_menu_create(mbar, "Test", &menu);
    363         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    364         PCUT_ASSERT_NOT_NULL(menu);
    365 
    366         pos.x = 0;
    367         pos.y = 0;
    368         ui_menu_bar_select(mbar, &pos, menu);
    369         PCUT_ASSERT_EQUALS(menu, mbar->selected);
    370 
    371         pos.x = 10;
    372         pos.y = 0;
    373         event.type = POS_PRESS;
    374         event.hpos = 0;
    375         event.vpos = 0;
    376         claimed = ui_menu_pos_event(menu, &pos, &event);
    377         PCUT_ASSERT_EQUALS(ui_unclaimed, claimed);
    378 
    379         /* Press event outside menu should close it */
    380         PCUT_ASSERT_NULL(mbar->selected);
    381 
    382         ui_menu_bar_destroy(mbar);
    383         ui_resource_destroy(resource);
    384         dummygc_destroy(dgc);
    385 }
    386 
    387305/** Computing menu geometry */
    388306PCUT_TEST(get_geom)
     
    406324        PCUT_ASSERT_NOT_NULL(resource);
    407325
    408         rc = ui_menu_bar_create(resource, &mbar);
     326        rc = ui_menu_bar_create(NULL, resource, &mbar);
    409327        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    410328        PCUT_ASSERT_NOT_NULL(mbar);
     
    432350}
    433351
    434 static void test_expose(void *arg)
    435 {
    436         test_resp_t *resp = (test_resp_t *) arg;
    437 
    438         resp->expose = true;
    439 }
    440 
    441352PCUT_EXPORT(menu);
  • uspace/lib/ui/test/menubar.c

    rda15002 r344f8b9  
    5050        errno_t rc;
    5151
    52         rc = ui_menu_bar_create(NULL, &mbar);
     52        rc = ui_menu_bar_create(NULL, NULL, &mbar);
    5353        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    5454        PCUT_ASSERT_NOT_NULL(mbar);
     
    7070        errno_t rc;
    7171
    72         rc = ui_menu_bar_create(NULL, &mbar);
     72        rc = ui_menu_bar_create(NULL, NULL, &mbar);
    7373        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7474        PCUT_ASSERT_NOT_NULL(mbar);
     
    9999        PCUT_ASSERT_NOT_NULL(resource);
    100100
    101         rc = ui_menu_bar_create(resource, &mbar);
     101        rc = ui_menu_bar_create(NULL, resource, &mbar);
    102102        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    103103        PCUT_ASSERT_NOT_NULL(mbar);
     
    137137        PCUT_ASSERT_NOT_NULL(resource);
    138138
    139         rc = ui_menu_bar_create(resource, &mbar);
     139        rc = ui_menu_bar_create(NULL, resource, &mbar);
    140140        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    141141        PCUT_ASSERT_NOT_NULL(mbar);
     
    154154        dummy_gc_t *dgc;
    155155        gfx_context_t *gc;
     156        ui_t *ui = NULL;
    156157        ui_resource_t *resource = NULL;
    157158        ui_menu_bar_t *mbar = NULL;
     
    167168        gc = dummygc_get_ctx(dgc);
    168169
    169         rc = ui_resource_create(gc, false, &resource);
    170         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    171         PCUT_ASSERT_NOT_NULL(resource);
    172 
    173         rc = ui_menu_bar_create(resource, &mbar);
     170        rc = ui_create_disp(NULL, &ui);
     171        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     172
     173        rc = ui_resource_create(gc, false, &resource);
     174        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     175        PCUT_ASSERT_NOT_NULL(resource);
     176
     177        rc = ui_menu_bar_create(ui, resource, &mbar);
    174178        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    175179        PCUT_ASSERT_NOT_NULL(mbar);
     
    197201        ui_menu_bar_destroy(mbar);
    198202        ui_resource_destroy(resource);
    199         dummygc_destroy(dgc);
    200 }
    201 
    202 /** Position event is forwarded to menu */
    203 PCUT_TEST(pos_event_menu)
    204 {
    205         dummy_gc_t *dgc;
    206         gfx_context_t *gc;
     203        ui_destroy(ui);
     204        dummygc_destroy(dgc);
     205}
     206
     207/** Calling ui_menu_bar_select() with the same menu twice deselects it */
     208PCUT_TEST(select_same)
     209{
     210        dummy_gc_t *dgc;
     211        gfx_context_t *gc;
     212        ui_t *ui = NULL;
    207213        ui_resource_t *resource = NULL;
    208214        ui_menu_bar_t *mbar = NULL;
    209215        ui_menu_t *menu = NULL;
    210         ui_evclaim_t claimed;
    211         pos_event_t event;
    212         gfx_coord2_t pos;
    213216        gfx_rect_t rect;
    214217        errno_t rc;
     
    219222        gc = dummygc_get_ctx(dgc);
    220223
    221         rc = ui_resource_create(gc, false, &resource);
    222         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    223         PCUT_ASSERT_NOT_NULL(resource);
    224 
    225         rc = ui_menu_bar_create(resource, &mbar);
    226         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    227         PCUT_ASSERT_NOT_NULL(mbar);
     224        rc = ui_create_disp(NULL, &ui);
     225        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     226
     227        rc = ui_resource_create(gc, false, &resource);
     228        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     229        PCUT_ASSERT_NOT_NULL(resource);
     230
     231        rc = ui_menu_bar_create(ui, resource, &mbar);
     232        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     233        PCUT_ASSERT_NOT_NULL(mbar);
     234
     235        rc = ui_menu_create(mbar, "Test", &menu);
     236        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     237        PCUT_ASSERT_NOT_NULL(menu);
    228238
    229239        rect.p0.x = 0;
    230240        rect.p0.y = 0;
    231         rect.p1.x = 50;
    232         rect.p1.y = 25;
    233         ui_menu_bar_set_rect(mbar, &rect);
    234 
    235         rc = ui_menu_create(mbar, "Test", &menu);
    236         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    237         PCUT_ASSERT_NOT_NULL(menu);
    238 
    239         pos.x = 0;
    240         pos.y = 0;
    241         ui_menu_bar_select(mbar, &pos, menu);
     241        rect.p1.x = 0;
     242        rect.p1.y = 0;
     243        ui_menu_bar_select(mbar, &rect, menu);
    242244        PCUT_ASSERT_EQUALS(menu, mbar->selected);
    243245
    244         event.type = POS_PRESS;
    245         event.hpos = 4;
    246         event.vpos = 30;
    247         claimed = ui_menu_bar_pos_event(mbar, &event);
    248         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    249         PCUT_ASSERT_EQUALS(ui_claimed, claimed);
    250 
    251         ui_menu_bar_destroy(mbar);
    252         ui_resource_destroy(resource);
    253         dummygc_destroy(dgc);
    254 }
    255 
    256 /* Unfocusing window closes open menu */
    257 PCUT_TEST(unfocus)
    258 {
    259         dummy_gc_t *dgc;
    260         gfx_context_t *gc;
    261         ui_resource_t *resource = NULL;
    262         ui_menu_bar_t *mbar = NULL;
    263         ui_menu_t *menu = NULL;
    264         gfx_coord2_t pos;
    265         errno_t rc;
    266 
    267         rc = dummygc_create(&dgc);
    268         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    269 
    270         gc = dummygc_get_ctx(dgc);
    271 
    272         rc = ui_resource_create(gc, false, &resource);
    273         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    274         PCUT_ASSERT_NOT_NULL(resource);
    275 
    276         rc = ui_menu_bar_create(resource, &mbar);
    277         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    278         PCUT_ASSERT_NOT_NULL(mbar);
    279 
    280         rc = ui_menu_create(mbar, "Test", &menu);
    281         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    282         PCUT_ASSERT_NOT_NULL(menu);
    283 
    284         /*
    285          * Position does not matter here. Probably should get rid of this
    286          * argument, storing the position in the menu itself.
    287          */
    288         pos.x = 0;
    289         pos.y = 0;
    290         ui_menu_bar_select(mbar, &pos, menu);
    291         PCUT_ASSERT_EQUALS(menu, mbar->selected);
    292 
    293         /* This should unselect the menu */
    294         ui_menu_bar_unfocus(mbar);
     246        /* Selecting again should unselect the menu */
     247        ui_menu_bar_select(mbar, &rect, menu);
    295248        PCUT_ASSERT_NULL(mbar->selected);
    296249
    297250        ui_menu_bar_destroy(mbar);
    298251        ui_resource_destroy(resource);
    299         dummygc_destroy(dgc);
    300 }
    301 
    302 /** Calling ui_menu_bar_select() with the same menu twice deselects it */
    303 PCUT_TEST(select_same)
    304 {
    305         dummy_gc_t *dgc;
    306         gfx_context_t *gc;
    307         ui_resource_t *resource = NULL;
    308         ui_menu_bar_t *mbar = NULL;
    309         ui_menu_t *menu = NULL;
    310         gfx_coord2_t pos;
    311         errno_t rc;
    312 
    313         rc = dummygc_create(&dgc);
    314         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    315 
    316         gc = dummygc_get_ctx(dgc);
    317 
    318         rc = ui_resource_create(gc, false, &resource);
    319         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    320         PCUT_ASSERT_NOT_NULL(resource);
    321 
    322         rc = ui_menu_bar_create(resource, &mbar);
    323         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    324         PCUT_ASSERT_NOT_NULL(mbar);
    325 
    326         rc = ui_menu_create(mbar, "Test", &menu);
    327         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    328         PCUT_ASSERT_NOT_NULL(menu);
    329 
    330         pos.x = 0;
    331         pos.y = 0;
    332         ui_menu_bar_select(mbar, &pos, menu);
    333         PCUT_ASSERT_EQUALS(menu, mbar->selected);
    334 
    335         /* Selecting again should unselect the menu */
    336         ui_menu_bar_select(mbar, &pos, menu);
    337         PCUT_ASSERT_NULL(mbar->selected);
    338 
    339         ui_menu_bar_destroy(mbar);
    340         ui_resource_destroy(resource);
     252        ui_destroy(ui);
    341253        dummygc_destroy(dgc);
    342254}
     
    347259        dummy_gc_t *dgc;
    348260        gfx_context_t *gc;
     261        ui_t *ui = NULL;
    349262        ui_resource_t *resource = NULL;
    350263        ui_menu_bar_t *mbar = NULL;
    351264        ui_menu_t *menu1 = NULL;
    352265        ui_menu_t *menu2 = NULL;
    353         gfx_coord2_t pos;
    354         errno_t rc;
    355 
    356         rc = dummygc_create(&dgc);
    357         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    358 
    359         gc = dummygc_get_ctx(dgc);
    360 
    361         rc = ui_resource_create(gc, false, &resource);
    362         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    363         PCUT_ASSERT_NOT_NULL(resource);
    364 
    365         rc = ui_menu_bar_create(resource, &mbar);
     266        gfx_rect_t rect;
     267        errno_t rc;
     268
     269        rc = dummygc_create(&dgc);
     270        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     271
     272        gc = dummygc_get_ctx(dgc);
     273
     274        rc = ui_create_disp(NULL, &ui);
     275        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     276
     277        rc = ui_resource_create(gc, false, &resource);
     278        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     279        PCUT_ASSERT_NOT_NULL(resource);
     280
     281        rc = ui_menu_bar_create(ui, resource, &mbar);
    366282        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    367283        PCUT_ASSERT_NOT_NULL(mbar);
     
    375291        PCUT_ASSERT_NOT_NULL(menu2);
    376292
    377         pos.x = 0;
    378         pos.y = 0;
    379         ui_menu_bar_select(mbar, &pos, menu1);
     293        rect.p0.x = 0;
     294        rect.p0.y = 0;
     295        rect.p1.x = 0;
     296        rect.p1.y = 0;
     297        ui_menu_bar_select(mbar, &rect, menu1);
    380298        PCUT_ASSERT_EQUALS(menu1, mbar->selected);
    381299
    382300        /* Selecting different menu should select it */
    383         ui_menu_bar_select(mbar, &pos, menu2);
     301        ui_menu_bar_select(mbar, &rect, menu2);
    384302        PCUT_ASSERT_EQUALS(menu2, mbar->selected);
    385303
    386304        ui_menu_bar_destroy(mbar);
    387305        ui_resource_destroy(resource);
     306        ui_destroy(ui);
    388307        dummygc_destroy(dgc);
    389308}
  • uspace/lib/ui/test/menuentry.c

    rda15002 r344f8b9  
    7171        PCUT_ASSERT_NOT_NULL(resource);
    7272
    73         rc = ui_menu_bar_create(resource, &mbar);
     73        rc = ui_menu_bar_create(NULL, resource, &mbar);
    7474        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7575        PCUT_ASSERT_NOT_NULL(mbar);
     
    110110        PCUT_ASSERT_NOT_NULL(resource);
    111111
    112         rc = ui_menu_bar_create(resource, &mbar);
     112        rc = ui_menu_bar_create(NULL, resource, &mbar);
    113113        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    114114        PCUT_ASSERT_NOT_NULL(mbar);
     
    156156        PCUT_ASSERT_NOT_NULL(resource);
    157157
    158         rc = ui_menu_bar_create(resource, &mbar);
     158        rc = ui_menu_bar_create(NULL, resource, &mbar);
    159159        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    160160        PCUT_ASSERT_NOT_NULL(mbar);
     
    201201        PCUT_ASSERT_NOT_NULL(resource);
    202202
    203         rc = ui_menu_bar_create(resource, &mbar);
     203        rc = ui_menu_bar_create(NULL, resource, &mbar);
    204204        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    205205        PCUT_ASSERT_NOT_NULL(mbar);
     
    255255        PCUT_ASSERT_NOT_NULL(resource);
    256256
    257         rc = ui_menu_bar_create(resource, &mbar);
     257        rc = ui_menu_bar_create(NULL, resource, &mbar);
    258258        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    259259        PCUT_ASSERT_NOT_NULL(mbar);
     
    287287        dummy_gc_t *dgc;
    288288        gfx_context_t *gc;
     289        ui_t *ui = NULL;
    289290        ui_resource_t *resource = NULL;
    290291        ui_menu_bar_t *mbar = NULL;
     
    292293        ui_menu_entry_t *mentry = NULL;
    293294        gfx_coord2_t pos;
    294         errno_t rc;
    295 
    296         rc = dummygc_create(&dgc);
    297         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    298 
    299         gc = dummygc_get_ctx(dgc);
    300 
    301         rc = ui_resource_create(gc, false, &resource);
    302         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    303         PCUT_ASSERT_NOT_NULL(resource);
    304 
    305         rc = ui_menu_bar_create(resource, &mbar);
     295        gfx_rect_t prect;
     296        errno_t rc;
     297
     298        rc = dummygc_create(&dgc);
     299        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     300
     301        gc = dummygc_get_ctx(dgc);
     302
     303        rc = ui_create_disp(NULL, &ui);
     304        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     305
     306        rc = ui_resource_create(gc, false, &resource);
     307        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     308        PCUT_ASSERT_NOT_NULL(resource);
     309
     310        rc = ui_menu_bar_create(ui, resource, &mbar);
    306311        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    307312        PCUT_ASSERT_NOT_NULL(mbar);
     
    314319        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    315320        PCUT_ASSERT_NOT_NULL(mentry);
     321
     322        prect.p0.x = 0;
     323        prect.p0.y = 0;
     324        prect.p1.x = 0;
     325        prect.p1.y = 0;
     326
     327        rc = ui_menu_open(menu, &prect);
     328        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    316329
    317330        pos.x = 0;
     
    322335        ui_menu_bar_destroy(mbar);
    323336        ui_resource_destroy(resource);
     337        ui_destroy(ui);
    324338        dummygc_destroy(dgc);
    325339}
     
    330344        dummy_gc_t *dgc;
    331345        gfx_context_t *gc;
     346        ui_t *ui = NULL;
    332347        ui_resource_t *resource = NULL;
    333348        ui_menu_bar_t *mbar = NULL;
     
    335350        ui_menu_entry_t *mentry = NULL;
    336351        gfx_coord2_t pos;
     352        gfx_rect_t prect;
    337353        test_resp_t resp;
    338354        errno_t rc;
     
    343359        gc = dummygc_get_ctx(dgc);
    344360
    345         rc = ui_resource_create(gc, false, &resource);
    346         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    347         PCUT_ASSERT_NOT_NULL(resource);
    348 
    349         rc = ui_menu_bar_create(resource, &mbar);
     361        rc = ui_create_disp(NULL, &ui);
     362        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     363
     364        rc = ui_resource_create(gc, false, &resource);
     365        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     366        PCUT_ASSERT_NOT_NULL(resource);
     367
     368        rc = ui_menu_bar_create(ui, resource, &mbar);
    350369        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    351370        PCUT_ASSERT_NOT_NULL(mbar);
     
    361380        ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
    362381        resp.activated = false;
     382
     383        prect.p0.x = 0;
     384        prect.p0.y = 0;
     385        prect.p1.x = 0;
     386        prect.p1.y = 0;
     387
     388        rc = ui_menu_open(menu, &prect);
     389        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    363390
    364391        pos.x = 0;
     
    375402        ui_menu_bar_destroy(mbar);
    376403        ui_resource_destroy(resource);
     404        ui_destroy(ui);
    377405        dummygc_destroy(dgc);
    378406}
     
    383411        dummy_gc_t *dgc;
    384412        gfx_context_t *gc;
     413        ui_t *ui = NULL;
    385414        ui_resource_t *resource = NULL;
    386415        ui_menu_bar_t *mbar = NULL;
     
    388417        ui_menu_entry_t *mentry = NULL;
    389418        gfx_coord2_t pos;
     419        gfx_rect_t prect;
    390420        test_resp_t resp;
    391421        errno_t rc;
     
    396426        gc = dummygc_get_ctx(dgc);
    397427
    398         rc = ui_resource_create(gc, false, &resource);
    399         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    400         PCUT_ASSERT_NOT_NULL(resource);
    401 
    402         rc = ui_menu_bar_create(resource, &mbar);
     428        rc = ui_create_disp(NULL, &ui);
     429        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     430
     431        rc = ui_resource_create(gc, false, &resource);
     432        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     433        PCUT_ASSERT_NOT_NULL(resource);
     434
     435        rc = ui_menu_bar_create(ui, resource, &mbar);
    403436        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    404437        PCUT_ASSERT_NOT_NULL(mbar);
     
    414447        ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
    415448        resp.activated = false;
     449
     450        prect.p0.x = 0;
     451        prect.p0.y = 0;
     452        prect.p1.x = 0;
     453        prect.p1.y = 0;
     454
     455        rc = ui_menu_open(menu, &prect);
     456        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    416457
    417458        pos.x = 0;
     
    433474        ui_menu_bar_destroy(mbar);
    434475        ui_resource_destroy(resource);
     476        ui_destroy(ui);
    435477        dummygc_destroy(dgc);
    436478}
     
    441483        dummy_gc_t *dgc;
    442484        gfx_context_t *gc;
     485        ui_t *ui = NULL;
    443486        ui_resource_t *resource = NULL;
    444487        ui_menu_bar_t *mbar = NULL;
     
    446489        ui_menu_entry_t *mentry = NULL;
    447490        gfx_coord2_t pos;
     491        gfx_rect_t prect;
    448492        test_resp_t resp;
    449493        errno_t rc;
     
    454498        gc = dummygc_get_ctx(dgc);
    455499
    456         rc = ui_resource_create(gc, false, &resource);
    457         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    458         PCUT_ASSERT_NOT_NULL(resource);
    459 
    460         rc = ui_menu_bar_create(resource, &mbar);
     500        rc = ui_create_disp(NULL, &ui);
     501        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     502
     503        rc = ui_resource_create(gc, false, &resource);
     504        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     505        PCUT_ASSERT_NOT_NULL(resource);
     506
     507        rc = ui_menu_bar_create(ui, resource, &mbar);
    461508        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    462509        PCUT_ASSERT_NOT_NULL(mbar);
     
    472519        ui_menu_entry_set_cb(mentry, test_entry_cb, &resp);
    473520        resp.activated = false;
     521
     522        prect.p0.x = 0;
     523        prect.p0.y = 0;
     524        prect.p1.x = 0;
     525        prect.p1.y = 0;
     526
     527        rc = ui_menu_open(menu, &prect);
     528        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    474529
    475530        pos.x = 0;
     
    496551        ui_menu_bar_destroy(mbar);
    497552        ui_resource_destroy(resource);
     553        ui_destroy(ui);
    498554        dummygc_destroy(dgc);
    499555}
     
    504560        dummy_gc_t *dgc;
    505561        gfx_context_t *gc;
     562        ui_t *ui = NULL;
    506563        ui_resource_t *resource = NULL;
    507564        ui_menu_bar_t *mbar = NULL;
     
    509566        ui_menu_entry_t *mentry = NULL;
    510567        gfx_coord2_t pos;
     568        gfx_rect_t prect;
    511569        pos_event_t event;
    512570        errno_t rc;
     
    517575        gc = dummygc_get_ctx(dgc);
    518576
    519         rc = ui_resource_create(gc, false, &resource);
    520         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    521         PCUT_ASSERT_NOT_NULL(resource);
    522 
    523         rc = ui_menu_bar_create(resource, &mbar);
     577        rc = ui_create_disp(NULL, &ui);
     578        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     579
     580        rc = ui_resource_create(gc, false, &resource);
     581        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     582        PCUT_ASSERT_NOT_NULL(resource);
     583
     584        rc = ui_menu_bar_create(ui, resource, &mbar);
    524585        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    525586        PCUT_ASSERT_NOT_NULL(mbar);
     
    532593        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    533594        PCUT_ASSERT_NOT_NULL(mentry);
     595
     596        prect.p0.x = 0;
     597        prect.p0.y = 0;
     598        prect.p1.x = 0;
     599        prect.p1.y = 0;
     600
     601        rc = ui_menu_open(menu, &prect);
     602        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    534603
    535604        pos.x = 0;
     
    546615        ui_menu_bar_destroy(mbar);
    547616        ui_resource_destroy(resource);
     617        ui_destroy(ui);
    548618        dummygc_destroy(dgc);
    549619}
     
    554624        dummy_gc_t *dgc;
    555625        gfx_context_t *gc;
     626        ui_t *ui = NULL;
    556627        ui_resource_t *resource = NULL;
    557628        ui_menu_bar_t *mbar = NULL;
     
    559630        ui_menu_entry_t *mentry = NULL;
    560631        gfx_coord2_t pos;
     632        gfx_rect_t prect;
    561633        pos_event_t event;
    562634        errno_t rc;
     
    567639        gc = dummygc_get_ctx(dgc);
    568640
    569         rc = ui_resource_create(gc, false, &resource);
    570         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    571         PCUT_ASSERT_NOT_NULL(resource);
    572 
    573         rc = ui_menu_bar_create(resource, &mbar);
     641        rc = ui_create_disp(NULL, &ui);
     642        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     643
     644        rc = ui_resource_create(gc, false, &resource);
     645        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     646        PCUT_ASSERT_NOT_NULL(resource);
     647
     648        rc = ui_menu_bar_create(ui, resource, &mbar);
    574649        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    575650        PCUT_ASSERT_NOT_NULL(mbar);
     
    582657        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    583658        PCUT_ASSERT_NOT_NULL(mentry);
     659
     660        prect.p0.x = 0;
     661        prect.p0.y = 0;
     662        prect.p1.x = 0;
     663        prect.p1.y = 0;
     664
     665        rc = ui_menu_open(menu, &prect);
     666        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    584667
    585668        pos.x = 0;
     
    596679        ui_menu_bar_destroy(mbar);
    597680        ui_resource_destroy(resource);
     681        ui_destroy(ui);
    598682        dummygc_destroy(dgc);
    599683}
     
    604688        dummy_gc_t *dgc;
    605689        gfx_context_t *gc;
     690        ui_t *ui = NULL;
    606691        ui_resource_t *resource = NULL;
    607692        ui_menu_bar_t *mbar = NULL;
     
    609694        ui_menu_entry_t *mentry = NULL;
    610695        gfx_coord2_t pos;
     696        gfx_rect_t prect;
    611697        pos_event_t event;
    612698        errno_t rc;
     
    617703        gc = dummygc_get_ctx(dgc);
    618704
    619         rc = ui_resource_create(gc, false, &resource);
    620         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    621         PCUT_ASSERT_NOT_NULL(resource);
    622 
    623         rc = ui_menu_bar_create(resource, &mbar);
     705        rc = ui_create_disp(NULL, &ui);
     706        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     707
     708        rc = ui_resource_create(gc, false, &resource);
     709        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     710        PCUT_ASSERT_NOT_NULL(resource);
     711
     712        rc = ui_menu_bar_create(ui, resource, &mbar);
    624713        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    625714        PCUT_ASSERT_NOT_NULL(mbar);
     
    632721        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    633722        PCUT_ASSERT_NOT_NULL(mentry);
     723
     724        prect.p0.x = 0;
     725        prect.p0.y = 0;
     726        prect.p1.x = 0;
     727        prect.p1.y = 0;
     728
     729        rc = ui_menu_open(menu, &prect);
     730        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    634731
    635732        pos.x = 0;
     
    649746        ui_menu_bar_destroy(mbar);
    650747        ui_resource_destroy(resource);
     748        ui_destroy(ui);
    651749        dummygc_destroy(dgc);
    652750}
     
    657755        dummy_gc_t *dgc;
    658756        gfx_context_t *gc;
     757        ui_t *ui = NULL;
    659758        ui_resource_t *resource = NULL;
    660759        ui_menu_bar_t *mbar = NULL;
     
    662761        ui_menu_entry_t *mentry = NULL;
    663762        gfx_coord2_t pos;
     763        gfx_rect_t prect;
    664764        pos_event_t event;
    665765        errno_t rc;
     
    670770        gc = dummygc_get_ctx(dgc);
    671771
    672         rc = ui_resource_create(gc, false, &resource);
    673         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    674         PCUT_ASSERT_NOT_NULL(resource);
    675 
    676         rc = ui_menu_bar_create(resource, &mbar);
     772        rc = ui_create_disp(NULL, &ui);
     773        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     774
     775        rc = ui_resource_create(gc, false, &resource);
     776        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     777        PCUT_ASSERT_NOT_NULL(resource);
     778
     779        rc = ui_menu_bar_create(ui, resource, &mbar);
    677780        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    678781        PCUT_ASSERT_NOT_NULL(mbar);
     
    685788        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    686789        PCUT_ASSERT_NOT_NULL(mentry);
     790
     791        prect.p0.x = 0;
     792        prect.p0.y = 0;
     793        prect.p1.x = 0;
     794        prect.p1.y = 0;
     795
     796        rc = ui_menu_open(menu, &prect);
     797        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    687798
    688799        event.type = POS_UPDATE;
     
    699810        ui_menu_bar_destroy(mbar);
    700811        ui_resource_destroy(resource);
     812        ui_destroy(ui);
    701813        dummygc_destroy(dgc);
    702814}
Note: See TracChangeset for help on using the changeset viewer.