diff options
Diffstat (limited to 'indra/media_plugins/webkit')
| -rw-r--r-- | indra/media_plugins/webkit/media_plugin_webkit.cpp | 89 | 
1 files changed, 80 insertions, 9 deletions
| diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index 047146f8f3..bd1a44a930 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -115,6 +115,7 @@ private:  	F32 mBackgroundR;  	F32 mBackgroundG;  	F32 mBackgroundB; +	std::string mTarget;  	VolumeCatcher mVolumeCatcher; @@ -303,7 +304,7 @@ private:  		LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );  		// create single browser window -		mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight ); +		mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight, mTarget);  		// tell LLQtWebKit about the size of the browser window  		LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight ); @@ -313,9 +314,6 @@ private:  		// append details to agent string  		LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent ); - -		// Set up window open behavior -		LLQtWebKit::getInstance()->setWindowOpenBehavior(mBrowserWindowId, LLQtWebKit::WOB_SIMULATE_BLANK_HREF_CLICK);  #if !LL_QTWEBKIT_USES_PIXMAPS  		// don't flip bitmap @@ -507,9 +505,9 @@ private:  	void onClickLinkHref(const EventType& event)  	{  		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_href"); -		message.setValue("uri", event.getStringValue()); -		message.setValue("target", event.getStringValue2()); -		message.setValueU32("target_type", event.getLinkType()); +		message.setValue("uri", event.getEventUri()); +		message.setValue("target", event.getStringValue()); +		message.setValue("uuid", event.getStringValue2());  		sendMessage(message);  	} @@ -518,7 +516,7 @@ private:  	void onClickLinkNoFollow(const EventType& event)  	{  		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow"); -		message.setValue("uri", event.getStringValue()); +		message.setValue("uri", event.getEventUri());  		sendMessage(message);  	} @@ -534,6 +532,42 @@ private:  //		message.setValueBoolean("dead", (event.getIntValue() != 0))  		sendMessage(message);  	} + +	//////////////////////////////////////////////////////////////////////////////// +	// virtual +	void onWindowCloseRequested(const EventType& event) +	{ +		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "close_request"); +		message.setValue("uuid", event.getStringValue()); +		sendMessage(message); +	} + +	//////////////////////////////////////////////////////////////////////////////// +	// virtual +	void onWindowGeometryChangeRequested(const EventType& event) +	{ +		int x, y, width, height; +		event.getRectValue(x, y, width, height); + +		// This sometimes gets called with a zero-size request.  Don't pass these along. +		if(width > 0 && height > 0) +		{ +			LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "geometry_change"); +			message.setValue("uuid", event.getStringValue()); +			message.setValueS32("x", x); +			message.setValueS32("y", y); +			message.setValueS32("width", width); +			message.setValueS32("height", height); +			sendMessage(message); +		} +	} + +	//////////////////////////////////////////////////////////////////////////////// +	// virtual +	std::string onRequestFilePicker( const EventType& eventIn ) +	{ +		return blockingPickFile(); +	}  	LLQtWebKit::EKeyboardModifier decodeModifiers(std::string &modifiers)  	{ @@ -679,6 +713,26 @@ private:  		}  	} +	 +	std::string mPickedFile; +	 +	std::string blockingPickFile(void) +	{ +		mPickedFile.clear(); +		 +		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file"); +		message.setValueBoolean("blocking_request", true); +		 +		// The "blocking_request" key in the message means this sendMessage call will block until a response is received. +		sendMessage(message); +		 +		return mPickedFile; +	} + +	void onPickFileResponse(const std::string &file) +	{ +		mPickedFile = file; +	}  }; @@ -817,6 +871,8 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)  		{  			if(message_name == "init")  			{ +				mTarget = message_in.getValue("target"); +				  				// This is the media init message -- all necessary data for initialization should have been received.  				if(initBrowser())  				{ @@ -1036,10 +1092,14 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)  				LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_PASTE );  				checkEditState();  			} +			if(message_name == "pick_file_response") +			{ +				onPickFileResponse(message_in.getValue("file")); +			}  			else  			{  //				std::cerr << "MediaPluginWebKit::receiveMessage: unknown media message: " << message_string << std::endl; -			}; +			}  		}  		else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER)  		{ @@ -1139,6 +1199,17 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)  					}  				}  			} +			else if(message_name == "proxy_window_opened") +			{ +				std::string target = message_in.getValue("target"); +				std::string uuid = message_in.getValue("uuid"); +				LLQtWebKit::getInstance()->proxyWindowOpened(mBrowserWindowId, target, uuid); +			} +			else if(message_name == "proxy_window_closed") +			{ +				std::string uuid = message_in.getValue("uuid"); +				LLQtWebKit::getInstance()->proxyWindowClosed(mBrowserWindowId, uuid); +			}  			else  			{  //				std::cerr << "MediaPluginWebKit::receiveMessage: unknown media_browser message: " << message_string << std::endl; | 
