Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm
commit
57e8cd490f
|
|
@ -0,0 +1,78 @@
|
||||||
|
llappearance:
|
||||||
|
- indra/llappearance/**/*
|
||||||
|
|
||||||
|
llaudio:
|
||||||
|
- indra/llaudio/**/*
|
||||||
|
|
||||||
|
llcharacter:
|
||||||
|
- indra/llcharacter/**/*
|
||||||
|
|
||||||
|
llcommon:
|
||||||
|
- indra/llcommon/**/*
|
||||||
|
|
||||||
|
llcorehttp:
|
||||||
|
- indra/llcorehttp/**/*
|
||||||
|
|
||||||
|
llcrashlogger:
|
||||||
|
- indra/llcrashlogger/**/*
|
||||||
|
|
||||||
|
llfilesystem:
|
||||||
|
- indra/llfilesystem/**/*
|
||||||
|
|
||||||
|
llimage:
|
||||||
|
- indra/llimage/**/*
|
||||||
|
|
||||||
|
llimagej2coj:
|
||||||
|
- indra/llimagej2coj/**/*
|
||||||
|
|
||||||
|
llinventory:
|
||||||
|
- indra/llinventory/**/*
|
||||||
|
|
||||||
|
llkdu:
|
||||||
|
- indra/llkdu/**/*
|
||||||
|
|
||||||
|
llmath:
|
||||||
|
- indra/llmath/**/*
|
||||||
|
|
||||||
|
llmeshoptimizer:
|
||||||
|
- indra/llmeshoptimizer/**/*
|
||||||
|
|
||||||
|
llmessage:
|
||||||
|
- indra/llmessage/**/*
|
||||||
|
|
||||||
|
llplugin:
|
||||||
|
- indra/llplugin/**/*
|
||||||
|
|
||||||
|
llprimitive:
|
||||||
|
- indra/llprimitive/**/*
|
||||||
|
|
||||||
|
llrender:
|
||||||
|
- indra/llrender/**/*
|
||||||
|
|
||||||
|
llui:
|
||||||
|
- indra/llui/**/*
|
||||||
|
|
||||||
|
llwindow:
|
||||||
|
- indra/llwindow/**/*
|
||||||
|
|
||||||
|
llxml:
|
||||||
|
- indra/llxml/**/*
|
||||||
|
|
||||||
|
cmake:
|
||||||
|
- '**/*.cmake'
|
||||||
|
- '**/*/cmake/*'
|
||||||
|
- '**/CMakeLists.txt'
|
||||||
|
|
||||||
|
python:
|
||||||
|
- '**/*.py'
|
||||||
|
|
||||||
|
c/cpp:
|
||||||
|
- '**/*.c'
|
||||||
|
- '**/*.cpp'
|
||||||
|
- '**/*.cxx'
|
||||||
|
- '**/*.h'
|
||||||
|
- '**/*.hpp'
|
||||||
|
- '**/*.hxx'
|
||||||
|
- '**/*.i'
|
||||||
|
- '**/*.inl'
|
||||||
|
- '**/*.y'
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
name: Check CLA
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened, closed, synchronize]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cla:
|
||||||
|
name: Check CLA
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: CLA Assistant
|
||||||
|
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
|
||||||
|
uses: secondlife-3p/contributor-assistant@v2
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
PERSONAL_ACCESS_TOKEN: ${{ secrets.SHARED_CLA_TOKEN }}
|
||||||
|
with:
|
||||||
|
branch: main
|
||||||
|
path-to-document: https://github.com/secondlife/cla/blob/master/CLA.md
|
||||||
|
path-to-signatures: signatures.json
|
||||||
|
remote-organization-name: secondlife
|
||||||
|
remote-repository-name: cla-signatures
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
name: Pull Request Labeler
|
||||||
|
on:
|
||||||
|
- pull_request_target
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
triage:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/labeler@v4
|
||||||
|
with:
|
||||||
|
configuration-path: .github/labeler.yaml
|
||||||
|
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
|
@ -113,3 +113,4 @@ indra/tracy
|
||||||
firestorm.code-workspace
|
firestorm.code-workspace
|
||||||
|
|
||||||
.cache/clangd/index/
|
.cache/clangd/index/
|
||||||
|
*-compiled.glsl
|
||||||
|
|
|
||||||
|
|
@ -3445,7 +3445,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
||||||
<key>package_description</key>
|
<key>package_description</key>
|
||||||
<map>
|
<map>
|
||||||
<key>canonical_repo</key>
|
<key>canonical_repo</key>
|
||||||
<string>https://bitbucket.org/lindenlab/viewer</string>
|
<string>https://github.com/secondlife/viewer</string>
|
||||||
<key>copyright</key>
|
<key>copyright</key>
|
||||||
<string>Copyright (c) 2022, The Phoenix Firestorm Project, Inc.</string>
|
<string>Copyright (c) 2022, The Phoenix Firestorm Project, Inc.</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,502 @@
|
||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
Version 2.1, February 1999
|
||||||
|
|
||||||
|
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
[This is the first released version of the Lesser GPL. It also counts
|
||||||
|
as the successor of the GNU Library Public License, version 2, hence
|
||||||
|
the version number 2.1.]
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
Licenses are intended to guarantee your freedom to share and change
|
||||||
|
free software--to make sure the software is free for all its users.
|
||||||
|
|
||||||
|
This license, the Lesser General Public License, applies to some
|
||||||
|
specially designated software packages--typically libraries--of the
|
||||||
|
Free Software Foundation and other authors who decide to use it. You
|
||||||
|
can use it too, but we suggest you first think carefully about whether
|
||||||
|
this license or the ordinary General Public License is the better
|
||||||
|
strategy to use in any particular case, based on the explanations below.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom of use,
|
||||||
|
not price. Our General Public Licenses are designed to make sure that
|
||||||
|
you have the freedom to distribute copies of free software (and charge
|
||||||
|
for this service if you wish); that you receive source code or can get
|
||||||
|
it if you want it; that you can change the software and use pieces of
|
||||||
|
it in new free programs; and that you are informed that you can do
|
||||||
|
these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
distributors to deny you these rights or to ask you to surrender these
|
||||||
|
rights. These restrictions translate to certain responsibilities for
|
||||||
|
you if you distribute copies of the library or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of the library, whether gratis
|
||||||
|
or for a fee, you must give the recipients all the rights that we gave
|
||||||
|
you. You must make sure that they, too, receive or can get the source
|
||||||
|
code. If you link other code with the library, you must provide
|
||||||
|
complete object files to the recipients, so that they can relink them
|
||||||
|
with the library after making changes to the library and recompiling
|
||||||
|
it. And you must show them these terms so they know their rights.
|
||||||
|
|
||||||
|
We protect your rights with a two-step method: (1) we copyright the
|
||||||
|
library, and (2) we offer you this license, which gives you legal
|
||||||
|
permission to copy, distribute and/or modify the library.
|
||||||
|
|
||||||
|
To protect each distributor, we want to make it very clear that
|
||||||
|
there is no warranty for the free library. Also, if the library is
|
||||||
|
modified by someone else and passed on, the recipients should know
|
||||||
|
that what they have is not the original version, so that the original
|
||||||
|
author's reputation will not be affected by problems that might be
|
||||||
|
introduced by others.
|
||||||
|
|
||||||
|
Finally, software patents pose a constant threat to the existence of
|
||||||
|
any free program. We wish to make sure that a company cannot
|
||||||
|
effectively restrict the users of a free program by obtaining a
|
||||||
|
restrictive license from a patent holder. Therefore, we insist that
|
||||||
|
any patent license obtained for a version of the library must be
|
||||||
|
consistent with the full freedom of use specified in this license.
|
||||||
|
|
||||||
|
Most GNU software, including some libraries, is covered by the
|
||||||
|
ordinary GNU General Public License. This license, the GNU Lesser
|
||||||
|
General Public License, applies to certain designated libraries, and
|
||||||
|
is quite different from the ordinary General Public License. We use
|
||||||
|
this license for certain libraries in order to permit linking those
|
||||||
|
libraries into non-free programs.
|
||||||
|
|
||||||
|
When a program is linked with a library, whether statically or using
|
||||||
|
a shared library, the combination of the two is legally speaking a
|
||||||
|
combined work, a derivative of the original library. The ordinary
|
||||||
|
General Public License therefore permits such linking only if the
|
||||||
|
entire combination fits its criteria of freedom. The Lesser General
|
||||||
|
Public License permits more lax criteria for linking other code with
|
||||||
|
the library.
|
||||||
|
|
||||||
|
We call this license the "Lesser" General Public License because it
|
||||||
|
does Less to protect the user's freedom than the ordinary General
|
||||||
|
Public License. It also provides other free software developers Less
|
||||||
|
of an advantage over competing non-free programs. These disadvantages
|
||||||
|
are the reason we use the ordinary General Public License for many
|
||||||
|
libraries. However, the Lesser license provides advantages in certain
|
||||||
|
special circumstances.
|
||||||
|
|
||||||
|
For example, on rare occasions, there may be a special need to
|
||||||
|
encourage the widest possible use of a certain library, so that it becomes
|
||||||
|
a de-facto standard. To achieve this, non-free programs must be
|
||||||
|
allowed to use the library. A more frequent case is that a free
|
||||||
|
library does the same job as widely used non-free libraries. In this
|
||||||
|
case, there is little to gain by limiting the free library to free
|
||||||
|
software only, so we use the Lesser General Public License.
|
||||||
|
|
||||||
|
In other cases, permission to use a particular library in non-free
|
||||||
|
programs enables a greater number of people to use a large body of
|
||||||
|
free software. For example, permission to use the GNU C Library in
|
||||||
|
non-free programs enables many more people to use the whole GNU
|
||||||
|
operating system, as well as its variant, the GNU/Linux operating
|
||||||
|
system.
|
||||||
|
|
||||||
|
Although the Lesser General Public License is Less protective of the
|
||||||
|
users' freedom, it does ensure that the user of a program that is
|
||||||
|
linked with the Library has the freedom and the wherewithal to run
|
||||||
|
that program using a modified version of the Library.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow. Pay close attention to the difference between a
|
||||||
|
"work based on the library" and a "work that uses the library". The
|
||||||
|
former contains code derived from the library, whereas the latter must
|
||||||
|
be combined with the library in order to run.
|
||||||
|
|
||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License Agreement applies to any software library or other
|
||||||
|
program which contains a notice placed by the copyright holder or
|
||||||
|
other authorized party saying it may be distributed under the terms of
|
||||||
|
this Lesser General Public License (also called "this License").
|
||||||
|
Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
A "library" means a collection of software functions and/or data
|
||||||
|
prepared so as to be conveniently linked with application programs
|
||||||
|
(which use some of those functions and data) to form executables.
|
||||||
|
|
||||||
|
The "Library", below, refers to any such software library or work
|
||||||
|
which has been distributed under these terms. A "work based on the
|
||||||
|
Library" means either the Library or any derivative work under
|
||||||
|
copyright law: that is to say, a work containing the Library or a
|
||||||
|
portion of it, either verbatim or with modifications and/or translated
|
||||||
|
straightforwardly into another language. (Hereinafter, translation is
|
||||||
|
included without limitation in the term "modification".)
|
||||||
|
|
||||||
|
"Source code" for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For a library, complete source code means
|
||||||
|
all the source code for all modules it contains, plus any associated
|
||||||
|
interface definition files, plus the scripts used to control compilation
|
||||||
|
and installation of the library.
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running a program using the Library is not restricted, and output from
|
||||||
|
such a program is covered only if its contents constitute a work based
|
||||||
|
on the Library (independent of the use of the Library in a tool for
|
||||||
|
writing it). Whether that is true depends on what the Library does
|
||||||
|
and what the program that uses the Library does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Library's
|
||||||
|
complete source code as you receive it, in any medium, provided that
|
||||||
|
you conspicuously and appropriately publish on each copy an
|
||||||
|
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||||
|
all the notices that refer to this License and to the absence of any
|
||||||
|
warranty; and distribute a copy of this License along with the
|
||||||
|
Library.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy,
|
||||||
|
and you may at your option offer warranty protection in exchange for a
|
||||||
|
fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Library or any portion
|
||||||
|
of it, thus forming a work based on the Library, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The modified work must itself be a software library.
|
||||||
|
|
||||||
|
b) You must cause the files modified to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
c) You must cause the whole of the work to be licensed at no
|
||||||
|
charge to all third parties under the terms of this License.
|
||||||
|
|
||||||
|
d) If a facility in the modified Library refers to a function or a
|
||||||
|
table of data to be supplied by an application program that uses
|
||||||
|
the facility, other than as an argument passed when the facility
|
||||||
|
is invoked, then you must make a good faith effort to ensure that,
|
||||||
|
in the event an application does not supply such function or
|
||||||
|
table, the facility still operates, and performs whatever part of
|
||||||
|
its purpose remains meaningful.
|
||||||
|
|
||||||
|
(For example, a function in a library to compute square roots has
|
||||||
|
a purpose that is entirely well-defined independent of the
|
||||||
|
application. Therefore, Subsection 2d requires that any
|
||||||
|
application-supplied function or table used by this function must
|
||||||
|
be optional: if the application does not supply it, the square
|
||||||
|
root function must still compute square roots.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Library,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Library, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote
|
||||||
|
it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Library.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Library
|
||||||
|
with the Library (or with a work based on the Library) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||||
|
License instead of this License to a given copy of the Library. To do
|
||||||
|
this, you must alter all the notices that refer to this License, so
|
||||||
|
that they refer to the ordinary GNU General Public License, version 2,
|
||||||
|
instead of to this License. (If a newer version than version 2 of the
|
||||||
|
ordinary GNU General Public License has appeared, then you can specify
|
||||||
|
that version instead if you wish.) Do not make any other change in
|
||||||
|
these notices.
|
||||||
|
|
||||||
|
Once this change is made in a given copy, it is irreversible for
|
||||||
|
that copy, so the ordinary GNU General Public License applies to all
|
||||||
|
subsequent copies and derivative works made from that copy.
|
||||||
|
|
||||||
|
This option is useful when you wish to copy part of the code of
|
||||||
|
the Library into a program that is not a library.
|
||||||
|
|
||||||
|
4. You may copy and distribute the Library (or a portion or
|
||||||
|
derivative of it, under Section 2) in object code or executable form
|
||||||
|
under the terms of Sections 1 and 2 above provided that you accompany
|
||||||
|
it with the complete corresponding machine-readable source code, which
|
||||||
|
must be distributed under the terms of Sections 1 and 2 above on a
|
||||||
|
medium customarily used for software interchange.
|
||||||
|
|
||||||
|
If distribution of object code is made by offering access to copy
|
||||||
|
from a designated place, then offering equivalent access to copy the
|
||||||
|
source code from the same place satisfies the requirement to
|
||||||
|
distribute the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
5. A program that contains no derivative of any portion of the
|
||||||
|
Library, but is designed to work with the Library by being compiled or
|
||||||
|
linked with it, is called a "work that uses the Library". Such a
|
||||||
|
work, in isolation, is not a derivative work of the Library, and
|
||||||
|
therefore falls outside the scope of this License.
|
||||||
|
|
||||||
|
However, linking a "work that uses the Library" with the Library
|
||||||
|
creates an executable that is a derivative of the Library (because it
|
||||||
|
contains portions of the Library), rather than a "work that uses the
|
||||||
|
library". The executable is therefore covered by this License.
|
||||||
|
Section 6 states terms for distribution of such executables.
|
||||||
|
|
||||||
|
When a "work that uses the Library" uses material from a header file
|
||||||
|
that is part of the Library, the object code for the work may be a
|
||||||
|
derivative work of the Library even though the source code is not.
|
||||||
|
Whether this is true is especially significant if the work can be
|
||||||
|
linked without the Library, or if the work is itself a library. The
|
||||||
|
threshold for this to be true is not precisely defined by law.
|
||||||
|
|
||||||
|
If such an object file uses only numerical parameters, data
|
||||||
|
structure layouts and accessors, and small macros and small inline
|
||||||
|
functions (ten lines or less in length), then the use of the object
|
||||||
|
file is unrestricted, regardless of whether it is legally a derivative
|
||||||
|
work. (Executables containing this object code plus portions of the
|
||||||
|
Library will still fall under Section 6.)
|
||||||
|
|
||||||
|
Otherwise, if the work is a derivative of the Library, you may
|
||||||
|
distribute the object code for the work under the terms of Section 6.
|
||||||
|
Any executables containing that work also fall under Section 6,
|
||||||
|
whether or not they are linked directly with the Library itself.
|
||||||
|
|
||||||
|
6. As an exception to the Sections above, you may also combine or
|
||||||
|
link a "work that uses the Library" with the Library to produce a
|
||||||
|
work containing portions of the Library, and distribute that work
|
||||||
|
under terms of your choice, provided that the terms permit
|
||||||
|
modification of the work for the customer's own use and reverse
|
||||||
|
engineering for debugging such modifications.
|
||||||
|
|
||||||
|
You must give prominent notice with each copy of the work that the
|
||||||
|
Library is used in it and that the Library and its use are covered by
|
||||||
|
this License. You must supply a copy of this License. If the work
|
||||||
|
during execution displays copyright notices, you must include the
|
||||||
|
copyright notice for the Library among them, as well as a reference
|
||||||
|
directing the user to the copy of this License. Also, you must do one
|
||||||
|
of these things:
|
||||||
|
|
||||||
|
a) Accompany the work with the complete corresponding
|
||||||
|
machine-readable source code for the Library including whatever
|
||||||
|
changes were used in the work (which must be distributed under
|
||||||
|
Sections 1 and 2 above); and, if the work is an executable linked
|
||||||
|
with the Library, with the complete machine-readable "work that
|
||||||
|
uses the Library", as object code and/or source code, so that the
|
||||||
|
user can modify the Library and then relink to produce a modified
|
||||||
|
executable containing the modified Library. (It is understood
|
||||||
|
that the user who changes the contents of definitions files in the
|
||||||
|
Library will not necessarily be able to recompile the application
|
||||||
|
to use the modified definitions.)
|
||||||
|
|
||||||
|
b) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (1) uses at run time a
|
||||||
|
copy of the library already present on the user's computer system,
|
||||||
|
rather than copying library functions into the executable, and (2)
|
||||||
|
will operate properly with a modified version of the library, if
|
||||||
|
the user installs one, as long as the modified version is
|
||||||
|
interface-compatible with the version that the work was made with.
|
||||||
|
|
||||||
|
c) Accompany the work with a written offer, valid for at
|
||||||
|
least three years, to give the same user the materials
|
||||||
|
specified in Subsection 6a, above, for a charge no more
|
||||||
|
than the cost of performing this distribution.
|
||||||
|
|
||||||
|
d) If distribution of the work is made by offering access to copy
|
||||||
|
from a designated place, offer equivalent access to copy the above
|
||||||
|
specified materials from the same place.
|
||||||
|
|
||||||
|
e) Verify that the user has already received a copy of these
|
||||||
|
materials or that you have already sent this user a copy.
|
||||||
|
|
||||||
|
For an executable, the required form of the "work that uses the
|
||||||
|
Library" must include any data and utility programs needed for
|
||||||
|
reproducing the executable from it. However, as a special exception,
|
||||||
|
the materials to be distributed need not include anything that is
|
||||||
|
normally distributed (in either source or binary form) with the major
|
||||||
|
components (compiler, kernel, and so on) of the operating system on
|
||||||
|
which the executable runs, unless that component itself accompanies
|
||||||
|
the executable.
|
||||||
|
|
||||||
|
It may happen that this requirement contradicts the license
|
||||||
|
restrictions of other proprietary libraries that do not normally
|
||||||
|
accompany the operating system. Such a contradiction means you cannot
|
||||||
|
use both them and the Library together in an executable that you
|
||||||
|
distribute.
|
||||||
|
|
||||||
|
7. You may place library facilities that are a work based on the
|
||||||
|
Library side-by-side in a single library together with other library
|
||||||
|
facilities not covered by this License, and distribute such a combined
|
||||||
|
library, provided that the separate distribution of the work based on
|
||||||
|
the Library and of the other library facilities is otherwise
|
||||||
|
permitted, and provided that you do these two things:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work
|
||||||
|
based on the Library, uncombined with any other library
|
||||||
|
facilities. This must be distributed under the terms of the
|
||||||
|
Sections above.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library of the fact
|
||||||
|
that part of it is a work based on the Library, and explaining
|
||||||
|
where to find the accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
8. You may not copy, modify, sublicense, link with, or distribute
|
||||||
|
the Library except as expressly provided under this License. Any
|
||||||
|
attempt otherwise to copy, modify, sublicense, link with, or
|
||||||
|
distribute the Library is void, and will automatically terminate your
|
||||||
|
rights under this License. However, parties who have received copies,
|
||||||
|
or rights, from you under this License will not have their licenses
|
||||||
|
terminated so long as such parties remain in full compliance.
|
||||||
|
|
||||||
|
9. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Library or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Library (or any work based on the
|
||||||
|
Library), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Library or works based on it.
|
||||||
|
|
||||||
|
10. Each time you redistribute the Library (or any work based on the
|
||||||
|
Library), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute, link with or modify the Library
|
||||||
|
subject to these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties with
|
||||||
|
this License.
|
||||||
|
|
||||||
|
11. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Library at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Library by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Library.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under any
|
||||||
|
particular circumstance, the balance of the section is intended to apply,
|
||||||
|
and the section as a whole is intended to apply in other circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
12. If the distribution and/or use of the Library is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Library under this License may add
|
||||||
|
an explicit geographical distribution limitation excluding those countries,
|
||||||
|
so that distribution is permitted only in or among countries not thus
|
||||||
|
excluded. In such case, this License incorporates the limitation as if
|
||||||
|
written in the body of this License.
|
||||||
|
|
||||||
|
13. The Free Software Foundation may publish revised and/or new
|
||||||
|
versions of the Lesser General Public License from time to time.
|
||||||
|
Such new versions will be similar in spirit to the present version,
|
||||||
|
but may differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Library
|
||||||
|
specifies a version number of this License which applies to it and
|
||||||
|
"any later version", you have the option of following the terms and
|
||||||
|
conditions either of that version or of any later version published by
|
||||||
|
the Free Software Foundation. If the Library does not specify a
|
||||||
|
license version number, you may choose any version ever published by
|
||||||
|
the Free Software Foundation.
|
||||||
|
|
||||||
|
14. If you wish to incorporate parts of the Library into other free
|
||||||
|
programs whose distribution conditions are incompatible with these,
|
||||||
|
write to the author to ask for permission. For software which is
|
||||||
|
copyrighted by the Free Software Foundation, write to the Free
|
||||||
|
Software Foundation; we sometimes make exceptions for this. Our
|
||||||
|
decision will be guided by the two goals of preserving the free status
|
||||||
|
of all derivatives of our free software and of promoting the sharing
|
||||||
|
and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||||
|
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||||
|
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||||
|
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||||
|
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||||
|
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||||
|
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||||
|
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||||
|
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||||
|
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||||
|
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||||
|
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||||
|
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||||
|
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||||
|
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Libraries
|
||||||
|
|
||||||
|
If you develop a new library, and you want it to be of the greatest
|
||||||
|
possible use to the public, we recommend making it free software that
|
||||||
|
everyone can redistribute and change. You can do so by permitting
|
||||||
|
redistribution under these terms (or, alternatively, under the terms of the
|
||||||
|
ordinary General Public License).
|
||||||
|
|
||||||
|
To apply these terms, attach the following notices to the library. It is
|
||||||
|
safest to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least the
|
||||||
|
"copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the library's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
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; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||||
|
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1990
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
That's all there is to it!
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
|
|
@ -63,7 +63,7 @@ if (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)
|
||||||
set(INSTALL_PROPRIETARY ON CACHE BOOL "Install proprietary binaries")
|
set(INSTALL_PROPRIETARY ON CACHE BOOL "Install proprietary binaries")
|
||||||
endif (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)
|
endif (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)
|
||||||
set(TEMPLATE_VERIFIER_OPTIONS "" CACHE STRING "Options for scripts/template_verifier.py")
|
set(TEMPLATE_VERIFIER_OPTIONS "" CACHE STRING "Options for scripts/template_verifier.py")
|
||||||
set(TEMPLATE_VERIFIER_MASTER_URL "https://bitbucket.org/lindenlab/master-message-template-git/raw/master/message_template.msg" CACHE STRING "Location of the master message template")
|
set(TEMPLATE_VERIFIER_MASTER_URL "https://github.com/secondlife/master-message-template/raw/master/message_template.msg" CACHE STRING "Location of the master message template")
|
||||||
|
|
||||||
if (NOT CMAKE_BUILD_TYPE)
|
if (NOT CMAKE_BUILD_TYPE)
|
||||||
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
|
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
|
||||||
|
|
|
||||||
|
|
@ -911,13 +911,13 @@ void LLRender::init(bool needs_vertex_buffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
// <FS:Ansariel> Don't ignore OpenGL max line width
|
// <FS:Ansariel> Don't ignore OpenGL max line width
|
||||||
GLint range[2];
|
GLfloat range[2];
|
||||||
glGetIntegerv(GL_ALIASED_LINE_WIDTH_RANGE, range);
|
glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, range);
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
mMaxLineWidthAliased = F32(range[1]);
|
mMaxLineWidthAliased = range[1];
|
||||||
glGetIntegerv(GL_SMOOTH_LINE_WIDTH_RANGE, range);
|
glGetFloatv(GL_SMOOTH_LINE_WIDTH_RANGE, range);
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
mMaxLineWidthSmooth = F32(range[1]);
|
mMaxLineWidthSmooth = range[1];
|
||||||
// </FS:Ansariel>
|
// </FS:Ansariel>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1558,11 +1558,7 @@ void LLRender::setAmbientLightColor(const LLColor4& color)
|
||||||
// <FS> Line width OGL core profile fix by Rye Mutt
|
// <FS> Line width OGL core profile fix by Rye Mutt
|
||||||
void LLRender::setLineWidth(F32 line_width)
|
void LLRender::setLineWidth(F32 line_width)
|
||||||
{
|
{
|
||||||
if (LLRender::sGLCoreProfile)
|
if (line_width > 1.f)
|
||||||
{
|
|
||||||
line_width = 1.f;
|
|
||||||
}
|
|
||||||
else if (line_width > 1.f)
|
|
||||||
{
|
{
|
||||||
line_width = llmin(line_width, glIsEnabled(GL_LINE_SMOOTH) ? mMaxLineWidthSmooth : mMaxLineWidthAliased);
|
line_width = llmin(line_width, glIsEnabled(GL_LINE_SMOOTH) ? mMaxLineWidthSmooth : mMaxLineWidthAliased);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
6.6.8
|
6.6.9
|
||||||
|
|
|
||||||
|
|
@ -202,7 +202,7 @@ VARYING vec2 vary_texcoord2;
|
||||||
uniform float env_intensity;
|
uniform float env_intensity;
|
||||||
uniform vec4 specular_color; // specular color RGB and specular exponent (glossiness) in alpha
|
uniform vec4 specular_color; // specular color RGB and specular exponent (glossiness) in alpha
|
||||||
|
|
||||||
#ifdef HAS_ALPHA_MASK
|
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_MASK)
|
||||||
uniform float minimum_alpha;
|
uniform float minimum_alpha;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -227,12 +227,11 @@ void main()
|
||||||
vec4 diffcol = texture2D(diffuseMap, vary_texcoord0.xy);
|
vec4 diffcol = texture2D(diffuseMap, vary_texcoord0.xy);
|
||||||
diffcol.rgb *= vertex_color.rgb;
|
diffcol.rgb *= vertex_color.rgb;
|
||||||
|
|
||||||
#ifdef HAS_ALPHA_MASK
|
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_MASK)
|
||||||
#if DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND
|
|
||||||
if (diffcol.a*vertex_color.a < minimum_alpha)
|
// Comparing floats cast from 8-bit values, produces acne right at the 8-bit transition points
|
||||||
#else
|
float bias = 0.001953125; // 1/512, or half an 8-bit quantization
|
||||||
if (diffcol.a < minimum_alpha)
|
if (diffcol.a < minimum_alpha-bias)
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
discard;
|
discard;
|
||||||
}
|
}
|
||||||
|
|
@ -451,4 +450,3 @@ void main()
|
||||||
frag_data[2] = final_normal; // XY = Normal. Z = Env. intensity.
|
frag_data[2] = final_normal; // XY = Normal. Z = Env. intensity.
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,19 +67,19 @@
|
||||||
#include "rlvhandler.h"
|
#include "rlvhandler.h"
|
||||||
|
|
||||||
// max number of objects that can be (de-)selected in a single packet.
|
// max number of objects that can be (de-)selected in a single packet.
|
||||||
const S32 MAX_OBJECTS_PER_PACKET = 255;
|
constexpr S32 MAX_OBJECTS_PER_PACKET = 255;
|
||||||
|
|
||||||
// time in seconds between refreshes when active
|
// time in seconds between refreshes when active
|
||||||
const F32 REFRESH_INTERVAL = 1.0f;
|
constexpr F32 REFRESH_INTERVAL = 1.0f;
|
||||||
|
|
||||||
// this is used to prevent refreshing too often and affecting performance.
|
// this is used to prevent refreshing too often and affecting performance.
|
||||||
const F32 MIN_REFRESH_INTERVAL = 0.25f;
|
constexpr F32 MIN_REFRESH_INTERVAL = 0.25f;
|
||||||
|
|
||||||
// how far the avatar needs to move to trigger a distance update
|
// how far the avatar needs to move to trigger a distance update
|
||||||
const F32 MIN_DISTANCE_MOVED = 1.0f;
|
constexpr F32 MIN_DISTANCE_MOVED = 1.0f;
|
||||||
|
|
||||||
// timeout to resend object properties request again
|
// timeout to resend object properties request again
|
||||||
const F32 REQUEST_TIMEOUT = 30.0f;
|
constexpr F32 REQUEST_TIMEOUT = 30.0f;
|
||||||
|
|
||||||
std::string RLVa_hideNameIfRestricted(std::string const &name)
|
std::string RLVa_hideNameIfRestricted(std::string const &name)
|
||||||
{
|
{
|
||||||
|
|
@ -1185,7 +1185,7 @@ void FSAreaSearch::callbackLoadFullName(const LLUUID& id, const std::string& ful
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mPanelList->updateName(id, full_name);
|
mPanelList->updateName(id, full_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FSAreaSearch::updateCounterText()
|
void FSAreaSearch::updateCounterText()
|
||||||
|
|
@ -1283,7 +1283,7 @@ void FSAreaSearch::onCommitLine()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FSAreaSearch::regexTest(std::string text)
|
bool FSAreaSearch::regexTest(std::string_view text)
|
||||||
{
|
{
|
||||||
// couple regex patters one can use for testing. The regex will match a UUID.
|
// couple regex patters one can use for testing. The regex will match a UUID.
|
||||||
// boost::regex pattern("[\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}");
|
// boost::regex pattern("[\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}");
|
||||||
|
|
@ -1292,8 +1292,8 @@ bool FSAreaSearch::regexTest(std::string text)
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
std::string test_text = "asdfghjklqwerty1234567890";
|
static const std::string test_text = "asdfghjklqwerty1234567890";
|
||||||
boost::regex pattern(text.c_str());
|
boost::regex pattern(text.data());
|
||||||
boost::regex_match(test_text, pattern);
|
boost::regex_match(test_text, pattern);
|
||||||
}
|
}
|
||||||
catch(boost::regex_error& e)
|
catch(boost::regex_error& e)
|
||||||
|
|
@ -1822,15 +1822,15 @@ bool FSPanelAreaSearchList::onContextMenuItemClick(const LLSD& userdata)
|
||||||
if (camera_aspect < 1.0f || invert)
|
if (camera_aspect < 1.0f || invert)
|
||||||
{
|
{
|
||||||
angle_of_view = llmax(0.1f, LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect());
|
angle_of_view = llmax(0.1f, LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect());
|
||||||
distance = width * 0.5 * 1.1 / tanf(angle_of_view * 0.5f);
|
distance = width * 0.5f * 1.1f / tanf(angle_of_view * 0.5f);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
angle_of_view = llmax(0.1f, LLViewerCamera::getInstance()->getView());
|
angle_of_view = llmax(0.1f, LLViewerCamera::getInstance()->getView());
|
||||||
distance = height * 0.5 * 1.1 / tanf(angle_of_view * 0.5f);
|
distance = height * 0.5f * 1.1f / tanf(angle_of_view * 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
distance += depth * 0.5;
|
distance += depth * 0.5f;
|
||||||
|
|
||||||
// Verify that the bounding box isn't inside the near clip. Using OBB-plane intersection to check if the
|
// Verify that the bounding box isn't inside the near clip. Using OBB-plane intersection to check if the
|
||||||
// near-clip plane intersects with the bounding box, and if it does, adjust the distance such that the
|
// near-clip plane intersects with the bounding box, and if it does, adjust the distance such that the
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ private:
|
||||||
void getNameFromUUID(const LLUUID& id, std::string& name, bool group, bool& name_requested);
|
void getNameFromUUID(const LLUUID& id, std::string& name, bool group, bool& name_requested);
|
||||||
|
|
||||||
void updateCounterText();
|
void updateCounterText();
|
||||||
bool regexTest(std::string text);
|
bool regexTest(std::string_view text);
|
||||||
void findObjects();
|
void findObjects();
|
||||||
void processRequestQueue();
|
void processRequestQueue();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1425,7 +1425,6 @@ std::string LLGridManager::getAppSLURLBase(const std::string& grid)
|
||||||
class FSGridManagerCommandHandler : public LLCommandHandler
|
class FSGridManagerCommandHandler : public LLCommandHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// not allowed from outside the app
|
|
||||||
FSGridManagerCommandHandler() : LLCommandHandler("gridmanager", UNTRUSTED_THROTTLE),
|
FSGridManagerCommandHandler() : LLCommandHandler("gridmanager", UNTRUSTED_THROTTLE),
|
||||||
mDownloadConnection()
|
mDownloadConnection()
|
||||||
{ }
|
{ }
|
||||||
|
|
@ -1445,6 +1444,8 @@ public:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Automatically add and select grid via secondlife:///app/gridmanager/addgrid/<URL-encoded login URI>
|
||||||
|
// Example: secondlife:///app/gridmanager/addgrid/http%3A%2F%2Fgrid.avatarlife.com%3A8002
|
||||||
if (params[0].asString() == "addgrid")
|
if (params[0].asString() == "addgrid")
|
||||||
{
|
{
|
||||||
std::string login_uri = LLURI::unescape(params[1].asString());
|
std::string login_uri = LLURI::unescape(params[1].asString());
|
||||||
|
|
|
||||||
|
|
@ -64,9 +64,9 @@ static const std::string FS_ERROR_ATTRIBUTE = "error=";
|
||||||
class NameCollectFunctor : public LLInventoryCollectFunctor
|
class NameCollectFunctor : public LLInventoryCollectFunctor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NameCollectFunctor(std::string name)
|
NameCollectFunctor(std::string_view name)
|
||||||
{
|
{
|
||||||
sName = name;
|
sName = static_cast<std::string>(name);
|
||||||
}
|
}
|
||||||
virtual ~NameCollectFunctor() {}
|
virtual ~NameCollectFunctor() {}
|
||||||
virtual bool operator()(LLInventoryCategory* cat,
|
virtual bool operator()(LLInventoryCategory* cat,
|
||||||
|
|
@ -147,7 +147,7 @@ void FSLSLBridge::setTimerResult(TimerResult result)
|
||||||
mTimerResult = result;
|
mTimerResult = result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID, const LLUUID& ownerID)
|
bool FSLSLBridge::lslToViewer(std::string_view message, const LLUUID& fromID, const LLUUID& ownerID)
|
||||||
{
|
{
|
||||||
LL_DEBUGS("FSLSLBridge") << message << LL_ENDL;
|
LL_DEBUGS("FSLSLBridge") << message << LL_ENDL;
|
||||||
|
|
||||||
|
|
@ -175,7 +175,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
std::string tag = message.substr(0, tagend + 1);
|
std::string_view tag = message.substr(0, tagend + 1);
|
||||||
std::string ourBridge = findFSCategory().asString();
|
std::string ourBridge = findFSCategory().asString();
|
||||||
//</FS:TS> FIRE-962
|
//</FS:TS> FIRE-962
|
||||||
|
|
||||||
|
|
@ -199,9 +199,9 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
|
||||||
size_t authEnd = message.find("</bridgeAuth>");
|
size_t authEnd = message.find("</bridgeAuth>");
|
||||||
size_t verStart = message.find(bridge_ver_tag) + bridge_ver_tag.size();
|
size_t verStart = message.find(bridge_ver_tag) + bridge_ver_tag.size();
|
||||||
size_t verEnd = message.find("</bridgeVer>");
|
size_t verEnd = message.find("</bridgeVer>");
|
||||||
std::string bURL = message.substr(urlStart,urlEnd - urlStart);
|
std::string bURL = static_cast<std::string>(message.substr(urlStart,urlEnd - urlStart));
|
||||||
std::string bAuth = message.substr(authStart,authEnd - authStart);
|
std::string bAuth = static_cast<std::string>(message.substr(authStart,authEnd - authStart));
|
||||||
std::string bVer = message.substr(verStart,verEnd - verStart);
|
std::string bVer = static_cast<std::string>(message.substr(verStart,verEnd - verStart));
|
||||||
|
|
||||||
// Verify Authorization
|
// Verify Authorization
|
||||||
if (ourBridge != bAuth)
|
if (ourBridge != bAuth)
|
||||||
|
|
@ -402,7 +402,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
|
||||||
size_t getScriptInfoEnd = message.find("</bridgeGetScriptInfo>");
|
size_t getScriptInfoEnd = message.find("</bridgeGetScriptInfo>");
|
||||||
if (getScriptInfoEnd != std::string::npos)
|
if (getScriptInfoEnd != std::string::npos)
|
||||||
{
|
{
|
||||||
std::string getScriptInfoString = message.substr(tag_size, getScriptInfoEnd - tag_size);
|
std::string getScriptInfoString = static_cast<std::string>(message.substr(tag_size, getScriptInfoEnd - tag_size));
|
||||||
std::istringstream strStreamGetScriptInfo(getScriptInfoString);
|
std::istringstream strStreamGetScriptInfo(getScriptInfoString);
|
||||||
std::string scriptInfoToken;
|
std::string scriptInfoToken;
|
||||||
LLSD scriptInfoArray = LLSD::emptyArray();
|
LLSD scriptInfoArray = LLSD::emptyArray();
|
||||||
|
|
@ -556,7 +556,7 @@ bool FSLSLBridge::canUseBridge()
|
||||||
return (isBridgeValid() && sUseLSLBridge && !mCurrentURL.empty());
|
return (isBridgeValid() && sUseLSLBridge && !mCurrentURL.empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FSLSLBridge::viewerToLSL(const std::string& message, Callback_t aCallback)
|
bool FSLSLBridge::viewerToLSL(std::string_view message, Callback_t aCallback)
|
||||||
{
|
{
|
||||||
LL_DEBUGS("FSLSLBridge") << message << LL_ENDL;
|
LL_DEBUGS("FSLSLBridge") << message << LL_ENDL;
|
||||||
|
|
||||||
|
|
@ -571,32 +571,21 @@ bool FSLSLBridge::viewerToLSL(const std::string& message, Callback_t aCallback)
|
||||||
pCallback = FSLSLBridgeRequest_Success;
|
pCallback = FSLSLBridgeRequest_Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(mCurrentURL, LLSD(message), pCallback, FSLSLBridgeRequest_Failure);
|
// Calling data() should be fine here since message is a view on a null-terminated string
|
||||||
|
LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(mCurrentURL, LLSD(message.data()), pCallback, FSLSLBridgeRequest_Failure);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FSLSLBridge::updateBoolSettingValue(const std::string& msgVal)
|
bool FSLSLBridge::updateBoolSettingValue(const std::string& msgVal)
|
||||||
{
|
{
|
||||||
std::string boolVal = "0";
|
const std::string boolVal = gSavedPerAccountSettings.getBOOL(msgVal) ? "1" : "0";
|
||||||
|
return viewerToLSL(msgVal + "|" + boolVal);
|
||||||
if (gSavedPerAccountSettings.getBOOL(msgVal))
|
|
||||||
{
|
|
||||||
boolVal = "1";
|
|
||||||
}
|
|
||||||
|
|
||||||
return viewerToLSL(msgVal + "|" + boolVal );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FSLSLBridge::updateBoolSettingValue(const std::string& msgVal, bool contentVal)
|
bool FSLSLBridge::updateBoolSettingValue(const std::string& msgVal, bool contentVal)
|
||||||
{
|
{
|
||||||
std::string boolVal = "0";
|
const std::string boolVal = contentVal ? "1" : "0";
|
||||||
|
|
||||||
if (contentVal)
|
|
||||||
{
|
|
||||||
boolVal = "1";
|
|
||||||
}
|
|
||||||
|
|
||||||
return viewerToLSL(msgVal + "|" + boolVal);
|
return viewerToLSL(msgVal + "|" + boolVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -677,9 +666,9 @@ void FSLSLBridge::cleanUpPreCreation()
|
||||||
gInventory.collectDescendentsIf(findFSCategory(), cats, items, FALSE, namefunctor);
|
gInventory.collectDescendentsIf(findFSCategory(), cats, items, FALSE, namefunctor);
|
||||||
|
|
||||||
mAllowedDetachables.clear();
|
mAllowedDetachables.clear();
|
||||||
for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); ++it)
|
for (const auto& item : items)
|
||||||
{
|
{
|
||||||
LLUUID item_id= (*it)->getUUID();
|
const LLUUID& item_id = item->getUUID();
|
||||||
if (get_is_item_worn(item_id))
|
if (get_is_item_worn(item_id))
|
||||||
{
|
{
|
||||||
LL_INFOS("FSLSLBridge") << "Found worn object " << item_id << " bridge category - detaching..." << LL_ENDL;
|
LL_INFOS("FSLSLBridge") << "Found worn object " << item_id << " bridge category - detaching..." << LL_ENDL;
|
||||||
|
|
@ -712,10 +701,10 @@ void FSLSLBridge::finishCleanUpPreCreation()
|
||||||
NameCollectFunctor namefunctor(mCurrentFullName);
|
NameCollectFunctor namefunctor(mCurrentFullName);
|
||||||
gInventory.collectDescendentsIf(findFSCategory(), cats, items, FALSE, namefunctor);
|
gInventory.collectDescendentsIf(findFSCategory(), cats, items, FALSE, namefunctor);
|
||||||
|
|
||||||
for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); ++it)
|
for (const auto& item : items)
|
||||||
{
|
{
|
||||||
LL_INFOS("FSLSLBridge") << "Bridge folder cleanup: Deleting " << (*it)->getName() << " (" << (*it)->getUUID() << ")" << LL_ENDL;
|
LL_INFOS("FSLSLBridge") << "Bridge folder cleanup: Deleting " << item->getName() << " (" << item->getUUID() << ")" << LL_ENDL;
|
||||||
remove_inventory_item((*it)->getUUID(), nullptr, true); // Don't wait for callback from server to update inventory model
|
remove_inventory_item(item->getUUID(), nullptr, true); // Don't wait for callback from server to update inventory model
|
||||||
}
|
}
|
||||||
gInventory.notifyObservers();
|
gInventory.notifyObservers();
|
||||||
|
|
||||||
|
|
@ -1143,6 +1132,9 @@ void FSLSLBridge::processDetach(LLViewerObject* object, const LLViewerJointAttac
|
||||||
void FSLSLBridge::setupBridgePrim(LLViewerObject* object)
|
void FSLSLBridge::setupBridgePrim(LLViewerObject* object)
|
||||||
{
|
{
|
||||||
LL_DEBUGS("FSLSLBridge") << "Entering bridge container setup..." << LL_ENDL;
|
LL_DEBUGS("FSLSLBridge") << "Entering bridge container setup..." << LL_ENDL;
|
||||||
|
|
||||||
|
if (!object->getRegion())
|
||||||
|
return;
|
||||||
|
|
||||||
LLProfileParams profParams(LL_PCODE_PROFILE_CIRCLE, 0.230f, 0.250f, 0.95f);
|
LLProfileParams profParams(LL_PCODE_PROFILE_CIRCLE, 0.230f, 0.250f, 0.95f);
|
||||||
LLPathParams pathParams(LL_PCODE_PATH_CIRCLE, 0.2f, 0.22f,
|
LLPathParams pathParams(LL_PCODE_PATH_CIRCLE, 0.2f, 0.22f,
|
||||||
|
|
@ -1509,11 +1501,11 @@ LLUUID FSLSLBridge::findFSCategory()
|
||||||
gInventory.getDirectDescendentsOf(fsCatID, cats, items);
|
gInventory.getDirectDescendentsOf(fsCatID, cats, items);
|
||||||
if (cats)
|
if (cats)
|
||||||
{
|
{
|
||||||
for (LLInventoryModel::cat_array_t::iterator it = cats->begin(); it != cats->end(); ++it)
|
for (const auto& cat : *cats)
|
||||||
{
|
{
|
||||||
if ((*it)->getName() == FS_BRIDGE_FOLDER)
|
if (cat->getName() == FS_BRIDGE_FOLDER)
|
||||||
{
|
{
|
||||||
bridgeCatID = (*it)->getUUID();
|
bridgeCatID = cat->getUUID();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1551,11 +1543,11 @@ LLUUID FSLSLBridge::findFSBridgeContainerCategory()
|
||||||
gInventory.getDirectDescendentsOf(LibRootID, cats, items);
|
gInventory.getDirectDescendentsOf(LibRootID, cats, items);
|
||||||
if (cats)
|
if (cats)
|
||||||
{
|
{
|
||||||
for (LLInventoryModel::cat_array_t::iterator it = cats->begin(); it != cats->end(); ++it)
|
for (const auto& cat : *cats)
|
||||||
{
|
{
|
||||||
if ((*it)->getName() == "Objects")
|
if (cat->getName() == "Objects")
|
||||||
{
|
{
|
||||||
LLUUID LibObjectsCatID = (*it)->getUUID();
|
const LLUUID& LibObjectsCatID = cat->getUUID();
|
||||||
if (LibObjectsCatID.notNull())
|
if (LibObjectsCatID.notNull())
|
||||||
{
|
{
|
||||||
LLInventoryModel::item_array_t* objects_items;
|
LLInventoryModel::item_array_t* objects_items;
|
||||||
|
|
@ -1563,11 +1555,11 @@ LLUUID FSLSLBridge::findFSBridgeContainerCategory()
|
||||||
gInventory.getDirectDescendentsOf(LibObjectsCatID, objects_cats, objects_items);
|
gInventory.getDirectDescendentsOf(LibObjectsCatID, objects_cats, objects_items);
|
||||||
if (objects_cats)
|
if (objects_cats)
|
||||||
{
|
{
|
||||||
for (LLInventoryModel::cat_array_t::iterator object_it = objects_cats->begin(); object_it != objects_cats->end(); ++object_it)
|
for (const auto& object_cat : *objects_cats)
|
||||||
{
|
{
|
||||||
if ((*object_it)->getName() == FS_BRIDGE_CONTAINER_FOLDER)
|
if (object_cat->getName() == FS_BRIDGE_CONTAINER_FOLDER)
|
||||||
{
|
{
|
||||||
mBridgeContainerFolderID = (*object_it)->getUUID();
|
mBridgeContainerFolderID = object_cat->getUUID();
|
||||||
LL_INFOS("FSLSLBridge") << "FSBridge container category found in library. UUID: " << mBridgeContainerFolderID << LL_ENDL;
|
LL_INFOS("FSLSLBridge") << "FSBridge container category found in library. UUID: " << mBridgeContainerFolderID << LL_ENDL;
|
||||||
gInventory.fetchDescendentsOf(mBridgeContainerFolderID);
|
gInventory.fetchDescendentsOf(mBridgeContainerFolderID);
|
||||||
return mBridgeContainerFolderID;
|
return mBridgeContainerFolderID;
|
||||||
|
|
@ -1594,12 +1586,11 @@ LLViewerInventoryItem* FSLSLBridge::findInvObject(const std::string& obj_name, c
|
||||||
|
|
||||||
gInventory.collectDescendentsIf(catID, cats, items, FALSE, namefunctor);
|
gInventory.collectDescendentsIf(catID, cats, items, FALSE, namefunctor);
|
||||||
|
|
||||||
for (LLViewerInventoryItem::item_array_t::iterator it = items.begin(); it != items.end(); ++it)
|
for (const auto& item : items)
|
||||||
{
|
{
|
||||||
const LLViewerInventoryItem* itemp = *it;
|
if (!item->getIsLinkType() && (item->getType() == LLAssetType::AT_OBJECT))
|
||||||
if (!itemp->getIsLinkType() && (itemp->getType() == LLAssetType::AT_OBJECT))
|
|
||||||
{
|
{
|
||||||
itemID = itemp->getUUID();
|
itemID = item->getUUID();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1631,13 +1622,12 @@ void FSLSLBridge::cleanUpBridgeFolder(const std::string& nameToCleanUp)
|
||||||
NameCollectFunctor namefunctor(nameToCleanUp);
|
NameCollectFunctor namefunctor(nameToCleanUp);
|
||||||
gInventory.collectDescendentsIf(catID, cats, items, FALSE, namefunctor);
|
gInventory.collectDescendentsIf(catID, cats, items, FALSE, namefunctor);
|
||||||
|
|
||||||
for (LLViewerInventoryItem::item_array_t::iterator it = items.begin(); it != items.end(); ++it)
|
for (const auto& item : items)
|
||||||
{
|
{
|
||||||
const LLViewerInventoryItem* itemp = *it;
|
if (!item->getIsLinkType() && (item->getUUID() != mpBridge->getUUID()))
|
||||||
if (!itemp->getIsLinkType() && (itemp->getUUID() != mpBridge->getUUID()))
|
|
||||||
{
|
{
|
||||||
LL_INFOS("FSLSLBridge") << "Bridge folder cleanup: Deleting " << itemp->getName() << " (" << itemp->getUUID() << ")" << LL_ENDL;
|
LL_INFOS("FSLSLBridge") << "Bridge folder cleanup: Deleting " << item->getName() << " (" << item->getUUID() << ")" << LL_ENDL;
|
||||||
remove_inventory_item(itemp->getUUID(), nullptr, true);
|
remove_inventory_item(item->getUUID(), nullptr, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1684,13 +1674,12 @@ void FSLSLBridge::detachOtherBridges()
|
||||||
//detach everything except current valid bridge - if any
|
//detach everything except current valid bridge - if any
|
||||||
gInventory.collectDescendents(catID, cats, items, FALSE);
|
gInventory.collectDescendents(catID, cats, items, FALSE);
|
||||||
|
|
||||||
for (LLViewerInventoryItem::item_array_t::iterator it = items.begin(); it != items.end(); ++it)
|
for (const auto& item : items)
|
||||||
{
|
{
|
||||||
const LLViewerInventoryItem* itemp = *it;
|
if (get_is_item_worn(item->getUUID()) &&
|
||||||
if (get_is_item_worn(itemp->getUUID()) &&
|
((!fsBridge) || (item->getUUID() != fsBridge->getUUID())))
|
||||||
((!fsBridge) || (itemp->getUUID() != fsBridge->getUUID())))
|
|
||||||
{
|
{
|
||||||
LLVOAvatarSelf::detachAttachmentIntoInventory(itemp->getUUID());
|
LLVOAvatarSelf::detachAttachmentIntoInventory(item->getUUID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,8 +65,8 @@ public:
|
||||||
|
|
||||||
typedef std::function<void(const LLSD &)> Callback_t;
|
typedef std::function<void(const LLSD &)> Callback_t;
|
||||||
|
|
||||||
bool lslToViewer(const std::string& message, const LLUUID& fromID, const LLUUID& ownerID);
|
bool lslToViewer(std::string_view message, const LLUUID& fromID, const LLUUID& ownerID);
|
||||||
bool viewerToLSL(const std::string& message, Callback_t = nullptr);
|
bool viewerToLSL(std::string_view message, Callback_t = nullptr);
|
||||||
|
|
||||||
bool updateBoolSettingValue(const std::string& msgVal);
|
bool updateBoolSettingValue(const std::string& msgVal);
|
||||||
bool updateBoolSettingValue(const std::string& msgVal, bool contentVal);
|
bool updateBoolSettingValue(const std::string& msgVal, bool contentVal);
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,6 @@ private:
|
||||||
void onClickRemovePseudonym();
|
void onClickRemovePseudonym();
|
||||||
|
|
||||||
void refreshContactSets();
|
void refreshContactSets();
|
||||||
void removeAvatarFromSet();
|
|
||||||
void resetControls();
|
void resetControls();
|
||||||
|
|
||||||
void updateSets(LGGContactSets::EContactSetUpdate type);
|
void updateSets(LGGContactSets::EContactSetUpdate type);
|
||||||
|
|
|
||||||
|
|
@ -1266,7 +1266,9 @@ void LLAvatarActions::shareWithAvatars(LLView * panel)
|
||||||
LLFloater* root_floater = gFloaterView->getParentFloater(panel);
|
LLFloater* root_floater = gFloaterView->getParentFloater(panel);
|
||||||
LLInventoryPanel* inv_panel = dynamic_cast<LLInventoryPanel*>(panel);
|
LLInventoryPanel* inv_panel = dynamic_cast<LLInventoryPanel*>(panel);
|
||||||
LLFloaterAvatarPicker* picker =
|
LLFloaterAvatarPicker* picker =
|
||||||
LLFloaterAvatarPicker::show(boost::bind(give_inventory, _1, _2, inv_panel), TRUE, FALSE, FALSE, root_floater->getName());
|
// <FS:Ansariel> FIRE-32377: Don't include own avatar when sharing items
|
||||||
|
//LLFloaterAvatarPicker::show(boost::bind(give_inventory, _1, _2, inv_panel), TRUE, FALSE, FALSE, root_floater->getName());
|
||||||
|
LLFloaterAvatarPicker::show(boost::bind(give_inventory, _1, _2, inv_panel), TRUE, FALSE, TRUE, root_floater->getName());
|
||||||
if (!picker)
|
if (!picker)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,8 @@
|
||||||
#include "fsgridhandler.h" // <FS:Beq> need to check if in opensim
|
#include "fsgridhandler.h" // <FS:Beq> need to check if in opensim
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "llinventorydefines.h" // <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
|
||||||
LLInventoryFilter::FilterOps::FilterOps(const Params& p)
|
LLInventoryFilter::FilterOps::FilterOps(const Params& p)
|
||||||
: mFilterObjectTypes(p.object_types),
|
: mFilterObjectTypes(p.object_types),
|
||||||
mFilterCategoryTypes(p.category_types),
|
mFilterCategoryTypes(p.category_types),
|
||||||
|
|
@ -69,6 +71,7 @@ LLInventoryFilter::FilterOps::FilterOps(const Params& p)
|
||||||
mFilterTypes(p.types),
|
mFilterTypes(p.types),
|
||||||
mFilterUUID(p.uuid),
|
mFilterUUID(p.uuid),
|
||||||
mFilterLinks(p.links),
|
mFilterLinks(p.links),
|
||||||
|
mCoalescedObjectsOnly(p.coalesced_objects_only), // <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
mSearchVisibility(p.search_visibility)
|
mSearchVisibility(p.search_visibility)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -338,6 +341,21 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
if (mFilterOps.mCoalescedObjectsOnly)
|
||||||
|
{
|
||||||
|
// only bother to get the inventory item pointer if we are actually showing only coalesced objects
|
||||||
|
LLInventoryItem* item = gInventory.getItem(object_id);
|
||||||
|
if (item)
|
||||||
|
{
|
||||||
|
if (!(item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// </ FS:Zi>
|
||||||
|
|
||||||
if ((1LL << object_type & mFilterOps.mFilterObjectTypes) == U64(0))
|
if ((1LL << object_type & mFilterOps.mFilterObjectTypes) == U64(0))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
@ -688,6 +706,9 @@ bool LLInventoryFilter::isNotDefault() const
|
||||||
not_default |= (mFilterOps.mMaxDate != mDefaultFilterOps.mMaxDate);
|
not_default |= (mFilterOps.mMaxDate != mDefaultFilterOps.mMaxDate);
|
||||||
not_default |= (mFilterOps.mHoursAgo != mDefaultFilterOps.mHoursAgo);
|
not_default |= (mFilterOps.mHoursAgo != mDefaultFilterOps.mHoursAgo);
|
||||||
|
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
not_default |= (mFilterOps.mCoalescedObjectsOnly != mDefaultFilterOps.mCoalescedObjectsOnly);
|
||||||
|
|
||||||
return not_default != 0;
|
return not_default != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -761,6 +782,22 @@ void LLInventoryFilter::setFilterObjectTypes(U64 types)
|
||||||
mFilterOps.mFilterTypes |= FILTERTYPE_OBJECT;
|
mFilterOps.mFilterTypes |= FILTERTYPE_OBJECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
void LLInventoryFilter::setFilterCoalescedObjects(bool coalesced)
|
||||||
|
{
|
||||||
|
mFilterOps.mCoalescedObjectsOnly = coalesced;
|
||||||
|
|
||||||
|
LLInventoryFilter::EFilterModified modifyMode = FILTER_LESS_RESTRICTIVE;
|
||||||
|
|
||||||
|
if (coalesced)
|
||||||
|
{
|
||||||
|
modifyMode = FILTER_MORE_RESTRICTIVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
setModified(modifyMode);
|
||||||
|
}
|
||||||
|
// </FS:Zi>
|
||||||
|
|
||||||
void LLInventoryFilter::setFilterCategoryTypes(U64 types)
|
void LLInventoryFilter::setFilterCategoryTypes(U64 types)
|
||||||
{
|
{
|
||||||
updateFilterTypes(types, mFilterOps.mFilterCategoryTypes);
|
updateFilterTypes(types, mFilterOps.mFilterCategoryTypes);
|
||||||
|
|
@ -1545,6 +1582,8 @@ LLInventoryFilter& LLInventoryFilter::operator=( const LLInventoryFilter& othe
|
||||||
setFilterPermissions(other.getFilterPermissions());
|
setFilterPermissions(other.getFilterPermissions());
|
||||||
setFilterSubString(other.getFilterSubString());
|
setFilterSubString(other.getFilterSubString());
|
||||||
setDateRangeLastLogoff(other.isSinceLogoff());
|
setDateRangeLastLogoff(other.isSinceLogoff());
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
setFilterCoalescedObjects(other.getFilterCoalescedObjects());
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1567,6 +1606,8 @@ void LLInventoryFilter::toParams(Params& params) const
|
||||||
params.filter_ops.search_visibility = getSearchVisibilityTypes();
|
params.filter_ops.search_visibility = getSearchVisibilityTypes();
|
||||||
params.substring = getFilterSubString();
|
params.substring = getFilterSubString();
|
||||||
params.since_logoff = isSinceLogoff();
|
params.since_logoff = isSinceLogoff();
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
params.filter_ops.coalesced_objects_only = getFilterCoalescedObjects();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLInventoryFilter::fromParams(const Params& params)
|
void LLInventoryFilter::fromParams(const Params& params)
|
||||||
|
|
@ -1639,6 +1680,13 @@ void LLInventoryFilter::fromParams(const Params& params)
|
||||||
setDateRangeLastLogoff(params.since_logoff);
|
setDateRangeLastLogoff(params.since_logoff);
|
||||||
}
|
}
|
||||||
// </FS:Ansariel>
|
// </FS:Ansariel>
|
||||||
|
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
if (params.filter_ops.coalesced_objects_only.isProvided())
|
||||||
|
{
|
||||||
|
setFilterCoalescedObjects(params.filter_ops.coalesced_objects_only);
|
||||||
|
}
|
||||||
|
// </FS:Zi>
|
||||||
}
|
}
|
||||||
|
|
||||||
U64 LLInventoryFilter::getFilterTypes() const
|
U64 LLInventoryFilter::getFilterTypes() const
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,7 @@ public:
|
||||||
Optional<EFolderShow> show_folder_state;
|
Optional<EFolderShow> show_folder_state;
|
||||||
Optional<PermissionMask> permissions;
|
Optional<PermissionMask> permissions;
|
||||||
Optional<EFilterCreatorType> creator_type;
|
Optional<EFilterCreatorType> creator_type;
|
||||||
|
Optional<bool> coalesced_objects_only; // <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
|
||||||
Params()
|
Params()
|
||||||
: types("filter_types", FILTERTYPE_OBJECT),
|
: types("filter_types", FILTERTYPE_OBJECT),
|
||||||
|
|
@ -155,6 +156,7 @@ public:
|
||||||
date_search_direction("date_search_direction", FILTERDATEDIRECTION_NEWER),
|
date_search_direction("date_search_direction", FILTERDATEDIRECTION_NEWER),
|
||||||
show_folder_state("show_folder_state", SHOW_NON_EMPTY_FOLDERS),
|
show_folder_state("show_folder_state", SHOW_NON_EMPTY_FOLDERS),
|
||||||
creator_type("creator_type", FILTERCREATOR_ALL),
|
creator_type("creator_type", FILTERCREATOR_ALL),
|
||||||
|
coalesced_objects_only("coalesced_objects_only", false), // <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
permissions("permissions", PERM_NONE)
|
permissions("permissions", PERM_NONE)
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
@ -178,6 +180,8 @@ public:
|
||||||
EFolderShow mShowFolderState;
|
EFolderShow mShowFolderState;
|
||||||
PermissionMask mPermissions;
|
PermissionMask mPermissions;
|
||||||
EFilterCreatorType mFilterCreatorType;
|
EFilterCreatorType mFilterCreatorType;
|
||||||
|
|
||||||
|
bool mCoalescedObjectsOnly; // <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Params : public LLInitParam::Block<Params>
|
struct Params : public LLInitParam::Block<Params>
|
||||||
|
|
@ -268,6 +272,11 @@ public:
|
||||||
// <FS>
|
// <FS>
|
||||||
BOOL getFilterWorn() const { return mFilterOps.mFilterTypes & FILTERTYPE_WORN; }
|
BOOL getFilterWorn() const { return mFilterOps.mFilterTypes & FILTERTYPE_WORN; }
|
||||||
|
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
void setFilterCoalescedObjects(bool coalesced);
|
||||||
|
bool getFilterCoalescedObjects() const { return mFilterOps.mCoalescedObjectsOnly; }
|
||||||
|
// </FS:Zi>
|
||||||
|
|
||||||
// +-------------------------------------------------------------------+
|
// +-------------------------------------------------------------------+
|
||||||
// + Execution And Results
|
// + Execution And Results
|
||||||
// +-------------------------------------------------------------------+
|
// +-------------------------------------------------------------------+
|
||||||
|
|
|
||||||
|
|
@ -523,6 +523,18 @@ U64 LLInventoryPanel::getFilterLinks()
|
||||||
}
|
}
|
||||||
// </FS:Zi> Filter Links Menu
|
// </FS:Zi> Filter Links Menu
|
||||||
|
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
void LLInventoryPanel::setFilterCoalescedObjects(bool coalesced)
|
||||||
|
{
|
||||||
|
getFilter().setFilterCoalescedObjects(coalesced);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LLInventoryPanel::getFilterCoalescedObjects()
|
||||||
|
{
|
||||||
|
return getFilter().getFilterCoalescedObjects();
|
||||||
|
}
|
||||||
|
// </FS:Zi>
|
||||||
|
|
||||||
void LLInventoryPanel::setSearchType(LLInventoryFilter::ESearchType type)
|
void LLInventoryPanel::setSearchType(LLInventoryFilter::ESearchType type)
|
||||||
{
|
{
|
||||||
getFilter().setSearchType(type);
|
getFilter().setSearchType(type);
|
||||||
|
|
|
||||||
|
|
@ -202,6 +202,10 @@ public:
|
||||||
BOOL getSinceLogoff();
|
BOOL getSinceLogoff();
|
||||||
void setFilterLinks(U64 filter_links);
|
void setFilterLinks(U64 filter_links);
|
||||||
U64 getFilterLinks(); // <FS:Zi> Filter Links Menu
|
U64 getFilterLinks(); // <FS:Zi> Filter Links Menu
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
void setFilterCoalescedObjects(bool coalesced);
|
||||||
|
bool getFilterCoalescedObjects();
|
||||||
|
// </FS:Zi>
|
||||||
// <FS:Zi> FIRE-1175 - Filter Permissions Menu
|
// <FS:Zi> FIRE-1175 - Filter Permissions Menu
|
||||||
void setFilterPermissions(PermissionMask filter_permissions);
|
void setFilterPermissions(PermissionMask filter_permissions);
|
||||||
PermissionMask getFilterPermissions();
|
PermissionMask getFilterPermissions();
|
||||||
|
|
|
||||||
|
|
@ -169,6 +169,11 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p)
|
||||||
// <FS:Ansariel> Add handler for being able to directly route to onCustomAction
|
// <FS:Ansariel> Add handler for being able to directly route to onCustomAction
|
||||||
mCommitCallbackRegistrar.add("Inventory.CustomAction", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
|
mCommitCallbackRegistrar.add("Inventory.CustomAction", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
|
||||||
|
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
mCommitCallbackRegistrar.add("Inventory.CoalescedObjects.Toggle", boost::bind(&LLPanelMainInventory::onCoalescedObjectsToggled, this, _2));
|
||||||
|
mEnableCallbackRegistrar.add("Inventory.CoalescedObjects.Check", boost::bind(&LLPanelMainInventory::isCoalescedObjectsChecked, this, _2));
|
||||||
|
// </FS:Zi>
|
||||||
|
|
||||||
mSavedFolderState = new LLSaveFolderState();
|
mSavedFolderState = new LLSaveFolderState();
|
||||||
mSavedFolderState->setApply(FALSE);
|
mSavedFolderState->setApply(FALSE);
|
||||||
|
|
||||||
|
|
@ -2027,6 +2032,28 @@ BOOL LLPanelMainInventory::isActionChecked(const LLSD& userdata)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
void LLPanelMainInventory::onCoalescedObjectsToggled(const LLSD& userdata)
|
||||||
|
{
|
||||||
|
const std::string command_name = userdata.asString();
|
||||||
|
if (command_name == "coalesced_objects_only")
|
||||||
|
{
|
||||||
|
getActivePanel()->setFilterCoalescedObjects(!getActivePanel()->getFilterCoalescedObjects());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LLPanelMainInventory::isCoalescedObjectsChecked(const LLSD& userdata)
|
||||||
|
{
|
||||||
|
const std::string command_name = userdata.asString();
|
||||||
|
if (command_name == "coalesced_objects_only")
|
||||||
|
{
|
||||||
|
return getActivePanel()->getFilterCoalescedObjects();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// </FS:Zi>
|
||||||
|
|
||||||
// <FS:Zi> Filter Links Menu
|
// <FS:Zi> Filter Links Menu
|
||||||
void LLPanelMainInventory::onFilterLinksChecked(const LLSD& userdata)
|
void LLPanelMainInventory::onFilterLinksChecked(const LLSD& userdata)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -195,6 +195,11 @@ protected:
|
||||||
BOOL isActionChecked(const LLSD& userdata);
|
BOOL isActionChecked(const LLSD& userdata);
|
||||||
void onCustomAction(const LLSD& command_name);
|
void onCustomAction(const LLSD& command_name);
|
||||||
|
|
||||||
|
// <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects
|
||||||
|
void onCoalescedObjectsToggled(const LLSD& userdata);
|
||||||
|
bool isCoalescedObjectsChecked(const LLSD& userdata);
|
||||||
|
// </FS:Zi>
|
||||||
|
|
||||||
// <FS:Zi> Filter Links Menu
|
// <FS:Zi> Filter Links Menu
|
||||||
BOOL isFilterLinksChecked(const LLSD& userdata);
|
BOOL isFilterLinksChecked(const LLSD& userdata);
|
||||||
void onFilterLinksChecked(const LLSD& userdata);
|
void onFilterLinksChecked(const LLSD& userdata);
|
||||||
|
|
|
||||||
|
|
@ -203,35 +203,34 @@ void LLPhysicsShapeBuilderUtil::determinePhysicsShape(const LLPhysicsVolumeParam
|
||||||
{
|
{
|
||||||
specOut.mType = PhysicsShapeSpecification::PRIM_CONVEX;
|
specOut.mType = PhysicsShapeSpecification::PRIM_CONVEX;
|
||||||
}
|
}
|
||||||
else if (volume_params.isMeshSculpt() &&
|
// <FS:Beq> restore proper behaviour.
|
||||||
// Check overall dimensions, not individual triangles.
|
// else if (volume_params.isMeshSculpt() &&
|
||||||
(scale.mV[0] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE ||
|
// // Check overall dimensions, not individual triangles.
|
||||||
scale.mV[1] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE ||
|
// (scale.mV[0] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE ||
|
||||||
scale.mV[2] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE
|
// scale.mV[1] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE ||
|
||||||
) )
|
// scale.mV[2] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE
|
||||||
{
|
// ) )
|
||||||
// Server distinguishes between user-specified or default convex mesh, vs server's thin-triangle override, but we don't.
|
// {
|
||||||
specOut.mType = PhysicsShapeSpecification::PRIM_CONVEX;
|
// // Server distinguishes between user-specified or default convex mesh, vs server's thin-triangle override, but we don't.
|
||||||
}
|
// specOut.mType = PhysicsShapeSpecification::PRIM_CONVEX;
|
||||||
|
// }
|
||||||
|
// </FS:Beq>
|
||||||
else if ( volume_params.isSculpt() ) // Is a sculpt of any kind (mesh or legacy)
|
else if ( volume_params.isSculpt() ) // Is a sculpt of any kind (mesh or legacy)
|
||||||
{
|
{
|
||||||
//<FS:Beq> [BUG-134006] Viewer code is not aligned to server code when calculating physics shape for thin objects.
|
//<FS:Beq> [BUG-134006] Viewer code is not aligned to server code when calculating physics shape for thin objects.
|
||||||
specOut.mType = PhysicsShapeSpecification::INVALID;
|
specOut.mType = PhysicsShapeSpecification::INVALID;
|
||||||
// <FS:Beq> FIRE-23053 - add decomp check analysed mesh physics is not correctly displayed for thin meshes
|
// <FS:Beq> FIRE-23053 - add decomp check analysed mesh physics is not correctly displayed for thin meshes
|
||||||
// if (volume_params.isMeshSculpt()){
|
// if (volume_params.isMeshSculpt()){
|
||||||
if (volume_params.isMeshSculpt() && !hasDecomp){
|
if ( (volume_params.isMeshSculpt() && !hasDecomp) &&
|
||||||
static const float SHAPE_BUILDER_CONVEXIFICATION_SIZE_MESH = 0.5;
|
(scale.mV[0] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE ||
|
||||||
// it's a mesh and only one size is smaller than min.
|
scale.mV[1] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE ||
|
||||||
for (S32 i = 0; i < 3; ++i)
|
scale.mV[2] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE
|
||||||
{
|
) )
|
||||||
if (scale[i] < SHAPE_BUILDER_CONVEXIFICATION_SIZE_MESH)
|
{
|
||||||
{
|
specOut.mType = PhysicsShapeSpecification::PRIM_CONVEX;
|
||||||
specOut.mType = PhysicsShapeSpecification::PRIM_CONVEX;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (specOut.mType == PhysicsShapeSpecification::INVALID)
|
if (specOut.mType == PhysicsShapeSpecification::INVALID)
|
||||||
//</FS:Beq>
|
//</FS:Beq> note: dangling if....(hopefully this will go away with PR sent to LL)
|
||||||
specOut.mType = volume_params.isMeshSculpt() ? PhysicsShapeSpecification::USER_MESH : PhysicsShapeSpecification::SCULPT;
|
specOut.mType = volume_params.isMeshSculpt() ? PhysicsShapeSpecification::USER_MESH : PhysicsShapeSpecification::SCULPT;
|
||||||
}
|
}
|
||||||
else // Resort to mesh
|
else // Resort to mesh
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@
|
||||||
|
|
||||||
#include "llviewerhelputil.h"
|
#include "llviewerhelputil.h"
|
||||||
#include "llviewerhelp.h"
|
#include "llviewerhelp.h"
|
||||||
|
#include "llweb.h" // <FS:Beq/> Support for opening help in external browser
|
||||||
|
|
||||||
// support for secondlife:///app/help/{TOPIC} SLapps
|
// support for secondlife:///app/help/{TOPIC} SLapps
|
||||||
class LLHelpHandler : public LLCommandHandler
|
class LLHelpHandler : public LLCommandHandler
|
||||||
|
|
@ -95,6 +96,14 @@ std::string LLViewerHelp::getURL(const std::string &topic)
|
||||||
|
|
||||||
void LLViewerHelp::showTopic(const std::string& topic)
|
void LLViewerHelp::showTopic(const std::string& topic)
|
||||||
{
|
{
|
||||||
|
// <FS:Beq> allow external browser for help topics
|
||||||
|
auto url = getURL(topic);
|
||||||
|
if ( LLWeb::useExternalBrowser(url) )
|
||||||
|
{
|
||||||
|
LLWeb::loadURLExternal(url);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// </FS:Beq>
|
||||||
LLFloaterReg::showInstance("help_browser", topic);
|
LLFloaterReg::showInstance("help_browser", topic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6753,7 +6753,8 @@ class LLToolsSelectNextPartFace : public view_listener_t
|
||||||
bool iprev = (userdata.asString() == "includeprevious");
|
bool iprev = (userdata.asString() == "includeprevious");
|
||||||
|
|
||||||
// <FS:Zi> Make shift+click on forward/back buttons work like includenext/previous
|
// <FS:Zi> Make shift+click on forward/back buttons work like includenext/previous
|
||||||
if (gKeyboard->currentMask(false) & MASK_SHIFT)
|
// (filter out the menu shortcuts by testing for ifwd / iprev)
|
||||||
|
if (gKeyboard->currentMask(false) & MASK_SHIFT && !ifwd && !iprev)
|
||||||
{
|
{
|
||||||
ifwd = fwd;
|
ifwd = fwd;
|
||||||
iprev = prev;
|
iprev = prev;
|
||||||
|
|
|
||||||
|
|
@ -74,9 +74,7 @@
|
||||||
<menu_item_check name="inventory_filter_only_modify" label="Nur modifizierbar"/>
|
<menu_item_check name="inventory_filter_only_modify" label="Nur modifizierbar"/>
|
||||||
<menu_item_check name="inventory_filter_only_copy" label="Nur kopierbar"/>
|
<menu_item_check name="inventory_filter_only_copy" label="Nur kopierbar"/>
|
||||||
<menu_item_check name="inventory_filter_only_transfer" label="Nur transferierbar"/>
|
<menu_item_check name="inventory_filter_only_transfer" label="Nur transferierbar"/>
|
||||||
<!-- Not implemented yet
|
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Nur verbundene Objekte"/>
|
||||||
<menu_item_check name="inventory_show_partial_results" label="Zeige unvollständige Suchergebnisse"/>
|
|
||||||
-->
|
|
||||||
</menu>
|
</menu>
|
||||||
</menu_bar>
|
</menu_bar>
|
||||||
<filter_editor label="Inventar filtern" name="inventory search editor" tool_tip="Einen oder mehrere Suchbegriffe eingeben, getrennt durch '+'"/>
|
<filter_editor label="Inventar filtern" name="inventory search editor" tool_tip="Einen oder mehrere Suchbegriffe eingeben, getrennt durch '+'"/>
|
||||||
|
|
|
||||||
|
|
@ -484,6 +484,17 @@
|
||||||
function="Inventory.FilterPermissions.Check"
|
function="Inventory.FilterPermissions.Check"
|
||||||
parameter="only_transfer" />
|
parameter="only_transfer" />
|
||||||
</menu_item_check>
|
</menu_item_check>
|
||||||
|
<menu_item_separator />
|
||||||
|
<menu_item_check
|
||||||
|
name="inventory_filter_coalesced_objects_only"
|
||||||
|
label="Only Coalesced">
|
||||||
|
<on_click
|
||||||
|
function="Inventory.CoalescedObjects.Toggle"
|
||||||
|
parameter="coalesced_objects_only" />
|
||||||
|
<on_check
|
||||||
|
function="Inventory.CoalescedObjects.Check"
|
||||||
|
parameter="coalesced_objects_only" />
|
||||||
|
</menu_item_check>
|
||||||
</menu>
|
</menu>
|
||||||
</menu_bar>
|
</menu_bar>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,7 @@
|
||||||
<menu_item_check name="inventory_filter_only_modify" label="Tylko modyfikowalne" />
|
<menu_item_check name="inventory_filter_only_modify" label="Tylko modyfikowalne" />
|
||||||
<menu_item_check name="inventory_filter_only_copy" label="Tylko kopiowalne" />
|
<menu_item_check name="inventory_filter_only_copy" label="Tylko kopiowalne" />
|
||||||
<menu_item_check name="inventory_filter_only_transfer" label="Tylko transferowalne" />
|
<menu_item_check name="inventory_filter_only_transfer" label="Tylko transferowalne" />
|
||||||
|
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Tylko podniesione razem" />
|
||||||
<menu_item_check name="inventory_show_partial_results" label="Pokaż częściowe wyniki wyszukiwania" />
|
<menu_item_check name="inventory_show_partial_results" label="Pokaż częściowe wyniki wyszukiwania" />
|
||||||
</menu>
|
</menu>
|
||||||
</menu_bar>
|
</menu_bar>
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,7 @@
|
||||||
<menu_item_check name="inventory_filter_only_modify" label="Только изменяемое"/>
|
<menu_item_check name="inventory_filter_only_modify" label="Только изменяемое"/>
|
||||||
<menu_item_check name="inventory_filter_only_copy" label="Только копируемое"/>
|
<menu_item_check name="inventory_filter_only_copy" label="Только копируемое"/>
|
||||||
<menu_item_check name="inventory_filter_only_transfer" label="Только передаваемое"/>
|
<menu_item_check name="inventory_filter_only_transfer" label="Только передаваемое"/>
|
||||||
|
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Только объединенные"/>
|
||||||
</menu>
|
</menu>
|
||||||
</menu_bar>
|
</menu_bar>
|
||||||
<filter_editor label="Фильтр" name="inventory search editor" tool_tip="Напишите одно или несколько слов для поиска. Для разделения используйте '+' "/>
|
<filter_editor label="Фильтр" name="inventory search editor" tool_tip="Напишите одно или несколько слов для поиска. Для разделения используйте '+' "/>
|
||||||
|
|
|
||||||
|
|
@ -37,5 +37,6 @@
|
||||||
<menu_item_check name="inventory_filter_only_copy" label="Nur kopierbar"/>
|
<menu_item_check name="inventory_filter_only_copy" label="Nur kopierbar"/>
|
||||||
<menu_item_check name="inventory_filter_only_transfer" label="Nur transferierbar"/>
|
<menu_item_check name="inventory_filter_only_transfer" label="Nur transferierbar"/>
|
||||||
<!-- ## Zi: Filter Links Menu -->
|
<!-- ## Zi: Filter Links Menu -->
|
||||||
|
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Nur verbundene Objekte"/>
|
||||||
<menu_item_call label="Papierkorb ausleeren" name="empty_trash"/>
|
<menu_item_call label="Papierkorb ausleeren" name="empty_trash"/>
|
||||||
</toggleable_menu>
|
</toggleable_menu>
|
||||||
|
|
|
||||||
|
|
@ -321,6 +321,20 @@
|
||||||
<menu_item_separator />
|
<menu_item_separator />
|
||||||
<!-- </FS:Zi> -->
|
<!-- </FS:Zi> -->
|
||||||
|
|
||||||
|
<!-- <FS:Zi> FIRE-31369: Add inventory filter for coalesced objects -->
|
||||||
|
<menu_item_check
|
||||||
|
name="inventory_filter_coalesced_objects_only"
|
||||||
|
label="Only Coalesced">
|
||||||
|
<on_click
|
||||||
|
function="Inventory.CoalescedObjects.Toggle"
|
||||||
|
parameter="coalesced_objects_only" />
|
||||||
|
<on_check
|
||||||
|
function="Inventory.CoalescedObjects.Check"
|
||||||
|
parameter="coalesced_objects_only" />
|
||||||
|
</menu_item_check>
|
||||||
|
<menu_item_separator />
|
||||||
|
<!-- </FS:Zi> -->
|
||||||
|
|
||||||
<menu_item_call
|
<menu_item_call
|
||||||
label="Empty Trash"
|
label="Empty Trash"
|
||||||
layout="topleft"
|
layout="topleft"
|
||||||
|
|
|
||||||
|
|
@ -375,7 +375,7 @@ things in this group. There's a broad variety of Abilities.
|
||||||
<name_list
|
<name_list
|
||||||
column_padding="0"
|
column_padding="0"
|
||||||
draw_heading="true"
|
draw_heading="true"
|
||||||
height="114"
|
height="110"
|
||||||
follows="left|top|right"
|
follows="left|top|right"
|
||||||
layout="topleft"
|
layout="topleft"
|
||||||
left="0"
|
left="0"
|
||||||
|
|
@ -399,7 +399,7 @@ things in this group. There's a broad variety of Abilities.
|
||||||
</name_list>
|
</name_list>
|
||||||
<button
|
<button
|
||||||
follows="top|left"
|
follows="top|left"
|
||||||
height="23"
|
height="20"
|
||||||
label="Ban Resident(s)"
|
label="Ban Resident(s)"
|
||||||
layout="topleft"
|
layout="topleft"
|
||||||
left="3"
|
left="3"
|
||||||
|
|
@ -408,7 +408,7 @@ things in this group. There's a broad variety of Abilities.
|
||||||
width="120" />
|
width="120" />
|
||||||
<button
|
<button
|
||||||
follows="top|left"
|
follows="top|left"
|
||||||
height="23"
|
height="20"
|
||||||
label="Remove Ban(s)"
|
label="Remove Ban(s)"
|
||||||
layout="topleft"
|
layout="topleft"
|
||||||
left_pad="5"
|
left_pad="5"
|
||||||
|
|
@ -417,8 +417,8 @@ things in this group. There's a broad variety of Abilities.
|
||||||
width="120" />
|
width="120" />
|
||||||
<button
|
<button
|
||||||
follows="top|left"
|
follows="top|left"
|
||||||
height="23"
|
height="20"
|
||||||
width="23"
|
width="20"
|
||||||
image_overlay="Refresh_Off"
|
image_overlay="Refresh_Off"
|
||||||
layout="topleft"
|
layout="topleft"
|
||||||
left_pad="5"
|
left_pad="5"
|
||||||
|
|
@ -427,7 +427,7 @@ things in this group. There's a broad variety of Abilities.
|
||||||
/>
|
/>
|
||||||
<text
|
<text
|
||||||
type="string"
|
type="string"
|
||||||
height="18"
|
height="20"
|
||||||
left_pad="5"
|
left_pad="5"
|
||||||
follows="top|left|right"
|
follows="top|left|right"
|
||||||
layout="topleft"
|
layout="topleft"
|
||||||
|
|
|
||||||
|
|
@ -30,5 +30,6 @@
|
||||||
<menu_item_check name="inventory_filter_only_modify" label="Uniquement les éléments modifiables"/>
|
<menu_item_check name="inventory_filter_only_modify" label="Uniquement les éléments modifiables"/>
|
||||||
<menu_item_check name="inventory_filter_only_copy" label="Uniquement les éléments copiables"/>
|
<menu_item_check name="inventory_filter_only_copy" label="Uniquement les éléments copiables"/>
|
||||||
<menu_item_check name="inventory_filter_only_transfer" label="Uniquement les éléments transférables"/>
|
<menu_item_check name="inventory_filter_only_transfer" label="Uniquement les éléments transférables"/>
|
||||||
|
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Uniquement les éléments regroupés"/>
|
||||||
<menu_item_call label="Vider la corbeille" name="empty_trash"/>
|
<menu_item_call label="Vider la corbeille" name="empty_trash"/>
|
||||||
</toggleable_menu>
|
</toggleable_menu>
|
||||||
|
|
|
||||||
|
|
@ -55,14 +55,17 @@
|
||||||
<menu_item_check label="Textures du terrain" name="Terrain Textures"/>
|
<menu_item_check label="Textures du terrain" name="Terrain Textures"/>
|
||||||
<menu_item_check label="Textures de la carte" name="World Map Textures"/>
|
<menu_item_check label="Textures de la carte" name="World Map Textures"/>
|
||||||
</menu>
|
</menu>
|
||||||
<menu_item_check label="Rotation automatique" name="Rotate Map"/>
|
<menu_item_check label="Nord en haut" name="North at top" />
|
||||||
|
<menu_item_check label="Caméra en haut" name="Camera at top" />
|
||||||
<menu_item_check label="Centrage automatique" name="Auto Center"/>
|
<menu_item_check label="Centrage automatique" name="Auto Center"/>
|
||||||
|
<menu_item_call label="Recentrer la carte" name="Re-center map" />
|
||||||
<menu label="Portée des discussions" name="Chat Distance Rings Menu">
|
<menu label="Portée des discussions" name="Chat Distance Rings Menu">
|
||||||
<menu_item_check label="Montrer la portée des discussions" name="Chat Distance Rings"/>
|
<menu_item_check label="Montrer la portée des discussions" name="Chat Distance Rings"/>
|
||||||
<menu_item_check label="Montrer la portée des murmures" name="Whisper Distance Ring"/>
|
<menu_item_check label="Montrer la portée des murmures" name="Whisper Distance Ring"/>
|
||||||
<menu_item_check label="Montrer la portée des discussions" name="Chat Distance Ring"/>
|
<menu_item_check label="Montrer la portée des discussions" name="Chat Distance Ring"/>
|
||||||
<menu_item_check label="Montrer la portée des cris" name="Shout Distance Ring"/>
|
<menu_item_check label="Montrer la portée des cris" name="Shout Distance Ring"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
<menu_item_call label="À propos du terrain" name="About Land" />
|
||||||
<menu_item_call label="Profil du lieu" name="Place Profile"/>
|
<menu_item_call label="Profil du lieu" name="Place Profile"/>
|
||||||
<menu_item_call label="Carte du Monde" name="World Map"/>
|
<menu_item_call label="Carte du Monde" name="World Map"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
|
||||||
|
|
@ -30,5 +30,6 @@
|
||||||
<menu_item_check name="inventory_filter_only_modify" label="Tylko modyfikowalne" />
|
<menu_item_check name="inventory_filter_only_modify" label="Tylko modyfikowalne" />
|
||||||
<menu_item_check name="inventory_filter_only_copy" label="Tylko kopiowalne" />
|
<menu_item_check name="inventory_filter_only_copy" label="Tylko kopiowalne" />
|
||||||
<menu_item_check name="inventory_filter_only_transfer" label="Tylko transferowalne" />
|
<menu_item_check name="inventory_filter_only_transfer" label="Tylko transferowalne" />
|
||||||
|
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Tylko podniesione razem" />
|
||||||
<menu_item_call label="Opróżnij Kosz" name="empty_trash"/>
|
<menu_item_call label="Opróżnij Kosz" name="empty_trash"/>
|
||||||
</toggleable_menu>
|
</toggleable_menu>
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,13 @@
|
||||||
[HOURS] ч
|
[HOURS] ч
|
||||||
</floater.string>
|
</floater.string>
|
||||||
<floater.string name="Hour">
|
<floater.string name="Hour">
|
||||||
ч
|
ч.
|
||||||
</floater.string>
|
</floater.string>
|
||||||
<floater.string name="Minutes">
|
<floater.string name="Minutes">
|
||||||
[MINUTES] мин.
|
[MINUTES] мин.
|
||||||
</floater.string>
|
</floater.string>
|
||||||
<floater.string name="Minute">
|
<floater.string name="Minute">
|
||||||
минута
|
мин.
|
||||||
</floater.string>
|
</floater.string>
|
||||||
<floater.string name="Seconds">
|
<floater.string name="Seconds">
|
||||||
[SECONDS] с.
|
[SECONDS] с.
|
||||||
|
|
@ -431,6 +431,10 @@
|
||||||
<check_box label="Включить голос" name="parcel_enable_voice_channel"/>
|
<check_box label="Включить голос" name="parcel_enable_voice_channel"/>
|
||||||
<check_box label="Включить голос (устанавливается владельцем острова)" name="parcel_enable_voice_channel_is_estate_disabled" width="300" />
|
<check_box label="Включить голос (устанавливается владельцем острова)" name="parcel_enable_voice_channel_is_estate_disabled" width="300" />
|
||||||
<check_box label="Ограничить голос границами данного участка" name="parcel_enable_voice_channel_local"/>
|
<check_box label="Ограничить голос границами данного участка" name="parcel_enable_voice_channel_local"/>
|
||||||
|
<text name="media">
|
||||||
|
Медиа:
|
||||||
|
</text>
|
||||||
|
<check_box label="Непонятные Медина на объекте" name="obscure_moap" tool_tip="Медиа на объекте, расположенном за пределами участка, не должен автоматически воспроизводиться для агента внутри этой участка и наоборот."/>
|
||||||
</panel>
|
</panel>
|
||||||
<panel label="Доступ" name="land_access_panel">
|
<panel label="Доступ" name="land_access_panel">
|
||||||
<panel.string name="access_estate_defined">
|
<panel.string name="access_estate_defined">
|
||||||
|
|
|
||||||
|
|
@ -29,5 +29,6 @@
|
||||||
<menu_item_check name="inventory_filter_only_modify" label="Только изменяемое"/>
|
<menu_item_check name="inventory_filter_only_modify" label="Только изменяемое"/>
|
||||||
<menu_item_check name="inventory_filter_only_copy" label="Только копируемое"/>
|
<menu_item_check name="inventory_filter_only_copy" label="Только копируемое"/>
|
||||||
<menu_item_check name="inventory_filter_only_transfer" label="Показать передаваемое"/>
|
<menu_item_check name="inventory_filter_only_transfer" label="Показать передаваемое"/>
|
||||||
|
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Только объединенные"/>
|
||||||
<menu_item_call label="Очистить корзину" name="empty_trash"/>
|
<menu_item_call label="Очистить корзину" name="empty_trash"/>
|
||||||
</toggleable_menu>
|
</toggleable_menu>
|
||||||
|
|
|
||||||
|
|
@ -40,10 +40,10 @@
|
||||||
<menu_item_call label="Начать отслеживание" name="Start Tracking"/>
|
<menu_item_call label="Начать отслеживание" name="Start Tracking"/>
|
||||||
<menu_item_call label="Прекратить отслеживание" name="Stop Tracking"/>
|
<menu_item_call label="Прекратить отслеживание" name="Stop Tracking"/>
|
||||||
<menu label="Приближение" name="Minimap Zoom">
|
<menu label="Приближение" name="Minimap Zoom">
|
||||||
<menu_item_call label="Сильное" name="Zoom Close"/>
|
<menu_item_check label="Очень близко" name="Zoom very close"/>
|
||||||
<menu_item_call label="Среднее" name="Zoom Medium"/>
|
<menu_item_check label="Близко" name="Zoom close"/>
|
||||||
<menu_item_call label="Слабое" name="Zoom Far"/>
|
<menu_item_check label="Среднее (По умолчанию)" name="Zoom medium"/>
|
||||||
<menu_item_call label="По умолчанию" name="Zoom Default"/>
|
<menu_item_check label="Далеко" name="Zoom far"/>
|
||||||
</menu>
|
</menu>
|
||||||
<menu label="Показать" name="Minimap Show">
|
<menu label="Показать" name="Minimap Show">
|
||||||
<menu_item_check label="Объекты" name="Objects"/>
|
<menu_item_check label="Объекты" name="Objects"/>
|
||||||
|
|
@ -55,14 +55,17 @@
|
||||||
<menu_item_check label="Текстуры земли" name="Terrain Textures"/>
|
<menu_item_check label="Текстуры земли" name="Terrain Textures"/>
|
||||||
<menu_item_check label="Текстуры карты мира" name="World Map Textures"/>
|
<menu_item_check label="Текстуры карты мира" name="World Map Textures"/>
|
||||||
</menu>
|
</menu>
|
||||||
<menu_item_check label="Повернуть карту" name="Rotate Map"/>
|
<menu_item_check label="Север вверху" name="North at top"/>
|
||||||
<menu_item_check label="Автоцентрирование" name="Auto Center"/>
|
<menu_item_check label="Камера вверху" name="Camera at top"/>
|
||||||
|
<menu_item_check label="Автоцентрирование карты" name="Auto-center map"/>
|
||||||
|
<menu_item_call label="Отцентровать карту" name="Re-center map"/>
|
||||||
<menu label="Кольца покрытия чата" name="Chat Distance Rings Menu">
|
<menu label="Кольца покрытия чата" name="Chat Distance Rings Menu">
|
||||||
<menu_item_check label="Показать Кольца дистанций" name="Chat Distance Rings"/>
|
<menu_item_check label="Показать Кольца дистанций" name="Chat Distance Rings"/>
|
||||||
<menu_item_check label="Показать Кольцо дистанции Шепота" name="Whisper Distance Ring"/>
|
<menu_item_check label="Показать Кольцо дистанции Шепота" name="Whisper Distance Ring"/>
|
||||||
<menu_item_check label="Показать Кольцо дистанции Чата" name="Chat Distance Ring"/>
|
<menu_item_check label="Показать Кольцо дистанции Чата" name="Chat Distance Ring"/>
|
||||||
<menu_item_check label="Показать Кольцо дистанции Крика" name="Shout Distance Ring"/>
|
<menu_item_check label="Показать Кольцо дистанции Крика" name="Shout Distance Ring"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
<menu_item_call label="О земле" name="About Land"/>
|
||||||
<menu_item_call label="Профиль места" name="Place Profile"/>
|
<menu_item_call label="Профиль места" name="Place Profile"/>
|
||||||
<menu_item_call label="Карта мира" name="World Map"/>
|
<menu_item_call label="Карта мира" name="World Map"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,7 @@
|
||||||
<menu_item_check name="inventory_filter_show_links" label="Zeige Links"/>
|
<menu_item_check name="inventory_filter_show_links" label="Zeige Links"/>
|
||||||
<menu_item_check name="inventory_filter_only_links" label="Zeige nur Links"/>
|
<menu_item_check name="inventory_filter_only_links" label="Zeige nur Links"/>
|
||||||
<menu_item_check name="inventory_filter_hide_links" label="Links ausblenden"/>
|
<menu_item_check name="inventory_filter_hide_links" label="Links ausblenden"/>
|
||||||
|
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Nur verbundene Objekte"/>
|
||||||
</menu>
|
</menu>
|
||||||
</menu_bar>
|
</menu_bar>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -105,15 +105,6 @@
|
||||||
show_icons="false"
|
show_icons="false"
|
||||||
show_voice_volume="false"
|
show_voice_volume="false"
|
||||||
width="280" />
|
width="280" />
|
||||||
<panel
|
|
||||||
filename="panel_avatar_list_item.xml"
|
|
||||||
follows="left|right|top"
|
|
||||||
height="24"
|
|
||||||
layout="topleft"
|
|
||||||
left="0"
|
|
||||||
name="non_avatar_caller"
|
|
||||||
top="10"
|
|
||||||
width="276" />
|
|
||||||
<text
|
<text
|
||||||
follows="all"
|
follows="all"
|
||||||
font="SansSerif"
|
font="SansSerif"
|
||||||
|
|
|
||||||
|
|
@ -486,6 +486,17 @@
|
||||||
parameter="only_transfer" />
|
parameter="only_transfer" />
|
||||||
</menu_item_check>
|
</menu_item_check>
|
||||||
<!-- </FS:Zi> -->
|
<!-- </FS:Zi> -->
|
||||||
|
<menu_item_separator />
|
||||||
|
<menu_item_check
|
||||||
|
name="inventory_filter_coalesced_objects_only"
|
||||||
|
label="Only Coalesced">
|
||||||
|
<on_click
|
||||||
|
function="Inventory.CoalescedObjects.Toggle"
|
||||||
|
parameter="coalesced_objects_only" />
|
||||||
|
<on_check
|
||||||
|
function="Inventory.CoalescedObjects.Check"
|
||||||
|
parameter="coalesced_objects_only" />
|
||||||
|
</menu_item_check>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
</menu_bar>
|
</menu_bar>
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@
|
||||||
<menu_item_check name="inventory_filter_only_modify" label="Modifiables uniquement" />
|
<menu_item_check name="inventory_filter_only_modify" label="Modifiables uniquement" />
|
||||||
<menu_item_check name="inventory_filter_only_copy" label="Seulement copiables" />
|
<menu_item_check name="inventory_filter_only_copy" label="Seulement copiables" />
|
||||||
<menu_item_check name="inventory_filter_only_transfer" label="Seulement transférables" />
|
<menu_item_check name="inventory_filter_only_transfer" label="Seulement transférables" />
|
||||||
<menu_item_check name="inventory_show_partial_results" label="Afficher les résultats partiels de la recherche" />
|
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Uniquement les éléments regroupés"/>
|
||||||
</menu>
|
</menu>
|
||||||
</menu_bar>
|
</menu_bar>
|
||||||
<filter_editor label="Inventaire de filtres" name="inventory search editor" tool_tip="Saisissez un ou plusieurs mots à rechercher, en les séparant par un signe '+' "/>
|
<filter_editor label="Inventaire de filtres" name="inventory search editor" tool_tip="Saisissez un ou plusieurs mots à rechercher, en les séparant par un signe '+' "/>
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,7 @@
|
||||||
<menu_item_check name="inventory_filter_only_modify" label="Tylko modyfikowalne" />
|
<menu_item_check name="inventory_filter_only_modify" label="Tylko modyfikowalne" />
|
||||||
<menu_item_check name="inventory_filter_only_copy" label="Tylko kopiowalne" />
|
<menu_item_check name="inventory_filter_only_copy" label="Tylko kopiowalne" />
|
||||||
<menu_item_check name="inventory_filter_only_transfer" label="Tylko transferowalne" />
|
<menu_item_check name="inventory_filter_only_transfer" label="Tylko transferowalne" />
|
||||||
|
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Tylko podniesione razem" />
|
||||||
<menu_item_check name="inventory_show_partial_results" label="Pokaż częściowe wyniki wyszukiwania" />
|
<menu_item_check name="inventory_show_partial_results" label="Pokaż częściowe wyniki wyszukiwania" />
|
||||||
</menu>
|
</menu>
|
||||||
</menu_bar>
|
</menu_bar>
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,7 @@
|
||||||
<menu_item_check name="inventory_filter_only_modify" label="Только изменяемые"/>
|
<menu_item_check name="inventory_filter_only_modify" label="Только изменяемые"/>
|
||||||
<menu_item_check name="inventory_filter_only_copy" label="Только копируемые"/>
|
<menu_item_check name="inventory_filter_only_copy" label="Только копируемые"/>
|
||||||
<menu_item_check name="inventory_filter_only_transfer" label="Только передаваемые"/>
|
<menu_item_check name="inventory_filter_only_transfer" label="Только передаваемые"/>
|
||||||
|
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Только объединенные"/>
|
||||||
</menu>
|
</menu>
|
||||||
</menu_bar>
|
</menu_bar>
|
||||||
<filter_editor label="Фильтр" name="inventory search editor" tool_tip="Напишите одно или несколько слов для поиска. Для разделения используйте '+' "/>
|
<filter_editor label="Фильтр" name="inventory search editor" tool_tip="Напишите одно или несколько слов для поиска. Для разделения используйте '+' "/>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue