From 0ad583f3e7e5a729f07b56e4731c65cb6a5e99cd Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Fri, 26 Nov 2010 15:14:33 +0100
Subject: [PATCH] Detect the type of the shader.

---
 src/plugins/glsleditor/GLSLEditor.mimetypes.xml | 16 ++++++++++++++--
 src/plugins/glsleditor/glsleditor.cpp           | 16 ++++++++++++++--
 src/plugins/glsleditor/glsleditor.h             |  3 +++
 3 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/src/plugins/glsleditor/GLSLEditor.mimetypes.xml b/src/plugins/glsleditor/GLSLEditor.mimetypes.xml
index d9fa822b01e..5d63307c03d 100644
--- a/src/plugins/glsleditor/GLSLEditor.mimetypes.xml
+++ b/src/plugins/glsleditor/GLSLEditor.mimetypes.xml
@@ -1,14 +1,26 @@
 <?xml version="1.0"?>
 <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
+
     <mime-type type="application/x-glsl">
         <alias type="text/x-glsl"/>
         <sub-class-of type="text/plain"/>
-        <comment>GLSL file</comment>
+        <comment>GLSL Shader file</comment>
         <glob pattern="*.glsl"/>
         <glob pattern="*.shader"/>
+    </mime-type>
+
+    <mime-type type="text/x-glsl-frag">
+        <sub-class-of type="text/x-glsl"/>
+        <comment>GLSL Fragment Shader file</comment>
         <glob pattern="*.frag"/>
-        <glob pattern="*.vert"/>
         <glob pattern="*.fsh"/>
+    </mime-type>
+
+    <mime-type type="text/x-glsl-vert">
+        <sub-class-of type="text/x-glsl"/>
+        <comment>GLSL Fragment Shader file</comment>
+        <glob pattern="*.vert"/>
         <glob pattern="*.vsh"/>
     </mime-type>
+
 </mime-info>
diff --git a/src/plugins/glsleditor/glsleditor.cpp b/src/plugins/glsleditor/glsleditor.cpp
index 7d8fcc51ae3..bd782cca0be 100644
--- a/src/plugins/glsleditor/glsleditor.cpp
+++ b/src/plugins/glsleditor/glsleditor.cpp
@@ -276,8 +276,10 @@ void GLSLTextEditor::updateDocumentNow()
     Semantic sem;
     Scope *globalScope = engine.newNamespace();
     sem.translationUnit(plugin->shaderInit()->ast, globalScope, plugin->shaderInit()->engine);
-    sem.translationUnit(plugin->vertexShaderInit()->ast, globalScope, plugin->vertexShaderInit()->engine);
-    sem.translationUnit(plugin->fragmentShaderInit()->ast, globalScope, plugin->fragmentShaderInit()->engine);
+    if (isVertexShader())
+        sem.translationUnit(plugin->vertexShaderInit()->ast, globalScope, plugin->vertexShaderInit()->engine);
+    if (isFragmentShader())
+        sem.translationUnit(plugin->fragmentShaderInit()->ast, globalScope, plugin->fragmentShaderInit()->engine);
     sem.translationUnit(ast, globalScope, &engine);
 
     QTextCharFormat errorFormat;
@@ -314,3 +316,13 @@ void GLSLTextEditor::updateDocumentNow()
     // refresh the identifiers.
     m_identifiers = engine.identifiers();
 }
+
+bool GLSLTextEditor::isVertexShader() const
+{
+    return mimeType() == QLatin1String("text/x-glsl-vert");
+}
+
+bool GLSLTextEditor::isFragmentShader() const
+{
+    return mimeType() == QLatin1String("text/x-glsl-frag");
+}
diff --git a/src/plugins/glsleditor/glsleditor.h b/src/plugins/glsleditor/glsleditor.h
index f1847802eee..9f126199bb0 100644
--- a/src/plugins/glsleditor/glsleditor.h
+++ b/src/plugins/glsleditor/glsleditor.h
@@ -65,6 +65,9 @@ public:
 
     QSet<QString> identifiers() const;
 
+    bool isVertexShader() const;
+    bool isFragmentShader() const;
+
 public slots:
     virtual void setFontSettings(const TextEditor::FontSettings &);
 
-- 
GitLab