openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #22082
[Merge] lp:~phill-ridout/openlp/1012110_2.0 into lp:openlp/2.0
Phill has proposed merging lp:~phill-ridout/openlp/1012110_2.0 into lp:openlp/2.0.
Requested reviews:
Raoul Snyman (raoul-snyman)
Phill (phill-ridout)
Related bugs:
Bug #1012110 in OpenLP: "pptviewlib does not accept unicode filename"
https://bugs.launchpad.net/openlp/+bug/1012110
For more details, see:
https://code.launchpad.net/~phill-ridout/openlp/1012110_2.0/+merge/192230
Fixes bug #1012110 by encoding the file name with the file system encoding
--
https://code.launchpad.net/~phill-ridout/openlp/1012110_2.0/+merge/192230
Your team OpenLP Core is subscribed to branch lp:openlp/2.0.
=== modified file 'openlp/plugins/presentations/lib/pptviewcontroller.py'
--- openlp/plugins/presentations/lib/pptviewcontroller.py 2013-08-20 18:30:15 +0000
+++ openlp/plugins/presentations/lib/pptviewcontroller.py 2013-10-22 19:57:11 +0000
@@ -29,6 +29,7 @@
import os
import logging
+import sys
if os.name == u'nt':
from ctypes import cdll
@@ -125,11 +126,16 @@
renderer = self.controller.plugin.renderer
rect = renderer.screens.current[u'size']
rect = RECT(rect.x(), rect.y(), rect.right(), rect.bottom())
- filepath = str(self.filepath.replace(u'/', u'\\'))
+ file_system_encoding = 'utf-16-le'
+ file_path = os.path.normpath(self.filepath)
+ preview_path = os.path.join(self.get_temp_folder(), u'slide')
+ # Ensure that the paths are null terminated
+ file_path = file_path.encode(file_system_encoding) + '\0'
+ preview_path = preview_path.encode(file_system_encoding) + '\0'
if not os.path.isdir(self.get_temp_folder()):
os.makedirs(self.get_temp_folder())
- self.pptid = self.controller.process.OpenPPT(filepath, None, rect,
- str(self.get_temp_folder()) + '\\slide')
+ self.pptid = self.controller.process.OpenPPT(file_path, None, rect,
+ preview_path)
if self.pptid >= 0:
self.create_thumbnails()
self.stop_presentation()
=== modified file 'openlp/plugins/presentations/lib/pptviewlib/ppttest.py'
--- openlp/plugins/presentations/lib/pptviewlib/ppttest.py 2012-12-30 19:41:24 +0000
+++ openlp/plugins/presentations/lib/pptviewlib/ppttest.py 2013-10-22 19:57:11 +0000
@@ -27,7 +27,9 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
+import os
import sys
+
from PyQt4 import QtGui, QtCore
from ctypes import *
from ctypes.wintypes import RECT
@@ -172,9 +174,8 @@
oldid = self.pptid;
rect = RECT(int(self.xEdit.text()), int(self.yEdit.text()),
int(self.widthEdit.text()), int(self.heightEdit.text()))
- filename = str(self.pptEdit.text().replace(u'/', u'\\'))
- folder = str(self.folderEdit.text().replace(u'/', u'\\'))
- print filename, folder
+ filename = os.path.normpath(unicode(self.pptEdit.text())).encode('utf-16-le') + '\0'
+ folder = os.path.normpath(unicode(self.folderEdit.text())).encode('utf-16-le') + '\0'
self.pptid = self.pptdll.OpenPPT(filename, None, rect, folder)
print u'id: ' + unicode(self.pptid)
if oldid >= 0:
=== modified file 'openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp'
--- openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp 2012-12-30 19:41:24 +0000
+++ openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp 2013-10-22 19:57:11 +0000
@@ -61,18 +61,18 @@
switch(ulReasonForCall)
{
case DLL_PROCESS_ATTACH:
- DEBUG("PROCESS_ATTACH\n");
+ DEBUG(L"PROCESS_ATTACH\n");
break;
case DLL_THREAD_ATTACH:
- //DEBUG("THREAD_ATTACH\n");
+ //DEBUG(L"THREAD_ATTACH\n");
break;
case DLL_THREAD_DETACH:
- //DEBUG("THREAD_DETACH\n");
+ //DEBUG(L"THREAD_DETACH\n");
break;
case DLL_PROCESS_DETACH:
// Clean up... hopefully there is only the one process attached?
// We'll find out soon enough during tests!
- DEBUG("PROCESS_DETACH\n");
+ DEBUG(L"PROCESS_DETACH\n");
for (int i = 0; i < MAX_PPTS; i++)
ClosePPT(i);
break;
@@ -84,18 +84,18 @@
{
printf("SetDebug\n");
debug = onOff;
- DEBUG("enabled\n");
+ DEBUG(L"enabled\n");
}
DllExport BOOL CheckInstalled()
{
- char cmdLine[MAX_PATH * 2];
+ wchar_t cmdLine[MAX_PATH * 2];
- DEBUG("CheckInstalled\n");
+ DEBUG(L"CheckInstalled\n");
BOOL found = GetPPTViewerPath(cmdLine, sizeof(cmdLine));
if(found)
{
- DEBUG("Exe: %s\n", cmdLine);
+ DEBUG(L"Exe: %s\n", cmdLine);
}
return found;
}
@@ -106,20 +106,20 @@
// "<n>.bmp" will be appended to complete the path. E.g. "c:\temp\slide" would
// create "c:\temp\slide1.bmp" slide2.bmp, slide3.bmp etc.
// It will also create a *info.txt containing information about the ppt
-DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect,
- char *previewPath)
+DllExport int OpenPPT(wchar_t *filename, HWND hParentWnd, RECT rect,
+ wchar_t *previewPath)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
- char cmdLine[MAX_PATH * 2];
+ wchar_t cmdLine[MAX_PATH * 2];
int id;
- DEBUG("OpenPPT start: %s; %s\n", filename, previewPath);
- DEBUG("OpenPPT start: %u; %i, %i, %i, %i\n", hParentWnd, rect.top,
+ DEBUG(L"OpenPPT start: %s; %s\n", filename, previewPath);
+ DEBUG(L"OpenPPT start: %u; %i, %i, %i, %i\n", hParentWnd, rect.top,
rect.left, rect.bottom, rect.right);
if (GetPPTViewerPath(cmdLine, sizeof(cmdLine)) == FALSE)
{
- DEBUG("OpenPPT: GetPPTViewerPath failed\n");
+ DEBUG(L"OpenPPT: GetPPTViewerPath failed\n");
return -1;
}
id = -1;
@@ -133,12 +133,12 @@
}
if (id < 0)
{
- DEBUG("OpenPPT: Too many PPTs\n");
+ DEBUG(L"OpenPPT: Too many PPTs\n");
return -1;
}
memset(&pptView[id], 0, sizeof(PPTVIEW));
- strcpy_s(pptView[id].filename, MAX_PATH, filename);
- strcpy_s(pptView[id].previewPath, MAX_PATH, previewPath);
+ wcscpy_s(pptView[id].filename, MAX_PATH, filename);
+ wcscpy_s(pptView[id].previewPath, MAX_PATH, previewPath);
pptView[id].state = PPT_CLOSED;
pptView[id].slideCount = 0;
pptView[id].currentSlide = 0;
@@ -169,9 +169,9 @@
pptView[id].rect.bottom = rect.bottom;
pptView[id].rect.right = rect.right;
}
- strcat_s(cmdLine, MAX_PATH * 2, " /F /S \"");
- strcat_s(cmdLine, MAX_PATH * 2, filename);
- strcat_s(cmdLine, MAX_PATH * 2, "\"");
+ wcscat_s(cmdLine, MAX_PATH * 2, L" /F /S \"");
+ wcscat_s(cmdLine, MAX_PATH * 2, filename);
+ wcscat_s(cmdLine, MAX_PATH * 2, L"\"");
memset(&si, 0, sizeof(si));
memset(&pi, 0, sizeof(pi));
BOOL gotInfo = GetPPTInfo(id);
@@ -190,7 +190,7 @@
globalHook = SetWindowsHookEx(WH_CBT, CbtProc, hInstance, NULL);
if (globalHook == 0)
{
- DEBUG("OpenPPT: SetWindowsHookEx failed\n");
+ DEBUG(L"OpenPPT: SetWindowsHookEx failed\n");
ClosePPT(id);
return -1;
}
@@ -198,7 +198,7 @@
Sleep(10);
if (!CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, 0, 0, NULL, &si, &pi))
{
- DEBUG("OpenPPT: CreateProcess failed: %s\n", cmdLine);
+ DEBUG(L"OpenPPT: CreateProcess failed: %s\n", cmdLine);
ClosePPT(id);
return -1;
}
@@ -210,13 +210,13 @@
Sleep(10);
if (gotInfo)
{
- DEBUG("OpenPPT: Info loaded, no refresh\n");
+ DEBUG(L"OpenPPT: Info loaded, no refresh\n");
pptView[id].state = PPT_LOADED;
Resume(id);
}
else
{
- DEBUG("OpenPPT: Get info\n");
+ DEBUG(L"OpenPPT: Get info\n");
pptView[id].steps = 0;
int steps = 0;
while (pptView[id].state == PPT_OPENED)
@@ -224,18 +224,18 @@
if (steps <= pptView[id].steps)
{
Sleep(20);
- DEBUG("OpenPPT: Step %d/%d\n", steps, pptView[id].steps);
+ DEBUG(L"OpenPPT: Step %d/%d\n", steps, pptView[id].steps);
steps++;
NextStep(id);
}
Sleep(10);
}
- DEBUG("OpenPPT: Slides %d, Steps %d, first slide steps %d\n",
+ DEBUG(L"OpenPPT: Slides %d, Steps %d, first slide steps %d\n",
pptView[id].slideCount, pptView[id].steps,
pptView[id].firstSlideSteps);
for(int i = 1; i <= pptView[id].slideCount; i++)
{
- DEBUG("OpenPPT: Slide %d = %d\n", i, pptView[id].slideNos[i]);
+ DEBUG(L"OpenPPT: Slide %d = %d\n", i, pptView[id].slideNos[i]);
}
SavePPTInfo(id);
if (pptView[id].state == PPT_CLOSING
@@ -257,7 +257,7 @@
}
pptView[id].msgHook = NULL;
}
- DEBUG("OpenPPT: Exit: id=%i\n", id);
+ DEBUG(L"OpenPPT: Exit: id=%i\n", id);
return id;
}
// Load information about the ppt from an info.txt file.
@@ -270,75 +270,75 @@
BOOL GetPPTInfo(int id)
{
struct _stat fileStats;
- char info[MAX_PATH];
+ wchar_t info[MAX_PATH];
FILE* pFile;
- char buf[100];
+ wchar_t buf[100];
- DEBUG("GetPPTInfo: start\n");
- if (_stat(pptView[id].filename, &fileStats) != 0)
+ DEBUG(L"GetPPTInfo: start\n");
+ if (_wstat(pptView[id].filename, &fileStats) != 0)
{
return FALSE;
}
- sprintf_s(info, MAX_PATH, "%sinfo.txt", pptView[id].previewPath);
- int err = fopen_s(&pFile, info, "r");
+ swprintf_s(info, MAX_PATH, L"%sinfo.txt", pptView[id].previewPath);
+ int err = _wfopen_s(&pFile, info, L"r");
if (err != 0)
{
- DEBUG("GetPPTInfo: file open failed - %d\n", err);
- return FALSE;
- }
- fgets(buf, 100, pFile); // version == 1
- fgets(buf, 100, pFile);
- if (fileStats.st_mtime != atoi(buf))
- {
- DEBUG("GetPPTInfo: date changed\n");
- fclose (pFile);
- return FALSE;
- }
- fgets(buf, 100, pFile);
- if (fileStats.st_size != atoi(buf))
- {
- DEBUG("GetPPTInfo: size changed\n");
- fclose (pFile);
- return FALSE;
- }
- fgets(buf, 100, pFile); // slidecount
- int slideCount = atoi(buf);
- fgets(buf, 100, pFile); // first slide steps
- int firstSlideSteps = atoi(buf);
+ DEBUG(L"GetPPTInfo: file open failed - %d\n", err);
+ return FALSE;
+ }
+ fgetws(buf, 100, pFile); // version == 1
+ fgetws(buf, 100, pFile);
+ if (fileStats.st_mtime != _wtoi(buf))
+ {
+ DEBUG(L"GetPPTInfo: date changed\n");
+ fclose (pFile);
+ return FALSE;
+ }
+ fgetws(buf, 100, pFile);
+ if (fileStats.st_size != _wtoi(buf))
+ {
+ DEBUG(L"GetPPTInfo: size changed\n");
+ fclose (pFile);
+ return FALSE;
+ }
+ fgetws(buf, 100, pFile); // slidecount
+ int slideCount = _wtoi(buf);
+ fgetws(buf, 100, pFile); // first slide steps
+ int firstSlideSteps = _wtoi(buf);
// check all the preview images still exist
for (int i = 1; i <= slideCount; i++)
{
- sprintf_s(info, MAX_PATH, "%s%i.bmp", pptView[id].previewPath, i);
+ swprintf_s(info, MAX_PATH, L"%s%i.bmp", pptView[id].previewPath, i);
if (GetFileAttributes(info) == INVALID_FILE_ATTRIBUTES)
{
- DEBUG("GetPPTInfo: bmp not found\n");
+ DEBUG(L"GetPPTInfo: bmp not found\n");
return FALSE;
}
}
fclose(pFile);
pptView[id].slideCount = slideCount;
pptView[id].firstSlideSteps = firstSlideSteps;
- DEBUG("GetPPTInfo: exit ok\n");
+ DEBUG(L"GetPPTInfo: exit ok\n");
return TRUE;
}
BOOL SavePPTInfo(int id)
{
struct _stat fileStats;
- char info[MAX_PATH];
+ wchar_t info[MAX_PATH];
FILE* pFile;
- DEBUG("SavePPTInfo: start\n");
- if (_stat(pptView[id].filename, &fileStats) != 0)
+ DEBUG(L"SavePPTInfo: start\n");
+ if (_wstat(pptView[id].filename, &fileStats) != 0)
{
- DEBUG("SavePPTInfo: stat of %s failed\n", pptView[id].filename);
+ DEBUG(L"SavePPTInfo: stat of %s failed\n", pptView[id].filename);
return FALSE;
}
- sprintf_s(info, MAX_PATH, "%sinfo.txt", pptView[id].previewPath);
- int err = fopen_s(&pFile, info, "w");
+ swprintf_s(info, MAX_PATH, L"%sinfo.txt", pptView[id].previewPath);
+ int err = _wfopen_s(&pFile, info, L"w");
if (err != 0)
{
- DEBUG("SavePPTInfo: fopen of %s failed%i\n", info, err);
+ DEBUG(L"SavePPTInfo: fopen of %s failed%i\n", info, err);
return FALSE;
}
fprintf(pFile, "1\n");
@@ -347,21 +347,21 @@
fprintf(pFile, "%u\n", pptView[id].slideCount);
fprintf(pFile, "%u\n", pptView[id].firstSlideSteps);
fclose(pFile);
- DEBUG("SavePPTInfo: exit ok\n");
+ DEBUG(L"SavePPTInfo: exit ok\n");
return TRUE;
}
// Get the path of the PowerPoint viewer from the registry
-BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize)
+BOOL GetPPTViewerPath(wchar_t *pptViewerPath, int stringSize)
{
- char cwd[MAX_PATH];
+ wchar_t cwd[MAX_PATH];
- DEBUG("GetPPTViewerPath: start\n");
+ DEBUG(L"GetPPTViewerPath: start\n");
if(GetPPTViewerPathFromReg(pptViewerPath, stringSize))
{
- if(_access(pptViewerPath, 0) != -1)
+ if(_waccess(pptViewerPath, 0) != -1)
{
- DEBUG("GetPPTViewerPath: exit registry\n");
+ DEBUG(L"GetPPTViewerPath: exit registry\n");
return TRUE;
}
}
@@ -370,37 +370,37 @@
// upset those who like to put things somewhere else
// Viewer 2007 in 64bit Windows:
- if(_access("C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE",
+ if(_waccess(L"C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE",
0) != -1)
{
- strcpy_s(
- "C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE",
+ wcscpy_s(
+ L"C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE",
stringSize, pptViewerPath);
- DEBUG("GetPPTViewerPath: exit 64bit 2007\n");
+ DEBUG(L"GetPPTViewerPath: exit 64bit 2007\n");
return TRUE;
}
// Viewer 2007 in 32bit Windows:
- if(_access("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", 0)
+ if(_waccess(L"C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", 0)
!= -1)
{
- strcpy_s("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE",
+ wcscpy_s(L"C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE",
stringSize, pptViewerPath);
- DEBUG("GetPPTViewerPath: exit 32bit 2007\n");
+ DEBUG(L"GetPPTViewerPath: exit 32bit 2007\n");
return TRUE;
}
// Give them the opportunity to place it in the same folder as the app
- _getcwd(cwd, MAX_PATH);
- strcat_s(cwd, MAX_PATH, "\\PPTVIEW.EXE");
- if(_access(cwd, 0) != -1)
+ _wgetcwd(cwd, MAX_PATH);
+ wcscat_s(cwd, MAX_PATH, L"\\PPTVIEW.EXE");
+ if(_waccess(cwd, 0) != -1)
{
- strcpy_s(pptViewerPath, stringSize, cwd);
- DEBUG("GetPPTViewerPath: exit local\n");
+ wcscpy_s(pptViewerPath, stringSize, cwd);
+ DEBUG(L"GetPPTViewerPath: exit local\n");
return TRUE;
}
- DEBUG("GetPPTViewerPath: exit fail\n");
+ DEBUG(L"GetPPTViewerPath: exit fail\n");
return FALSE;
}
-BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize)
+BOOL GetPPTViewerPathFromReg(wchar_t *pptViewerPath, int stringSize)
{
HKEY hKey;
DWORD dwType, dwSize;
@@ -411,17 +411,17 @@
// PPT Viewer 2003 (recent versions)
// PPT Viewer 2003 (older versions)
// PPT Viewer 97
- if ((RegOpenKeyEx(HKEY_CLASSES_ROOT,
- "PowerPointViewer.Show.12\\shell\\Show\\command", 0, KEY_READ, &hKey)
- != ERROR_SUCCESS)
- && (RegOpenKeyEx(HKEY_CLASSES_ROOT,
- "PowerPointViewer.Show.11\\shell\\Show\\command", 0, KEY_READ, &hKey)
- != ERROR_SUCCESS)
- && (RegOpenKeyEx(HKEY_CLASSES_ROOT,
- "Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hKey)
- != ERROR_SUCCESS)
- && (RegOpenKeyEx(HKEY_CLASSES_ROOT,
- "Applications\\PPTVIEW.EXE\\shell\\Show\\command", 0, KEY_READ, &hKey)
+ if ((RegOpenKeyExW(HKEY_CLASSES_ROOT,
+ L"PowerPointViewer.Show.12\\shell\\Show\\command", 0, KEY_READ, &hKey)
+ != ERROR_SUCCESS)
+ && (RegOpenKeyExW(HKEY_CLASSES_ROOT,
+ L"PowerPointViewer.Show.11\\shell\\Show\\command", 0, KEY_READ, &hKey)
+ != ERROR_SUCCESS)
+ && (RegOpenKeyExW(HKEY_CLASSES_ROOT,
+ L"Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hKey)
+ != ERROR_SUCCESS)
+ && (RegOpenKeyExW(HKEY_CLASSES_ROOT,
+ L"Applications\\PPTVIEW.EXE\\shell\\Show\\command", 0, KEY_READ, &hKey)
!= ERROR_SUCCESS))
{
return FALSE;
@@ -436,14 +436,14 @@
return FALSE;
}
// remove "%1" from end of key value
- pptViewerPath[strlen(pptViewerPath) - 4] = '\0';
+ pptViewerPath[wcslen(pptViewerPath) - 4] = '\0';
return TRUE;
}
// Unhook the Windows hook
void Unhook(int id)
{
- DEBUG("Unhook: start %d\n", id);
+ DEBUG(L"Unhook: start %d\n", id);
if (pptView[id].hook != NULL)
{
UnhookWindowsHookEx(pptView[id].hook);
@@ -454,13 +454,13 @@
}
pptView[id].hook = NULL;
pptView[id].msgHook = NULL;
- DEBUG("Unhook: exit ok\n");
+ DEBUG(L"Unhook: exit ok\n");
}
// Close the PowerPoint viewer, release resources
DllExport void ClosePPT(int id)
{
- DEBUG("ClosePPT: start%d\n", id);
+ DEBUG(L"ClosePPT: start%d\n", id);
pptView[id].state = PPT_CLOSED;
Unhook(id);
if (pptView[id].hWnd == 0)
@@ -474,13 +474,13 @@
CloseHandle(pptView[id].hThread);
CloseHandle(pptView[id].hProcess);
memset(&pptView[id], 0, sizeof(PPTVIEW));
- DEBUG("ClosePPT: exit ok\n");
+ DEBUG(L"ClosePPT: exit ok\n");
return;
}
// Moves the show back onto the display
DllExport void Resume(int id)
{
- DEBUG("Resume: %d\n", id);
+ DEBUG(L"Resume: %d\n", id);
MoveWindow(pptView[id].hWnd, pptView[id].rect.left,
pptView[id].rect.top,
pptView[id].rect.right - pptView[id].rect.left,
@@ -490,7 +490,7 @@
// Moves the show off the screen so it can't be seen
DllExport void Stop(int id)
{
- DEBUG("Stop:%d\n", id);
+ DEBUG(L"Stop:%d\n", id);
MoveWindow(pptView[id].hWnd, -32000, -32000,
pptView[id].rect.right - pptView[id].rect.left,
pptView[id].rect.bottom - pptView[id].rect.top, TRUE);
@@ -499,7 +499,7 @@
// Return the total number of slides
DllExport int GetSlideCount(int id)
{
- DEBUG("GetSlideCount:%d\n", id);
+ DEBUG(L"GetSlideCount:%d\n", id);
if (pptView[id].state == 0)
{
return -1;
@@ -513,7 +513,7 @@
// Return the number of the slide currently viewing
DllExport int GetCurrentSlide(int id)
{
- DEBUG("GetCurrentSlide:%d\n", id);
+ DEBUG(L"GetCurrentSlide:%d\n", id);
if (pptView[id].state == 0)
{
return -1;
@@ -527,7 +527,7 @@
// Take a step forwards through the show
DllExport void NextStep(int id)
{
- DEBUG("NextStep:%d (%d)\n", id, pptView[id].currentSlide);
+ DEBUG(L"NextStep:%d (%d)\n", id, pptView[id].currentSlide);
if (pptView[id].currentSlide > pptView[id].slideCount) return;
if (pptView[id].currentSlide < pptView[id].slideCount)
{
@@ -540,7 +540,7 @@
// Take a step backwards through the show
DllExport void PrevStep(int id)
{
- DEBUG("PrevStep:%d (%d)\n", id, pptView[id].currentSlide);
+ DEBUG(L"PrevStep:%d (%d)\n", id, pptView[id].currentSlide);
if (pptView[id].currentSlide > 1)
{
pptView[id].guess = pptView[id].currentSlide - 1;
@@ -556,7 +556,7 @@
// So send random unmapped letter first (say 'A'), then we can
// better guarantee B will blank instead of trying to guess
// whether it was already blank or not.
- DEBUG("Blank:%d\n", id);
+ DEBUG(L"Blank:%d\n", id);
HWND h1 = GetForegroundWindow();
HWND h2 = GetFocus();
SetForegroundWindow(pptView[id].hWnd);
@@ -573,7 +573,7 @@
// Unblank the show
DllExport void Unblank(int id)
{
- DEBUG("Unblank:%d\n", id);
+ DEBUG(L"Unblank:%d\n", id);
// Pressing any key resumes.
// For some reason SendMessage works for unblanking, but not blanking.
SendMessage(pptView[id].hWnd2, WM_CHAR, 'A', 0);
@@ -582,7 +582,7 @@
// Go directly to a slide
DllExport void GotoSlide(int id, int slideNo)
{
- DEBUG("GotoSlide %i %i:\n", id, slideNo);
+ DEBUG(L"GotoSlide %i %i:\n", id, slideNo);
// Did try WM_KEYDOWN/WM_CHAR/WM_KEYUP with SendMessage but didn't work
// perhaps I was sending to the wrong window? No idea.
// Anyway fall back to keybd_event, which is OK as long we makesure
@@ -619,7 +619,7 @@
// Only way I've found to get around this is to step backwards all the way
// through. Lets move the window out of the way first so the audience
// doesn't see this.
- DEBUG("RestartShow:%d\n", id);
+ DEBUG(L"RestartShow:%d\n", id);
Stop(id);
GotoSlide(id, pptView[id].slideCount);
for (int i=0; i <= pptView[id].steps - pptView[id].lastSlideSteps; i++)
@@ -644,12 +644,12 @@
HHOOK hook = globalHook;
if (nCode == HCBT_CREATEWND)
{
- char csClassName[16];
+ wchar_t csClassName[32];
HWND hCurrWnd = (HWND)wParam;
DWORD retProcId = NULL;
GetClassName(hCurrWnd, csClassName, sizeof(csClassName));
- if ((strcmp(csClassName, "paneClassDC") == 0)
- ||(strcmp(csClassName, "screenClass") == 0))
+ if ((wcscmp(csClassName, L"paneClassDC") == 0)
+ ||(wcscmp(csClassName, L"screenClass") == 0))
{
int id = -1;
DWORD windowThread = GetWindowThreadProcessId(hCurrWnd, NULL);
@@ -663,7 +663,7 @@
}
if (id >= 0)
{
- if (strcmp(csClassName, "paneClassDC") == 0)
+ if (wcscmp(csClassName, L"paneClassDC") == 0)
{
pptView[id].hWnd2 = hCurrWnd;
}
@@ -737,7 +737,7 @@
CWPSTRUCT *cwp;
cwp = (CWPSTRUCT *)lParam;
HHOOK hook = NULL;
- char filename[MAX_PATH];
+ wchar_t filename[MAX_PATH];
DWORD windowThread = GetWindowThreadProcessId(cwp->hwnd, NULL);
int id = -1;
@@ -758,9 +758,9 @@
{
if ((pptView[id].currentSlide > 0)
&& (pptView[id].previewPath != NULL
- && strlen(pptView[id].previewPath) > 0))
+ && wcslen(pptView[id].previewPath) > 0))
{
- sprintf_s(filename, MAX_PATH, "%s%i.bmp",
+ swprintf_s(filename, MAX_PATH, L"%s%i.bmp",
pptView[id].previewPath,
pptView[id].currentSlide);
CaptureAndSaveWindow(cwp->hwnd, filename);
@@ -820,7 +820,7 @@
return CallNextHookEx(hook, nCode, wParam, lParam);
}
-VOID CaptureAndSaveWindow(HWND hWnd, CHAR* filename)
+VOID CaptureAndSaveWindow(HWND hWnd, wchar_t* filename)
{
HBITMAP hBmp;
if ((hBmp = CaptureWindow(hWnd)) == NULL)
@@ -863,7 +863,7 @@
// Writing:
FILE* pFile;
- int err = fopen_s(&pFile, filename, "wb");
+ int err = _wfopen_s(&pFile, filename, L"wb");
if (err == 0)
{
fwrite(&bmf, sizeof(bmf), 1, pFile);
@@ -893,7 +893,7 @@
if ((hMemDC = CreateCompatibleDC(hDC)) != NULL)
{
hDCBmp = (HBITMAP)SelectObject(hMemDC, hImage);
- HMODULE hLib = LoadLibrary("User32");
+ HMODULE hLib = LoadLibrary(L"User32");
// PrintWindow works for windows outside displayable area
// but was only introduced in WinXP. BitBlt requires the window to
// be topmost and within the viewable area of the display
=== modified file 'openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h'
--- openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h 2012-12-30 19:41:24 +0000
+++ openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h 2013-10-22 19:57:11 +0000
@@ -26,13 +26,13 @@
#define DllExport extern "C" __declspec( dllexport )
-#define DEBUG(...) if (debug) printf(__VA_ARGS__)
+#define DEBUG(...) if (debug) wprintf(__VA_ARGS__)
enum PPTVIEWSTATE {PPT_CLOSED, PPT_STARTED, PPT_OPENED, PPT_LOADED,
PPT_CLOSING};
-DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect,
- char *previewPath);
+DllExport int OpenPPT(wchar_t *filename, HWND hParentWnd, RECT rect,
+ wchar_t *previewPath);
DllExport BOOL CheckInstalled();
DllExport void ClosePPT(int id);
DllExport int GetCurrentSlide(int id);
@@ -50,11 +50,11 @@
LRESULT CALLBACK CbtProc(int nCode, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK CwpProc(int nCode, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam);
-BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize);
-BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize);
+BOOL GetPPTViewerPath(wchar_t *pptViewerPath, int stringSize);
+BOOL GetPPTViewerPathFromReg(wchar_t *pptViewerPath, int stringSize);
HBITMAP CaptureWindow(HWND hWnd);
-VOID SaveBitmap(CHAR* filename, HBITMAP hBmp) ;
-VOID CaptureAndSaveWindow(HWND hWnd, CHAR* filename);
+VOID SaveBitmap(wchar_t* filename, HBITMAP hBmp) ;
+VOID CaptureAndSaveWindow(HWND hWnd, wchar_t* filename);
BOOL GetPPTInfo(int id);
BOOL SavePPTInfo(int id);
void Unhook(int id);
@@ -80,8 +80,8 @@
int lastSlideSteps;
int steps;
int guess;
- char filename[MAX_PATH];
- char previewPath[MAX_PATH];
+ wchar_t filename[MAX_PATH];
+ wchar_t previewPath[MAX_PATH];
int slideNos[MAX_SLIDES];
PPTVIEWSTATE state;
};
=== modified file 'openlp/plugins/presentations/lib/pptviewlib/pptviewlib.vcproj'
--- openlp/plugins/presentations/lib/pptviewlib/pptviewlib.vcproj 2010-09-14 18:18:47 +0000
+++ openlp/plugins/presentations/lib/pptviewlib/pptviewlib.vcproj 2013-10-22 19:57:11 +0000
@@ -21,7 +21,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
- CharacterSet="2"
+ CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -93,7 +93,7 @@
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
- CharacterSet="2"
+ CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Follow ups