Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/display/src/display.c

    r5d380b6 rc9927c66  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2021 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3838#include <mem.h>
    3939#include <stdlib.h>
    40 #include <str.h>
    4140#include "../private/display.h"
    4241#include "../private/params.h"
     
    6968                dsname = SERVICE_NAME_DISPLAY;
    7069
    71         rc = loc_service_get_id(dsname, &display_svc, 0);
     70        rc = loc_service_get_id(dsname, &display_svc, IPC_FLAG_BLOCKING);
    7271        if (rc != EOK) {
    7372                free(display);
     
    7675
    7776        display->sess = loc_service_connect(display_svc, INTERFACE_DISPLAY,
    78             0);
     77            IPC_FLAG_BLOCKING);
    7978        if (display->sess == NULL) {
    8079                free(display);
     
    148147{
    149148        memset(params, 0, sizeof(*params));
    150         params->caption = "";
    151149}
    152150
     
    164162{
    165163        display_window_t *window;
    166         display_wnd_params_enc_t eparams;
    167         async_exch_t *exch;
    168         aid_t req;
    169         ipc_call_t answer;
    170         errno_t rc;
    171 
    172         /* Encode the parameters for transport */
    173         eparams.rect = params->rect;
    174         eparams.caption_size = str_size(params->caption);
    175         eparams.min_size = params->min_size;
    176         eparams.pos = params->pos;
    177         eparams.flags = params->flags;
    178         eparams.idev_id = params->idev_id;
     164        async_exch_t *exch;
     165        aid_t req;
     166        ipc_call_t answer;
     167        errno_t rc;
    179168
    180169        window = calloc(1, sizeof(display_window_t));
     
    184173        exch = async_exchange_begin(display->sess);
    185174        req = async_send_0(exch, DISPLAY_WINDOW_CREATE, &answer);
    186 
    187         /* Write fixed fields */
    188         rc = async_data_write_start(exch, &eparams,
    189             sizeof (display_wnd_params_enc_t));
    190         if (rc != EOK) {
    191                 async_exchange_end(exch);
    192                 async_forget(req);
    193                 free(window);
    194                 return rc;
    195         }
    196 
    197         /* Write caption */
    198         rc = async_data_write_start(exch, params->caption,
    199             eparams.caption_size);
     175        rc = async_data_write_start(exch, params, sizeof (display_wnd_params_t));
    200176        async_exchange_end(exch);
    201177        if (rc != EOK) {
     
    285261 * @param window Window
    286262 * @param pos Position in the window where the button was pressed
    287  * @param pos_id Positioning device ID
    288  * @return EOK on success or an error code
    289  */
    290 errno_t display_window_move_req(display_window_t *window, gfx_coord2_t *pos,
    291     sysarg_t pos_id)
    292 {
    293         async_exch_t *exch;
    294         aid_t req;
    295         ipc_call_t answer;
    296         errno_t rc;
    297 
    298         exch = async_exchange_begin(window->display->sess);
    299         req = async_send_2(exch, DISPLAY_WINDOW_MOVE_REQ, window->id,
    300             pos_id, &answer);
     263 * @return EOK on success or an error code
     264 */
     265errno_t display_window_move_req(display_window_t *window, gfx_coord2_t *pos)
     266{
     267        async_exch_t *exch;
     268        aid_t req;
     269        ipc_call_t answer;
     270        errno_t rc;
     271
     272        exch = async_exchange_begin(window->display->sess);
     273        req = async_send_1(exch, DISPLAY_WINDOW_MOVE_REQ, window->id, &answer);
    301274        rc = async_data_write_start(exch, (void *)pos, sizeof (gfx_coord2_t));
    302275        async_exchange_end(exch);
     
    377350}
    378351
    379 /** Get display window maximized rectangle.
    380  *
    381  * Get the rectangle to which a window would be maximized.
    382  *
    383  * @param window Window
    384  * @param rect Place to store maximized rectangle
    385  * @return EOK on success or an error code
    386  */
    387 errno_t display_window_get_max_rect(display_window_t *window, gfx_rect_t *rect)
    388 {
    389         async_exch_t *exch;
    390         aid_t req;
    391         ipc_call_t answer;
    392         errno_t rc;
    393 
    394         exch = async_exchange_begin(window->display->sess);
    395         req = async_send_1(exch, DISPLAY_WINDOW_GET_MAX_RECT, window->id,
    396             &answer);
    397         rc = async_data_read_start(exch, rect, sizeof (gfx_rect_t));
    398         async_exchange_end(exch);
    399         if (rc != EOK) {
    400                 async_forget(req);
    401                 return rc;
    402         }
    403 
    404         async_wait_for(req, &rc);
    405         if (rc != EOK)
    406                 return rc;
    407 
    408         return EOK;
    409 }
    410 
    411352/** Request a window resize.
    412353 *
     
    418359 * @param rsztype Resize type (which part of window frame is being dragged)
    419360 * @param pos Position in the window where the button was pressed
    420  * @param pos_id Positioning device ID
    421361 * @return EOK on success or an error code
    422362 */
    423363errno_t display_window_resize_req(display_window_t *window,
    424     display_wnd_rsztype_t rsztype, gfx_coord2_t *pos, sysarg_t pos_id)
    425 {
    426         async_exch_t *exch;
    427         aid_t req;
    428         ipc_call_t answer;
    429         errno_t rc;
    430 
    431         exch = async_exchange_begin(window->display->sess);
    432         req = async_send_3(exch, DISPLAY_WINDOW_RESIZE_REQ, window->id,
    433             (sysarg_t) rsztype, pos_id, &answer);
     364    display_wnd_rsztype_t rsztype, gfx_coord2_t *pos)
     365{
     366        async_exch_t *exch;
     367        aid_t req;
     368        ipc_call_t answer;
     369        errno_t rc;
     370
     371        exch = async_exchange_begin(window->display->sess);
     372        req = async_send_2(exch, DISPLAY_WINDOW_RESIZE_REQ, window->id,
     373            (sysarg_t) rsztype, &answer);
    434374        rc = async_data_write_start(exch, (void *)pos, sizeof (gfx_coord2_t));
    435375        async_exchange_end(exch);
     
    515455}
    516456
    517 /** Minimize window.
    518  *
    519  * @param window Window
    520  * @return EOK on success or an error code
    521  */
    522 errno_t display_window_minimize(display_window_t *window)
    523 {
    524         async_exch_t *exch;
    525         errno_t rc;
    526 
    527         exch = async_exchange_begin(window->display->sess);
    528         rc = async_req_1_0(exch, DISPLAY_WINDOW_MINIMIZE, window->id);
    529         async_exchange_end(exch);
    530 
    531         return rc;
    532 }
    533 
    534 /** Maximize window.
    535  *
    536  * @param window Window
    537  * @return EOK on success or an error code
    538  */
    539 errno_t display_window_maximize(display_window_t *window)
    540 {
    541         async_exch_t *exch;
    542         errno_t rc;
    543 
    544         exch = async_exchange_begin(window->display->sess);
    545         rc = async_req_1_0(exch, DISPLAY_WINDOW_MAXIMIZE, window->id);
    546         async_exchange_end(exch);
    547 
    548         return rc;
    549 }
    550 
    551 /** Unmaximize window.
    552  *
    553  * @param window Window
    554  * @return EOK on success or an error code
    555  */
    556 errno_t display_window_unmaximize(display_window_t *window)
    557 {
    558         async_exch_t *exch;
    559         errno_t rc;
    560 
    561         exch = async_exchange_begin(window->display->sess);
    562         rc = async_req_1_0(exch, DISPLAY_WINDOW_UNMAXIMIZE, window->id);
    563         async_exchange_end(exch);
    564 
    565         return rc;
    566 }
    567 
    568457/** Set window cursor.
    569458 *
     
    585474            cursor);
    586475        async_exchange_end(exch);
    587         return rc;
    588 }
    589 
    590 /** Set display window caption.
    591  *
    592  * @param window Window
    593  * @param caption New caption
    594  * @return EOK on success or an error code
    595  */
    596 errno_t display_window_set_caption(display_window_t *window,
    597     const char *caption)
    598 {
    599         async_exch_t *exch;
    600         aid_t req;
    601         ipc_call_t answer;
    602         size_t cap_size;
    603         errno_t rc;
    604 
    605         cap_size = str_size(caption);
    606 
    607         exch = async_exchange_begin(window->display->sess);
    608         req = async_send_1(exch, DISPLAY_WINDOW_SET_CAPTION, window->id,
    609             &answer);
    610 
    611         /* Write caption */
    612         rc = async_data_write_start(exch, caption, cap_size);
    613         async_exchange_end(exch);
    614         if (rc != EOK) {
    615                 async_forget(req);
    616                 return rc;
    617         }
    618 
    619         async_wait_for(req, &rc);
    620476        return rc;
    621477}
     
    721577                case wev_focus:
    722578                        if (window->cb != NULL && window->cb->focus_event != NULL) {
    723                                 window->cb->focus_event(window->cb_arg,
    724                                     event.ev.focus.nfocus);
     579                                window->cb->focus_event(window->cb_arg);
    725580                        }
    726581                        break;
     
    745600                case wev_unfocus:
    746601                        if (window->cb != NULL && window->cb->unfocus_event != NULL) {
    747                                 window->cb->unfocus_event(window->cb_arg,
    748                                     event.ev.unfocus.nfocus);
     602                                window->cb->unfocus_event(window->cb_arg);
    749603                        }
    750604                        break;
Note: See TracChangeset for help on using the changeset viewer.