Index: glsingleview.cpp
===================================================================
--- glsingleview.cpp	(revision 9409)
+++ glsingleview.cpp	(working copy)
@@ -35,6 +35,7 @@
 
 #include "glsingleview.h"
 #include "galleryutil.h"
+#include "config.h"
 
 GLSDialog::GLSDialog(const ThumbList& itemList, int pos, int slideShow, 
                      MythMainWindow *parent, const char *name)
@@ -143,6 +144,11 @@
     m_texInfo       = 0;
     m_showInfo      = false;
     m_sequence      = 0;
+#ifdef EXIF_SUPPORT
+    m_showDate      = gContext->GetNumSetting("SlideshowShowDate");
+    m_texDate       = 0;
+#endif
+      // ---------------------------------------------------------------
 
     // ---------------------------------------------------------------
 
@@ -184,6 +190,10 @@
         glDeleteTextures(1, &m_texItem[0].tex);
     if (m_texItem[1].tex)
         glDeleteTextures(1, &m_texItem[1].tex);
+#ifdef EXIF_SUPPORT
+//    if (m_texDate)
+ //       glDeleteTextures(1, &m_texDate);
+#endif    
 }
 
 void GLSingleView::initializeGL()
@@ -480,7 +490,6 @@
     glEnd();
 
     if (m_showInfo) {
-
         createTexInfo();
     
         glMatrixMode(GL_MODELVIEW);
@@ -508,7 +517,34 @@
         glEnd();
 
     }
+#ifdef EXIF_SUPPORT
+    if (m_showDate) {
+	createDateInfo(date);
+	glMatrixMode(GL_MODELVIEW);
+	glLoadIdentity();
 
+	glMatrixMode(GL_TEXTURE);
+	glLoadIdentity();
+
+	glBindTexture(GL_TEXTURE_2D, m_texDate);
+	glBegin(GL_QUADS);
+	{
+	    glColor4f(1.0, 1.0, 1.0, 0.5);
+	    glTexCoord2f(0, 0);
+	    glVertex3f(0.3, -1, 0);
+
+	    glTexCoord2f(1, 0);
+	    glVertex3f(1, -1, 0);
+
+	    glTexCoord2f(1, 1);
+	    glVertex3f(1, -0.8, 0);
+
+	    glTexCoord2f(0, 1);
+	    glVertex3f(0.3, -0.8, 0);
+	}
+	glEnd();	
+    }
+#endif
 }
 
 void GLSingleView::advanceFrame()
@@ -616,6 +652,10 @@
         glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
         glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
 
+#ifdef EXIF_SUPPORT
+        date  = GalleryUtil::getDate(item->path);
+#endif
+
     }
 }
 
@@ -1545,3 +1585,35 @@
     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
 }
 
+#ifdef EXIF_SUPPORT
+void GLSingleView::createDateInfo(QString value)
+{
+    if (m_texDate)
+        glDeleteTextures(1, &m_texDate);
+
+    QPixmap pix(256, 32);
+
+    QPainter p(&pix, this);
+    p.fillRect(0,0,pix.width(),pix.height(),Qt::black);
+    p.setPen(Qt::white);
+
+    p.drawText(5, 5, pix.width()-5, pix.height()-5,
+               Qt::AlignLeft, value);
+    p.end();
+
+    QImage img(pix.convertToImage());
+    img = img.convertDepth(32);
+
+    QImage tex = convertToGLFormat(img);
+
+    /* create the texture */
+    glGenTextures(1, &m_texDate);
+    glBindTexture(GL_TEXTURE_2D, m_texDate);
+    /* actually generate the texture */
+    glTexImage2D( GL_TEXTURE_2D, 0, 3, tex.width(), tex.height(), 0,
+                  GL_RGBA, GL_UNSIGNED_BYTE, tex.bits() );
+    /* enable linear filtering  */
+    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
+    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
+}
+#endif
Index: galleryutil.h
===================================================================
--- galleryutil.h	(revision 9409)
+++ galleryutil.h	(working copy)
@@ -28,7 +28,7 @@
     static bool isImage(const char* filePath);
     static bool isMovie(const char* filePath);
     static long getNaturalRotation(const char* filePath);
