Changeset 5d380b6 in mainline for uspace/srv


Ignore:
Timestamp:
2023-01-20T11:50:41Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b1f0a14
Parents:
6828a56
git-author:
Jiri Svoboda <jiri@…> (2023-01-20 19:50:21)
git-committer:
Jiri Svoboda <jiri@…> (2023-01-20 11:50:41)
Message:

Create menu windows in the correct seat

Add a mechanism to set the seat of a new display window, UI window,
UI popup - input device ID. This is set to the ID of the device which
activated the menu (mouse, keyboard). The display server determines
the correct seat from there.

This makes sure clicking outside closes the correct pop-up window.

Location:
uspace/srv/hid/display
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/display/display.c

    r6828a56 r5d380b6  
    597597}
    598598
     599/** Get default seat in display.
     600 *
     601 * @param disp Display
     602 * @return First seat or @c NULL if there is none
     603 */
     604ds_seat_t *ds_display_default_seat(ds_display_t *disp)
     605{
     606        /* XXX Probably not the best solution */
     607        return ds_display_first_seat(disp);
     608}
     609
    599610/** Find seat by ID.
    600611 *
     
    640651
    641652        /* If none was found, return the default seat */
    642         return ds_display_first_seat(disp);
     653        return ds_display_default_seat(disp);
    643654}
    644655
  • uspace/srv/hid/display/display.h

    r6828a56 r5d380b6  
    8585extern ds_seat_t *ds_display_first_seat(ds_display_t *);
    8686extern ds_seat_t *ds_display_next_seat(ds_seat_t *);
     87extern ds_seat_t *ds_display_default_seat(ds_display_t *);
    8788extern ds_seat_t *ds_display_find_seat(ds_display_t *, ds_seat_id_t);
    8889extern ds_seat_t *ds_display_seat_by_idev(ds_display_t *, ds_idev_id_t);
  • uspace/srv/hid/display/window.c

    r6828a56 r5d380b6  
    8888        }
    8989
     90        /* Caption */
    9091        wnd->caption = str_dup(params->caption);
    9192        if (wnd->caption == NULL) {
     
    99100        gfx_bitmap_params_init(&bparams);
    100101        bparams.rect = params->rect;
     102
     103        /* Allocate window bitmap */
    101104
    102105        dgc = ds_display_get_gc(wnd->display);
     
    142145        }
    143146
    144         // TODO Multi-seat: which seat should own the new window?
    145         seat = ds_display_first_seat(client->display);
    146 
     147        /* Determine which seat should own the window */
     148        if (params->idev_id != 0)
     149                seat = ds_display_seat_by_idev(wnd->display, params->idev_id);
     150        else
     151                seat = ds_display_default_seat(wnd->display);
     152
     153        /* Is this a popup window? */
    147154        if ((params->flags & wndf_popup) != 0)
    148155                ds_seat_set_popup(seat, wnd);
     
    150157                ds_seat_set_focus(seat, wnd);
    151158
     159        /* Is this window a panel? */
    152160        if ((params->flags & wndf_avoid) != 0)
    153161                ds_display_update_max_rect(wnd->display);
Note: See TracChangeset for help on using the changeset viewer.