Changeset View
Changeset View
Standalone View
Standalone View
shell_client.cpp
Show First 20 Lines • Show All 939 Lines • ▼ Show 20 Line(s) | 939 | { | |||
---|---|---|---|---|---|
940 | if (!rules()->checkFullScreen(true)) { | 940 | if (!rules()->checkFullScreen(true)) { | ||
941 | return false; | 941 | return false; | ||
942 | } | 942 | } | ||
943 | return !isSpecialWindow(); | 943 | return !isSpecialWindow(); | ||
944 | } | 944 | } | ||
945 | 945 | | |||
946 | void ShellClient::setFullScreen(bool set, bool user) | 946 | void ShellClient::setFullScreen(bool set, bool user) | ||
947 | { | 947 | { | ||
948 | if (!isFullScreen() && !set) | 948 | set = rules()->checkFullScreen(set); | ||
949 | | ||||
950 | const bool wasFullscreen = isFullScreen(); | ||||
951 | if (wasFullscreen == set) { | ||||
952 | return; | ||||
953 | } | ||||
954 | if (isSpecialWindow()) { | ||||
949 | return; | 955 | return; | ||
950 | if (user && !userCanSetFullScreen()) | 956 | } | ||
957 | if (user && !userCanSetFullScreen()) { | ||||
951 | return; | 958 | return; | ||
952 | set = rules()->checkFullScreen(set && !isSpecialWindow()); | 959 | } | ||
953 | setShade(ShadeNone); | 960 | | ||
954 | bool was_fs = isFullScreen(); | 961 | if (wasFullscreen) { | ||
955 | if (was_fs) { | | |||
956 | workspace()->updateFocusMousePosition(Cursor::pos()); // may cause leave event | 962 | workspace()->updateFocusMousePosition(Cursor::pos()); // may cause leave event | ||
957 | } else { | 963 | } else { | ||
958 | // in shell surface, maximise mode and fullscreen are exclusive | 964 | // in shell surface, maximise mode and fullscreen are exclusive | ||
959 | // fullscreen->toplevel should restore the state we had before maximising | 965 | // fullscreen->toplevel should restore the state we had before maximising | ||
960 | if (m_shellSurface && m_maximizeMode == MaximizeMode::MaximizeFull) { | 966 | if (m_shellSurface && m_maximizeMode == MaximizeMode::MaximizeFull) { | ||
961 | m_geomFsRestore = m_geomMaximizeRestore; | 967 | m_geomFsRestore = m_geomMaximizeRestore; | ||
962 | } else { | 968 | } else { | ||
963 | m_geomFsRestore = geometry(); | 969 | m_geomFsRestore = geometry(); | ||
964 | } | 970 | } | ||
965 | } | 971 | } | ||
966 | m_fullScreen = set; | 972 | m_fullScreen = set; | ||
967 | if (was_fs == isFullScreen()) | 973 | | ||
968 | return; | | |||
969 | if (set) { | 974 | if (set) { | ||
970 | untab(); | 975 | untab(); | ||
971 | workspace()->raiseClient(this); | 976 | workspace()->raiseClient(this); | ||
972 | } | 977 | } | ||
973 | RequestGeometryBlocker requestBlocker(this); | 978 | RequestGeometryBlocker requestBlocker(this); | ||
974 | StackingUpdatesBlocker blocker1(workspace()); | 979 | StackingUpdatesBlocker blocker1(workspace()); | ||
975 | GeometryUpdatesBlocker blocker2(this); | 980 | GeometryUpdatesBlocker blocker2(this); | ||
981 | | ||||
976 | workspace()->updateClientLayer(this); // active fullscreens get different layer | 982 | workspace()->updateClientLayer(this); // active fullscreens get different layer | ||
977 | updateDecoration(false, false); | 983 | updateDecoration(false, false); | ||
978 | if (isFullScreen()) { | 984 | | ||
985 | if (set) { | ||||
979 | setGeometry(workspace()->clientArea(FullScreenArea, this)); | 986 | setGeometry(workspace()->clientArea(FullScreenArea, this)); | ||
980 | } else { | 987 | } else { | ||
981 | if (m_geomFsRestore.isValid()) { | 988 | if (m_geomFsRestore.isValid()) { | ||
982 | int currentScreen = screen(); | 989 | int currentScreen = screen(); | ||
983 | setGeometry(QRect(m_geomFsRestore.topLeft(), adjustedSize(m_geomFsRestore.size()))); | 990 | setGeometry(QRect(m_geomFsRestore.topLeft(), adjustedSize(m_geomFsRestore.size()))); | ||
984 | if( currentScreen != screen()) | 991 | if( currentScreen != screen()) | ||
985 | workspace()->sendClientToScreen( this, currentScreen ); | 992 | workspace()->sendClientToScreen( this, currentScreen ); | ||
986 | } else { | 993 | } else { | ||
987 | // this can happen when the window was first shown already fullscreen, | 994 | // this can happen when the window was first shown already fullscreen, | ||
988 | // so let the client set the size by itself | 995 | // so let the client set the size by itself | ||
989 | setGeometry(QRect(workspace()->clientArea(PlacementArea, this).topLeft(), QSize(0, 0))); | 996 | setGeometry(QRect(workspace()->clientArea(PlacementArea, this).topLeft(), QSize(0, 0))); | ||
990 | } | 997 | } | ||
991 | } | 998 | } | ||
992 | updateWindowRules(Rules::Fullscreen|Rules::Position|Rules::Size); | | |||
993 | 999 | | |||
994 | if (was_fs != isFullScreen()) { | 1000 | updateWindowRules(Rules::Fullscreen|Rules::Position|Rules::Size); | ||
995 | emit fullScreenChanged(); | 1001 | emit fullScreenChanged(); | ||
996 | } | 1002 | } | ||
997 | } | | |||
998 | 1003 | | |||
999 | void ShellClient::setNoBorder(bool set) | 1004 | void ShellClient::setNoBorder(bool set) | ||
1000 | { | 1005 | { | ||
1001 | if (!userCanSetNoBorder()) { | 1006 | if (!userCanSetNoBorder()) { | ||
1002 | return; | 1007 | return; | ||
1003 | } | 1008 | } | ||
1004 | set = rules()->checkNoBorder(set); | 1009 | set = rules()->checkNoBorder(set); | ||
1005 | if (m_userNoBorder == set) { | 1010 | if (m_userNoBorder == set) { | ||
▲ Show 20 Lines • Show All 938 Lines • Show Last 20 Lines |