1
1
package com.jetbrains.rider.plugins.unity.ui.shaders
2
2
3
+ import com.intellij.openapi.components.service
3
4
import com.intellij.openapi.project.Project
4
5
import com.intellij.openapi.wm.StatusBar
5
6
import com.intellij.openapi.wm.StatusBarWidget
6
7
import com.intellij.openapi.wm.StatusBarWidgetFactory
8
+ import com.intellij.openapi.wm.impl.status.widget.StatusBarWidgetsManager
9
+ import com.intellij.util.application
10
+ import com.jetbrains.rdclient.util.idea.toVirtualFile
7
11
import com.jetbrains.rider.plugins.unity.UnityProjectDiscoverer
8
12
import com.jetbrains.rider.plugins.unity.ui.UnityUIBundle
13
+ import com.jetbrains.rider.projectView.solutionDirectory
9
14
10
15
class ShaderWidgetFactory : StatusBarWidgetFactory {
11
16
override fun getId () = " ShaderWidget"
12
- override fun isAvailable (project : Project ) = UnityProjectDiscoverer .getInstance(project).isUnityProject
13
17
override fun canBeEnabledOn (statusBar : StatusBar ) = true
14
18
override fun getDisplayName () = UnityUIBundle .message(" unity.shader.file.context" )
15
19
override fun disposeWidget (widget : StatusBarWidget ) {}
16
20
override fun createWidget (project : Project ) = ShaderWidget (project)
21
+
22
+ override fun isAvailable (project : Project ): Boolean {
23
+
24
+ // We should not call VFS refresh here, it is project frame initialization
25
+ // This code can be simplified when this issue will be fixed in IJ platform:
26
+ // https://youtrack.jetbrains.com/issue/IJPL-73/Off-load-initialization-of-StatusBarWidgetsManager-to-BGT
27
+
28
+ val solutionDirectory = project.solutionDirectory.toVirtualFile(false )
29
+ if (solutionDirectory != null ) {
30
+ return UnityProjectDiscoverer .getInstance(project).isUnityProject
31
+ }
32
+
33
+ application.executeOnPooledThread {
34
+ project.solutionDirectory.toVirtualFile(true )
35
+ application.invokeLater {
36
+ project.service<StatusBarWidgetsManager >().updateWidget(ShaderWidgetFactory ::class .java)
37
+ }
38
+ }
39
+ return false
40
+ }
17
41
}
0 commit comments