Changeset f1f433d in mainline for uspace/srv
- Timestamp:
- 2022-11-04T20:54:04Z (3 years ago)
- Branches:
- master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 3a6d44b7
- Parents:
- fc00f0d
- Location:
- uspace/srv/hid/display
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/display/test/wmclient.c
rfc00f0d rf1f433d 107 107 } 108 108 109 /** Test ds_wmclient_get_event(), ds_wmclient_post_wnd_removed_event(). */ 110 PCUT_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(). */ 149 PCUT_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 109 187 /** Test ds_wmclient_purge_events() */ 110 188 PCUT_TEST(purge_events) -
uspace/srv/hid/display/window.c
rfc00f0d rf1f433d 45 45 #include <stdlib.h> 46 46 #include <str.h> 47 #include <wndmgt.h> 47 48 #include "client.h" 48 49 #include "display.h" 49 50 #include "seat.h" 50 51 #include "window.h" 52 #include "wmclient.h" 51 53 52 54 static void ds_window_invalidate_cb(void *, gfx_rect_t *); … … 933 935 { 934 936 char *dcaption; 937 ds_wmclient_t *wmclient; 935 938 936 939 dcaption = str_dup(caption); … … 940 943 free(wnd->caption); 941 944 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 } 942 952 943 953 return EOK; -
uspace/srv/hid/display/wmclient.c
rfc00f0d rf1f433d 184 184 } 185 185 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 */ 193 errno_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 186 215 /** @} 187 216 */ -
uspace/srv/hid/display/wmclient.h
rfc00f0d rf1f433d 48 48 extern errno_t ds_wmclient_post_wnd_added_event(ds_wmclient_t *, sysarg_t); 49 49 extern errno_t ds_wmclient_post_wnd_removed_event(ds_wmclient_t *, sysarg_t); 50 extern errno_t ds_wmclient_post_wnd_changed_event(ds_wmclient_t *, sysarg_t); 50 51 extern void ds_wmclient_purge_events(ds_wmclient_t *); 51 52
Note:
See TracChangeset
for help on using the changeset viewer.