From 6255a1172262b5cbe8c30786aabae8cde61f5630 Mon Sep 17 00:00:00 2001
From: cinder <cinder@cinderblocks.biz>
Date: Fri, 18 Nov 2022 08:56:47 -0600
Subject: [PATCH] Reintroduce LLDropTarget

---
 indra/newview/CMakeLists.txt   |  2 ++
 indra/newview/lldroptarget.cpp | 60 +++++++++++++++++++++++++++++++
 indra/newview/lldroptarget.h   | 64 ++++++++++++++++++++++++++++++++++
 3 files changed, 126 insertions(+)
 create mode 100644 indra/newview/lldroptarget.cpp
 create mode 100644 indra/newview/lldroptarget.h

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 08954bbb8ec..5ce267b9b03 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -224,6 +224,7 @@ set(viewer_SOURCE_FILES
     lldrawpooltree.cpp
     lldrawpoolwater.cpp
     lldrawpoolwlsky.cpp
+    lldroptarget.cpp
     lldynamictexture.cpp
     llemote.cpp
     llenvironment.cpp
@@ -915,6 +916,7 @@ set(viewer_HEADER_FILES
     lldrawpooltree.h
     lldrawpoolwater.h
     lldrawpoolwlsky.h
+    lldroptarget.h
     lldynamictexture.h
     llemote.h
     llenvironment.h
diff --git a/indra/newview/lldroptarget.cpp b/indra/newview/lldroptarget.cpp
new file mode 100644
index 00000000000..1bb17a0cdca
--- /dev/null
+++ b/indra/newview/lldroptarget.cpp
@@ -0,0 +1,60 @@
+/*
+ * @file lldroptarget.cpp
+ * @brief Base drop target class
+ * @author Cinder Roxley, based on code from llpanelavatar.cpp
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2014, 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 "llviewerprecompiledheaders.h"
+
+#include "lldroptarget.h"
+#include "lltooldraganddrop.h"
+
+static LLDefaultChildRegistry::Register<LLDropTarget> r("drop_target");
+
+LLDropTarget::LLDropTarget(const LLDropTarget::Params& p)
+:	LLView(p),
+mAgentID(p.agent_id)
+{}
+
+void LLDropTarget::doDrop(EDragAndDropType cargo_type, void* cargo_data)
+{
+	LL_INFOS("") << "LLDropTarget::doDrop()" << LL_ENDL;
+}
+
+BOOL LLDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+									 EDragAndDropType cargo_type,
+									 void* cargo_data,
+									 EAcceptance* accept,
+									 std::string& tooltip_msg)
+{
+	if(getParent())
+	{
+		LLToolDragAndDrop::handleGiveDragAndDrop(mAgentID, LLUUID::null, drop,
+												 cargo_type, cargo_data, accept);
+		
+		return TRUE;
+	}
+	
+	return FALSE;
+}
diff --git a/indra/newview/lldroptarget.h b/indra/newview/lldroptarget.h
new file mode 100644
index 00000000000..3ec072b6d38
--- /dev/null
+++ b/indra/newview/lldroptarget.h
@@ -0,0 +1,64 @@
+/*
+ * @file lldroptarget.h
+ * @brief Base drop target class
+ * @author Cinder Roxley, based on code from llpanelavatar.cpp
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2014, 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$
+ */
+
+#ifndef LL_DROPTARGET_H
+#define LL_DROPTARGET_H
+
+#include "llview.h"
+
+class LLDropTarget : public LLView
+{
+public:
+	struct Params : public LLInitParam::Block<Params, LLView::Params>
+	{
+		Optional<LLUUID> agent_id;
+		Params()
+		:	agent_id("agent_id")
+		{
+			changeDefault(mouse_opaque, false);
+			changeDefault(follows.flags, FOLLOWS_ALL);
+		}
+	};
+	
+	LLDropTarget(const Params&);
+	~LLDropTarget() = default;
+	
+	void doDrop(EDragAndDropType cargo_type, void* cargo_data);
+	
+	//
+	// LLView functionality
+	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+								   EDragAndDropType cargo_type,
+								   void* cargo_data,
+								   EAcceptance* accept,
+								   std::string& tooltip_msg) override;
+	void setAgentID(const LLUUID &agent_id)		{ mAgentID = agent_id; }
+protected:
+	LLUUID mAgentID;
+};
+
+#endif // LL_DROPTARGET_H
-- 
GitLab