Changeset 3a6d44b7 in mainline for uspace/lib/wndmgt


Ignore:
Timestamp:
2022-11-07T17:42:51Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
60ebe63
Parents:
f1f433d
Message:

Activate window by pushing window button on taskbar

Note that with multiple seats, one would need to know which seat pushed
the button and set the appropriate focus.

Location:
uspace/lib/wndmgt
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/wndmgt/include/wndmgt.h

    rf1f433d r3a6d44b7  
    4747    wndmgt_window_info_t **);
    4848extern void wndmgt_free_window_info(wndmgt_window_info_t *);
    49 extern errno_t wndmgt_activate_window(wndmgt_t *, sysarg_t);
     49extern errno_t wndmgt_activate_window(wndmgt_t *, sysarg_t, sysarg_t);
    5050extern errno_t wndmgt_close_window(wndmgt_t *, sysarg_t);
    5151
  • uspace/lib/wndmgt/include/wndmgt_srv.h

    rf1f433d r3a6d44b7  
    5252        errno_t (*get_window_list)(void *, wndmgt_window_list_t **);
    5353        errno_t (*get_window_info)(void *, sysarg_t, wndmgt_window_info_t **);
    54         errno_t (*activate_window)(void *, sysarg_t);
     54        errno_t (*activate_window)(void *, sysarg_t, sysarg_t);
    5555        errno_t (*close_window)(void *, sysarg_t);
    5656        errno_t (*get_event)(void *, wndmgt_ev_t *);
  • uspace/lib/wndmgt/src/wndmgt.c

    rf1f433d r3a6d44b7  
    287287 *
    288288 * @param wndmgt Window management session
     289 * @param seat_id Seat ID
    289290 * @param wnd_id Window ID
    290291 * @return EOK on success or an error code
    291292 */
    292 errno_t wndmgt_activate_window(wndmgt_t *wndmgt, sysarg_t wnd_id)
     293errno_t wndmgt_activate_window(wndmgt_t *wndmgt, sysarg_t seat_id,
     294    sysarg_t wnd_id)
    293295{
    294296        async_exch_t *exch;
     
    296298
    297299        exch = async_exchange_begin(wndmgt->sess);
    298         rc = async_req_1_0(exch, WNDMGT_ACTIVATE_WINDOW, wnd_id);
     300        rc = async_req_2_0(exch, WNDMGT_ACTIVATE_WINDOW, seat_id,
     301            wnd_id);
    299302
    300303        async_exchange_end(exch);
  • uspace/lib/wndmgt/src/wndmgt_srv.c

    rf1f433d r3a6d44b7  
    204204static void wndmgt_activate_window_srv(wndmgt_srv_t *srv, ipc_call_t *icall)
    205205{
     206        sysarg_t seat_id;
    206207        sysarg_t wnd_id;
    207208        errno_t rc;
    208209
    209         wnd_id = ipc_get_arg1(icall);
     210        seat_id = ipc_get_arg1(icall);
     211        wnd_id = ipc_get_arg2(icall);
    210212
    211213        if (srv->ops->activate_window == NULL) {
     
    214216        }
    215217
    216         rc = srv->ops->activate_window(srv->arg, wnd_id);
     218        rc = srv->ops->activate_window(srv->arg, seat_id, wnd_id);
    217219        async_answer_0(icall, rc);
    218220}
  • uspace/lib/wndmgt/test/wndmgt.c

    rf1f433d r3a6d44b7  
    4848static errno_t test_get_window_list(void *, wndmgt_window_list_t **);
    4949static errno_t test_get_window_info(void *, sysarg_t, wndmgt_window_info_t **);
    50 static errno_t test_activate_window(void *, sysarg_t);
     50static errno_t test_activate_window(void *, sysarg_t, sysarg_t);
    5151static errno_t test_close_window(void *, sysarg_t);
    5252static errno_t test_get_event(void *, wndmgt_ev_t *);
     
    8888
    8989        bool activate_window_called;
     90        sysarg_t activate_window_seat_id;
    9091        sysarg_t activate_window_wnd_id;
    9192
     
    302303        service_id_t sid;
    303304        wndmgt_t *wndmgt = NULL;
     305        sysarg_t seat_id;
    304306        sysarg_t wnd_id;
    305307        test_response_t resp;
     
    318320        PCUT_ASSERT_NOT_NULL(wndmgt);
    319321
     322        seat_id = 13;
    320323        wnd_id = 42;
    321324        resp.rc = ENOMEM;
    322325        resp.activate_window_called = false;
    323326
    324         rc = wndmgt_activate_window(wndmgt, wnd_id);
     327        rc = wndmgt_activate_window(wndmgt, seat_id, wnd_id);
    325328        PCUT_ASSERT_TRUE(resp.activate_window_called);
     329        PCUT_ASSERT_INT_EQUALS(seat_id, resp.activate_window_seat_id);
    326330        PCUT_ASSERT_INT_EQUALS(wnd_id, resp.activate_window_wnd_id);
    327331        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     
    338342        service_id_t sid;
    339343        wndmgt_t *wndmgt = NULL;
     344        sysarg_t seat_id;
    340345        sysarg_t wnd_id;
    341346        test_response_t resp;
     
    354359        PCUT_ASSERT_NOT_NULL(wndmgt);
    355360
     361        seat_id = 13;
    356362        wnd_id = 42;
    357363        resp.rc = EOK;
    358364        resp.activate_window_called = false;
    359365
    360         rc = wndmgt_activate_window(wndmgt, wnd_id);
     366        rc = wndmgt_activate_window(wndmgt, seat_id, wnd_id);
    361367        PCUT_ASSERT_TRUE(resp.activate_window_called);
     368        PCUT_ASSERT_INT_EQUALS(seat_id, resp.activate_window_seat_id);
    362369        PCUT_ASSERT_INT_EQUALS(wnd_id, resp.activate_window_wnd_id);
    363370        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     
    666673}
    667674
    668 static errno_t test_activate_window(void *arg, sysarg_t wnd_id)
     675static errno_t test_activate_window(void *arg, sysarg_t seat_id,
     676    sysarg_t wnd_id)
    669677{
    670678        test_response_t *resp = (test_response_t *) arg;
    671679
    672680        resp->activate_window_called = true;
     681        resp->activate_window_seat_id = seat_id;
    673682        resp->activate_window_wnd_id = wnd_id;
    674683        return resp->rc;
Note: See TracChangeset for help on using the changeset viewer.