Changeset ebb1489 in mainline for uspace/lib/ui


Ignore:
Timestamp:
2024-10-13T08:23:40Z (18 months ago)
Author:
GitHub <noreply@…>
Parents:
2a0c827c (diff), b3b79981 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
boba-buba <120932204+boba-buba@…> (2024-10-13 08:23:40)
git-committer:
GitHub <noreply@…> (2024-10-13 08:23:40)
Message:

Merge branch 'HelenOS:master' into topic/packet-capture

Location:
uspace/lib/ui
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/include/types/ui/menubar.h

    r2a0c827c rebb1489  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4040typedef struct ui_menu_bar ui_menu_bar_t;
    4141
     42/** Menu bar callbacks */
     43typedef struct ui_menu_bar_cb {
     44        /** Activated */
     45        void (*activate)(ui_menu_bar_t *, void *);
     46        /** Deactivated */
     47        void (*deactivate)(ui_menu_bar_t *, void *);
     48} ui_menu_bar_cb_t;
     49
    4250#endif
    4351
  • uspace/lib/ui/include/types/ui/testctl.h

    r2a0c827c rebb1489  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3636#ifndef _UI_TYPES_TESTCTL_H
    3737#define _UI_TYPES_TESTCTL_H
     38
     39#include <errno.h>
     40#include <io/kbd_event.h>
     41#include <io/pos_event.h>
     42#include <stdbool.h>
     43#include <types/ui/event.h>
    3844
    3945struct ui_test_ctl;
  • uspace/lib/ui/include/types/ui/window.h

    r2a0c827c rebb1489  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    8080        /** Window rectangle */
    8181        gfx_rect_t rect;
     82        /** Minimum size to which window can be resized */
     83        gfx_coord2_t min_size;
    8284        /** Window caption */
    8385        const char *caption;
     
    100102        void (*maximize)(ui_window_t *, void *);
    101103        void (*unmaximize)(ui_window_t *, void *);
     104        void (*resize)(ui_window_t *, void *);
    102105        void (*close)(ui_window_t *, void *);
    103106        void (*focus)(ui_window_t *, void *, unsigned);
  • uspace/lib/ui/include/ui/menubar.h

    r2a0c827c rebb1489  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5252    ui_menu_bar_t **);
    5353extern void ui_menu_bar_destroy(ui_menu_bar_t *);
     54extern void ui_menu_bar_set_cb(ui_menu_bar_t *, ui_menu_bar_cb_t *, void *);
    5455extern ui_control_t *ui_menu_bar_ctl(ui_menu_bar_t *);
    5556extern void ui_menu_bar_set_rect(ui_menu_bar_t *, gfx_rect_t *);
  • uspace/lib/ui/include/ui/window.h

    r2a0c827c rebb1489  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    7474extern void ui_window_def_pos(ui_window_t *, pos_event_t *);
    7575extern void ui_window_def_unfocus(ui_window_t *, unsigned);
     76extern void ui_window_def_resize(ui_window_t *);
    7677
    7778#endif
  • uspace/lib/ui/private/menubar.h

    r2a0c827c rebb1489  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6464        /** List of menu drop-downs (ui_menu_dd_t) */
    6565        list_t menudds;
     66        /** Callbacks */
     67        struct ui_menu_bar_cb *cb;
     68        /** Callback argument */
     69        void *arg;
    6670};
    6771
  • uspace/lib/ui/private/window.h

    r2a0c827c rebb1489  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    133133extern void ui_window_send_pos(ui_window_t *, pos_event_t *);
    134134extern void ui_window_send_unfocus(ui_window_t *, unsigned);
     135extern void ui_window_send_resize(ui_window_t *);
    135136extern errno_t ui_window_size_change(ui_window_t *, gfx_rect_t *,
    136137    ui_wnd_sc_op_t);
  • uspace/lib/ui/src/menubar.c

    r2a0c827c rebb1489  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6666static ui_evclaim_t ui_menu_bar_ctl_kbd_event(void *, kbd_event_t *);
    6767static ui_evclaim_t ui_menu_bar_ctl_pos_event(void *, pos_event_t *);
     68static void ui_menu_bar_activate_ev(ui_menu_bar_t *);
     69static void ui_menu_bar_deactivate_ev(ui_menu_bar_t *);
    6870
    6971/** Menu bar control ops */
     
    131133        ui_control_delete(mbar->control);
    132134        free(mbar);
     135}
     136
     137/** Set menu bar callbacks.
     138 *
     139 * @param mbar Menu bar
     140 * @param cb Callbacks
     141 * @param arg Callback argument
     142 */
     143void ui_menu_bar_set_cb(ui_menu_bar_t *mbar, ui_menu_bar_cb_t *cb, void *arg)
     144{
     145        mbar->cb = cb;
     146        mbar->arg = arg;
    133147}
    134148
     
    288302                }
    289303
     304                if (!mbar->active)
     305                        ui_menu_bar_activate_ev(mbar);
    290306                mbar->active = true;
    291307        } else {
     308                if (mbar->active)
     309                        ui_menu_bar_deactivate_ev(mbar);
    292310                mbar->active = false;
    293311        }
     
    640658
    641659        (void) ui_menu_bar_paint(mbar);
     660        ui_menu_bar_activate_ev(mbar);
    642661}
    643662
     
    649668{
    650669        ui_menu_bar_select(mbar, NULL, false, 0);
     670        ui_menu_bar_deactivate_ev(mbar);
    651671}
    652672
     
    700720}
    701721
     722/** Send menu bar activate event.
     723 *
     724 * @param mbar Menu bar
     725 */
     726static void ui_menu_bar_activate_ev(ui_menu_bar_t *mbar)
     727{
     728        if (mbar->cb != NULL && mbar->cb->activate != NULL)
     729                mbar->cb->activate(mbar, mbar->arg);
     730}
     731
     732/** Send menu bar deactivate event.
     733 *
     734 * @param mbar Menu bar
     735 */
     736static void ui_menu_bar_deactivate_ev(ui_menu_bar_t *mbar)
     737{
     738        if (mbar->cb != NULL && mbar->cb->deactivate != NULL)
     739                mbar->cb->deactivate(mbar, mbar->arg);
     740}
     741
    702742/** @}
    703743 */
  • uspace/lib/ui/src/ui.c

    r2a0c827c rebb1489  
    357357
    358358                break;
     359        case CEV_RESIZE:
     360                ui_lock(ui);
     361                ui_window_send_resize(awnd);
     362                ui_unlock(ui);
     363                break;
    359364        }
    360365}
  • uspace/lib/ui/src/window.c

    r2a0c827c rebb1489  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    318318{
    319319        ui_window_t *window;
     320        ui_window_t *pwindow = NULL;
    320321        display_info_t info;
    321322        gfx_coord2_t scr_dims;
     
    342343        dparams.rect = params->rect;
    343344        dparams.caption = params->caption;
    344         /* Only allow making the window larger */
    345         gfx_rect_dims(&params->rect, &dparams.min_size);
     345        dparams.min_size = params->min_size;
    346346
    347347        /*
     
    505505        *rwindow = window;
    506506
     507        if (ui_is_fullscreen(ui))
     508                pwindow = ui_window_get_active(ui);
     509
    507510        list_append(&window->lwindows, &ui->windows);
     511
     512        if (ui_is_fullscreen(ui)) {
     513                /* Send unfocus event to previously active window */
     514                if (pwindow != NULL)
     515                        ui_window_send_unfocus(pwindow, 0);
     516        }
     517
    508518        return EOK;
    509519error:
     
    531541{
    532542        ui_t *ui;
     543        ui_window_t *nwindow;
    533544
    534545        if (window == NULL)
     
    558569        if (ui_is_fullscreen(ui)) {
    559570                ui_paint(ui);
     571                /* Send focus event to newly active window */
     572                nwindow = ui_window_get_active(ui);
     573                if (nwindow != NULL)
     574                        ui_window_send_focus(nwindow, 0);
    560575        }
    561576
     
    10311046        ui_lock(ui);
    10321047        (void) ui_window_resize(window, rect);
    1033         (void) ui_window_paint(window);
     1048        ui_window_send_resize(window);
    10341049        ui_unlock(ui);
    10351050}
     
    12791294void ui_window_send_minimize(ui_window_t *window)
    12801295{
    1281         if (window->cb != NULL && window->cb->maximize != NULL)
     1296        if (window->cb != NULL && window->cb->minimize != NULL)
    12821297                window->cb->minimize(window, window->arg);
    12831298        else
     
    13771392        else
    13781393                return ui_window_def_unfocus(window, nfocus);
     1394}
     1395
     1396/** Send window resize event.
     1397 *
     1398 * @param window Window
     1399 */
     1400void ui_window_send_resize(ui_window_t *window)
     1401{
     1402        if (window->cb != NULL && window->cb->resize != NULL)
     1403                window->cb->resize(window, window->arg);
     1404        else
     1405                return ui_window_def_resize(window);
    13791406}
    13801407
     
    15571584        if (window->control != NULL)
    15581585                ui_control_unfocus(window->control, nfocus);
     1586}
     1587
     1588/** Default window resize routine.
     1589 *
     1590 * @param window Window
     1591 * @return EOK on success or an error code
     1592 */
     1593void ui_window_def_resize(ui_window_t *window)
     1594{
     1595        ui_window_paint(window);
    15591596}
    15601597
  • uspace/lib/ui/test/window.c

    r2a0c827c rebb1489  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5555static void test_window_pos(ui_window_t *, void *, pos_event_t *);
    5656static void test_window_unfocus(ui_window_t *, void *, unsigned);
     57static void test_window_resize(ui_window_t *, void *);
    5758
    5859static ui_window_cb_t test_window_cb = {
     
    6667        .paint = test_window_paint,
    6768        .pos = test_window_pos,
    68         .unfocus = test_window_unfocus
     69        .unfocus = test_window_unfocus,
     70        .resize = test_window_resize
    6971};
    7072
     
    99101        bool unfocus;
    100102        unsigned unfocus_nfocus;
     103        bool resize;
    101104} test_cb_resp_t;
    102105
     
    936939}
    937940
     941/** ui_window_send_resize() calls resize callback set via ui_window_set_cb() */
     942PCUT_TEST(send_resize)
     943{
     944        errno_t rc;
     945        ui_t *ui = NULL;
     946        ui_wnd_params_t params;
     947        ui_window_t *window = NULL;
     948        test_cb_resp_t resp;
     949
     950        rc = ui_create_disp(NULL, &ui);
     951        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     952
     953        ui_wnd_params_init(&params);
     954        params.caption = "Hello";
     955
     956        rc = ui_window_create(ui, &params, &window);
     957        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     958        PCUT_ASSERT_NOT_NULL(window);
     959
     960        /* Resize callback with no callbacks set */
     961        ui_window_send_resize(window);
     962
     963        /* Resize callback with resize callback not implemented */
     964        ui_window_set_cb(window, &dummy_window_cb, NULL);
     965        ui_window_send_resize(window);
     966
     967        /* Resize callback with real callback set */
     968        resp.close = false;
     969        ui_window_set_cb(window, &test_window_cb, &resp);
     970        ui_window_send_resize(window);
     971        PCUT_ASSERT_TRUE(resp.resize);
     972
     973        ui_window_destroy(window);
     974        ui_destroy(ui);
     975}
     976
    938977static void test_window_sysmenu(ui_window_t *window, void *arg, sysarg_t idev_id)
    939978{
     
    10141053}
    10151054
     1055static void test_window_resize(ui_window_t *window, void *arg)
     1056{
     1057        test_cb_resp_t *resp = (test_cb_resp_t *) arg;
     1058
     1059        resp->resize = true;
     1060}
     1061
    10161062static errno_t test_ctl_paint(void *arg)
    10171063{
Note: See TracChangeset for help on using the changeset viewer.