Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 5d380b6 in mainline


Ignore:
Timestamp:
2023-01-20T11:50:41Z (2 weeks ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
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
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/display/include/types/display/wndparams.h

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    7474        /** Flags */
    7575        display_wnd_flags_t flags;
     76        /** Input device ID associated with window's seat (or zero) */
     77        sysarg_t idev_id;
    7678} display_wnd_params_t;
    7779
  • uspace/lib/display/private/params.h

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3737
    3838#include <gfx/coord.h>
     39#include <types/common.h>
    3940
    4041/** Window resize arguments. */
     
    6162        /** Flags */
    6263        display_wnd_flags_t flags;
     64        /** Input device ID associated with window's seat (or zero) */
     65        sysarg_t idev_id;
    6366} display_wnd_params_enc_t;
    6467
  • uspace/lib/display/src/disp_srv.c

    r6828a56 r5d380b6  
    128128        params.pos = eparams.pos;
    129129        params.flags = eparams.flags;
     130        params.idev_id = eparams.idev_id;
    130131
    131132        rc = srv->ops->window_create(srv->arg, &params, &wnd_id);
  • uspace/lib/display/src/display.c

    r6828a56 r5d380b6  
    176176        eparams.pos = params->pos;
    177177        eparams.flags = params->flags;
     178        eparams.idev_id = params->idev_id;
    178179
    179180        window = calloc(1, sizeof(display_window_t));
  • uspace/lib/display/test/display.c

    r6828a56 r5d380b6  
    118118        gfx_rect_t create_rect;
    119119        gfx_coord2_t create_min_size;
     120        sysarg_t create_idev_id;
    120121        bool window_destroy_called;
    121122        sysarg_t destroy_wnd_id;
     
    237238        params.min_size.x = 11;
    238239        params.min_size.y = 12;
     240        params.idev_id = 42;
    239241
    240242        rc = display_window_create(disp, &params, &test_display_wnd_cb,
     
    247249        PCUT_ASSERT_EQUALS(params.min_size.x, resp.create_min_size.x);
    248250        PCUT_ASSERT_EQUALS(params.min_size.y, resp.create_min_size.y);
     251        PCUT_ASSERT_EQUALS(params.idev_id, resp.create_idev_id);
    249252        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
    250253        PCUT_ASSERT_NULL(wnd);
     
    289292        params.rect.p0.x = 100;
    290293        params.rect.p0.y = 100;
     294        params.idev_id = 42;
    291295
    292296        rc = display_window_create(disp, &params, &test_display_wnd_cb,
     
    297301        PCUT_ASSERT_EQUALS(params.rect.p1.x, resp.create_rect.p1.x);
    298302        PCUT_ASSERT_EQUALS(params.rect.p1.y, resp.create_rect.p1.y);
     303        PCUT_ASSERT_EQUALS(params.idev_id, resp.create_idev_id);
    299304        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    300305        PCUT_ASSERT_NOT_NULL(wnd);
     
    21382143        resp->create_rect = params->rect;
    21392144        resp->create_min_size = params->min_size;
     2145        resp->create_idev_id = params->idev_id;
    21402146        if (resp->rc == EOK)
    21412147                *rwnd_id = resp->wnd_id;
  • uspace/lib/ui/include/types/ui/popup.h

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4040#include <io/kbd_event.h>
    4141#include <io/pos_event.h>
     42#include <types/common.h>
    4243
    4344struct ui_popup;
     
    5051        /** Placement rectangle close to which popup should be placed */
    5152        gfx_rect_t place;
     53        /** Input device ID associated with the popup's seat */
     54        sysarg_t idev_id;
    5255} ui_popup_params_t;
    5356
  • uspace/lib/ui/include/types/ui/window.h

    r6828a56 r5d380b6  
    8989        /** Parent rectangle for popup windows */
    9090        gfx_rect_t prect;
     91        /** Input device associated with the window's seat */
     92        sysarg_t idev_id;
    9193} ui_wnd_params_t;
    9294
  • uspace/lib/ui/include/ui/menu.h

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4242#include <io/pos_event.h>
    4343#include <stdbool.h>
     44#include <types/common.h>
    4445#include <types/ui/menu.h>
    4546#include <types/ui/menubar.h>
     
    5657extern void ui_menu_get_rect(ui_menu_t *, gfx_coord2_t *, gfx_rect_t *);
    5758extern char32_t ui_menu_get_accel(ui_menu_t *);
    58 extern errno_t ui_menu_open(ui_menu_t *, gfx_rect_t *);
     59extern errno_t ui_menu_open(ui_menu_t *, gfx_rect_t *, sysarg_t);
    5960extern void ui_menu_close(ui_menu_t *);
    6061extern bool ui_menu_is_open(ui_menu_t *);
  • uspace/lib/ui/include/ui/menubar.h

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4040#include <gfx/coord.h>
    4141#include <io/pos_event.h>
     42#include <types/common.h>
    4243#include <types/ui/menubar.h>
    4344#include <types/ui/control.h>
     
    5657extern ui_evclaim_t ui_menu_bar_kbd_event(ui_menu_bar_t *, kbd_event_t *);
    5758extern ui_evclaim_t ui_menu_bar_pos_event(ui_menu_bar_t *, pos_event_t *);
    58 extern void ui_menu_bar_press_accel(ui_menu_bar_t *, char32_t);
     59extern void ui_menu_bar_press_accel(ui_menu_bar_t *, char32_t, sysarg_t);
    5960extern void ui_menu_bar_unfocus(ui_menu_bar_t *);
    6061extern void ui_menu_bar_activate(ui_menu_bar_t *);
  • uspace/lib/ui/private/menubar.h

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4141#include <gfx/coord.h>
    4242#include <stdbool.h>
     43#include <types/common.h>
    4344#include <types/ui/menu.h>
    4445#include <types/ui/menubar.h>
     
    6566};
    6667
    67 extern void ui_menu_bar_select(ui_menu_bar_t *, ui_menu_t *, bool);
    68 extern void ui_menu_bar_left(ui_menu_bar_t *);
    69 extern void ui_menu_bar_right(ui_menu_bar_t *);
     68extern void ui_menu_bar_select(ui_menu_bar_t *, ui_menu_t *, bool, sysarg_t);
     69extern void ui_menu_bar_left(ui_menu_bar_t *, sysarg_t);
     70extern void ui_menu_bar_right(ui_menu_bar_t *, sysarg_t);
    7071extern ui_evclaim_t ui_menu_bar_key_press_unmod(ui_menu_bar_t *, kbd_event_t *);
    7172extern void ui_menu_bar_entry_rect(ui_menu_bar_t *, ui_menu_t *, gfx_rect_t *);
  • uspace/lib/ui/src/menu.c

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    280280 * @param menu Menu
    281281 * @param prect Parent rectangle around which the menu should be placed
    282  */
    283 errno_t ui_menu_open(ui_menu_t *menu, gfx_rect_t *prect)
     282 * @param idev_id Input device associated with the menu's seat
     283 */
     284errno_t ui_menu_open(ui_menu_t *menu, gfx_rect_t *prect, sysarg_t idev_id)
    284285{
    285286        ui_popup_t *popup = NULL;
     
    301302        params.rect = geom.outer_rect;
    302303        params.place = *prect;
     304        params.idev_id = idev_id;
    303305
    304306        rc = ui_popup_create(menu->mbar->ui, menu->mbar->window, &params,
     
    522524        if (event->type == KEY_PRESS && (event->mods & KM_ALT) != 0 &&
    523525            (event->mods & (KM_CTRL | KM_SHIFT)) == 0 && event->c != '\0')
    524                 ui_menu_bar_press_accel(menu->mbar, event->c);
     526                ui_menu_bar_press_accel(menu->mbar, event->c, event->kbd_id);
    525527
    526528        return ui_claimed;
     
    616618                break;
    617619        case KC_LEFT:
    618                 ui_menu_bar_left(menu->mbar);
     620                ui_menu_bar_left(menu->mbar, event->kbd_id);
    619621                break;
    620622        case KC_RIGHT:
    621                 ui_menu_bar_right(menu->mbar);
     623                ui_menu_bar_right(menu->mbar, event->kbd_id);
    622624                break;
    623625        case KC_UP:
  • uspace/lib/ui/src/menubar.c

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    243243 * @param menu Menu to select (or deselect if selected) or @c NULL
    244244 * @param openup Open menu even if not currently open
    245  */
    246 void ui_menu_bar_select(ui_menu_bar_t *mbar, ui_menu_t *menu, bool openup)
     245 * @param idev_id Input device ID associated with the selecting seat
     246 */
     247void ui_menu_bar_select(ui_menu_bar_t *mbar, ui_menu_t *menu, bool openup,
     248    sysarg_t idev_id)
    247249{
    248250        ui_menu_t *old_menu;
     
    272274                         * specified.
    273275                         */
    274                         (void) ui_menu_open(mbar->selected, &rect);
     276                        (void) ui_menu_open(mbar->selected, &rect, idev_id);
    275277                }
    276278        }
     
    283285 *
    284286 * @param mbar Menu bar
    285  */
    286 void ui_menu_bar_left(ui_menu_bar_t *mbar)
     287 * @param idev_id Input device ID
     288 */
     289void ui_menu_bar_left(ui_menu_bar_t *mbar, sysarg_t idev_id)
    287290{
    288291        ui_menu_t *nmenu;
     
    296299
    297300        if (nmenu != mbar->selected)
    298                 ui_menu_bar_select(mbar, nmenu, false);
     301                ui_menu_bar_select(mbar, nmenu, false, idev_id);
    299302}
    300303
     
    305308 *
    306309 * @param mbar Menu bar
    307  */
    308 void ui_menu_bar_right(ui_menu_bar_t *mbar)
     310 * @param idev_id Input device ID
     311 */
     312void ui_menu_bar_right(ui_menu_bar_t *mbar, sysarg_t idev_id)
    309313{
    310314        ui_menu_t *nmenu;
     
    318322
    319323        if (nmenu != mbar->selected)
    320                 ui_menu_bar_select(mbar, nmenu, false);
     324                ui_menu_bar_select(mbar, nmenu, false, idev_id);
    321325}
    322326
     
    345349
    346350        if (event->key == KC_LEFT)
    347                 ui_menu_bar_left(mbar);
     351                ui_menu_bar_left(mbar, event->kbd_id);
    348352
    349353        if (event->key == KC_RIGHT)
    350                 ui_menu_bar_right(mbar);
     354                ui_menu_bar_right(mbar, event->kbd_id);
    351355
    352356        if (event->key == KC_ENTER || event->key == KC_DOWN) {
     
    354358                        ui_menu_bar_entry_rect(mbar, mbar->selected,
    355359                            &rect);
    356                         ui_menu_open(mbar->selected, &rect);
     360                        ui_menu_open(mbar->selected, &rect, event->kbd_id);
    357361                }
    358362
     
    362366        if (event->c != '\0' && !ui_menu_is_open(mbar->selected)) {
    363367                /* Check if it is an accelerator. */
    364                 ui_menu_bar_press_accel(mbar, event->c);
     368                ui_menu_bar_press_accel(mbar, event->c, event->kbd_id);
    365369        }
    366370
     
    379383            (event->mods & (KM_CTRL | KM_SHIFT)) == 0 && event->c != '\0') {
    380384                /* Check if it is an accelerator. */
    381                 ui_menu_bar_press_accel(mbar, event->c);
     385                ui_menu_bar_press_accel(mbar, event->c, event->kbd_id);
    382386        }
    383387
     
    399403 * @param mbar Menu bar
    400404 * @param c Character
    401  */
    402 void ui_menu_bar_press_accel(ui_menu_bar_t *mbar, char32_t c)
     405 * @param kbd_id Keyboard ID
     406 */
     407void ui_menu_bar_press_accel(ui_menu_bar_t *mbar, char32_t c, sysarg_t kbd_id)
    403408{
    404409        ui_menu_t *menu;
     
    409414                maccel = ui_menu_get_accel(menu);
    410415                if (c == maccel) {
    411                         ui_menu_bar_select(mbar, menu, true);
     416                        ui_menu_bar_select(mbar, menu, true, kbd_id);
    412417                        return;
    413418                }
     
    433438        gfx_coord_t hpad;
    434439        gfx_coord2_t ppos;
     440        sysarg_t pos_id;
    435441
    436442        res = ui_window_get_res(mbar->window);
     
    446452
    447453        pos = mbar->rect.p0;
     454        pos_id = event->pos_id;
    448455
    449456        menu = ui_menu_first(mbar);
     
    463470                        /* Open the menu, close if already open. */
    464471                        if (menu == mbar->selected)
    465                                 ui_menu_bar_select(mbar, NULL, false);
     472                                ui_menu_bar_select(mbar, NULL, false, pos_id);
    466473                        else
    467                                 ui_menu_bar_select(mbar, menu, true);
     474                                ui_menu_bar_select(mbar, menu, true, pos_id);
    468475
    469476                        return ui_claimed;
     
    544551void ui_menu_bar_deactivate(ui_menu_bar_t *mbar)
    545552{
    546         ui_menu_bar_select(mbar, NULL, false);
     553        ui_menu_bar_select(mbar, NULL, false, 0);
    547554        mbar->active = false;
    548555}
  • uspace/lib/ui/src/popup.c

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    9999        wparams.placement = ui_wnd_place_popup;
    100100        wparams.flags |= ui_wndf_popup;
     101        wparams.idev_id = params->idev_id;
    101102
    102103        /* Compute position of parent rectangle relative to the screen */
  • uspace/lib/ui/src/window.c

    r6828a56 r5d380b6  
    227227        /* Only allow making the window larger */
    228228        gfx_rect_dims(&params->rect, &dparams.min_size);
     229        dparams.idev_id = params->idev_id;
    229230
    230231        if ((params->flags & ui_wndf_popup) != 0)
  • uspace/lib/ui/test/menu.c

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    293293
    294294        /* Open and close */
    295         rc = ui_menu_open(menu, &prect);
     295        rc = ui_menu_open(menu, &prect, 0);
    296296        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    297297
     
    341341        PCUT_ASSERT_FALSE(open);
    342342
    343         rc = ui_menu_open(menu, &prect);
     343        rc = ui_menu_open(menu, &prect, 0);
    344344        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    345345
     
    393393
    394394        /* Menu needs to be open to be able to paint it */
    395         rc = ui_menu_open(menu, &prect);
     395        rc = ui_menu_open(menu, &prect, 0);
    396396        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    397397
     
    442442
    443443        /* Menu needs to be open to be able to paint it */
    444         rc = ui_menu_open(menu, &prect);
     444        rc = ui_menu_open(menu, &prect, 0);
    445445        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    446446
     
    491491
    492492        /* Menu needs to be open to be able to paint it */
    493         rc = ui_menu_open(menu, &prect);
     493        rc = ui_menu_open(menu, &prect, 0);
    494494        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    495495
     
    539539
    540540        /* Menu needs to be open to be able to move around it */
    541         rc = ui_menu_open(menu, &prect);
     541        rc = ui_menu_open(menu, &prect, 0);
    542542        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    543543
     
    599599
    600600        /* Menu needs to be open to be able to move around it */
    601         rc = ui_menu_open(menu, &prect);
     601        rc = ui_menu_open(menu, &prect, 0);
    602602        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    603603
     
    655655
    656656        /* Menu needs to be open to be able to move around it */
    657         rc = ui_menu_open(menu, &prect);
     657        rc = ui_menu_open(menu, &prect, 0);
    658658        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    659659
     
    715715
    716716        /* Menu needs to be open to be able to move around it */
    717         rc = ui_menu_open(menu, &prect);
     717        rc = ui_menu_open(menu, &prect, 0);
    718718        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    719719
  • uspace/lib/ui/test/menubar.c

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    235235        PCUT_ASSERT_FALSE(ui_menu_is_open(menu));
    236236
    237         ui_menu_bar_press_accel(mbar, 't');
     237        ui_menu_bar_press_accel(mbar, 't', 0);
    238238
    239239        PCUT_ASSERT_TRUE(ui_menu_is_open(menu));
     
    329329        PCUT_ASSERT_NOT_NULL(menu2);
    330330
    331         ui_menu_bar_select(mbar, menu1, true);
     331        ui_menu_bar_select(mbar, menu1, true, 0);
    332332        PCUT_ASSERT_EQUALS(menu1, mbar->selected);
    333333
    334334        /* Selecting different menu should select it */
    335         ui_menu_bar_select(mbar, menu2, true);
     335        ui_menu_bar_select(mbar, menu2, true, 0);
    336336        PCUT_ASSERT_EQUALS(menu2, mbar->selected);
    337337
  • uspace/lib/ui/test/menuentry.c

    r6828a56 r5d380b6  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    381381        prect.p1.y = 0;
    382382
    383         rc = ui_menu_open(menu, &prect);
     383        rc = ui_menu_open(menu, &prect, 0);
    384384        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    385385
     
    492492        prect.p1.y = 0;
    493493
    494         rc = ui_menu_open(menu, &prect);
     494        rc = ui_menu_open(menu, &prect, 0);
    495495        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    496496
     
    555555        prect.p1.y = 0;
    556556
    557         rc = ui_menu_open(menu, &prect);
     557        rc = ui_menu_open(menu, &prect, 0);
    558558        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    559559
     
    623623        prect.p1.y = 0;
    624624
    625         rc = ui_menu_open(menu, &prect);
     625        rc = ui_menu_open(menu, &prect, 0);
    626626        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    627627
     
    695695        prect.p1.y = 0;
    696696
    697         rc = ui_menu_open(menu, &prect);
     697        rc = ui_menu_open(menu, &prect, 0);
    698698        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    699699
     
    750750        prect.p1.y = 0;
    751751
    752         rc = ui_menu_open(menu, &prect);
     752        rc = ui_menu_open(menu, &prect, 0);
    753753        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    754754
     
    810810        prect.p1.y = 0;
    811811
    812         rc = ui_menu_open(menu, &prect);
     812        rc = ui_menu_open(menu, &prect, 0);
    813813        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    814814
     
    870870        prect.p1.y = 0;
    871871
    872         rc = ui_menu_open(menu, &prect);
     872        rc = ui_menu_open(menu, &prect, 0);
    873873        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    874874
     
    933933        prect.p1.y = 0;
    934934
    935         rc = ui_menu_open(menu, &prect);
     935        rc = ui_menu_open(menu, &prect, 0);
    936936        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    937937
  • 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.