Browse Source

Fix for win32 drag-and-drop on GL components.

tags/2021-05-28
jules 12 years ago
parent
commit
fa941156c2
1 changed files with 20 additions and 10 deletions
  1. +20
    -10
      modules/juce_gui_basics/native/juce_win32_Windowing.cpp

+ 20
- 10
modules/juce_gui_basics/native/juce_win32_Windowing.cpp View File

@@ -467,9 +467,9 @@ public:
}; };
//============================================================================== //==============================================================================
HWNDComponentPeer (Component& comp, const int windowStyleFlags, HWND parentToAddTo_)
HWNDComponentPeer (Component& comp, const int windowStyleFlags, HWND parent, bool nonRepainting)
: ComponentPeer (comp, windowStyleFlags), : ComponentPeer (comp, windowStyleFlags),
dontRepaint (false),
dontRepaint (nonRepainting),
currentRenderingEngine (softwareRenderingEngine), currentRenderingEngine (softwareRenderingEngine),
lastPaintTime (0), lastPaintTime (0),
fullScreen (false), fullScreen (false),
@@ -479,7 +479,7 @@ public:
constrainerIsResizing (false), constrainerIsResizing (false),
currentWindowIcon (0), currentWindowIcon (0),
dropTarget (nullptr), dropTarget (nullptr),
parentToAddTo (parentToAddTo_),
parentToAddTo (parent),
updateLayeredWindowAlpha (255) updateLayeredWindowAlpha (255)
{ {
callFunctionIfNotLocked (&createWindowCallback, this); callFunctionIfNotLocked (&createWindowCallback, this);
@@ -903,7 +903,7 @@ public:
class JuceDropTarget : public ComBaseClassHelper <IDropTarget> class JuceDropTarget : public ComBaseClassHelper <IDropTarget>
{ {
public: public:
JuceDropTarget (HWNDComponentPeer& owner_) : ownerInfo (new OwnerInfo (owner_)) {}
JuceDropTarget (HWNDComponentPeer& p) : ownerInfo (new OwnerInfo (p)) {}
void clear() void clear()
{ {
@@ -956,7 +956,7 @@ public:
private: private:
struct OwnerInfo struct OwnerInfo
{ {
OwnerInfo (HWNDComponentPeer& owner_) : owner (owner_) {}
OwnerInfo (HWNDComponentPeer& p) : owner (p) {}
Point<int> getMousePos (const POINTL& mousePos) const Point<int> getMousePos (const POINTL& mousePos) const
{ {
@@ -1282,7 +1282,17 @@ private:
JuceWindowIdentifier::setAsJUCEWindow (hwnd, true); JuceWindowIdentifier::setAsJUCEWindow (hwnd, true);
if (dropTarget == nullptr) if (dropTarget == nullptr)
dropTarget = new JuceDropTarget (*this);
{
HWNDComponentPeer* peer = nullptr;
if (dontRepaint)
peer = getOwnerOfWindow (parentToAddTo);
if (peer == nullptr)
peer = this;
dropTarget = new JuceDropTarget (*peer);
}
RegisterDragDrop (hwnd, dropTarget); RegisterDragDrop (hwnd, dropTarget);
@@ -2689,16 +2699,16 @@ ModifierKeys HWNDComponentPeer::modifiersAtLastCallback;
ComponentPeer* Component::createNewPeer (int styleFlags, void* nativeWindowToAttachTo) ComponentPeer* Component::createNewPeer (int styleFlags, void* nativeWindowToAttachTo)
{ {
return new HWNDComponentPeer (*this, styleFlags, (HWND) nativeWindowToAttachTo);
return new HWNDComponentPeer (*this, styleFlags,
(HWND) nativeWindowToAttachTo, false);
} }
ComponentPeer* createNonRepaintingEmbeddedWindowsPeer (Component* component, void* parent) ComponentPeer* createNonRepaintingEmbeddedWindowsPeer (Component* component, void* parent)
{ {
jassert (component != nullptr); jassert (component != nullptr);
HWNDComponentPeer* const p = new HWNDComponentPeer (*component, ComponentPeer::windowIgnoresMouseClicks, (HWND) parent);
p->dontRepaint = true;
return p;
return new HWNDComponentPeer (*component, ComponentPeer::windowIgnoresMouseClicks,
(HWND) parent, true);
} }


Loading…
Cancel
Save