FIRE-31074: Setting double-click actions via Advanced/Developer menu or CTRL-Shift-D shortcut doesn't work anymore
parent
411f15635f
commit
3ab692e00c
|
|
@ -159,6 +159,7 @@
|
|||
#include "llcheckboxctrl.h"
|
||||
#include "llfloatergridstatus.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llkeyconflict.h"
|
||||
#include "lllogininstance.h"
|
||||
#include "llscenemonitor.h"
|
||||
#include "llsdserialize.h"
|
||||
|
|
@ -9643,26 +9644,88 @@ class LLToggleShaderControl : public view_listener_t
|
|||
};
|
||||
|
||||
//[FIX FIRE-1927 - enable DoubleClickTeleport shortcut : SJ]
|
||||
class LLAdvancedToggleDoubleClickTeleport: public view_listener_t
|
||||
// This stuff is based on LLPanelPreferenceControls::setKeyBind() and LLPanelPreferenceControls::canKeyBindHandle()
|
||||
void setDoubleClickAction(const std::string& control)
|
||||
{
|
||||
constexpr LLKeyConflictHandler::ESourceMode mode{ LLKeyConflictHandler::MODE_THIRD_PERSON };
|
||||
constexpr EMouseClickType click{ EMouseClickType::CLICK_DOUBLELEFT };
|
||||
constexpr KEY key{ KEY_NONE };
|
||||
constexpr MASK mask{ MASK_NONE };
|
||||
|
||||
LLKeyConflictHandler conflictHandler;
|
||||
conflictHandler.setLoadMode(mode);
|
||||
conflictHandler.loadFromSettings(mode);
|
||||
|
||||
if (!conflictHandler.canAssignControl(control))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bool is_enabled = conflictHandler.canHandleControl(control, click, key, mask);
|
||||
if (!is_enabled)
|
||||
{
|
||||
// find free spot to add data, if no free spot, assign to first
|
||||
S32 index = 0;
|
||||
for (S32 i = 0; i < 3; i++)
|
||||
{
|
||||
if (conflictHandler.getControl(control, i).isEmpty())
|
||||
{
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool ignore_mask = true;
|
||||
conflictHandler.registerControl(control, index, click, key, mask, ignore_mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
// find specific control and reset it
|
||||
for (S32 i = 0; i < 3; i++)
|
||||
{
|
||||
LLKeyData data = conflictHandler.getControl(control, i);
|
||||
if (data.mMouse == click && data.mKey == key && data.mMask == mask)
|
||||
{
|
||||
conflictHandler.clearControl(control, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
conflictHandler.saveToSettings();
|
||||
}
|
||||
|
||||
bool isDoubleClickActionEnabled(const std::string control)
|
||||
{
|
||||
constexpr LLKeyConflictHandler::ESourceMode mode{ LLKeyConflictHandler::MODE_THIRD_PERSON };
|
||||
constexpr EMouseClickType click{ EMouseClickType::CLICK_DOUBLELEFT };
|
||||
constexpr KEY key{ KEY_NONE };
|
||||
constexpr MASK mask{ MASK_NONE };
|
||||
|
||||
LLKeyConflictHandler conflictHandler;
|
||||
conflictHandler.loadFromSettings(mode);
|
||||
|
||||
return conflictHandler.canHandleControl(control, click, key, mask);
|
||||
}
|
||||
|
||||
class FSAdvancedToggleDoubleClickAction: public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
BOOL checked = gSavedSettings.getBOOL("DoubleClickTeleport");
|
||||
if (checked)
|
||||
{
|
||||
gSavedSettings.setBOOL("DoubleClickTeleport", FALSE);
|
||||
report_to_nearby_chat(LLTrans::getString("DoubleClickTeleportDisabled"));
|
||||
}
|
||||
else
|
||||
{
|
||||
gSavedSettings.setBOOL("DoubleClickTeleport", TRUE);
|
||||
gSavedSettings.setBOOL("DoubleClickAutoPilot", FALSE);
|
||||
report_to_nearby_chat(LLTrans::getString("DoubleClickTeleportEnabled"));
|
||||
}
|
||||
const std::string& control = userdata.asStringRef();
|
||||
setDoubleClickAction(control);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class FSAdvancedCheckEnabledDoubleClickAction : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
const std::string& control = userdata.asStringRef();
|
||||
return isDoubleClickActionEnabled(control);
|
||||
}
|
||||
};
|
||||
|
||||
// <FS:Beq> Add telemetry controls to the viewer menus
|
||||
class FSTelemetryToggleActive : public view_listener_t
|
||||
{
|
||||
|
|
@ -11917,7 +11980,8 @@ void initialize_menus()
|
|||
view_listener_t::addMenu(new LLAdvancedClickRenderProfile(), "Advanced.ClickRenderProfile");
|
||||
view_listener_t::addMenu(new LLAdvancedClickRenderBenchmark(), "Advanced.ClickRenderBenchmark");
|
||||
//[FIX FIRE-1927 - enable DoubleClickTeleport shortcut : SJ]
|
||||
view_listener_t::addMenu(new LLAdvancedToggleDoubleClickTeleport, "Advanced.ToggleDoubleClickTeleport");
|
||||
view_listener_t::addMenu(new FSAdvancedToggleDoubleClickAction, "Advanced.SetDoubleClickAction");
|
||||
view_listener_t::addMenu(new FSAdvancedCheckEnabledDoubleClickAction, "Advanced.CheckEnabledDoubleClickAction");
|
||||
|
||||
#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
|
||||
view_listener_t::addMenu(new LLAdvancedHandleToggleHackedGodmode(), "Advanced.HandleToggleHackedGodmode");
|
||||
|
|
|
|||
|
|
@ -3353,10 +3353,11 @@
|
|||
name="DoubleClick Teleport"
|
||||
shortcut="control|shift|D">
|
||||
<on_check
|
||||
function="CheckControl"
|
||||
parameter="DoubleClickTeleport" />
|
||||
function="Advanced.CheckEnabledDoubleClickAction"
|
||||
parameter="teleport_to"/>
|
||||
<on_click
|
||||
function="Advanced.ToggleDoubleClickTeleport"/>
|
||||
function="Advanced.SetDoubleClickAction"
|
||||
parameter="teleport_to"/>
|
||||
</menu_item_check>
|
||||
<!-- //[FIX FIRE-1927 - enable DoubleClickTeleport shortcut : SJ] -->
|
||||
|
||||
|
|
@ -4795,21 +4796,21 @@
|
|||
label="Double-Click Auto-Pilot"
|
||||
name="Double-ClickAuto-Pilot">
|
||||
<menu_item_check.on_check
|
||||
function="CheckControl"
|
||||
parameter="DoubleClickAutoPilot" />
|
||||
function="Advanced.CheckEnabledDoubleClickAction"
|
||||
parameter="walk_to" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="DoubleClickAutoPilot" />
|
||||
function="Advanced.SetDoubleClickAction"
|
||||
parameter="walk_to" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Double-Click Teleport"
|
||||
name="DoubleClick Teleport">
|
||||
<menu_item_check.on_check
|
||||
function="CheckControl"
|
||||
parameter="DoubleClickTeleport" />
|
||||
function="Advanced.CheckEnabledDoubleClickAction"
|
||||
parameter="teleport_to" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="DoubleClickTeleport" />
|
||||
function="Advanced.SetDoubleClickAction"
|
||||
parameter="teleport_to" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator />
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue