summaryrefslogtreecommitdiff
path: root/indra/llplugin/slplugin/slplugin-objc.mm
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llplugin/slplugin/slplugin-objc.mm')
-rw-r--r--indra/llplugin/slplugin/slplugin-objc.mm101
1 files changed, 98 insertions, 3 deletions
diff --git a/indra/llplugin/slplugin/slplugin-objc.mm b/indra/llplugin/slplugin/slplugin-objc.mm
index 646416b9d2..a434739350 100644
--- a/indra/llplugin/slplugin/slplugin-objc.mm
+++ b/indra/llplugin/slplugin/slplugin-objc.mm
@@ -30,11 +30,13 @@
#include <AppKit/AppKit.h>
+#import <Cocoa/Cocoa.h>
#include "slplugin-objc.h"
+//Note: NSApp is a global defined by cocoa which is an id to the application.
-void setupCocoa()
+void LLCocoaPlugin::setupCocoa()
{
static bool inited = false;
@@ -56,6 +58,8 @@ void setupCocoa()
// Must first call [[[NSWindow alloc] init] release] to get the NSWindow machinery set up so that NSCursor can use a window to cache the cursor image
[[[NSWindow alloc] init] release];
+ mPluginWindow = [NSApp mainWindow];
+
deleteAutoReleasePool();
inited = true;
@@ -64,7 +68,7 @@ void setupCocoa()
static NSAutoreleasePool *sPool = NULL;
-void createAutoReleasePool()
+void LLCocoaPlugin::createAutoReleasePool()
{
if(!sPool)
{
@@ -72,7 +76,7 @@ void createAutoReleasePool()
}
}
-void deleteAutoReleasePool()
+void LLCocoaPlugin::deleteAutoReleasePool()
{
if(sPool)
{
@@ -80,3 +84,94 @@ void deleteAutoReleasePool()
sPool = NULL;
}
}
+
+LLCocoaPlugin::LLCocoaPlugin():mHackState(0)
+{
+ NSArray* window_list = [NSApp orderedWindows];
+ mFrontWindow = [window_list objectAtIndex:0];
+}
+
+void LLCocoaPlugin::processEvents()
+{
+ // Some plugins (webkit at least) will want an event loop. This qualifies.
+ NSEvent * event;
+ event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES];
+ [NSApp sendEvent: event];
+}
+
+
+//Turns out the window ordering stuff never gets hit with any of the current plugins.
+//Leaving the following code here 'just in case' for the time being.
+
+void LLCocoaPlugin::setupGroup()
+{
+ // CreateWindowGroup(kWindowGroupAttrFixedLevel, &layer_group);
+ // if(layer_group)
+ // {
+ // // Start out with a window layer that's way out in front (fixes the problem with the menubar not getting hidden on first switch to fullscreen youtube)
+ // SetWindowGroupName(layer_group, CFSTR("SLPlugin Layer"));
+ // SetWindowGroupLevel(layer_group, kCGOverlayWindowLevel);
+ // }
+
+}
+
+void LLCocoaPlugin::updateWindows() //SPATTERS give this a better name.
+{
+// NSArray* window_list = [NSApp orderedWindows];
+// NSWindow* current_window = [window_list objectAtIndex:0];
+// NSWindow* parent_window = [ current_window parentWindow ];
+// bool this_is_front_process = false;
+// bool parent_is_front_process = false;
+//
+//
+// // Check for a change in this process's frontmost window.
+// if ( current_window != mFrontWindow )
+// {
+// // and figure out whether this process or its parent are currently frontmost
+// if ( current_window == parent_window ) parent_is_front_process = true;
+// if ( current_window == mPluginWindow ) this_is_front_process = true;
+//
+// if (current_window != NULL && mFrontWindow == NULL)
+// {
+// // Opening the first window
+//
+// if(mHackState == 0)
+// {
+// // Next time through the event loop, lower the window group layer
+// mHackState = 1;
+// }
+//
+// if(parent_is_front_process)
+// {
+// // Bring this process's windows to the front.
+// [mPluginWindow makeKeyAndOrderFront:NSApp];
+// [mPluginWindow setOrderedIndex:0];
+// }
+//
+// [NSApp activateIgnoringOtherApps:YES];
+// }
+//
+// else if (( current_window == NULL) && (mFrontWindow != NULL))
+// {
+// // Closing the last window
+//
+// if(this_is_front_process)
+// {
+// // Try to bring this process's parent to the front
+// [parent_window makeKeyAndOrderFront:NSApp];
+// [parent_window setOrderedIndex:0];
+// }
+// }
+// else if(mHackState == 1)
+// {
+//// if(layer_group)
+//// {
+//// // Set the window group level back to something less extreme
+//// SetWindowGroupLevel(layer_group, kCGNormalWindowLevel);
+//// }
+// mHackState = 2;
+// }
+//
+// mFrontWindow = [window_list objectAtIndex:0];
+// }
+ }