diff options
76 files changed, 1827 insertions, 4727 deletions
| @@ -487,3 +487,4 @@ a9f2d0cb11f73b06858e6083bb50083becc3f9cd 3.7.9-release  3b44ea8988cb902f0dda8429e8d5e4569e304532 3.7.12-release  d86a7e1bc96d27b683f951d3701d5b7042158c68 3.7.13-release  a7872554f3665588f1e8347d472cec3a299254b3 3.7.14-release +3f11f57f2b4d15a9f987d12bc70ef507eefb5018 3.7.15-release diff --git a/doc/contributions.txt b/doc/contributions.txt index 7e8ab46b1a..2d27562e37 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -323,6 +323,7 @@ Cinder Roxley      STORM-1951      STORM-2035      STORM-2036 +    STORM-2037  Clara Young  Coaldust Numbers      VWR-1095 @@ -712,6 +713,9 @@ Jonathan Yap  	STORM-1986  	STORM-1981  	STORM-2015 +	STORM-2031 +	STORM-2030 +	STORM-2034  	STORM-2018  Kadah Coba  	STORM-1060 @@ -990,6 +994,38 @@ Nicky Perian  	STORM-1090  	STORM-1828  Nicoladie Gymnast +NiranV Dean +    STORM-2040 +    STORM-2042 +    STORM-2043 +    STORM-2044 +    STORM-2045 +    STORM-2046 +    STORM-2047 +    STORM-2048 +    STORM-2049 +    STORM-2050 +    STORM-2051 +    STORM-2052 +    STORM-2057 +    STORM-2058 +    STORM-2059 +    STORM-2060 +    STORM-2061 +    STORM-2063 +    STORM-2065 +    STORM-2066 +    STORM-2068 +    STORM-2073 +    STORM-2076 +    BUG-372 +    BUG-1179 +    BUG-6835 +    BUG-6837 +    BUG-6839 +    BUG-6840 +    BUG-6958 +    BUG-7020  Nounouch Hapmouche  	VWR-238  Ollie Kubrick @@ -1183,6 +1219,7 @@ Sovereign Engineer      OPEN-189      STORM-1972      OPEN-195 +    OPEN-217  SpacedOut Frye  	VWR-34  	VWR-45 @@ -1358,6 +1395,7 @@ Whirly Fizzle  	VWR-29543  	MAINT-873  	STORM-1930 +	BUG-6659  Whoops Babii  	VWR-631  	VWR-1640 diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index 410d25ad97..24ea59ca49 100755 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -71,7 +71,6 @@ add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins)  if (LINUX)    add_subdirectory(${VIEWER_PREFIX}linux_crash_logger) -  add_subdirectory(${VIEWER_PREFIX}linux_updater)    if (INSTALL_PROPRIETARY)        include(LLAppearanceUtility)        add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR}) @@ -86,9 +85,8 @@ elseif (WINDOWS)    if (EXISTS ${VIEWER_DIR}win_setup)      add_subdirectory(${VIEWER_DIR}win_setup)    endif (EXISTS ${VIEWER_DIR}win_setup) -  add_subdirectory(${VIEWER_PREFIX}win_updater) -  # add_dependencies(viewer windows-updater windows-setup windows-crash-logger) -  add_dependencies(viewer windows-updater windows-crash-logger) +  # add_dependencies(viewer windows-setup windows-crash-logger) +  add_dependencies(viewer windows-crash-logger)  elseif (SOLARIS)    add_subdirectory(solaris_crash_logger)    add_dependencies(viewer solaris-crash-logger) diff --git a/indra/linux_updater/CMakeLists.txt b/indra/linux_updater/CMakeLists.txt deleted file mode 100644 index 4a9e82f9b6..0000000000 --- a/indra/linux_updater/CMakeLists.txt +++ /dev/null @@ -1,57 +0,0 @@ -# -*- cmake -*- - -project(linux_updater) - -include(00-Common) -include(CURL) -include(CARes) -include(OpenSSL) -include(UI) -include(LLCommon) -include(LLMessage) -include(LLVFS) -include(LLXML) -include(LLUI) -include(Linking) - -include_directories( -    ${LLCOMMON_INCLUDE_DIRS} -    ${LLVFS_INCLUDE_DIRS} -    ${LLXML_INCLUDE_DIRS} -    ${LLUI_INCLUDE_DIRS} -    ${CURL_INCLUDE_DIRS} -    ${CARES_INCLUDE_DIRS} -    ${OPENSSL_INCLUDE_DIRS} -    ${UI_INCLUDE_DIRS} -    ) -include_directories(SYSTEM -    ${LLCOMMON_SYSTEM_INCLUDE_DIRS} -    ${LLXML_SYSTEM_INCLUDE_DIRS} -    ) - -set(linux_updater_SOURCE_FILES linux_updater.cpp) - -set(linux_updater_HEADER_FILES CMakeLists.txt) - -set_source_files_properties(${linux_updater_HEADER_FILES} -                            PROPERTIES HEADER_FILES_ONLY TRUE) - -list(APPEND linux_updater_SOURCE_FILES ${linux_updater_HEADER_FILES}) - -add_executable(linux-updater ${linux_updater_SOURCE_FILES}) - -target_link_libraries(linux-updater -    ${CURL_LIBRARIES} -    ${CARES_LIBRARIES} -    ${OPENSSL_LIBRARIES} -    ${CRYPTO_LIBRARIES} -    ${LLMESSAGE_LIBRARIES} -    ${UI_LIBRARIES} -    ${LLXML_LIBRARIES} -    ${LLUI_LIBRARIES} -    ${LLVFS_LIBRARIES} -    ${LLCOMMON_LIBRARIES} -    ) - -add_custom_target(linux-updater-target ALL -                  DEPENDS linux-updater) diff --git a/indra/linux_updater/linux_updater.cpp b/indra/linux_updater/linux_updater.cpp deleted file mode 100644 index 5c94deba02..0000000000 --- a/indra/linux_updater/linux_updater.cpp +++ /dev/null @@ -1,926 +0,0 @@ -/** - * @file linux_updater.cpp - * @author Kyle Ambroff <ambroff@lindenlab.com>, Tofu Linden - * @brief Viewer update program for unix platforms that support GTK+ - * - * $LicenseInfo:firstyear=2008&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#include <unistd.h> -#include <signal.h> -#include <errno.h> -#include <set> -#include <iostream> - -#include "linden_common.h" -#include "llerrorcontrol.h" -#include "llfile.h" -#include "lldir.h" -#include "lldiriterator.h" - -/*==========================================================================*| -// IQA-490: Use of LLTrans -- by this program at least -- appears to be buggy. -// With it, the 3.3.2 beta 1 linux-updater.bin crashes; without it seems stable. -#include "llxmlnode.h" -#include "lltrans.h" -|*==========================================================================*/ - -static class LLTrans -{ -public: -	LLTrans(); -	static std::string getString(const std::string& key); - -private: -	std::string _getString(const std::string& key) const; - -	typedef std::map<std::string, std::string> MessageMap; -	MessageMap mMessages; -} sLLTransInstance; - -#include <curl/curl.h> -#include <map> -#include <boost/foreach.hpp> - -extern "C" { -#include <gtk/gtk.h> -} - -const guint UPDATE_PROGRESS_TIMEOUT = 100; -const guint UPDATE_PROGRESS_TEXT_TIMEOUT = 1000; -const guint ROTATE_IMAGE_TIMEOUT = 8000; - -typedef struct _updater_app_state { -	std::string app_name; -	std::string url; -	std::string file; -	std::string image_dir; -	std::string dest_dir; -	std::string strings_dirs; -	std::string strings_file; - -	LLDirIterator *image_dir_iter; - -	GtkWidget *window; -	GtkWidget *progress_bar; -	GtkWidget *image; - -	double progress_value; -	bool activity_mode; - -	guint image_rotation_timeout_id; -	guint progress_update_timeout_id; -	guint update_progress_text_timeout_id; - -	bool failure; -} UpdaterAppState; - -// List of entries from strings.xml to always replace -static std::set<std::string> default_trans_args; -void init_default_trans_args() -{ -        default_trans_args.insert("SECOND_LIFE"); // World -        default_trans_args.insert("APP_NAME"); -        default_trans_args.insert("SECOND_LIFE_GRID"); -        default_trans_args.insert("SUPPORT_SITE"); -} - -bool translate_init(std::string comma_delim_path_list, -		    std::string base_xml_name) -{ -	return true; -/*==========================================================================*| -	init_default_trans_args(); - -	// extract paths string vector from comma-delimited flat string -	std::vector<std::string> paths; -	LLStringUtil::getTokens(comma_delim_path_list, paths, ","); // split over ',' - -	for(std::vector<std::string>::iterator it = paths.begin(), end_it = paths.end(); -		it != end_it; -		++it) -	{ -		(*it) = gDirUtilp->findSkinnedFilename(*it, base_xml_name); -	} - -	// suck the translation xml files into memory -	LLXMLNodePtr root; -	bool success = LLXMLNode::getLayeredXMLNode(root, paths); -	if (!success) -	{ -		// couldn't load string table XML -		return false; -	} -	else -	{ -		// get those strings out of the XML -		LLTrans::parseStrings(root, default_trans_args); -		return true; -	} -|*==========================================================================*/ -} - - -void updater_app_ui_init(void); -void updater_app_quit(UpdaterAppState *app_state); -void parse_args_and_init(int argc, char **argv, UpdaterAppState *app_state); -std::string next_image_filename(std::string& image_path, LLDirIterator& iter); -void display_error(GtkWidget *parent, std::string title, std::string message); -BOOL install_package(std::string package_file, std::string destination); -BOOL spawn_viewer(UpdaterAppState *app_state); - -extern "C" { -	void on_window_closed(GtkWidget *sender, GdkEvent *event, gpointer state); -	gpointer worker_thread_cb(gpointer *data); -	int download_progress_cb(gpointer data, double t, double d, double utotal, double ulnow); -	gboolean rotate_image_cb(gpointer data); -	gboolean progress_update_timeout(gpointer data); -	gboolean update_progress_text_timeout(gpointer data); -} - -void updater_app_ui_init(UpdaterAppState *app_state) -{ -	GtkWidget *vbox; -	GtkWidget *summary_label; -	GtkWidget *description_label; -	GtkWidget *frame; - -	llassert(app_state != NULL); - -	// set up window and main container -	std::string window_title = LLTrans::getString("UpdaterWindowTitle"); -	app_state->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); -	gtk_window_set_title(GTK_WINDOW(app_state->window), -			     window_title.c_str()); -	gtk_window_set_resizable(GTK_WINDOW(app_state->window), FALSE); -	gtk_window_set_position(GTK_WINDOW(app_state->window), -				GTK_WIN_POS_CENTER_ALWAYS); - -	gtk_container_set_border_width(GTK_CONTAINER(app_state->window), 12); -	g_signal_connect(G_OBJECT(app_state->window), "delete-event", -			 G_CALLBACK(on_window_closed), app_state); - -	vbox = gtk_vbox_new(FALSE, 6); -	gtk_container_add(GTK_CONTAINER(app_state->window), vbox); - -	// set top label -	std::ostringstream label_ostr; -	label_ostr << "<big><b>" -		   << LLTrans::getString("UpdaterNowUpdating") -		   << "</b></big>"; - -	summary_label = gtk_label_new(NULL); -	gtk_label_set_use_markup(GTK_LABEL(summary_label), TRUE); -	gtk_label_set_markup(GTK_LABEL(summary_label), -			     label_ostr.str().c_str()); -	gtk_misc_set_alignment(GTK_MISC(summary_label), 0, 0.5); -	gtk_box_pack_start(GTK_BOX(vbox), summary_label, FALSE, FALSE, 0); - -	// create the description label -	description_label = gtk_label_new(LLTrans::getString("UpdaterUpdatingDescriptive").c_str()); -	gtk_label_set_line_wrap(GTK_LABEL(description_label), TRUE); -	gtk_misc_set_alignment(GTK_MISC(description_label), 0, 0.5); -	gtk_box_pack_start(GTK_BOX(vbox), description_label, FALSE, FALSE, 0); - -	// If an image path has been set, load the background images -	if (!app_state->image_dir.empty()) { -		frame = gtk_frame_new(NULL); -		gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); -		gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); - -		// load the first image -		app_state->image = gtk_image_new_from_file -			(next_image_filename(app_state->image_dir, *app_state->image_dir_iter).c_str()); -		gtk_widget_set_size_request(app_state->image, 340, 310); -		gtk_container_add(GTK_CONTAINER(frame), app_state->image); - -		// rotate the images every 5 seconds -		app_state->image_rotation_timeout_id = g_timeout_add -			(ROTATE_IMAGE_TIMEOUT, rotate_image_cb, app_state); -	} - -	// set up progress bar, and update it roughly every 1/10 of a second -	app_state->progress_bar = gtk_progress_bar_new(); -	gtk_progress_bar_set_text(GTK_PROGRESS_BAR(app_state->progress_bar), -				  LLTrans::getString("UpdaterProgressBarTextWithEllipses").c_str()); -	gtk_box_pack_start(GTK_BOX(vbox), -			   app_state->progress_bar, FALSE, TRUE, 0); -	app_state->progress_update_timeout_id = g_timeout_add -		(UPDATE_PROGRESS_TIMEOUT, progress_update_timeout, app_state); -	app_state->update_progress_text_timeout_id = g_timeout_add -		(UPDATE_PROGRESS_TEXT_TIMEOUT, update_progress_text_timeout, app_state); - -	gtk_widget_show_all(app_state->window); -} - -gboolean rotate_image_cb(gpointer data) -{ -	UpdaterAppState *app_state; -	std::string filename; - -	llassert(data != NULL); -	app_state = (UpdaterAppState *) data; - -	filename = next_image_filename(app_state->image_dir, *app_state->image_dir_iter); - -	gdk_threads_enter(); -	gtk_image_set_from_file(GTK_IMAGE(app_state->image), filename.c_str()); -	gdk_threads_leave(); - -	return TRUE; -} - -std::string next_image_filename(std::string& image_path, LLDirIterator& iter) -{ -	std::string image_filename; -	iter.next(image_filename); -	return gDirUtilp->add(image_path, image_filename); -} - -void on_window_closed(GtkWidget *sender, GdkEvent* event, gpointer data) -{ -	UpdaterAppState *app_state; - -	llassert(data != NULL); -	app_state = (UpdaterAppState *) data; - -	updater_app_quit(app_state); -} - -void updater_app_quit(UpdaterAppState *app_state) -{ -	if (app_state != NULL) -	{ -		g_source_remove(app_state->progress_update_timeout_id); - -		if (!app_state->image_dir.empty()) -		{ -			g_source_remove(app_state->image_rotation_timeout_id); -		} -	} - -	gtk_main_quit(); -} - -void display_error(GtkWidget *parent, std::string title, std::string message) -{ -	GtkWidget *dialog; - -	dialog = gtk_message_dialog_new(GTK_WINDOW(parent), -					GTK_DIALOG_DESTROY_WITH_PARENT, -					GTK_MESSAGE_ERROR, -					GTK_BUTTONS_OK, -					"%s", message.c_str()); -	gtk_window_set_title(GTK_WINDOW(dialog), title.c_str()); -	gtk_dialog_run(GTK_DIALOG(dialog)); -	gtk_widget_destroy(dialog); -} - -gpointer worker_thread_cb(gpointer data) -{ -	UpdaterAppState *app_state; -	CURL *curl; -	CURLcode result; -	FILE *package_file; -	GError *error = NULL; -	int fd; - -	//g_return_val_if_fail (data != NULL, NULL); -	app_state = (UpdaterAppState *) data; - -	try { - -		if(!app_state->url.empty()) -		{ -			char* tmp_local_filename = NULL; -			// create temporary file to store the package. -			fd = g_file_open_tmp -				("secondlife-update-XXXXXX", &tmp_local_filename, &error); -			if (error != NULL) -			{ -				LL_ERRS() << "Unable to create temporary file: " -					   << error->message -					   << LL_ENDL; - -				g_error_free(error); -				throw 0; -			} - -			if(tmp_local_filename != NULL) -			{ -				app_state->file = tmp_local_filename; -				g_free(tmp_local_filename); -			} - -			package_file = fdopen(fd, "wb"); -			if (package_file == NULL) -			{ -				LL_ERRS() << "Failed to create temporary file: " -					   << app_state->file.c_str() -					   << LL_ENDL; - -				gdk_threads_enter(); -				display_error(app_state->window, -							  LLTrans::getString("UpdaterFailDownloadTitle"), -							  LLTrans::getString("UpdaterFailUpdateDescriptive")); -				gdk_threads_leave(); -				throw 0; -			} - -			// initialize curl and start downloading the package -			LL_INFOS() << "Downloading package: " << app_state->url << LL_ENDL; - -			curl = curl_easy_init(); -			if (curl == NULL) -			{ -				LL_ERRS() << "Failed to initialize libcurl" << LL_ENDL; - -				gdk_threads_enter(); -				display_error(app_state->window, -							  LLTrans::getString("UpdaterFailDownloadTitle"), -							  LLTrans::getString("UpdaterFailUpdateDescriptive")); -				gdk_threads_leave(); -				throw 0; -			} - -			curl_easy_setopt(curl, CURLOPT_URL, app_state->url.c_str()); -			curl_easy_setopt(curl, CURLOPT_NOSIGNAL, TRUE); -			curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, TRUE); -			curl_easy_setopt(curl, CURLOPT_WRITEDATA, package_file); -			curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE); -			curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, -							 &download_progress_cb); -			curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, app_state); - -			result = curl_easy_perform(curl); -			fclose(package_file); -			curl_easy_cleanup(curl); - -			if (result) -			{ -				LL_ERRS() << "Failed to download update: " -					   << app_state->url -					   << LL_ENDL; - -				gdk_threads_enter(); -				display_error(app_state->window, -							  LLTrans::getString("UpdaterFailDownloadTitle"), -							  LLTrans::getString("UpdaterFailUpdateDescriptive")); -				gdk_threads_leave(); - -				throw 0; -			} -		} - -		// now pulse the progres bar back and forth while the package is -		// being unpacked -		gdk_threads_enter(); -		std::string installing_msg = LLTrans::getString("UpdaterNowInstalling"); -		gtk_progress_bar_set_text( -			GTK_PROGRESS_BAR(app_state->progress_bar), -			installing_msg.c_str()); -		app_state->activity_mode = TRUE; -		gdk_threads_leave(); - -		// *TODO: if the destination is not writable, terminate this -		// thread and show file chooser? -		if (!install_package(app_state->file.c_str(), app_state->dest_dir)) -		{ -			LL_WARNS() << "Failed to install package to destination: " -				<< app_state->dest_dir -				<< LL_ENDL; - -			gdk_threads_enter(); -			display_error(app_state->window, -						  LLTrans::getString("UpdaterFailInstallTitle"), -						  LLTrans::getString("UpdaterFailUpdateDescriptive")); -			//"Failed to update " + app_state->app_name, -			gdk_threads_leave(); -			throw 0; -		} - -		// try to spawn the new viewer -		if (!spawn_viewer(app_state)) -		{ -			LL_WARNS() << "Viewer was not installed properly in : " -				<< app_state->dest_dir -				<< LL_ENDL; - -			gdk_threads_enter(); -			display_error(app_state->window, -						  LLTrans::getString("UpdaterFailStartTitle"), -						  LLTrans::getString("UpdaterFailUpdateDescriptive")); -			gdk_threads_leave(); -			throw 0; -		} -	} -	catch (...) -	{ -		app_state->failure = TRUE; -	} - -	gdk_threads_enter(); -	updater_app_quit(app_state); -	gdk_threads_leave(); - -	return NULL; -} - - -gboolean less_anal_gspawnsync(gchar **argv, -			      gchar **stderr_output, -			      gint *child_exit_status, -			      GError **spawn_error) -{ -	// store current SIGCHLD handler if there is one, replace with default -	// handler to make glib happy -	struct sigaction sigchld_backup; -	struct sigaction sigchld_appease_glib; -	sigchld_appease_glib.sa_handler = SIG_DFL; -	sigemptyset(&sigchld_appease_glib.sa_mask); -	sigchld_appease_glib.sa_flags = 0; -	sigaction(SIGCHLD, &sigchld_appease_glib, &sigchld_backup); - -	gboolean rtn = g_spawn_sync(NULL, -				    argv, -				    NULL, -				    (GSpawnFlags) (G_SPAWN_STDOUT_TO_DEV_NULL), -				    NULL, -				    NULL, -				    NULL, -				    stderr_output, -				    child_exit_status, -				    spawn_error); - -	// restore SIGCHLD handler -	sigaction(SIGCHLD, &sigchld_backup, NULL); - -	return rtn; -} - - -// perform a rename, or perform a (prompted) root rename if that fails -int -rename_with_sudo_fallback(const std::string& filename, const std::string& newname) -{ -	int rtncode = ::rename(filename.c_str(), newname.c_str()); -	LL_DEBUGS() << "rename result is: " << rtncode << " / " << errno << LL_ENDL; -	if (rtncode && (EACCES == errno || EPERM == errno || EXDEV == errno)) -	{ -		LL_INFOS() << "Permission problem in rename, or moving between different mount points.  Retrying as a mv under a sudo." << LL_ENDL; -		// failed due to permissions, try again as a gksudo or kdesu mv wrapper hack -		char *sudo_cmd = NULL; -		sudo_cmd = g_find_program_in_path("gksudo"); -		if (!sudo_cmd) -		{ -			sudo_cmd = g_find_program_in_path("kdesu"); -		} -		if (sudo_cmd) -		{ -			char *mv_cmd = NULL; -			mv_cmd = g_find_program_in_path("mv"); -			if (mv_cmd) -			{ -				char *src_string_copy = g_strdup(filename.c_str()); -				char *dst_string_copy = g_strdup(newname.c_str()); -				char* argv[] = -					{ -						sudo_cmd, -						mv_cmd, -						src_string_copy, -						dst_string_copy, -						NULL -					}; - -				gchar *stderr_output = NULL; -				gint child_exit_status = 0; -				GError *spawn_error = NULL; -				if (!less_anal_gspawnsync(argv, &stderr_output, -							  &child_exit_status, &spawn_error)) -				{ -					LL_WARNS() << "Failed to spawn child process: " -						<< spawn_error->message -						<< LL_ENDL; -				} -				else if (child_exit_status) -				{ -					LL_WARNS() << "mv command failed: " -						<< (stderr_output ? stderr_output : "(no reason given)") -						<< LL_ENDL; -				} -				else -				{ -					// everything looks good, clear the error code -					rtncode = 0; -				} - -				g_free(src_string_copy); -				g_free(dst_string_copy); -				if (spawn_error) g_error_free(spawn_error); -			} -		} -	} -	return rtncode; -} - -gboolean install_package(std::string package_file, std::string destination) -{ -	char *tar_cmd = NULL; -	std::ostringstream command; - -	// Find the absolute path to the 'tar' command. -	tar_cmd = g_find_program_in_path("tar"); -	if (!tar_cmd) -	{ -		LL_ERRS() << "`tar' was not found in $PATH" << LL_ENDL; -		return FALSE; -	} -	LL_INFOS() << "Found tar command: " << tar_cmd << LL_ENDL; - -	// Unpack the tarball in a temporary place first, then move it to -	// its final destination -	std::string tmp_dest_dir = gDirUtilp->getTempFilename(); -	if (LLFile::mkdir(tmp_dest_dir, 0744)) -	{ -		LL_ERRS() << "Failed to create directory: " -		       << destination -		       << LL_ENDL; - -		return FALSE; -	} - -	char *package_file_string_copy = g_strdup(package_file.c_str()); -	char *tmp_dest_dir_string_copy = g_strdup(tmp_dest_dir.c_str()); -	gchar *argv[8] = { -		tar_cmd, -		const_cast<gchar*>("--strip"), const_cast<gchar*>("1"), -		const_cast<gchar*>("-xjf"), -		package_file_string_copy, -		const_cast<gchar*>("-C"), tmp_dest_dir_string_copy, -		NULL, -	}; - -	LL_INFOS() << "Untarring package: " << package_file << LL_ENDL; - -	// store current SIGCHLD handler if there is one, replace with default -	// handler to make glib happy -	struct sigaction sigchld_backup; -	struct sigaction sigchld_appease_glib; -	sigchld_appease_glib.sa_handler = SIG_DFL; -	sigemptyset(&sigchld_appease_glib.sa_mask); -	sigchld_appease_glib.sa_flags = 0; -	sigaction(SIGCHLD, &sigchld_appease_glib, &sigchld_backup); - -	gchar *stderr_output = NULL; -	gint child_exit_status = 0; -	GError *untar_error = NULL; -	if (!less_anal_gspawnsync(argv, &stderr_output, -				  &child_exit_status, &untar_error)) -	{ -		LL_WARNS() << "Failed to spawn child process: " -			<< untar_error->message -			<< LL_ENDL; -		return FALSE; -	} - -	if (child_exit_status) -	{ -	 	LL_WARNS() << "Untar command failed: " -			<< (stderr_output ? stderr_output : "(no reason given)") -			<< LL_ENDL; -		return FALSE; -	} - -	g_free(tar_cmd); -	g_free(package_file_string_copy); -	g_free(tmp_dest_dir_string_copy); -	g_free(stderr_output); -	if (untar_error) g_error_free(untar_error); - -	// move the existing package out of the way if it exists -	if (gDirUtilp->fileExists(destination)) -	{ -		std::string backup_dir = destination + ".backup"; -		int oldcounter = 1; -		while (gDirUtilp->fileExists(backup_dir)) -		{ -			// find a foo.backup.N folder name that isn't taken yet -			backup_dir = destination + ".backup." + llformat("%d", oldcounter); -			++oldcounter; -		} - -		if (rename_with_sudo_fallback(destination, backup_dir)) -		{ -			LL_WARNS() << "Failed to move directory: '" -				<< destination << "' -> '" << backup_dir -				<< LL_ENDL; -			return FALSE; -		} -	} - -	// The package has been unpacked in a staging directory, now we just -	// need to move it to its destination. -	if (rename_with_sudo_fallback(tmp_dest_dir, destination)) -	{ -		LL_WARNS() << "Failed to move installation to the destination: " -			<< destination -			<< LL_ENDL; -		return FALSE; -	} - -	// \0/ Success! -	return TRUE; -} - -gboolean progress_update_timeout(gpointer data) -{ -	UpdaterAppState *app_state; - -	llassert(data != NULL); - -	app_state = (UpdaterAppState *) data; - -	gdk_threads_enter(); -	if (app_state->activity_mode) -	{ -		gtk_progress_bar_pulse -			(GTK_PROGRESS_BAR(app_state->progress_bar)); -	} -	else -	{ -		gtk_progress_set_value(GTK_PROGRESS(app_state->progress_bar), -				       app_state->progress_value); -	} -	gdk_threads_leave(); - -	return TRUE; -} - -gboolean update_progress_text_timeout(gpointer data) -{ -	UpdaterAppState *app_state; - -	llassert(data != NULL); -	app_state = (UpdaterAppState *) data; - -	if (app_state->activity_mode == TRUE) -	{ -		// We no longer need this timeout, it will be removed. -		return FALSE; -	} - -	if (!app_state->progress_value) -	{ -		return TRUE; -	} - -	std::string progress_text = llformat((LLTrans::getString("UpdaterProgressBarText")+" (%.0f%%)").c_str(), app_state->progress_value); - -	gdk_threads_enter(); -	gtk_progress_bar_set_text(GTK_PROGRESS_BAR(app_state->progress_bar), -				  progress_text.c_str()); -	gdk_threads_leave(); - -	return TRUE; -} - -int download_progress_cb(gpointer data, -			 double t, -			 double d, -			 double utotal, -			 double ulnow) -{ -	UpdaterAppState *app_state; - -	llassert(data != NULL); -	app_state = (UpdaterAppState *) data; - -	if (t <= 0.0) -	{ -		app_state->progress_value = 0; -	} -	else -	{ -		app_state->progress_value = d * 100.0 / t; -	} -	return 0; -} - -BOOL spawn_viewer(UpdaterAppState *app_state) -{ -	llassert(app_state != NULL); - -	std::string cmd = app_state->dest_dir + "/secondlife"; -	GError *error = NULL; - -	// We want to spawn the Viewer on the same display as the updater app -	gboolean success = gdk_spawn_command_line_on_screen -		(gtk_widget_get_screen(app_state->window), cmd.c_str(), &error); - -	if (!success) -	{ -		LL_WARNS() << "Failed to launch viewer: " << error->message -			<< LL_ENDL; -	} - -	if (error) g_error_free(error); - -	return success; -} - -void show_usage_and_exit() -{ -	std::cout << "Usage: linux-updater <--url URL | --file FILE> --name NAME --dest PATH --stringsdir PATH1,PATH2 --stringsfile FILE" -		  << "[--image-dir PATH]" -		  << std::endl; -	exit(1); -} - -void parse_args_and_init(int argc, char **argv, UpdaterAppState *app_state) -{ -	int i; - -	for (i = 1; i < argc; i++) -	{ -		if ((!strcmp(argv[i], "--url")) && (++i < argc)) -		{ -			app_state->url = argv[i]; -		} -		else if ((!strcmp(argv[i], "--file")) && (++i < argc)) -		{ -			app_state->file = argv[i]; -		} -		else if ((!strcmp(argv[i], "--name")) && (++i < argc)) -		{ -			app_state->app_name = argv[i]; -		} -		else if ((!strcmp(argv[i], "--image-dir")) && (++i < argc)) -		{ -			app_state->image_dir = argv[i]; -			app_state->image_dir_iter = new LLDirIterator(argv[i], "*.jpg"); -		} -		else if ((!strcmp(argv[i], "--dest")) && (++i < argc)) -		{ -			app_state->dest_dir = argv[i]; -		} -		else if ((!strcmp(argv[i], "--stringsdir")) && (++i < argc)) -		{ -			app_state->strings_dirs = argv[i]; -		} -		else if ((!strcmp(argv[i], "--stringsfile")) && (++i < argc)) -		{ -			app_state->strings_file = argv[i]; -		} -		else -		{ -			// show usage, an invalid option was given. -			show_usage_and_exit(); -		} -	} - -	if (app_state->app_name.empty() -	    || (app_state->url.empty() && app_state->file.empty()) -	    || app_state->dest_dir.empty()) -	{ -		show_usage_and_exit(); -	} - -	app_state->progress_value = 0.0; -	app_state->activity_mode = FALSE; -	app_state->failure = FALSE; - -	translate_init(app_state->strings_dirs, app_state->strings_file); -} - -int main(int argc, char **argv) -{ -	UpdaterAppState* app_state = new UpdaterAppState; - -	parse_args_and_init(argc, argv, app_state); - -	// Initialize logger, and rename old log file -	gDirUtilp->initAppDirs("SecondLife"); -	LLError::initForApplication -		(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "")); -	std::string old_log_file = gDirUtilp->getExpandedFilename -		(LL_PATH_LOGS, "updater.log.old"); -	std::string log_file = -		gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log"); -	LLFile::rename(log_file, old_log_file); -	LLError::logToFile(log_file); - -	// initialize gthreads and gtk+ -	if (!g_thread_supported()) -	{ -		g_thread_init(NULL); -		gdk_threads_init(); -	} - -	gtk_init(&argc, &argv); - -	// create UI -	updater_app_ui_init(app_state); - -	//LL_INFOS() << "SAMPLE TRANSLATION IS: " << LLTrans::getString("LoginInProgress") << LL_ENDL; - -	// create download thread -	g_thread_create(GThreadFunc(worker_thread_cb), app_state, FALSE, NULL); - -	gdk_threads_enter(); -	gtk_main(); -	gdk_threads_leave(); - -	// Delete the file only if created from url download. -	if(!app_state->url.empty() && !app_state->file.empty()) -	{ -		if (gDirUtilp->fileExists(app_state->file)) -		{ -			LLFile::remove(app_state->file); -		} -	} - -	bool success = !app_state->failure; -	delete app_state->image_dir_iter; -	delete app_state; -	return success ? 0 : 1; -} - -/***************************************************************************** -*   Dummy LLTrans implementation (IQA-490) -*****************************************************************************/ -static LLTrans sStaticStrings; - -// lookup -std::string LLTrans::_getString(const std::string& key) const -{ -	MessageMap::const_iterator found = mMessages.find(key); -	if (found != mMessages.end()) -	{ -		return found->second; -	} -	LL_WARNS("linux_updater") << "No message for key '" << key -							  << "' -- add to LLTrans::LLTrans() in linux_updater.cpp" -							  << LL_ENDL; -	return key; -} - -// static lookup -std::string LLTrans::getString(const std::string& key) -{ -    return sLLTransInstance._getString(key); -} - -// initialization -LLTrans::LLTrans() -{ -	typedef std::pair<const char*, const char*> Pair; -	static const Pair data[] = -	{ -		Pair("UpdaterFailDownloadTitle", -			 "Failed to download update"), -		Pair("UpdaterFailInstallTitle", -			 "Failed to install update"), -		Pair("UpdaterFailStartTitle", -			 "Failed to start viewer"), -		Pair("UpdaterFailUpdateDescriptive", -			 "An error occurred while updating Second Life. " -			 "Please download the latest version from www.secondlife.com."), -		Pair("UpdaterNowInstalling", -			 "Installing Second Life..."), -		Pair("UpdaterNowUpdating", -			 "Now updating Second Life..."), -		Pair("UpdaterProgressBarText", -			 "Downloading update"), -		Pair("UpdaterProgressBarTextWithEllipses", -			 "Downloading update..."), -		Pair("UpdaterUpdatingDescriptive", -			 "Your Second Life Viewer is being updated to the latest release. " -			 "This may take some time, so please be patient."), -		Pair("UpdaterWindowTitle", -			 "Second Life Update") -	}; - -	BOOST_FOREACH(Pair pair, data) -	{ -		mMessages[pair.first] = pair.second; -	} -} diff --git a/indra/llaudio/llaudiodecodemgr.h b/indra/llaudio/llaudiodecodemgr.h index 7a9b807d04..8228e20e8c 100755 --- a/indra/llaudio/llaudiodecodemgr.h +++ b/indra/llaudio/llaudiodecodemgr.h @@ -24,7 +24,7 @@   */  #ifndef LL_LLAUDIODECODEMGR_H -#define LL_LLAUDIODECODEMG_H +#define LL_LLAUDIODECODEMGR_H  #include "stdtypes.h" diff --git a/indra/mac_updater/mac_updater.cpp b/indra/mac_updater/mac_updater.cpp deleted file mode 100644 index f533d47b18..0000000000 --- a/indra/mac_updater/mac_updater.cpp +++ /dev/null @@ -1,1266 +0,0 @@ -/**  - * @file mac_updater.cpp - * @brief  - * - * $LicenseInfo:firstyear=2006&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#include "linden_common.h" - -#include <boost/format.hpp> - -#include <libgen.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> - -#include <curl/curl.h> -#include <pthread.h> - -#include "llerror.h" -#include "lltimer.h" -#include "lldir.h" -#include "llfile.h" - -#include "llstring.h" - -#include <Carbon/Carbon.h> - -#include "llerrorcontrol.h" - -#if LL_DARWIN -// FSPathMakeRef, FSObjectCopy, deprecations... -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - -enum -{ -	kEventClassCustom = 'Cust', -	kEventCustomProgress = 'Prog', -	kEventParamCustomCurValue = 'Cur ', -	kEventParamCustomMaxValue = 'Max ', -	kEventParamCustomText = 'Text', -	kEventCustomDone = 'Done', -}; - -WindowRef gWindow = NULL; -EventHandlerRef gEventHandler = NULL; -OSStatus gFailure = noErr; -Boolean gCancelled = false; - -const char *gUpdateURL; -const char *gProductName; -const char *gBundleID; -const char *gDmgFile; -const char *gMarkerPath; - -void *updatethreadproc(void*); - -pthread_t updatethread; - -OSStatus setProgress(int cur, int max) -{ -	OSStatus err; -	ControlRef progressBar = NULL; -	ControlID id; - -	id.signature = 'prog'; -	id.id = 0; - -	err = GetControlByID(gWindow, &id, &progressBar); -	if(err == noErr) -	{ -		Boolean indeterminate; -		 -		if(max == 0) -		{ -			indeterminate = true; -			err = SetControlData(progressBar, kControlEntireControl, kControlProgressBarIndeterminateTag, sizeof(Boolean), (Ptr)&indeterminate); -		} -		else -		{ -			double percentage = (double)cur / (double)max; -			SetControlMinimum(progressBar, 0); -			SetControlMaximum(progressBar, 100); -			SetControlValue(progressBar, (SInt16)(percentage * 100)); - -			indeterminate = false; -			err = SetControlData(progressBar, kControlEntireControl, kControlProgressBarIndeterminateTag, sizeof(Boolean), (Ptr)&indeterminate); - -			Draw1Control(progressBar); -		} -	} - -	return(err); -} - -OSStatus setProgressText(CFStringRef text) -{ -	OSStatus err; -	ControlRef progressText = NULL; -	ControlID id; - -	id.signature = 'what'; -	id.id = 0; - -	err = GetControlByID(gWindow, &id, &progressText); -	if(err == noErr) -	{ -		err = SetControlData(progressText, kControlEntireControl, kControlStaticTextCFStringTag, sizeof(CFStringRef), (Ptr)&text); -		Draw1Control(progressText); -	} - -	return(err); -} - -OSStatus sendProgress(long cur, long max, CFStringRef text = NULL) -{ -	OSStatus result; -	EventRef evt; -	 -	result = CreateEvent(  -			NULL, -			kEventClassCustom,  -			kEventCustomProgress, -			0,  -			kEventAttributeNone,  -			&evt); -	 -	// This event needs to be targeted at the window so it goes to the window's handler. -	if(result == noErr) -	{ -		EventTargetRef target = GetWindowEventTarget(gWindow); -		result = SetEventParameter ( -			evt, -			kEventParamPostTarget, -			typeEventTargetRef, -			sizeof(target), -			&target); -	} - -	if(result == noErr) -	{ -		result = SetEventParameter ( -			evt, -			kEventParamCustomCurValue, -			typeLongInteger, -			sizeof(cur), -			&cur); -	} - -	if(result == noErr) -	{ -		result = SetEventParameter ( -			evt, -			kEventParamCustomMaxValue, -			typeLongInteger, -			sizeof(max), -			&max); -	} -	 -	if(result == noErr) -	{ -		if(text != NULL) -		{ -			result = SetEventParameter ( -				evt, -				kEventParamCustomText, -				typeCFStringRef, -				sizeof(text), -				&text); -		} -	} -	 -	if(result == noErr) -	{ -		// Send the event -		PostEventToQueue( -			GetMainEventQueue(), -			evt, -			kEventPriorityStandard); - -	} -	 -	return(result); -} - -OSStatus sendDone(void) -{ -	OSStatus result; -	EventRef evt; -	 -	result = CreateEvent(  -			NULL, -			kEventClassCustom,  -			kEventCustomDone, -			0,  -			kEventAttributeNone,  -			&evt); -	 -	// This event needs to be targeted at the window so it goes to the window's handler. -	if(result == noErr) -	{ -		EventTargetRef target = GetWindowEventTarget(gWindow); -		result = SetEventParameter ( -			evt, -			kEventParamPostTarget, -			typeEventTargetRef, -			sizeof(target), -			&target); -	} - -	if(result == noErr) -	{ -		// Send the event -		PostEventToQueue( -			GetMainEventQueue(), -			evt, -			kEventPriorityStandard); - -	} -	 -	return(result); -} - -OSStatus dialogHandler(EventHandlerCallRef handler, EventRef event, void *userdata) -{ -	OSStatus result = eventNotHandledErr; -	OSStatus err; -	UInt32 evtClass = GetEventClass(event); -	UInt32 evtKind = GetEventKind(event); -	 -	if((evtClass == kEventClassCommand) && (evtKind == kEventCommandProcess)) -	{ -		HICommand cmd; -		err = GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(cmd), NULL, &cmd); -		 -		if(err == noErr) -		{ -			switch(cmd.commandID) -			{				 -				case kHICommandCancel: -					gCancelled = true; -//					QuitAppModalLoopForWindow(gWindow); -					result = noErr; -				break; -			} -		} -	} -	else if((evtClass == kEventClassCustom) && (evtKind == kEventCustomProgress)) -	{ -		// Request to update the progress dialog -		long cur = 0; -		long max = 0; -		CFStringRef text = NULL; -		(void) GetEventParameter(event, kEventParamCustomCurValue, typeLongInteger, NULL, sizeof(cur), NULL, &cur); -		(void) GetEventParameter(event, kEventParamCustomMaxValue, typeLongInteger, NULL, sizeof(max), NULL, &max); -		(void) GetEventParameter(event, kEventParamCustomText, typeCFStringRef, NULL, sizeof(text), NULL, &text); -		 -		err = setProgress(cur, max); -		if(err == noErr) -		{ -			if(text != NULL) -			{ -				setProgressText(text); -			} -		} -		 -		result = noErr; -	} -	else if((evtClass == kEventClassCustom) && (evtKind == kEventCustomDone)) -	{ -		// We're done.  Exit the modal loop. -		QuitAppModalLoopForWindow(gWindow); -		result = noErr; -	} -	 -	return(result); -} - -#if 0 -size_t curl_download_callback(void *data, size_t size, size_t nmemb, -										  void *user_data) -{ -	S32 bytes = size * nmemb; -	char *cdata = (char *) data; -	for (int i =0; i < bytes; i += 1) -	{ -		gServerResponse.append(cdata[i]); -	} -	return bytes; -} -#endif - -int curl_progress_callback_func(void *clientp, -							  double dltotal, -							  double dlnow, -							  double ultotal, -							  double ulnow) -{ -	int max = (int)(dltotal / 1024.0); -	int cur = (int)(dlnow / 1024.0); -	sendProgress(cur, max); -	 -	if(gCancelled) -		return(1); - -	return(0); -} - -int parse_args(int argc, char **argv) -{ -	int j; - -	for (j = 1; j < argc; j++)  -	{ -		if ((!strcmp(argv[j], "-url")) && (++j < argc))  -		{ -			gUpdateURL = argv[j]; -		} -		else if ((!strcmp(argv[j], "-name")) && (++j < argc))  -		{ -			gProductName = argv[j]; -		} -		else if ((!strcmp(argv[j], "-bundleid")) && (++j < argc))  -		{ -			gBundleID = argv[j]; -		} -		else if ((!strcmp(argv[j], "-dmg")) && (++j < argc))  -		{ -			gDmgFile = argv[j]; -		} -		else if ((!strcmp(argv[j], "-marker")) && (++j < argc))  -		{ -			gMarkerPath = argv[j];; -		} -	} - -	return 0; -} - -int main(int argc, char **argv) -{ -	// We assume that all the logs we're looking for reside on the current drive -	gDirUtilp->initAppDirs("SecondLife"); - -	LLError::initForApplication( gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "")); - -	// Rename current log file to ".old" -	std::string old_log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log.old"); -	std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log"); -	LLFile::rename(log_file.c_str(), old_log_file.c_str()); - -	// Set the log file to updater.log -	LLError::logToFile(log_file); - -	///////////////////////////////////////// -	// -	// Process command line arguments -	// -	gUpdateURL  = NULL; -	gProductName = NULL; -	gBundleID = NULL; -	gDmgFile = NULL; -	gMarkerPath = NULL; -	parse_args(argc, argv); -	if ((gUpdateURL == NULL) && (gDmgFile == NULL)) -	{ -		llinfos << "Usage: mac_updater -url <url> | -dmg <dmg file> [-name <product_name>] [-program <program_name>]" << llendl; -		exit(1); -	} -	else -	{ -		llinfos << "Update url is: " << gUpdateURL << llendl; -		if (gProductName) -		{ -			llinfos << "Product name is: " << gProductName << llendl; -		} -		else -		{ -			gProductName = "Second Life"; -		} -		if (gBundleID) -		{ -			llinfos << "Bundle ID is: " << gBundleID << llendl; -		} -		else -		{ -			gBundleID = "com.secondlife.indra.viewer"; -		} -	} -	 -	llinfos << "Starting " << gProductName << " Updater" << llendl; - -	// Real UI... -	OSStatus err; -	IBNibRef nib = NULL; -	 -	err = CreateNibReference(CFSTR("AutoUpdater"), &nib); - -	char windowTitle[MAX_PATH];		/* Flawfinder: ignore */ -	snprintf(windowTitle, sizeof(windowTitle), "%s Updater", gProductName);		 -	CFStringRef windowTitleRef = NULL; -	windowTitleRef = CFStringCreateWithCString(NULL, windowTitle, kCFStringEncodingUTF8); -	 -	if(err == noErr) -	{ -		err = CreateWindowFromNib(nib, CFSTR("Updater"), &gWindow); -	} - -	if (err == noErr) -	{ -		err = SetWindowTitleWithCFString(gWindow, windowTitleRef);	 -	} -	CFRelease(windowTitleRef); - -	if(err == noErr) -	{ -		// Set up an event handler for the window. -		EventTypeSpec handlerEvents[] =  -		{ -			{ kEventClassCommand, kEventCommandProcess }, -			{ kEventClassCustom, kEventCustomProgress }, -			{ kEventClassCustom, kEventCustomDone } -		}; -		InstallStandardEventHandler(GetWindowEventTarget(gWindow)); -		InstallWindowEventHandler( -				gWindow,  -				NewEventHandlerUPP(dialogHandler),  -				GetEventTypeCount (handlerEvents),  -				handlerEvents,  -				0,  -				&gEventHandler); -	} -	 -	if(err == noErr) -	{ -		ShowWindow(gWindow); -		SelectWindow(gWindow); -	} -		 -	if(err == noErr) -	{ -		pthread_create(&updatethread,  -                         NULL, -                         &updatethreadproc,  -                         NULL); -						  -	} -	 -	if(err == noErr) -	{ -		RunAppModalLoopForWindow(gWindow); -	} - -	void *threadresult; - -	pthread_join(updatethread, &threadresult); - -	if(!gCancelled && (gFailure != noErr)) -	{ -		// Something went wrong.  Since we always just tell the user to download a new version, we don't really care what. -		AlertStdCFStringAlertParamRec params; -		SInt16 retval_mac = 1; -		DialogRef alert = NULL; -		OSStatus err; - -		params.version = kStdCFStringAlertVersionOne; -		params.movable = false; -		params.helpButton = false; -		params.defaultText = (CFStringRef)kAlertDefaultOKText; -		params.cancelText = 0; -		params.otherText = 0; -		params.defaultButton = 1; -		params.cancelButton = 0; -		params.position = kWindowDefaultPosition; -		params.flags = 0; - -		err = CreateStandardAlert( -				kAlertStopAlert, -				CFSTR("Error"), -				CFSTR("An error occurred while updating Second Life.  Please download the latest version from www.secondlife.com."), -				¶ms, -				&alert); -		 -		if(err == noErr) -		{ -			err = RunStandardAlert( -					alert, -					NULL, -					&retval_mac); -		} -		 -		if(gMarkerPath != 0) -		{ -			// Create a install fail marker that can be used by the viewer to -			// detect install problems. -			std::ofstream stream(gMarkerPath); -			if(stream) stream << -1; -		} -		exit(-1); -	} else { -		exit(0); -	} - -	if(gWindow != NULL) -	{ -		DisposeWindow(gWindow); -	} -	 -	if(nib != NULL) -	{ -		DisposeNibReference(nib); -	} -	 -	return 0; -} - -bool isDirWritable(FSRef &dir) -{ -	bool result = false; -	 -	// Test for a writable directory by creating a directory, then deleting it again. -	// This is kinda lame, but will pretty much always give the right answer. -	 -	OSStatus err = noErr; -	char temp[PATH_MAX] = "";		/* Flawfinder: ignore */ - -	err = FSRefMakePath(&dir, (UInt8*)temp, sizeof(temp)); - -	if(err == noErr) -	{ -		strncat(temp, "/.test_XXXXXX", (sizeof(temp) - strlen(temp)) - 1); -		 -		if(mkdtemp(temp) != NULL) -		{ -			// We were able to make the directory.  This means the directory is writable. -			result = true; -			 -			// Clean up. -			rmdir(temp); -		} -	} - -#if 0 -	// This seemed like a good idea, but won't tell us if we're on a volume mounted read-only. -	UInt8 perm; -	err = FSGetUserPrivilegesPermissions(&targetParentRef, &perm, NULL); -	if(err == noErr) -	{ -		if(perm & kioACUserNoMakeChangesMask) -		{ -			// Parent directory isn't writable. -			llinfos << "Target parent directory not writable." << llendl; -			err = -1; -			replacingTarget = false; -		} -	} -#endif - -	return result; -} - -static std::string HFSUniStr255_to_utf8str(const HFSUniStr255* src) -{ -	llutf16string string16((U16*)&(src->unicode), src->length); -	std::string result = utf16str_to_utf8str(string16); -	return result; -} - -int restoreObject(const char* aside, const char* target, const char* path, const char* object) -{ -	char source[PATH_MAX] = "";		/* Flawfinder: ignore */ -	char dest[PATH_MAX] = "";		/* Flawfinder: ignore */ -	snprintf(source, sizeof(source), "%s/%s/%s", aside, path, object);		 -	snprintf(dest, sizeof(dest), "%s/%s", target, path);		 -	FSRef sourceRef; -	FSRef destRef; -	OSStatus err; -	err = FSPathMakeRef((UInt8 *)source, &sourceRef, NULL); -	if(err != noErr) return false; -	err = FSPathMakeRef((UInt8 *)dest, &destRef, NULL); -	if(err != noErr) return false; - -	llinfos << "Copying " << source << " to " << dest << llendl; - -	err = FSCopyObjectSync( -			&sourceRef, -			&destRef, -			NULL, -			NULL, -			kFSFileOperationOverwrite); - -	if(err != noErr) return false; -	return true; -} - -// Replace any mention of "Second Life" with the product name. -void filterFile(const char* filename) -{ -	char temp[PATH_MAX] = "";		/* Flawfinder: ignore */ -	// First copy the target's version, so we can run it through sed. -	snprintf(temp, sizeof(temp), "cp '%s' '%s.tmp'", filename, filename);		 -	system(temp);		/* Flawfinder: ignore */ - -	// Now run it through sed. -	snprintf(temp, sizeof(temp), 		 -			"sed 's/Second Life/%s/g' '%s.tmp' > '%s'", gProductName, filename, filename); -	system(temp);		/* Flawfinder: ignore */ -} - -static bool isFSRefViewerBundle(FSRef *targetRef) -{ -	bool result = false; -	CFURLRef targetURL = NULL; -	CFBundleRef targetBundle = NULL; -	CFStringRef targetBundleID = NULL; -	CFStringRef sourceBundleID = NULL; - -	targetURL = CFURLCreateFromFSRef(NULL, targetRef); - -	if(targetURL == NULL) -	{ -		llinfos << "Error creating target URL." << llendl; -	} -	else -	{ -		targetBundle = CFBundleCreate(NULL, targetURL); -	} -	 -	if(targetBundle == NULL) -	{ -		llinfos << "Failed to create target bundle." << llendl; -	} -	else -	{ -		targetBundleID = CFBundleGetIdentifier(targetBundle); -	} -	 -	if(targetBundleID == NULL) -	{ -		llinfos << "Couldn't retrieve target bundle ID." << llendl; -	} -	else -	{ -		sourceBundleID = CFStringCreateWithCString(NULL, gBundleID, kCFStringEncodingUTF8); -		if(CFStringCompare(sourceBundleID, targetBundleID, 0) == kCFCompareEqualTo) -		{ -			// This is the bundle we're looking for. -			result = true; -		} -		else -		{ -			llinfos << "Target bundle ID mismatch." << llendl; -		} -	} -	 -	// Don't release targetBundleID -- since we don't retain it, it's released when targetBundle is released. -	if(targetURL != NULL) -		CFRelease(targetURL); -	if(targetBundle != NULL) -		CFRelease(targetBundle); -	 -	return result; -} - -// Search through the directory specified by 'parent' for an item that appears to be a Second Life viewer. -static OSErr findAppBundleOnDiskImage(FSRef *parent, FSRef *app) -{ -	FSIterator		iterator; -	bool			found = false; - -	OSErr err = FSOpenIterator( parent, kFSIterateFlat, &iterator ); -	if(!err) -	{ -		do -		{ -			ItemCount actualObjects = 0; -			Boolean containerChanged = false; -			FSCatalogInfo info; -			FSRef ref; -			HFSUniStr255 unicodeName; -			err = FSGetCatalogInfoBulk(  -					iterator,  -					1,  -					&actualObjects,  -					&containerChanged, -					kFSCatInfoNodeFlags,  -					&info,  -					&ref, -					NULL,  -					&unicodeName ); -			 -			if(actualObjects == 0) -				break; -				 -			if(!err) -			{ -				// Call succeeded and not done with the iteration. -				std::string name = HFSUniStr255_to_utf8str(&unicodeName); - -				llinfos << "Considering \"" << name << "\"" << llendl; - -				if(info.nodeFlags & kFSNodeIsDirectoryMask) -				{ -					// This is a directory.  See if it's a .app -					if(name.find(".app") != std::string::npos) -					{ -						// Looks promising.  Check to see if it has the right bundle identifier. -						if(isFSRefViewerBundle(&ref)) -						{ -							llinfos << name << " is the one" << llendl; -							// This is the one.  Return it. -							*app = ref; -							found = true; -							break; -						} else { -							llinfos << name << " is not the bundle we are looking for; move along" << llendl; -						} - -					} -				} -			} -		} -		while(!err); -		 -		llinfos << "closing the iterator" << llendl; -		 -		FSCloseIterator(iterator); -		 -		llinfos << "closed" << llendl; -	} -	 -	if(!err && !found) -		err = fnfErr; -		 -	return err; -} - -void *updatethreadproc(void*) -{ -	char tempDir[PATH_MAX] = "";		/* Flawfinder: ignore */ -	FSRef tempDirRef; -	char temp[PATH_MAX] = "";	/* Flawfinder: ignore */ -	// *NOTE: This buffer length is used in a scanf() below. -	char deviceNode[1024] = "";	/* Flawfinder: ignore */ -	LLFILE *downloadFile = NULL; -	OSStatus err; -	ProcessSerialNumber psn; -	char target[PATH_MAX] = "";		/* Flawfinder: ignore */ -	FSRef targetRef; -	FSRef targetParentRef; -	FSVolumeRefNum targetVol; -	FSRef trashFolderRef; -	Boolean replacingTarget = false; - -	memset(&tempDirRef, 0, sizeof(tempDirRef)); -	memset(&targetRef, 0, sizeof(targetRef)); -	memset(&targetParentRef, 0, sizeof(targetParentRef)); -	 -	try -	{ -		// Attempt to get a reference to the Second Life application bundle containing this updater. -		// Any failures during this process will cause us to default to updating /Applications/Second Life.app -		{ -			FSRef myBundle; - -			err = GetCurrentProcess(&psn); -			if(err == noErr) -			{ -				err = GetProcessBundleLocation(&psn, &myBundle); -			} - -			if(err == noErr) -			{ -				// Sanity check:  Make sure the name of the item referenced by targetRef is "Second Life.app". -				FSRefMakePath(&myBundle, (UInt8*)target, sizeof(target)); -				 -				llinfos << "Updater bundle location: " << target << llendl; -			} -			 -			// Our bundle should be in Second Life.app/Contents/Resources/AutoUpdater.app -			// so we need to go up 3 levels to get the path to the main application bundle. -			if(err == noErr) -			{ -				err = FSGetCatalogInfo(&myBundle, kFSCatInfoNone, NULL, NULL, NULL, &targetRef); -			} -			if(err == noErr) -			{ -				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef); -			} -			if(err == noErr) -			{ -				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef); -			} -			 -			// And once more to get the parent of the target -			if(err == noErr) -			{ -				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetParentRef); -			} -			 -			if(err == noErr) -			{ -				FSRefMakePath(&targetRef, (UInt8*)target, sizeof(target)); -				llinfos << "Path to target: " << target << llendl; -			} -			 -			// Sanity check: make sure the target is a bundle with the right identifier -			if(err == noErr) -			{ -				// Assume the worst... -				err = -1; - -				if(isFSRefViewerBundle(&targetRef)) -				{ -					// This is the bundle we're looking for. -					err = noErr; -					replacingTarget = true; -				} -			} -			 -			// Make sure the target's parent directory is writable. -			if(err == noErr) -			{ -				if(!isDirWritable(targetParentRef)) -				{ -					// Parent directory isn't writable. -					llinfos << "Target parent directory not writable." << llendl; -					err = -1; -					replacingTarget = false; -				} -			} - -			if(err != noErr) -			{ -				Boolean isDirectory; -				llinfos << "Target search failed, defaulting to /Applications/" << gProductName << ".app." << llendl; -				 -				// Set up the parent directory -				err = FSPathMakeRef((UInt8*)"/Applications", &targetParentRef, &isDirectory); -				if((err != noErr) || (!isDirectory)) -				{ -					// We're so hosed. -					llinfos << "Applications directory not found, giving up." << llendl; -					throw 0; -				} -				 -				snprintf(target, sizeof(target), "/Applications/%s.app", gProductName);		 - -				memset(&targetRef, 0, sizeof(targetRef)); -				err = FSPathMakeRef((UInt8*)target, &targetRef, NULL); -				if(err == fnfErr) -				{ -					// This is fine, just means we're not replacing anything. -					err = noErr; -					replacingTarget = false; -				} -				else -				{ -					replacingTarget = true; -				} - -				// Make sure the target's parent directory is writable. -				if(err == noErr) -				{ -					if(!isDirWritable(targetParentRef)) -					{ -						// Parent directory isn't writable. -						llinfos << "Target parent directory not writable." << llendl; -						err = -1; -						replacingTarget = false; -					} -				} - -			} -			 -			// If we haven't fixed all problems by this point, just bail. -			if(err != noErr) -			{ -				llinfos << "Unable to pick a target, giving up." << llendl; -				throw 0; -			} -		} -		 -		// Find the volID of the volume the target resides on -		{ -			FSCatalogInfo info; -			err = FSGetCatalogInfo( -				&targetParentRef, -				kFSCatInfoVolume, -				&info, -				NULL,  -				NULL,   -				NULL); -				 -			if(err != noErr) -				throw 0; -			 -			targetVol = info.volume; -		} - -		// Find the temporary items and trash folders on that volume. -		err = FSFindFolder( -			targetVol, -			kTrashFolderType, -			true, -			&trashFolderRef); - -		if(err != noErr) -			throw 0; - -#if 0 // *HACK for DEV-11935 see below for details. - -		FSRef tempFolderRef; - -		err = FSFindFolder( -			targetVol, -			kTemporaryFolderType, -			true, -			&tempFolderRef); -		 -		if(err != noErr) -			throw 0; -		 -		err = FSRefMakePath(&tempFolderRef, (UInt8*)temp, sizeof(temp)); - -		if(err != noErr) -			throw 0; - -#else		 - -		// *HACK for DEV-11935  the above kTemporaryFolderType query was giving -		// back results with path names that seem to be too long to be used as -		// mount points.  I suspect this incompatibility was introduced in the -		// Leopard 10.5.2 update, but I have not verified this.  -		char const HARDCODED_TMP[] = "/tmp"; -		strncpy(temp, HARDCODED_TMP, sizeof(HARDCODED_TMP)); - -#endif // 0 *HACK for DEV-11935 -		 -		// Skip downloading the file if the dmg was passed on the command line. -		std::string dmgName; -		if(gDmgFile != NULL) { -			dmgName = basename((char *)gDmgFile); -			char * dmgDir = dirname((char *)gDmgFile); -			strncpy(tempDir, dmgDir, sizeof(tempDir)); -			err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL); -			if(err != noErr) throw 0; -			chdir(tempDir); -			goto begin_install; -		} else { -			// Continue on to download file. -			dmgName = "SecondLife.dmg"; -		} - -		 -		strncat(temp, "/SecondLifeUpdate_XXXXXX", (sizeof(temp) - strlen(temp)) - 1); -		if(mkdtemp(temp) == NULL) -		{ -			throw 0; -		} -		 -		strncpy(tempDir, temp, sizeof(tempDir)); -		temp[sizeof(tempDir) - 1] = '\0'; -		 -		llinfos << "tempDir is " << tempDir << llendl; - -		err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL); - -		if(err != noErr) -			throw 0; -				 -		chdir(tempDir); -		 -		snprintf(temp, sizeof(temp), "SecondLife.dmg");		 -		 -		downloadFile = LLFile::fopen(temp, "wb");		/* Flawfinder: ignore */ -		if(downloadFile == NULL) -		{ -			throw 0; -		} - -		{ -			CURL *curl = curl_easy_init(); - -			curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); -	//		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &curl_download_callback); -			curl_easy_setopt(curl, CURLOPT_FILE, downloadFile); -			curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0); -			curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, &curl_progress_callback_func); -			curl_easy_setopt(curl, CURLOPT_URL,	gUpdateURL); -			curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); -			 -			sendProgress(0, 1, CFSTR("Downloading...")); -			 -			CURLcode result = curl_easy_perform(curl); -			 -			curl_easy_cleanup(curl); -			 -			if(gCancelled) -			{ -				llinfos << "User cancel, bailing out."<< llendl; -				throw 0; -			} -			 -			if(result != CURLE_OK) -			{ -				llinfos << "Error " << result << " while downloading disk image."<< llendl; -				throw 0; -			} -			 -			fclose(downloadFile); -			downloadFile = NULL; -		} - -	begin_install: -		sendProgress(0, 0, CFSTR("Mounting image...")); -		LLFile::mkdir("mnt", 0700); -		 -		// NOTE: we could add -private at the end of this command line to keep the image from showing up in the Finder, -		//		but if our cleanup fails, this makes it much harder for the user to unmount the image. -		std::string mountOutput; -		boost::format cmdFormat("hdiutil attach %s -mountpoint mnt"); -		cmdFormat % dmgName; -		FILE* mounter = popen(cmdFormat.str().c_str(), "r");		/* Flawfinder: ignore */ -		 -		if(mounter == NULL) -		{ -			llinfos << "Failed to mount disk image, exiting."<< llendl; -			throw 0; -		} -		 -		// We need to scan the output from hdiutil to find the device node it uses to attach the disk image. -		// If we don't have this information, we can't detach it later. -		while(mounter != NULL) -		{ -			size_t len = fread(temp, 1, sizeof(temp)-1, mounter); -			temp[len] = 0; -			mountOutput.append(temp); -			if(len < sizeof(temp)-1) -			{ -				// End of file or error. -				int result = pclose(mounter); -				if(result != 0) -				{ -					// NOTE: We used to abort here, but pclose() started returning  -					// -1, possibly when the size of the DMG passed a certain point  -					llinfos << "Unexpected result closing pipe: " << result << llendl;  -				} -				mounter = NULL; -			} -		} -		 -		if(!mountOutput.empty()) -		{ -			const char *s = mountOutput.c_str(); -			const char *prefix = "/dev/"; -			char *sub = strstr(s, prefix); -			 -			if(sub != NULL) -			{ -				sub += strlen(prefix);	/* Flawfinder: ignore */ -				sscanf(sub, "%1023s", deviceNode);	/* Flawfinder: ignore */ -			} -		} -		 -		if(deviceNode[0] != 0) -		{ -			llinfos << "Disk image attached on /dev/" << deviceNode << llendl; -		} -		else -		{ -			llinfos << "Disk image device node not found!" << llendl; -			throw 0;  -		} -		 -		// Get an FSRef to the new application on the disk image -		FSRef sourceRef; -		FSRef mountRef; -		snprintf(temp, sizeof(temp), "%s/mnt", tempDir);		 - -		llinfos << "Disk image mount point is: " << temp << llendl; - -		err = FSPathMakeRef((UInt8 *)temp, &mountRef, NULL); -		if(err != noErr) -		{ -			llinfos << "Couldn't make FSRef to disk image mount point." << llendl; -			throw 0; -		} - -		sendProgress(0, 0, CFSTR("Searching for the app bundle...")); -		err = findAppBundleOnDiskImage(&mountRef, &sourceRef); -		if(err != noErr) -		{ -			llinfos << "Couldn't find application bundle on mounted disk image." << llendl; -			throw 0; -		} -		else -		{ -			llinfos << "found the bundle." << llendl; -		} - -		sendProgress(0, 0, CFSTR("Preparing to copy files...")); -		 -		FSRef asideRef; -		char aside[MAX_PATH];		/* Flawfinder: ignore */ -		 -		// this will hold the name of the destination target -		CFStringRef appNameRef; - -		if(replacingTarget) -		{ -			// Get the name of the target we're replacing -			HFSUniStr255 appNameUniStr; -			err = FSGetCatalogInfo(&targetRef, 0, NULL, &appNameUniStr, NULL, NULL); -			if(err != noErr) -				throw 0; -			appNameRef = FSCreateStringFromHFSUniStr(NULL, &appNameUniStr); -			 -			// Move aside old version (into work directory) -			err = FSMoveObject(&targetRef, &tempDirRef, &asideRef); -			if(err != noErr) -			{ -				llwarns << "failed to move aside old version (error code " <<  -					err << ")" << llendl; -				throw 0; -			} - -			// Grab the path for later use. -			err = FSRefMakePath(&asideRef, (UInt8*)aside, sizeof(aside)); -		} -		else -		{ -			// Construct the name of the target based on the product name -			char appName[MAX_PATH];		/* Flawfinder: ignore */ -			snprintf(appName, sizeof(appName), "%s.app", gProductName);		 -			appNameRef = CFStringCreateWithCString(NULL, appName, kCFStringEncodingUTF8); -		} -		 -		sendProgress(0, 0, CFSTR("Copying files...")); -		 -		llinfos << "Starting copy..." << llendl; - -		// Copy the new version from the disk image to the target location. -		err = FSCopyObjectSync( -				&sourceRef, -				&targetParentRef, -				appNameRef, -				&targetRef, -				kFSFileOperationDefaultOptions); -		 -		// Grab the path for later use. -		err = FSRefMakePath(&targetRef, (UInt8*)target, sizeof(target)); -		if(err != noErr) -			throw 0; - -		llinfos << "Copy complete. Target = " << target << llendl; - -		if(err != noErr) -		{ -			// Something went wrong during the copy.  Attempt to put the old version back and bail. -			(void)FSDeleteObject(&targetRef); -			if(replacingTarget) -			{ -				(void)FSMoveObject(&asideRef, &targetParentRef, NULL); -			} -			throw 0; -		} -		else -		{ -			// The update has succeeded.  Clear the cache directory. - -			sendProgress(0, 0, CFSTR("Clearing cache...")); -	 -			llinfos << "Clearing cache..." << llendl; -			 -			gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""), "*.*"); -			 -			llinfos << "Clear complete." << llendl; - -		} -	} -	catch(...) -	{ -		if(!gCancelled) -			if(gFailure == noErr) -				gFailure = -1; -	} - -	// Failures from here on out are all non-fatal and not reported. -	sendProgress(0, 3, CFSTR("Cleaning up...")); - -	// Close disk image file if necessary -	if(downloadFile != NULL) -	{ -		llinfos << "Closing download file." << llendl; - -		fclose(downloadFile); -		downloadFile = NULL; -	} - -	sendProgress(1, 3); -	// Unmount image -	if(deviceNode[0] != 0) -	{ -		llinfos << "Detaching disk image." << llendl; - -		snprintf(temp, sizeof(temp), "hdiutil detach '%s'", deviceNode);		 -		system(temp);		/* Flawfinder: ignore */ -	} - -	sendProgress(2, 3); - -	// Move work directory to the trash -	if(tempDir[0] != 0) -	{ -		llinfos << "Moving work directory to the trash." << llendl; - -		FSRef trashRef; -		OSStatus err = FSMoveObjectToTrashSync(&tempDirRef, &trashRef, 0);  -		if(err != noErr) { -			llwarns << "failed to move files to trash, (error code " << -				err << ")" << llendl; -		} -	} -	 -	if(!gCancelled  && !gFailure && (target[0] != 0)) -	{ -		llinfos << "Touching application bundle." << llendl; - -		snprintf(temp, sizeof(temp), "touch '%s'", target);		 -		system(temp);		/* Flawfinder: ignore */ - -		llinfos << "Launching updated application." << llendl; - -		snprintf(temp, sizeof(temp), "open '%s'", target);		 -		system(temp);		/* Flawfinder: ignore */ -	} - -	sendDone(); -	 -	return(NULL); -} - -#if LL_DARWIN -#pragma GCC diagnostic warning "-Wdeprecated-declarations" -#endif diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp index 93d2a8fa6e..ff1ed8bfbc 100755 --- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp +++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp @@ -28,26 +28,26 @@  #include "linden_common.h" -#if defined(LL_DARWIN) -	#include <QuickTime/QuickTime.h> -#elif defined(LL_WINDOWS) -	#include "llwin32headers.h" -	#include "MacTypes.h" -	#include "QTML.h" -	#include "Movies.h" -	#include "QDoffscreen.h" -	#include "FixMath.h" -	#include "QTLoadLibraryUtils.h" -#endif -  #include "llgl.h" - +   #include "llplugininstance.h"  #include "llpluginmessage.h"  #include "llpluginmessageclasses.h"  #include "media_plugin_base.h" - +   #if LL_QUICKTIME_ENABLED +  +#if defined(LL_DARWIN) +#include <QuickTime/QuickTime.h> +#elif defined(LL_WINDOWS) +#include "llwin32headers.h" +#include "MacTypes.h" +#include "QTML.h" +#include "Movies.h" +#include "QDoffscreen.h" +#include "FixMath.h" +#include "QTLoadLibraryUtils.h" +#endif diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 748bd90c61..e8f4144e70 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1769,7 +1769,6 @@ if (WINDOWS)        media_plugin_webkit        winmm_shim        windows-crash-logger -      windows-updater        )      if (FMODEX) @@ -1815,7 +1814,6 @@ if (WINDOWS)      add_dependencies(${VIEWER_BINARY_NAME}        SLPlugin -      windows-updater        windows-crash-logger        ) diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 03d7b8fb9b..36f601f10e 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.7.15 +3.7.16 diff --git a/indra/newview/app_settings/filters/BlackAndWhite.xml b/indra/newview/app_settings/filters/BlackAndWhite.xml index 101ed8233a..7894628d29 100644 --- a/indra/newview/app_settings/filters/BlackAndWhite.xml +++ b/indra/newview/app_settings/filters/BlackAndWhite.xml @@ -1,20 +1,6 @@  <llsd>      <array>          <array> -            <string>linearize</string> -            <real>0.01</real> -            <real>1.0</real> -            <real>1.0</real> -            <real>1.0</real> -        </array> -        <array> -            <string>contrast</string> -            <real>0.8</real> -            <real>1.0</real> -            <real>1.0</real> -            <real>1.0</real> -        </array> -        <array>              <string>grayscale</string>          </array>      </array> diff --git a/indra/newview/app_settings/filters/Sepia.xml b/indra/newview/app_settings/filters/Sepia.xml index 3d577b2998..81d7caf0eb 100644 --- a/indra/newview/app_settings/filters/Sepia.xml +++ b/indra/newview/app_settings/filters/Sepia.xml @@ -1,31 +1,6 @@  <llsd>      <array>          <array> -            <string>linearize</string> -            <real>0.01</real> -            <real>1.0</real> -            <real>1.0</real> -            <real>1.0</real> -        </array> -        <array> -            <string>contrast</string> -            <real>0.8</real> -            <real>1.0</real> -            <real>1.0</real> -            <real>1.0</real> -        </array> -        <array> -            <string>stencil</string> -            <string>vignette</string> -            <string>fade</string> -            <real>0.5</real> -            <real>1.0</real> -            <real>0.0</real> -            <real>0.0</real> -            <real>1.0</real> -            <real>4.0</real> -        </array> -        <array>              <string>sepia</string>          </array>      </array> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 86a7def14f..fbb1637090 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -80,7 +80,7 @@        <key>Type</key>        <string>Boolean</string>        <key>Value</key> -      <integer>0</integer> +      <integer>1</integer>      </map>      <key>AgentPause</key>      <map> @@ -11452,17 +11452,6 @@        <key>Value</key>        <integer>0</integer>      </map> -    <key>SnapshotFiltersEnabled</key> -    <map> -        <key>Comment</key> -        <string>Enable filters in the Snapshot Advanced panel (experimental).</string> -        <key>Persist</key> -        <integer>1</integer> -        <key>Type</key> -        <string>Boolean</string> -        <key>Value</key> -        <integer>0</integer> -    </map>      <key>SnapshotFormat</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llfloaterfacebook.cpp b/indra/newview/llfloaterfacebook.cpp index 9e3f917eae..6888e076aa 100644 --- a/indra/newview/llfloaterfacebook.cpp +++ b/indra/newview/llfloaterfacebook.cpp @@ -58,7 +58,6 @@ static LLPanelInjector<LLFacebookStatusPanel> t_panel_status("llfacebookstatuspa  static LLPanelInjector<LLFacebookPhotoPanel> t_panel_photo("llfacebookphotopanel");  static LLPanelInjector<LLFacebookCheckinPanel> t_panel_checkin("llfacebookcheckinpanel");  static LLPanelInjector<LLFacebookFriendsPanel> t_panel_friends("llfacebookfriendspanel"); -static LLPanelInjector<LLFacebookAccountPanel> t_panel_account("llfacebookaccountpanel");  const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte  const std::string DEFAULT_CHECKIN_LOCATION_URL = "http://maps.secondlife.com/"; @@ -99,13 +98,29 @@ S32 compute_jpeg_quality(S32 width, S32 height)  LLFacebookStatusPanel::LLFacebookStatusPanel() :  	mMessageTextEditor(NULL),  	mPostButton(NULL), -    mCancelButton(NULL) +    mCancelButton(NULL), +	mAccountCaptionLabel(NULL), +	mAccountNameLabel(NULL), +	mPanelButtons(NULL), +	mConnectButton(NULL), +	mDisconnectButton(NULL)  { +	mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLFacebookStatusPanel::onConnect, this)); +	mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLFacebookStatusPanel::onDisconnect, this)); + +	setVisibleCallback(boost::bind(&LLFacebookStatusPanel::onVisibilityChange, this, _2)); +  	mCommitCallbackRegistrar.add("SocialSharing.SendStatus", boost::bind(&LLFacebookStatusPanel::onSend, this));  }  BOOL LLFacebookStatusPanel::postBuild()  { +	mAccountCaptionLabel = getChild<LLTextBox>("account_caption_label"); +	mAccountNameLabel = getChild<LLTextBox>("account_name_label"); +	mPanelButtons = getChild<LLUICtrl>("panel_buttons"); +	mConnectButton = getChild<LLUICtrl>("connect_btn"); +	mDisconnectButton = getChild<LLUICtrl>("disconnect_btn"); +  	mMessageTextEditor = getChild<LLUICtrl>("status_message");  	mPostButton = getChild<LLUICtrl>("post_status_btn");  	mCancelButton = getChild<LLUICtrl>("cancel_status_btn"); @@ -115,6 +130,16 @@ BOOL LLFacebookStatusPanel::postBuild()  void LLFacebookStatusPanel::draw()  { +	LLFacebookConnect::EConnectionState connection_state = LLFacebookConnect::instance().getConnectionState(); + +	//Disable the 'disconnect' button and the 'use another account' button when disconnecting in progress +	bool disconnecting = connection_state == LLFacebookConnect::FB_DISCONNECTING; +	mDisconnectButton->setEnabled(!disconnecting); + +	//Disable the 'connect' button when a connection is in progress +	bool connecting = connection_state == LLFacebookConnect::FB_CONNECTION_IN_PROGRESS; +	mConnectButton->setEnabled(!connecting); +      if (mMessageTextEditor && mPostButton && mCancelButton)  	{          bool no_ongoing_connection = !(LLFacebookConnect::instance().isTransactionOngoing()); @@ -131,7 +156,7 @@ void LLFacebookStatusPanel::onSend()  {  	LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookStatusPanel"); // just in case it is already listening  	LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookStatusPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectStateChange, this, _1)); -		 +	  	// Connect to Facebook if necessary and then post  	if (LLFacebookConnect::instance().isConnected())  	{ @@ -160,6 +185,24 @@ bool LLFacebookStatusPanel::onFacebookConnectStateChange(const LLSD& data)  	return false;  } +bool LLFacebookStatusPanel::onFacebookConnectAccountStateChange(const LLSD& data) +{ +	if(LLFacebookConnect::instance().isConnected()) +	{ +		//In process of disconnecting so leave the layout as is +		if(data.get("enum").asInteger() != LLFacebookConnect::FB_DISCONNECTING) +		{ +			showConnectedLayout(); +		} +	} +	else +	{ +		showDisconnectedLayout(); +	} + +	return false; +} +  void LLFacebookStatusPanel::sendStatus()  {  	std::string message = mMessageTextEditor->getValue().asString(); @@ -169,6 +212,103 @@ void LLFacebookStatusPanel::sendStatus()  	}  } +void LLFacebookStatusPanel::onVisibilityChange(BOOL visible) +{ +	if(visible) +	{ +		LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); +		LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectAccountStateChange, this, _1)); + +		LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); +		LLEventPumps::instance().obtain("FacebookConnectInfo").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectInfoChange, this)); + +		//Connected +		if(LLFacebookConnect::instance().isConnected()) +		{ +			showConnectedLayout(); +		} +		//Check if connected (show disconnected layout in meantime) +		else +		{ +			showDisconnectedLayout(); +		} +        if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) || +            (LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED)) +        { +            LLFacebookConnect::instance().checkConnectionToFacebook(); +        } +	} +	else +	{ +		LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); +		LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); +	} +} + +bool LLFacebookStatusPanel::onFacebookConnectInfoChange() +{ +	LLSD info = LLFacebookConnect::instance().getInfo(); +	std::string clickable_name; + +	//Strings of format [http://www.somewebsite.com Click Me] become clickable text +	if(info.has("link") && info.has("name")) +	{ +		clickable_name = "[" + info["link"].asString() + " " + info["name"].asString() + "]"; +	} + +	mAccountNameLabel->setText(clickable_name); + +	return false; +} + +void LLFacebookStatusPanel::showConnectButton() +{ +	if(!mConnectButton->getVisible()) +	{ +		mConnectButton->setVisible(TRUE); +		mDisconnectButton->setVisible(FALSE); +	} +} + +void LLFacebookStatusPanel::hideConnectButton() +{ +	if(mConnectButton->getVisible()) +	{ +		mConnectButton->setVisible(FALSE); +		mDisconnectButton->setVisible(TRUE); +	} +} + +void LLFacebookStatusPanel::showDisconnectedLayout() +{ +	mAccountCaptionLabel->setText(getString("facebook_disconnected")); +	mAccountNameLabel->setText(std::string("")); +	showConnectButton(); +} + +void LLFacebookStatusPanel::showConnectedLayout() +{ +	LLFacebookConnect::instance().loadFacebookInfo(); + +	mAccountCaptionLabel->setText(getString("facebook_connected")); +	hideConnectButton(); +} + +void LLFacebookStatusPanel::onConnect() +{ +	LLFacebookConnect::instance().checkConnectionToFacebook(true); + +	//Clear only the facebook browser cookies so that the facebook login screen appears +	LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com");  +} + +void LLFacebookStatusPanel::onDisconnect() +{ +	LLFacebookConnect::instance().disconnectFromFacebook(); + +	LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com");  +} +  void LLFacebookStatusPanel::clearAndClose()  {  	mMessageTextEditor->setValue(""); @@ -185,7 +325,6 @@ void LLFacebookStatusPanel::clearAndClose()  ///////////////////////////  LLFacebookPhotoPanel::LLFacebookPhotoPanel() : -mSnapshotPanel(NULL),  mResolutionComboBox(NULL),  mRefreshBtn(NULL),  mBtnPreview(NULL), @@ -213,7 +352,6 @@ BOOL LLFacebookPhotoPanel::postBuild()  {  	setVisibleCallback(boost::bind(&LLFacebookPhotoPanel::onVisibilityChange, this, _2)); -	mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel");  	mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox");  	mResolutionComboBox->setValue("[i1200,i630]"); // hardcoded defaults ftw!  	mResolutionComboBox->setCommitCallback(boost::bind(&LLFacebookPhotoPanel::updateResolution, this, TRUE)); @@ -300,16 +438,9 @@ void LLFacebookPhotoPanel::draw()  		// calc preview offset within the preview rect  		const S32 local_offset_x = (thumbnail_rect.getWidth()  - thumbnail_w) / 2 ;  		const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ; +		S32 offset_x = thumbnail_rect.mLeft + local_offset_x; +		S32 offset_y = thumbnail_rect.mBottom + local_offset_y; -		// calc preview offset within the floater rect -        // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater. -        // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity. -        // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time. -		S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1; -		S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39; -         -		mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>()); -          		gGL.matrixMode(LLRender::MM_MODELVIEW);  		// Apply floater transparency to the texture unless the floater is focused.  		F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); @@ -344,7 +475,7 @@ void LLFacebookPhotoPanel::onVisibilityChange(BOOL visible)  			LLSnapshotLivePreview* preview = getPreviewView();  			if(preview)  			{ -				lldebugs << "opened, updating snapshot" << llendl; +				LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL;  				preview->updateSnapshot(TRUE);  			}  		} @@ -477,7 +608,7 @@ void LLFacebookPhotoPanel::updateControls()  	BOOL got_snap = previewp && previewp->getSnapshotUpToDate();  	// *TODO: Separate maximum size for Web images from postcards -	lldebugs << "Is snapshot up-to-date? " << got_snap << llendl; +	LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL;  	updateResolution(FALSE);  } @@ -507,13 +638,13 @@ void LLFacebookPhotoPanel::updateResolution(BOOL do_update)  		if (width == 0 || height == 0)  		{  			// take resolution from current window size -			lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl; +			LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL;  			previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());  		}  		else  		{  			// use the resolution from the selected pre-canned drop-down choice -			lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl; +			LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL;  			previewp->setSize(width, height);  		} @@ -887,164 +1018,6 @@ bool LLFacebookFriendsPanel::onConnectedToFacebook(const LLSD& data)  	return false;  } -/////////////////////////// -//LLFacebookAccountPanel////// -/////////////////////////// - -LLFacebookAccountPanel::LLFacebookAccountPanel() :  -mAccountCaptionLabel(NULL), -mAccountNameLabel(NULL), -mPanelButtons(NULL), -mConnectButton(NULL), -mDisconnectButton(NULL) -{ -	mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLFacebookAccountPanel::onConnect, this)); -	mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLFacebookAccountPanel::onDisconnect, this)); - -	setVisibleCallback(boost::bind(&LLFacebookAccountPanel::onVisibilityChange, this, _2)); -} - -BOOL LLFacebookAccountPanel::postBuild() -{ -	mAccountCaptionLabel = getChild<LLTextBox>("account_caption_label"); -	mAccountNameLabel = getChild<LLTextBox>("account_name_label"); -	mPanelButtons = getChild<LLUICtrl>("panel_buttons"); -	mConnectButton = getChild<LLUICtrl>("connect_btn"); -	mDisconnectButton = getChild<LLUICtrl>("disconnect_btn"); - -	return LLPanel::postBuild(); -} - -void LLFacebookAccountPanel::draw() -{ -	LLFacebookConnect::EConnectionState connection_state = LLFacebookConnect::instance().getConnectionState(); - -	//Disable the 'disconnect' button and the 'use another account' button when disconnecting in progress -	bool disconnecting = connection_state == LLFacebookConnect::FB_DISCONNECTING; -	mDisconnectButton->setEnabled(!disconnecting); - -	//Disable the 'connect' button when a connection is in progress -	bool connecting = connection_state == LLFacebookConnect::FB_CONNECTION_IN_PROGRESS; -	mConnectButton->setEnabled(!connecting); - -	LLPanel::draw(); -} - -void LLFacebookAccountPanel::onVisibilityChange(BOOL visible) -{ -	if(visible) -	{ -		LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); -		LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookAccountPanel::onFacebookConnectStateChange, this, _1)); - -		LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); -		LLEventPumps::instance().obtain("FacebookConnectInfo").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookAccountPanel::onFacebookConnectInfoChange, this)); - -		//Connected -		if(LLFacebookConnect::instance().isConnected()) -		{ -			showConnectedLayout(); -		} -		//Check if connected (show disconnected layout in meantime) -		else -		{ -			showDisconnectedLayout(); -		} -        if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) || -            (LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED)) -        { -            LLFacebookConnect::instance().checkConnectionToFacebook(); -        } -	} -	else -	{ -		LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); -		LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); -	} -} - -bool LLFacebookAccountPanel::onFacebookConnectStateChange(const LLSD& data) -{ -	if(LLFacebookConnect::instance().isConnected()) -	{ -		//In process of disconnecting so leave the layout as is -		if(data.get("enum").asInteger() != LLFacebookConnect::FB_DISCONNECTING) -		{ -			showConnectedLayout(); -		} -	} -	else -	{ -		showDisconnectedLayout(); -	} - -	return false; -} - -bool LLFacebookAccountPanel::onFacebookConnectInfoChange() -{ -	LLSD info = LLFacebookConnect::instance().getInfo(); -	std::string clickable_name; - -	//Strings of format [http://www.somewebsite.com Click Me] become clickable text -	if(info.has("link") && info.has("name")) -	{ -		clickable_name = "[" + info["link"].asString() + " " + info["name"].asString() + "]"; -	} - -	mAccountNameLabel->setText(clickable_name); - -	return false; -} - -void LLFacebookAccountPanel::showConnectButton() -{ -	if(!mConnectButton->getVisible()) -	{ -		mConnectButton->setVisible(TRUE); -		mDisconnectButton->setVisible(FALSE); -	} -} - -void LLFacebookAccountPanel::hideConnectButton() -{ -	if(mConnectButton->getVisible()) -	{ -		mConnectButton->setVisible(FALSE); -		mDisconnectButton->setVisible(TRUE); -	} -} - -void LLFacebookAccountPanel::showDisconnectedLayout() -{ -	mAccountCaptionLabel->setText(getString("facebook_disconnected")); -	mAccountNameLabel->setText(std::string("")); -	showConnectButton(); -} - -void LLFacebookAccountPanel::showConnectedLayout() -{ -	LLFacebookConnect::instance().loadFacebookInfo(); - -	mAccountCaptionLabel->setText(getString("facebook_connected")); -	hideConnectButton(); -} - -void LLFacebookAccountPanel::onConnect() -{ -	LLFacebookConnect::instance().checkConnectionToFacebook(true); - -	//Clear only the facebook browser cookies so that the facebook login screen appears -	LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com");  -} - -void LLFacebookAccountPanel::onDisconnect() -{ -	LLFacebookConnect::instance().disconnectFromFacebook(); - -	LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com");  -} -  ////////////////////////  //LLFloaterFacebook///////  //////////////////////// @@ -1094,7 +1067,7 @@ void LLFloaterFacebook::showPhotoPanel()  	LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mFacebookPhotoPanel->getParent());  	if (!parent)  	{ -		llwarns << "Cannot find panel container" << llendl; +		LL_WARNS() << "Cannot find panel container" << LL_ENDL;  		return;  	} diff --git a/indra/newview/llfloaterfacebook.h b/indra/newview/llfloaterfacebook.h index 34356412d6..a4ca666b20 100644 --- a/indra/newview/llfloaterfacebook.h +++ b/indra/newview/llfloaterfacebook.h @@ -46,11 +46,28 @@ public:  	void draw();      void onSend();  	bool onFacebookConnectStateChange(const LLSD& data); +	bool onFacebookConnectAccountStateChange(const LLSD& data);  	void sendStatus();  	void clearAndClose();  private: +	void onVisibilityChange(BOOL new_visibility); +	bool onFacebookConnectInfoChange(); +	void onConnect(); +	void onUseAnotherAccount(); +	void onDisconnect(); + +	void showConnectButton(); +	void hideConnectButton(); +	void showDisconnectedLayout(); +	void showConnectedLayout(); + +	LLTextBox * mAccountCaptionLabel; +	LLTextBox * mAccountNameLabel; +	LLUICtrl * mPanelButtons; +	LLUICtrl * mConnectButton; +	LLUICtrl * mDisconnectButton;  	LLUICtrl* mMessageTextEditor;  	LLUICtrl* mPostButton;  	LLUICtrl* mCancelButton; @@ -87,7 +104,6 @@ private:  	LLHandle<LLView> mPreviewHandle; -	LLUICtrl * mSnapshotPanel;  	LLUICtrl * mResolutionComboBox;  	LLUICtrl * mFilterComboBox;  	LLUICtrl * mRefreshBtn; @@ -147,33 +163,6 @@ private:  	LLAvatarList* mSuggestedFriends;  }; -class LLFacebookAccountPanel : public LLPanel -{ -public: -	LLFacebookAccountPanel(); -	BOOL postBuild(); -	void draw(); - -private: -	void onVisibilityChange(BOOL new_visibility); -	bool onFacebookConnectStateChange(const LLSD& data); -	bool onFacebookConnectInfoChange(); -	void onConnect(); -	void onUseAnotherAccount(); -	void onDisconnect(); - -	void showConnectButton(); -	void hideConnectButton(); -	void showDisconnectedLayout(); -	void showConnectedLayout(); - -	LLTextBox * mAccountCaptionLabel; -	LLTextBox * mAccountNameLabel; -	LLUICtrl * mPanelButtons; -	LLUICtrl * mConnectButton; -	LLUICtrl * mDisconnectButton; -}; -  class LLFloaterFacebook : public LLFloater  {  public: diff --git a/indra/newview/llfloaterflickr.cpp b/indra/newview/llfloaterflickr.cpp index 4e6d98ecfa..36afab86b7 100644 --- a/indra/newview/llfloaterflickr.cpp +++ b/indra/newview/llfloaterflickr.cpp @@ -65,7 +65,6 @@ const std::string FLICKR_MACHINE_TAGS_NAMESPACE = "secondlife";  ///////////////////////////  LLFlickrPhotoPanel::LLFlickrPhotoPanel() : -mSnapshotPanel(NULL),  mResolutionComboBox(NULL),  mRefreshBtn(NULL),  mBtnPreview(NULL), @@ -96,7 +95,6 @@ BOOL LLFlickrPhotoPanel::postBuild()  {  	setVisibleCallback(boost::bind(&LLFlickrPhotoPanel::onVisibilityChange, this, _2)); -	mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel");  	mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox");  	mResolutionComboBox->setCommitCallback(boost::bind(&LLFlickrPhotoPanel::updateResolution, this, TRUE));  	mFilterComboBox = getChild<LLUICtrl>("filters_combobox"); @@ -191,16 +189,9 @@ void LLFlickrPhotoPanel::draw()  		// calc preview offset within the preview rect  		const S32 local_offset_x = (thumbnail_rect.getWidth()  - thumbnail_w) / 2 ;  		const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ; +		S32 offset_x = thumbnail_rect.mLeft + local_offset_x; +		S32 offset_y = thumbnail_rect.mBottom + local_offset_y; -		// calc preview offset within the floater rect -        // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater. -        // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity. -        // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time. -		S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1; -		S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39; -         -		mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>()); -          		gGL.matrixMode(LLRender::MM_MODELVIEW);  		// Apply floater transparency to the texture unless the floater is focused.  		F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); @@ -235,7 +226,7 @@ void LLFlickrPhotoPanel::onVisibilityChange(BOOL visible)  			LLSnapshotLivePreview* preview = getPreviewView();  			if(preview)  			{ -				lldebugs << "opened, updating snapshot" << llendl; +				LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL;  				preview->updateSnapshot(TRUE);  			}  		} @@ -427,7 +418,7 @@ void LLFlickrPhotoPanel::updateControls()  	BOOL got_snap = previewp && previewp->getSnapshotUpToDate();  	// *TODO: Separate maximum size for Web images from postcards -	lldebugs << "Is snapshot up-to-date? " << got_snap << llendl; +	LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL;  	updateResolution(FALSE);  } @@ -457,13 +448,13 @@ void LLFlickrPhotoPanel::updateResolution(BOOL do_update)  		if (width == 0 || height == 0)  		{  			// take resolution from current window size -			lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl; +			LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL;  			previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());  		}  		else  		{  			// use the resolution from the selected pre-canned drop-down choice -			lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl; +			LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL;  			previewp->setSize(width, height);  		} @@ -726,7 +717,7 @@ void LLFloaterFlickr::showPhotoPanel()  	LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mFlickrPhotoPanel->getParent());  	if (!parent)  	{ -		llwarns << "Cannot find panel container" << llendl; +		LL_WARNS() << "Cannot find panel container" << LL_ENDL;  		return;  	} diff --git a/indra/newview/llfloaterflickr.h b/indra/newview/llfloaterflickr.h index ba27c9a3d8..74da3bcea9 100644 --- a/indra/newview/llfloaterflickr.h +++ b/indra/newview/llfloaterflickr.h @@ -67,7 +67,6 @@ private:  	LLHandle<LLView> mPreviewHandle; -	LLUICtrl * mSnapshotPanel;  	LLUICtrl * mResolutionComboBox;  	LLUICtrl * mFilterComboBox;  	LLUICtrl * mRefreshBtn; diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index c094eb3180..7621c35ed2 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -1517,6 +1517,8 @@ void LLPanelLandObjects::onClickRefresh(void* userdata)  	LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();  	if (!region) return; +	self->mBtnRefresh->setEnabled(false); +  	// ready the list for results  	self->mOwnerList->deleteAllItems();  	self->mOwnerList->setCommentText(LLTrans::getString("Searching")); @@ -1576,6 +1578,7 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo  		{  			msg->getU32("DataExtended", "TimeStamp", most_recent_time, i);  		} +  		if (owner_id.isNull())  		{  			continue; @@ -1611,10 +1614,10 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo  		item_params.columns.add().value(LLDate((time_t)most_recent_time)).font(FONT).column("mostrecent").type("date");  		self->mOwnerList->addNameItemRow(item_params); -  		LL_DEBUGS() << "object owner " << owner_id << " (" << (is_group_owned ? "group" : "agent")  				<< ") owns " << object_count << " objects." << LL_ENDL;  	} +  	// check for no results  	if (0 == self->mOwnerList->getItemCount())  	{ @@ -1624,6 +1627,8 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo  	{  		self->mOwnerList->setEnabled(TRUE);  	} + +	self->mBtnRefresh->setEnabled(true);  }  // static diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 5e9b25b474..a2af9da670 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -481,6 +481,17 @@ void LLFloaterRegionInfo::refresh()  	}  } +void LLFloaterRegionInfo::enableTopButtons() +{ +	getChildView("top_colliders_btn")->setEnabled(true); +	getChildView("top_scripts_btn")->setEnabled(true); +} + +void LLFloaterRegionInfo::disableTopButtons() +{ +	getChildView("top_colliders_btn")->setEnabled(false); +	getChildView("top_scripts_btn")->setEnabled(false); +}  ///----------------------------------------------------------------------------  /// Local class implementation @@ -1033,6 +1044,11 @@ void LLPanelRegionDebugInfo::onClickTopColliders(void* data)  	if(!instance) return;  	LLFloaterReg::showInstance("top_objects");  	instance->clearList(); +	instance->disableRefreshBtn(); + +	self->getChildView("top_colliders_btn")->setEnabled(false); +	self->getChildView("top_scripts_btn")->setEnabled(false); +  	self->sendEstateOwnerMessage(gMessageSystem, "colliders", invoice, strings);  } @@ -1047,6 +1063,11 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data)  	if(!instance) return;  	LLFloaterReg::showInstance("top_objects");  	instance->clearList(); +	instance->disableRefreshBtn(); + +	self->getChildView("top_colliders_btn")->setEnabled(false); +	self->getChildView("top_scripts_btn")->setEnabled(false); +  	self->sendEstateOwnerMessage(gMessageSystem, "scripts", invoice, strings);  } diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 5bc4273d5f..792f60ebc8 100755 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -96,6 +96,8 @@ public:  	void requestRegionInfo();  	void requestMeshRezInfo(); +	void enableTopButtons(); +	void disableTopButtons();  private: diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 960d3f35dd..8677028942 100755 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -62,7 +62,6 @@ const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512  static LLDefaultChildRegistry::Register<LLSnapshotFloaterView> r("snapshot_floater_view"); -  ///----------------------------------------------------------------------------  /// Class LLFloaterSnapshot::Impl  ///---------------------------------------------------------------------------- @@ -96,7 +95,6 @@ public:  	static void onClickAutoSnap(LLUICtrl *ctrl, void* data);  	static void onClickFilter(LLUICtrl *ctrl, void* data);  	//static void onClickAdvanceSnap(LLUICtrl *ctrl, void* data); -	static void onClickMore(void* data) ;  	static void onClickUICheck(LLUICtrl *ctrl, void* data);  	static void onClickHUDCheck(LLUICtrl *ctrl, void* data);  	static void applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL checked); @@ -264,29 +262,34 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)  	BOOL advanced = gSavedSettings.getBOOL("AdvanceSnapshot"); -	// Show/hide advanced options. -	LLPanel* advanced_options_panel = floaterp->getChild<LLPanel>("advanced_options_panel"); -	floaterp->getChild<LLButton>("advanced_options_btn")->setImageOverlay(advanced ? "TabIcon_Open_Off" : "TabIcon_Close_Off"); -	if (advanced != advanced_options_panel->getVisible()) +	//BD - Automatically calculate the size of our snapshot window to enlarge +	//     the snapshot preview to its maximum size, this is especially helpfull +	//     for pretty much every aspect ratio other than 1:1. +	F32 panel_width = 400.f * gViewerWindow->getWorldViewAspectRatio(); + +	//BD - Make sure we clamp at 700 here because 700 would be for 16:9 which we +	//     consider the maximum. Everything bigger will be clamped and will have +	//     a slightly smaller preview window which most likely won't fill up the +	//     whole snapshot floater as it should. +	if(panel_width > 700.f)  	{ -		S32 panel_width = advanced_options_panel->getRect().getWidth(); -		floaterp->getChild<LLPanel>("advanced_options_panel")->setVisible(advanced); -		S32 floater_width = floaterp->getRect().getWidth(); -		floater_width += (advanced ? panel_width : -panel_width); -		floaterp->reshape(floater_width, floaterp->getRect().getHeight()); +		panel_width = 700.f;  	} -	if(!advanced) //set to original window resolution +	S32 floater_width = 224.f; +	if(advanced)  	{ -		previewp->mKeepAspectRatio = TRUE; - -		floaterp->getChild<LLComboBox>("profile_size_combo")->setCurrentByIndex(0); -		floaterp->getChild<LLComboBox>("postcard_size_combo")->setCurrentByIndex(0); -		floaterp->getChild<LLComboBox>("texture_size_combo")->setCurrentByIndex(0); -		floaterp->getChild<LLComboBox>("local_size_combo")->setCurrentByIndex(0); +		floater_width = floater_width + panel_width; +	} -		LLSnapshotLivePreview* previewp = getPreviewView(floaterp); -		previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); +	LLUICtrl* thumbnail_placeholder = floaterp->getChild<LLUICtrl>("thumbnail_placeholder"); +	thumbnail_placeholder->setVisible(advanced); +	thumbnail_placeholder->reshape(panel_width, thumbnail_placeholder->getRect().getHeight()); +	floaterp->getChild<LLUICtrl>("image_res_text")->setVisible(advanced); +	floaterp->getChild<LLUICtrl>("file_size_label")->setVisible(advanced); +	if(!floaterp->isMinimized()) +	{ +		floaterp->reshape(floater_width, floaterp->getRect().getHeight());  	}  	bool use_freeze_frame = floaterp->getChild<LLUICtrl>("freeze_frame_check")->getValue().asBoolean(); @@ -388,7 +391,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  			height_ctrl->setValue(h);  		} -		// Сlamp snapshot resolution to window size when showing UI or HUD in snapshot. +		// Clamp snapshot resolution to window size when showing UI or HUD in snapshot.  		if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot"))  		{  			S32 width = gViewerWindow->getWindowWidthRaw(); @@ -576,25 +579,11 @@ void LLFloaterSnapshot::Impl::onClickFilter(LLUICtrl *ctrl, void* data)              LLComboBox* filterbox = static_cast<LLComboBox *>(view->getChild<LLComboBox>("filters_combobox"));              std::string filter_name = (filterbox->getCurrentIndex() ? filterbox->getSimple() : "");              previewp->setFilter(filter_name); -            previewp->updateSnapshot(FALSE, TRUE); +            previewp->updateSnapshot(TRUE);          }  	}  } -void LLFloaterSnapshot::Impl::onClickMore(void* data) -{ -	BOOL visible = gSavedSettings.getBOOL("AdvanceSnapshot"); -	 -	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; -	if (view) -	{ -		view->impl.setStatus(Impl::STATUS_READY); -		gSavedSettings.setBOOL("AdvanceSnapshot", !visible); -		updateControls(view) ; -		updateLayout(view) ; -	} -} -  // static  void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data)  { @@ -772,6 +761,12 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  		S32 original_width = 0 , original_height = 0 ;  		previewp->getSize(original_width, original_height) ; +		if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot")) +		{ //clamp snapshot resolution to window size when showing UI or HUD in snapshot +			width = llmin(width, gViewerWindow->getWindowWidthRaw()); +			height = llmin(height, gViewerWindow->getWindowHeightRaw()); +		} +  		if (width == 0 || height == 0)  		{  			// take resolution from current window size @@ -817,14 +812,12 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  		checkAspectRatio(view, width) ;  		previewp->getSize(width, height); -	 -		if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot")) -		{ //clamp snapshot resolution to window size when showing UI or HUD in snapshot -			width = llmin(width, gViewerWindow->getWindowWidthRaw()); -			height = llmin(height, gViewerWindow->getWindowHeightRaw()); -		} -		updateSpinners(view, previewp, width, height, TRUE); // may change width and height +		// We use the height spinner here because we come here via the aspect ratio +		// checkbox as well and we want height always changing to width by default. +		// If we use the width spinner we would change width according to height by +		// default, that is not what we want. +		updateSpinners(view, previewp, width, height, !getHeightSpinner(view)->isDirty()); // may change width and height  		if(getWidthSpinner(view)->getValue().asInteger() != width || getHeightSpinner(view)->getValue().asInteger() != height)  		{ @@ -839,12 +832,11 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  			// hide old preview as the aspect ratio could be wrong  			checkAutoSnapshot(previewp, FALSE);  			LL_DEBUGS() << "updating thumbnail" << LL_ENDL; -			getPreviewView(view)->updateSnapshot(FALSE, TRUE); +			getPreviewView(view)->updateSnapshot(TRUE);  			if(do_update)  			{  				LL_DEBUGS() << "Will update controls" << LL_ENDL;  				updateControls(view); -				setNeedRefresh(view, true);  			}  		}  	} @@ -887,7 +879,6 @@ void LLFloaterSnapshot::Impl::onImageFormatChange(LLFloaterSnapshot* view)  		LL_DEBUGS() << "image format changed, updating snapshot" << LL_ENDL;  		getPreviewView(view)->updateSnapshot(TRUE);  		updateControls(view); -		setNeedRefresh(view, false); // we're refreshing  	}  } @@ -956,6 +947,8 @@ void LLFloaterSnapshot::Impl::setImageSizeSpinnersValues(LLFloaterSnapshot *view  // static  void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed)  { +	getWidthSpinner(view)->resetDirty(); +	getHeightSpinner(view)->resetDirty();  	if (checkImageSize(previewp, width, height, is_width_changed, previewp->getMaxImageSize()))  	{  		setImageSizeSpinnersValues(view, width, height); @@ -965,8 +958,6 @@ void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshot  // static  void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32 w, S32 h)  { -	bool need_refresh = false; -  	LL_DEBUGS() << "applyCustomResolution(" << w << ", " << h << ")" << LL_ENDL;  	if (!view) return; @@ -981,25 +972,16 @@ void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32  			//if to upload a snapshot, process spinner input in a special way.  			previewp->setMaxImageSize((S32) getWidthSpinner(view)->getMaxValue()) ; -			updateSpinners(view, previewp, w, h, w != curw); // may change w and h -  			previewp->setSize(w,h);  			checkAutoSnapshot(previewp, FALSE); -			LL_DEBUGS() << "applied custom resolution, updating thumbnail" << LL_ENDL; -			previewp->updateSnapshot(FALSE, TRUE);  			comboSetCustom(view, "profile_size_combo");  			comboSetCustom(view, "postcard_size_combo");  			comboSetCustom(view, "texture_size_combo");  			comboSetCustom(view, "local_size_combo"); -			need_refresh = true; +			LL_DEBUGS() << "applied custom resolution, updating thumbnail" << LL_ENDL; +			previewp->updateSnapshot(TRUE);  		}  	} - -	updateControls(view); -	if (need_refresh) -	{ -		setNeedRefresh(view, true); // need to do this after updateControls() -	}  }  // static @@ -1055,8 +1037,6 @@ BOOL LLFloaterSnapshot::postBuild()  	mSucceessLblPanel = getChild<LLUICtrl>("succeeded_panel");  	mFailureLblPanel = getChild<LLUICtrl>("failed_panel"); -	childSetAction("advanced_options_btn", Impl::onClickMore, this); -  	childSetCommitCallback("ui_check", Impl::onClickUICheck, this);  	getChild<LLUICtrl>("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot")); @@ -1075,24 +1055,15 @@ BOOL LLFloaterSnapshot::postBuild()  	getChild<LLUICtrl>("auto_snapshot_check")->setValue(gSavedSettings.getBOOL("AutoSnapshot"));  	childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this); +  	// Filters  	LLComboBox* filterbox = getChild<LLComboBox>("filters_combobox"); -    if (gSavedSettings.getBOOL("SnapshotFiltersEnabled")) -    { -        // Update filter list if setting is on (experimental) -        std::vector<std::string> filter_list = LLImageFiltersManager::getInstance()->getFiltersList(); -        for (U32 i = 0; i < filter_list.size(); i++) -        { -            filterbox->add(filter_list[i]); -        } -        childSetCommitCallback("filters_combobox", Impl::onClickFilter, this); -    } -    else +    std::vector<std::string> filter_list = LLImageFiltersManager::getInstance()->getFiltersList(); +    for (U32 i = 0; i < filter_list.size(); i++)      { -        // Hide Filter UI if setting is off (default) -        getChild<LLUICtrl>("filter_list_label")->setVisible(FALSE); -        filterbox->setVisible(FALSE); +        filterbox->add(filter_list[i]);      } +    childSetCommitCallback("filters_combobox", Impl::onClickFilter, this);  	LLWebProfile::setImageUploadResultCallback(boost::bind(&LLFloaterSnapshot::Impl::onSnapshotUploadFinished, _1));  	LLPostCard::setPostResultCallback(boost::bind(&LLFloaterSnapshot::Impl::onSendingPostcardFinished, _1)); @@ -1119,7 +1090,7 @@ BOOL LLFloaterSnapshot::postBuild()  	getChild<LLComboBox>("profile_size_combo")->selectNthItem(0);  	getChild<LLComboBox>("postcard_size_combo")->selectNthItem(0);  	getChild<LLComboBox>("texture_size_combo")->selectNthItem(0); -	getChild<LLComboBox>("local_size_combo")->selectNthItem(0); +	getChild<LLComboBox>("local_size_combo")->selectNthItem(8);  	getChild<LLComboBox>("local_format_combo")->selectNthItem(0);  	impl.mPreviewHandle = previewp->getHandle(); @@ -1145,7 +1116,7 @@ void LLFloaterSnapshot::draw()  	LLFloater::draw(); -	if (previewp && !isMinimized()) +	if (previewp && !isMinimized() && sThumbnailPlaceholder->getVisible())  	{		  		if(previewp->getThumbnailImage())  		{ @@ -1172,44 +1143,13 @@ void LLFloaterSnapshot::draw()  			previewp->drawPreviewRect(offset_x, offset_y) ; -			// Draw some controls on top of the preview thumbnail. -			static const S32 PADDING = 5; -			static const S32 REFRESH_LBL_BG_HEIGHT = 32; - -			// Reshape and position the posting result message panels at the top of the thumbnail. -			// Do this regardless of current posting status (finished or not) to avoid flicker -			// when the result message is displayed for the first time. -			// if (impl.getStatus() == Impl::STATUS_FINISHED) -			{ -				LLRect result_lbl_rect = mSucceessLblPanel->getRect(); -				const S32 result_lbl_h = result_lbl_rect.getHeight(); -				result_lbl_rect.setLeftTopAndSize(local_offset_x, local_offset_y + thumbnail_h, thumbnail_w - 1, result_lbl_h); -				mSucceessLblPanel->reshape(result_lbl_rect.getWidth(), result_lbl_h); -				mSucceessLblPanel->setRect(result_lbl_rect); -				mFailureLblPanel->reshape(result_lbl_rect.getWidth(), result_lbl_h); -				mFailureLblPanel->setRect(result_lbl_rect); -			} - -			// Position the refresh button in the bottom left corner of the thumbnail. -			mRefreshBtn->setOrigin(local_offset_x + PADDING, local_offset_y + PADDING); - -			if (impl.mNeedRefresh) -			{ -				// Place the refresh hint text to the right of the refresh button. -				const LLRect& refresh_btn_rect = mRefreshBtn->getRect(); -				mRefreshLabel->setOrigin(refresh_btn_rect.mLeft + refresh_btn_rect.getWidth() + PADDING, refresh_btn_rect.mBottom); - -				// Draw the refresh hint background. -				LLRect refresh_label_bg_rect(offset_x, offset_y + REFRESH_LBL_BG_HEIGHT, offset_x + thumbnail_w - 1, offset_y); -				gl_rect_2d(refresh_label_bg_rect, LLColor4::white % 0.9f, TRUE); -			} -  			gGL.pushUIMatrix();  			LLUI::translate((F32) thumbnail_rect.mLeft, (F32) thumbnail_rect.mBottom);  			sThumbnailPlaceholder->draw();  			gGL.popUIMatrix();  		}  	} +	impl.updateLayout(this);  }  void LLFloaterSnapshot::onOpen(const LLSD& key) @@ -1225,6 +1165,9 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)  	gSnapshotFloaterView->setVisible(TRUE);  	gSnapshotFloaterView->adjustToFitScreen(this, FALSE); +	impl.updateControls(this); +	impl.updateLayout(this); +  	// Initialize default tab.  	getChild<LLSideTrayPanelContainer>("panel_container")->getCurrentPanel()->onOpen(LLSD());  } @@ -1293,8 +1236,6 @@ S32 LLFloaterSnapshot::notify(const LLSD& info)  	{          // Disable the send/post/save buttons until snapshot is ready.          impl.updateControls(this); -        // Force hiding the "Refresh to save" hint because we know we've just started refresh. -        impl.setNeedRefresh(this, false);  		return 1;  	} diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp index 7530c72dd2..d604b8619a 100755 --- a/indra/newview/llfloatertopobjects.cpp +++ b/indra/newview/llfloatertopobjects.cpp @@ -50,6 +50,7 @@  #include "llviewerregion.h"  #include "lluictrlfactory.h"  #include "llviewerwindow.h" +#include "llfloaterregioninfo.h"  //LLFloaterTopObjects* LLFloaterTopObjects::sInstance = NULL; @@ -207,7 +208,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)  		columns[column_num++]["font"] = "SANSSERIF";  		columns[column_num]["column"] = "location"; -		columns[column_num]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z); +		columns[column_num]["value"] = llformat("<%0.f, %0.f, %0.f>", location_x, location_y, location_z);  		columns[column_num++]["font"] = "SANSSERIF";  		columns[column_num]["column"] = "parcel"; @@ -257,6 +258,8 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)  		format.setArg("[COUNT]", llformat("%d", total_count));  		format.setArg("[TIME]", llformat("%0.3f", mtotalScore));  		getChild<LLUICtrl>("title_text")->setValue(LLSD(format)); +		list->setColumnLabel("URLs", getString("URLs")); +		list->setColumnLabel("memory", getString("memory"));  	}  	else  	{ @@ -268,6 +271,13 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)  		format.setArg("[COUNT]", llformat("%d", total_count));  		getChild<LLUICtrl>("title_text")->setValue(LLSD(format));  	} + +	LLFloaterRegionInfo* region_info_floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info"); +	if(region_info_floater) +	{ +		region_info_floater->enableTopButtons(); +	} +	getChildView("refresh_btn")->setEnabled(true);  }  void LLFloaterTopObjects::onCommitObjectsList() @@ -453,12 +463,24 @@ void LLFloaterTopObjects::onRefresh()  	msg->addStringFast(_PREHASH_Filter, filter);  	msg->addS32Fast(_PREHASH_ParcelLocalID, 0); +	LLFloaterRegionInfo* region_info_floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info"); +	if(region_info_floater) +	{ +		region_info_floater->disableTopButtons(); +	} +	disableRefreshBtn(); +  	msg->sendReliable(gAgent.getRegionHost());  	mFilter.clear();  	mFlags = 0;  } +void LLFloaterTopObjects::disableRefreshBtn() +{ +	getChildView("refresh_btn")->setEnabled(false); +} +  void LLFloaterTopObjects::onGetByObjectName()  {  	mFlags  = STAT_FILTER_BY_OBJECT; diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h index 28d2aa58e2..dbbe9ac521 100755 --- a/indra/newview/llfloatertopobjects.h +++ b/indra/newview/llfloatertopobjects.h @@ -66,6 +66,7 @@ public:  	void onRefresh();  	static void setMode(U32 mode); +	void disableRefreshBtn();  private:  	LLFloaterTopObjects(const LLSD& key); diff --git a/indra/newview/llfloatertwitter.cpp b/indra/newview/llfloatertwitter.cpp index 78e9259919..868d623d57 100644 --- a/indra/newview/llfloatertwitter.cpp +++ b/indra/newview/llfloatertwitter.cpp @@ -64,7 +64,6 @@ const std::string DEFAULT_STATUS_TEXT = " #SecondLife";  ///////////////////////////  LLTwitterPhotoPanel::LLTwitterPhotoPanel() : -mSnapshotPanel(NULL),  mResolutionComboBox(NULL),  mRefreshBtn(NULL),  mBtnPreview(NULL), @@ -94,7 +93,6 @@ BOOL LLTwitterPhotoPanel::postBuild()  {  	setVisibleCallback(boost::bind(&LLTwitterPhotoPanel::onVisibilityChange, this, _2)); -	mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel");  	mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox");  	mResolutionComboBox->setValue("[i800,i600]"); // hardcoded defaults ftw!  	mResolutionComboBox->setCommitCallback(boost::bind(&LLTwitterPhotoPanel::updateResolution, this, TRUE)); @@ -194,15 +192,8 @@ void LLTwitterPhotoPanel::draw()  		// calc preview offset within the preview rect  		const S32 local_offset_x = (thumbnail_rect.getWidth()  - thumbnail_w) / 2 ;  		const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ; - -		// calc preview offset within the floater rect -        // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater. -        // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity. -        // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time. -		S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1; -		S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39; -         -		mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>()); +		S32 offset_x = thumbnail_rect.mLeft + local_offset_x; +		S32 offset_y = thumbnail_rect.mBottom + local_offset_y;  		gGL.matrixMode(LLRender::MM_MODELVIEW);  		// Apply floater transparency to the texture unless the floater is focused. @@ -238,7 +229,7 @@ void LLTwitterPhotoPanel::onVisibilityChange(BOOL visible)  			LLSnapshotLivePreview* preview = getPreviewView();  			if(preview)  			{ -				lldebugs << "opened, updating snapshot" << llendl; +				LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL;  				preview->updateSnapshot(TRUE);  			}  		} @@ -455,7 +446,7 @@ void LLTwitterPhotoPanel::updateControls()  	BOOL got_snap = previewp && previewp->getSnapshotUpToDate();  	// *TODO: Separate maximum size for Web images from postcards -	lldebugs << "Is snapshot up-to-date? " << got_snap << llendl; +	LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL;  	updateResolution(FALSE);  } @@ -485,13 +476,13 @@ void LLTwitterPhotoPanel::updateResolution(BOOL do_update)  		if (width == 0 || height == 0)  		{  			// take resolution from current window size -			lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl; +			LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL;  			previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());  		}  		else  		{  			// use the resolution from the selected pre-canned drop-down choice -			lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl; +			LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL;  			previewp->setSize(width, height);  		} @@ -755,7 +746,7 @@ void LLFloaterTwitter::showPhotoPanel()  	LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mTwitterPhotoPanel->getParent());  	if (!parent)  	{ -		llwarns << "Cannot find panel container" << llendl; +		LL_WARNS() << "Cannot find panel container" << LL_ENDL;  		return;  	} diff --git a/indra/newview/llfloatertwitter.h b/indra/newview/llfloatertwitter.h index f07ec2ca2f..d586799d18 100644 --- a/indra/newview/llfloatertwitter.h +++ b/indra/newview/llfloatertwitter.h @@ -70,7 +70,6 @@ private:  	LLHandle<LLView> mPreviewHandle; -	LLUICtrl * mSnapshotPanel;  	LLUICtrl * mResolutionComboBox;  	LLUICtrl * mFilterComboBox;  	LLUICtrl * mRefreshBtn; diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 370392b2f2..f211acedf0 100755 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -37,6 +37,7 @@  #include "llfolderview.h"  #include "llinventorybridge.h"  #include "llviewerfoldertype.h" +#include "llradiogroup.h"  // linden library includes  #include "llclipboard.h" @@ -51,6 +52,7 @@ LLInventoryFilter::FilterOps::FilterOps(const Params& p)  	mMinDate(p.date_range.min_date),  	mMaxDate(p.date_range.max_date),  	mHoursAgo(p.hours_ago), +	mDateSearchDirection(p.date_search_direction),  	mShowFolderState(p.show_folder_state),  	mPermissions(p.permissions),  	mFilterTypes(p.types), @@ -210,6 +212,7 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent  	{  		const U16 HOURS_TO_SECONDS = 3600;  		time_t earliest = time_corrected() - mFilterOps.mHoursAgo * HOURS_TO_SECONDS; +  		if (mFilterOps.mMinDate > time_min() && mFilterOps.mMinDate < earliest)  		{  			earliest = mFilterOps.mMinDate; @@ -218,9 +221,19 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent  		{  			earliest = 0;  		} -		if (listener->getCreationDate() < earliest || -			listener->getCreationDate() > mFilterOps.mMaxDate) -			return FALSE; + +		if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection || isSinceLogoff()) +		{ +			if (listener->getCreationDate() < earliest || +				listener->getCreationDate() > mFilterOps.mMaxDate) +				return FALSE; +		} +		else +		{ +			if (listener->getCreationDate() > earliest || +				listener->getCreationDate() > mFilterOps.mMaxDate) +				return FALSE; +		}  	}  	//////////////////////////////////////////////////////////////////////////////// @@ -642,11 +655,22 @@ void LLInventoryFilter::setHoursAgo(U32 hours)  		bool are_date_limits_valid = mFilterOps.mMinDate == time_min() && mFilterOps.mMaxDate == time_max();  		bool is_increasing = hours > mFilterOps.mHoursAgo; +		bool is_decreasing = hours < mFilterOps.mHoursAgo;  		bool is_increasing_from_zero = is_increasing && !mFilterOps.mHoursAgo && !isSinceLogoff();  		// *NOTE: need to cache last filter time, in case filter goes stale -		BOOL less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours); -		BOOL more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero); +		BOOL less_restrictive; +		BOOL more_restrictive; +		if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection) +		{ +			less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours); +			more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero); +		} +		else +		{ +			less_restrictive = (are_date_limits_valid && ((is_decreasing && mFilterOps.mHoursAgo)) || !hours); +			more_restrictive = (are_date_limits_valid && (!is_decreasing && hours) || is_increasing_from_zero); +		}  		mFilterOps.mHoursAgo = hours;  		mFilterOps.mMinDate = time_min(); @@ -675,6 +699,20 @@ void LLInventoryFilter::setHoursAgo(U32 hours)  	}  } +void LLInventoryFilter::setDateSearchDirection(U32 direction) +{ +	if (direction != mFilterOps.mDateSearchDirection) +	{ +		mFilterOps.mDateSearchDirection = direction; +		setModified(FILTER_RESTART); +	} +} + +U32 LLInventoryFilter::getDateSearchDirection() const +{ +	return mFilterOps.mDateSearchDirection; +} +  void LLInventoryFilter::setFilterLinks(U64 filter_links)  {  	if (mFilterOps.mFilterLinks != filter_links) @@ -939,6 +977,7 @@ LLInventoryFilter& LLInventoryFilter::operator=( const  LLInventoryFilter&  othe  	setFilterObjectTypes(other.getFilterObjectTypes());  	setDateRange(other.getMinDate(), other.getMaxDate());  	setHoursAgo(other.getHoursAgo()); +	setDateSearchDirection(other.getDateSearchDirection());  	setShowFolderState(other.getShowFolderState());  	setFilterPermissions(other.getFilterPermissions());  	setFilterSubString(other.getFilterSubString()); @@ -958,6 +997,7 @@ void LLInventoryFilter::toParams(Params& params) const  	params.filter_ops.date_range.min_date = getMinDate();  	params.filter_ops.date_range.max_date = getMaxDate();  	params.filter_ops.hours_ago = getHoursAgo(); +	params.filter_ops.date_search_direction = getDateSearchDirection();  	params.filter_ops.show_folder_state = getShowFolderState();  	params.filter_ops.permissions = getFilterPermissions();  	params.substring = getFilterSubString(); @@ -979,6 +1019,7 @@ void LLInventoryFilter::fromParams(const Params& params)  	}  	setDateRange(params.filter_ops.date_range.min_date,   params.filter_ops.date_range.max_date);  	setHoursAgo(params.filter_ops.hours_ago); +	setDateSearchDirection(params.filter_ops.date_search_direction);  	setShowFolderState(params.filter_ops.show_folder_state);  	setFilterPermissions(params.filter_ops.permissions);  	setFilterSubString(params.substring); diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h index 094fda7707..5e18ad4d20 100755 --- a/indra/newview/llinventoryfilter.h +++ b/indra/newview/llinventoryfilter.h @@ -55,6 +55,12 @@ public:  		FILTERTYPE_EMPTYFOLDERS = 0x1 << 5		// pass if folder is not a system   folder to be hidden if  	}; +	enum EFilterDateDirection +	{ +		FILTERDATEDIRECTION_NEWER, +		FILTERDATEDIRECTION_OLDER +	}; +  	enum EFilterLink  	{  		FILTERLINK_INCLUDE_LINKS,	// show links too @@ -94,7 +100,8 @@ public:  			Optional<EFilterLink>		links;  			Optional<LLUUID>			uuid;  			Optional<DateRange>			date_range; -			Optional<S32>				hours_ago; +			Optional<U32>				hours_ago; +			Optional<U32>				date_search_direction;  			Optional<EFolderShow>		show_folder_state;  			Optional<PermissionMask>	permissions; @@ -107,6 +114,7 @@ public:  				uuid("uuid"),  				date_range("date_range"),  				hours_ago("hours_ago", 0), +				date_search_direction("date_search_direction", FILTERDATEDIRECTION_NEWER),  				show_folder_state("show_folder_state", SHOW_NON_EMPTY_FOLDERS),  				permissions("permissions", PERM_NONE)  			{} @@ -124,6 +132,7 @@ public:  		time_t			mMinDate,  						mMaxDate;  		U32				mHoursAgo; +		U32				mDateSearchDirection;  		EFolderShow		mShowFolderState;  		PermissionMask	mPermissions; @@ -178,6 +187,8 @@ public:  	void 				setHoursAgo(U32 hours);  	U32 				getHoursAgo() const; +	void				setDateSearchDirection(U32 direction); +	U32					getDateSearchDirection() const;  	void 				setFilterLinks(U64 filter_link);  	U64					getFilterLinks() const; diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index ce7d4f50ad..e18ecd2e2a 100755 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -402,6 +402,11 @@ void LLInventoryPanel::setHoursAgo(U32 hours)  	getFilter().setHoursAgo(hours);  } +void LLInventoryPanel::setDateSearchDirection(U32 direction) +{ +	getFilter().setDateSearchDirection(direction); +} +  void LLInventoryPanel::setFilterLinks(U64 filter_links)  {  	getFilter().setFilterLinks(filter_links); diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 91c3efd8f0..a490dfce5d 100755 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -173,6 +173,7 @@ public:  	const std::string getFilterSubString();  	void setSinceLogoff(BOOL sl);  	void setHoursAgo(U32 hours); +	void setDateSearchDirection(U32 direction);  	BOOL getSinceLogoff();  	void setFilterLinks(U64 filter_links); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 90dfb24377..a7c9dbdf7b 100755 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -55,6 +55,7 @@  #include "llviewertexturelist.h"  #include "llsidepanelinventory.h"  #include "llfolderview.h" +#include "llradiogroup.h"  const std::string FILTERS_FILENAME("filters.xml"); @@ -82,6 +83,7 @@ public:  	void updateElementsFromFilter();  	BOOL getCheckShowEmpty();  	BOOL getCheckSinceLogoff(); +	U32 getDateSearchDirection();  	static void onTimeAgo(LLUICtrl*, void *);  	static void onCloseBtn(void* user_data); @@ -702,6 +704,30 @@ void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)  	if ( self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() )  	{  		self->getChild<LLUICtrl>("check_since_logoff")->setValue(false); + +		U32 days = (U32)self->mSpinSinceDays->get(); +		U32 hours = (U32)self->mSpinSinceHours->get(); +		if (hours >= 24) +		{ +			// Try to handle both cases of spinner clicking and text input in a sensible fashion as best as possible. +			// There is no way to tell if someone has clicked the spinner to get to 24 or input 24 manually, so in +			// this case add to days.  Any value > 24 means they have input the hours manually, so do not add to the +			// current day value. +			if (24 == hours)  // Got to 24 via spinner clicking or text input of 24 +			{ +				days = days + hours / 24; +			} +			else	// Text input, so do not add to days +			{  +				days = hours / 24; +			} +			hours = (U32)hours % 24; +			self->mSpinSinceHours->setFocus(false); +			self->mSpinSinceDays->setFocus(false); +			self->mSpinSinceDays->set((F32)days); +			self->mSpinSinceHours->set((F32)hours); +			self->mSpinSinceHours->setFocus(true); +		}  	}  } @@ -721,6 +747,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()  	std::string filter_string = mFilter->getFilterSubString();  	LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();  	U32 hours = mFilter->getHoursAgo(); +	U32 date_search_direction = mFilter->getDateSearchDirection();  	// update the ui elements  	setTitle(mFilter->getName()); @@ -742,6 +769,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()  	getChild<LLUICtrl>("check_since_logoff")->setValue(mFilter->isSinceLogoff());  	mSpinSinceHours->set((F32)(hours % 24));  	mSpinSinceDays->set((F32)(hours / 24)); +	getChild<LLRadioGroup>("date_search_direction")->setSelectedIndex(date_search_direction);  }  void LLFloaterInventoryFinder::draw() @@ -842,17 +870,23 @@ void LLFloaterInventoryFinder::draw()  	}  	U32 days = (U32)mSpinSinceDays->get();  	U32 hours = (U32)mSpinSinceHours->get(); -	if (hours > 24) +	if (hours >= 24)  	{ -		days += hours / 24; +		days = hours / 24;  		hours = (U32)hours % 24; +		// A UI element that has focus will not display a new value set to it +		mSpinSinceHours->setFocus(false); +		mSpinSinceDays->setFocus(false);  		mSpinSinceDays->set((F32)days);  		mSpinSinceHours->set((F32)hours); +		mSpinSinceHours->setFocus(true);  	}  	hours += days * 24; +  	mPanelMainInventory->getPanel()->setHoursAgo(hours);  	mPanelMainInventory->getPanel()->setSinceLogoff(getCheckSinceLogoff());  	mPanelMainInventory->setFilterTextFromFilter(); +	mPanelMainInventory->getPanel()->setDateSearchDirection(getDateSearchDirection());  	LLPanel::draw();  } @@ -867,6 +901,11 @@ BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()  	return getChild<LLUICtrl>("check_since_logoff")->getValue();  } +U32 LLFloaterInventoryFinder::getDateSearchDirection() +{ +	return 	getChild<LLRadioGroup>("date_search_direction")->getSelectedIndex(); +} +  void LLFloaterInventoryFinder::onCloseBtn(void* user_data)  {  	LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data; diff --git a/indra/newview/llpanelsnapshot.cpp b/indra/newview/llpanelsnapshot.cpp index 5924448671..56569e3207 100755 --- a/indra/newview/llpanelsnapshot.cpp +++ b/indra/newview/llpanelsnapshot.cpp @@ -65,8 +65,6 @@ void LLPanelSnapshot::onOpen(const LLSD& key)  	{  		LLFloaterSnapshot::getInstance()->notify(LLSD().with("image-format-change", true));  	} - -	updateCustomResControls();  }  LLFloaterSnapshot::ESnapshotFormat LLPanelSnapshot::getImageFormat() const @@ -77,11 +75,6 @@ LLFloaterSnapshot::ESnapshotFormat LLPanelSnapshot::getImageFormat() const  void LLPanelSnapshot::enableControls(BOOL enable)  {  	setCtrlsEnabled(enable); -	if (enable) -	{ -		// Make sure only relevant controls are enabled/shown. -		updateCustomResControls(); -	}  }  LLSpinCtrl* LLPanelSnapshot::getWidthSpinner() @@ -121,16 +114,6 @@ LLSideTrayPanelContainer* LLPanelSnapshot::getParentContainer()  	return parent;  } -// virtual -void LLPanelSnapshot::updateCustomResControls() -{ -	// Only show width/height spinners and the aspect ratio checkbox -	// when a custom resolution is chosen. -	LLComboBox* combo = getChild<LLComboBox>(getImageSizeComboName()); -	const bool show = combo->getFirstSelectedIndex() == (combo->getItemCount() - 1); -	getChild<LLUICtrl>(getImageSizePanelName())->setVisible(show); -} -  void LLPanelSnapshot::updateImageQualityLevel()  {  	LLSliderCtrl* quality_slider = getChild<LLSliderCtrl>("image_quality_slider"); @@ -188,8 +171,6 @@ void LLPanelSnapshot::onCustomResolutionCommit()  void LLPanelSnapshot::onResolutionComboCommit(LLUICtrl* ctrl)  { -	updateCustomResControls(); -  	LLSD info;  	info["combo-res-change"]["control-name"] = ctrl->getName();  	LLFloaterSnapshot::getInstance()->notify(info); diff --git a/indra/newview/llpanelsnapshot.h b/indra/newview/llpanelsnapshot.h index f3274cf594..42ad798d60 100755 --- a/indra/newview/llpanelsnapshot.h +++ b/indra/newview/llpanelsnapshot.h @@ -57,7 +57,6 @@ public:  protected:  	LLSideTrayPanelContainer* getParentContainer(); -	virtual void updateCustomResControls();  	void updateImageQualityLevel();  	void goBack(); ///< Switch to the default (Snapshot Options) panel  	void cancel(); diff --git a/indra/newview/llpanelsnapshotinventory.cpp b/indra/newview/llpanelsnapshotinventory.cpp index 47e46a968f..c8a201a5c8 100755 --- a/indra/newview/llpanelsnapshotinventory.cpp +++ b/indra/newview/llpanelsnapshotinventory.cpp @@ -49,7 +49,6 @@ public:  	/*virtual*/ void onOpen(const LLSD& key);  private: -	/*virtual*/ void updateCustomResControls(); ///< Show/hide custom resolution controls (spinners and checkbox)  	/*virtual*/ std::string getWidthSpinnerName() const		{ return "inventory_snapshot_width"; }  	/*virtual*/ std::string getHeightSpinnerName() const	{ return "inventory_snapshot_height"; }  	/*virtual*/ std::string getAspectRatioCBName() const	{ return "inventory_keep_aspect_check"; } @@ -73,7 +72,6 @@ BOOL LLPanelSnapshotInventory::postBuild()  {  	getChild<LLSpinCtrl>(getWidthSpinnerName())->setAllowEdit(FALSE);  	getChild<LLSpinCtrl>(getHeightSpinnerName())->setAllowEdit(FALSE); -	getChild<LLUICtrl>(getAspectRatioCBName())->setVisible(FALSE); // we don't keep aspect ratio for inventory textures  	return LLPanelSnapshot::postBuild();  } @@ -85,17 +83,6 @@ void LLPanelSnapshotInventory::onOpen(const LLSD& key)  }  // virtual -void LLPanelSnapshotInventory::updateCustomResControls() -{ -	LLComboBox* combo = getChild<LLComboBox>(getImageSizeComboName()); -	S32 selected_idx = combo->getFirstSelectedIndex(); -	const bool show = selected_idx == (combo->getItemCount() - 1); // Custom selected - -	getChild<LLUICtrl>(getWidthSpinnerName())->setVisible(show); -	getChild<LLUICtrl>(getHeightSpinnerName())->setVisible(show); -} - -// virtual  void LLPanelSnapshotInventory::updateControls(const LLSD& info)  {  	const bool have_snapshot = info.has("have-snapshot") ? info["have-snapshot"].asBoolean() : true; diff --git a/indra/newview/llpanelsnapshotoptions.cpp b/indra/newview/llpanelsnapshotoptions.cpp index 743ef3e329..0fc9ceec83 100755 --- a/indra/newview/llpanelsnapshotoptions.cpp +++ b/indra/newview/llpanelsnapshotoptions.cpp @@ -72,7 +72,9 @@ LLPanelSnapshotOptions::LLPanelSnapshotOptions()  	mCommitCallbackRegistrar.add("Snapshot.SaveToEmail",		boost::bind(&LLPanelSnapshotOptions::onSaveToEmail,		this));  	mCommitCallbackRegistrar.add("Snapshot.SaveToInventory",	boost::bind(&LLPanelSnapshotOptions::onSaveToInventory,	this));  	mCommitCallbackRegistrar.add("Snapshot.SaveToComputer",		boost::bind(&LLPanelSnapshotOptions::onSaveToComputer,	this)); - +	mCommitCallbackRegistrar.add("Snapshot.SendToFacebook",		boost::bind(&LLPanelSnapshotOptions::onSendToFacebook, this)); +	mCommitCallbackRegistrar.add("Snapshot.SendToTwitter",		boost::bind(&LLPanelSnapshotOptions::onSendToTwitter, this)); +	mCommitCallbackRegistrar.add("Snapshot.SendToFlickr",		boost::bind(&LLPanelSnapshotOptions::onSendToFlickr, this));  	LLGlobalEconomy::Singleton::getInstance()->addObserver(this);  } @@ -84,13 +86,6 @@ LLPanelSnapshotOptions::~LLPanelSnapshotOptions()  // virtual  BOOL LLPanelSnapshotOptions::postBuild()  { -    LLTextBox* sendToFacebookTextBox = getChild<LLTextBox>("send_to_facebook_textbox"); -    sendToFacebookTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToFacebook, this)); -    LLTextBox* sendToTwitterTextBox = getChild<LLTextBox>("send_to_twitter_textbox"); -    sendToTwitterTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToTwitter, this)); -    LLTextBox* sendToFlickrTextBox = getChild<LLTextBox>("send_to_flickr_textbox"); -    sendToFlickrTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToFlickr, this)); -  	return LLPanel::postBuild();  } diff --git a/indra/newview/llpanelsnapshotpostcard.cpp b/indra/newview/llpanelsnapshotpostcard.cpp index 95c443b826..8e37b1418c 100755 --- a/indra/newview/llpanelsnapshotpostcard.cpp +++ b/indra/newview/llpanelsnapshotpostcard.cpp @@ -72,7 +72,6 @@ private:  	void onMsgFormFocusRecieved();  	void onFormatComboCommit(LLUICtrl* ctrl);  	void onQualitySliderCommit(LLUICtrl* ctrl); -	void onTabButtonPress(S32 btn_idx);  	void onSend();  	bool mHasFirstMsgFocus; @@ -86,8 +85,6 @@ LLPanelSnapshotPostcard::LLPanelSnapshotPostcard()  {  	mCommitCallbackRegistrar.add("Postcard.Send",		boost::bind(&LLPanelSnapshotPostcard::onSend,	this));  	mCommitCallbackRegistrar.add("Postcard.Cancel",		boost::bind(&LLPanelSnapshotPostcard::cancel,	this)); -	mCommitCallbackRegistrar.add("Postcard.Message",	boost::bind(&LLPanelSnapshotPostcard::onTabButtonPress,	this, 0)); -	mCommitCallbackRegistrar.add("Postcard.Settings",	boost::bind(&LLPanelSnapshotPostcard::onTabButtonPress,	this, 1));  } @@ -108,8 +105,6 @@ BOOL LLPanelSnapshotPostcard::postBuild()  	getChild<LLUICtrl>("image_quality_slider")->setCommitCallback(boost::bind(&LLPanelSnapshotPostcard::onQualitySliderCommit, this, _1)); -	getChild<LLButton>("message_btn")->setToggleState(TRUE); -  	return LLPanelSnapshot::postBuild();  } @@ -218,27 +213,6 @@ void LLPanelSnapshotPostcard::onQualitySliderCommit(LLUICtrl* ctrl)  	LLFloaterSnapshot::getInstance()->notify(info); // updates the "SnapshotQuality" setting  } -void LLPanelSnapshotPostcard::onTabButtonPress(S32 btn_idx) -{ -	LLButton* buttons[2] = { -			getChild<LLButton>("message_btn"), -			getChild<LLButton>("settings_btn"), -	}; - -	// Switch between Message and Settings tabs. -	LLButton* clicked_btn = buttons[btn_idx]; -	LLButton* other_btn = buttons[!btn_idx]; -	LLSideTrayPanelContainer* container = -		getChild<LLSideTrayPanelContainer>("postcard_panel_container"); - -	container->selectTab(clicked_btn->getToggleState() ? btn_idx : !btn_idx); -	//clicked_btn->setEnabled(FALSE); -	other_btn->toggleState(); -	//other_btn->setEnabled(TRUE); - -	LL_DEBUGS() << "Button #" << btn_idx << " (" << clicked_btn->getName() << ") clicked" << LL_ENDL; -} -  void LLPanelSnapshotPostcard::onSend()  {  	// Validate input. diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp index f61db77169..1aa7041175 100644 --- a/indra/newview/llsnapshotlivepreview.cpp +++ b/indra/newview/llsnapshotlivepreview.cpp @@ -151,7 +151,7 @@ F32 LLSnapshotLivePreview::getImageAspect()  void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail, F32 delay)  { -	lldebugs << "updateSnapshot: mSnapshotUpToDate = " << getSnapshotUpToDate() << llendl; +	LL_DEBUGS() << "updateSnapshot: mSnapshotUpToDate = " << getSnapshotUpToDate() << LL_ENDL;  	// Update snapshot if requested.  	if (new_snapshot) @@ -195,6 +195,8 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail  		mSnapshotDelayTimer.start();  		mSnapshotDelayTimer.setTimerExpirySec(delay); +		mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal(); +          // Tell the floater container that the snapshot is in the process of updating itself          if (mViewContainer)          { @@ -594,7 +596,7 @@ void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update)              }              else              { -                llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl; +                LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL;              }          }          // Scale to a power of 2 so it can be mapped to a texture @@ -642,7 +644,7 @@ LLViewerTexture* LLSnapshotLivePreview::getBigThumbnailImage()              }              else              { -                llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl; +                LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL;              }          }          // Scale to a power of 2 so it can be mapped to a texture @@ -695,7 +697,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  	// time to produce a snapshot  	if(!previewp->getSnapshotUpToDate())      { -        lldebugs << "producing snapshot" << llendl; +        LL_DEBUGS() << "producing snapshot" << LL_ENDL;          if (!previewp->mPreviewImage)          {              previewp->mPreviewImage = new LLImageRaw; @@ -760,7 +762,6 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )                      curr_preview_image->setFilteringOption(previewp->getSnapshotType() == SNAPSHOT_TEXTURE ? LLTexUnit::TFO_ANISOTROPIC : LLTexUnit::TFO_POINT);                      curr_preview_image->setAddressMode(LLTexUnit::TAM_CLAMP); -                    previewp->mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal();                      previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame                  }              } @@ -775,7 +776,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )          previewp->setVisible(gSavedSettings.getBOOL("UseFreezeFrame") && previewp->mAllowFullScreenPreview); // only show fullscreen preview when in freeze frame mode          previewp->mSnapshotDelayTimer.stop();          previewp->mSnapshotActive = FALSE; -        lldebugs << "done creating snapshot" << llendl; +        LL_DEBUGS() << "done creating snapshot" << LL_ENDL;      }      if (!previewp->getThumbnailUpToDate()) @@ -910,13 +911,13 @@ LLPointer<LLImageFormatted>	LLSnapshotLivePreview::getFormattedImage()              }              else              { -                llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl; +                LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL;              }          }          // Create the new formatted image of the appropriate format.          LLFloaterSnapshot::ESnapshotFormat format = getSnapshotFormat(); -        lldebugs << "Encoding new image of format " << format << llendl; +        LL_DEBUGS() << "Encoding new image of format " << format << LL_ENDL;          switch (format)          { @@ -975,6 +976,21 @@ void LLSnapshotLivePreview::saveTexture()  		mPreviewImage->getHeight(),  		mPreviewImage->getComponents()); +	// Apply the filter to mPreviewImage +	if (getFilter() != "") +	{ +		std::string filter_path = LLImageFiltersManager::getInstance()->getFilterPath(getFilter()); +		if (filter_path != "") +		{ +			LLImageFilter filter(filter_path); +			filter.executeFilter(scaled); +		} +		else +		{ +			LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL; +		} +	} +  	scaled->biasedScaleToPowerOfTwo(MAX_TEXTURE_SIZE);  	LL_DEBUGS() << "scaled texture to " << scaled->getWidth() << "x" << scaled->getHeight() << LL_ENDL; diff --git a/indra/newview/llsyntaxid.cpp b/indra/newview/llsyntaxid.cpp index b1194dcd1b..a763d42a8d 100644 --- a/indra/newview/llsyntaxid.cpp +++ b/indra/newview/llsyntaxid.cpp @@ -47,23 +47,22 @@ public:  		LL_DEBUGS("SyntaxLSL") << "Instantiating with file saving to: '" << filespec << "'" << LL_ENDL;  	} -	virtual void errorWithContent(U32 status, -								  const std::string& reason, -								  const LLSD& content) +	/* virtual */ void httpFailure()  	{ -		LL_WARNS("SyntaxLSL") << "failed to fetch syntax file [status:" << status << "]: " << content << LL_ENDL; +		LL_WARNS("SyntaxLSL") << "failed to fetch syntax file [status:" << getStatus() << "]: " << getContent() << LL_ENDL;  	} -	virtual void result(const LLSD& content_ref) +	/* virtual */ void httpSuccess()  	{  		// Continue only if a valid LLSD object was returned. -		if (content_ref.isMap()) +		const LLSD& content = getContent(); +		if (content.isMap())  		{ -			if (LLSyntaxIdLSL::getInstance()->isSupportedVersion(content_ref)) +			if (LLSyntaxIdLSL::getInstance()->isSupportedVersion(content))  			{ -				LLSyntaxIdLSL::getInstance()->setKeywordsXml(content_ref); +				LLSyntaxIdLSL::getInstance()->setKeywordsXml(content); -				cacheFile(content_ref); +				cacheFile(content);  				LLSyntaxIdLSL::getInstance()->handleFileFetched(mFileSpec);  			}  			else diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 425e339713..d9a874be49 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -1346,17 +1346,20 @@ bool LLTextureFetchWorker::doWork(S32 param)  						LL_WARNS(LOG_TXT) << "trying to seek a non-default texture on the sim. Bad!" << LL_ENDL;  					}  					setUrl(http_url + "/?texture_id=" + mID.asString().c_str()); +					LL_DEBUGS("Texture") << "Texture URL " << mUrl << LL_ENDL;  					mWriteToCacheState = CAN_WRITE ; //because this texture has a fixed texture id.  				}  				else  				{  					mCanUseHTTP = false ; +					LL_DEBUGS("Texture") << "Texture not available via HTTP: no URL " << mUrl << LL_ENDL;  				}  			}  			else  			{  				// This will happen if not logged in or if a region deoes not have HTTP Texture enabled  				//LL_WARNS(LOG_TXT) << "Region not found for host: " << mHost << LL_ENDL; +				LL_DEBUGS("Texture") << "Texture not available via HTTP: no region " << mUrl << LL_ENDL;  				mCanUseHTTP = false;  			}  		} diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 9554f06342..44eb4361f1 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5756,83 +5756,101 @@ bool handle_special_notification(std::string notificationID, LLSD& llsdBlock)  }  // some of the server notifications need special handling. This is where we do that. -bool handle_teleport_access_blocked(LLSD& llsdBlock) +bool handle_teleport_access_blocked(LLSD& llsdBlock, const std::string & notificationID, const std::string & defaultMessage)  { -	std::string notificationID("TeleportEntryAccessBlocked");  	U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger());  	std::string regionMaturity = LLViewerRegion::accessToString(regionAccess);  	LLStringUtil::toLower(regionMaturity);  	llsdBlock["REGIONMATURITY"] = regionMaturity;  	bool returnValue = false; -	LLNotificationPtr maturityLevelNotification; -	std::string notifySuffix = "_Notify"; -	if (regionAccess == SIM_ACCESS_MATURE) -	{ -		if (gAgent.isTeen()) -		{ -			gAgent.clearTeleportRequest(); -			maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); -			returnValue = true; +	LLNotificationPtr tp_failure_notification; +	std::string notifySuffix; -			notifySuffix = "_NotifyAdultsOnly"; -		} -		else if (gAgent.prefersPG()) +	if (notificationID == std::string("TeleportEntryAccessBlocked")) +	{ +		notifySuffix = "_Notify"; +		if (regionAccess == SIM_ACCESS_MATURE)  		{ -			if (gAgent.hasRestartableFailedTeleportRequest()) +			if (gAgent.isTeen())  			{ -				maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); +				gAgent.clearTeleportRequest(); +				tp_failure_notification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);  				returnValue = true; + +				notifySuffix = "_NotifyAdultsOnly"; +			} +			else if (gAgent.prefersPG()) +			{ +				if (gAgent.hasRestartableFailedTeleportRequest()) +				{ +					tp_failure_notification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); +					returnValue = true; +				} +				else +				{ +					gAgent.clearTeleportRequest(); +					tp_failure_notification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); +					returnValue = true; +				}  			}  			else  			{  				gAgent.clearTeleportRequest(); -				maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); +				tp_failure_notification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);  				returnValue = true;  			}  		} -		else -		{ -			gAgent.clearTeleportRequest(); -			maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); -			returnValue = true; -		} -	} -	else if (regionAccess == SIM_ACCESS_ADULT) -	{ -		if (!gAgent.isAdult()) -		{ -			gAgent.clearTeleportRequest(); -			maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); -			returnValue = true; - -			notifySuffix = "_NotifyAdultsOnly"; -		} -		else if (gAgent.prefersPG() || gAgent.prefersMature()) +		else if (regionAccess == SIM_ACCESS_ADULT)  		{ -			if (gAgent.hasRestartableFailedTeleportRequest()) +			if (!gAgent.isAdult())  			{ -				maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); +				gAgent.clearTeleportRequest(); +				tp_failure_notification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);  				returnValue = true; + +				notifySuffix = "_NotifyAdultsOnly"; +			} +			else if (gAgent.prefersPG() || gAgent.prefersMature()) +			{ +				if (gAgent.hasRestartableFailedTeleportRequest()) +				{ +					tp_failure_notification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); +					returnValue = true; +				} +				else +				{ +					gAgent.clearTeleportRequest(); +					tp_failure_notification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); +					returnValue = true; +				}  			}  			else  			{  				gAgent.clearTeleportRequest(); -				maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); +				tp_failure_notification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);  				returnValue = true;  			} +	} +	}		// End of special handling for "TeleportEntryAccessBlocked" +	else +	{	// Normal case, no message munging +		gAgent.clearTeleportRequest(); +		if (LLNotifications::getInstance()->templateExists(notificationID)) +		{ +			tp_failure_notification = LLNotificationsUtil::add(notificationID, llsdBlock, llsdBlock);  		}  		else  		{ -			gAgent.clearTeleportRequest(); -			maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); -			returnValue = true; +			llsdBlock["MESSAGE"] = defaultMessage; +			tp_failure_notification = LLNotificationsUtil::add("GenericAlertOK", llsdBlock);  		} +		returnValue = true;  	} -	// If we have a notification but it is normally ignored, give a simple one instead of an in-your-face dialog -	if (returnValue && (maturityLevelNotification != NULL) && maturityLevelNotification->isIgnored()) +	if ((tp_failure_notification == NULL) || tp_failure_notification->isIgnored())  	{ +		// Given a simple notification if no tp_failure_notification is set or it is ignore  		LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock);  	} @@ -6048,8 +6066,8 @@ void process_alert_core(const std::string& message, BOOL modal)  		std::string alert_name(message.substr(ALERT_PREFIX.length()));  		if (!handle_special_alerts(alert_name))  		{ -		LLNotificationsUtil::add(alert_name); -	} +			LLNotificationsUtil::add(alert_name); +		}  	}  	else if (message.find(NOTIFY_PREFIX) == 0)  	{ @@ -6071,10 +6089,10 @@ void process_alert_core(const std::string& message, BOOL modal)  			LLFloaterRegionRestarting::close();  		} -			std::string new_msg =LLNotifications::instance().getGlobalString(text); -			args["MESSAGE"] = new_msg; -			LLNotificationsUtil::add("SystemMessage", args); -		} +		std::string new_msg =LLNotifications::instance().getGlobalString(text); +		args["MESSAGE"] = new_msg; +		LLNotificationsUtil::add("SystemMessage", args); +	}  	else if (modal)  	{  		LLSD args; @@ -6657,8 +6675,8 @@ std::string formatted_time(const time_t& the_time)  void process_teleport_failed(LLMessageSystem *msg, void**)  { -	std::string reason; -	std::string big_reason; +	std::string message_id;		// Tag from server, like "RegionEntryAccessBlocked" +	std::string big_reason;		// Actual message to display  	LLSD args;  	// Let the interested parties know that teleport failed. @@ -6668,16 +6686,16 @@ void process_teleport_failed(LLMessageSystem *msg, void**)  	if (msg->has(_PREHASH_AlertInfo) && msg->getSizeFast(_PREHASH_AlertInfo, _PREHASH_Message) > 0)  	{  		// Get the message ID -		msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, reason); -		big_reason = LLAgent::sTeleportErrorMessages[reason]; +		msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, message_id); +		big_reason = LLAgent::sTeleportErrorMessages[message_id];  		if ( big_reason.size() > 0 )  		{	// Substitute verbose reason from the local map  			args["REASON"] = big_reason;  		}  		else  		{	// Nothing found in the map - use what the server returned in the original message block -			msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason); -			args["REASON"] = reason; +			msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, big_reason); +			args["REASON"] = big_reason;  		}  		LLSD llsd_block; @@ -6693,7 +6711,7 @@ void process_teleport_failed(LLMessageSystem *msg, void**)  			else  			{  				// change notification name in this special case -				if (handle_teleport_access_blocked(llsd_block)) +				if (handle_teleport_access_blocked(llsd_block, message_id, args["REASON"]))  				{  					if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )  					{ @@ -6706,17 +6724,17 @@ void process_teleport_failed(LLMessageSystem *msg, void**)  	}  	else -	{ -		msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason); +	{	// Extra message payload not found - use what the simulator sent +		msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, message_id); -		big_reason = LLAgent::sTeleportErrorMessages[reason]; +		big_reason = LLAgent::sTeleportErrorMessages[message_id];  		if ( big_reason.size() > 0 )  		{	// Substitute verbose reason from the local map  			args["REASON"] = big_reason;  		}  		else  		{	// Nothing found in the map - use what the server returned -			args["REASON"] = reason; +			args["REASON"] = message_id;  		}  	} diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index cd5f64b9ca..11cbf3fc24 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -285,8 +285,8 @@ private:  		{  			regionp->setCapability(iter->first, iter->second); -			LL_DEBUGS("AppInit", "Capabilities") << "got capability for "  -				<< iter->first << LL_ENDL; +			LL_DEBUGS("AppInit", "Capabilities") +				<< "Capability '" << iter->first << "' is '" << iter->second << "'" << LL_ENDL;  			/* HACK we're waiting for the ServerReleaseNotes */  			if (iter->first == "ServerReleaseNotes" && regionp->getReleaseNotesRequested()) diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml index 798461c007..b98ee78685 100755 --- a/indra/newview/skins/default/xui/de/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml @@ -41,23 +41,24 @@  	</string>  	<button name="advanced_options_btn" tool_tip="Erweiterte Optionen"/>  	<text name="image_res_text"> -		[WIDTH] x [HEIGHT] px +		[WIDTH]px (Breite) x [HEIGHT]px (Höhe)  	</text>  	<text name="file_size_label">  		[SIZE] KB  	</text> +	<button name="advanced_options" label="AUFNAHME OPTIONEN"/>  	<panel name="advanced_options_panel"> -		<text name="advanced_options_label"> -			ERWEITERTE OPTIONEN -		</text>  		<text name="layer_type_label"> -			Aufnahme: +			Aufnehmen:  		</text>  		<combo_box label="Bildebenen" name="layer_types">  			<combo_box.item label="Farben" name="Colors"/>  			<combo_box.item label="Tiefe" name="Depth"/>  		</combo_box> -		<check_box label="Schnittstelle" name="ui_check"/> +		<combo_box label="Filter" name="filters_combobox"> +			<combo_box.item label="Kein Filter" name="NoFilter"/> +		</combo_box> +		<check_box label="Benutzeroberfläche" name="ui_check"/>  		<check_box label="HUDs" name="hud_check"/>  		<check_box label="Standbild (Vollbild)" name="freeze_frame_check"/>  		<check_box label="Automatisch aktualisieren" name="auto_snapshot_check"/> diff --git a/indra/newview/skins/default/xui/de/panel_postcard_message.xml b/indra/newview/skins/default/xui/de/panel_postcard_message.xml index 6eeef8af71..b34dc776de 100755 --- a/indra/newview/skins/default/xui/de/panel_postcard_message.xml +++ b/indra/newview/skins/default/xui/de/panel_postcard_message.xml @@ -9,13 +9,11 @@  	<text name="subject_label">  		Betreff:  	</text> -	<line_editor label="Betreff hier eingeben." name="subject_form"/> +	<line_editor label="Betreff hier rein." name="subject_form"/>  	<text name="msg_label">  		Nachricht:  	</text>  	<text_editor name="msg_form">  		Nachricht hier eingeben.  	</text_editor> -	<button label="Abbrechen" name="cancel_btn"/> -	<button label="Senden" name="send_btn"/>  </panel> diff --git a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml index c1a1c0cc46..e6d3b7de66 100755 --- a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml @@ -7,17 +7,10 @@  		<combo_box.item label="1024x768" name="1024x768"/>  		<combo_box.item label="Benutzerdefiniert" name="Custom"/>  	</combo_box> -	<layout_stack name="postcard_image_params_ls"> -		<layout_panel name="postcard_image_size_lp"> -			<spinner label="Breite" name="postcard_snapshot_width"/> -			<spinner label="Höhe" name="postcard_snapshot_height"/> -			<check_box label="Seitenverhältnis beibehalten" name="postcard_keep_aspect_check"/> -		</layout_panel> -		<layout_panel name="postcard_image_format_quality_lp"> -			<slider label="Bildqualität" name="image_quality_slider"/> -			<text name="image_quality_level"> -				([QLVL]) -			</text> -		</layout_panel> -	</layout_stack> +	<spinner label="Breite x Höhe" name="postcard_snapshot_width"/> +	<check_box label="Seitenverhältnis beibehalten" name="postcard_keep_aspect_check"/> +	<slider label="Qualität" name="image_quality_slider"/> +	<text name="image_quality_level"> +		([QLVL]) +	</text>  </panel> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml index 10827ce6f2..d13f56ed3d 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel name="panel_snapshot_inventory">  	<text name="title"> -		In meinem Inventar speichern +		Inventar  	</text>  	<text name="hint_lbl">  		Das Speichern eines Bilds in Ihrem Inventar kostet [UPLOAD_COST] L$. Um das Bild als Textur zu speichern, wählen Sie eines der quadratischen Formate aus. @@ -13,8 +13,7 @@  		<combo_box.item label="Groß (512x512)" name="Large(512x512)"/>  		<combo_box.item label="Benutzerdefiniert" name="Custom"/>  	</combo_box> -	<spinner label="Breite" name="inventory_snapshot_width"/> -	<spinner label="Höhe" name="inventory_snapshot_height"/> +	<spinner label="Breite x Höhe" name="inventory_snapshot_width"/>  	<check_box label="Seitenverhältnis beibehalten" name="inventory_keep_aspect_check"/>  	<button label="Abbrechen" name="cancel_btn"/>  	<button label="Speichern" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml index 3aeae80388..53e78ba290 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel name="panel_snapshot_local">  	<text name="title"> -		Auf meinem Computer speichern +		Festplatte  	</text>  	<combo_box label="Auflösung" name="local_size_combo">  		<combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> @@ -13,24 +13,17 @@  		<combo_box.item label="1600x1200" name="1600x1200"/>  		<combo_box.item label="Benutzerdefiniert" name="Custom"/>  	</combo_box> -	<layout_stack name="local_image_params_ls"> -		<layout_panel name="local_image_size_lp"> -			<spinner label="Breite" name="local_snapshot_width"/> -			<spinner label="Höhe" name="local_snapshot_height"/> -			<check_box label="Seitenverhältnis beibehalten" name="local_keep_aspect_check"/> -		</layout_panel> -		<layout_panel name="local_image_format_quality_lp"> -			<combo_box label="Format" name="local_format_combo"> -				<combo_box.item label="PNG (verlustfrei)" name="PNG"/> -				<combo_box.item label="JPEG" name="JPEG"/> -				<combo_box.item label="BMP (verlustfrei)" name="BMP"/> -			</combo_box> -			<slider label="Bildqualität" name="image_quality_slider"/> -			<text name="image_quality_level"> -				([QLVL]) -			</text> -		</layout_panel> -	</layout_stack> +	<spinner label="Breite x Höhe" name="local_snapshot_width"/> +	<check_box label="Seitenverhältnis beibehalten" name="local_keep_aspect_check"/> +	<combo_box label="Format" name="local_format_combo"> +		<combo_box.item label="PNG (verlustfrei)" name="PNG"/> +		<combo_box.item label="JPEG" name="JPEG"/> +		<combo_box.item label="BMP (verlustfrei)" name="BMP"/> +	</combo_box> +	<slider label="Qualität" name="image_quality_slider"/> +	<text name="image_quality_level"> +		([QLVL]) +	</text>  	<button label="Abbrechen" name="cancel_btn"/>  	<flyout_button label="Speichern" name="save_btn" tool_tip="Bild als Datei speichern">  		<flyout_button.item label="Speichern" name="save_item"/> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml index e1d8a5dc6d..e2ba5bd4db 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml @@ -1,7 +1,10 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel name="panel_snapshot_options"> -	<button label="In meinem Profil posten" name="save_to_profile_btn"/> -	<button label="E-Mail" name="save_to_email_btn"/> -	<button label="In meinem Inventar speichern ([AMOUNT] L$)" name="save_to_inventory_btn"/> -	<button label="Auf meinem Computer speichern" name="save_to_computer_btn"/> +	<button label="Ins Profil hochladen" name="save_to_profile_btn"/> +	<button label="Per E-Mail senden" name="save_to_email_btn"/> +	<button label="Im Inventar speichern" name="save_to_inventory_btn"/> +	<button label="Auf Festplatte speichern" name="save_to_computer_btn"/> +	<button label="Zu Facebook hochladen" name="send_to_facebook_btn"/> +	<button label="Zu Twitter hochladen" name="send_to_twitter_btn"/> +	<button label="Zu Flickr hochladen" name="send_to_flickr_btn"/>  </panel> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml index c9afe86d7f..ead56f2885 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml @@ -12,6 +12,10 @@  	<text name="title">  		E-Mail  	</text> -	<button label="Nachricht" name="message_btn"/> -	<button label="Einstellungen" name="settings_btn"/> +	<tab_container name="postcard_tabs"> +		<panel name="panel_postcard_message" label="Nachricht"/> +		<panel name="panel_postcard_settings" label="Einstellungen"/> +	</tab_container> +	<button name="cancel_btn" label="Abbrechen"/> +	<button name="send_btn" label="Absenden"/>  </panel> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml index 8d1c52dea8..0f21edd1b6 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml @@ -1,28 +1,21 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel name="panel_snapshot_profile">  	<text name="title"> -		In meinem Profil posten +		Profil  	</text>  	<combo_box label="Auflösung" name="profile_size_combo"> -		<combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> -		<combo_box.item label="640x480" name="640x480"/> -		<combo_box.item label="800x600" name="800x600"/> -		<combo_box.item label="1024x768" name="1024x768"/> -		<combo_box.item label="Benutzerdefiniert" name="Custom"/> +	<combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> +	<combo_box.item label="640x480" name="640x480"/> +	<combo_box.item label="800x600" name="800x600"/> +	<combo_box.item label="1024x768" name="1024x768"/> +	<combo_box.item label="Benutzerdefiniert" name="Custom"/>  	</combo_box> -	<layout_stack name="profile_image_params_ls"> -		<layout_panel name="profile_image_size_lp"> -			<spinner label="Breite" name="profile_snapshot_width"/> -			<spinner label="Höhe" name="profile_snapshot_height"/> -			<check_box label="Seitenverhältnis beibehalten" name="profile_keep_aspect_check"/> -		</layout_panel> -		<layout_panel name="profile_image_metadata_lp"> -			<text name="caption_label"> -				Bildunterschrift: -			</text> -			<check_box initial_value="true" label="Ort einschließen" name="add_location_cb"/> -		</layout_panel> -	</layout_stack> +	<spinner label="Breite x Höhe" name="profile_snapshot_width"/> +	<check_box label="Seitenverhältnis beibehalten" name="profile_keep_aspect_check"/> +	<text name="caption_label"> +		Bildunterschrift: +	</text> +	<check_box initial_value="true" label="Ort einschließen" name="add_location_cb"/>  	<button label="Abbrechen" name="cancel_btn"/>  	<button label="Posten" name="post_btn"/>  </panel> diff --git a/indra/newview/skins/default/xui/en/floater_facebook.xml b/indra/newview/skins/default/xui/en/floater_facebook.xml index 4535b9084e..2ea34fb751 100644 --- a/indra/newview/skins/default/xui/en/floater_facebook.xml +++ b/indra/newview/skins/default/xui/en/floater_facebook.xml @@ -2,7 +2,6 @@  <floater    positioning="cascading"    can_close="true" -  can_resize="true"    help_topic="floater_facebook"    layout="topleft"    name="floater_facebook" @@ -10,23 +9,15 @@    single_instance="true"    reuse_instance="true"    title="POST TO FACEBOOK" -  min_height="501" +  min_height="462"    min_width="304" -  height="482" -  width="304"> -  <panel -   height="482" -   width="304" -   visible="true" -   name="background" -   follows="all" -   top="0" -   left="0"> +  height="462" +  width="272">     <tab_container       name="tabs"       tab_group="1" -     tab_min_width="70" -     tab_height="30" +     tab_min_width="64" +     tab_height="21"       tab_position="top"       top="7"       height="437" @@ -57,23 +48,19 @@         follows="all"         label="FRIENDS"         name="panel_facebook_friends"/> -     <panel +     <!--<panel         filename="panel_facebook_account.xml"         class="llfacebookaccountpanel"         follows="all"         label="ACCOUNT" -       name="panel_facebook_account"/> +       name="panel_facebook_account"/>-->     </tab_container> -    <panel -     name="connection_status_panel" -     follows="left|bottom|right" -     height="24">       <text        name="connection_error_text"        type="string"        follows="left|bottom|right" -      top="5" -      left="9" +      bottom="-5" +      left="10"        width="250"        height="20"        wrap="true" @@ -88,14 +75,14 @@        height="24"        width="24"        name="connection_loading_indicator" -      top="2" -      left="9" +      top_delta="-2" +      left="10"        visible="true"/>       <text        name="connection_loading_text"        type="string"        follows="left|bottom|right" -      top="5" +      top_delta="2"        left_pad="5"        width="250"        height="20" @@ -106,6 +93,4 @@        font="SansSerif">        Loading...      </text> -  </panel> - </panel>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_flickr.xml b/indra/newview/skins/default/xui/en/floater_flickr.xml index 1a9ffd0489..24de3ddd8d 100644 --- a/indra/newview/skins/default/xui/en/floater_flickr.xml +++ b/indra/newview/skins/default/xui/en/floater_flickr.xml @@ -10,11 +10,11 @@    single_instance="true"    reuse_instance="true"    title="UPLOAD TO FLICKR" -  height="622" -  width="304"> +  height="590" +  width="272">    <panel -   height="622" -   width="304" +   height="590" +   width="272"     visible="true"     name="background"     follows="all" @@ -24,10 +24,11 @@       name="tabs"       tab_group="1"       tab_min_width="70" -     tab_height="30" +     tab_height="21"       tab_position="top"       top="7" -     height="577" +     height="555" +     follows="all"       halign="center"       use_highlighting_on_hover="true">       <panel @@ -51,8 +52,8 @@        name="connection_error_text"        type="string"        follows="left|bottom|right" -      top="5" -      left="9" +      bottom="-5" +      left="10"        width="250"        height="20"        wrap="true" @@ -67,14 +68,14 @@        height="24"        width="24"        name="connection_loading_indicator" -      top="2" -      left="9" +      top_delta="-2" +      left="10"        visible="true"/>       <text        name="connection_loading_text"        type="string"        follows="left|bottom|right" -      top="5" +      top_delta="2"        left_pad="5"        width="250"        height="20" diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml index c86ed595a7..17bc818cc1 100755 --- a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml @@ -2,7 +2,7 @@  <floater   legacy_header_height="18"   can_minimize="false" - height="408" + height="440"   layout="topleft"   name="Inventory Finder"   help_topic="inventory_finder" @@ -95,36 +95,36 @@       width="126" />      <icon       height="16" -     image_name="Inv_Mesh" +     image_name="Inv_Notecard"       layout="topleft"       left="8"       mouse_opaque="true" -     name="icon_mesh" -     top="142" +     name="icon_notecard" +     top="122"       width="16" />      <check_box       height="16" -     label="Meshes" +     label="Notecards"       layout="topleft"       left_pad="2" -     name="check_mesh" +     name="check_notecard"       top_delta="0"       width="126" />      <icon       height="16" -     image_name="Inv_Notecard" +     image_name="Inv_Mesh"       layout="topleft"       left="8"       mouse_opaque="true" -     name="icon_notecard" -     top="122" +     name="icon_mesh" +     top="142"       width="16" />      <check_box       height="16" -     label="Notecards" +     label="Meshes"       layout="topleft"       left_pad="2" -     name="check_notecard" +     name="check_mesh"       top_delta="0"       width="126" />      <icon @@ -223,25 +223,33 @@       top="262"       width="100" />      <button -     follows="left|top"       height="20"       label="None"       label_selected="None" -     layout="topleft"       left_delta="0"       name="None" -     top_pad="4" +     left_pad="10"       width="100" />      <check_box       height="16"       label="Always show folders"       layout="topleft" -     left_delta="0" +     left="8"       name="check_show_empty" -     top_pad="4" +     top_pad="6"       width="144" /> +    <view_border +     bevel_style="none" +     follows="top|left" +     height="0" +     layout="topleft" +     left="10" +     name="horiz_separator" +     top_pad="8" +     width="260"/>      <check_box       height="16" +     top="324"       label="Since Logoff"       layout="topleft"       left_delta="0" @@ -257,36 +265,74 @@       layout="topleft"       left_delta="0"       name="- OR -" -     top_delta="16" +     top="342"       width="144">          - OR -      </text> +    <radio_group +     height="16" +     layout="topleft" +     name="date_search_direction" +     top="360" +     left="8" +     width="270"> +     <radio_item +      label="Newer than" +      layout="topleft" +      name="newer" +      top_pad="6" +      left="0" /> +     <radio_item +      label="Older than" +      layout="topleft" +      name="older" +      top_delta="0" +      left="120" /> +    </radio_group>      <spinner       follows="left|top"       height="16"       increment="1"       initial_value="0" -     label="Hours Ago" -     label_width="64"       layout="topleft"       left_delta="0"       max_val="240000"       name="spin_hours_ago"       top_pad="4" -     width="144" /> +     width="64" /> +    <text +     type="string" +     length="1" +     follows="left|top" +     height="16" +     layout="topleft" +     left_pad="3" +     top_delta="4" +     width="80"> +        Hours +    </text>      <spinner       follows="left|top"       height="16"       increment="1"       initial_value="0" -     label="Days Ago" -     label_width="64"       layout="topleft" -     left_delta="0"       max_val="10000"       name="spin_days_ago"       top_pad="4" -     width="144" /> +     left="8" +     width="64" /> +    <text +     type="string" +     length="1" +     follows="left|top" +     height="16" +     layout="topleft" +     left_pad="3" +     top_delta="4" +     width="80"> +        Days +    </text>      <button       follows="top|right"       height="20" @@ -295,6 +341,6 @@       layout="topleft"       name="Close"       right="-6" -     top="382" +     top="406"       width="76" />  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index f5d5d7e075..76adaad57c 100755 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -3,8 +3,9 @@   positioning="cascading"   legacy_header_height="18"   can_minimize="true" + can_resize="false"   can_close="true" - height="500" + height="455"   layout="topleft"   name="Snapshot"   single_instance="true" @@ -12,7 +13,8 @@   save_rect="true"   save_visibility="false"   title="SNAPSHOT" - width="470"> + width="624" + min_height="455">      <floater.string       name="unknown">          unknown @@ -58,11 +60,11 @@   	    Saved to Computer!   	</string>   	<string -        name="facebook_failed_str"> +     name="facebook_failed_str">   	    Failed to upload image to your Facebook timeline.   	</string>   	<string -        name="profile_failed_str"> +     name="profile_failed_str">   	    Failed to upload image to your Profile Feed.   	</string>   	<string @@ -79,35 +81,231 @@   	</string>      <button       follows="left|top" -     height="23" -     image_overlay="TabIcon_Close_Off" +     height="25" +     image_overlay="Refresh_Off" +	 image_hover_unselected="Toolbar_Middle_Over" +     image_selected="Toolbar_Middle_Selected" +     image_unselected="Toolbar_Middle_Off" +     image_overlay_alignment="left" +     imgoverlay_label_space="5" +	 pad_bottom="0" +	 halign="left"       layout="topleft" -     left="236" -     name="advanced_options_btn" -     tool_tip="Advanced options" -     top="25" -     width="23" /> -  <ui_ctrl  -    height="160" -    width="250" -    layout="topleft" -    name="thumbnail_placeholder" -    top="50" -    follows="left|top" -    left="10"> +     left="10" +	 label="REFRESH" +     name="new_snapshot_btn" +     top_pad="26" +     width="167" /> +	<button +       follows="left|top" +	   control_name="AdvanceSnapshot" +	   invisibility_control="AdvanceSnapshot" +       height="25" +	   is_toggle="true" +       layout="topleft" +	   image_hover_unselected="Toolbar_Middle_Over" +	   image_selected="Toolbar_Middle_Off" +	   image_unselected="Toolbar_Middle_Off" +	   image_overlay="Conv_toolbar_expand" +       name="retract_btn" +       left_pad="1" +	   top_delta="0" +       width="31" /> +   <button +       follows="left|top" +	   control_name="AdvanceSnapshot" +	   visibility_control="AdvanceSnapshot" +       height="25" +	   is_toggle="true" +       layout="topleft" +	   image_overlay="Conv_toolbar_collapse" +	   image_hover_unselected="Toolbar_Middle_Over" +	   image_selected="Toolbar_Middle_Off" +	   image_unselected="Toolbar_Middle_Off" +       name="extend_btn" +       left_delta="0" +	   top_delta="0" +       width="31" /> +	<panel +     height="154" +     layout="topleft" +	 follows="top|left" +     left="0" +     name="advanced_options_panel" +     top_pad="-6" +     width="210"> +        <view_border  +         bevel_style="in" +         follows="left|top|right"  +         height="1" +         left="10" +         layout="topleft" +         name="advanced_options_hr" +         right="-1" +         top_pad="5" +         /> +        <text +         type="string" +         length="1" +         follows="left|top" +         height="13" +         layout="topleft" +         left="10" +         name="layer_type_label" +         top_pad="10" +         width="100"> +            Capture: +        </text> +        <combo_box +         follows="left|top|right" +         height="23" +         label="Image Layers" +         layout="topleft" +         left="30" +         name="layer_types" +         right="-2"> +            <combo_box.item +             label="Colors" +             name="Colors" +             value="colors" /> +            <combo_box.item +             label="Depth" +             name="Depth" +             value="depth" /> +        </combo_box> +        <check_box +         label="Interface" +         layout="topleft" +         left="30" +		 height="16" +         top_pad="8" +         width="180" +         name="ui_check" /> +        <check_box +         label="HUDs" +         layout="topleft" +		 height="16" +         left="30" +         top_pad="1" +         width="180" +         name="hud_check" /> +        <check_box +         label="Freeze frame (fullscreen)" +         layout="topleft" +		 height="16" +         left="10" +         top_pad="1" +         width="180" +         name="freeze_frame_check" /> +        <check_box +         label="Auto-refresh" +         layout="topleft" +		 height="16" +         left="10" +         top_pad="1" +         width="180" +         name="auto_snapshot_check" /> +        <text +         type="string" +         length="1" +         follows="left|top" +         height="13" +         layout="topleft" +         left="10" +         name="filter_list_label" +         top_pad="10" +         width="50"> +            Filter: +        </text> +        <combo_box +            control_name="PhotoFilters" +            follows="left|right|top" +            name="filters_combobox" +            tool_tip="Image filters" +            top_delta="-3" +            left="50" +			right="-1" +            height="21" +            width="135"> +            <combo_box.item +            label="No Filter" +            name="NoFilter" +            value="NoFilter" /> +        </combo_box> +		 <view_border  +         bevel_style="in" +         follows="left|top|right"  +         height="1" +         left="10" +         layout="topleft" +         name="advanced_options_hr" +         right="-1" +         top_pad="7" +         /> +    </panel> +	<panel_container +     follows="left|top" +     height="230" +     layout="topleft" +     left="0" +     name="panel_container" +     default_panel_name="panel_snapshot_options" +     top_pad="10" +     width="215"> +      <panel +       class="llpanelsnapshotoptions" +       filename="panel_snapshot_options.xml" +       follows="all" +       layout="topleft" +       left="0" +       name="panel_snapshot_options" +       top="0" />        <panel -       background_visible="true" -       bg_alpha_color="0.9 1 0.9 1" +       class="llpanelsnapshotprofile" +       follows="all" +       layout="topleft" +       name="panel_snapshot_profile" +       filename="panel_snapshot_profile.xml" /> +      <panel +       class="llpanelsnapshotpostcard" +       follows="all" +       layout="topleft" +       name="panel_snapshot_postcard" +       filename="panel_snapshot_postcard.xml" /> +      <panel +       class="llpanelsnapshotinventory" +       follows="all" +       layout="topleft" +       name="panel_snapshot_inventory" +       filename="panel_snapshot_inventory.xml" /> +      <panel +       class="llpanelsnapshotlocal" +       follows="all" +       layout="topleft" +       name="panel_snapshot_local" +       filename="panel_snapshot_local.xml" /> +    </panel_container> +	<view_border  +         bevel_style="in" +         follows="left|top"  +         height="1" +         left="10" +         layout="topleft" +         name="status_hr" +         width="199" +         top_pad="-16"/> +	<panel +       background_visible="false"         follows="left|top"         font="SansSerifLarge"         halign="center"         height="20"         layout="topleft" -       left="0" +       left="10"         length="1"         name="succeeded_panel" -       right="-1" -       top="0" +	   width="198" +       top_pad="1"         type="string"         visible="false">            <text @@ -120,7 +318,7 @@             length="1"             name="succeeded_lbl"             right="-1" -           text_color="0.2 0.5 0.2 1" +           text_color="0.2 0.85 0.2 1"             top="4"             translate="false"             type="string"> @@ -128,18 +326,17 @@            </text>        </panel>        <panel -       background_visible="true" -       bg_alpha_color="1 0.9 0.9 1" +       background_visible="false"         follows="left|top"         font="SansSerifLarge"         halign="center"         height="20"         layout="topleft" -       left_delta="0" +       left="10"         length="1"         name="failed_panel" -       right="-1" -       top="0" +	   width="198" +       top_delta="0"         type="string"         visible="false">            <text @@ -152,7 +349,7 @@             length="1"             name="failed_lbl"             right="-1" -           text_color="0.5 0.2 0.2 1" +           text_color="0.95 0.4 0.4 1"             top="4"             translate="false"             type="string"> @@ -161,51 +358,39 @@        </panel>        <loading_indicator         follows="left|top" -       height="48" +       height="24"         layout="topleft"         name="working_indicator" -       left="101" -       top="46" +       left="10" +       top_delta="0"         visible="false" -       width="48" /> +       width="24" />        <text -       follows="left|top|right" +       follows="left|top"         font="SansSerifBold"         height="14"         layout="topleft" -       left="5" +       left_pad="3"         length="1" -       halign="center" +       halign="left"         name="working_lbl" -       right="-5" -       top="98" +       top_delta="5"         translate="false"         type="string"         visible="false" -       width="130"> +       width="162">            Working        </text> -      <button -       follows="left|top" -       height="22" -       image_overlay="Refresh_Off" -       layout="topleft" -       left="20" -       name="new_snapshot_btn" -       bottom="-20" -       visible="false" -       width="22" />        <text         follows="left|top"         font="SansSerifBold"         halign="left"         height="18"         layout="topleft" -       left_pad="10" +       left="10"         length="1"         name="refresh_lbl" -       right="-5" -       text_color="red" +       text_color="0.95 0.4 0.4 1"         top_delta="0"         translate="false"         type="string" @@ -213,37 +398,44 @@         width="130">            Refresh to save.        </text> -  </ui_ctrl> +  <ui_ctrl  +    layout="topleft" +    name="thumbnail_placeholder" +    top="23" +	left="215" +	width="400" +	height="400" +    follows="top|left"/>    <view_border      bevel_style="in"      height="21" -   width="250"     layout="topleft"     name="img_info_border" -   top_pad="3" -   follows="left|top" -   left_delta="0" -   /> +   top_pad="0" +   right="-10" +   follows="left|top|right" +   left_delta="0"/>     <text      type="string"      font="SansSerifSmall"      length="1" -    follows="left|top" +    follows="left|top|right"      height="14"      layout="topleft" -    left_delta="5" +    left="220" +	right="-20"      halign="left"      name="image_res_text"      top_delta="5" -    width="100"> -       [WIDTH] x [HEIGHT] px +    width="200"> +       [WIDTH]px (width) x [HEIGHT]px (height)     </text>     <text -    follows="left|top" +    follows="right|top"      font="SansSerifSmall"      height="14"      layout="topleft" -    left="200" +    left="-65"      length="1"      halign="right"      name="file_size_label" @@ -252,161 +444,4 @@      width="50">         [SIZE] KB     </text> -    <panel_container -     follows="left|top" -     height="260" -     layout="topleft" -     left="0" -     name="panel_container" -     default_panel_name="panel_snapshot_options" -     top_pad="10" -     width="270"> -      <panel -       class="llpanelsnapshotoptions" -       filename="panel_snapshot_options.xml" -       follows="all" -       layout="topleft" -       left="0" -       name="panel_snapshot_options" -       top="0" /> -      <panel -       class="llpanelsnapshotprofile" -       follows="all" -       layout="topleft" -       name="panel_snapshot_profile" -       filename="panel_snapshot_profile.xml" /> -      <panel -       class="llpanelsnapshotpostcard" -       follows="all" -       layout="topleft" -       name="panel_snapshot_postcard" -       filename="panel_snapshot_postcard.xml" /> -      <panel -       class="llpanelsnapshotinventory" -       follows="all" -       layout="topleft" -       name="panel_snapshot_inventory" -       filename="panel_snapshot_inventory.xml" /> -      <panel -       class="llpanelsnapshotlocal" -       follows="all" -       layout="topleft" -       name="panel_snapshot_local" -       filename="panel_snapshot_local.xml" /> -    </panel_container> -    <panel -     height="295" -     layout="topleft" -     left="270" -     name="advanced_options_panel" -     top="20" -     width="200"> -        <text -         type="string" -         font="SansSerifSmall" -         length="1" -         follows="left|top" -         height="14" -         layout="topleft" -         left="10" -         halign="left" -         name="advanced_options_label" -         right="-10" -         top="10"> -            ADVANCED OPTIONS -        </text> -        <view_border  -         bevel_style="in" -         follows="left|top|right"  -         height="1" -         left="10" -         layout="topleft" -         name="advanced_options_hr" -         right="-10" -         top_pad="5" -         /> -        <text -         type="string" -         length="1" -         follows="left|top" -         height="13" -         layout="topleft" -         left="10" -         name="layer_type_label" -         top_pad="10" -         width="50"> -            Capture: -        </text> -        <combo_box -         follows="left|top|right" -         height="23" -         label="Image Layers" -         layout="topleft" -         left="30" -         name="layer_types" -         right="-10"> -            <combo_box.item -             label="Colors" -             name="Colors" -             value="colors" /> -            <combo_box.item -             label="Depth" -             name="Depth" -             value="depth" /> -        </combo_box> -        <check_box -         label="Interface" -         layout="topleft" -         left="30" -         top_pad="10" -         width="180" -         name="ui_check" /> -        <check_box -         label="HUDs" -         layout="topleft" -         left="30" -         top_pad="10" -         width="180" -         name="hud_check" /> -        <check_box -         label="Freeze frame (fullscreen)" -         layout="topleft" -         left="10" -         top_pad="8" -         width="180" -         name="freeze_frame_check" /> -        <check_box -         label="Auto-refresh" -         layout="topleft" -         left="10" -         top_pad="8" -         width="180" -         name="auto_snapshot_check" /> -        <text -         type="string" -         length="1" -         follows="left|top" -         height="13" -         layout="topleft" -         left="10" -         name="filter_list_label" -         top_pad="10" -         width="50"> -            Filter: -        </text> -        <combo_box -            control_name="PhotoFilters" -            follows="left|right|top" -            name="filters_combobox" -            tool_tip="Image filters" -            top_pad="8" -            left="30" -            height="21" -            width="135"> -            <combo_box.item -            label="No Filter" -            name="NoFilter" -            value="NoFilter" /> -        </combo_box> -    </panel>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml index 0b71177345..36ceddd305 100755 --- a/indra/newview/skins/default/xui/en/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml @@ -38,6 +38,18 @@       name="none_descriptor">          None found.      </floater.string> +    <floater.string +     name="URLs"> +        URLs +    </floater.string> +    <floater.string +     name="memory"> +        Memory (KB) +    </floater.string> + + + +      <text       type="string"       length="1" @@ -82,7 +94,7 @@           name="parcel"           width="120" />          <scroll_list.columns -         label="Time" +         label="Date"           name="time"           width="130" />            <scroll_list.columns diff --git a/indra/newview/skins/default/xui/en/floater_twitter.xml b/indra/newview/skins/default/xui/en/floater_twitter.xml index aa5bfce2e9..3e1a91e58d 100644 --- a/indra/newview/skins/default/xui/en/floater_twitter.xml +++ b/indra/newview/skins/default/xui/en/floater_twitter.xml @@ -10,21 +10,13 @@    single_instance="true"    reuse_instance="true"    title="TWITTER" -  height="502" -  width="304"> -  <panel -   height="502" -   width="304" -   visible="true" -   name="background" -   follows="all" -   top="0" -   left="0"> +  height="462" +  width="272">     <tab_container       name="tabs"       tab_group="1"       tab_min_width="70" -     tab_height="30" +     tab_height="21"       tab_position="top"       top="7"       height="457" @@ -43,17 +35,13 @@         label="ACCOUNT"         name="panel_twitter_account"/>           </tab_container> -    <panel -     name="connection_status_panel" -     follows="left|bottom|right" -     height="24">       <text        name="connection_error_text"        type="string"        follows="left|bottom|right" -      top="5" -      left="9" -      width="250" +      bottom="-5" +      left="10" +      width="252"        height="20"        wrap="true"        halign="left" @@ -67,16 +55,16 @@        height="24"        width="24"        name="connection_loading_indicator" -      top="2" -      left="9" +      top_delta="-2" +      left="10"        visible="true"/>       <text        name="connection_loading_text"        type="string"        follows="left|bottom|right" -      top="5" +      top_delta="2"        left_pad="5" -      width="250" +      width="223"        height="20"        wrap="true"        halign="left" @@ -85,6 +73,4 @@        font="SansSerif">        Loading...      </text> -  </panel> - </panel>  </floater> diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml index d2519a5aa4..06d0b849a3 100755 --- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml @@ -63,7 +63,7 @@      <menu_item_separator       layout="topleft" />      <menu_item_call -     label="Show Filters" +     label="Show Filters..."       layout="topleft"       name="show_filters">          <on_click diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index aa7a07671c..f1d34a1449 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -169,6 +169,16 @@ No tutorial is currently available.    <notification     icon="alertmodal.tga" +   name="GenericAlertOK" +   type="alertmodal"> +[MESSAGE] +    <usetemplate +     name="okbutton" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="BadInstallation"     type="alertmodal">   An error occurred while updating [APP_NAME].  Please [http://get.secondlife.com download the latest version] of the Viewer. @@ -4661,6 +4671,17 @@ The region you're trying to visit contains [REGIONMATURITY] content, but your cu    <notification     icon="alertmodal.tga" +   name="RegionTPSpecialUsageBlocked" +   type="alertmodal"> +    <tag>fail</tag> +    Unable to enter region. '[REGION_NAME]' is a Skill Gaming Region, and you must meet certain criteria in order to enter. For details, please review the [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ]. +    <usetemplate +     name="okbutton" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="PreferredMaturityChanged"     type="alertmodal">  You won't receive any more notifications that you're about to visit a region with [RATING] content.  You may change your content preferences in the future by using Me > Preferences > General from the menu bar. diff --git a/indra/newview/skins/default/xui/en/panel_facebook_account.xml b/indra/newview/skins/default/xui/en/panel_facebook_account.xml deleted file mode 100644 index 122cbfb717..0000000000 --- a/indra/newview/skins/default/xui/en/panel_facebook_account.xml +++ /dev/null @@ -1,77 +0,0 @@ -<panel -	 height="400" -	 width="304" -	 layout="topleft" -    follows="all" -   name="panel_facebook_account"> -  <string -      name="facebook_connected" -      value="You are connected to Facebook as:" /> -  <string -      name="facebook_disconnected" -      value="Not connected to Facebook" /> -  <text -   layout="topleft" -   length="1" -   follows="top|left" -   font="SansSerif" -   height="16" -   left="9" -   name="account_caption_label" -   top="21" -   type="string"> -    Not connected to Facebook. -  </text> -  <text -   layout="topleft" -   top_pad="2" -   length="1" -   follows="top|left" -   font="SansSerif" -   height="16" -   left="9" -   name="account_name_label" -   parse_urls="true" -   type="string"/> -  <panel -    layout="topleft" -    follows="left|top" -    name="panel_buttons" -    height="345" -    left="9"> -    <button -     layout="topleft" -     follows="left|top" -     top_pad="9" -     visible="true" -     height="23" -     label="Connect..." -     name="connect_btn" -     width="210"> -      <commit_callback function="SocialSharing.Connect"/> -    </button> - -    <button -     layout="topleft" -     follows="left|top" -     top_delta="0" -     height="23" -     label="Disconnect" -     name="disconnect_btn" -     width="210" -     visible="false"> -      <commit_callback function="SocialSharing.Disconnect"/> -    </button> -    <text -      layout="topleft" -      length="1" -      follows="top|left" -      height="16" -      left="0" -      name="account_learn_more_label" -      top_pad="20" -      type="string"> -      [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Learn about posting to Facebook] -    </text> -  </panel> -</panel> diff --git a/indra/newview/skins/default/xui/en/panel_facebook_friends.xml b/indra/newview/skins/default/xui/en/panel_facebook_friends.xml index 9d21a3a293..97994fb08b 100644 --- a/indra/newview/skins/default/xui/en/panel_facebook_friends.xml +++ b/indra/newview/skins/default/xui/en/panel_facebook_friends.xml @@ -1,6 +1,6 @@  <panel  	 height="400" -	 width="304" +	 width="272"  	 layout="topleft"      follows="all"     name="panel_facebook_friends"> @@ -9,17 +9,17 @@     value="You currently do not have any Facebook friends who are also Second Life residents. Ask your Facebook friends to join Second Life today!" />    <string     name="facebook_friends_no_connected" -   value="You're currently not connected to Facebook. Please go to the Account tab to connect and enable this feature." /> +   value="You're currently not connected to Facebook. Please go to the Status tab to connect and enable this feature." />    <accordion - background_visible="true" + background_visible="false"   bg_alpha_color="DkGray2"   bg_opaque_color="DkGray2"     follows="all" -   height="408" +   height="383"     layout="topleft" -   left="3" +   left="10"     name="friends_accordion" -   right="-2" +   right="-10"     top_pad="2">      <accordion_tab       layout="topleft" @@ -36,7 +36,7 @@         name="second_life_friends"         show_permissions_granted="true"         top="0" -       width="307" /> +       width="272" />      </accordion_tab>      <accordion_tab       layout="topleft" @@ -53,19 +53,20 @@         name="suggested_friends"         show_permissions_granted="true"         top="0" -       width="307" /> +       width="272" />      </accordion_tab>    </accordion>      <text          layout="topleft"          word_wrap="true"          height="64" -        width="290" +        width="250"          follows="top|left|right"          font="SansSerif" -        left="9" +        left="10" +		right="-10"          name="facebook_friends_status" -        top="21" +        top="5"          type="string">          Not connected to Facebook.      </text> diff --git a/indra/newview/skins/default/xui/en/panel_facebook_photo.xml b/indra/newview/skins/default/xui/en/panel_facebook_photo.xml index b5b6dee004..22e6598352 100644 --- a/indra/newview/skins/default/xui/en/panel_facebook_photo.xml +++ b/indra/newview/skins/default/xui/en/panel_facebook_photo.xml @@ -1,29 +1,19 @@      <panel        height="400" -      width="304" +      width="272"        layout="topleft"        follows="all"        name="panel_facebook_photo"> -      <layout_stack -	   layout="topleft" -       border_size="0" -       height="392" -       follows="all" -       orientation="vertical" -       name="stack_photo" -       top="8"> -        <layout_panel	 -         name="snapshot_panel" -         height="367">              <combo_box               control_name="FacebookPhotoResolution"               follows="left|top" -             top="6" -             left="9" +			 layout="topleft" +             top="7" +             left="10"               name="resolution_combobox"               tool_tip="Image resolution"               height="21" -             width="135"> +             width="124">                <combo_box.item                 label="Current Window"                 name="CurrentWindow" @@ -47,13 +37,14 @@              </combo_box>              <combo_box                  control_name="FacebookPhotoFilters" -                follows="right|top" +                follows="left|top" +				layout="topleft"                  name="filters_combobox"                  tool_tip="Image filters" -                top="6" -                left="165" +                top="7" +                left_pad="4"                  height="21" -                width="135"> +                width="124">                  <combo_box.item                  label="No Filter"                  name="NoFilter" @@ -61,48 +52,62 @@              </combo_box>              <panel                  height="150" -                width="250" +                width="252"                  visible="true" +				layout="topleft"                  name="thumbnail_placeholder" -                top="33" -                follows="left|top|right" -                left="9"> +                top_pad="5" +                follows="left|top|rith" +				right="-10" +                left="10">              </panel> -            <button -             follows="left|top" -             height="23" -             label="Refresh" -             left="9" -             top_pad="5" -             name="new_snapshot_btn" -             tool_tip="Click to refresh" -             visible="true" -             width="100" > -             <button.commit_callback -               function="SocialSharing.RefreshPhoto" /> -            </button> -            <text +			<text                  follows="left|top" +				layout="topleft"                  font="SansSerif"                  text_color="EmphasisColor"                  height="14" -                top_pad="-19" -                left_pad="-30" +                top_pad="2" +                left="10"                  length="1"                  halign="center"                  name="working_lbl"                  translate="false"                  type="string"                  visible="true" -                width="150"> +                width="251">                  Refreshing...              </text> +			<view_border  +			 bevel_style="in" +			 follows="left|top" +			 layout="topleft" +			 height="1" +			 left="10" +			 name="refresh_border" +			 width="250" +			 top_pad="0"/> +            <button +             follows="left|top" +			 layout="topleft" +             height="23" +             label="Refresh" +             left="10" +             top_pad="5" +             name="new_snapshot_btn" +             tool_tip="Click to refresh" +             visible="true" +             width="100" > +             <button.commit_callback +               function="SocialSharing.RefreshPhoto" /> +            </button>              <button                  follows="right|top" +				layout="topleft"                  height="23"                  label="Preview" -                left="200" -                top_pad="-19" +                right="-10" +                top_delta="0"                  name="big_preview_btn"                  tool_tip="Click to toggle preview"                  is_toggle="true" @@ -114,9 +119,10 @@              <text               length="1"               follows="top|left|right" +			 layout="topleft"               font="SansSerif"               height="16" -             left="9" +             left="10"               name="caption_label"               top_pad="20"               type="string"> @@ -124,23 +130,22 @@              </text>              <text_editor               follows="left|top|right|bottom" +			 layout="topleft"               height="87"               width="250" -             left="9" +             left="10" +			 right="-10"               length="1"               max_length="700"               name="photo_caption"               type="string"               word_wrap="true">              </text_editor> -        </layout_panel> -        <layout_panel -          name="photo_button_panel" -          height="25">            <button -           follows="left|bottom" -           top="0" -           left="9" +           follows="left|top" +		   layout="topleft" +           top_pad="22" +           left="10"             height="23"             label="Post"             name="post_photo_btn" @@ -149,16 +154,15 @@               function="SocialSharing.SendPhoto" />            </button>            <button -               follows="left|bottom" +               follows="right|top" +			   layout="topleft"                 height="23"                 label="Cancel"                 name="cancel_photo_btn" -               left_pad="15" +               right="-10"                 top_delta="0"                 width="100">              <button.commit_callback               function="SocialSharing.Cancel" /> -          </button>           -        </layout_panel>         -      </layout_stack> +          </button>      </panel> diff --git a/indra/newview/skins/default/xui/en/panel_facebook_place.xml b/indra/newview/skins/default/xui/en/panel_facebook_place.xml index 84c87df523..f87b008c4e 100644 --- a/indra/newview/skins/default/xui/en/panel_facebook_place.xml +++ b/indra/newview/skins/default/xui/en/panel_facebook_place.xml @@ -1,115 +1,96 @@      <panel        height="400" -      width="304" +      width="272"  	  layout="topleft"        follows="all"        name="panel_facebook_place"> -      <layout_stack -	    layout="topleft" -        border_size="0" -        height="392" -        follows="all" -        orientation="vertical" -        name="stack_place" -        top="8"> -        <layout_panel -          name="place_detail_panel" -          height="181">            <text              length="1"              follows="top|left|right" +			layout="topleft"              font="SansSerif"              height="16" -            left="9" +            left="10"              name="place_caption_label" -            top="13" +            top="5"              type="string">              Say something about where you are:            </text>            <text_editor              follows="top|left|right" -            height="150" +			layout="topleft" +            height="70"              width="250" -            left="9" +            left="10" +			right="-10"              length="1"              max_length="700"              name="place_caption"              type="string"              word_wrap="true">             </text_editor> -          </layout_panel> -          <layout_panel -            name="place_map_panel" -            height="186"> +		  <check_box +              follows="left|top" +			  layout="topleft" +              initial_value="false" +			  height="16" +              top_pad="8" +              width="8" +              label="Include overhead view of location" +              name="add_place_view_cb" +              left="10"/>                <panel                    follows="left|top" -                  height="128" -                  width="128" +				  layout="topleft" +                  height="243" +                  width="250"                    background_visible="true"                    bg_opaque_color="Black"                    bg_alpha_color="Black" -                  top="20" -                  left="9" +                  top_pad="8" +                  left="10" +				  right="-12"                    visible="true"                    name="map_border">                </panel> -              <loading_indicator -              follows="left|top" -              height="24" -              width="24" -              name="map_loading_indicator" -              top="77" -              left="61" -              visible="true"/>                <icon                  follows="left|top" -                height="128" -                width="128" +				layout="topleft" +                height="243" +                width="250"                  image_name="Map_Placeholder_Icon" -                layout="topleft" -                top="20" -                left="9" +                top_delta="0" +				right="-12" +                left="10"                  visible="true"                  name="map_placeholder">                </icon>                <icon                    follows="left|top" -                  height="128" -                  width="128" +				  layout="topleft" +                  height="243" +                  width="250"                    image_name="Map_Placeholder_Icon" -                  layout="topleft" -                  top="20" -                  left="9" +                  top_delta="0" +                  left="10" +				  right="-12"                    visible="true"                    name="map_default">                </icon> -            <check_box +			  <loading_indicator                follows="left|top" -              initial_value="false" -              top_delta="8" -              width="8" -              label="" -              name="add_place_view_cb" -              left_pad="5"/> -            <text -              follows="left|top" -              font="SansSerif" -              height="32" -              width="130" -              word_wrap="true" -              left_pad="12" -              top_delta="-8" -              type="string"> -              Include overhead view of location -            </text> -          </layout_panel> -          <layout_panel -            name="place_button_panel" -            height="25"> +			  layout="topleft" +              height="24" +              width="24" +              name="map_loading_indicator" +              top_delta="116" +              left="126" +              visible="false"/>              <button                follows="left|bottom" -              top="0" -              left="9" +			  layout="topleft" +              top_pad="95" +              left="10"                height="23"                label="Post"                name="post_place_btn" @@ -118,16 +99,15 @@                   function="SocialSharing.SendCheckin" />              </button>              <button -              follows="left|bottom" +              follows="right|bottom" +			  layout="topleft"                height="23"                label="Cancel"                name="cancel_place_btn" -              left_pad="15" +              right="-10"                top_delta="0"                width="100">                <button.commit_callback                    function="SocialSharing.Cancel" />              </button> -        </layout_panel> -     </layout_stack>      </panel> diff --git a/indra/newview/skins/default/xui/en/panel_facebook_status.xml b/indra/newview/skins/default/xui/en/panel_facebook_status.xml index 480abec558..fe0f3c9279 100644 --- a/indra/newview/skins/default/xui/en/panel_facebook_status.xml +++ b/indra/newview/skins/default/xui/en/panel_facebook_status.xml @@ -1,50 +1,113 @@      <panel  	 height="400" -	 width="304" +	 width="272"       follows="all"  	 layout="topleft"       name="panel_facebook_status"> -     <layout_stack +        <string +      name="facebook_connected" +      value="You are connected to Facebook as:" /> +  <string +      name="facebook_disconnected" +      value="Not connected to Facebook" /> +  <text +   layout="topleft" +   length="1" +   follows="top|left" +   font="SansSerif" +   height="16" +   left="10" +   name="account_caption_label" +   top="5" +   type="string"> +    Not connected to Facebook. +  </text> +  <text +   layout="topleft" +   top_pad="2" +   length="1" +   follows="top|left" +   font="SansSerif" +   height="16" +   left="10" +   name="account_name_label" +   parse_urls="true" +   type="string"/> +  <panel +    layout="topleft" +    follows="left|top" +    name="panel_buttons" +    height="60" +    left="0"> +    <button +     layout="topleft" +     follows="left|top" +     top_pad="9" +     left="10" +     visible="true" +     height="23" +     label="Connect..." +     name="connect_btn" +     width="251"> +      <commit_callback function="SocialSharing.Connect"/> +    </button> + +    <button +     layout="topleft" +     follows="left|top|right" +     top_delta="0" +     left="10" +     right="-10" +     height="23" +     label="Disconnect" +     name="disconnect_btn" +     width="210" +     visible="false"> +      <commit_callback function="SocialSharing.Disconnect"/> +    </button> +    <text        layout="topleft" -      border_size="0" -      height="392" -      follows="all" -      orientation="vertical" -      name="stack_status" -      top="8"> -      <layout_panel -       name="status_detail_panel" -       height="367"> +      length="1" +      follows="top|left|right" +      left="10" +      right="-10" +      height="16" +      name="account_learn_more_label" +      top_pad="5" +      type="string"> +      [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Learn about posting to Facebook] +    </text> +  </panel> +                 <text          length="1" +        layout="topleft"          follows="top|left|right"          font="SansSerif"          height="16" -        left="9" +        left="10"          name="status_caption_label" -        top="13" +        top_pad="5"          type="string">          What's on your mind?         </text>         <text_editor          follows="left|top|right" +        layout="topleft"          height="150" -        width="250" -        left="9" +        width="252" +        left="10"          length="1"          max_length="700"          name="status_message"          type="string"          word_wrap="true">         </text_editor> -      </layout_panel> -      <layout_panel -       name="status_button_panel" -       height="25">         <button -        follows="left|bottom" -        top="0" -        left="9" +        follows="left|top" +        layout="topleft" +        top_pad="6" +        left="10"          height="23"          label="Post"          name="post_status_btn" @@ -53,16 +116,15 @@            function="SocialSharing.SendStatus" />         </button>         <button -        follows="left|bottom" +        follows="right|top" +        layout="topleft"          height="23"          label="Cancel"          name="cancel_status_btn" -        left_pad="15" +        right="-10"          top_delta="0"          width="100">          <button.commit_callback            function="SocialSharing.Cancel" />         </button> -      </layout_panel> -     </layout_stack>      </panel> diff --git a/indra/newview/skins/default/xui/en/panel_flickr_account.xml b/indra/newview/skins/default/xui/en/panel_flickr_account.xml index 506d2e2f74..5c2f335780 100644 --- a/indra/newview/skins/default/xui/en/panel_flickr_account.xml +++ b/indra/newview/skins/default/xui/en/panel_flickr_account.xml @@ -1,6 +1,6 @@  <panel  	 height="540" -	 width="304" +	 width="272"  	 layout="topleft"     name="panel_flickr_account">    <string @@ -15,9 +15,9 @@     follows="top|left"     font="SansSerif"     height="16" -   left="9" +   left="10"     name="account_caption_label" -   top="21" +   top="5"     type="string">      Not connected to Flickr.    </text> @@ -28,7 +28,7 @@     follows="top|left"     font="SansSerif"     height="16" -   left="9" +   left="10"     name="account_name_label"     parse_urls="true"     type="string"/> @@ -36,12 +36,14 @@      layout="topleft"      name="panel_buttons"      height="345" -    left="9"> +    left="0">      <button       layout="topleft" -     follows="left|top" +     follows="left|top|right"       top_pad="9"       visible="true" +	 left="10" +	 right="-10"       height="23"       label="Connect..."       name="connect_btn" @@ -51,8 +53,10 @@      <button       layout="topleft" -     follows="left|top" +     follows="left|top|right"       top_delta="0" +	 left="10" +	 right="-10"       height="23"       label="Disconnect"       name="disconnect_btn" @@ -65,9 +69,9 @@        length="1"        follows="top|left"        height="16" -      left="0" +      left="10"        name="account_learn_more_label" -      top_pad="20" +      top_pad="5"        type="string">        [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Learn about posting to Flickr]      </text> diff --git a/indra/newview/skins/default/xui/en/panel_flickr_photo.xml b/indra/newview/skins/default/xui/en/panel_flickr_photo.xml index 8d8ef45c0d..e31695645d 100644 --- a/indra/newview/skins/default/xui/en/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/en/panel_flickr_photo.xml @@ -1,28 +1,19 @@      <panel        height="540" -      width="304" +      width="272" +	  follows="all"        layout="topleft"        name="panel_flickr_photo"> -      <layout_stack -	   layout="topleft" -       border_size="0" -       height="532" -       follows="all" -       orientation="vertical" -       name="stack_photo" -       top="8"> -        <layout_panel	 -         name="snapshot_panel" -         height="507">              <combo_box               control_name="FlickrPhotoResolution"               follows="left|top" -             top="6" -             left="9" +			 layout="topleft" +             top="7" +             left="10"               name="resolution_combobox"               tool_tip="Image resolution"               height="21" -             width="135"> +             width="124">                <combo_box.item                 label="Current Window"                 name="CurrentWindow" @@ -42,13 +33,14 @@              </combo_box>              <combo_box                 control_name="FlickrPhotoFilters" -               follows="right|top" +               follows="left|top" +			   layout="topleft"                 name="filters_combobox"                 tool_tip="Image filters" -               top="6" -               left="165" +               top_delta="0" +               left_pad="4"                 height="21" -               width="135"> +               width="124">                  <combo_box.item                   label="No Filter"                   name="NoFilter" @@ -59,45 +51,59 @@                  width="250"                  visible="true"                  name="thumbnail_placeholder" -                top="33" -                follows="left|top" -                left="9"> +                top_pad="5" +                follows="left|top|right" +				layout="topleft" +				right="-10" +                left="10">              </panel> -            <button -             follows="left|top" -             height="23" -             label="Refresh" -             left="9" -             top_pad="5" -             name="new_snapshot_btn" -             tool_tip="Click to refresh" -             visible="true" -             width="100" > -             <button.commit_callback -               function="SocialSharing.RefreshPhoto" /> -            </button> -            <text +			<text                  follows="left|top" +				layout="topleft"                  font="SansSerif"                  text_color="EmphasisColor"                  height="14" -                top_pad="-19" -                left_pad="-30" +                top_pad="2" +                left="10"                  length="1"                  halign="center"                  name="working_lbl"                  translate="false"                  type="string"                  visible="true" -                width="150"> +                width="251">                  Refreshing...              </text> +			<view_border  +			 bevel_style="in" +			 follows="left|top" +			 layout="topleft" +			 height="1" +			 left="10" +			 name="refresh_border" +			 width="250" +			 top_pad="0"/> +            <button +             follows="left|top" +			 layout="topleft" +             height="23" +             label="Refresh" +             left="10" +             top_pad="5" +             name="new_snapshot_btn" +             tool_tip="Click to refresh" +             visible="true" +             width="100" > +             <button.commit_callback +               function="SocialSharing.RefreshPhoto" /> +            </button>              <button                  follows="right|top" +				layout="topleft"                  height="23"                  label="Preview" -                left="200" -                top_pad="-19" +                right="-10" +                top_delta="0"                  name="big_preview_btn"                  tool_tip="Click to toggle preview"                  is_toggle="true" @@ -109,19 +115,21 @@              <text               length="1"               follows="top|left|right" +			 layout="topleft"               font="SansSerif"               height="16" -             left="9" +             left="10"               name="title_label" -             top_pad="15" +             top_pad="10"               type="string">                Title:              </text>              <line_editor               follows="left|top" +			 layout="topleft"               height="20"               width="250" -             left="9" +             left="10"               length="1"               max_length="256"               name="photo_title" @@ -130,19 +138,23 @@              <text               length="1"               follows="top|left|right" +			 layout="topleft"               font="SansSerif"               height="16" -             left="9" +             left="10" +			 right="-10"               name="description_label"               top_pad="10" +			 width="25"               type="string">                Description:              </text>              <text_editor               follows="left|top" +			 layout="topleft"               height="50" -             width="250" -             left="9" +             width="249" +             left="10"               length="1"               max_length="700"               name="photo_description" @@ -151,6 +163,7 @@              </text_editor>              <check_box               follows="left|top" +			 layout="topleft"               initial_value="true"               label="Include SL location at end of description"               name="add_location_cb" @@ -159,23 +172,25 @@               top_pad="8"/>              <text               length="1" -             follows="top|left|right" +             follows="top|left" +			 layout="topleft"               font="SansSerif"               height="16" -             left="9" +             left="10"               name="tags_label" -             top_pad="10" +             top_pad="6"               type="string">                Tags:              </text>              <text                length="1"                follows="top|left" +			  layout="topleft"                font="SansSerifSmall"                text_color="White_50"                height="30"                name="tags_help_label" -              left="50" +              left="51"                top_pad="-16"                type="string">  Separate tags with spaces @@ -183,9 +198,10 @@ Use "" for multi-word tags              </text>              <text_editor               follows="left|top" +			 layout="topleft"               height="50" -             width="250" -             left="9" +             width="249" +             left="10"               length="1"               max_length="700"               name="photo_tags" @@ -195,8 +211,9 @@ Use "" for multi-word tags              <combo_box               control_name="FlickrPhotoRating"               follows="left|top" -             top_pad="16" -             left="9" +			 layout="topleft" +             top_pad="7" +             left="10"               name="rating_combobox"               tool_tip="Flickr content rating"               height="21" @@ -214,14 +231,11 @@ Use "" for multi-word tags                 name="RestrictedRating"                 value="3" />              </combo_box> -        </layout_panel> -        <layout_panel -          name="photo_button_panel" -          height="25">            <button             follows="left|top" -           top="0" -           left="9" +		   layout="topleft" +           top_pad="7" +           left="10"             height="23"             label="Upload"             name="post_photo_btn" @@ -230,16 +244,15 @@ Use "" for multi-word tags               function="SocialSharing.SendPhoto" />            </button>            <button -               follows="left|top" +               follows="right|top" +			   layout="topleft"                 height="23"                 label="Cancel"                 name="cancel_photo_btn" -               left_pad="15" +               right="-10"                 top_delta="0"                 width="100">              <button.commit_callback               function="SocialSharing.Cancel" /> -          </button>           -        </layout_panel>         -      </layout_stack> +          </button>      </panel> diff --git a/indra/newview/skins/default/xui/en/panel_postcard_message.xml b/indra/newview/skins/default/xui/en/panel_postcard_message.xml index ab2a42ea01..331a08b4bb 100755 --- a/indra/newview/skins/default/xui/en/panel_postcard_message.xml +++ b/indra/newview/skins/default/xui/en/panel_postcard_message.xml @@ -1,6 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel - height="380" + height="319"   layout="topleft"   name="panel_postcard_message"   width="490"> @@ -12,7 +12,7 @@       font="SansSerif"       height="16"       layout="topleft" -     left="12" +     left="5"       name="to_label"       top="10"       width="60"> @@ -25,7 +25,7 @@       layout="topleft"       left_pad="10"       name="to_form" -     right="-10" +     right="-3"       top_delta="-4" />      <text       type="string" @@ -35,7 +35,7 @@       font="SansSerif"       height="16"       layout="topleft" -     left="12" +     left="5"       name="name_label"       width="60">          From: @@ -47,7 +47,7 @@       left_pad="10"       max_length_bytes="100"       name="name_form" -     right="-10" +     right="-3"       top_delta="-4" />      <text       type="string" @@ -57,7 +57,7 @@       font="SansSerif"       height="16"       layout="topleft" -     left="12" +     left="5"       name="subject_label"       width="60">          Subject: @@ -65,61 +65,24 @@      <line_editor       follows="left|top|right"       height="20" -     label="Type your subject here."       layout="topleft"       left_pad="10"       max_length_bytes="100"       name="subject_form" -     right="-10" +     right="-3"       top_delta="-4" /> -    <text -     type="string" -     length="1" -     bottom_delta="23" -     follows="top|left|right" -     font="SansSerif" -     layout="topleft" -     left="12" -     name="msg_label" -     right="-10"> -        Message: -    </text>      <text_editor       type="string"       length="1"       follows="left|top|right" -     height="60" +     height="48"       layout="topleft" -     left_delta="0" +     left="5"       max_length="700"       name="msg_form" -     right="-10" -     top_pad="10" +     right="-4" +     top_pad="5"       word_wrap="true">          Type your message here.      </text_editor> -    <button -     follows="right|bottom" -     height="23" -     label="Cancel" -     layout="topleft" -     name="cancel_btn" -     right="-32" -     top="350" -     width="100"> -      <button.commit_callback -       function="Postcard.Cancel" /> -    </button> -    <button -     follows="right|bottom" -     height="23" -     label="Send" -     layout="topleft" -     left_delta="-106" -     name="send_btn" -     top_delta="0" -     width="100"> -      <button.commit_callback -       function="Postcard.Send" /> -    </button>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml index 3f67a48b14..525149d7ee 100755 --- a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml @@ -9,10 +9,10 @@       height="23"       label="Resolution"       layout="topleft" -     left="10" +     left="5"       name="postcard_size_combo" -     right="-10" -     top_pad="10"> +     right="-3" +     top_pad="5">          <combo_box.item           label="Current Window"           name="CurrentWindow" @@ -34,103 +34,55 @@           name="Custom"           value="[i-1,i-1]" />      </combo_box> -    <layout_stack -     animate="false" -     follows="all" -     height="275" -     layout="bottomleft" -     name="postcard_image_params_ls" -     left_delta="0" -     orientation="vertical" -     top_pad="10" -     right="-10"> -        <layout_panel -         follows="top|left|right" -         height="60" -         layout="topleft" -         left="0" -         name="postcard_image_size_lp" -         auto_resize="false" -         top="0" -         right="-1" -         visible="true"> -            <spinner -             allow_text_entry="false" -             decimal_digits="0" -             follows="left|top" -             height="20" -             increment="32" -             label="Width" -             label_width="40" -             layout="topleft" -             left="10" -             max_val="6016" -             min_val="32" -             name="postcard_snapshot_width" -             top_pad="10" -             width="95" /> -            <spinner -             allow_text_entry="false" -             decimal_digits="0" -             follows="left|top" -             height="20" -             increment="32" -             label="Height" -             label_width="40" -             layout="topleft" -             left_pad="5" -             max_val="6016" -             min_val="32" -             name="postcard_snapshot_height" -             top_delta="0" -             width="95" /> -            <check_box -              height="10" -             bottom_delta="20" -             follows="left|top" -             label="Constrain proportions" -             layout="topleft" -             left="10" -             name="postcard_keep_aspect_check" /> -        </layout_panel> -        <layout_panel -         follows="top|left|right" -         height="23" -         layout="topleft" -         left="0" -         name="postcard_image_format_quality_lp" -         auto_resize="true" -         top="0" -         right="-1" -         visible="true"> -            <slider -             decimal_digits="0" -             follows="left|top" -             height="15" -             increment="1" -             initial_value="75" -             label="Image quality" -             label_width="80" -             layout="topleft" -             left="0" -             max_val="100" -             name="image_quality_slider" -             top_pad="7" -             width="190" /> -            <text -             type="string" -             follows="left|top" -             font="SansSerifSmall" -             length="1" -             height="14" -             layout="topleft" -             left_pad="-5" -             halign="left" -             name="image_quality_level" -             top_delta="0" -             width="60"> -               ([QLVL]) -            </text> -        </layout_panel> -    </layout_stack> +   <spinner +    allow_text_entry="false" +    decimal_digits="0" +    follows="left|top" +    height="20" +    increment="32" +    label="Width x Height" +    label_width="90" +    layout="topleft" +    left="5" +    max_val="6016" +    min_val="32" +    name="postcard_snapshot_width" +    top_pad="5" +    width="144" /> +   <spinner +    allow_text_entry="false" +    decimal_digits="0" +    follows="left|top" +    height="20" +    increment="32" +    label="" +    label_width="0" +    layout="topleft" +    left_pad="0" +    max_val="6016" +    min_val="32" +    name="postcard_snapshot_height" +    top_delta="0" +    width="52" /> +   <check_box +    top_pad="12" +    follows="left|top" +    label="Constrain proportions" +    layout="topleft" +    left="5" +    name="postcard_keep_aspect_check" /> +   <slider +   decimal_digits="0" +   follows="left|top" +   height="15" +   increment="1" +   initial_value="75" +   label="Quality:" +   label_width="45" +   layout="topleft" +   left="5" +   max_val="100" +   name="image_quality_slider" +   top_pad="6" +   width="190" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml index 71d808fa4b..ea579c6dae 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml @@ -12,12 +12,12 @@       left="12"       mouse_opaque="true"       name="title_icon" -     top="5" +     top="6"       width="18" />      <text       follows="top|left|right"       font="SansSerifBold" -     height="20" +     height="14"       layout="topleft"       left_pad="12"       length="1" @@ -25,46 +25,28 @@       right="-10"       text_color="white"       type="string" -     top_delta="5"> -        Save to My Inventory +     top_delta="3"> +        Inventory      </text>      <view_border        bevel_style="in"       follows="left|top|right"        height="1" -     left="10" +     left="9"       layout="topleft"       name="hr" -     right="-10" +     right="-5"       top_pad="5"       /> -    <text -     bottom="35" -     follows="top|left|right" -     font="SansSerif" -     height="56" -     layout="topleft" -     left="12" -     length="1" -     name="hint_lbl" -     top_pad="10" -     type="string" -     word_wrap="true"> -        Saving an image to your inventory costs L$[UPLOAD_COST]. To save your image as a texture select one of the square formats. -    </text>      <combo_box       follows="top|left|right" -     height="23" +     height="20"       label="Resolution"       layout="topleft"       left_delta="0"       name="texture_size_combo" -     right="-10" -     top_pad="10"> -        <combo_box.item -         label="Current Window" -         name="CurrentWindow" -         value="[i0,i0]" /> +     right="-5" +     top_pad="5">          <combo_box.item           label="Small (128x128)"           name="Small(128x128)" @@ -88,61 +70,74 @@       follows="left|top"       height="20"       increment="32" -     label="Width" -     label_width="40" +     label="Width x Height" +     label_width="90"       layout="topleft"       left="10"       max_val="6016"       min_val="32"       name="inventory_snapshot_width" -     top_pad="10" -     width="95" /> +     top_pad="7" +     width="144" />      <spinner       allow_text_entry="false"       decimal_digits="0"       follows="left|top"       height="20"       increment="32" -     label="Height" -     label_width="40" +     label="" +     label_width="0"       layout="topleft" -     left_pad="5" +     left_pad="0"       max_val="6016"       min_val="32"       name="inventory_snapshot_height"       top_delta="0" -     width="95" /> +     width="54" />      <check_box -     bottom_delta="20" -     height="10" +     top_pad="12"       follows="left|top"       label="Constrain proportions"       layout="topleft"       left="10"       name="inventory_keep_aspect_check"       visible="false" /> +    <text +     follows="top|left" +     font="SansSerif" +     height="56" +     layout="topleft" +     left="10" +     length="1" +     name="hint_lbl" +     top_pad="6" +     width="200" +     type="string" +     word_wrap="true"> +        Saving an image to your inventory costs L$[UPLOAD_COST]. To save your image as a texture select one of the square formats. +    </text>      <button       follows="right|bottom"       height="23"       label="Cancel"       layout="topleft"       name="cancel_btn" -     right="-32" -     top="350" -     width="100"> +     right="-5" +     top="337" +     width="97">        <button.commit_callback         function="Inventory.Cancel" />      </button>      <button -     follows="right|bottom" +     follows="left|bottom"       height="23"       label="Save"       layout="topleft" -     left_delta="-106" +     left="10"       name="save_btn"       top_delta="0" -     width="100"> +     width="97">        <button.commit_callback         function="Inventory.Save" />      </button> -</panel> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml index 781ab17403..188c9f8707 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml @@ -12,12 +12,12 @@       left="12"       mouse_opaque="true"       name="title_icon" -     top="5" +     top="7"       width="18" />      <text       follows="top|left|right"       font="SansSerifBold" -     height="20" +     height="14"       layout="topleft"       left_pad="12"       length="1" @@ -25,28 +25,27 @@       right="-10"       text_color="white"       type="string" -     top_delta="4"> -        Save to My Computer +     top_delta="2"> +        Disk      </text>      <view_border        bevel_style="in"       follows="left|top|right"        height="1" -     left="10" +     left="9"       layout="topleft"       name="hr" -     right="-10" -     top_pad="5" -     /> +     right="-5" +     top_pad="5"/>      <combo_box       follows="left|top|right" -     height="23" +     height="20"       label="Resolution"       layout="topleft"       left_delta="0"       name="local_size_combo" -     right="-10" -     top_pad="10"> +     right="-5" +     top_pad="5">          <combo_box.item           label="Current Window"           name="CurrentWindow" @@ -80,149 +79,114 @@           name="Custom"           value="[i-1,i-1]" />      </combo_box> -    <layout_stack -     animate="false" -     follows="all" -     height="275" -     layout="bottomleft" -     name="local_image_params_ls" -     left_delta="0" -     orientation="vertical" -     top_pad="10" -     right="-10"> -        <layout_panel -         follows="top|left|right" -         height="60" -         layout="topleft" -         left="0" -         name="local_image_size_lp" -         auto_resize="false" -         top="0" -         right="-1" -         visible="true"> -            <spinner -             allow_text_entry="false" -             decimal_digits="0" -             follows="left|top" -             height="20" -             increment="32" -             label="Width" -             label_width="40" -             layout="topleft" -             left="10" -             max_val="6016" -             min_val="32" -             name="local_snapshot_width" -             top_pad="10" -             width="95" /> -            <spinner -             allow_text_entry="false" -             decimal_digits="0" -             follows="left|top" -             height="20" -             increment="32" -             label="Height" -             label_width="40" -             layout="topleft" -             left_pad="5" -             max_val="6016" -             min_val="32" -             name="local_snapshot_height" -             top_delta="0" -             width="95" /> -            <check_box -             bottom_delta="20" -             height="10" -             follows="left|top" -             label="Constrain proportions" -             layout="topleft" -             left="10" -             name="local_keep_aspect_check" /> -        </layout_panel> -        <layout_panel -         follows="top|left|right" -         height="23" -         layout="topleft" -         left="0" -         name="local_image_format_quality_lp" -         auto_resize="true" -         top="0" -         right="-1" -         visible="true"> -            <combo_box -             follows="left|top" -             height="23" -             label="Format" -             layout="topleft" -             left_delta="0" -             name="local_format_combo" -             top_pad="0" -             width="120"> -                <combo_box.item -                 label="PNG (Lossless)" -                 name="PNG" -                 value="PNG" /> -                <combo_box.item -                 label="JPEG" -                 name="JPEG" -                 value="JPEG" /> -                <combo_box.item -                 label="BMP (Lossless)" -                 name="BMP" -                 value="BMP" /> -            </combo_box> -            <slider -             decimal_digits="0" -             follows="left|top" -             height="15" -             increment="1" -             initial_value="75" -             label="Image quality" -             label_width="80" -             layout="topleft" -             left="10" -             max_val="100" -             name="image_quality_slider" -             top_pad="7" -             width="200" /> -            <text -             type="string" -             follows="left|top" -             font="SansSerifSmall" -             length="1" -             height="14" -             layout="topleft" -             left_pad="-5" -             halign="left" -             name="image_quality_level" -             top_delta="0" -             width="60"> -               ([QLVL]) -            </text> -        </layout_panel> -    </layout_stack> +    <spinner +     allow_text_entry="false" +     decimal_digits="0" +     follows="left|top" +     height="20" +     increment="32" +     label="Width x Height" +     label_width="90" +     layout="topleft" +     left="10" +     max_val="6016" +     min_val="32" +     name="local_snapshot_width" +     top_pad="7" +     width="144" /> +    <spinner +     allow_text_entry="false" +     decimal_digits="0" +     follows="left|top" +     height="20" +     increment="32" +     label="" +     label_width="0" +     layout="topleft" +     left_pad="0" +     max_val="6016" +     min_val="32" +     name="local_snapshot_height" +     top_delta="0" +     width="54" /> +    <check_box +     top_pad="12" +     follows="left|top" +     label="Constrain proportions" +     layout="topleft" +     left="10" +     name="local_keep_aspect_check" /> +    <text +      type="string" +      length="1" +      follows="left|top" +      height="13" +      layout="topleft" +      left="10" +      name="local_format_label" +      top_pad="7" +      width="50"> +         Format: +     </text> +    <combo_box +     follows="left|top|right" +     height="20" +     label="Format" +     layout="topleft" +     left="65" +     right="-5" +     name="local_format_combo" +     top_delta="-3" +     width="120"> +        <combo_box.item +         label="PNG (Lossless)" +         name="PNG" +         value="PNG" /> +        <combo_box.item +         label="JPEG" +         name="JPEG" +         value="JPEG" /> +        <combo_box.item +         label="BMP (Lossless)" +         name="BMP" +         value="BMP" /> +    </combo_box> +    <slider +     decimal_digits="0" +     follows="left|top" +     height="15" +     increment="1" +     initial_value="75" +     label="Quality:" +     label_width="45" +     layout="topleft" +     left="10" +     max_val="100" +     name="image_quality_slider" +     top_pad="6" +     width="203" />      <button       follows="right|bottom"       height="23"       label="Cancel"       layout="topleft"       name="cancel_btn" -     right="-32" -     top="350" -     width="100"> +     right="-5" +     top="337" +     width="97">        <button.commit_callback         function="Local.Cancel" />      </button>      <flyout_button -     follows="right|bottom" +     follows="left|bottom"       height="23"       label="Save"       layout="topleft" -     left_delta="-106" +     left="10"       name="save_btn"       tool_tip="Save image to a file"       top_delta="0" -     width="100"> +     width="97">          <flyout_button.item           label="Save"           name="save_item" @@ -232,4 +196,4 @@           name="saveas_item"           value="save as" />      </flyout_button> -</panel> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml index eff60f8228..265217ef60 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml @@ -4,117 +4,124 @@   height="240"   layout="topleft"   name="panel_snapshot_options" - width="490"> + width="208"> + <button +   follows="left|top" +   font="SansSerif" +   halign="left" +   height="22" +   image_overlay="Snapshot_Download" +   image_overlay_alignment="left" +   image_top_pad="-0" +   imgoverlay_label_space="10" +   label="Save to Disk" +   layout="topleft" +   left="9" +   name="save_to_computer_btn" +   top_pad="9"> +    <button.commit_callback +     function="Snapshot.SaveToComputer" /> +  </button>    <button -   follows="left|top|right" +   follows="left|top"     font="SansSerif"     halign="left" -   height="38" -   image_overlay="Snapshot_Profile" +   height="22" +   image_overlay="Snapshot_Inventory"     image_overlay_alignment="left" -   image_top_pad="-2" +   image_top_pad="-1"     imgoverlay_label_space="10" -   label="Post to My Profile Feed" +   label="Save to Inventory (L$[AMOUNT])"     layout="topleft"     left_delta="0" +   name="save_to_inventory_btn" +   top_pad="5"> +    <button.commit_callback +     function="Snapshot.SaveToInventory" /> +  </button> +  <button +   follows="left|top" +   font="SansSerif" +   halign="left" +   height="22" +   image_overlay="Snapshot_Profile" +   image_overlay_alignment="left" +   image_top_pad="-1" +   imgoverlay_label_space="10" +   label="Upload to Profile" +   layout="topleft"     name="save_to_profile_btn" -   pad_left="10" -   right="-10" -   top_pad="10"> +   left_delta="0" +   top_pad="5">      <button.commit_callback       function="Snapshot.SaveToProfile" />    </button>    <button -   follows="left|top|right" +   follows="left|top"     font="SansSerif"     halign="left" -   height="38" -   image_overlay="Snapshot_Email" +   height="22" +   image_overlay="Snapshot_Facebook"     image_overlay_alignment="left" -   image_top_pad="-2" +   image_top_pad="0"     imgoverlay_label_space="10" -   label="Email" +   label="Upload to Facebook"     layout="topleft"     left_delta="0" -   name="save_to_email_btn" -   pad_left="10" -   right="-10" -   top_pad="10"> +   name="send_to_facebook_btn" +   top_pad="5">      <button.commit_callback -     function="Snapshot.SaveToEmail" /> +     function="Snapshot.SendToFacebook"/>    </button>    <button -   follows="left|top|right" +   follows="left|top"     font="SansSerif"     halign="left" -   height="38" -   image_overlay="Snapshot_Inventory" +   height="22" +   image_overlay="Command_Twitter_Icon"     image_overlay_alignment="left" -   image_top_pad="-2" +   image_top_pad="0"     imgoverlay_label_space="10" -   label="Save to My Inventory (L$[AMOUNT])" +   label="Upload to Twitter"     layout="topleft"     left_delta="0" -   name="save_to_inventory_btn" -   pad_left="10" -   right="-10" -   top_pad="10"> +   name="send_to_twitter_btn" +   top_pad="5">      <button.commit_callback -     function="Snapshot.SaveToInventory" /> +     function="Snapshot.SendToTwitter"/>    </button>    <button -   follows="left|top|right" +   follows="left|top"     font="SansSerif"     halign="left" -   height="38" -   image_overlay="Snapshot_Download" +   height="22" +   image_overlay="Command_Flickr_Icon"     image_overlay_alignment="left" -   image_top_pad="-2" +   image_top_pad="0"     imgoverlay_label_space="10" -   label="Save to My Computer" +   label="Upload to Flickr"     layout="topleft"     left_delta="0" -   name="save_to_computer_btn" -   pad_left="10" -   right="-10" -   top_pad="10"> +   name="send_to_flickr_btn" +   top_pad="5">      <button.commit_callback -     function="Snapshot.SaveToComputer" /> +     function="Snapshot.SendToFlickr"/> +  </button> +  <button +   follows="left|top" +   font="SansSerif" +   halign="left" +   height="22" +   image_overlay="Snapshot_Email" +   image_overlay_alignment="left" +   image_top_pad="0" +   imgoverlay_label_space="10" +   label="Send via E-mail" +   layout="topleft" +   left_delta="0" +   name="save_to_email_btn" +   top_pad="5"> +    <button.commit_callback +     function="Snapshot.SaveToEmail" />    </button> -  <text -    font="SansSerif" -    layout="topleft" -    length="1" -    follows="top|left" -    height="16" -    left="10" -    name="send_to_facebook_textbox" -    top_pad="10" -    type="string"> -    Send to:  [secondlife:/// Facebook] -  </text> -  <text -    font="SansSerif" -    layout="topleft" -    length="1" -    follows="top|left" -    height="16" -    left="140" -    name="send_to_twitter_textbox" -    top_pad="-16" -    type="string"> -    [secondlife:/// Twitter] -  </text> -  <text -    font="SansSerif" -    layout="topleft" -    length="1" -    follows="top|left" -    height="16" -    left="190" -    name="send_to_flickr_textbox" -    top_pad="-16" -    type="string"> -    [secondlife:/// Flickr] -  </text> -</panel> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml index ebba292a93..975b08be05 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml @@ -24,12 +24,12 @@       left="12"       mouse_opaque="true"       name="title_icon" -     top="5" +     top="7"       width="18" />      <text       follows="top|left|right"       font="SansSerifBold" -     height="20" +     height="14"       layout="topleft"       left_pad="12"       length="1" @@ -37,63 +37,67 @@       right="-10"       text_color="white"       type="string" -     top_delta="3"> -        Email +     top_delta="2"> +        E-mail      </text> -    <button -     follows="right|top" -     height="23" -     is_toggle="true" -     label="Message" -     layout="topleft" -     name="message_btn" -     right="-82" -     top_delta="-7" -     width="70"> -      <button.commit_callback -       function="Postcard.Message" /> -    </button> -    <button -     follows="right|top" -     height="23" -     is_toggle="true" -     label="Settings" -     layout="topleft" -     name="settings_btn" -     top_delta="0" -     right="-10" -     width="70"> -      <button.commit_callback -       function="Postcard.Settings" /> -    </button>      <view_border        bevel_style="in"       follows="left|top|right"        height="1" -     left="10" +     left="9"       layout="topleft"       name="hr" -     right="-10" +     right="-5"       top_pad="5"       /> -    <panel_container +    <tab_container +     name="postcard_tabs" +     tab_group="1" +     tab_min_width="97" +     tab_height="21" +     tab_position="top" +     top_pad="7" +     left="5" +     right="-2" +     height="319"       follows="all" -     height="340" -     layout="topleft" -     left="0" -     name="postcard_panel_container" -     default_panel_name="panel_postcard_message" -     top_pad="10" -     width="490"> +     halign="center" +     use_highlighting_on_hover="true">        <panel         follows="all"         layout="topleft" +       label="Message"         name="panel_postcard_message"         filename="panel_postcard_message.xml" />        <panel         follows="all"         layout="topleft" +       label="Settings"         name="panel_postcard_settings"         filename="panel_postcard_settings.xml" /> -    </panel_container> -</panel> +    </tab_container> +    <button +     follows="right|bottom" +     height="23" +     label="Cancel" +     layout="topleft" +     name="cancel_btn" +     right="-6" +     bottom="-20" +     width="97"> +      <button.commit_callback +       function="Postcard.Cancel" /> +    </button> +    <button +     follows="left|bottom" +     height="23" +     label="Send" +     layout="topleft" +     left="10" +     name="send_btn" +     top_delta="0" +     width="97"> +      <button.commit_callback +       function="Postcard.Send" /> +    </button> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml index 0dd357aa1a..d86cb92981 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml @@ -12,12 +12,12 @@       left="12"       mouse_opaque="true"       name="title_icon" -     top="5" +     top="7"       width="18" />      <text       follows="top|left|right"       font="SansSerifBold" -     height="20" +     height="14"       layout="topleft"       left_pad="12"       length="1" @@ -26,27 +26,28 @@       text_color="white"       type="string"       top_delta="4"> -        Post to My Profile Feed +        Profile      </text>      <view_border        bevel_style="in"       follows="left|top|right"        height="1" -     left="10" +     left="9"       layout="topleft"       name="hr" -     right="-10" +     right="-5"       top_pad="5"       />      <combo_box -     follows="left|top" +     follows="left|top|right"       height="23"       label="Resolution"       layout="topleft" -     left_delta="0" +     left="10" +     right="-5"       name="profile_size_combo" -     top_pad="10" -     width="250"> +     top_pad="5" +     width="180">          <combo_box.item           label="Current Window"           name="CurrentWindow" @@ -68,132 +69,99 @@           name="Custom"           value="[i-1,i-1]" />      </combo_box> -    <layout_stack -     animate="false" -     follows="all" -     height="270" -     layout="bottomleft" -     name="profile_image_params_ls" +    <spinner +     allow_text_entry="false" +     decimal_digits="0" +     follows="left|top" +     height="20" +     increment="32" +     label="Width x Height" +     label_width="90" +     layout="topleft" +     left="10" +     max_val="6016" +     min_val="32" +     name="profile_snapshot_width" +     top_pad="7" +     width="144" /> +    <spinner +     allow_text_entry="false" +     decimal_digits="0" +     follows="left|top" +     height="20" +     increment="32" +     label="" +     label_width="0" +     layout="topleft" +     left_pad="0" +     max_val="6016" +     min_val="32" +     name="profile_snapshot_height" +     top_delta="0" +     width="54" /> +    <check_box +     top_pad="12" +     label="Constrain proportions" +     layout="topleft" +     left="10" +     name="profile_keep_aspect_check" /> +    <text +     length="1" +     follows="top|left|right" +     height="16" +     layout="topleft" +     left="12" +     name="caption_label" +     right="-10" +     top_pad="4" +     type="string"> +        Caption: +    </text> +    <text_editor +     follows="top|left|right" +     height="35" +     layout="topleft" +     left="10" +     right="-5" +     length="1" +     max_length="700" +     name="caption" +     width="200" +     top_pad="2" +     type="string" +     word_wrap="true"> +    </text_editor> +    <check_box +     follows="left|top" +     initial_value="true" +     label="Include location" +     layout="topleft"       left_delta="0" -     orientation="vertical" -     top_pad="10" -     right="-10"> -        <layout_panel -         follows="top|left|right" -         height="55" -         layout="topleft" -         left="0" -         name="profile_image_size_lp" -         auto_resize="false" -         top="0" -         right="-1" -         visible="true"> -            <spinner -             allow_text_entry="false" -             decimal_digits="0" -             follows="left|top" -             height="20" -             increment="32" -             label="Width" -             label_width="40" -             layout="topleft" -             left="10" -             max_val="6016" -             min_val="32" -             name="profile_snapshot_width" -             top_pad="10" -             width="95" /> -            <spinner -             allow_text_entry="false" -             decimal_digits="0" -             follows="left|top" -             height="20" -             increment="32" -             label="Height" -             label_width="40" -             layout="topleft" -             left_pad="5" -             max_val="6016" -             min_val="32" -             name="profile_snapshot_height" -             top_delta="0" -             width="95" /> -            <check_box -              height="10" -             bottom_delta="20" -             label="Constrain proportions" -             layout="topleft" -             left="10" -             name="profile_keep_aspect_check" /> -        </layout_panel> -        <layout_panel -         follows="top|left|right" -         height="200" -         layout="topleft" -         left="0" -         name="profile_image_metadata_lp" -         auto_resize="true" -         top="0" -         right="-1" -         visible="true"> -            <text -             length="1" -             follows="top|left|right" -             font="SansSerif" -             height="16" -             layout="topleft" -             left="0" -             name="caption_label" -             right="-10" -             top_pad="0" -             type="string"> -                Caption: -            </text> -            <text_editor -             follows="all" -             height="155" -             layout="topleft" -             left_delta="0" -             length="1" -             max_length="700" -             name="caption" -             right="-10" -             top_pad="5" -             type="string" -             word_wrap="true"> -            </text_editor> -            <check_box -             follows="left|bottom" -             initial_value="true" -             label="Include location" -             layout="topleft" -             left_delta="0" -             name="add_location_cb" -             top_pad="15" /> -        </layout_panel> -    </layout_stack> +     height="18" +     name="add_location_cb" +     top_pad="3" />      <button       follows="right|bottom"       height="23"       label="Cancel"       layout="topleft"       name="cancel_btn" -     right="-32" -     top="350" -     width="100"> +     right="-5" +     top="337" +     width="97">        <button.commit_callback         function="PostToProfile.Cancel" />      </button>      <button -     follows="right|bottom" +     follows="left|bottom"       height="23"       label="Post"       layout="topleft" -     left_delta="-106" +     left="10"       name="post_btn"       top_delta="0" -     width="100"> +     width="97">        <button.commit_callback         function="PostToProfile.Send" />      </button> -</panel> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml index 426c0c4915..cb6b2fafd8 100644 --- a/indra/newview/skins/default/xui/en/panel_tools_texture.xml +++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml @@ -36,8 +36,9 @@              <color_swatch               can_apply_immediately="true"               follows="left|top" -             height="45" +             height="22"               label="" +             label_height="0"               layout="topleft"               left="10"               name="colorswatch" diff --git a/indra/newview/skins/default/xui/en/panel_twitter_account.xml b/indra/newview/skins/default/xui/en/panel_twitter_account.xml index ee4f6396e1..b9049a0bba 100644 --- a/indra/newview/skins/default/xui/en/panel_twitter_account.xml +++ b/indra/newview/skins/default/xui/en/panel_twitter_account.xml @@ -1,6 +1,6 @@  <panel  	 height="400" -	 width="304" +	 width="272"  	 layout="topleft"     name="panel_twitter_account">    <string @@ -15,9 +15,9 @@     follows="top|left"     font="SansSerif"     height="16" -   left="9" +   left="10"     name="account_caption_label" -   top="21" +   top="5"     type="string">      Not connected to Twitter.    </text> @@ -28,19 +28,23 @@     follows="top|left"     font="SansSerif"     height="16" -   left="9" +   left="10"     name="account_name_label"     parse_urls="true"     type="string"/>    <panel      layout="topleft" +	follows="top|left"      name="panel_buttons"      height="345" -    left="9"> +	top_pad="3" +    left="0">      <button       layout="topleft" -     follows="left|top" +     follows="left|top|right"       top_pad="9" +	 left="10" +	 right="-10"       visible="true"       height="23"       label="Connect..." @@ -51,8 +55,10 @@      <button       layout="topleft" -     follows="left|top" +     follows="left|top|right"       top_delta="0" +	 left="10" +	 right="-10"       height="23"       label="Disconnect"       name="disconnect_btn" @@ -65,9 +71,9 @@        length="1"        follows="top|left"        height="16" -      left="0" +      left="10"        name="account_learn_more_label" -      top_pad="20" +      top_pad="5"        type="string">        [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Learn about posting to Twitter]      </text> diff --git a/indra/newview/skins/default/xui/en/panel_twitter_photo.xml b/indra/newview/skins/default/xui/en/panel_twitter_photo.xml index c2be56da21..9a460ceead 100644 --- a/indra/newview/skins/default/xui/en/panel_twitter_photo.xml +++ b/indra/newview/skins/default/xui/en/panel_twitter_photo.xml @@ -3,31 +3,22 @@        width="304"        layout="topleft"        name="panel_twitter_photo"> -      <layout_stack -	   layout="topleft" -       border_size="0" -       height="412" -       follows="all" -       orientation="vertical" -       name="stack_photo" -       top="8"> -        <layout_panel -         name="text_panel" -         height="160">            <text             length="1" +		   layout="topleft"             follows="top|left|right"             font="SansSerif"             height="16" -           left="9" +           left="10"             name="status_label" -           top="3" +           top="5"             type="string">              What's happening?            </text>            <text             length="1"             follows="top|left" +		   layout="topleft"             font="SansSerif"             text_color="EmphasisColor"             halign="right" @@ -35,15 +26,16 @@             width="30"             left="227"             name="status_counter_label" -           top="3" +           top="5"             type="string">              140            </text>            <text_editor             follows="left|top" +		   layout="topleft"             height="87"             width="250" -           left="9" +           left="10"             length="1"             max_length="140"             name="photo_status" @@ -52,33 +44,32 @@            </text_editor>            <check_box             follows="left|top" +		   layout="topleft"             initial_value="true"             label="Include SL location"             name="add_location_cb" -            left="9" +            left="10"              height="16" -           top_pad="10"/> +           top_pad="8"/>            <check_box             follows="left|top" +		   layout="topleft"             initial_value="true"             label="Include a photo"             name="add_photo_cb" -            left="9" +            left="10"              height="16" -           top_pad="10"/> -        </layout_panel> -          <layout_panel -           name="snapshot_panel" -           height="227"> +           top_pad="1"/>              <combo_box               control_name="TwitterPhotoResolution"               follows="left|top" -             top="6" -             left="9" +			 layout="topleft" +             top_pad="5" +             left="10"               name="resolution_combobox"               tool_tip="Image resolution"               height="21" -             width="135"> +             width="124">                <combo_box.item                 label="Current Window"                 name="CurrentWindow" @@ -99,61 +90,76 @@                <combo_box                    control_name="TwitterPhotoFilters"                    follows="right|top" +				  layout="topleft"                    name="filters_combobox"                    tool_tip="Image filters" -                  top="6" -                  left="165" +                  top_delta="0" +                  right="-10"                    height="21" -                  width="135"> +                  width="124">                    <combo_box.item                    label="No Filter"                    name="NoFilter"                    value="NoFilter" />                </combo_box>              <panel +				layout="topleft"                  height="150"                  width="250"                  visible="true"                  name="thumbnail_placeholder" -                top="33" -                follows="left|top" -                left="9"> +                top_pad="5" +				right="-10" +                follows="left|top|right" +                left="10">              </panel> -            <button -             follows="left|top" -             height="23" -             label="Refresh" -             left="9" -             top_pad="5" -             name="new_snapshot_btn" -             tool_tip="Click to refresh" -             visible="true" -             width="100" > -             <button.commit_callback -               function="SocialSharing.RefreshPhoto" /> -            </button> -            <text +			<text                  follows="left|top" +				layout="topleft"                  font="SansSerif"                  text_color="EmphasisColor"                  height="14" -                top_pad="-19" -                left_pad="-30" +                top_pad="2" +                left="10"                  length="1"                  halign="center"                  name="working_lbl"                  translate="false"                  type="string"                  visible="true" -                width="150"> +                width="251">                  Refreshing...              </text> +			<view_border  +			 bevel_style="in" +			 follows="left|top" +			 layout="topleft" +			 height="1" +			 left="10" +			 name="refresh_border" +			 width="250" +			 top_pad="0"/> +            <button +             follows="left|top" +			 layout="topleft" +             height="23" +             label="Refresh" +             left="10" +             top_pad="5" +             name="new_snapshot_btn" +             tool_tip="Click to refresh" +             visible="true" +             width="100" > +             <button.commit_callback +               function="SocialSharing.RefreshPhoto" /> +            </button>                <button                    follows="right|top" +				  layout="topleft"                    height="23"                    label="Preview" -                  left="200" -                  top_pad="-19" +                  right="-10" +                  top_delta="0"                    name="big_preview_btn"                    tool_tip="Click to toggle preview"                    is_toggle="true" @@ -162,14 +168,11 @@                    <button.commit_callback                    function="SocialSharing.BigPreview" />                </button> -        </layout_panel> -        <layout_panel -          name="photo_button_panel" -          height="25">            <button             follows="left|top" -           top="0" -           left="9" +		   layout="topleft" +           top_pad="3" +           left="10"             height="23"             label="Tweet"             name="post_photo_btn" @@ -178,16 +181,15 @@               function="SocialSharing.SendPhoto" />            </button>            <button -               follows="left|top" +               follows="right|top" +			   layout="topleft"                 height="23"                 label="Cancel"                 name="cancel_photo_btn" -               left_pad="15" +			   right="-10"                 top_delta="0"                 width="100">              <button.commit_callback               function="SocialSharing.Cancel" />            </button>           -        </layout_panel>         -      </layout_stack>      </panel> diff --git a/indra/newview/skins/default/xui/en/teleport_strings.xml b/indra/newview/skins/default/xui/en/teleport_strings.xml index fdf41991cd..5a9a16d344 100755 --- a/indra/newview/skins/default/xui/en/teleport_strings.xml +++ b/indra/newview/skins/default/xui/en/teleport_strings.xml @@ -48,7 +48,10 @@ Go to 'Welcome Island Public' to repeat the tutorial.      <message name="MustGetAgeRegion">        You must be age 18 or over to enter this region.      </message> -	</message_set> +    <message name="RegionTPSpecialUsageBlocked"> +      Unable to enter region. '[REGION_NAME]' is a Skill Gaming Region, and you must meet certain criteria in order to enter. For details, please review the [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ]. +    </message> +  </message_set>  	<message_set name="progress">  		<message name="sending_dest">  			Sending to destination. diff --git a/indra/win_updater/CMakeLists.txt b/indra/win_updater/CMakeLists.txt deleted file mode 100755 index 210486c668..0000000000 --- a/indra/win_updater/CMakeLists.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -*- cmake -*- - -project(win_updater) - -include(00-Common) -include(LLCommon) -include(Linking) - -# *HACK - override msvcrt implementation (intialized on 00-Common) to be -# statically linked for the installer this relies on vc taking the last flag on -# the command line -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") - -include_directories( -    ${LLCOMMON_INCLUDE_DIRS} -    ) - -set(win_updater_SOURCE_FILES updater.cpp) - -set(win_updater_HEADER_FILES CMakeLists.txt) - -set_source_files_properties(${win_updater_HEADER_FILES} -                            PROPERTIES HEADER_FILE_ONLY TRUE) - -list(APPEND win_updater_SOURCE_FILES ${win_updater_HEADER_FILES}) - -add_executable(windows-updater WIN32 ${win_updater_SOURCE_FILES}) - -target_link_libraries(windows-updater -    wininet -    user32 -    gdi32 -    shell32 -    ) - -set_target_properties(windows-updater -    PROPERTIES -    LINK_FLAGS "/NODEFAULTLIB:MSVCRT" -    LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;MSVCRT\"" -    ) - -# The windows-updater doesn't link against anything non-system, apparently -#ll_deploy_sharedlibs_command(windows-updater) diff --git a/indra/win_updater/updater.cpp b/indra/win_updater/updater.cpp deleted file mode 100755 index aeab5a3b13..0000000000 --- a/indra/win_updater/updater.cpp +++ /dev/null @@ -1,516 +0,0 @@ -/**  - * @file updater.cpp - * @brief Windows auto-updater - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -// -// Usage: updater -url <url> -// - -// We use dangerous fopen, strtok, mbstowcs, sprintf -// which generates warnings on VC2005. -// *TODO: Switch to fopen_s, strtok_s, etc. -#define _CRT_SECURE_NO_DEPRECATE - -#include <windows.h> -#include <wininet.h> -#include <stdio.h> -#include <string> -#include <iostream> -#include <stdexcept> -#include <sstream> -#include <fstream> - -#define BUFSIZE 8192 - -int  gTotalBytesRead = 0; -DWORD gTotalBytes = -1; -HWND gWindow = NULL; -WCHAR gProgress[256]; -char* gUpdateURL = NULL; - -#if _DEBUG -std::ofstream logfile; -#define DEBUG(expr) logfile << expr << std::endl -#else -#define DEBUG(expr) /**/ -#endif - -char* wchars_to_utf8chars(const WCHAR* in_chars) -{ -	int tlen = 0; -	const WCHAR* twc = in_chars; -	while (*twc++ != 0) -	{ -		tlen++; -	} -	char* outchars = new char[tlen]; -	char* res = outchars; -	for (int i=0; i<tlen; i++) -	{ -		int cur_char = (int)(*in_chars++); -		if (cur_char < 0x80) -		{ -			*outchars++ = (char)cur_char; -		} -		else -		{ -			*outchars++ = '?'; -		} -	} -	*outchars = 0; -	return res; -} - -class Fetcher -{ -public: -    Fetcher(const std::wstring& uri) -    { -        // These actions are broken out as separate methods not because it -        // makes the code clearer, but to avoid triggering AntiVir and -        // McAfee-GW-Edition virus scanners (DEV-31680). -        mInet = openInet(); -        mDownload = openUrl(uri); -    } - -    ~Fetcher() -    { -        DEBUG("Calling InternetCloseHandle"); -        InternetCloseHandle(mDownload); -        InternetCloseHandle(mInet); -    } - -    unsigned long read(char* buffer, size_t bufflen) const; - -    DWORD getTotalBytes() const -    { -        DWORD totalBytes; -        DWORD sizeof_total_bytes = sizeof(totalBytes); -        HttpQueryInfo(mDownload, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, -                      &totalBytes, &sizeof_total_bytes, NULL); -        return totalBytes; -    } - -    struct InetError: public std::runtime_error -    { -        InetError(const std::string& what): std::runtime_error(what) {} -    }; - -private: -    // We test results from a number of different MS functions with different -    // return types -- but the common characteristic is that 0 (i.e. (! result)) -    // means an error of some kind. -    template <typename RESULT> -    static RESULT check(const std::string& desc, RESULT result) -    { -        if (result) -        { -            // success, show caller -            return result; -        } -        DWORD err = GetLastError(); -        std::ostringstream out; -        out << desc << " Failed: " << err; -        DEBUG(out.str()); -        throw InetError(out.str()); -    } - -    HINTERNET openUrl(const std::wstring& uri) const; -    HINTERNET openInet() const; - -    HINTERNET mInet, mDownload; -}; - -HINTERNET Fetcher::openInet() const -{ -    DEBUG("Calling InternetOpen"); -    // Init wininet subsystem -    return check("InternetOpen", -                 InternetOpen(L"LindenUpdater", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0)); -} - -HINTERNET Fetcher::openUrl(const std::wstring& uri) const -{ -    DEBUG("Calling InternetOpenUrl: " << wchars_to_utf8chars(uri.c_str())); -    return check("InternetOpenUrl", -                 InternetOpenUrl(mInet, uri.c_str(), NULL, 0, INTERNET_FLAG_NEED_FILE, NULL)); -} - -unsigned long Fetcher::read(char* buffer, size_t bufflen) const -{ -    unsigned long bytes_read = 0; -    DEBUG("Calling InternetReadFile"); -    check("InternetReadFile", -          InternetReadFile(mDownload, buffer, bufflen, &bytes_read)); -    return bytes_read; -} - -int WINAPI get_url_into_file(const std::wstring& uri, const std::string& path, int *cancelled) -{ -	int success = FALSE; -	*cancelled = FALSE; - -    DEBUG("Opening '" << path << "'"); - -	FILE* fp = fopen(path.c_str(), "wb");		/* Flawfinder: ignore */ - -	if (!fp) -	{ -        DEBUG("Failed to open '" << path << "'"); -		return success; -	} - -    // Note, ctor can throw, since it uses check() function. -    Fetcher fetcher(uri); -    gTotalBytes = fetcher.getTotalBytes(); - -/*==========================================================================*| -    // nobody uses total_bytes?!? What's this doing here? -	DWORD total_bytes = 0; -	success = check("InternetQueryDataAvailable", -                    InternetQueryDataAvailable(hdownload, &total_bytes, 0, 0)); -|*==========================================================================*/ - -	success = FALSE; -	while(!success && !(*cancelled)) -	{ -        char data[BUFSIZE];		/* Flawfinder: ignore */ -        unsigned long bytes_read = fetcher.read(data, sizeof(data)); - -		if (!bytes_read) -		{ -            DEBUG("InternetReadFile Read " << bytes_read << " bytes."); -		} - -        DEBUG("Reading Data, bytes_read = " << bytes_read); -		 -		if (bytes_read == 0) -		{ -			// If InternetFileRead returns TRUE AND bytes_read == 0 -			// we've successfully downloaded the entire file -			wsprintf(gProgress, L"Download complete."); -			success = TRUE; -		} -		else -		{ -			// write what we've got, then continue -			fwrite(data, sizeof(char), bytes_read, fp); - -			gTotalBytesRead += int(bytes_read); - -			if (gTotalBytes != -1) -				wsprintf(gProgress, L"Downloaded: %d%%", 100 * gTotalBytesRead / gTotalBytes); -			else -				wsprintf(gProgress, L"Downloaded: %dK", gTotalBytesRead / 1024); - -		} - -        DEBUG("Calling InvalidateRect"); -		 -		// Mark the window as needing redraw (of the whole thing) -		InvalidateRect(gWindow, NULL, TRUE); - -		// Do the redraw -        DEBUG("Calling UpdateWindow"); -		UpdateWindow(gWindow); - -        DEBUG("Calling PeekMessage"); -		MSG msg; -		while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) -		{ -			TranslateMessage(&msg); -			DispatchMessage(&msg); - -			if (msg.message == WM_QUIT) -			{ -				// bail out, user cancelled -				*cancelled = TRUE; -			} -		} -	} - -	fclose(fp); -	return success; -} - -LRESULT CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) -{ -	HDC hdc;			// Drawing context -	PAINTSTRUCT ps; - -	switch(message) -	{ -	case WM_PAINT: -		{ -			hdc = BeginPaint(hwnd, &ps); - -			RECT rect; -			GetClientRect(hwnd, &rect); -			DrawText(hdc, gProgress, -1, &rect,  -				DT_SINGLELINE | DT_CENTER | DT_VCENTER); - -			EndPaint(hwnd, &ps); -			return 0; -		} -	case WM_CLOSE: -	case WM_DESTROY: -		// Get out of full screen -		// full_screen_mode(false); -		PostQuitMessage(0); -		return 0; -	} -	return DefWindowProc(hwnd, message, wparam, lparam); -} - -#define win_class_name L"FullScreen" - -int parse_args(int argc, char **argv) -{ -	int j; - -	for (j = 1; j < argc; j++)  -	{ -		if ((!strcmp(argv[j], "-url")) && (++j < argc))  -		{ -			gUpdateURL = argv[j]; -		} -	} - -	// If nothing was set, let the caller know. -	if (!gUpdateURL) -	{ -		return 1; -	} -	return 0; -} -	 -int WINAPI -WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) -{ -	// Parse the command line. -	LPSTR cmd_line_including_exe_name = GetCommandLineA(); - -	const int MAX_ARGS = 100; -	int argc = 0; -	char* argv[MAX_ARGS];		/* Flawfinder: ignore */ - -#if _DEBUG -	logfile.open("updater.log", std::ios_base::out); -    DEBUG("Parsing command arguments"); -#endif -	 -	char *token = NULL; -	if( cmd_line_including_exe_name[0] == '\"' ) -	{ -		// Exe name is enclosed in quotes -		token = strtok( cmd_line_including_exe_name, "\"" ); -		argv[argc++] = token; -		token = strtok( NULL, " \t," ); -	} -	else -	{ -		// Exe name is not enclosed in quotes -		token = strtok( cmd_line_including_exe_name, " \t," ); -	} - -	while( (token != NULL) && (argc < MAX_ARGS) ) -	{ -		argv[argc++] = token; -		/* Get next token: */ -		if (*(token + strlen(token) + 1) == '\"')		/* Flawfinder: ignore */ -		{ -			token = strtok( NULL, "\""); -		} -		else -		{ -			token = strtok( NULL, " \t," ); -		} -	} - -	gUpdateURL = NULL; - -	///////////////////////////////////////// -	// -	// Process command line arguments -	// - -    DEBUG("Processing command arguments"); -	 -	// -	// Parse the command line arguments -	// -	int parse_args_result = parse_args(argc, argv); -	 -	WNDCLASSEX wndclassex = { 0 }; -	//DEVMODE dev_mode = { 0 }; - -	const int WINDOW_WIDTH = 250; -	const int WINDOW_HEIGHT = 100; - -	wsprintf(gProgress, L"Connecting..."); - -	/* Init the WNDCLASSEX */ -	wndclassex.cbSize = sizeof(WNDCLASSEX); -	wndclassex.style = CS_HREDRAW | CS_VREDRAW; -	wndclassex.hInstance = hInstance; -	wndclassex.lpfnWndProc = WinProc; -	wndclassex.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); -	wndclassex.lpszClassName = win_class_name; -	 -	RegisterClassEx(&wndclassex); -	 -	// Get the size of the screen -	//EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode); -	 -	gWindow = CreateWindowEx(NULL, win_class_name,  -		L"Second Life Updater", -		WS_OVERLAPPEDWINDOW,  -		CW_USEDEFAULT,  -		CW_USEDEFAULT,  -		WINDOW_WIDTH,  -		WINDOW_HEIGHT, -		NULL, NULL, hInstance, NULL); - -	ShowWindow(gWindow, nShowCmd); -	UpdateWindow(gWindow); - -	if (parse_args_result) -	{ -		MessageBox(gWindow,  -				L"Usage: updater -url <url> [-name <window_title>] [-program <program_name>] [-silent]", -				L"Usage", MB_OK); -		return parse_args_result; -	} - -	// Did we get a userserver to work with? -	if (!gUpdateURL) -	{ -		MessageBox(gWindow, L"Please specify the download url from the command line", -			L"Error", MB_OK); -		return 1; -	} - -	// Can't feed GetTempPath into GetTempFile directly -	char temp_path[MAX_PATH];		/* Flawfinder: ignore */ -	if (0 == GetTempPathA(sizeof(temp_path), temp_path)) -	{ -		MessageBox(gWindow, L"Problem with GetTempPath()", -			L"Error", MB_OK); -		return 1; -	} -    std::string update_exec_path(temp_path); -	update_exec_path.append("Second_Life_Updater.exe"); - -	WCHAR update_uri[4096]; -    mbstowcs(update_uri, gUpdateURL, sizeof(update_uri)); - -	int success = 0; -	int cancelled = 0; - -	// Actually do the download -    try -    { -        DEBUG("Calling get_url_into_file"); -        success = get_url_into_file(update_uri, update_exec_path, &cancelled); -    } -    catch (const Fetcher::InetError& e) -    { -        (void)e; -        success = FALSE; -        DEBUG("Caught: " << e.what()); -    } - -	// WinInet can't tell us if we got a 404 or not.  Therefor, we check -	// for the size of the downloaded file, and assume that our installer -	// will always be greater than 1MB. -	if (gTotalBytesRead < (1024 * 1024) && ! cancelled) -	{ -		MessageBox(gWindow, -			L"The Second Life auto-update has failed.\n" -			L"The problem may be caused by other software installed \n" -			L"on your computer, such as a firewall.\n" -			L"Please visit http://secondlife.com/download/ \n" -			L"to download the latest version of Second Life.\n", -			NULL, MB_OK); -		return 1; -	} - -	if (cancelled) -	{ -		// silently exit -		return 0; -	} - -	if (!success) -	{ -		MessageBox(gWindow,  -			L"Second Life download failed.\n" -			L"Please try again later.",  -			NULL, MB_OK); -		return 1; -	} - -	// TODO: Make updates silent (with /S to NSIS) -	//char params[256];		/* Flawfinder: ignore */ -	//sprintf(params, "/S");	/* Flawfinder: ignore */ -	//MessageBox(gWindow,  -	//	L"Updating Second Life.\n\nSecond Life will automatically start once the update is complete.  This may take a minute...", -	//	L"Download Complete", -	//	MB_OK); -		 -/*==========================================================================*| -    // DEV-31680: ShellExecuteA() causes McAfee-GW-Edition and AntiVir -    // scanners to flag this executable as a probable virus vector. -    // Less than or equal to 32 means failure -	if (32 >= (int) ShellExecuteA(gWindow, "open", update_exec_path.c_str(), NULL,  -		"C:\\", SW_SHOWDEFAULT)) -|*==========================================================================*/ -    // from http://msdn.microsoft.com/en-us/library/ms682512(VS.85).aspx -    STARTUPINFOA si; -    PROCESS_INFORMATION pi; -    ZeroMemory(&si, sizeof(si)); -    si.cb = sizeof(si); -    ZeroMemory(&pi, sizeof(pi)); - -    if (! CreateProcessA(update_exec_path.c_str(), // executable file -                  NULL,                            // command line -                  NULL,             // process cannot be inherited -                  NULL,             // thread cannot be inherited -                  FALSE,            // do not inherit existing handles -                  0,                // process creation flags -                  NULL,             // inherit parent's environment -                  NULL,             // inherit parent's current dir -                  &si,              // STARTUPINFO -                  &pi))             // PROCESS_INFORMATION -	{ -		MessageBox(gWindow, L"Update failed.  Please try again later.", NULL, MB_OK); -		return 1; -	} - -	// Give installer some time to open a window -	Sleep(1000); - -	return 0; -} | 