-
+    static QString getDate(const char* filePath);
     static QString getCaption(const QString &filePath);
 
     static bool loadDirectory(ThumbList& itemList,
Index: glsingleview.h
===================================================================
--- glsingleview.h	(revision 9409)
+++ glsingleview.h	(working copy)
@@ -26,6 +26,7 @@
 #include <qmap.h>
 
 #include "iconview.h"
+#include "config.h"
 #include "sequence.h"
 
 class QImage;
@@ -99,6 +100,11 @@
     bool          m_effectRunning;
     bool          m_running;
     int           m_slideShow;
+#ifdef EXIF_SUPPORT
+    int           m_showDate;
+    GLuint        m_texDate;
+    QString       date;
+#endif
 
     GLuint        m_texInfo;
     bool          m_showInfo;
@@ -121,7 +127,9 @@
     void  paintTexture();
     void  rotate(int angle);
     void  createTexInfo();
-
+#ifdef EXIF_SUPPORT
+    void  createDateInfo(QString);
+#endif
     void  registerEffects();
     EffectMethod getRandomEffect();
 
Index: gallerysettings.cpp
===================================================================
--- gallerysettings.cpp	(revision 9409)
+++ gallerysettings.cpp	(working copy)
@@ -72,6 +72,18 @@
     return gc;
 };
 
+#ifdef EXIF_SUPPORT
+static HostCheckBox *SlideshowShowDate()
+{
+    HostCheckBox *gc = new HostCheckBox("SlideshowShowDate");
+    gc->setLabel(QObject::tr("Show Photo date on image"));
+    gc->setHelpText(QObject::tr("Check this to show the date/time "
+                                "that the photo was taken on the image"));
+    return gc;
+};
+#endif
+
+
 static HostComboBox *SlideshowOpenGLTransition()
 {
     HostComboBox *gc = new HostComboBox("SlideshowOpenGLTransition");
@@ -165,7 +177,7 @@
         addChild(MythGalleryMoviePlayerCmd());
 
 #ifdef OPENGL_SUPPORT
-        
+
         HostCheckBox* useOpenGL = SlideshowUseOpenGL();
         addChild(useOpenGL);
         setTrigger(useOpenGL);
@@ -179,6 +191,11 @@
         regularConfig->addChild(SlideshowBackground());
         addTarget("0", regularConfig);
 
+#ifdef EXIF_SUPPORT
+        HostCheckBox* showDate = SlideshowShowDate();
+	openGLConfig->addChild(showDate);
+#endif       
+
 #else
         addChild(MythGalleryOverlayCaption());
         addChild(SlideshowTransition());
Index: galleryutil.cpp
===================================================================
--- galleryutil.cpp	(revision 9409)
+++ galleryutil.cpp	(working copy)
@@ -263,3 +263,47 @@
 
     return caption;
 }
+
+QString GalleryUtil::getDate(const char* filePath)
+{
+    QString date;
+    try
+    {
+#ifdef EXIF_SUPPORT
+        char *exifvalue = new char[1024];
+        ExifData *data = exif_data_new_from_file (filePath);
+        if (data)
+        {
+            for (int i = 0; i < EXIF_IFD_COUNT; i++)
+            {
+                    ExifEntry *entry = exif_content_get_entry (data->ifd[i],
+                                                        EXIF_TAG_DATE_TIME);
+                    if (entry)
+                    {
+#if NEW_LIB_EXIF
+                        exif_entry_get_value(entry, exifvalue, 1023);
+                        date = exifvalue;
+#else
+                        date = exif_entry_get_value(entry);
+#endif
+                        break;
+                    }
+            }
+            exif_data_free(data);
+        }
+        else
+        {
+                std::cerr << "Could not load exif data from " << filePath << std::endl;
+        }
+        
+        delete [] exifvalue;
+        
+#endif // EXIF_SUPPORT
+    }
+    catch (...)
+    {
+        std::cerr << "GalleryUtil: Failed to extract EXIF headers from "
+        << filePath << std::endl;
+    }
+    return date;
+}
