| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/mus/public/cpp/window.h" | 5 #include "components/mus/public/cpp/window.h" |
| 6 | 6 |
| 7 #include <limits.h> | 7 #include <limits.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 // Move w11 to front. | 509 // Move w11 to front. |
| 510 // Resulting order: w12, w13, w11 | 510 // Resulting order: w12, w13, w11 |
| 511 w11.MoveToFront(); | 511 w11.MoveToFront(); |
| 512 EXPECT_EQ(&w12, w1.children().front()); | 512 EXPECT_EQ(&w12, w1.children().front()); |
| 513 EXPECT_EQ(&w11, w1.children().back()); | 513 EXPECT_EQ(&w11, w1.children().back()); |
| 514 | 514 |
| 515 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 515 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
| 516 ASSERT_EQ(2U, changes.size()); | 516 ASSERT_EQ(2U, changes.size()); |
| 517 EXPECT_EQ(&w11, changes[0].window); | 517 EXPECT_EQ(&w11, changes[0].window); |
| 518 EXPECT_EQ(&w13, changes[0].relative_window); | 518 EXPECT_EQ(&w13, changes[0].relative_window); |
| 519 EXPECT_EQ(mojom::ORDER_DIRECTION_ABOVE, changes[0].direction); | 519 EXPECT_EQ(mojom::OrderDirection::ABOVE, changes[0].direction); |
| 520 | 520 |
| 521 EXPECT_EQ(&w11, changes[1].window); | 521 EXPECT_EQ(&w11, changes[1].window); |
| 522 EXPECT_EQ(&w13, changes[1].relative_window); | 522 EXPECT_EQ(&w13, changes[1].relative_window); |
| 523 EXPECT_EQ(mojom::ORDER_DIRECTION_ABOVE, changes[1].direction); | 523 EXPECT_EQ(mojom::OrderDirection::ABOVE, changes[1].direction); |
| 524 } | 524 } |
| 525 | 525 |
| 526 { | 526 { |
| 527 OrderChangeObserver observer(&w11); | 527 OrderChangeObserver observer(&w11); |
| 528 | 528 |
| 529 // Move w11 to back. | 529 // Move w11 to back. |
| 530 // Resulting order: w11, w12, w13 | 530 // Resulting order: w11, w12, w13 |
| 531 w11.MoveToBack(); | 531 w11.MoveToBack(); |
| 532 EXPECT_EQ(&w11, w1.children().front()); | 532 EXPECT_EQ(&w11, w1.children().front()); |
| 533 EXPECT_EQ(&w13, w1.children().back()); | 533 EXPECT_EQ(&w13, w1.children().back()); |
| 534 | 534 |
| 535 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 535 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
| 536 ASSERT_EQ(2U, changes.size()); | 536 ASSERT_EQ(2U, changes.size()); |
| 537 EXPECT_EQ(&w11, changes[0].window); | 537 EXPECT_EQ(&w11, changes[0].window); |
| 538 EXPECT_EQ(&w12, changes[0].relative_window); | 538 EXPECT_EQ(&w12, changes[0].relative_window); |
| 539 EXPECT_EQ(mojom::ORDER_DIRECTION_BELOW, changes[0].direction); | 539 EXPECT_EQ(mojom::OrderDirection::BELOW, changes[0].direction); |
| 540 | 540 |
| 541 EXPECT_EQ(&w11, changes[1].window); | 541 EXPECT_EQ(&w11, changes[1].window); |
| 542 EXPECT_EQ(&w12, changes[1].relative_window); | 542 EXPECT_EQ(&w12, changes[1].relative_window); |
| 543 EXPECT_EQ(mojom::ORDER_DIRECTION_BELOW, changes[1].direction); | 543 EXPECT_EQ(mojom::OrderDirection::BELOW, changes[1].direction); |
| 544 } | 544 } |
| 545 | 545 |
| 546 { | 546 { |
| 547 OrderChangeObserver observer(&w11); | 547 OrderChangeObserver observer(&w11); |
| 548 | 548 |
| 549 // Move w11 above w12. | 549 // Move w11 above w12. |
| 550 // Resulting order: w12. w11, w13 | 550 // Resulting order: w12. w11, w13 |
| 551 w11.Reorder(&w12, mojom::ORDER_DIRECTION_ABOVE); | 551 w11.Reorder(&w12, mojom::OrderDirection::ABOVE); |
| 552 EXPECT_EQ(&w12, w1.children().front()); | 552 EXPECT_EQ(&w12, w1.children().front()); |
| 553 EXPECT_EQ(&w13, w1.children().back()); | 553 EXPECT_EQ(&w13, w1.children().back()); |
| 554 | 554 |
| 555 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 555 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
| 556 ASSERT_EQ(2U, changes.size()); | 556 ASSERT_EQ(2U, changes.size()); |
| 557 EXPECT_EQ(&w11, changes[0].window); | 557 EXPECT_EQ(&w11, changes[0].window); |
| 558 EXPECT_EQ(&w12, changes[0].relative_window); | 558 EXPECT_EQ(&w12, changes[0].relative_window); |
| 559 EXPECT_EQ(mojom::ORDER_DIRECTION_ABOVE, changes[0].direction); | 559 EXPECT_EQ(mojom::OrderDirection::ABOVE, changes[0].direction); |
| 560 | 560 |
| 561 EXPECT_EQ(&w11, changes[1].window); | 561 EXPECT_EQ(&w11, changes[1].window); |
| 562 EXPECT_EQ(&w12, changes[1].relative_window); | 562 EXPECT_EQ(&w12, changes[1].relative_window); |
| 563 EXPECT_EQ(mojom::ORDER_DIRECTION_ABOVE, changes[1].direction); | 563 EXPECT_EQ(mojom::OrderDirection::ABOVE, changes[1].direction); |
| 564 } | 564 } |
| 565 | 565 |
| 566 { | 566 { |
| 567 OrderChangeObserver observer(&w11); | 567 OrderChangeObserver observer(&w11); |
| 568 | 568 |
| 569 // Move w11 below w12. | 569 // Move w11 below w12. |
| 570 // Resulting order: w11, w12, w13 | 570 // Resulting order: w11, w12, w13 |
| 571 w11.Reorder(&w12, mojom::ORDER_DIRECTION_BELOW); | 571 w11.Reorder(&w12, mojom::OrderDirection::BELOW); |
| 572 EXPECT_EQ(&w11, w1.children().front()); | 572 EXPECT_EQ(&w11, w1.children().front()); |
| 573 EXPECT_EQ(&w13, w1.children().back()); | 573 EXPECT_EQ(&w13, w1.children().back()); |
| 574 | 574 |
| 575 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); | 575 OrderChangeObserver::Changes changes = observer.GetAndClearChanges(); |
| 576 ASSERT_EQ(2U, changes.size()); | 576 ASSERT_EQ(2U, changes.size()); |
| 577 EXPECT_EQ(&w11, changes[0].window); | 577 EXPECT_EQ(&w11, changes[0].window); |
| 578 EXPECT_EQ(&w12, changes[0].relative_window); | 578 EXPECT_EQ(&w12, changes[0].relative_window); |
| 579 EXPECT_EQ(mojom::ORDER_DIRECTION_BELOW, changes[0].direction); | 579 EXPECT_EQ(mojom::OrderDirection::BELOW, changes[0].direction); |
| 580 | 580 |
| 581 EXPECT_EQ(&w11, changes[1].window); | 581 EXPECT_EQ(&w11, changes[1].window); |
| 582 EXPECT_EQ(&w12, changes[1].relative_window); | 582 EXPECT_EQ(&w12, changes[1].relative_window); |
| 583 EXPECT_EQ(mojom::ORDER_DIRECTION_BELOW, changes[1].direction); | 583 EXPECT_EQ(mojom::OrderDirection::BELOW, changes[1].direction); |
| 584 } | 584 } |
| 585 } | 585 } |
| 586 | 586 |
| 587 namespace { | 587 namespace { |
| 588 | 588 |
| 589 typedef std::vector<std::string> Changes; | 589 typedef std::vector<std::string> Changes; |
| 590 | 590 |
| 591 std::string WindowIdToString(Id id) { | 591 std::string WindowIdToString(Id id) { |
| 592 return (id == 0) ? "null" | 592 return (id == 0) ? "null" |
| 593 : base::StringPrintf("%d,%d", HiWord(id), LoWord(id)); | 593 : base::StringPrintf("%d,%d", HiWord(id), LoWord(id)); |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 978 EXPECT_EQ(w11, parent->children().back()); | 978 EXPECT_EQ(w11, parent->children().back()); |
| 979 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); | 979 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); |
| 980 | 980 |
| 981 // This tests that the order in children_ array rather than in | 981 // This tests that the order in children_ array rather than in |
| 982 // transient_children_ array is used when reinserting transient children. | 982 // transient_children_ array is used when reinserting transient children. |
| 983 // If transient_children_ array was used '22' would be following '21'. | 983 // If transient_children_ array was used '22' would be following '21'. |
| 984 w2->MoveToFront(); | 984 w2->MoveToFront(); |
| 985 EXPECT_EQ(w22, parent->children().back()); | 985 EXPECT_EQ(w22, parent->children().back()); |
| 986 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); | 986 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); |
| 987 | 987 |
| 988 w11->Reorder(w2.get(), mojom::ORDER_DIRECTION_ABOVE); | 988 w11->Reorder(w2.get(), mojom::OrderDirection::ABOVE); |
| 989 EXPECT_EQ(w11, parent->children().back()); | 989 EXPECT_EQ(w11, parent->children().back()); |
| 990 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); | 990 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); |
| 991 | 991 |
| 992 w21->Reorder(w1.get(), mojom::ORDER_DIRECTION_ABOVE); | 992 w21->Reorder(w1.get(), mojom::OrderDirection::ABOVE); |
| 993 EXPECT_EQ(w22, parent->children().back()); | 993 EXPECT_EQ(w22, parent->children().back()); |
| 994 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); | 994 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); |
| 995 | 995 |
| 996 w21->Reorder(w22, mojom::ORDER_DIRECTION_ABOVE); | 996 w21->Reorder(w22, mojom::OrderDirection::ABOVE); |
| 997 EXPECT_EQ(w213, parent->children().back()); | 997 EXPECT_EQ(w213, parent->children().back()); |
| 998 EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get())); | 998 EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get())); |
| 999 | 999 |
| 1000 w11->Reorder(w21, mojom::ORDER_DIRECTION_ABOVE); | 1000 w11->Reorder(w21, mojom::OrderDirection::ABOVE); |
| 1001 EXPECT_EQ(w11, parent->children().back()); | 1001 EXPECT_EQ(w11, parent->children().back()); |
| 1002 EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get())); | 1002 EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get())); |
| 1003 | 1003 |
| 1004 w213->Reorder(w21, mojom::ORDER_DIRECTION_ABOVE); | 1004 w213->Reorder(w21, mojom::OrderDirection::ABOVE); |
| 1005 EXPECT_EQ(w11, parent->children().back()); | 1005 EXPECT_EQ(w11, parent->children().back()); |
| 1006 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1006 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
| 1007 | 1007 |
| 1008 // No change when stacking a transient parent above its transient child. | 1008 // No change when stacking a transient parent above its transient child. |
| 1009 w21->Reorder(w211, mojom::ORDER_DIRECTION_ABOVE); | 1009 w21->Reorder(w211, mojom::OrderDirection::ABOVE); |
| 1010 EXPECT_EQ(w11, parent->children().back()); | 1010 EXPECT_EQ(w11, parent->children().back()); |
| 1011 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1011 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
| 1012 | 1012 |
| 1013 // This tests that the order in children_ array rather than in | 1013 // This tests that the order in children_ array rather than in |
| 1014 // transient_children_ array is used when reinserting transient children. | 1014 // transient_children_ array is used when reinserting transient children. |
| 1015 // If transient_children_ array was used '22' would be following '21'. | 1015 // If transient_children_ array was used '22' would be following '21'. |
| 1016 w2->Reorder(w1.get(), mojom::ORDER_DIRECTION_ABOVE); | 1016 w2->Reorder(w1.get(), mojom::OrderDirection::ABOVE); |
| 1017 EXPECT_EQ(w212, parent->children().back()); | 1017 EXPECT_EQ(w212, parent->children().back()); |
| 1018 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); | 1018 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); |
| 1019 | 1019 |
| 1020 w11->Reorder(w213, mojom::ORDER_DIRECTION_ABOVE); | 1020 w11->Reorder(w213, mojom::OrderDirection::ABOVE); |
| 1021 EXPECT_EQ(w11, parent->children().back()); | 1021 EXPECT_EQ(w11, parent->children().back()); |
| 1022 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1022 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
| 1023 } | 1023 } |
| 1024 | 1024 |
| 1025 // Tests that transient children are stacked as a unit when using order below. | 1025 // Tests that transient children are stacked as a unit when using order below. |
| 1026 TEST_F(WindowTest, TransientWindowsGroupBelow) { | 1026 TEST_F(WindowTest, TransientWindowsGroupBelow) { |
| 1027 scoped_ptr<TestWindow> parent(CreateTestWindow(0, nullptr)); | 1027 scoped_ptr<TestWindow> parent(CreateTestWindow(0, nullptr)); |
| 1028 scoped_ptr<TestWindow> w1(CreateTestWindow(1, parent.get())); | 1028 scoped_ptr<TestWindow> w1(CreateTestWindow(1, parent.get())); |
| 1029 | 1029 |
| 1030 TestWindow* w11 = CreateTestWindow(11, parent.get()); | 1030 TestWindow* w11 = CreateTestWindow(11, parent.get()); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1056 // transient_children_ array is used when reinserting transient children. | 1056 // transient_children_ array is used when reinserting transient children. |
| 1057 // If transient_children_ array was used '22' would be following '21'. | 1057 // If transient_children_ array was used '22' would be following '21'. |
| 1058 w2->MoveToBack(); | 1058 w2->MoveToBack(); |
| 1059 EXPECT_EQ(w11, parent->children().back()); | 1059 EXPECT_EQ(w11, parent->children().back()); |
| 1060 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); | 1060 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); |
| 1061 | 1061 |
| 1062 w1->MoveToBack(); | 1062 w1->MoveToBack(); |
| 1063 EXPECT_EQ(w22, parent->children().back()); | 1063 EXPECT_EQ(w22, parent->children().back()); |
| 1064 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); | 1064 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); |
| 1065 | 1065 |
| 1066 w21->Reorder(w1.get(), mojom::ORDER_DIRECTION_BELOW); | 1066 w21->Reorder(w1.get(), mojom::OrderDirection::BELOW); |
| 1067 EXPECT_EQ(w11, parent->children().back()); | 1067 EXPECT_EQ(w11, parent->children().back()); |
| 1068 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); | 1068 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get())); |
| 1069 | 1069 |
| 1070 w11->Reorder(w2.get(), mojom::ORDER_DIRECTION_BELOW); | 1070 w11->Reorder(w2.get(), mojom::OrderDirection::BELOW); |
| 1071 EXPECT_EQ(w22, parent->children().back()); | 1071 EXPECT_EQ(w22, parent->children().back()); |
| 1072 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); | 1072 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get())); |
| 1073 | 1073 |
| 1074 w22->Reorder(w21, mojom::ORDER_DIRECTION_BELOW); | 1074 w22->Reorder(w21, mojom::OrderDirection::BELOW); |
| 1075 EXPECT_EQ(w213, parent->children().back()); | 1075 EXPECT_EQ(w213, parent->children().back()); |
| 1076 EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get())); | 1076 EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get())); |
| 1077 | 1077 |
| 1078 w21->Reorder(w11, mojom::ORDER_DIRECTION_BELOW); | 1078 w21->Reorder(w11, mojom::OrderDirection::BELOW); |
| 1079 EXPECT_EQ(w11, parent->children().back()); | 1079 EXPECT_EQ(w11, parent->children().back()); |
| 1080 EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get())); | 1080 EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get())); |
| 1081 | 1081 |
| 1082 w213->Reorder(w211, mojom::ORDER_DIRECTION_BELOW); | 1082 w213->Reorder(w211, mojom::OrderDirection::BELOW); |
| 1083 EXPECT_EQ(w11, parent->children().back()); | 1083 EXPECT_EQ(w11, parent->children().back()); |
| 1084 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1084 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
| 1085 | 1085 |
| 1086 // No change when stacking a transient parent below its transient child. | 1086 // No change when stacking a transient parent below its transient child. |
| 1087 w21->Reorder(w211, mojom::ORDER_DIRECTION_BELOW); | 1087 w21->Reorder(w211, mojom::OrderDirection::BELOW); |
| 1088 EXPECT_EQ(w11, parent->children().back()); | 1088 EXPECT_EQ(w11, parent->children().back()); |
| 1089 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1089 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
| 1090 | 1090 |
| 1091 w1->Reorder(w2.get(), mojom::ORDER_DIRECTION_BELOW); | 1091 w1->Reorder(w2.get(), mojom::OrderDirection::BELOW); |
| 1092 EXPECT_EQ(w212, parent->children().back()); | 1092 EXPECT_EQ(w212, parent->children().back()); |
| 1093 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); | 1093 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get())); |
| 1094 | 1094 |
| 1095 w213->Reorder(w11, mojom::ORDER_DIRECTION_BELOW); | 1095 w213->Reorder(w11, mojom::OrderDirection::BELOW); |
| 1096 EXPECT_EQ(w11, parent->children().back()); | 1096 EXPECT_EQ(w11, parent->children().back()); |
| 1097 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); | 1097 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get())); |
| 1098 } | 1098 } |
| 1099 | 1099 |
| 1100 // Tests that windows are restacked properly after a call to | 1100 // Tests that windows are restacked properly after a call to |
| 1101 // AddTransientWindow() or RemoveTransientWindow). | 1101 // AddTransientWindow() or RemoveTransientWindow). |
| 1102 TEST_F(WindowTest, RestackUponAddOrRemoveTransientWindow) { | 1102 TEST_F(WindowTest, RestackUponAddOrRemoveTransientWindow) { |
| 1103 scoped_ptr<TestWindow> parent(CreateTestWindow(0, nullptr)); | 1103 scoped_ptr<TestWindow> parent(CreateTestWindow(0, nullptr)); |
| 1104 scoped_ptr<TestWindow> windows[4]; | 1104 scoped_ptr<TestWindow> windows[4]; |
| 1105 for (int i = 0; i < 4; i++) | 1105 for (int i = 0; i < 4; i++) |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1126 scoped_ptr<TestWindow> window0(CreateTestWindow(1, parent.get())); | 1126 scoped_ptr<TestWindow> window0(CreateTestWindow(1, parent.get())); |
| 1127 scoped_ptr<TestWindow> window1(CreateTestWindow(2, parent.get())); | 1127 scoped_ptr<TestWindow> window1(CreateTestWindow(2, parent.get())); |
| 1128 | 1128 |
| 1129 TestWindow* window2 = CreateTestWindow(3, parent.get()); | 1129 TestWindow* window2 = CreateTestWindow(3, parent.get()); |
| 1130 | 1130 |
| 1131 window0->AddTransientWindow(window2); | 1131 window0->AddTransientWindow(window2); |
| 1132 EXPECT_EQ("1 3 2", ChildWindowIDsAsString(parent.get())); | 1132 EXPECT_EQ("1 3 2", ChildWindowIDsAsString(parent.get())); |
| 1133 } | 1133 } |
| 1134 | 1134 |
| 1135 } // namespace mus | 1135 } // namespace mus |
| OLD | NEW |