Changeset View
Changeset View
Standalone View
Standalone View
layers.cpp
Show First 20 Lines • Show All 681 Lines • ▼ Show 20 Line(s) | 667 | { | |||
---|---|---|---|---|---|
682 | if (mainwindow->isDock() && !transient->hasTransientPlacementHint()) | 682 | if (mainwindow->isDock() && !transient->hasTransientPlacementHint()) | ||
683 | return false; | 683 | return false; | ||
684 | return true; | 684 | return true; | ||
685 | } | 685 | } | ||
686 | 686 | | |||
687 | // Returns all windows in their stacking order on the root window. | 687 | // Returns all windows in their stacking order on the root window. | ||
688 | ToplevelList Workspace::xStackingOrder() const | 688 | ToplevelList Workspace::xStackingOrder() const | ||
689 | { | 689 | { | ||
690 | if (!x_stacking_dirty) | 690 | if (m_xStackingQueryTree) { | ||
691 | const_cast<Workspace*>(this)->updateXStackingOrder(); | ||||
692 | } | ||||
691 | return x_stacking; | 693 | return x_stacking; | ||
692 | x_stacking_dirty = false; | 694 | } | ||
695 | | ||||
696 | void Workspace::updateXStackingOrder() | ||||
697 | { | ||||
693 | x_stacking.clear(); | 698 | x_stacking.clear(); | ||
694 | Xcb::Tree tree(rootWindow()); | 699 | std::unique_ptr<Xcb::Tree> tree{std::move(m_xStackingQueryTree)}; | ||
695 | // use our own stacking order, not the X one, as they may differ | 700 | // use our own stacking order, not the X one, as they may differ | ||
696 | foreach (Toplevel * c, stacking_order) | 701 | foreach (Toplevel * c, stacking_order) | ||
697 | x_stacking.append(c); | 702 | x_stacking.append(c); | ||
698 | 703 | | |||
699 | if (!tree.isNull()) { | 704 | if (!tree->isNull()) { | ||
700 | xcb_window_t *windows = tree.children(); | 705 | xcb_window_t *windows = tree->children(); | ||
701 | const auto count = tree->children_len; | 706 | const auto count = tree->data()->children_len; | ||
702 | int foundUnmanagedCount = unmanaged.count(); | 707 | int foundUnmanagedCount = unmanaged.count(); | ||
703 | for (unsigned int i = 0; | 708 | for (unsigned int i = 0; | ||
704 | i < count; | 709 | i < count; | ||
705 | ++i) { | 710 | ++i) { | ||
706 | for (auto it = unmanaged.constBegin(); it != unmanaged.constEnd(); ++it) { | 711 | for (auto it = unmanaged.constBegin(); it != unmanaged.constEnd(); ++it) { | ||
707 | Unmanaged *u = *it; | 712 | Unmanaged *u = *it; | ||
708 | if (u->window() == windows[i]) { | 713 | if (u->window() == windows[i]) { | ||
709 | x_stacking.append(u); | 714 | x_stacking.append(u); | ||
Show All 9 Lines | |||||
719 | if (waylandServer()) { | 724 | if (waylandServer()) { | ||
720 | const auto clients = waylandServer()->internalClients(); | 725 | const auto clients = waylandServer()->internalClients(); | ||
721 | for (auto c: clients) { | 726 | for (auto c: clients) { | ||
722 | if (c->isShown(false)) { | 727 | if (c->isShown(false)) { | ||
723 | x_stacking << c; | 728 | x_stacking << c; | ||
724 | } | 729 | } | ||
725 | } | 730 | } | ||
726 | } | 731 | } | ||
727 | return x_stacking; | | |||
728 | } | 732 | } | ||
729 | 733 | | |||
730 | //******************************* | 734 | //******************************* | ||
731 | // Client | 735 | // Client | ||
732 | //******************************* | 736 | //******************************* | ||
733 | 737 | | |||
734 | void Client::restackWindow(xcb_window_t above, int detail, NET::RequestSource src, xcb_timestamp_t timestamp, bool send_event) | 738 | void Client::restackWindow(xcb_window_t above, int detail, NET::RequestSource src, xcb_timestamp_t timestamp, bool send_event) | ||
735 | { | 739 | { | ||
▲ Show 20 Lines • Show All 122 Lines • Show Last 20 Lines |