Changeset View
Changeset View
Standalone View
Standalone View
autotests/integration/stacking_order_test.cpp
Show All 16 Lines | |||||
17 | You should have received a copy of the GNU General Public License | 17 | You should have received a copy of the GNU General Public License | ||
18 | along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
19 | *********************************************************************/ | 19 | *********************************************************************/ | ||
20 | 20 | | |||
21 | #include "kwin_wayland_test.h" | 21 | #include "kwin_wayland_test.h" | ||
22 | 22 | | |||
23 | #include "abstract_client.h" | 23 | #include "abstract_client.h" | ||
24 | #include "atoms.h" | 24 | #include "atoms.h" | ||
25 | #include "client.h" | 25 | #include "x11client.h" | ||
26 | #include "deleted.h" | 26 | #include "deleted.h" | ||
27 | #include "main.h" | 27 | #include "main.h" | ||
28 | #include "platform.h" | 28 | #include "platform.h" | ||
29 | #include "xdgshellclient.h" | 29 | #include "xdgshellclient.h" | ||
30 | #include "wayland_server.h" | 30 | #include "wayland_server.h" | ||
31 | #include "workspace.h" | 31 | #include "workspace.h" | ||
32 | 32 | | |||
33 | #include <KWayland/Client/compositor.h> | 33 | #include <KWayland/Client/compositor.h> | ||
▲ Show 20 Lines • Show All 331 Lines • ▼ Show 20 Line(s) | 355 | { | |||
365 | QVERIFY(windowCreatedSpy.isValid()); | 365 | QVERIFY(windowCreatedSpy.isValid()); | ||
366 | 366 | | |||
367 | // Create the group leader. | 367 | // Create the group leader. | ||
368 | xcb_window_t leaderWid = createGroupWindow(conn.data(), geometry); | 368 | xcb_window_t leaderWid = createGroupWindow(conn.data(), geometry); | ||
369 | xcb_map_window(conn.data(), leaderWid); | 369 | xcb_map_window(conn.data(), leaderWid); | ||
370 | xcb_flush(conn.data()); | 370 | xcb_flush(conn.data()); | ||
371 | 371 | | |||
372 | QVERIFY(windowCreatedSpy.wait()); | 372 | QVERIFY(windowCreatedSpy.wait()); | ||
373 | Client *leader = windowCreatedSpy.first().first().value<Client *>(); | 373 | X11Client *leader = windowCreatedSpy.first().first().value<X11Client *>(); | ||
374 | QVERIFY(leader); | 374 | QVERIFY(leader); | ||
375 | QVERIFY(leader->isActive()); | 375 | QVERIFY(leader->isActive()); | ||
376 | QCOMPARE(leader->windowId(), leaderWid); | 376 | QCOMPARE(leader->windowId(), leaderWid); | ||
377 | QVERIFY(!leader->isTransient()); | 377 | QVERIFY(!leader->isTransient()); | ||
378 | 378 | | |||
379 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader})); | 379 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader})); | ||
380 | 380 | | |||
381 | // Create another group member. | 381 | // Create another group member. | ||
382 | windowCreatedSpy.clear(); | 382 | windowCreatedSpy.clear(); | ||
383 | xcb_window_t member1Wid = createGroupWindow(conn.data(), geometry, leaderWid); | 383 | xcb_window_t member1Wid = createGroupWindow(conn.data(), geometry, leaderWid); | ||
384 | xcb_map_window(conn.data(), member1Wid); | 384 | xcb_map_window(conn.data(), member1Wid); | ||
385 | xcb_flush(conn.data()); | 385 | xcb_flush(conn.data()); | ||
386 | 386 | | |||
387 | QVERIFY(windowCreatedSpy.wait()); | 387 | QVERIFY(windowCreatedSpy.wait()); | ||
388 | Client *member1 = windowCreatedSpy.first().first().value<Client *>(); | 388 | X11Client *member1 = windowCreatedSpy.first().first().value<X11Client *>(); | ||
389 | QVERIFY(member1); | 389 | QVERIFY(member1); | ||
390 | QVERIFY(member1->isActive()); | 390 | QVERIFY(member1->isActive()); | ||
391 | QCOMPARE(member1->windowId(), member1Wid); | 391 | QCOMPARE(member1->windowId(), member1Wid); | ||
392 | QCOMPARE(member1->group(), leader->group()); | 392 | QCOMPARE(member1->group(), leader->group()); | ||
393 | QVERIFY(!member1->isTransient()); | 393 | QVERIFY(!member1->isTransient()); | ||
394 | 394 | | |||
395 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1})); | 395 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1})); | ||
396 | 396 | | |||
397 | // Create yet another group member. | 397 | // Create yet another group member. | ||
398 | windowCreatedSpy.clear(); | 398 | windowCreatedSpy.clear(); | ||
399 | xcb_window_t member2Wid = createGroupWindow(conn.data(), geometry, leaderWid); | 399 | xcb_window_t member2Wid = createGroupWindow(conn.data(), geometry, leaderWid); | ||
400 | xcb_map_window(conn.data(), member2Wid); | 400 | xcb_map_window(conn.data(), member2Wid); | ||
401 | xcb_flush(conn.data()); | 401 | xcb_flush(conn.data()); | ||
402 | 402 | | |||
403 | QVERIFY(windowCreatedSpy.wait()); | 403 | QVERIFY(windowCreatedSpy.wait()); | ||
404 | Client *member2 = windowCreatedSpy.first().first().value<Client *>(); | 404 | X11Client *member2 = windowCreatedSpy.first().first().value<X11Client *>(); | ||
405 | QVERIFY(member2); | 405 | QVERIFY(member2); | ||
406 | QVERIFY(member2->isActive()); | 406 | QVERIFY(member2->isActive()); | ||
407 | QCOMPARE(member2->windowId(), member2Wid); | 407 | QCOMPARE(member2->windowId(), member2Wid); | ||
408 | QCOMPARE(member2->group(), leader->group()); | 408 | QCOMPARE(member2->group(), leader->group()); | ||
409 | QVERIFY(!member2->isTransient()); | 409 | QVERIFY(!member2->isTransient()); | ||
410 | 410 | | |||
411 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1, member2})); | 411 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1, member2})); | ||
412 | 412 | | |||
Show All 21 Lines | 427 | xcb_change_property( | |||
434 | 1, // data_len | 434 | 1, // data_len | ||
435 | &net_wm_window_type_normal // data | 435 | &net_wm_window_type_normal // data | ||
436 | ); | 436 | ); | ||
437 | 437 | | |||
438 | xcb_map_window(conn.data(), transientWid); | 438 | xcb_map_window(conn.data(), transientWid); | ||
439 | xcb_flush(conn.data()); | 439 | xcb_flush(conn.data()); | ||
440 | 440 | | |||
441 | QVERIFY(windowCreatedSpy.wait()); | 441 | QVERIFY(windowCreatedSpy.wait()); | ||
442 | Client *transient = windowCreatedSpy.first().first().value<Client *>(); | 442 | X11Client *transient = windowCreatedSpy.first().first().value<X11Client *>(); | ||
443 | QVERIFY(transient); | 443 | QVERIFY(transient); | ||
444 | QVERIFY(transient->isActive()); | 444 | QVERIFY(transient->isActive()); | ||
445 | QCOMPARE(transient->windowId(), transientWid); | 445 | QCOMPARE(transient->windowId(), transientWid); | ||
446 | QCOMPARE(transient->group(), leader->group()); | 446 | QCOMPARE(transient->group(), leader->group()); | ||
447 | QVERIFY(transient->isTransient()); | 447 | QVERIFY(transient->isTransient()); | ||
448 | QVERIFY(transient->groupTransient()); | 448 | QVERIFY(transient->groupTransient()); | ||
449 | QVERIFY(!transient->isDialog()); // See above why | 449 | QVERIFY(!transient->isDialog()); // See above why | ||
450 | 450 | | |||
Show All 28 Lines | 472 | { | |||
479 | QVERIFY(windowCreatedSpy.isValid()); | 479 | QVERIFY(windowCreatedSpy.isValid()); | ||
480 | 480 | | |||
481 | // Create the group leader. | 481 | // Create the group leader. | ||
482 | xcb_window_t leaderWid = createGroupWindow(conn.data(), geometry); | 482 | xcb_window_t leaderWid = createGroupWindow(conn.data(), geometry); | ||
483 | xcb_map_window(conn.data(), leaderWid); | 483 | xcb_map_window(conn.data(), leaderWid); | ||
484 | xcb_flush(conn.data()); | 484 | xcb_flush(conn.data()); | ||
485 | 485 | | |||
486 | QVERIFY(windowCreatedSpy.wait()); | 486 | QVERIFY(windowCreatedSpy.wait()); | ||
487 | Client *leader = windowCreatedSpy.first().first().value<Client *>(); | 487 | X11Client *leader = windowCreatedSpy.first().first().value<X11Client *>(); | ||
488 | QVERIFY(leader); | 488 | QVERIFY(leader); | ||
489 | QVERIFY(leader->isActive()); | 489 | QVERIFY(leader->isActive()); | ||
490 | QCOMPARE(leader->windowId(), leaderWid); | 490 | QCOMPARE(leader->windowId(), leaderWid); | ||
491 | QVERIFY(!leader->isTransient()); | 491 | QVERIFY(!leader->isTransient()); | ||
492 | 492 | | |||
493 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader})); | 493 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader})); | ||
494 | 494 | | |||
495 | // Create another group member. | 495 | // Create another group member. | ||
496 | windowCreatedSpy.clear(); | 496 | windowCreatedSpy.clear(); | ||
497 | xcb_window_t member1Wid = createGroupWindow(conn.data(), geometry, leaderWid); | 497 | xcb_window_t member1Wid = createGroupWindow(conn.data(), geometry, leaderWid); | ||
498 | xcb_map_window(conn.data(), member1Wid); | 498 | xcb_map_window(conn.data(), member1Wid); | ||
499 | xcb_flush(conn.data()); | 499 | xcb_flush(conn.data()); | ||
500 | 500 | | |||
501 | QVERIFY(windowCreatedSpy.wait()); | 501 | QVERIFY(windowCreatedSpy.wait()); | ||
502 | Client *member1 = windowCreatedSpy.first().first().value<Client *>(); | 502 | X11Client *member1 = windowCreatedSpy.first().first().value<X11Client *>(); | ||
503 | QVERIFY(member1); | 503 | QVERIFY(member1); | ||
504 | QVERIFY(member1->isActive()); | 504 | QVERIFY(member1->isActive()); | ||
505 | QCOMPARE(member1->windowId(), member1Wid); | 505 | QCOMPARE(member1->windowId(), member1Wid); | ||
506 | QCOMPARE(member1->group(), leader->group()); | 506 | QCOMPARE(member1->group(), leader->group()); | ||
507 | QVERIFY(!member1->isTransient()); | 507 | QVERIFY(!member1->isTransient()); | ||
508 | 508 | | |||
509 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1})); | 509 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1})); | ||
510 | 510 | | |||
511 | // Create yet another group member. | 511 | // Create yet another group member. | ||
512 | windowCreatedSpy.clear(); | 512 | windowCreatedSpy.clear(); | ||
513 | xcb_window_t member2Wid = createGroupWindow(conn.data(), geometry, leaderWid); | 513 | xcb_window_t member2Wid = createGroupWindow(conn.data(), geometry, leaderWid); | ||
514 | xcb_map_window(conn.data(), member2Wid); | 514 | xcb_map_window(conn.data(), member2Wid); | ||
515 | xcb_flush(conn.data()); | 515 | xcb_flush(conn.data()); | ||
516 | 516 | | |||
517 | QVERIFY(windowCreatedSpy.wait()); | 517 | QVERIFY(windowCreatedSpy.wait()); | ||
518 | Client *member2 = windowCreatedSpy.first().first().value<Client *>(); | 518 | X11Client *member2 = windowCreatedSpy.first().first().value<X11Client *>(); | ||
519 | QVERIFY(member2); | 519 | QVERIFY(member2); | ||
520 | QVERIFY(member2->isActive()); | 520 | QVERIFY(member2->isActive()); | ||
521 | QCOMPARE(member2->windowId(), member2Wid); | 521 | QCOMPARE(member2->windowId(), member2Wid); | ||
522 | QCOMPARE(member2->group(), leader->group()); | 522 | QCOMPARE(member2->group(), leader->group()); | ||
523 | QVERIFY(!member2->isTransient()); | 523 | QVERIFY(!member2->isTransient()); | ||
524 | 524 | | |||
525 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1, member2})); | 525 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1, member2})); | ||
526 | 526 | | |||
Show All 21 Lines | 541 | xcb_change_property( | |||
548 | 1, // data_len | 548 | 1, // data_len | ||
549 | &net_wm_window_type_normal // data | 549 | &net_wm_window_type_normal // data | ||
550 | ); | 550 | ); | ||
551 | 551 | | |||
552 | xcb_map_window(conn.data(), transientWid); | 552 | xcb_map_window(conn.data(), transientWid); | ||
553 | xcb_flush(conn.data()); | 553 | xcb_flush(conn.data()); | ||
554 | 554 | | |||
555 | QVERIFY(windowCreatedSpy.wait()); | 555 | QVERIFY(windowCreatedSpy.wait()); | ||
556 | Client *transient = windowCreatedSpy.first().first().value<Client *>(); | 556 | X11Client *transient = windowCreatedSpy.first().first().value<X11Client *>(); | ||
557 | QVERIFY(transient); | 557 | QVERIFY(transient); | ||
558 | QVERIFY(transient->isActive()); | 558 | QVERIFY(transient->isActive()); | ||
559 | QCOMPARE(transient->windowId(), transientWid); | 559 | QCOMPARE(transient->windowId(), transientWid); | ||
560 | QCOMPARE(transient->group(), leader->group()); | 560 | QCOMPARE(transient->group(), leader->group()); | ||
561 | QVERIFY(transient->isTransient()); | 561 | QVERIFY(transient->isTransient()); | ||
562 | QVERIFY(transient->groupTransient()); | 562 | QVERIFY(transient->groupTransient()); | ||
563 | QVERIFY(!transient->isDialog()); // See above why | 563 | QVERIFY(!transient->isDialog()); // See above why | ||
564 | 564 | | |||
▲ Show 20 Lines • Show All 48 Lines • ▼ Show 20 Line(s) | 603 | { | |||
613 | QVERIFY(windowCreatedSpy.isValid()); | 613 | QVERIFY(windowCreatedSpy.isValid()); | ||
614 | 614 | | |||
615 | // Create the group leader. | 615 | // Create the group leader. | ||
616 | xcb_window_t leaderWid = createGroupWindow(conn.data(), geometry); | 616 | xcb_window_t leaderWid = createGroupWindow(conn.data(), geometry); | ||
617 | xcb_map_window(conn.data(), leaderWid); | 617 | xcb_map_window(conn.data(), leaderWid); | ||
618 | xcb_flush(conn.data()); | 618 | xcb_flush(conn.data()); | ||
619 | 619 | | |||
620 | QVERIFY(windowCreatedSpy.wait()); | 620 | QVERIFY(windowCreatedSpy.wait()); | ||
621 | Client *leader = windowCreatedSpy.first().first().value<Client *>(); | 621 | X11Client *leader = windowCreatedSpy.first().first().value<X11Client *>(); | ||
622 | QVERIFY(leader); | 622 | QVERIFY(leader); | ||
623 | QVERIFY(leader->isActive()); | 623 | QVERIFY(leader->isActive()); | ||
624 | QCOMPARE(leader->windowId(), leaderWid); | 624 | QCOMPARE(leader->windowId(), leaderWid); | ||
625 | QVERIFY(!leader->isTransient()); | 625 | QVERIFY(!leader->isTransient()); | ||
626 | 626 | | |||
627 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader})); | 627 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader})); | ||
628 | 628 | | |||
629 | // Create another group member. | 629 | // Create another group member. | ||
630 | windowCreatedSpy.clear(); | 630 | windowCreatedSpy.clear(); | ||
631 | xcb_window_t member1Wid = createGroupWindow(conn.data(), geometry, leaderWid); | 631 | xcb_window_t member1Wid = createGroupWindow(conn.data(), geometry, leaderWid); | ||
632 | xcb_map_window(conn.data(), member1Wid); | 632 | xcb_map_window(conn.data(), member1Wid); | ||
633 | xcb_flush(conn.data()); | 633 | xcb_flush(conn.data()); | ||
634 | 634 | | |||
635 | QVERIFY(windowCreatedSpy.wait()); | 635 | QVERIFY(windowCreatedSpy.wait()); | ||
636 | Client *member1 = windowCreatedSpy.first().first().value<Client *>(); | 636 | X11Client *member1 = windowCreatedSpy.first().first().value<X11Client *>(); | ||
637 | QVERIFY(member1); | 637 | QVERIFY(member1); | ||
638 | QVERIFY(member1->isActive()); | 638 | QVERIFY(member1->isActive()); | ||
639 | QCOMPARE(member1->windowId(), member1Wid); | 639 | QCOMPARE(member1->windowId(), member1Wid); | ||
640 | QCOMPARE(member1->group(), leader->group()); | 640 | QCOMPARE(member1->group(), leader->group()); | ||
641 | QVERIFY(!member1->isTransient()); | 641 | QVERIFY(!member1->isTransient()); | ||
642 | 642 | | |||
643 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1})); | 643 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1})); | ||
644 | 644 | | |||
645 | // Create yet another group member. | 645 | // Create yet another group member. | ||
646 | windowCreatedSpy.clear(); | 646 | windowCreatedSpy.clear(); | ||
647 | xcb_window_t member2Wid = createGroupWindow(conn.data(), geometry, leaderWid); | 647 | xcb_window_t member2Wid = createGroupWindow(conn.data(), geometry, leaderWid); | ||
648 | xcb_map_window(conn.data(), member2Wid); | 648 | xcb_map_window(conn.data(), member2Wid); | ||
649 | xcb_flush(conn.data()); | 649 | xcb_flush(conn.data()); | ||
650 | 650 | | |||
651 | QVERIFY(windowCreatedSpy.wait()); | 651 | QVERIFY(windowCreatedSpy.wait()); | ||
652 | Client *member2 = windowCreatedSpy.first().first().value<Client *>(); | 652 | X11Client *member2 = windowCreatedSpy.first().first().value<X11Client *>(); | ||
653 | QVERIFY(member2); | 653 | QVERIFY(member2); | ||
654 | QVERIFY(member2->isActive()); | 654 | QVERIFY(member2->isActive()); | ||
655 | QCOMPARE(member2->windowId(), member2Wid); | 655 | QCOMPARE(member2->windowId(), member2Wid); | ||
656 | QCOMPARE(member2->group(), leader->group()); | 656 | QCOMPARE(member2->group(), leader->group()); | ||
657 | QVERIFY(!member2->isTransient()); | 657 | QVERIFY(!member2->isTransient()); | ||
658 | 658 | | |||
659 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1, member2})); | 659 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1, member2})); | ||
660 | 660 | | |||
Show All 21 Lines | 675 | xcb_change_property( | |||
682 | 1, // data_len | 682 | 1, // data_len | ||
683 | &net_wm_window_type_normal // data | 683 | &net_wm_window_type_normal // data | ||
684 | ); | 684 | ); | ||
685 | 685 | | |||
686 | xcb_map_window(conn.data(), transientWid); | 686 | xcb_map_window(conn.data(), transientWid); | ||
687 | xcb_flush(conn.data()); | 687 | xcb_flush(conn.data()); | ||
688 | 688 | | |||
689 | QVERIFY(windowCreatedSpy.wait()); | 689 | QVERIFY(windowCreatedSpy.wait()); | ||
690 | Client *transient = windowCreatedSpy.first().first().value<Client *>(); | 690 | X11Client *transient = windowCreatedSpy.first().first().value<X11Client *>(); | ||
691 | QVERIFY(transient); | 691 | QVERIFY(transient); | ||
692 | QVERIFY(transient->isActive()); | 692 | QVERIFY(transient->isActive()); | ||
693 | QCOMPARE(transient->windowId(), transientWid); | 693 | QCOMPARE(transient->windowId(), transientWid); | ||
694 | QCOMPARE(transient->group(), leader->group()); | 694 | QCOMPARE(transient->group(), leader->group()); | ||
695 | QVERIFY(transient->isTransient()); | 695 | QVERIFY(transient->isTransient()); | ||
696 | QVERIFY(transient->groupTransient()); | 696 | QVERIFY(transient->groupTransient()); | ||
697 | QVERIFY(!transient->isDialog()); // See above why | 697 | QVERIFY(!transient->isDialog()); // See above why | ||
698 | 698 | | |||
699 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1, member2, transient})); | 699 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1, member2, transient})); | ||
700 | 700 | | |||
701 | // Unmap the transient. | 701 | // Unmap the transient. | ||
702 | connect(transient, &Client::windowClosed, this, | 702 | connect(transient, &X11Client::windowClosed, this, | ||
703 | [](Toplevel *toplevel, Deleted *deleted) { | 703 | [](Toplevel *toplevel, Deleted *deleted) { | ||
704 | Q_UNUSED(toplevel) | 704 | Q_UNUSED(toplevel) | ||
705 | deleted->refWindow(); | 705 | deleted->refWindow(); | ||
706 | } | 706 | } | ||
707 | ); | 707 | ); | ||
708 | 708 | | |||
709 | QSignalSpy windowClosedSpy(transient, &Client::windowClosed); | 709 | QSignalSpy windowClosedSpy(transient, &X11Client::windowClosed); | ||
710 | QVERIFY(windowClosedSpy.isValid()); | 710 | QVERIFY(windowClosedSpy.isValid()); | ||
711 | xcb_unmap_window(conn.data(), transientWid); | 711 | xcb_unmap_window(conn.data(), transientWid); | ||
712 | xcb_flush(conn.data()); | 712 | xcb_flush(conn.data()); | ||
713 | QVERIFY(windowClosedSpy.wait()); | 713 | QVERIFY(windowClosedSpy.wait()); | ||
714 | 714 | | |||
715 | QScopedPointer<Deleted, WindowUnrefDeleter> deletedTransient( | 715 | QScopedPointer<Deleted, WindowUnrefDeleter> deletedTransient( | ||
716 | windowClosedSpy.first().at(1).value<Deleted *>()); | 716 | windowClosedSpy.first().at(1).value<Deleted *>()); | ||
717 | QVERIFY(deletedTransient.data()); | 717 | QVERIFY(deletedTransient.data()); | ||
Show All 15 Lines | 724 | { | |||
733 | QVERIFY(windowCreatedSpy.isValid()); | 733 | QVERIFY(windowCreatedSpy.isValid()); | ||
734 | 734 | | |||
735 | // Create the group leader. | 735 | // Create the group leader. | ||
736 | xcb_window_t leaderWid = createGroupWindow(conn.data(), geometry); | 736 | xcb_window_t leaderWid = createGroupWindow(conn.data(), geometry); | ||
737 | xcb_map_window(conn.data(), leaderWid); | 737 | xcb_map_window(conn.data(), leaderWid); | ||
738 | xcb_flush(conn.data()); | 738 | xcb_flush(conn.data()); | ||
739 | 739 | | |||
740 | QVERIFY(windowCreatedSpy.wait()); | 740 | QVERIFY(windowCreatedSpy.wait()); | ||
741 | Client *leader = windowCreatedSpy.first().first().value<Client *>(); | 741 | X11Client *leader = windowCreatedSpy.first().first().value<X11Client *>(); | ||
742 | QVERIFY(leader); | 742 | QVERIFY(leader); | ||
743 | QVERIFY(leader->isActive()); | 743 | QVERIFY(leader->isActive()); | ||
744 | QCOMPARE(leader->windowId(), leaderWid); | 744 | QCOMPARE(leader->windowId(), leaderWid); | ||
745 | QVERIFY(!leader->isTransient()); | 745 | QVERIFY(!leader->isTransient()); | ||
746 | 746 | | |||
747 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader})); | 747 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader})); | ||
748 | 748 | | |||
749 | // Create another group member. | 749 | // Create another group member. | ||
750 | windowCreatedSpy.clear(); | 750 | windowCreatedSpy.clear(); | ||
751 | xcb_window_t member1Wid = createGroupWindow(conn.data(), geometry, leaderWid); | 751 | xcb_window_t member1Wid = createGroupWindow(conn.data(), geometry, leaderWid); | ||
752 | xcb_map_window(conn.data(), member1Wid); | 752 | xcb_map_window(conn.data(), member1Wid); | ||
753 | xcb_flush(conn.data()); | 753 | xcb_flush(conn.data()); | ||
754 | 754 | | |||
755 | QVERIFY(windowCreatedSpy.wait()); | 755 | QVERIFY(windowCreatedSpy.wait()); | ||
756 | Client *member1 = windowCreatedSpy.first().first().value<Client *>(); | 756 | X11Client *member1 = windowCreatedSpy.first().first().value<X11Client *>(); | ||
757 | QVERIFY(member1); | 757 | QVERIFY(member1); | ||
758 | QVERIFY(member1->isActive()); | 758 | QVERIFY(member1->isActive()); | ||
759 | QCOMPARE(member1->windowId(), member1Wid); | 759 | QCOMPARE(member1->windowId(), member1Wid); | ||
760 | QCOMPARE(member1->group(), leader->group()); | 760 | QCOMPARE(member1->group(), leader->group()); | ||
761 | QVERIFY(!member1->isTransient()); | 761 | QVERIFY(!member1->isTransient()); | ||
762 | 762 | | |||
763 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1})); | 763 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1})); | ||
764 | 764 | | |||
765 | // Create yet another group member. | 765 | // Create yet another group member. | ||
766 | windowCreatedSpy.clear(); | 766 | windowCreatedSpy.clear(); | ||
767 | xcb_window_t member2Wid = createGroupWindow(conn.data(), geometry, leaderWid); | 767 | xcb_window_t member2Wid = createGroupWindow(conn.data(), geometry, leaderWid); | ||
768 | xcb_map_window(conn.data(), member2Wid); | 768 | xcb_map_window(conn.data(), member2Wid); | ||
769 | xcb_flush(conn.data()); | 769 | xcb_flush(conn.data()); | ||
770 | 770 | | |||
771 | QVERIFY(windowCreatedSpy.wait()); | 771 | QVERIFY(windowCreatedSpy.wait()); | ||
772 | Client *member2 = windowCreatedSpy.first().first().value<Client *>(); | 772 | X11Client *member2 = windowCreatedSpy.first().first().value<X11Client *>(); | ||
773 | QVERIFY(member2); | 773 | QVERIFY(member2); | ||
774 | QVERIFY(member2->isActive()); | 774 | QVERIFY(member2->isActive()); | ||
775 | QCOMPARE(member2->windowId(), member2Wid); | 775 | QCOMPARE(member2->windowId(), member2Wid); | ||
776 | QCOMPARE(member2->group(), leader->group()); | 776 | QCOMPARE(member2->group(), leader->group()); | ||
777 | QVERIFY(!member2->isTransient()); | 777 | QVERIFY(!member2->isTransient()); | ||
778 | 778 | | |||
779 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1, member2})); | 779 | QCOMPARE(workspace()->stackingOrder(), (ToplevelList{leader, member1, member2})); | ||
780 | 780 | | |||
781 | // Create a group transient. | 781 | // Create a group transient. | ||
782 | windowCreatedSpy.clear(); | 782 | windowCreatedSpy.clear(); | ||
783 | xcb_window_t transientWid = createGroupWindow(conn.data(), geometry, leaderWid); | 783 | xcb_window_t transientWid = createGroupWindow(conn.data(), geometry, leaderWid); | ||
784 | xcb_icccm_set_wm_transient_for(conn.data(), transientWid, rootWindow()); | 784 | xcb_icccm_set_wm_transient_for(conn.data(), transientWid, rootWindow()); | ||
785 | xcb_map_window(conn.data(), transientWid); | 785 | xcb_map_window(conn.data(), transientWid); | ||
786 | xcb_flush(conn.data()); | 786 | xcb_flush(conn.data()); | ||
787 | 787 | | |||
788 | QVERIFY(windowCreatedSpy.wait()); | 788 | QVERIFY(windowCreatedSpy.wait()); | ||
789 | Client *transient = windowCreatedSpy.first().first().value<Client *>(); | 789 | X11Client *transient = windowCreatedSpy.first().first().value<X11Client *>(); | ||
790 | QVERIFY(transient); | 790 | QVERIFY(transient); | ||
791 | QVERIFY(transient->isActive()); | 791 | QVERIFY(transient->isActive()); | ||
792 | QCOMPARE(transient->windowId(), transientWid); | 792 | QCOMPARE(transient->windowId(), transientWid); | ||
793 | QCOMPARE(transient->group(), leader->group()); | 793 | QCOMPARE(transient->group(), leader->group()); | ||
794 | QVERIFY(transient->isTransient()); | 794 | QVERIFY(transient->isTransient()); | ||
795 | QVERIFY(transient->groupTransient()); | 795 | QVERIFY(transient->groupTransient()); | ||
796 | QVERIFY(transient->isDialog()); | 796 | QVERIFY(transient->isDialog()); | ||
797 | QVERIFY(!transient->isModal()); | 797 | QVERIFY(!transient->isModal()); | ||
▲ Show 20 Lines • Show All 113 Lines • Show Last 20 Lines |