Changeset 1af103e in mainline for uspace/lib/ui/src/window.c
- Timestamp:
- 2023-09-13T17:29:07Z (9 months ago)
- Branches:
- master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 61643c8
- Parents:
- 46bd63c9
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/window.c
r46bd63c9 r1af103e 47 47 #include <stdlib.h> 48 48 #include <ui/control.h> 49 #include <ui/menu.h> 50 #include <ui/menuentry.h> 49 51 #include <ui/resource.h> 50 52 #include <ui/ui.h> … … 74 76 }; 75 77 78 static void wd_sysmenu(ui_wdecor_t *, void *, sysarg_t); 76 79 static void wd_minimize(ui_wdecor_t *, void *); 77 80 static void wd_maximize(ui_wdecor_t *, void *); … … 84 87 85 88 static ui_wdecor_cb_t wdecor_cb = { 89 .sysmenu = wd_sysmenu, 86 90 .minimize = wd_minimize, 87 91 .maximize = wd_maximize, … … 92 96 .set_cursor = wd_set_cursor 93 97 }; 98 99 static void wnd_sysmenu_left(ui_menu_t *, void *, sysarg_t); 100 static void wnd_sysmenu_right(ui_menu_t *, void *, sysarg_t); 101 static void wnd_sysmenu_close_req(ui_menu_t *, void *); 102 static void wnd_sysmenu_press_accel(ui_menu_t *, void *, char32_t, sysarg_t); 103 104 static ui_menu_cb_t wnd_sysmenu_cb = { 105 .left = wnd_sysmenu_left, 106 .right = wnd_sysmenu_right, 107 .close_req = wnd_sysmenu_close_req, 108 .press_accel = wnd_sysmenu_press_accel 109 }; 110 111 static void wnd_sysmenu_eclose(ui_menu_entry_t *, void *); 94 112 95 113 static void ui_window_invalidate(void *, gfx_rect_t *); … … 417 435 list_remove(&window->lwindows); 418 436 ui_control_destroy(window->control); 437 ui_menu_destroy(window->sysmenu); 419 438 ui_wdecor_destroy(window->wdecor); 420 439 ui_resource_destroy(window->res); … … 929 948 } 930 949 950 /** Window decoration requested opening of system menu. 951 * 952 * @param wdecor Window decoration 953 * @param arg Argument (window) 954 * @param idev_id Input device ID 955 */ 956 static void wd_sysmenu(ui_wdecor_t *wdecor, void *arg, sysarg_t idev_id) 957 { 958 ui_window_t *window = (ui_window_t *) arg; 959 960 ui_window_send_sysmenu(window, idev_id); 961 } 962 931 963 /** Window decoration requested window minimization. 932 964 * … … 1070 1102 } 1071 1103 1104 /** Send window sysmenu event. 1105 * 1106 * @param window Window 1107 * @parma idev_id Input device ID 1108 */ 1109 void ui_window_send_sysmenu(ui_window_t *window, sysarg_t idev_id) 1110 { 1111 if (window->cb != NULL && window->cb->sysmenu != NULL) 1112 window->cb->sysmenu(window, window->arg, idev_id); 1113 else 1114 ui_window_def_sysmenu(window, idev_id); 1115 } 1116 1072 1117 /** Send window minimize event. 1073 1118 * … … 1174 1219 else 1175 1220 return ui_window_def_unfocus(window, nfocus); 1221 } 1222 1223 /** Default window sysmenu routine. 1224 * 1225 * @param window Window 1226 * @param idev_id Input device ID 1227 * @return EOK on success or an error code 1228 */ 1229 errno_t ui_window_def_sysmenu(ui_window_t *window, sysarg_t idev_id) 1230 { 1231 errno_t rc; 1232 ui_menu_entry_t *mclose; 1233 ui_wdecor_geom_t geom; 1234 1235 if (window->sysmenu == NULL) { 1236 rc = ui_menu_create(window, &window->sysmenu); 1237 if (rc != EOK) 1238 goto error; 1239 1240 ui_menu_set_cb(window->sysmenu, &wnd_sysmenu_cb, 1241 (void *)window); 1242 1243 rc = ui_menu_entry_create(window->sysmenu, "~C~lose", "Alt-F4", 1244 &mclose); 1245 if (rc != EOK) 1246 goto error; 1247 1248 ui_menu_entry_set_cb(mclose, wnd_sysmenu_eclose, 1249 (void *)window); 1250 } 1251 1252 if (ui_menu_is_open(window->sysmenu)) { 1253 ui_menu_close(window->sysmenu); 1254 } else { 1255 ui_wdecor_get_geom(window->wdecor, &geom); 1256 1257 rc = ui_menu_open(window->sysmenu, &geom.title_bar_rect, 1258 idev_id); 1259 if (rc != EOK) 1260 goto error; 1261 } 1262 1263 return EOK; 1264 error: 1265 return rc; 1176 1266 } 1177 1267 … … 1260 1350 ui_evclaim_t ui_window_def_kbd(ui_window_t *window, kbd_event_t *kbd) 1261 1351 { 1352 ui_evclaim_t claim; 1353 1262 1354 if (window->control != NULL) 1263 return ui_control_kbd_event(window->control, kbd); 1355 claim = ui_control_kbd_event(window->control, kbd); 1356 else 1357 claim = ui_unclaimed; 1358 1359 if (claim == ui_unclaimed) 1360 return ui_wdecor_kbd_event(window->wdecor, kbd); 1264 1361 1265 1362 return ui_unclaimed; … … 1316 1413 if (window->control != NULL) 1317 1414 ui_control_unfocus(window->control, nfocus); 1415 } 1416 1417 /** Handle system menu left event. 1418 * 1419 * @param sysmenu System menu 1420 * @param arg Argument (ui_window_t *) 1421 * @param idev_id Input device ID 1422 */ 1423 static void wnd_sysmenu_left(ui_menu_t *sysmenu, void *arg, sysarg_t idev_id) 1424 { 1425 (void)sysmenu; 1426 (void)arg; 1427 (void)idev_id; 1428 } 1429 1430 /** Handle system menu right event. 1431 * 1432 * @param sysmenu System menu 1433 * @param arg Argument (ui_window_t *) 1434 * @param idev_id Input device ID 1435 */ 1436 static void wnd_sysmenu_right(ui_menu_t *sysmenu, void *arg, sysarg_t idev_id) 1437 { 1438 (void)sysmenu; 1439 (void)arg; 1440 (void)idev_id; 1441 } 1442 1443 /** Handle system menu close request event. 1444 * 1445 * @param sysmenu System menu 1446 * @param arg Argument (ui_window_t *) 1447 * @param idev_id Input device ID 1448 */ 1449 static void wnd_sysmenu_close_req(ui_menu_t *sysmenu, void *arg) 1450 { 1451 (void)arg; 1452 1453 ui_menu_close(sysmenu); 1454 } 1455 1456 /** Handle system menu Close entry activation. 1457 * 1458 * @param mentry Menu entry 1459 * @param arg Argument (ui_window_t *) 1460 */ 1461 static void wnd_sysmenu_eclose(ui_menu_entry_t *mentry, void *arg) 1462 { 1463 ui_window_t *window = (ui_window_t *)arg; 1464 1465 ui_window_send_close(window); 1466 } 1467 1468 /** Handle system menu press accelerator key event. 1469 * 1470 * @param sysmenu System menu 1471 * @param arg Argument (ui_window_t *) 1472 * @param idev_id Input device ID 1473 */ 1474 static void wnd_sysmenu_press_accel(ui_menu_t *sysmenu, void *arg, 1475 char32_t c, sysarg_t idev_id) 1476 { 1477 (void)sysmenu; 1478 (void)arg; 1479 (void)c; 1480 (void)idev_id; 1318 1481 } 1319 1482
Note:
See TracChangeset
for help on using the changeset viewer.