Changeset 46a47c0 in mainline for uspace/lib/ui/src


Ignore:
Timestamp:
2023-01-16T20:34:01Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b0ae23f
Parents:
b3eeae5
Message:

Make sure window is only show as inactive when it loses last focus

This currently affects the title bar and also the cursor in Terminal.

Location:
uspace/lib/ui/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/src/control.c

    rb3eeae5 r46a47c0  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    130130 *
    131131 * @param control Control
     132 * @param nfocus Number of remaining foci
    132133 */
    133 void ui_control_unfocus(ui_control_t *control)
     134void ui_control_unfocus(ui_control_t *control, unsigned nfocus)
    134135{
    135136        if (control->ops->unfocus != NULL)
    136                 control->ops->unfocus(control->ext);
     137                control->ops->unfocus(control->ext, nfocus);
    137138}
    138139
  • uspace/lib/ui/src/fixed.c

    rb3eeae5 r46a47c0  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4848static ui_evclaim_t ui_fixed_ctl_kbd_event(void *, kbd_event_t *);
    4949static ui_evclaim_t ui_fixed_ctl_pos_event(void *, pos_event_t *);
    50 static void ui_fixed_ctl_unfocus(void *);
     50static void ui_fixed_ctl_unfocus(void *, unsigned);
    5151
    5252/** Push button control ops */
     
    262262 *
    263263 * @param fixed Fixed layout
    264  */
    265 void ui_fixed_unfocus(ui_fixed_t *fixed)
    266 {
    267         ui_fixed_elem_t *elem;
    268 
    269         elem = ui_fixed_first(fixed);
    270         while (elem != NULL) {
    271                 ui_control_unfocus(elem->control);
     264 * @param nfocus Number of remaining foci
     265 */
     266void ui_fixed_unfocus(ui_fixed_t *fixed, unsigned nfocus)
     267{
     268        ui_fixed_elem_t *elem;
     269
     270        elem = ui_fixed_first(fixed);
     271        while (elem != NULL) {
     272                ui_control_unfocus(elem->control, nfocus);
    272273
    273274                elem = ui_fixed_next(elem);
     
    327328 *
    328329 * @param arg Argument (ui_fixed_t *)
    329  */
    330 void ui_fixed_ctl_unfocus(void *arg)
    331 {
    332         ui_fixed_t *fixed = (ui_fixed_t *) arg;
    333 
    334         ui_fixed_unfocus(fixed);
     330 * @param nfocus Number of remaining foci
     331 */
     332void ui_fixed_ctl_unfocus(void *arg, unsigned nfocus)
     333{
     334        ui_fixed_t *fixed = (ui_fixed_t *) arg;
     335
     336        ui_fixed_unfocus(fixed, nfocus);
    335337}
    336338
  • uspace/lib/ui/src/window.c

    rb3eeae5 r46a47c0  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5959
    6060static void dwnd_close_event(void *);
    61 static void dwnd_focus_event(void *);
     61static void dwnd_focus_event(void *, unsigned);
    6262static void dwnd_kbd_event(void *, kbd_event_t *);
    6363static void dwnd_pos_event(void *, pos_event_t *);
    6464static void dwnd_resize_event(void *, gfx_rect_t *);
    65 static void dwnd_unfocus_event(void *);
     65static void dwnd_unfocus_event(void *, unsigned);
    6666
    6767static display_wnd_cb_t dwnd_cb = {
     
    833833
    834834/** Handle window focus event. */
    835 static void dwnd_focus_event(void *arg)
     835static void dwnd_focus_event(void *arg, unsigned nfocus)
    836836{
    837837        ui_window_t *window = (ui_window_t *) arg;
     
    839839
    840840        ui_lock(ui);
     841        (void)nfocus;
    841842
    842843        if (window->wdecor != NULL) {
     
    845846        }
    846847
    847         ui_window_send_focus(window);
     848        ui_window_send_focus(window, nfocus);
    848849        ui_unlock(ui);
    849850}
     
    903904
    904905/** Handle window unfocus event. */
    905 static void dwnd_unfocus_event(void *arg)
     906static void dwnd_unfocus_event(void *arg, unsigned nfocus)
    906907{
    907908        ui_window_t *window = (ui_window_t *) arg;
     
    910911        ui_lock(ui);
    911912
    912         if (window->wdecor != NULL) {
     913        if (window->wdecor != NULL && nfocus == 0) {
    913914                ui_wdecor_set_active(window->wdecor, false);
    914915                ui_wdecor_paint(window->wdecor);
    915916        }
    916917
    917         ui_window_send_unfocus(window);
     918        ui_window_send_unfocus(window, nfocus);
    918919        ui_unlock(ui);
    919920}
     
    11041105 *
    11051106 * @param window Window
    1106  */
    1107 void ui_window_send_focus(ui_window_t *window)
     1107 * @param nfocus New number of foci
     1108 */
     1109void ui_window_send_focus(ui_window_t *window, unsigned nfocus)
    11081110{
    11091111        if (window->cb != NULL && window->cb->focus != NULL)
    1110                 window->cb->focus(window, window->arg);
     1112                window->cb->focus(window, window->arg, nfocus);
    11111113}
    11121114
     
    11501152 *
    11511153 * @param window Window
    1152  */
    1153 void ui_window_send_unfocus(ui_window_t *window)
     1154 * @param nfocus Number of remaining foci
     1155 */
     1156void ui_window_send_unfocus(ui_window_t *window, unsigned nfocus)
    11541157{
    11551158        if (window->cb != NULL && window->cb->unfocus != NULL)
    1156                 window->cb->unfocus(window, window->arg);
     1159                window->cb->unfocus(window, window->arg, nfocus);
    11571160        else
    1158                 return ui_window_def_unfocus(window);
     1161                return ui_window_def_unfocus(window, nfocus);
    11591162}
    11601163
     
    12921295 *
    12931296 * @param window Window
     1297 * @param nfocus Number of remaining foci
    12941298 * @return EOK on success or an error code
    12951299 */
    1296 void ui_window_def_unfocus(ui_window_t *window)
     1300void ui_window_def_unfocus(ui_window_t *window, unsigned nfocus)
    12971301{
    12981302        if (window->control != NULL)
    1299                 ui_control_unfocus(window->control);
     1303                ui_control_unfocus(window->control, nfocus);
    13001304}
    13011305
Note: See TracChangeset for help on using the changeset viewer.