Changeset 34aad53d in mainline for uspace/lib
- Timestamp:
- 2024-04-07T09:45:45Z (18 months ago)
- Children:
- c37c24c
- Parents:
- e4cc266 (diff), 522eecf (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- uspace/lib
- Files:
-
- 1 added
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/congfx/src/console.c
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 1Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 91 91 uint8_t attr; 92 92 93 if ((clr >> 24) == 0 ) {93 if ((clr >> 24) == 0xff) { 94 94 /* RGB (no text) */ 95 95 ch->ch = 0; 96 96 ch->flags = CHAR_FLAG_DIRTY; 97 97 ch->attrs.type = CHAR_ATTR_RGB; 98 ch->attrs.val.rgb.fgcolor = clr ^ 0xffffff;98 ch->attrs.val.rgb.fgcolor = clr; 99 99 ch->attrs.val.rgb.bgcolor = clr; 100 100 } else { -
uspace/lib/gfx/src/color.c
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 1Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 64 64 color->g = g; 65 65 color->b = b; 66 color->attr = 0xff; 66 67 67 68 *rcolor = color; -
uspace/lib/meson.build
re4cc266 r34aad53d 33 33 'c', 34 34 'math', 35 'console', 35 36 'display', 37 'input', 38 'output', 36 39 'pixconv', 37 40 'posix', -
uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h
re4cc266 r34aad53d 42 42 #include <types/tbarcfg/tbarcfg.h> 43 43 44 #define TBARCFG_NOTIFY_DEFAULT "tbarcfg-notif" 45 44 46 extern errno_t tbarcfg_create(const char *, tbarcfg_t **); 45 47 extern errno_t tbarcfg_open(const char *, tbarcfg_t **); … … 63 65 extern errno_t smenu_entry_move_up(smenu_entry_t *); 64 66 extern errno_t smenu_entry_move_down(smenu_entry_t *); 67 extern errno_t tbarcfg_listener_create(const char *, void (*)(void *), 68 void *, tbarcfg_listener_t **); 69 extern void tbarcfg_listener_destroy(tbarcfg_listener_t *); 70 extern errno_t tbarcfg_notify(const char *); 65 71 66 72 #endif -
uspace/lib/tbarcfg/include/types/tbarcfg/tbarcfg.h
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 43 43 typedef struct smenu_entry smenu_entry_t; 44 44 45 struct tbarcfg_listener; 46 typedef struct tbarcfg_listener tbarcfg_listener_t; 47 45 48 #endif 46 49 -
uspace/lib/tbarcfg/private/tbarcfg.h
re4cc266 r34aad53d 71 71 }; 72 72 73 /** Taskbar configuration listener */ 74 typedef struct tbarcfg_listener { 75 /** Notification callback */ 76 void (*cb)(void *); 77 /** Callback argument */ 78 void *arg; 79 } tbarcfg_listener_t; 80 73 81 extern errno_t smenu_entry_new(tbarcfg_t *, sif_node_t *, const char *, 74 82 const char *, bool, smenu_entry_t **); -
uspace/lib/tbarcfg/src/tbarcfg.c
re4cc266 r34aad53d 34 34 */ 35 35 36 #include <async.h> 36 37 #include <errno.h> 37 38 #include <sif.h> 39 #include <ipc/tbarcfg.h> 40 #include <loc.h> 41 #include <task.h> 38 42 #include <tbarcfg/tbarcfg.h> 43 #include <stdio.h> 39 44 #include <stdlib.h> 40 45 #include <str.h> 41 46 #include "../private/tbarcfg.h" 47 48 static void tbarcfg_notify_conn(ipc_call_t *, void *); 42 49 43 50 /** Create taskbar configuration. … … 784 791 } 785 792 793 /** Create taskbar configuration listener. 794 * 795 * Listens for taskbar configuration change notifications. 796 * 797 * @param nchan Notification channel (TBARCFG_NOTIFY_DEFAULT) 798 * @param rlst Place to store pointer to new listener 799 * @return EOK on success or an error code 800 */ 801 errno_t tbarcfg_listener_create(const char *nchan, void (*cb)(void *), 802 void *arg, tbarcfg_listener_t **rlst) 803 { 804 tbarcfg_listener_t *lst; 805 service_id_t svcid = 0; 806 loc_srv_t *srv = NULL; 807 task_id_t taskid; 808 char *svcname = NULL; 809 category_id_t catid; 810 port_id_t port; 811 int rv; 812 errno_t rc; 813 814 lst = calloc(1, sizeof(tbarcfg_listener_t)); 815 if (lst == NULL) 816 return ENOMEM; 817 818 lst->cb = cb; 819 lst->arg = arg; 820 821 rc = async_create_port(INTERFACE_TBARCFG_NOTIFY, 822 tbarcfg_notify_conn, (void *)lst, &port); 823 if (rc != EOK) 824 goto error; 825 826 rc = loc_server_register("tbarcfg-listener", &srv); 827 if (rc != EOK) 828 goto error; 829 830 taskid = task_get_id(); 831 832 rv = asprintf(&svcname, "tbarcfg/%u", (unsigned)taskid); 833 if (rv < 0) { 834 rc = ENOMEM; 835 goto error; 836 } 837 838 rc = loc_service_register(srv, svcname, &svcid); 839 if (rc != EOK) 840 goto error; 841 842 rc = loc_category_get_id(nchan, &catid, 0); 843 if (rc != EOK) 844 goto error; 845 846 rc = loc_service_add_to_cat(srv, svcid, catid); 847 if (rc != EOK) 848 goto error; 849 850 *rlst = lst; 851 return EOK; 852 error: 853 if (svcid != 0) 854 loc_service_unregister(srv, svcid); 855 if (srv != NULL) 856 loc_server_unregister(srv); 857 if (svcname != NULL) 858 free(svcname); 859 return rc; 860 } 861 862 /** Destroy taskbar configuration listener. 863 * 864 * @param lst Listener 865 */ 866 void tbarcfg_listener_destroy(tbarcfg_listener_t *lst) 867 { 868 free(lst); 869 } 870 871 /** Send taskbar configuration notification to a particular service ID. 872 * 873 * @param svcid Service ID 874 * @return EOK on success or an error code 875 */ 876 static errno_t tbarcfg_notify_svc(service_id_t svcid) 877 { 878 async_sess_t *sess; 879 async_exch_t *exch; 880 errno_t rc; 881 882 sess = loc_service_connect(svcid, INTERFACE_TBARCFG_NOTIFY, 0); 883 if (sess == NULL) 884 return EIO; 885 886 exch = async_exchange_begin(sess); 887 rc = async_req_0_0(exch, TBARCFG_NOTIFY_NOTIFY); 888 if (rc != EOK) { 889 async_exchange_end(exch); 890 async_hangup(sess); 891 return rc; 892 } 893 894 async_exchange_end(exch); 895 async_hangup(sess); 896 return EOK; 897 } 898 899 /** Send taskbar configuration change notification. 900 * 901 * @param nchan Notification channel (TBARCFG_NOTIFY_DEFAULT) 902 */ 903 errno_t tbarcfg_notify(const char *nchan) 904 { 905 errno_t rc; 906 category_id_t catid; 907 service_id_t *svcs = NULL; 908 size_t count, i; 909 910 rc = loc_category_get_id(nchan, &catid, 0); 911 if (rc != EOK) 912 return rc; 913 914 rc = loc_category_get_svcs(catid, &svcs, &count); 915 if (rc != EOK) 916 return rc; 917 918 for (i = 0; i < count; i++) { 919 rc = tbarcfg_notify_svc(svcs[i]); 920 if (rc != EOK) 921 goto error; 922 } 923 924 free(svcs); 925 return EOK; 926 error: 927 free(svcs); 928 return rc; 929 } 930 931 /** Taskbar configuration connection handler. 932 * 933 * @param icall Initial call 934 * @param arg Argument (tbarcfg_listener_t *) 935 */ 936 static void tbarcfg_notify_conn(ipc_call_t *icall, void *arg) 937 { 938 tbarcfg_listener_t *lst = (tbarcfg_listener_t *)arg; 939 940 /* Accept the connection */ 941 async_accept_0(icall); 942 943 while (true) { 944 ipc_call_t call; 945 async_get_call(&call); 946 sysarg_t method = ipc_get_imethod(&call); 947 948 if (!method) { 949 /* The other side has hung up */ 950 async_answer_0(&call, EOK); 951 return; 952 } 953 954 switch (method) { 955 case TBARCFG_NOTIFY_NOTIFY: 956 lst->cb(lst->arg); 957 async_answer_0(&call, EOK); 958 break; 959 default: 960 async_answer_0(&call, EINVAL); 961 } 962 } 963 } 964 786 965 /** @} 787 966 */ -
uspace/lib/tbarcfg/test/tbarcfg.c
re4cc266 r34aad53d 30 30 #include <pcut/pcut.h> 31 31 #include <tbarcfg/tbarcfg.h> 32 #include <stdbool.h> 32 33 #include <stdio.h> 33 34 … … 35 36 36 37 PCUT_TEST_SUITE(tbarcfg); 38 39 typedef struct { 40 bool notified; 41 } tbarcfg_test_resp_t; 42 43 static void test_cb(void *); 37 44 38 45 /** Creating, opening and closing taskbar configuration */ … … 554 561 } 555 562 563 /** Notifications can be delivered from tbarcfg_notify() to a listener. */ 564 PCUT_TEST(notify) 565 { 566 errno_t rc; 567 tbarcfg_listener_t *lst; 568 tbarcfg_test_resp_t test_resp; 569 570 test_resp.notified = false; 571 572 printf("create listener resp=%p\n", (void *)&test_resp); 573 rc = tbarcfg_listener_create(TBARCFG_NOTIFY_DEFAULT, 574 test_cb, &test_resp, &lst); 575 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 576 577 rc = tbarcfg_notify(TBARCFG_NOTIFY_DEFAULT); 578 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 579 580 PCUT_ASSERT_TRUE(test_resp.notified); 581 tbarcfg_listener_destroy(lst); 582 } 583 584 static void test_cb(void *arg) 585 { 586 tbarcfg_test_resp_t *resp = (tbarcfg_test_resp_t *)arg; 587 588 printf("test_cb: executing resp=%p\n", (void *)resp); 589 resp->notified = true; 590 } 591 556 592 PCUT_EXPORT(tbarcfg); -
uspace/lib/ui/include/ui/menu.h
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 59 59 extern ui_evclaim_t ui_menu_pos_event(ui_menu_t *, gfx_coord2_t *, 60 60 pos_event_t *); 61 extern sysarg_t ui_menu_get_idev_id(ui_menu_t *); 61 62 62 63 #endif -
uspace/lib/ui/include/ui/popup.h
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 1Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 54 54 extern ui_resource_t *ui_popup_get_res(ui_popup_t *); 55 55 extern gfx_context_t *ui_popup_get_gc(ui_popup_t *); 56 extern sysarg_t ui_popup_get_idev_id(ui_popup_t *); 56 57 57 58 #endif -
uspace/lib/ui/include/ui/wdecor.h
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 44 44 #include <types/ui/event.h> 45 45 #include <types/ui/resource.h> 46 #include <types/ui/ui.h> 46 47 #include <types/ui/wdecor.h> 47 48 … … 58 59 extern ui_evclaim_t ui_wdecor_kbd_event(ui_wdecor_t *, kbd_event_t *); 59 60 extern ui_evclaim_t ui_wdecor_pos_event(ui_wdecor_t *, pos_event_t *); 60 extern void ui_wdecor_rect_from_app(ui_ wdecor_style_t, gfx_rect_t *,61 extern void ui_wdecor_rect_from_app(ui_t *, ui_wdecor_style_t, gfx_rect_t *, 61 62 gfx_rect_t *); 62 63 extern void ui_wdecor_app_from_rect(ui_wdecor_style_t, gfx_rect_t *, -
uspace/lib/ui/private/menu.h
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 70 70 /** Callback argument */ 71 71 void *arg; 72 /** ID of device that activated entry */ 73 sysarg_t idev_id; 72 74 }; 73 75 -
uspace/lib/ui/private/popup.h
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 1Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 58 58 /** Placement rectangle */ 59 59 gfx_rect_t place; 60 /** ID of device that sent input event */ 61 sysarg_t idev_id; 60 62 }; 61 63 -
uspace/lib/ui/src/menu.c
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 578 578 ui_menu_t *menu = (ui_menu_t *)arg; 579 579 580 menu->idev_id = ui_popup_get_idev_id(menu->popup); 580 581 ui_menu_kbd_event(menu, event); 581 582 } … … 592 593 gfx_coord2_t spos; 593 594 595 menu->idev_id = ui_popup_get_idev_id(menu->popup); 596 594 597 spos.x = 0; 595 598 spos.y = 0; … … 641 644 } 642 645 646 /** Get ID of last device that input event. 647 * 648 * @param menu Menu 649 * @return Input device ID 650 */ 651 sysarg_t ui_menu_get_idev_id(ui_menu_t *menu) 652 { 653 return menu->idev_id; 654 } 655 643 656 /** @} 644 657 */ -
uspace/lib/ui/src/menuentry.c
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 145 145 return; 146 146 147 mentry->menu->total_h -= ui_menu_entry_height(mentry); 148 /* NOTE: max_caption_w/max_shortcut_w not updated (speed) */ 149 147 150 list_remove(&mentry->lentries); 151 152 /* 153 * If we emptied the menu, reset accumulated dims so they 154 * can be correctly calculated when (if) the menu is 155 * re-populated. 156 */ 157 if (list_empty(&mentry->menu->entries)) { 158 mentry->menu->total_h = 0; 159 mentry->menu->max_caption_w = 0; 160 mentry->menu->max_shortcut_w = 0; 161 } 162 148 163 free(mentry->caption); 149 164 free(mentry); -
uspace/lib/ui/src/popup.c
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 190 190 } 191 191 192 /** Get ID of device that sent the last position event. 193 * 194 * @param popup Popup window 195 * @return Input device ID 196 */ 197 sysarg_t ui_popup_get_idev_id(ui_popup_t *popup) 198 { 199 return popup->idev_id; 200 } 201 192 202 /** Handle close event in popup window. 193 203 * … … 214 224 ui_popup_t *popup = (ui_popup_t *)arg; 215 225 226 /* Remember ID of device that sent the last event */ 227 popup->idev_id = event->kbd_id; 228 216 229 if (popup->cb != NULL && popup->cb->kbd != NULL) 217 230 popup->cb->kbd(popup, popup->arg, event); … … 229 242 ui_popup_t *popup = (ui_popup_t *)arg; 230 243 244 /* Remember ID of device that sent the last event */ 245 popup->idev_id = event->pos_id; 246 231 247 if (popup->cb != NULL && popup->cb->pos != NULL) 232 248 popup->cb->pos(popup, popup->arg, event); -
uspace/lib/ui/src/wdecor.c
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 45 45 #include <ui/paint.h> 46 46 #include <ui/pbutton.h> 47 #include <ui/ui.h> 47 48 #include <ui/wdecor.h> 48 49 #include "../private/resource.h" … … 94 95 /** Window resizing edge height */ 95 96 wdecor_edge_h = 4, 97 /** Window resizing edge witdth */ 98 wdecor_edge_w_text = 1, 99 /** Window resizing edge height */ 100 wdecor_edge_h_text = 1, 96 101 /** Title bar height */ 97 102 wdecor_tbar_h = 22, … … 860 865 * and its decoration. 861 866 * 867 * @param ui UI 862 868 * @param style Decoration style 863 869 * @param app Application area rectangle 864 870 * @param rect Place to store (outer) window decoration rectangle 865 871 */ 866 void ui_wdecor_rect_from_app(ui_wdecor_style_t style, gfx_rect_t *app, 867 gfx_rect_t *rect) 868 { 872 void ui_wdecor_rect_from_app(ui_t *ui, ui_wdecor_style_t style, 873 gfx_rect_t *app, gfx_rect_t *rect) 874 { 875 bool textmode; 876 gfx_coord_t edge_w, edge_h; 869 877 *rect = *app; 870 878 879 textmode = ui_is_textmode(ui); 880 if (textmode) { 881 edge_w = wdecor_edge_w_text; 882 edge_h = wdecor_edge_h_text; 883 } else { 884 edge_w = wdecor_edge_w; 885 edge_h = wdecor_edge_h; 886 } 887 871 888 if ((style & ui_wds_frame) != 0) { 872 rect->p0.x -= wdecor_edge_w;873 rect->p0.y -= wdecor_edge_h;874 rect->p1.x += wdecor_edge_w;875 rect->p1.y += wdecor_edge_h;876 } 877 878 if ((style & ui_wds_titlebar) != 0 )879 rect->p0.y -= 22;889 rect->p0.x -= edge_w; 890 rect->p0.y -= edge_h; 891 rect->p1.x += edge_w; 892 rect->p1.y += edge_h; 893 } 894 895 if ((style & ui_wds_titlebar) != 0 && !textmode) 896 rect->p0.y -= wdecor_tbar_h; 880 897 } 881 898 -
uspace/lib/ui/test/wdecor.c
re4cc266 r34aad53d 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 34 34 #include <ui/pbutton.h> 35 35 #include <ui/resource.h> 36 #include <ui/ui.h> 36 37 #include <ui/wdecor.h> 37 38 #include "../private/wdecor.h" … … 1322 1323 PCUT_TEST(rect_from_app) 1323 1324 { 1325 errno_t rc; 1326 ui_t *ui = NULL; 1324 1327 gfx_rect_t arect; 1325 1328 gfx_rect_t rect; 1329 1330 rc = ui_create_disp(NULL, &ui); 1331 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 1326 1332 1327 1333 arect.p0.x = 14; … … 1330 1336 arect.p1.y = 196; 1331 1337 1332 ui_wdecor_rect_from_app(ui _wds_none, &arect, &rect);1338 ui_wdecor_rect_from_app(ui, ui_wds_none, &arect, &rect); 1333 1339 1334 1340 PCUT_ASSERT_INT_EQUALS(14, rect.p0.x); … … 1337 1343 PCUT_ASSERT_INT_EQUALS(196, rect.p1.y); 1338 1344 1339 ui_wdecor_rect_from_app(ui _wds_frame, &arect, &rect);1345 ui_wdecor_rect_from_app(ui, ui_wds_frame, &arect, &rect); 1340 1346 1341 1347 PCUT_ASSERT_INT_EQUALS(10, rect.p0.x); … … 1344 1350 PCUT_ASSERT_INT_EQUALS(200, rect.p1.y); 1345 1351 1346 ui_wdecor_rect_from_app(ui _wds_decorated, &arect, &rect);1352 ui_wdecor_rect_from_app(ui, ui_wds_decorated, &arect, &rect); 1347 1353 1348 1354 PCUT_ASSERT_INT_EQUALS(10, rect.p0.x); … … 1351 1357 PCUT_ASSERT_INT_EQUALS(200, rect.p1.y); 1352 1358 1359 ui_destroy(ui); 1353 1360 } 1354 1361 -
uspace/lib/usbhid/src/hidparser.c
re4cc266 r34aad53d 225 225 /* Than we take the higher bits from the LSB */ 226 226 const unsigned bit_offset = item->offset % 8; 227 const int lsb_bits = min( bits, 8);227 const int lsb_bits = min((unsigned)bits, 8 - bit_offset); 228 228 229 229 value |= (*data >> bit_offset) & BIT_RRANGE(uint8_t, lsb_bits);
Note:
See TracChangeset
for help on using the changeset viewer.