mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-11 23:54:18 +00:00
Call removeFromDesktop when an external host tries to remove a juce component from a window (Fixes #88)
This commit is contained in:
parent
1631daca26
commit
99186e5166
3 changed files with 27 additions and 2 deletions
|
|
@ -193,6 +193,15 @@ public:
|
|||
sharedPointer->clearPointer();
|
||||
}
|
||||
|
||||
/** Returns a raw pointer to the underlying object. */
|
||||
ObjectType* get() const noexcept
|
||||
{
|
||||
if (sharedPointer != nullptr)
|
||||
return sharedPointer->get();
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
SharedRef sharedPointer;
|
||||
|
||||
|
|
|
|||
|
|
@ -710,10 +710,13 @@ void Component::removeFromDesktop()
|
|||
ComponentPeer* const peer = ComponentPeer::getPeerFor (this);
|
||||
jassert (peer != nullptr);
|
||||
|
||||
flags.hasHeavyweightPeerFlag = false;
|
||||
delete peer;
|
||||
ScopedPointer<ComponentPeer> oldPeerToDelete (peer);
|
||||
|
||||
flags.hasHeavyweightPeerFlag = false;
|
||||
Desktop::getInstance().removeDesktopComponent (this);
|
||||
|
||||
if (masterReference.get() != nullptr)
|
||||
internalHierarchyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -672,6 +672,12 @@ public:
|
|||
void redirectPaste (NSObject*) { handleKeyPress (KeyPress ('v', ModifierKeys (ModifierKeys::commandModifier), 'v')); }
|
||||
void redirectCut (NSObject*) { handleKeyPress (KeyPress ('x', ModifierKeys (ModifierKeys::commandModifier), 'x')); }
|
||||
|
||||
void redirectWillMoveToWindow (NSWindow* newWindow)
|
||||
{
|
||||
if ([view window] == window && newWindow == nullptr)
|
||||
getComponent().removeFromDesktop();
|
||||
}
|
||||
|
||||
void sendMouseEvent (NSEvent* ev)
|
||||
{
|
||||
updateModifiers (ev);
|
||||
|
|
@ -1536,6 +1542,8 @@ struct JuceNSViewClass : public ObjCClass<NSView>
|
|||
addMethod (@selector (copy:), copy, "v@:@");
|
||||
addMethod (@selector (cut:), cut, "v@:@");
|
||||
|
||||
addMethod (@selector (viewWillMoveToWindow:), willMoveToWindow, "v@:@");
|
||||
|
||||
addProtocol (@protocol (NSTextInput));
|
||||
|
||||
registerClass();
|
||||
|
|
@ -1585,6 +1593,11 @@ private:
|
|||
static void paste (id self, SEL, NSObject* s) { if (NSViewComponentPeer* p = getOwner (self)) p->redirectPaste (s); }
|
||||
static void cut (id self, SEL, NSObject* s) { if (NSViewComponentPeer* p = getOwner (self)) p->redirectCut (s); }
|
||||
|
||||
static void willMoveToWindow (id self, SEL, NSWindow* window)
|
||||
{
|
||||
if (NSViewComponentPeer* p = getOwner (self)) p->redirectWillMoveToWindow (window);
|
||||
}
|
||||
|
||||
static BOOL acceptsFirstMouse (id, SEL, NSEvent*) { return YES; }
|
||||
static BOOL wantsDefaultClipping (id, SEL) { return YES; } // (this is the default, but may want to customise it in future)
|
||||
static BOOL worksWhenModal (id self, SEL) { if (NSViewComponentPeer* p = getOwner (self)) return p->worksWhenModal(); return NO; };
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue