From f15ad1cb3c92b56ceaa647114974afe9252d6a1f Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Wed, 14 Jan 2009 18:56:40 -0600 Subject: Added inventory ntype for folders. --- linden/indra/llinventory/llinventory.cpp | 5 +++++ linden/indra/llinventory/llinventorytype.h | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'linden') diff --git a/linden/indra/llinventory/llinventory.cpp b/linden/indra/llinventory/llinventory.cpp index 0a8a1fb..4b2e810 100644 --- a/linden/indra/llinventory/llinventory.cpp +++ b/linden/indra/llinventory/llinventory.cpp @@ -173,6 +173,11 @@ LLInventoryType::NType calc_ntype( case LLInventoryType::IT_ATTACHMENT: return LLInventoryType::NIT_OBJECT; + // FOLDERS + case LLInventoryType::IT_CATEGORY: + case LLInventoryType::IT_ROOT_CATEGORY: + return LLInventoryType::NIT_FOLDER; + // UNKNOWN TYPE! default: return LLInventoryType::NIT_NONE; diff --git a/linden/indra/llinventory/llinventorytype.h b/linden/indra/llinventory/llinventorytype.h index f228cd0..c81733e 100644 --- a/linden/indra/llinventory/llinventorytype.h +++ b/linden/indra/llinventory/llinventorytype.h @@ -152,8 +152,11 @@ public: /* Objects */ NIT_OBJECT = 1 << 24, + /* Folders ("Categories" in the old type system) */ + NIT_FOLDER = 1 << 25, + /* Bitwise OR-ing of all the above */ - NIT_ALL = 0x1ffffff, + NIT_ALL = 0x3ffffff, }; -- cgit v1.1 From b6ff3724572f7ae614699fc98bd1de9fa367b76d Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Wed, 14 Jan 2009 20:53:55 -0600 Subject: Don't show empty folders when using filter. This is the old behavior, but I had broken it. --- linden/indra/newview/llinventoryview.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'linden') diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp index 52c3b7e..d72fb95 100644 --- a/linden/indra/newview/llinventoryview.cpp +++ b/linden/indra/newview/llinventoryview.cpp @@ -280,13 +280,11 @@ void LLInventoryViewFinder::draw() filtered_by_all_types = FALSE; } - /* if (!filtered_by_all_types) { // don't include folders in filter, unless I've selected everything - filter &= ~(LLInventoryType::NIT_CATEGORY); + filter &= ~(LLInventoryType::NIT_FOLDER); } - */ // update the panel, panel will update the filter mInventoryView->mActivePanel->setShowFolderState(getCheckShowEmpty() ? -- cgit v1.1 From 55b5f0c36b5d6448c6144cdd77ddee8273333b76 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Thu, 15 Jan 2009 14:49:09 -0600 Subject: LLInventoryViewFinder::rebuildFilter(). Refactored from draw(). --- linden/indra/newview/llinventoryview.cpp | 10 ++++++---- linden/indra/newview/llinventoryview.h | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) (limited to 'linden') diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp index d72fb95..4beb370 100644 --- a/linden/indra/newview/llinventoryview.cpp +++ b/linden/indra/newview/llinventoryview.cpp @@ -203,6 +203,12 @@ void LLInventoryViewFinder::updateElementsFromFilter() void LLInventoryViewFinder::draw() { + rebuildFilter(); + LLFloater::draw(); +} + +void LLInventoryViewFinder::rebuildFilter() +{ U32 filter = 0xffffffff; BOOL filtered_by_all_types = TRUE; @@ -237,8 +243,6 @@ void LLInventoryViewFinder::draw() } if (!childGetValue("check_landmark")) - - { filter &= ~(LLInventoryType::NIT_LANDMARK); filtered_by_all_types = FALSE; @@ -308,8 +312,6 @@ void LLInventoryViewFinder::draw() mInventoryView->mActivePanel->setHoursAgo(hours); mInventoryView->mActivePanel->setSinceLogoff(getCheckSinceLogoff()); mInventoryView->setFilterTextFromFilter(); - - LLFloater::draw(); } void LLInventoryViewFinder::onClose(bool app_quitting) diff --git a/linden/indra/newview/llinventoryview.h b/linden/indra/newview/llinventoryview.h index 80e5768..26f3003 100644 --- a/linden/indra/newview/llinventoryview.h +++ b/linden/indra/newview/llinventoryview.h @@ -163,6 +163,7 @@ public: const LLRect& rect, LLInventoryView* inventory_view); virtual void draw(); + virtual void rebuildFilter(); virtual void onClose(bool app_quitting); void changeFilter(LLInventoryFilter* filter); void updateElementsFromFilter(); -- cgit v1.1 From 3e7f79f569e17c845152a7039d084a7877517f11 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Thu, 15 Jan 2009 15:10:30 -0600 Subject: Simplified rebuildFilter() a bit. --- linden/indra/newview/llinventoryview.cpp | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) (limited to 'linden') diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp index 4beb370..4576ff9 100644 --- a/linden/indra/newview/llinventoryview.cpp +++ b/linden/indra/newview/llinventoryview.cpp @@ -209,82 +209,69 @@ void LLInventoryViewFinder::draw() void LLInventoryViewFinder::rebuildFilter() { - U32 filter = 0xffffffff; - BOOL filtered_by_all_types = TRUE; + U32 filter = LLInventoryType::NIT_ALL; if (!childGetValue("check_animation")) { filter &= ~(LLInventoryType::NIT_ANIMATION); - filtered_by_all_types = FALSE; } if (!childGetValue("check_bodypart")) { filter &= ~(LLInventoryType::NIT_BODYPART); - filtered_by_all_types = FALSE; } if (!childGetValue("check_calling_card")) { filter &= ~(LLInventoryType::NIT_CALLCARD); - filtered_by_all_types = FALSE; } if (!childGetValue("check_clothing")) { filter &= ~(LLInventoryType::NIT_CLOTHING); - filtered_by_all_types = FALSE; } if (!childGetValue("check_gesture")) { filter &= ~(LLInventoryType::NIT_GESTURE); - filtered_by_all_types = FALSE; } if (!childGetValue("check_landmark")) { filter &= ~(LLInventoryType::NIT_LANDMARK); - filtered_by_all_types = FALSE; } if (!childGetValue("check_notecard")) { filter &= ~(LLInventoryType::NIT_NOTECARD); - filtered_by_all_types = FALSE; } if (!childGetValue("check_object")) { filter &= ~(LLInventoryType::NIT_OBJECT); - filtered_by_all_types = FALSE; } if (!childGetValue("check_script")) { filter &= ~(LLInventoryType::NIT_SCRIPT_LSL2); - filtered_by_all_types = FALSE; } if (!childGetValue("check_sound")) { filter &= ~(LLInventoryType::NIT_SOUND); - filtered_by_all_types = FALSE; } if (!childGetValue("check_texture")) { filter &= ~(LLInventoryType::NIT_TEXTURE); - filtered_by_all_types = FALSE; } if (!childGetValue("check_snapshot")) { filter &= ~(LLInventoryType::NIT_SNAPSHOT); - filtered_by_all_types = FALSE; } - if (!filtered_by_all_types) + if (filter != LLInventoryType::NIT_ALL) { // don't include folders in filter, unless I've selected everything filter &= ~(LLInventoryType::NIT_FOLDER); -- cgit v1.1 From 9101a9b28cca7fb9d44c5510f47de1e772564d38 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Thu, 15 Jan 2009 15:26:56 -0600 Subject: Fixed folders expanding when Show Filters is opened. --- linden/indra/newview/llfolderview.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'linden') diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp index 58d0c42..ba37fa4 100644 --- a/linden/indra/newview/llfolderview.cpp +++ b/linden/indra/newview/llfolderview.cpp @@ -4479,7 +4479,7 @@ LLInventoryFilter::LLInventoryFilter(const std::string& name) : mModified(FALSE), mNeedTextRebuild(TRUE) { - mFilterOps.mFilterTypes = 0xffffffff; + mFilterOps.mFilterTypes = LLInventoryType::NIT_ALL; mFilterOps.mMinDate = time_min(); mFilterOps.mMaxDate = time_max(); mFilterOps.mHoursAgo = 0; @@ -4552,7 +4552,7 @@ BOOL LLInventoryFilter::isNotDefault() BOOL LLInventoryFilter::isActive() { - return mFilterOps.mFilterTypes != 0xffffffff + return mFilterOps.mFilterTypes != LLInventoryType::NIT_ALL || mFilterSubString.size() || mFilterOps.mPermissions != PERM_NONE || mFilterOps.mMinDate != time_min() -- cgit v1.1 From a7ee24a9ed954a09632ebe9371a0c1783fee9dc3 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 16 Jan 2009 15:41:01 -0600 Subject: Use UI callbacks to initiate rebuilding filter. Instead of rebuilding from draw() every frame. --- linden/indra/newview/llinventoryview.cpp | 47 +++++++++++++++++++++++++++++++- linden/indra/newview/llinventoryview.h | 4 +++ 2 files changed, 50 insertions(+), 1 deletion(-) (limited to 'linden') diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp index 4576ff9..401d6e2 100644 --- a/linden/indra/newview/llinventoryview.cpp +++ b/linden/indra/newview/llinventoryview.cpp @@ -118,6 +118,21 @@ LLInventoryViewFinder::LLInventoryViewFinder(const std::string& name, LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml"); + + childSetCommitCallback("check_animation", onCheckFilterType, this); + childSetCommitCallback("check_bodypart", onCheckFilterType, this); + childSetCommitCallback("check_calling_card", onCheckFilterType, this); + childSetCommitCallback("check_clothing", onCheckFilterType, this); + childSetCommitCallback("check_gesture", onCheckFilterType, this); + childSetCommitCallback("check_landmark", onCheckFilterType, this); + childSetCommitCallback("check_notecard", onCheckFilterType, this); + childSetCommitCallback("check_object", onCheckFilterType, this); + childSetCommitCallback("check_script", onCheckFilterType, this); + childSetCommitCallback("check_sound", onCheckFilterType, this); + childSetCommitCallback("check_texture", onCheckFilterType, this); + childSetCommitCallback("check_snapshot", onCheckFilterType, this); + + childSetAction("All", selectAllTypes, this); childSetAction("None", selectNoTypes, this); @@ -127,6 +142,8 @@ LLInventoryViewFinder::LLInventoryViewFinder(const std::string& name, mSpinSinceDays = getChild("spin_days_ago"); childSetCommitCallback("spin_days_ago", onTimeAgo, this); + childSetCommitCallback("check_show_empty", onCheckShowEmptyFolders, this); + // mCheckSinceLogoff = getChild("check_since_logoff"); childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this); @@ -136,6 +153,16 @@ LLInventoryViewFinder::LLInventoryViewFinder(const std::string& name, } +// Callback when an inventory type checkbox is changed. +void LLInventoryViewFinder::onCheckFilterType(LLUICtrl *ctrl, void *user_data) +{ + LLInventoryViewFinder *self = (LLInventoryViewFinder *)user_data; + if (!self) return; + + self->rebuildFilter(); +} + + void LLInventoryViewFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data) { LLInventoryViewFinder *self = (LLInventoryViewFinder *)user_data; @@ -148,6 +175,8 @@ void LLInventoryViewFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data) { self->mSpinSinceHours->set(1.0f); } + + self->rebuildFilter(); } void LLInventoryViewFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data) @@ -161,8 +190,20 @@ void LLInventoryViewFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data) since_logoff = false; } self->childSetValue("check_since_logoff", since_logoff); + + self->rebuildFilter(); +} + + +void LLInventoryViewFinder::onCheckShowEmptyFolders(LLUICtrl *ctrl, void *user_data) +{ + LLInventoryViewFinder *self = (LLInventoryViewFinder *)user_data; + if (!self) return; + + self->rebuildFilter(); } + void LLInventoryViewFinder::changeFilter(LLInventoryFilter* filter) { mFilter = filter; @@ -203,7 +244,6 @@ void LLInventoryViewFinder::updateElementsFromFilter() void LLInventoryViewFinder::draw() { - rebuildFilter(); LLFloater::draw(); } @@ -362,6 +402,9 @@ void LLInventoryViewFinder::selectAllTypes(void* user_data) self->mCheckSound->set(TRUE); self->mCheckTexture->set(TRUE); self->mCheckSnapshot->set(TRUE);*/ + + self->rebuildFilter(); + } //static @@ -396,6 +439,8 @@ void LLInventoryViewFinder::selectNoTypes(void* user_data) self->childSetValue("check_sound", FALSE); self->childSetValue("check_texture", FALSE); self->childSetValue("check_snapshot", FALSE); + + self->rebuildFilter(); } diff --git a/linden/indra/newview/llinventoryview.h b/linden/indra/newview/llinventoryview.h index 26f3003..439f869 100644 --- a/linden/indra/newview/llinventoryview.h +++ b/linden/indra/newview/llinventoryview.h @@ -170,7 +170,11 @@ public: BOOL getCheckShowEmpty(); BOOL getCheckSinceLogoff(); + /** Callback when an inventory type checkbox is changed. */ + static void onCheckFilterType(LLUICtrl *ctrl, void *user_data); + static void onTimeAgo(LLUICtrl*, void *); + static void onCheckShowEmptyFolders(LLUICtrl*, void *); static void onCheckSinceLogoff(LLUICtrl*, void *); static void onCloseBtn(void* user_data); static void selectAllTypes(void* user_data); -- cgit v1.1 From 56a9a4932a6f10c0346b5ef6cac079b3485ab081 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 16 Jan 2009 15:51:58 -0600 Subject: Removed now-useless LLInventoryViewFinder::draw(). --- linden/indra/newview/llinventoryview.cpp | 5 ----- linden/indra/newview/llinventoryview.h | 1 - 2 files changed, 6 deletions(-) (limited to 'linden') diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp index 401d6e2..1118f54 100644 --- a/linden/indra/newview/llinventoryview.cpp +++ b/linden/indra/newview/llinventoryview.cpp @@ -242,11 +242,6 @@ void LLInventoryViewFinder::updateElementsFromFilter() mSpinSinceDays->set((F32)(hours / 24)); } -void LLInventoryViewFinder::draw() -{ - LLFloater::draw(); -} - void LLInventoryViewFinder::rebuildFilter() { U32 filter = LLInventoryType::NIT_ALL; diff --git a/linden/indra/newview/llinventoryview.h b/linden/indra/newview/llinventoryview.h index 439f869..c5c8532 100644 --- a/linden/indra/newview/llinventoryview.h +++ b/linden/indra/newview/llinventoryview.h @@ -162,7 +162,6 @@ public: LLInventoryViewFinder(const std::string& name, const LLRect& rect, LLInventoryView* inventory_view); - virtual void draw(); virtual void rebuildFilter(); virtual void onClose(bool app_quitting); void changeFilter(LLInventoryFilter* filter); -- cgit v1.1 From e4fd681d835380526e39d83073550072a745a202 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 16 Jan 2009 16:13:29 -0600 Subject: Removed some dead code in LLInventoryViewFinder. --- linden/indra/newview/llinventoryview.cpp | 27 --------------------------- 1 file changed, 27 deletions(-) (limited to 'linden') diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp index 1118f54..f7147b6 100644 --- a/linden/indra/newview/llinventoryview.cpp +++ b/linden/indra/newview/llinventoryview.cpp @@ -386,20 +386,7 @@ void LLInventoryViewFinder::selectAllTypes(void* user_data) self->childSetValue("check_texture", TRUE); self->childSetValue("check_snapshot", TRUE); -/* - self->mCheckCallingCard->set(TRUE); - self->mCheckClothing->set(TRUE); - self->mCheckGesture->set(TRUE); - self->mCheckLandmark->set(TRUE); - self->mCheckNotecard->set(TRUE); - self->mCheckObject->set(TRUE); - self->mCheckScript->set(TRUE); - self->mCheckSound->set(TRUE); - self->mCheckTexture->set(TRUE); - self->mCheckSnapshot->set(TRUE);*/ - self->rebuildFilter(); - } //static @@ -408,20 +395,6 @@ void LLInventoryViewFinder::selectNoTypes(void* user_data) LLInventoryViewFinder* self = (LLInventoryViewFinder*)user_data; if(!self) return; - /* - self->childSetValue("check_animation", FALSE); - self->mCheckCallingCard->set(FALSE); - self->mCheckClothing->set(FALSE); - self->mCheckGesture->set(FALSE); - self->mCheckLandmark->set(FALSE); - self->mCheckNotecard->set(FALSE); - self->mCheckObject->set(FALSE); - self->mCheckScript->set(FALSE); - self->mCheckSound->set(FALSE); - self->mCheckTexture->set(FALSE); - self->mCheckSnapshot->set(FALSE);*/ - - self->childSetValue("check_animation", FALSE); self->childSetValue("check_bodypart", FALSE); self->childSetValue("check_calling_card", FALSE); -- cgit v1.1 From a31ca3fa788c825ffdde55a6474ce50282e27d6c Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 16 Jan 2009 18:04:34 -0600 Subject: Cosmetic code cleanup in LLInventoryViewFinder. --- linden/indra/newview/llinventoryview.cpp | 55 ++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 17 deletions(-) (limited to 'linden') diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp index f7147b6..a265906 100644 --- a/linden/indra/newview/llinventoryview.cpp +++ b/linden/indra/newview/llinventoryview.cpp @@ -210,6 +210,7 @@ void LLInventoryViewFinder::changeFilter(LLInventoryFilter* filter) updateElementsFromFilter(); } + void LLInventoryViewFinder::updateElementsFromFilter() { if (!mFilter) @@ -221,27 +222,47 @@ void LLInventoryViewFinder::updateElementsFromFilter() LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState(); U32 hours = mFilter->getHoursAgo(); - // update the ui elements + // Update floater title LLFloater::setTitle(mFilter->getName()); - childSetValue("check_animation", (S32) (filter_types & LLInventoryType::NIT_ANIMATION)); - childSetValue("check_bodypart", (S32) (filter_types & LLInventoryType::NIT_BODYPART)); - childSetValue("check_calling_card", (S32) (filter_types & LLInventoryType::NIT_CALLCARD)); - childSetValue("check_clothing", (S32) (filter_types & LLInventoryType::NIT_CLOTHING)); - childSetValue("check_gesture", (S32) (filter_types & LLInventoryType::NIT_GESTURE)); - childSetValue("check_landmark", (S32) (filter_types & LLInventoryType::NIT_LANDMARK)); - childSetValue("check_notecard", (S32) (filter_types & LLInventoryType::NIT_NOTECARD)); - childSetValue("check_object", (S32) (filter_types & LLInventoryType::NIT_OBJECT)); - childSetValue("check_script", (S32) (filter_types & LLInventoryType::NIT_SCRIPT_LSL2)); - childSetValue("check_sound", (S32) (filter_types & LLInventoryType::NIT_SOUND)); - childSetValue("check_texture", (S32) (filter_types & LLInventoryType::NIT_TEXTURE)); - childSetValue("check_snapshot", (S32) (filter_types & LLInventoryType::NIT_SNAPSHOT)); - childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS); - childSetValue("check_since_logoff", mFilter->isSinceLogoff()); - mSpinSinceHours->set((F32)(hours % 24)); - mSpinSinceDays->set((F32)(hours / 24)); + // Update type check boxes + childSetValue("check_animation", + (S32)(filter_types & LLInventoryType::NIT_ANIMATION)); + childSetValue("check_bodypart", + (S32)(filter_types & LLInventoryType::NIT_BODYPART)); + childSetValue("check_calling_card", + (S32)(filter_types & LLInventoryType::NIT_CALLCARD)); + childSetValue("check_clothing", + (S32)(filter_types & LLInventoryType::NIT_CLOTHING)); + childSetValue("check_gesture", + (S32)(filter_types & LLInventoryType::NIT_GESTURE)); + childSetValue("check_landmark", + (S32)(filter_types & LLInventoryType::NIT_LANDMARK)); + childSetValue("check_notecard", + (S32)(filter_types & LLInventoryType::NIT_NOTECARD)); + childSetValue("check_object", + (S32)(filter_types & LLInventoryType::NIT_OBJECT)); + childSetValue("check_script", + (S32)(filter_types & LLInventoryType::NIT_SCRIPT_LSL2)); + childSetValue("check_sound", + (S32)(filter_types & LLInventoryType::NIT_SOUND)); + childSetValue("check_texture", + (S32)(filter_types & LLInventoryType::NIT_TEXTURE)); + childSetValue("check_snapshot", + (S32)(filter_types & LLInventoryType::NIT_SNAPSHOT)); + + // Update other check boxes + childSetValue("check_show_empty", + show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS); + childSetValue("check_since_logoff", + mFilter->isSinceLogoff()); + + // Update hours and days spinners + mSpinSinceHours->set( (F32)(hours % 24) ); + mSpinSinceDays->set( (F32)(hours / 24) ); } + void LLInventoryViewFinder::rebuildFilter() { U32 filter = LLInventoryType::NIT_ALL; -- cgit v1.1 From d21a17895b903032b3ea1a31b4298723a44b73a1 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Sun, 18 Jan 2009 15:21:34 -0600 Subject: LLFolderViewEventListener has type NIT_FOLDER. This fixes folders always showing when filtering. --- linden/indra/newview/llpanelinventory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'linden') diff --git a/linden/indra/newview/llpanelinventory.cpp b/linden/indra/newview/llpanelinventory.cpp index e41ecdc..7277f05 100644 --- a/linden/indra/newview/llpanelinventory.cpp +++ b/linden/indra/newview/llpanelinventory.cpp @@ -146,7 +146,7 @@ public: virtual BOOL isUpToDate() const { return TRUE; } virtual BOOL hasChildren() const { return FALSE; } virtual LLInventoryType::EType getInventoryType() const { return LLInventoryType::IT_NONE; } - virtual LLInventoryType::NType getNInventoryType() const { return LLInventoryType::NIT_NONE; } + virtual LLInventoryType::NType getNInventoryType() const { return LLInventoryType::NIT_FOLDER; } // LLDragAndDropBridge functionality virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const; virtual BOOL dragOrDrop(MASK mask, BOOL drop, -- cgit v1.1