Changeset f1f433d in mainline for uspace/srv


Ignore:
Timestamp:
2022-11-04T20:54:04Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
3a6d44b7
Parents:
fc00f0d
Message:

Update window button when window caption changes

Location:
uspace/srv/hid/display
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/display/test/wmclient.c

    rfc00f0d rf1f433d  
    107107}
    108108
     109/** Test ds_wmclient_get_event(), ds_wmclient_post_wnd_removed_event(). */
     110PCUT_TEST(client_get_post_wnd_removed_event)
     111{
     112        ds_display_t *disp;
     113        ds_wmclient_t *wmclient;
     114        wndmgt_ev_t revent;
     115        bool called_cb = NULL;
     116        sysarg_t wnd_id;
     117        errno_t rc;
     118
     119        rc = ds_display_create(NULL, df_none, &disp);
     120        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     121
     122        rc = ds_wmclient_create(disp, &test_ds_wmclient_cb, &called_cb,
     123            &wmclient);
     124        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     125
     126        called_cb = false;
     127        wnd_id = 42;
     128
     129        rc = ds_wmclient_get_event(wmclient, &revent);
     130        PCUT_ASSERT_ERRNO_VAL(ENOENT, rc);
     131
     132        rc = ds_wmclient_post_wnd_removed_event(wmclient, wnd_id);
     133        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     134        PCUT_ASSERT_TRUE(called_cb);
     135
     136        rc = ds_wmclient_get_event(wmclient, &revent);
     137        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     138        PCUT_ASSERT_EQUALS(wnd_id, revent.wnd_id);
     139        PCUT_ASSERT_EQUALS(wmev_window_removed, revent.etype);
     140
     141        rc = ds_wmclient_get_event(wmclient, &revent);
     142        PCUT_ASSERT_ERRNO_VAL(ENOENT, rc);
     143
     144        ds_wmclient_destroy(wmclient);
     145        ds_display_destroy(disp);
     146}
     147
     148/** Test ds_wmclient_get_event(), ds_wmclient_post_wnd_changed_event(). */
     149PCUT_TEST(client_get_post_wnd_changed_event)
     150{
     151        ds_display_t *disp;
     152        ds_wmclient_t *wmclient;
     153        wndmgt_ev_t revent;
     154        bool called_cb = NULL;
     155        sysarg_t wnd_id;
     156        errno_t rc;
     157
     158        rc = ds_display_create(NULL, df_none, &disp);
     159        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     160
     161        rc = ds_wmclient_create(disp, &test_ds_wmclient_cb, &called_cb,
     162            &wmclient);
     163        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     164
     165        called_cb = false;
     166        wnd_id = 42;
     167
     168        rc = ds_wmclient_get_event(wmclient, &revent);
     169        PCUT_ASSERT_ERRNO_VAL(ENOENT, rc);
     170
     171        rc = ds_wmclient_post_wnd_changed_event(wmclient, wnd_id);
     172        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     173        PCUT_ASSERT_TRUE(called_cb);
     174
     175        rc = ds_wmclient_get_event(wmclient, &revent);
     176        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     177        PCUT_ASSERT_EQUALS(wnd_id, revent.wnd_id);
     178        PCUT_ASSERT_EQUALS(wmev_window_changed, revent.etype);
     179
     180        rc = ds_wmclient_get_event(wmclient, &revent);
     181        PCUT_ASSERT_ERRNO_VAL(ENOENT, rc);
     182
     183        ds_wmclient_destroy(wmclient);
     184        ds_display_destroy(disp);
     185}
     186
    109187/** Test ds_wmclient_purge_events() */
    110188PCUT_TEST(purge_events)
  • uspace/srv/hid/display/window.c

    rfc00f0d rf1f433d  
    4545#include <stdlib.h>
    4646#include <str.h>
     47#include <wndmgt.h>
    4748#include "client.h"
    4849#include "display.h"
    4950#include "seat.h"
    5051#include "window.h"
     52#include "wmclient.h"
    5153
    5254static void ds_window_invalidate_cb(void *, gfx_rect_t *);
     
    933935{
    934936        char *dcaption;
     937        ds_wmclient_t *wmclient;
    935938
    936939        dcaption = str_dup(caption);
     
    940943        free(wnd->caption);
    941944        wnd->caption = dcaption;
     945
     946        /* Notify window managers about window information change */
     947        wmclient = ds_display_first_wmclient(wnd->display);
     948        while (wmclient != NULL) {
     949                ds_wmclient_post_wnd_changed_event(wmclient, wnd->id);
     950                wmclient = ds_display_next_wmclient(wmclient);
     951        }
    942952
    943953        return EOK;
  • uspace/srv/hid/display/wmclient.c

    rfc00f0d rf1f433d  
    184184}
    185185
     186/** Post window changed event to the WM client's message queue.
     187 *
     188 * @param wmclient WM client
     189 * @param wnd_id Window ID of the added window
     190 *
     191 * @return EOK on success or an error code
     192 */
     193errno_t ds_wmclient_post_wnd_changed_event(ds_wmclient_t *wmclient,
     194    sysarg_t wnd_id)
     195{
     196        ds_wmclient_ev_t *wevent;
     197
     198        wevent = calloc(1, sizeof(ds_wmclient_ev_t));
     199        if (wevent == NULL)
     200                return ENOMEM;
     201
     202        wevent->wmclient = wmclient;
     203        wevent->event.etype = wmev_window_changed;
     204        wevent->event.wnd_id = wnd_id;
     205        list_append(&wevent->levents, &wmclient->events);
     206
     207        /* Notify the client */
     208        // TODO Do not send more than once until client drains the queue
     209        if (wmclient->cb != NULL && wmclient->cb->ev_pending != NULL)
     210                wmclient->cb->ev_pending(wmclient->cb_arg);
     211
     212        return EOK;
     213}
     214
    186215/** @}
    187216 */
  • uspace/srv/hid/display/wmclient.h

    rfc00f0d rf1f433d  
    4848extern errno_t ds_wmclient_post_wnd_added_event(ds_wmclient_t *, sysarg_t);
    4949extern errno_t ds_wmclient_post_wnd_removed_event(ds_wmclient_t *, sysarg_t);
     50extern errno_t ds_wmclient_post_wnd_changed_event(ds_wmclient_t *, sysarg_t);
    5051extern void ds_wmclient_purge_events(ds_wmclient_t *);
    5152
Note: See TracChangeset for help on using the changeset viewer.