{"record":{"id":"777453d0802a7c66","repo":"JosefNemec/Playnite","slug":"cannot-open-plugin-settings-in-fullscreen-mode","errorCode":null,"errorMessage":"Cannot open plugin settings in Fullscreen mode.","messagePattern":"Cannot open plugin settings in Fullscreen mode\\.","errorType":"exception","errorClass":"NotSupportedInFullscreenException","httpStatus":null,"severity":"error","filePath":"source/Playnite.FullscreenApp/Api/MainViewAPI.cs","lineNumber":75,"sourceCode":"\r\n        public GroupableField Grouping\r\n        {\r\n            get => GroupableField.None;\r\n            set { }\r\n        }\r\n\r\n        public List<Game> FilteredGames => mainModel.GamesView.CollectionView.Cast<GamesCollectionViewEntry>().Select(a => a.Game).Distinct().ToList();\r\n\r\n        public Dispatcher UIDispatcher => PlayniteApplication.CurrentNative.Dispatcher;\r\n\r\n        public MainViewAPI(FullscreenAppViewModel mainModel)\r\n        {\r\n            this.mainModel = mainModel;\r\n        }\r\n\r\n        public bool OpenPluginSettings(Guid pluginId)\r\n        {\r\n            throw new NotSupportedInFullscreenException(\"Cannot open plugin settings in Fullscreen mode.\");\r\n        }\r\n\r\n        public void SwitchToLibraryView()\r\n        {\r\n            throw new NotSupportedInFullscreenException();\r\n        }\r\n\r\n        public void SelectGame(Guid gameId)\r\n        {\r\n            var game = mainModel.Database.Games.Get(gameId);\r\n            if (game == null)\r\n            {\r\n                logger.Error($\"Can't select game, game ID {gameId} not found.\");\r\n            }\r\n            else\r\n            {\r\n                mainModel.SelectGame(game.Id);\r\n            }\r","sourceCodeStart":57,"sourceCodeEnd":93,"githubUrl":"https://github.com/JosefNemec/Playnite/blob/5911f4e964e628aa7a69c2030ab35101afa63067/source/Playnite.FullscreenApp/Api/MainViewAPI.cs#L57-L93","documentation":"Thrown by Fullscreen-mode MainViewAPI.OpenPluginSettings. The Fullscreen host does not render the per-plugin settings dialog, so the method is a hard stub that throws NotSupportedInFullscreenException with a descriptive message. It is the Fullscreen counterpart to operations that are only wired up in the Desktop host.","triggerScenarios":"Calling PlayniteApi.MainView.OpenPluginSettings(pluginId) while the process is the FullscreenApp (ApplicationMode.Fullscreen). The Fullscreen MainViewAPI is bound, so the stub runs.","commonSituations":"A plugin's settings button works in Desktop mode but the same user runs Playnite in Fullscreen; a generic extension UI surfaces a 'Configure' action unconditionally regardless of host.","solutions":["Check the active application mode and hide/disable the settings affordance in Fullscreen mode.","Catch NotSupportedInFullscreenException around the call and show a user-friendly message directing them to Desktop mode.","Provide an alternative settings surface that is mode-independent if the feature is essential."],"exampleFix":"// before\nPlayniteApi.MainView.OpenPluginSettings(pluginId);\n\n// after\ntry\n{\n    PlayniteApi.MainView.OpenPluginSettings(pluginId);\n}\ncatch (NotSupportedInFullscreenException)\n{\n    Dialogs.ShowMessage(\"Open plugin settings from Desktop mode.\");\n}","handlingStrategy":"validation","validationCode":"if (PlayniteApi.ApplicationInfo.Mode == ApplicationMode.Desktop)\n{\n    PlayniteApi.MainView.OpenPluginSettings(pluginId);\n}","typeGuard":null,"tryCatchPattern":"try { PlayniteApi.MainView.OpenPluginSettings(pluginId); }\ncatch (NotSupportedInFullscreenException) { Dialogs.ShowMessage(\"Use Desktop mode.\"); }","preventionTips":["Hide plugin-settings affordances in Fullscreen mode.","Branch on application mode for any Desktop-only UI feature.","Surface a user-friendly message when the host lacks the capability."],"tags":["api-mode","fullscreen","plugins","playnite"],"backgroundTag":null,"analyzedSha":"5911f4e964e628aa7a69c2030ab35101afa63067","analyzedAt":"2026-08-13T17:38:25.713Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}