Changeset 06176e1 in mainline for uspace/lib/display


Ignore:
Timestamp:
2022-12-20T12:31:44Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4e7b0ad
Parents:
d46ac73
git-author:
Jiri Svoboda <jiri@…> (2022-12-19 18:31:30)
git-committer:
Jiri Svoboda <jiri@…> (2022-12-20 12:31:44)
Message:

Minimizing windows

Location:
uspace/lib/display
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/display/include/disp_srv.h

    rd46ac73 r06176e1  
    6464        errno_t (*window_get_max_rect)(void *, sysarg_t, gfx_rect_t *);
    6565        errno_t (*window_resize)(void *, sysarg_t, gfx_coord2_t *, gfx_rect_t *);
     66        errno_t (*window_minimize)(void *, sysarg_t);
    6667        errno_t (*window_maximize)(void *, sysarg_t);
    6768        errno_t (*window_unmaximize)(void *, sysarg_t);
  • uspace/lib/display/include/display.h

    rd46ac73 r06176e1  
    6262extern errno_t display_window_resize(display_window_t *,
    6363    gfx_coord2_t *, gfx_rect_t *);
     64extern errno_t display_window_minimize(display_window_t *);
    6465extern errno_t display_window_maximize(display_window_t *);
    6566extern errno_t display_window_unmaximize(display_window_t *);
  • uspace/lib/display/include/ipc/display.h

    rd46ac73 r06176e1  
    4242        DISPLAY_WINDOW_CREATE,
    4343        DISPLAY_WINDOW_DESTROY,
     44        DISPLAY_WINDOW_MINIMIZE,
    4445        DISPLAY_WINDOW_MAXIMIZE,
    4546        DISPLAY_WINDOW_MOVE,
  • uspace/lib/display/include/types/display/wndparams.h

    rd46ac73 r06176e1  
    4646        /** Set specific initial window position */
    4747        wndf_setpos = 0x4,
     48        /** Window is minimized */
     49        wndf_minimized = 0x8,
    4850        /** Window is maximized */
    49         wndf_maximized = 0x8,
     51        wndf_maximized = 0x10,
    5052        /** Special system window */
    51         wndf_system = 0x10,
     53        wndf_system = 0x20,
    5254        /** Maximized windows should avoid this window */
    53         wndf_avoid = 0x20
     55        wndf_avoid = 0x40
    5456} display_wnd_flags_t;
    5557
  • uspace/lib/display/src/disp_srv.c

    rd46ac73 r06176e1  
    391391}
    392392
     393static void display_window_minimize_srv(display_srv_t *srv, ipc_call_t *icall)
     394{
     395        sysarg_t wnd_id;
     396        errno_t rc;
     397
     398        wnd_id = ipc_get_arg1(icall);
     399
     400        if (srv->ops->window_minimize == NULL) {
     401                async_answer_0(icall, ENOTSUP);
     402                return;
     403        }
     404
     405        rc = srv->ops->window_minimize(srv->arg, wnd_id);
     406        async_answer_0(icall, rc);
     407}
     408
    393409static void display_window_maximize_srv(display_srv_t *srv, ipc_call_t *icall)
    394410{
     
    610626                case DISPLAY_WINDOW_RESIZE:
    611627                        display_window_resize_srv(srv, &call);
     628                        break;
     629                case DISPLAY_WINDOW_MINIMIZE:
     630                        display_window_minimize_srv(srv, &call);
    612631                        break;
    613632                case DISPLAY_WINDOW_MAXIMIZE:
  • uspace/lib/display/src/display.c

    rd46ac73 r06176e1  
    508508
    509509        return EOK;
     510}
     511
     512/** Minimize window.
     513 *
     514 * @param window Window
     515 * @return EOK on success or an error code
     516 */
     517errno_t display_window_minimize(display_window_t *window)
     518{
     519        async_exch_t *exch;
     520        errno_t rc;
     521
     522        exch = async_exchange_begin(window->display->sess);
     523        rc = async_req_1_0(exch, DISPLAY_WINDOW_MINIMIZE, window->id);
     524        async_exchange_end(exch);
     525
     526        return rc;
    510527}
    511528
  • uspace/lib/display/test/display.c

    rd46ac73 r06176e1  
    6666static errno_t test_window_resize(void *, sysarg_t, gfx_coord2_t *,
    6767    gfx_rect_t *);
     68static errno_t test_window_minimize(void *, sysarg_t);
    6869static errno_t test_window_maximize(void *, sysarg_t);
    6970static errno_t test_window_unmaximize(void *, sysarg_t);
     
    8485        .window_resize_req = test_window_resize_req,
    8586        .window_resize = test_window_resize,
     87        .window_minimize = test_window_minimize,
    8688        .window_maximize = test_window_maximize,
    8789        .window_unmaximize = test_window_unmaximize,
     
    145147        sysarg_t resize_wnd_id;
    146148
     149        bool window_minimize_called;
    147150        bool window_maximize_called;
    148151        bool window_unmaximize_called;
     
    10501053        PCUT_ASSERT_INT_EQUALS(nrect.p1.x, resp.resize_nbound.p1.x);
    10511054        PCUT_ASSERT_INT_EQUALS(nrect.p1.y, resp.resize_nbound.p1.y);
     1055
     1056        display_window_destroy(wnd);
     1057        display_close(disp);
     1058        rc = loc_service_unregister(sid);
     1059        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1060}
     1061
     1062/** display_window_minimize() with server returning error response works. */
     1063PCUT_TEST(window_minimize_failure)
     1064{
     1065        errno_t rc;
     1066        service_id_t sid;
     1067        display_t *disp = NULL;
     1068        display_wnd_params_t params;
     1069        display_window_t *wnd;
     1070        test_response_t resp;
     1071
     1072        async_set_fallback_port_handler(test_display_conn, &resp);
     1073
     1074        // FIXME This causes this test to be non-reentrant!
     1075        rc = loc_server_register(test_display_server);
     1076        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1077
     1078        rc = loc_service_register(test_display_svc, &sid);
     1079        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1080
     1081        rc = display_open(test_display_svc, &disp);
     1082        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1083        PCUT_ASSERT_NOT_NULL(disp);
     1084
     1085        resp.rc = EOK;
     1086        display_wnd_params_init(&params);
     1087        params.rect.p0.x = 0;
     1088        params.rect.p0.y = 0;
     1089        params.rect.p0.x = 100;
     1090        params.rect.p0.y = 100;
     1091
     1092        rc = display_window_create(disp, &params, &test_display_wnd_cb,
     1093            (void *) &resp, &wnd);
     1094        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1095        PCUT_ASSERT_NOT_NULL(wnd);
     1096
     1097        resp.rc = EIO;
     1098        resp.window_minimize_called = false;
     1099
     1100        rc = display_window_minimize(wnd);
     1101        PCUT_ASSERT_TRUE(resp.window_minimize_called);
     1102        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     1103
     1104        display_window_destroy(wnd);
     1105        display_close(disp);
     1106        rc = loc_service_unregister(sid);
     1107        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1108}
     1109
     1110/** display_window_minimize() with server returning success response works. */
     1111PCUT_TEST(window_minimize_success)
     1112{
     1113        errno_t rc;
     1114        service_id_t sid;
     1115        display_t *disp = NULL;
     1116        display_wnd_params_t params;
     1117        display_window_t *wnd;
     1118        test_response_t resp;
     1119
     1120        async_set_fallback_port_handler(test_display_conn, &resp);
     1121
     1122        // FIXME This causes this test to be non-reentrant!
     1123        rc = loc_server_register(test_display_server);
     1124        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1125
     1126        rc = loc_service_register(test_display_svc, &sid);
     1127        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1128
     1129        rc = display_open(test_display_svc, &disp);
     1130        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1131        PCUT_ASSERT_NOT_NULL(disp);
     1132
     1133        resp.rc = EOK;
     1134        display_wnd_params_init(&params);
     1135        params.rect.p0.x = 0;
     1136        params.rect.p0.y = 0;
     1137        params.rect.p0.x = 100;
     1138        params.rect.p0.y = 100;
     1139
     1140        rc = display_window_create(disp, &params, &test_display_wnd_cb,
     1141            (void *) &resp, &wnd);
     1142        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     1143        PCUT_ASSERT_NOT_NULL(wnd);
     1144
     1145        resp.rc = EOK;
     1146        resp.window_minimize_called = false;
     1147
     1148        rc = display_window_minimize(wnd);
     1149        PCUT_ASSERT_TRUE(resp.window_minimize_called);
     1150        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
    10521151
    10531152        display_window_destroy(wnd);
     
    21032202}
    21042203
     2204static errno_t test_window_minimize(void *arg, sysarg_t wnd_id)
     2205{
     2206        test_response_t *resp = (test_response_t *) arg;
     2207
     2208        resp->window_minimize_called = true;
     2209        resp->resize_wnd_id = wnd_id;
     2210        return resp->rc;
     2211}
     2212
    21052213static errno_t test_window_maximize(void *arg, sysarg_t wnd_id)
    21062214{
Note: See TracChangeset for help on using the changeset viewer.