summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelpeople.cpp
AgeCommit message (Collapse)Author
2024-06-10Merge branch 'release/luau-scripting' into lua-ui-callbacksMnikolenko Productengine
2024-06-10Remove SharedCommitCallbackRegistry; add helpers CommitRegistrarHelper and ↵Mnikolenko Productengine
ScopedRegistrarHelper
2024-05-15Manual whitespace cleanup (fix_whitespace.py).Nat Goodspeed
2024-05-03Not every LLAvatarListUpdater subclass overrides tick().Nat Goodspeed
LLAvatarListUpdater is an LLEventTimer subclass meant to be a base class of still other subclasses. One would presume that every one of them should override tick(), since LLAvatarListUpdater::tick() is a no-op that simply asks to be called again. But making it abstract (=0) produces errors since at least one subclass does not define its own tick() method. This seems less than useful, since the specific tick() method is the whole point of deriving from LLEventTimer, but oh well.
2024-05-03Make LLLater store target time in mHandles; ditch 2nd unordered_map.Nat Goodspeed
Instead of maintaining a whole separate unordered_map to look up target times, make room in the HandleMap entry for the target time. There's still circularity, but the split into doAtTime1() and doAtTime2() resolves it: since doAtTime2() accepts the mHandles iterator created by doAtTime1(), doAtTime2() can simply store the new mQueue handle_type into the appropriate slot. Also sprinkle in a few more override keywords for consistency.
2024-05-02Introduce LLLater::getRemaining(handle).Nat Goodspeed
Some timer use cases need to know not only whether the timer is active, but how much time remains before it (next) fires. Introduce LLLater::mDoneTimes to track, for each handle, the timestamp at which it's expected to fire. We can't just look up the target timestamp in mQueue's func_at entry because there's no documented way to navigate from a handle_type to a node iterator or pointer. Nor can we store it in mHandles because of order dependency: we need the mDoneTimes iterator so we can bind it into the Periodic functor for doPeriodically(), but we need the mQueue handle to store in mHandles. If we could find the mQueue node from the new handle, we could update the func_at entry after emplace() -- but if we could find the mQueue node from a handle, we wouldn't need to store the target timestamp separately anyway. Split LLLater::doAtTime() into internal doAtTime1() and doAtTime2(): the first creates an mDoneTimes entry and returns an iterator, the second finishes creating new mQueue and mHandles entries based on that mDoneTimes entry. This lets doPeriodically()'s Periodic bind the mDoneTimes iterator. Then instead of continually incrementing an internal data member, it increments the mDoneTimes entry to set the next upcoming timestamp. That lets getRemaining() report the next upcoming timestamp rather than only the original one. Add LLEventTimer::isRunning() and getRemaining(), forwarding to its LLLater handle. Fix various LLEventTimer subclass references to mEventTimer.stop(), etc. Fix non-inline LLEventTimer subclass tick() overrides for bool, not BOOL. Remove LLAppViewer::idle() call to LLEventTimer::updateClass(). Since LLApp::stepFrame() already calls LLCallbackList::callFunctions(), assume we've already handled that every tick.
2024-05-02WIP: In llcallbacklist.h, add singleton LLLater for time delays.Nat Goodspeed
The big idea is to reduce the number of per-tick callbacks asking, "Is it time yet? Is it time yet?" We do that for LLEventTimer and LLEventTimeout. LLLater presents doAtTime(LLDate), with doAfterInterval() and doPeriodically() methods implemented using doAtTime(). All return handles. The free functions doAfterInterval() and doPeriodically() now forward to the corresponding LLLater methods. LLLater also presents isRunning(handle) and cancel(handle). LLLater borrows the tactic of LLEventTimer: while there's at least one running timer, it registers an LLCallbackList tick() callback to service ready timers. But instead of looping over all of them asking, "Are you ready?" it keeps them in a priority queue ordered by desired timestamp, and only touches those whose timestamp has been reached. Also, it honors a maximum time slice: once the ready timers have run for longer than the limit, it defers processing other ready timers to the next tick() call. The intent is to consume fewer cycles per tick() call, both by the management machinery and the timers themselves. Revamp LLCallbackList to accept C++ callables in addition to (classic C function pointer, void*) pairs. Make addFunction() return a handle (different than LLLater handles) that can be passed to a new deleteFunction() overload, since std::function instances can't be compared for equality. In fact, implement LLCallbackList using boost::signals2::signal, which provides almost exactly what we want. LLCallbackList continues to accept (function pointer, void*) pairs, but now we store a lambda that calls the function pointer with that void*. It takes less horsing around to create a C++ callable from a (function pointer, void*) pair than the other way around. For containsFunction() and deleteFunction(), such pairs are the keys for a lookup table whose values are handles. Instead of having a static global LLCallbackList gIdleCallbacks, make LLCallbackList an LLSingleton to guarantee initialization. For backwards compatibility, gIdleCallbacks is now a macro for LLCallbackList::instance(). Move doOnIdleOneTime() and doOnIdleRepeating() functions to LLCallbackList methods, but for backwards compatibility continue providing free functions. Reimplement LLEventTimer using LLLater::doPeriodically(). One implication is that LLEventTimer need no longer be derived from LLInstanceTracker, which we used to iterate over all instances every tick. Give it start() and stop() methods, since some subclasses (e.g. LLFlashTimer) used to call its member LLTimer's start() and stop(). Remove updateClass(): LLCallbackList::callFunctions() now takes care of that. Remove LLToastLifeTimer::start() and stop(), since LLEventTimer now provides those. Remove getRemainingTimeF32(), since LLLater does not (yet) provide that feature. While at it, make LLEventTimer::tick() return bool instead of BOOL, and change existing overrides. Make LLApp::stepFrame() call LLCallbackList::callFunctions() instead of LLEventTimer::updateClass(). We could have refactored LLEventTimer to use the mechanism now built into LLLater, but frankly the LLEventTimer API is rather clumsy. You MUST derive a subclass and override tick(), and you must instantiate your subclass on the heap because, when your tick() override returns false, LLEventTimer deletes its subclass instance. The LLLater API is simpler to use, and LLEventTimer is much simplified by using it. Merge lleventfilter.h's LLEventTimeoutBase into LLEventTimeout, and likewise merge LLEventThrottleBase into LLEventThrottle. The separation was for testability, but now that they're no longer based on LLTimer, it becomes harder to use dummy time for testing. Temporarily skip tests based on LLEventTimeoutBase and LLEventThrottleBase. Instead of listening for LLEventPump("mainloop") ticks and using LLTimer, LLEventTimeout now uses LLLater::doAfterInterval(). Instead of LLTimer and LLEventTimeout, LLEventThrottle likewise now uses LLLater::doAfterInterval(). Recast a couple local LLEventTimeout pre-lambda callable classes with lambdas. Dignify F64 with a new typedef LLDate::timestamp. LLDate heavily depends on that as its base time representation, but there are those who question use of floating-point for time. This is a step towards insulating us from any future change.
2024-04-29#824 Process source files in bulk: replace tabs with spaces, convert CRLF to ↵Andrey Lihatskiy
LF, and trim trailing whitespaces as needed
2023-02-17SL-19204 Crash at removeObserverAndrey Kleshchev
A lot of reports about crashes in voice's removeObserver with no indication of the cause, all MAC specific. By this point terminate should have been called and mVoiceModule should be null, yet callstaks suggest it isn't. Commit clears LLVoiceClient beforehand to avoid the issue entirely, but issue lies elsewhere and 'voice' crash is just a symptom.
2022-05-06SL-17356 Viewer changes for Premium Plus supportAndrey Lihatskiy
2021-03-05SL-14931 Change messaging on empty lists in People floaterMnikolenko Productengine
2019-11-26SL-12100, SL-12317 - benefits handling fixesBrad Payne (Vir Linden)
2019-11-22SL-12317 UI Changes to Group limitsmaxim_productengine
2019-11-20SL-10499 - handle package info from benefits serviceBrad Payne (Vir Linden)
2019-11-15SL-10499 - benefits. Removed no-longer-needed lleconomy files and classes. ↵Brad Payne (Vir Linden)
Group-related costs and limits via benefits.
2019-11-14SL-10499, SL-10497 - use LLAgentBenefits infoBrad Payne (Vir Linden)
2019-04-26Merged in lindenlab/viewer-bearAndreyL ProductEngine
2019-04-26SL-10400 - more on group limits from SimulatorFeaturesBrad Payne (Vir Linden)
2019-04-25SL-10400 - get group limits from SimulatorFeaturesBrad Payne (Vir Linden)
2019-04-24SL-10994 Removed Facebook In-world SharingAndreyL ProductEngine
SL-11024 Fixed Twitter connect failure
2018-08-23MAINT-8997 Add "Sort by recent arrival" to viewer People / Nearby map and listmaxim_productengine
2018-04-20MAINT-8540 Eliminated a lot of xui related log warnings on startup and ↵andreykproductengine
opening preferences
2017-04-25MAINT-7349 FIXED An item is not highlighted in Block panel after blocking itMnikolenko Productengine
2016-05-19Merged in lindenlab/viewer-releaseAndreyL ProductEngine
2016-05-04MAINT-6220 enable searching of the friend list with the classic username of ↵Mnikolenko Productengine
the avatar.
2016-01-15merge changes for 4.0.1-releaseOz Linden
2015-11-19MAINT-5297 Backed out changeset: dd9e3cbf10e5AndreyL ProductEngine
2015-11-10remove execute permission from many files that should not have itOz Linden
2015-10-28MAINT-5762 FIXED Groups - Message about number of groups you can join does ↵Mnikolenko ProductEngine
not recognize that your account is premium
2015-09-02MAINT-5297 Allow global toggle of 'View People Icons' - Global switch partAndreyL ProductEngine
--HG-- branch : develop
2015-05-28MAINT-5227 FIXED Changing premium access of an account with > 42 groups back ↵andreykproductengine
to basic account shows negative number of groups that they can join
2014-05-06Pull merge from lindenlab/viewer-release. Fixed some conflicts and compile ↵Merov Linden
errors
2014-03-12merge with releaseRichard Linden
2014-03-10Pull merge from lindenlab/viewer-releaseMerov Linden
2014-02-21Added Friends tab to Facebook floater for ACME-1325Cho
2014-02-05MAINT-3555 crash in LLPanel::~LLPanel() on shutdown:maksymsproductengine
- memory leaks fixing;
2013-11-06merge with releaseRichard Linden
2013-09-09merge with viewer-releaseRichard Linden
2013-08-28merging viewer releaseGilbert Gonzales
2013-08-09ACME 824: Suggested Friends do not repopulate if you disconnect and ↵Gilbert Gonzales
reconnect to Facebook API in same viewer session
2013-08-09second phase summer cleaningRichard Linden
replace llinfos, lldebugs, etc with new LL_INFOS(), LL_DEBUGS(), etc.
2013-08-06ACME-801: Adding a suggested friend as a friend does not remove them from ↵Gilbert Gonzales
the suggested friend list
2013-07-24ACME-602 Remove logging code that reveals use of suggested friendsGilbert Gonzales
2013-07-04Replaced content change callback with an event in LLFacebookConnect for ↵Cho
ACME-648 (more or less)
2013-07-03Implemented events for LLFacebookConnect state changes for ACME-662Cho
2013-07-02removed remaining FBC test stuff from llpanelpeople.cpp for ACME-661Cho
2013-07-02added callback to LLFacebookConnect upon connect for ACME-659Cho
2013-06-28ACME-638: Removing the personfolderview, personmodelcommon and ↵Gilbert Gonzales
persontabview. Also removing FBC Test Two tab from the 'People' panel.
2013-06-28ACME-638: Removed LLSocialList class and FBC Test tab in the People panel.Gilbert Gonzales
2013-06-28made it optional to autoconnect in ↵Cho
LLFacebookConnect::getConnectionToFacebook() for ACME-648