summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llinventorybridge.cpp20
-rw-r--r--indra/newview/llinventoryfunctions.cpp18
-rw-r--r--indra/newview/llinventorypanel.cpp26
-rw-r--r--indra/newview/llinventorypanel.h5
-rw-r--r--indra/newview/llpanelmaininventory.cpp15
-rw-r--r--indra/newview/llpanelmaininventory.h3
6 files changed, 60 insertions, 27 deletions
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 03123689c5..67d65547b6 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1881,6 +1881,7 @@ void LLItemBridge::gotoItem()
if (active_panel)
{
active_panel->setSelection(obj->getLinkedUUID(), TAKE_FOCUS_NO);
+ active_panel->setFocus(TRUE);
}
}
@@ -7229,24 +7230,13 @@ void LLLinkFolderBridge::performAction(LLInventoryModel* model, std::string acti
}
LLItemBridge::performAction(model,action);
}
+
void LLLinkFolderBridge::gotoItem()
{
- const LLUUID &cat_uuid = getFolderID();
- if (!cat_uuid.isNull())
- {
- LLFolderViewItem *base_folder = mInventoryPanel.get()->getItemByID(cat_uuid);
- if (base_folder)
- {
- if (LLInventoryModel* model = getInventoryModel())
- {
- model->fetchDescendentsOf(cat_uuid);
- }
- base_folder->setOpen(TRUE);
- mRoot->setSelection(base_folder,TRUE);
- mRoot->scrollToShowSelection();
- }
- }
+ LLItemBridge::gotoItem();
+ LLInventoryPanel::getActiveInventoryPanel()->openFolderByID(getFolderID());
}
+
const LLUUID &LLLinkFolderBridge::getFolderID() const
{
if (LLViewerInventoryItem *link_item = getItem())
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 646d92b9e1..9eb84ed259 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -737,9 +737,8 @@ void show_item_original(const LLUUID& item_uuid)
}
//sidetray inventory panel
- LLSidepanelInventory *sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
+ LLSidepanelInventory *sidepanel_inventory = LLPanelMainInventory::newWindow()->LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
- bool do_reset_inventory_filter = !floater_inventory->isInVisibleChain();
LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel();
if (!active_panel)
@@ -758,11 +757,7 @@ void show_item_original(const LLUUID& item_uuid)
return;
}
active_panel->setSelection(gInventory.getLinkedItemID(item_uuid), TAKE_FOCUS_YES);
-
- if(do_reset_inventory_filter)
- {
- reset_inventory_filter();
- }
+ active_panel->setFocus(TRUE);
}
@@ -2446,6 +2441,15 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root
}
else
{
+ if (action == "goto")
+ {
+ LLSidepanelInventory *sidepanel_inventory = LLPanelMainInventory::newWindow()->LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
+ if (sidepanel_inventory && sidepanel_inventory->getMainInventoryPanel())
+ {
+ model = sidepanel_inventory->getMainInventoryPanel()->getActivePanel()->getModel();
+ }
+ }
+
std::set<LLFolderViewItem*>::iterator set_iter;
for (set_iter = selected_items.begin(); set_iter != selected_items.end(); ++set_iter)
{
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index c65998cf90..740c27ae8b 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -339,6 +339,7 @@ void LLInventoryPanel::draw()
{
// Select the desired item (in case it wasn't loaded when the selection was requested)
updateSelection();
+ updateFolderState();
LLPanel::draw();
}
@@ -1146,6 +1147,7 @@ void LLInventoryPanel::setSelectCallback(const boost::function<void (const std::
void LLInventoryPanel::clearSelection()
{
mSelectThisID.setNull();
+ mOpenFolderID.setNull();
}
LLInventoryPanel::selected_items_t LLInventoryPanel::getSelectedItems() const
@@ -1646,6 +1648,30 @@ void LLInventoryPanel::updateSelection()
}
}
+void LLInventoryPanel::openFolderByID( const LLUUID& folder_id)
+{
+ LLFolderViewItem* itemp = getItemByID(folder_id);
+ if(itemp && itemp->getViewModelItem())
+ {
+ itemp->setOpen(TRUE);
+ mOpenFolderID.setNull();
+ return;
+ }
+ else
+ {
+ // save the desired folder to be open later (if/when ready)
+ mOpenFolderID = folder_id;
+ }
+}
+
+void LLInventoryPanel::updateFolderState()
+{
+ if (mOpenFolderID.notNull())
+ {
+ openFolderByID(mOpenFolderID);
+ }
+}
+
void LLInventoryPanel::doToSelected(const LLSD& userdata)
{
if (("purge" == userdata.asString()))
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 7cb52dc1f3..e51281b4b3 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -244,7 +244,9 @@ public:
LLFolderViewItem* getItemByID(const LLUUID& id);
LLFolderViewFolder* getFolderByID(const LLUUID& id);
void setSelectionByID(const LLUUID& obj_id, BOOL take_keyboard_focus);
+ void openFolderByID(const LLUUID& folder_id);
void updateSelection();
+ void updateFolderState();
void setSuppressOpenItemAction(bool supress_open_item) { mSuppressOpenItemAction = supress_open_item; }
@@ -260,7 +262,8 @@ protected:
void openStartFolderOrMyInventory(); // open the first level of inventory
void onItemsCompletion(); // called when selected items are complete
- LLUUID mSelectThisID;
+ LLUUID mSelectThisID;
+ LLUUID mOpenFolderID;
LLInventoryModel* mInventory;
LLInventoryObserver* mInventoryObserver;
LLInvPanelComplObserver* mCompletionObserver;
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 4691ee3849..813a5b3c20 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -383,15 +383,16 @@ void LLPanelMainInventory::closeAllFolders()
getPanel()->getRootFolder()->closeAllFolders();
}
-void LLPanelMainInventory::newWindow()
+LLFloaterSidePanelContainer* LLPanelMainInventory::newWindow()
{
static S32 instance_num = 0;
instance_num = (instance_num + 1) % S32_MAX;
if (!gAgentCamera.cameraMouselook())
{
- LLFloaterReg::showTypedInstance<LLFloaterSidePanelContainer>("inventory", LLSD(instance_num));
+ return LLFloaterReg::showTypedInstance<LLFloaterSidePanelContainer>("inventory", LLSD(instance_num));
}
+ return NULL;
}
void LLPanelMainInventory::doCreate(const LLSD& userdata)
@@ -1343,7 +1344,15 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
{
return;
}
- static_cast<LLFolderViewModelItemInventory*>(current_item->getViewModelItem())->performAction(getActivePanel()->getModel(), "goto");
+ LLSidepanelInventory *sidepanel_inventory = newWindow()->LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
+ if (sidepanel_inventory)
+ {
+ LLPanelMainInventory* new_inventory = sidepanel_inventory->getMainInventoryPanel();
+ if (new_inventory)
+ {
+ static_cast<LLFolderViewModelItemInventory*>(current_item->getViewModelItem())->performAction(new_inventory->getActivePanel()->getModel(), "goto");
+ }
+ }
}
if (command_name == "find_links")
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index 903b33bdbf..40f04da6e9 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -46,6 +46,7 @@ class LLMenuButton;
class LLMenuGL;
class LLToggleableMenu;
class LLFloater;
+class LLFloaterSidePanelContainer;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLPanelMainInventory
@@ -90,7 +91,7 @@ public:
void setFocusFilterEditor();
- static void newWindow();
+ static LLFloaterSidePanelContainer* newWindow();
void toggleFindOptions();