Changeset 46a47c0 in mainline for uspace/lib/ui/src/window.c


Ignore:
Timestamp:
2023-01-16T20:34:01Z (15 months 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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.