1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-02-02 03:20:06 +00:00

WASAPI device list change fix. Changed Treeview to allow drag-and-drop onto its background. Minor clean-ups.

This commit is contained in:
Julian Storer 2011-06-23 19:42:44 +01:00
parent 59f78f4cbe
commit ecefeaa91e
21 changed files with 480 additions and 410 deletions

View file

@ -731,6 +731,12 @@ public:
return p->QueryInterface (classUUID, (void**) destObject.resetAndGetPointerAddress());
}
template <class OtherComClass>
HRESULT QueryInterface (ComSmartPtr<OtherComClass>& destObject) const
{
return this->QueryInterface (__uuidof (OtherComClass), destObject);
}
private:
ComClass* p;
@ -22781,12 +22787,9 @@ void AudioSubsectionReader::readMaxLevels (int64 startSampleInFile,
startSampleInFile = jmax ((int64) 0, startSampleInFile);
numSamples = jmax ((int64) 0, jmin (numSamples, length - startSampleInFile));
source->readMaxLevels (startSampleInFile + startSample,
numSamples,
lowestLeft,
highestLeft,
lowestRight,
highestRight);
source->readMaxLevels (startSampleInFile + startSample, numSamples,
lowestLeft, highestLeft,
lowestRight, highestRight);
}
END_JUCE_NAMESPACE
@ -23681,7 +23684,7 @@ END_JUCE_NAMESPACE
#include <ImageCodec.h>
#if JUCE_MSVC
#pragma warning (pop)
#pragma warning (pop)
#endif
#endif
@ -23708,10 +23711,11 @@ public:
JUCE_AUTORELEASEPOOL
bufferList.calloc (256, 1);
#if JUCE_WINDOWS
#if JUCE_WINDOWS
if (InitializeQTML (0) != noErr)
return;
#endif
#endif
if (EnterMovies() != noErr)
return;
@ -23845,9 +23849,9 @@ public:
DisposeMovie (movie);
#if JUCE_MAC
#if JUCE_MAC
ExitMoviesOnThread ();
#endif
#endif
}
bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer,
@ -23945,18 +23949,18 @@ private:
void checkThreadIsAttached()
{
#if JUCE_MAC
#if JUCE_MAC
if (Thread::getCurrentThreadId() != lastThreadId)
EnterMoviesOnThread (0);
AttachMovieToCurrentThread (movie);
#endif
#endif
}
void detachThread()
{
#if JUCE_MAC
#if JUCE_MAC
DetachMovieFromCurrentThread (movie);
#endif
#endif
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (QTAudioReader);
@ -29099,6 +29103,16 @@ END_JUCE_NAMESPACE
/*** Start of inlined file: juce_MidiOutput.cpp ***/
BEGIN_JUCE_NAMESPACE
struct MidiOutput::PendingMessage
{
PendingMessage (const void* const data, const int len, const double timeStamp)
: message (data, len, timeStamp)
{}
MidiMessage message;
PendingMessage* next;
};
MidiOutput::MidiOutput()
: Thread ("midi out"),
internal (nullptr),
@ -29106,11 +29120,6 @@ MidiOutput::MidiOutput()
{
}
MidiOutput::PendingMessage::PendingMessage (const void* const data, const int len, const double timeStamp)
: message (data, len, timeStamp)
{
}
void MidiOutput::sendBlockOfMessages (const MidiBuffer& buffer,
const double millisecondCounterToStartAt,
double samplesPerSecondForBuffer)
@ -29132,8 +29141,7 @@ void MidiOutput::sendBlockOfMessages (const MidiBuffer& buffer,
{
const double eventTime = millisecondCounterToStartAt + timeScaleFactor * time;
PendingMessage* const m
= new PendingMessage (data, len, eventTime);
PendingMessage* const m = new PendingMessage (data, len, eventTime);
const ScopedLock sl (lock);
@ -58644,7 +58652,7 @@ void TreeView::handleDrag (const StringArray& files, const SourceDetails& dragSo
if (item != nullptr)
{
if (scrolled || dragInsertPointHighlight == 0
if (scrolled || dragInsertPointHighlight == nullptr
|| dragInsertPointHighlight->lastItem != item
|| dragInsertPointHighlight->lastIndex != insertIndex)
{
@ -58666,7 +58674,13 @@ void TreeView::handleDrop (const StringArray& files, const SourceDetails& dragSo
hideDragHighlight();
int insertIndex, x, y;
TreeViewItem* const item = getInsertPosition (x, y, insertIndex, files, dragSourceDetails);
TreeViewItem* item = getInsertPosition (x, y, insertIndex, files, dragSourceDetails);
if (item == nullptr)
{
insertIndex = 0;
item = rootItem;
}
if (item != nullptr)
{
@ -61407,8 +61421,7 @@ public:
owner (owner_),
parentContentsList (parentContentsList_),
indexInContentsList (indexInContentsList_),
subContentsList (nullptr),
canDeleteSubContentsList (false),
subContentsList (nullptr, false),
thread (thread_)
{
DirectoryContentsList::FileInfo fileInfo;
@ -61429,11 +61442,7 @@ public:
~FileListTreeItem()
{
thread.removeTimeSliceClient (this);
clearSubItems();
if (canDeleteSubContentsList)
delete subContentsList;
}
bool mightContainSubItems() { return isDirectory; }
@ -61459,8 +61468,7 @@ public:
DirectoryContentsList* const l = new DirectoryContentsList (parentContentsList->getFilter(), thread);
l->setDirectory (file, true, true);
setSubContentsList (l);
canDeleteSubContentsList = true;
setSubContentsList (l, true);
}
changeListenerCallback (nullptr);
@ -61468,10 +61476,10 @@ public:
}
}
void setSubContentsList (DirectoryContentsList* newList)
void setSubContentsList (DirectoryContentsList* newList, const bool canDeleteList)
{
jassert (subContentsList == nullptr);
subContentsList = newList;
OptionalScopedPointer<DirectoryContentsList> newPointer (newList, canDeleteList);
subContentsList = newPointer;
newList->addChangeListener (this);
}
@ -61543,8 +61551,8 @@ private:
FileTreeComponent& owner;
DirectoryContentsList* parentContentsList;
int indexInContentsList;
DirectoryContentsList* subContentsList;
bool isDirectory, canDeleteSubContentsList;
OptionalScopedPointer<DirectoryContentsList> subContentsList;
bool isDirectory;
TimeSliceThread& thread;
Image icon;
String fileSize;
@ -61583,7 +61591,7 @@ FileTreeComponent::FileTreeComponent (DirectoryContentsList& listToShow)
= new FileListTreeItem (*this, 0, 0, listToShow.getDirectory(),
listToShow.getTimeSliceThread());
root->setSubContentsList (&listToShow);
root->setSubContentsList (&listToShow, false);
setRootItemVisible (false);
setRootItem (root);
}
@ -245951,7 +245959,7 @@ File File::getLinkedTarget() const
if (SUCCEEDED (shellLink.CoCreateInstance (CLSID_ShellLink)))
{
ComSmartPtr <IPersistFile> persistFile;
if (SUCCEEDED (shellLink.QueryInterface (IID_IPersistFile, persistFile)))
if (SUCCEEDED (shellLink.QueryInterface (persistFile)))
{
if (SUCCEEDED (persistFile->Load (p.toWideCharPointer(), STGM_READ))
&& SUCCEEDED (shellLink->Resolve (0, SLR_ANY_MATCH | SLR_NO_UI)))
@ -246767,12 +246775,9 @@ namespace
{
HKEY rootKey = 0;
if (name.startsWithIgnoreCase ("HKEY_CURRENT_USER\\"))
rootKey = HKEY_CURRENT_USER;
else if (name.startsWithIgnoreCase ("HKEY_LOCAL_MACHINE\\"))
rootKey = HKEY_LOCAL_MACHINE;
else if (name.startsWithIgnoreCase ("HKEY_CLASSES_ROOT\\"))
rootKey = HKEY_CLASSES_ROOT;
if (name.startsWithIgnoreCase ("HKEY_CURRENT_USER\\")) rootKey = HKEY_CURRENT_USER;
else if (name.startsWithIgnoreCase ("HKEY_LOCAL_MACHINE\\")) rootKey = HKEY_LOCAL_MACHINE;
else if (name.startsWithIgnoreCase ("HKEY_CLASSES_ROOT\\")) rootKey = HKEY_CLASSES_ROOT;
if (rootKey != 0)
{
@ -246915,10 +246920,9 @@ bool juce_IsRunningInWine()
String JUCE_CALLTYPE PlatformUtilities::getCurrentCommandLineParams()
{
const String commandLine (GetCommandLineW());
return String (CharacterFunctions::findEndOfToken (commandLine.getCharPointer(),
String (" ").getCharPointer(),
String ("\"").getCharPointer())).trimStart();
return String (CharacterFunctions::findEndOfToken (CharPointer_UTF16 (GetCommandLineW()),
CharPointer_UTF16 (L" "),
CharPointer_UTF16 (L"\""))).trimStart();
}
static void* currentModuleHandle = nullptr;
@ -246999,120 +247003,160 @@ private:
LPCTSTR getClassNameFromAtom() noexcept { return (LPCTSTR) MAKELONG (atom, 0); }
};
static const unsigned int specialId = WM_APP + 0x4400;
static const unsigned int broadcastId = WM_APP + 0x4403;
static const unsigned int specialCallbackId = WM_APP + 0x4402;
HWND juce_messageWindowHandle = 0; // (this is referred to by other parts of the codebase)
static const TCHAR messageWindowName[] = _T("JUCEWindow");
static ScopedPointer<HiddenMessageWindow> messageWindow;
HWND juce_messageWindowHandle = 0;
extern long improbableWindowNumber; // defined in windowing.cpp
static LRESULT CALLBACK juce_MessageWndProc (HWND h,
const UINT message,
const WPARAM wParam,
const LPARAM lParam) noexcept
class JuceWindowIdentifier
{
JUCE_TRY
public:
static bool isJUCEWindow (HWND hwnd) noexcept
{
if (h == juce_messageWindowHandle)
return GetWindowLong (hwnd, GWLP_USERDATA) == improbableWindowNumber;
}
static void setAsJUCEWindow (HWND hwnd, bool isJuceWindow) noexcept
{
SetWindowLongPtr (hwnd, GWLP_USERDATA, isJuceWindow ? improbableWindowNumber : 0);
}
private:
enum { improbableWindowNumber = 0xf965aa01 };
};
namespace WindowsMessageHelpers
{
const unsigned int specialId = WM_APP + 0x4400;
const unsigned int broadcastId = WM_APP + 0x4403;
const unsigned int specialCallbackId = WM_APP + 0x4402;
const TCHAR messageWindowName[] = _T("JUCEWindow");
ScopedPointer<HiddenMessageWindow> messageWindow;
LRESULT CALLBACK messageWndProc (HWND h, const UINT message, const WPARAM wParam, const LPARAM lParam) noexcept
{
JUCE_TRY
{
if (message == specialCallbackId)
if (h == juce_messageWindowHandle)
{
MessageCallbackFunction* const func = (MessageCallbackFunction*) wParam;
return (LRESULT) (*func) ((void*) lParam);
}
else if (message == specialId)
{
// these are trapped early in the dispatch call, but must also be checked
// here in case there are windows modal dialog boxes doing their own
// dispatch loop and not calling our version
if (message == specialCallbackId)
{
MessageCallbackFunction* const func = (MessageCallbackFunction*) wParam;
return (LRESULT) (*func) ((void*) lParam);
}
else if (message == specialId)
{
// these are trapped early in the dispatch call, but must also be checked
// here in case there are windows modal dialog boxes doing their own
// dispatch loop and not calling our version
Message* const message = reinterpret_cast <Message*> (lParam);
MessageManager::getInstance()->deliverMessage (message);
message->decReferenceCount();
return 0;
}
else if (message == broadcastId)
{
const ScopedPointer <String> messageString ((String*) lParam);
MessageManager::getInstance()->deliverBroadcastMessage (*messageString);
return 0;
}
else if (message == WM_COPYDATA && ((const COPYDATASTRUCT*) lParam)->dwData == broadcastId)
{
const COPYDATASTRUCT* data = (COPYDATASTRUCT*) lParam;
Message* const message = reinterpret_cast <Message*> (lParam);
MessageManager::getInstance()->deliverMessage (message);
message->decReferenceCount();
return 0;
}
else if (message == broadcastId)
{
const ScopedPointer <String> messageString ((String*) lParam);
MessageManager::getInstance()->deliverBroadcastMessage (*messageString);
return 0;
}
else if (message == WM_COPYDATA && ((const COPYDATASTRUCT*) lParam)->dwData == broadcastId)
{
const COPYDATASTRUCT* data = (COPYDATASTRUCT*) lParam;
const String messageString (CharPointer_UTF32 ((const CharPointer_UTF32::CharType*) data->lpData),
data->cbData / sizeof (CharPointer_UTF32::CharType));
const String messageString (CharPointer_UTF32 ((const CharPointer_UTF32::CharType*) data->lpData),
data->cbData / sizeof (CharPointer_UTF32::CharType));
PostMessage (juce_messageWindowHandle, broadcastId, 0, (LPARAM) new String (messageString));
return 0;
PostMessage (juce_messageWindowHandle, broadcastId, 0, (LPARAM) new String (messageString));
return 0;
}
}
}
JUCE_CATCH_EXCEPTION
return DefWindowProc (h, message, wParam, lParam);
}
JUCE_CATCH_EXCEPTION
return DefWindowProc (h, message, wParam, lParam);
}
bool isHWNDBlockedByModalComponents (HWND h) noexcept
{
for (int i = Desktop::getInstance().getNumComponents(); --i >= 0;)
{
Component* const c = Desktop::getInstance().getComponent (i);
if (c != nullptr
&& (! c->isCurrentlyBlockedByAnotherModalComponent())
&& IsChild ((HWND) c->getWindowHandle(), h))
return false;
}
return true;
}
bool isEventBlockedByModalComps (MSG& m)
{
if (Component::getNumCurrentlyModalComponents() == 0 || JuceWindowIdentifier::isJUCEWindow (m.hwnd))
return false;
switch (m.message)
{
case WM_MOUSEMOVE:
case WM_NCMOUSEMOVE:
case 0x020A: /* WM_MOUSEWHEEL */
case 0x020E: /* WM_MOUSEHWHEEL */
case WM_KEYUP:
case WM_SYSKEYUP:
case WM_CHAR:
case WM_APPCOMMAND:
case WM_LBUTTONUP:
case WM_MBUTTONUP:
case WM_RBUTTONUP:
case WM_MOUSEACTIVATE:
case WM_NCMOUSEHOVER:
case WM_MOUSEHOVER:
return isHWNDBlockedByModalComponents (m.hwnd);
case WM_NCLBUTTONDOWN:
case WM_NCLBUTTONDBLCLK:
case WM_NCRBUTTONDOWN:
case WM_NCRBUTTONDBLCLK:
case WM_NCMBUTTONDOWN:
case WM_NCMBUTTONDBLCLK:
case WM_LBUTTONDOWN:
case WM_LBUTTONDBLCLK:
case WM_MBUTTONDOWN:
case WM_MBUTTONDBLCLK:
case WM_RBUTTONDOWN:
case WM_RBUTTONDBLCLK:
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
if (isHWNDBlockedByModalComponents (m.hwnd))
{
Component* const modal = Component::getCurrentlyModalComponent (0);
if (modal != nullptr)
modal->inputAttemptWhenModal();
return true;
}
break;
default:
break;
}
static bool isEventBlockedByModalComps (MSG& m)
{
if (Component::getNumCurrentlyModalComponents() == 0
|| GetWindowLong (m.hwnd, GWLP_USERDATA) == improbableWindowNumber)
return false;
switch (m.message)
{
case WM_MOUSEMOVE:
case WM_NCMOUSEMOVE:
case 0x020A: /* WM_MOUSEWHEEL */
case 0x020E: /* WM_MOUSEHWHEEL */
case WM_KEYUP:
case WM_SYSKEYUP:
case WM_CHAR:
case WM_APPCOMMAND:
case WM_LBUTTONUP:
case WM_MBUTTONUP:
case WM_RBUTTONUP:
case WM_MOUSEACTIVATE:
case WM_NCMOUSEHOVER:
case WM_MOUSEHOVER:
return true;
case WM_NCLBUTTONDOWN:
case WM_NCLBUTTONDBLCLK:
case WM_NCRBUTTONDOWN:
case WM_NCRBUTTONDBLCLK:
case WM_NCMBUTTONDOWN:
case WM_NCMBUTTONDBLCLK:
case WM_LBUTTONDOWN:
case WM_LBUTTONDBLCLK:
case WM_MBUTTONDOWN:
case WM_MBUTTONDBLCLK:
case WM_RBUTTONDOWN:
case WM_RBUTTONDBLCLK:
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
{
Component* const modal = Component::getCurrentlyModalComponent (0);
if (modal != nullptr)
modal->inputAttemptWhenModal();
return true;
}
default:
break;
}
return false;
BOOL CALLBACK broadcastEnumWindowProc (HWND hwnd, LPARAM lParam)
{
if (hwnd != juce_messageWindowHandle)
reinterpret_cast <Array<HWND>*> (lParam)->add (hwnd);
return TRUE;
}
}
bool MessageManager::dispatchNextMessageOnSystemQueue (const bool returnIfNoPendingMessages)
{
using namespace WindowsMessageHelpers;
MSG m;
if (returnIfNoPendingMessages && ! PeekMessage (&m, (HWND) 0, 0, 0, 0))
@ -247131,16 +247175,16 @@ bool MessageManager::dispatchNextMessageOnSystemQueue (const bool returnIfNoPend
if (JUCEApplication::getInstance() != nullptr)
JUCEApplication::getInstance()->systemRequestedQuit();
}
else if (! isEventBlockedByModalComps (m))
else if (! WindowsMessageHelpers::isEventBlockedByModalComps (m))
{
if ((m.message == WM_LBUTTONDOWN || m.message == WM_RBUTTONDOWN)
&& GetWindowLong (m.hwnd, GWLP_USERDATA) != improbableWindowNumber)
&& ! JuceWindowIdentifier::isJUCEWindow (m.hwnd))
{
// if it's someone else's window being clicked on, and the focus is
// currently on a juce window, pass the kb focus over..
HWND currentFocus = GetFocus();
if (currentFocus == 0 || GetWindowLong (currentFocus, GWLP_USERDATA) == improbableWindowNumber)
if (currentFocus == 0 || JuceWindowIdentifier::isJUCEWindow (currentFocus))
SetFocus (m.hwnd);
}
@ -247155,7 +247199,7 @@ bool MessageManager::dispatchNextMessageOnSystemQueue (const bool returnIfNoPend
bool MessageManager::postMessageToSystemQueue (Message* message)
{
message->incReferenceCount();
return PostMessage (juce_messageWindowHandle, specialId, 0, (LPARAM) message) != 0;
return PostMessage (juce_messageWindowHandle, WindowsMessageHelpers::specialId, 0, (LPARAM) message) != 0;
}
void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* callback,
@ -247173,29 +247217,21 @@ void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* call
jassert (! MessageManager::getInstance()->currentThreadHasLockedMessageManager());
return (void*) SendMessage (juce_messageWindowHandle,
specialCallbackId,
WindowsMessageHelpers::specialCallbackId,
(WPARAM) callback,
(LPARAM) userData);
}
}
static BOOL CALLBACK broadcastEnumWindowProc (HWND hwnd, LPARAM lParam)
{
if (hwnd != juce_messageWindowHandle)
reinterpret_cast <Array<HWND>*> (lParam)->add (hwnd);
return TRUE;
}
void MessageManager::broadcastMessage (const String& value)
{
Array<HWND> windows;
EnumWindows (&broadcastEnumWindowProc, (LPARAM) &windows);
EnumWindows (&WindowsMessageHelpers::broadcastEnumWindowProc, (LPARAM) &windows);
const String localCopy (value);
COPYDATASTRUCT data;
data.dwData = broadcastId;
data.dwData = WindowsMessageHelpers::broadcastId;
data.cbData = (localCopy.length() + 1) * sizeof (CharPointer_UTF32::CharType);
data.lpData = (void*) localCopy.toUTF32().getAddress();
@ -247207,7 +247243,7 @@ void MessageManager::broadcastMessage (const String& value)
GetWindowText (hwnd, windowName, 64);
windowName [63] = 0;
if (String (windowName) == messageWindowName)
if (String (windowName) == WindowsMessageHelpers::messageWindowName)
{
DWORD_PTR result;
SendMessageTimeout (hwnd, WM_COPYDATA,
@ -247222,13 +247258,14 @@ void MessageManager::doPlatformSpecificInitialisation()
{
OleInitialize (0);
messageWindow = new HiddenMessageWindow (messageWindowName, (WNDPROC) juce_MessageWndProc);
using namespace WindowsMessageHelpers;
messageWindow = new HiddenMessageWindow (messageWindowName, (WNDPROC) messageWndProc);
juce_messageWindowHandle = messageWindow->getHWND();
}
void MessageManager::doPlatformSpecificShutdown()
{
messageWindow = nullptr;
WindowsMessageHelpers::messageWindow = nullptr;
OleUninitialize();
}
@ -248898,8 +248935,6 @@ namespace IconConverters
}
}
long improbableWindowNumber = 0xf965aa01; // also referenced by messaging.cpp
class Win32ComponentPeer : public ComponentPeer
{
public:
@ -248946,7 +248981,7 @@ public:
// do this before the next bit to avoid messages arriving for this window
// before it's destroyed
SetWindowLongPtr (hwnd, GWLP_USERDATA, 0);
JuceWindowIdentifier::setAsJUCEWindow (hwnd, false);
callFunctionIfNotLocked (&destroyWindowCallback, (void*) hwnd);
@ -249297,7 +249332,7 @@ public:
static Win32ComponentPeer* getOwnerOfWindow (HWND h) noexcept
{
if (h != 0 && GetWindowLongPtr (h, GWLP_USERDATA) == improbableWindowNumber)
if (h != 0 && JuceWindowIdentifier::isJUCEWindow (h))
return (Win32ComponentPeer*) (pointer_sized_int) GetWindowLongPtr (h, 8);
return nullptr;
@ -249610,7 +249645,7 @@ private:
{
SetWindowLongPtr (hwnd, 0, 0);
SetWindowLongPtr (hwnd, 8, (LONG_PTR) this);
SetWindowLongPtr (hwnd, GWLP_USERDATA, improbableWindowNumber);
JuceWindowIdentifier::setAsJUCEWindow (hwnd, true);
if (dropTarget == nullptr)
dropTarget = new JuceDropTarget (this);
@ -252123,8 +252158,6 @@ namespace ActiveXHelpers
class JuceOleInPlaceFrame : public ComBaseClassHelper <IOleInPlaceFrame>
{
HWND window;
public:
JuceOleInPlaceFrame (HWND window_) : window (window_) {}
@ -252139,14 +252172,14 @@ namespace ActiveXHelpers
HRESULT __stdcall RemoveMenus (HMENU) { return E_NOTIMPL; }
HRESULT __stdcall SetStatusText (LPCOLESTR) { return S_OK; }
HRESULT __stdcall EnableModeless (BOOL) { return S_OK; }
HRESULT __stdcall TranslateAccelerator(LPMSG, WORD) { return E_NOTIMPL; }
HRESULT __stdcall TranslateAccelerator (LPMSG, WORD) { return E_NOTIMPL; }
private:
HWND window;
};
class JuceIOleInPlaceSite : public ComBaseClassHelper <IOleInPlaceSite>
{
HWND window;
JuceOleInPlaceFrame* frame;
public:
JuceIOleInPlaceSite (HWND window_)
: window (window_),
@ -252184,12 +252217,14 @@ namespace ActiveXHelpers
HRESULT __stdcall DiscardUndoState() { return E_NOTIMPL; }
HRESULT __stdcall DeactivateAndUndo() { return E_NOTIMPL; }
HRESULT __stdcall OnPosRectChange (LPCRECT) { return S_OK; }
private:
HWND window;
JuceOleInPlaceFrame* frame;
};
class JuceIOleClientSite : public ComBaseClassHelper <IOleClientSite>
{
JuceIOleInPlaceSite* inplaceSite;
public:
JuceIOleClientSite (HWND window)
: inplaceSite (new JuceIOleInPlaceSite (window))
@ -252218,11 +252253,14 @@ namespace ActiveXHelpers
HRESULT __stdcall ShowObject() { return S_OK; }
HRESULT __stdcall OnShowWindow (BOOL) { return E_NOTIMPL; }
HRESULT __stdcall RequestNewObjectLayout() { return E_NOTIMPL; }
private:
JuceIOleInPlaceSite* inplaceSite;
};
static Array<ActiveXControlComponent*> activeXComps;
static HWND getHWND (const ActiveXControlComponent* const component)
HWND getHWND (const ActiveXControlComponent* const component)
{
HWND hwnd = 0;
@ -252238,7 +252276,7 @@ namespace ActiveXHelpers
return hwnd;
}
static void offerActiveXMouseEventToPeer (ComponentPeer* const peer, HWND hwnd, UINT message, LPARAM lParam)
void offerActiveXMouseEventToPeer (ComponentPeer* const peer, HWND hwnd, UINT message, LPARAM lParam)
{
RECT activeXRect, peerRect;
GetWindowRect (hwnd, &activeXRect);
@ -252278,7 +252316,7 @@ public:
controlHWND (0),
storage (new ActiveXHelpers::JuceIStorage()),
clientSite (new ActiveXHelpers::JuceIOleClientSite (hwnd)),
control (0)
control (nullptr)
{
}
@ -252555,7 +252593,7 @@ void QuickTimeMovieComponent::createControlIfNeeded()
const IID qtInterfaceIID = __uuidof (IQTControl);
pimpl->qtControl = (IQTControl*) queryInterface (&qtInterfaceIID);
if (pimpl->qtControl != 0)
if (pimpl->qtControl != nullptr)
{
pimpl->qtControl->Release(); // it has one ref too many at this point
@ -252979,13 +253017,13 @@ namespace DirectShowHelpers
hr = graphBuilder->AddFilter (baseFilter, L"VMR-7");
if (SUCCEEDED (hr))
hr = baseFilter.QueryInterface (IID_IVMRFilterConfig, filterConfig);
hr = baseFilter.QueryInterface (filterConfig);
if (SUCCEEDED (hr))
hr = filterConfig->SetRenderingMode (VMRMode_Windowless);
if (SUCCEEDED (hr))
hr = baseFilter.QueryInterface (IID_IVMRWindowlessControl, windowlessControl);
hr = baseFilter.QueryInterface (windowlessControl);
if (SUCCEEDED (hr))
hr = windowlessControl->SetVideoClippingWindow (hwnd);
@ -253049,7 +253087,7 @@ namespace DirectShowHelpers
hr = graphBuilder->AddFilter (baseFilter, L"EVR");
if (SUCCEEDED (hr))
hr = baseFilter.QueryInterface (IID_IMFGetService, getService);
hr = baseFilter.QueryInterface (getService);
if (SUCCEEDED (hr))
hr = getService->GetService (MR_VIDEO_RENDER_SERVICE, IID_IMFVideoDisplayControl,
@ -253193,10 +253231,10 @@ public:
HRESULT hr = graphBuilder.CoCreateInstance (CLSID_FilterGraph);
// basic playback interfaces
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (IID_IMediaControl, mediaControl);
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (IID_IMediaPosition, mediaPosition);
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (IID_IMediaEventEx, mediaEvent);
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (IID_IBasicAudio, basicAudio);
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (mediaControl);
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (mediaPosition);
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (mediaEvent);
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (basicAudio);
// video renderer interface
if (SUCCEEDED (hr))
@ -260009,7 +260047,7 @@ EDataFlow getDataFlow (const ComSmartPtr<IMMDevice>& device)
{
EDataFlow flow = eRender;
ComSmartPtr <IMMEndpoint> endPoint;
if (check (device.QueryInterface (__uuidof (IMMEndpoint), endPoint)))
if (check (device.QueryInterface (endPoint)))
(void) check (endPoint->GetDataFlow (&flow));
return flow;
@ -261017,7 +261055,8 @@ private:
{
if (message == WM_DEVICECHANGE
&& (wParam == 0x8000 /*DBT_DEVICEARRIVAL*/
|| wParam == 0x8004 /*DBT_DEVICEREMOVECOMPLETE*/))
|| wParam == 0x8004 /*DBT_DEVICEREMOVECOMPLETE*/
|| wParam == 0x0007 /*DBT_DEVNODES_CHANGED*/))
{
((WASAPIAudioIODeviceType*) GetWindowLongPtr (h, GWLP_USERDATA))->handleDeviceChange();
}
@ -261095,7 +261134,7 @@ public:
if (FAILED (hr))
return;
hr = graphBuilder.QueryInterface (IID_IMediaControl, mediaControl);
hr = graphBuilder.QueryInterface (mediaControl);
if (FAILED (hr))
return;
@ -261134,7 +261173,7 @@ public:
if (FAILED (hr))
return;
hr = sampleGrabberBase.QueryInterface (IID_ISampleGrabber, sampleGrabber);
hr = sampleGrabberBase.QueryInterface (sampleGrabber);
if (FAILED (hr))
return;
@ -261235,7 +261274,7 @@ public:
if (getPin (filter, PINDIR_OUTPUT, pin))
{
ComSmartPtr <IAMPushSource> pushSource;
HRESULT hr = pin.QueryInterface (IID_IAMPushSource, pushSource);
HRESULT hr = pin.QueryInterface (pushSource);
if (pushSource != nullptr)
{
@ -261308,7 +261347,7 @@ public:
if (SUCCEEDED (hr))
{
ComSmartPtr <IFileSinkFilter> fileSink;
hr = asfWriter.QueryInterface (IID_IFileSinkFilter, fileSink);
hr = asfWriter.QueryInterface (fileSink);
if (SUCCEEDED (hr))
{
@ -261321,7 +261360,7 @@ public:
if (SUCCEEDED (hr))
{
ComSmartPtr <IConfigAsfWriter> asfConfig;
hr = asfWriter.QueryInterface (IID_IConfigAsfWriter, asfConfig);
hr = asfWriter.QueryInterface (asfConfig);
asfConfig->SetIndexMode (true);
ComSmartPtr <IWMProfileManager> profileManager;
hr = WMCreateProfileManager (profileManager.resetAndGetPointerAddress());
@ -276747,7 +276786,7 @@ struct MessageDispatchSystem
MessageQueue messageQueue;
};
static MessageDispatchSystem* dispatcher = nullptr;
static ScopedPointer<MessageDispatchSystem> dispatcher;
void MessageManager::doPlatformSpecificInitialisation()
{
@ -276757,7 +276796,7 @@ void MessageManager::doPlatformSpecificInitialisation()
void MessageManager::doPlatformSpecificShutdown()
{
deleteAndZero (dispatcher);
dispatcher = nullptr;
}
bool MessageManager::postMessageToSystemQueue (Message* message)