Pull from viewer-experience
commit
d8e1b48328
|
|
@ -111,6 +111,8 @@ LLWindow::LLWindow(LLWindowCallbacks* callbacks, BOOL fullscreen, U32 flags)
|
|||
mCursorHidden(FALSE),
|
||||
mBusyCount(0),
|
||||
mIsMouseClipping(FALSE),
|
||||
mMinWindowWidth(1024), // just a sanity check - actual minimum size is stored in settings.xml
|
||||
mMinWindowHeight(768),
|
||||
mSwapMethod(SWAP_METHOD_UNDEFINED),
|
||||
mHideCursorPermanent(FALSE),
|
||||
mFlags(flags),
|
||||
|
|
@ -179,6 +181,13 @@ void *LLWindow::getMediaWindow()
|
|||
return getPlatformWindow();
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLWindow::setMinSize(U32 min_width, U32 min_height)
|
||||
{
|
||||
mMinWindowWidth = min_width;
|
||||
mMinWindowHeight = min_height;
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLWindow::processMiscNativeEvents()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ public:
|
|||
virtual BOOL getSize(LLCoordWindow *size) = 0;
|
||||
virtual BOOL setPosition(LLCoordScreen position) = 0;
|
||||
virtual BOOL setSize(LLCoordScreen size) = 0;
|
||||
virtual void setMinSize(U32 min_width, U32 min_height);
|
||||
virtual BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) = 0;
|
||||
virtual BOOL setCursorPosition(LLCoordWindow position) = 0;
|
||||
virtual BOOL getCursorPosition(LLCoordWindow *position) = 0;
|
||||
|
|
@ -188,6 +189,8 @@ protected:
|
|||
BOOL mHideCursorPermanent;
|
||||
U32 mFlags;
|
||||
U16 mHighSurrogate;
|
||||
U32 mMinWindowWidth;
|
||||
U32 mMinWindowHeight;
|
||||
|
||||
// Handle a UTF-16 encoding unit received from keyboard.
|
||||
// Converting the series of UTF-16 encoding units to UTF-32 data,
|
||||
|
|
|
|||
|
|
@ -1,25 +1,25 @@
|
|||
/**
|
||||
/**
|
||||
* @file llwindowmacosx.cpp
|
||||
* @brief Platform-dependent implementation of llwindow
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
*
|
||||
* 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;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
|
@ -220,10 +220,10 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks,
|
|||
// Route them to a dummy callback structure until the end of constructor.
|
||||
LLWindowCallbacks null_callbacks;
|
||||
mCallbacks = &null_callbacks;
|
||||
|
||||
|
||||
// Voodoo for calling cocoa from carbon (see llwindowmacosx-objc.mm).
|
||||
setupCocoa();
|
||||
|
||||
|
||||
// Initialize the keyboard
|
||||
gKeyboard = new LLKeyboardMacOSX();
|
||||
gKeyboard->setCallbacks(callbacks);
|
||||
|
|
@ -254,10 +254,10 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks,
|
|||
mRawKeyEvent = NULL;
|
||||
mFSAASamples = fsaa_samples;
|
||||
mForceRebuild = FALSE;
|
||||
|
||||
|
||||
// For reasons that aren't clear to me, LLTimers seem to be created in the "started" state.
|
||||
// Since the started state of this one is used to track whether the NMRec has been installed, it wants to start out in the "stopped" state.
|
||||
mBounceTimer.stop();
|
||||
mBounceTimer.stop();
|
||||
|
||||
// Get the original aspect ratio of the main device.
|
||||
mOriginalAspectRatio = (double)CGDisplayPixelsWide(mDisplay) / (double)CGDisplayPixelsHigh(mDisplay);
|
||||
|
|
@ -270,7 +270,7 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks,
|
|||
mMoveEventCampartorUPP = NewEventComparatorUPP(staticMoveEventComparator);
|
||||
mGlobalHandlerRef = NULL;
|
||||
mWindowHandlerRef = NULL;
|
||||
|
||||
|
||||
mDragOverrideCursor = -1;
|
||||
|
||||
// We're not clipping yet
|
||||
|
|
@ -445,7 +445,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
|
|||
mFullscreenBits = -1;
|
||||
mFullscreenRefresh = -1;
|
||||
|
||||
std::string error= llformat("Unable to run fullscreen at %d x %d.\nRunning in window.", width, height);
|
||||
std::string error= llformat("Unable to run fullscreen at %d x %d.\nRunning in window.", width, height);
|
||||
OSMessageBox(error, "Error", OSMB_OK);
|
||||
}
|
||||
}
|
||||
|
|
@ -477,7 +477,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
|
|||
kFirstWindowOfClass,
|
||||
true,
|
||||
(long)this);
|
||||
|
||||
|
||||
if (!mWindow)
|
||||
{
|
||||
setupFailure("Window creation error", "Error", OSMB_OK);
|
||||
|
|
@ -493,7 +493,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
|
|||
InstallStandardEventHandler(GetWindowEventTarget(mWindow));
|
||||
InstallWindowEventHandler(mWindow, mEventHandlerUPP, GetEventTypeCount (WindowHandlerEventList), WindowHandlerEventList, (void*)this, &mWindowHandlerRef); // add event handler
|
||||
#if LL_OS_DRAGDROP_ENABLED
|
||||
InstallTrackingHandler( dragTrackingHandler, mWindow, (void*)this );
|
||||
InstallTrackingHandler( dragTrackingHandler, mWindow, (void*)this );
|
||||
InstallReceiveHandler( dragReceiveHandler, mWindow, (void*)this );
|
||||
#endif // LL_OS_DRAGDROP_ENABLED
|
||||
}
|
||||
|
|
@ -790,7 +790,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
|
|||
LL_DEBUGS("GLinit") << "Keeping vertical sync" << LL_ENDL;
|
||||
frames_per_swap = 1;
|
||||
}
|
||||
aglSetInteger(mContext, AGL_SWAP_INTERVAL, &frames_per_swap);
|
||||
aglSetInteger(mContext, AGL_SWAP_INTERVAL, &frames_per_swap);
|
||||
|
||||
//enable multi-threaded OpenGL
|
||||
if (sUseMultGL)
|
||||
|
|
@ -803,7 +803,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
|
|||
if (cgl_err != kCGLNoError )
|
||||
{
|
||||
LL_DEBUGS("GLInit") << "Multi-threaded OpenGL not available." << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("GLInit") << "Multi-threaded OpenGL enabled." << LL_ENDL;
|
||||
|
|
@ -1109,7 +1109,7 @@ BOOL LLWindowMacOSX::maximize()
|
|||
{
|
||||
ZoomWindow(mWindow, inContent, true);
|
||||
}
|
||||
|
||||
|
||||
return mMaximized;
|
||||
}
|
||||
|
||||
|
|
@ -1433,7 +1433,7 @@ static void fixOrigin(void)
|
|||
GrafPtr port;
|
||||
Rect portrect;
|
||||
|
||||
::GetPort(&port);
|
||||
::GetPort(&port);
|
||||
::GetPortBounds(port, &portrect);
|
||||
if((portrect.left != 0) || (portrect.top != 0))
|
||||
{
|
||||
|
|
@ -1447,17 +1447,17 @@ BOOL LLWindowMacOSX::getCursorPosition(LLCoordWindow *position)
|
|||
Point cursor_point;
|
||||
LLCoordScreen screen_pos;
|
||||
GrafPtr save;
|
||||
|
||||
|
||||
if(mWindow == NULL)
|
||||
return FALSE;
|
||||
|
||||
|
||||
::GetPort(&save);
|
||||
::SetPort(GetWindowPort(mWindow));
|
||||
fixOrigin();
|
||||
|
||||
// gets the mouse location in local coordinates
|
||||
::GetMouse(&cursor_point);
|
||||
|
||||
|
||||
// lldebugs << "getCursorPosition(): cursor is at " << cursor_point.h << ", " << cursor_point.v << " port origin: " << portrect.left << ", " << portrect.top << llendl;
|
||||
|
||||
::SetPort(save);
|
||||
|
|
@ -1522,7 +1522,7 @@ F32 LLWindowMacOSX::getNativeAspectRatio()
|
|||
{
|
||||
// The constructor for this class grabs the aspect ratio of the monitor before doing any resolution
|
||||
// switching, and stashes it in mOriginalAspectRatio. Here, we just return it.
|
||||
|
||||
|
||||
if (mOverrideAspectRatio > 0.f)
|
||||
{
|
||||
return mOverrideAspectRatio;
|
||||
|
|
@ -1997,7 +1997,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
if (mPreeditor
|
||||
&& (result = GetEventParameter(event, kEventParamTextInputSendFixLen,
|
||||
typeLongInteger, ¶m_type, sizeof(fix_len), NULL, &fix_len)) == noErr
|
||||
&& typeLongInteger == param_type
|
||||
&& typeLongInteger == param_type
|
||||
&& (result = GetEventParameter(event, kEventParamTextInputSendText,
|
||||
typeUnicodeText, ¶m_type, 0, &text_len, NULL)) == noErr
|
||||
&& typeUnicodeText == param_type)
|
||||
|
|
@ -2017,7 +2017,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
mPreeditor->markAsPreedit(location, length);
|
||||
}
|
||||
mPreeditor->resetPreedit();
|
||||
|
||||
|
||||
// Receive the text from input method.
|
||||
U16 *const text = new U16[text_len / sizeof(U16)];
|
||||
GetEventParameter(event, kEventParamTextInputSendText, typeUnicodeText, NULL, text_len, NULL, text);
|
||||
|
|
@ -2056,11 +2056,11 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
GetEventParameter(event, kEventParamTextInputSendHiliteRng, typeTextRangeArray,
|
||||
NULL, text_range_array_size, NULL, text_range_array);
|
||||
|
||||
// WARNING: We assume ranges are in ascending order,
|
||||
// WARNING: We assume ranges are in ascending order,
|
||||
// although the condition is undocumented. It seems
|
||||
// OK to assume this. I also assumed
|
||||
// the ranges are contiguous in previous versions, but I
|
||||
// have heard a rumore that older versions os ATOK may
|
||||
// have heard a rumore that older versions os ATOK may
|
||||
// return ranges with some _gap_. I don't know whether
|
||||
// it is true, but I'm preparing my code for the case.
|
||||
|
||||
|
|
@ -2124,7 +2124,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case kEventTextInputUnicodeForKeyEvent:
|
||||
{
|
||||
UInt32 modifiers = 0;
|
||||
|
|
@ -2133,7 +2133,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
// First, process the raw event.
|
||||
{
|
||||
EventRef rawEvent = NULL;
|
||||
|
||||
|
||||
// Get the original event and extract the modifier keys, so we can ignore command-key events.
|
||||
if (GetEventParameter(event, kEventParamTextInputSendKeyboardEvent, typeEventRef, NULL, sizeof(rawEvent), NULL, &rawEvent) == noErr)
|
||||
{
|
||||
|
|
@ -2142,7 +2142,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
|
||||
// and call this function recursively to handle the raw key event.
|
||||
eventHandler (myHandler, rawEvent);
|
||||
|
||||
|
||||
// save the raw event until we're done processing the unicode input as well.
|
||||
mRawKeyEvent = rawEvent;
|
||||
}
|
||||
|
|
@ -2173,7 +2173,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
else
|
||||
{
|
||||
MASK mask = LLWindowMacOSX::modifiersToMask(modifiers);
|
||||
|
||||
|
||||
llassert( actualType == typeUnicodeText );
|
||||
|
||||
// The result is a UTF16 buffer. Pass the characters in turn to handleUnicodeChar.
|
||||
|
|
@ -2199,7 +2199,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
result = err;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case kEventTextInputOffsetToPos:
|
||||
{
|
||||
EventParamType param_type;
|
||||
|
|
@ -2212,7 +2212,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
S32 preedit, preedit_length;
|
||||
mPreeditor->getPreeditRange(&preedit, &preedit_length);
|
||||
const LLWString & text = mPreeditor->getPreeditString();
|
||||
|
||||
|
||||
LLCoordGL caret_coord;
|
||||
LLRect preedit_bounds;
|
||||
if (0 <= offset
|
||||
|
|
@ -2226,10 +2226,10 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
qd_point.h = caret_base_coord_screen.mX;
|
||||
qd_point.v = caret_base_coord_screen.mY;
|
||||
SetEventParameter(event, kEventParamTextInputReplyPoint, typeQDPoint, sizeof(qd_point), &qd_point);
|
||||
|
||||
|
||||
short line_height = (short) preedit_bounds.getHeight();
|
||||
SetEventParameter(event, kEventParamTextInputReplyLineHeight, typeShortInteger, sizeof(line_height), &line_height);
|
||||
|
||||
|
||||
result = noErr;
|
||||
}
|
||||
else
|
||||
|
|
@ -2282,7 +2282,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
case kEventRawKeyRepeat:
|
||||
if (gDebugWindowProc)
|
||||
{
|
||||
printf("key down, key code = 0x%08x, char code = 0x%02x (%c), modifiers = 0x%08x\n",
|
||||
printf("key down, key code = 0x%08x, char code = 0x%02x (%c), modifiers = 0x%08x\n",
|
||||
(unsigned int)keyCode, charCode, (char)charCode, (unsigned int)modifiers);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
|
@ -2293,7 +2293,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
case kEventRawKeyUp:
|
||||
if (gDebugWindowProc)
|
||||
{
|
||||
printf("key up, key code = 0x%08x, char code = 0x%02x (%c), modifiers = 0x%08x\n",
|
||||
printf("key up, key code = 0x%08x, char code = 0x%02x (%c), modifiers = 0x%08x\n",
|
||||
(unsigned int)keyCode, charCode, (char)charCode, (unsigned int)modifiers);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
|
@ -2351,7 +2351,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
}
|
||||
|
||||
// When the state of the 'Fn' key (the one that changes some of the mappings on a powerbook/macbook keyboard
|
||||
// to an embedded keypad) changes, it may subsequently cause a key up event to be lost, which may lead to
|
||||
// to an embedded keypad) changes, it may subsequently cause a key up event to be lost, which may lead to
|
||||
// a movement key getting "stuck" down. This is bad.
|
||||
// This is an OS bug -- even the GetKeys() API doesn't tell you the key has been released.
|
||||
// This workaround causes all held-down keys to be reset whenever the state of the Fn key changes. This isn't
|
||||
|
|
@ -2361,14 +2361,14 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
if (gDebugWindowProc) printf("Fn key state change event\n");
|
||||
gKeyboard->resetKeys();
|
||||
}
|
||||
|
||||
|
||||
if (gDebugWindowProc) fflush(stdout);
|
||||
|
||||
mLastModifiers = modifiers;
|
||||
result = eventNotHandledErr;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
mRawKeyEvent = NULL;
|
||||
}
|
||||
break;
|
||||
|
|
@ -2463,7 +2463,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
case kEventMouseButtonSecondary:
|
||||
mCallbacks->handleRightMouseDown(this, outCoords, mask);
|
||||
break;
|
||||
|
||||
|
||||
case kEventMouseButtonTertiary:
|
||||
mCallbacks->handleMiddleMouseDown(this, outCoords, mask);
|
||||
break;
|
||||
|
|
@ -2525,7 +2525,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
|
||||
case kEventClassWindow:
|
||||
switch(evtKind)
|
||||
{
|
||||
{
|
||||
case kEventWindowActivated:
|
||||
if (mTSMDocument)
|
||||
{
|
||||
|
|
@ -2540,20 +2540,20 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
}
|
||||
mCallbacks->handleFocusLost(this);
|
||||
break;
|
||||
|
||||
|
||||
case kEventWindowBoundsChanging:
|
||||
{
|
||||
// This is where we would constrain move/resize to a particular screen
|
||||
|
||||
const S32 MIN_WIDTH = 1024;
|
||||
const S32 MIN_HEIGHT = 768;
|
||||
|
||||
const S32 MIN_WIDTH = mMinWindowWidth;
|
||||
const S32 MIN_HEIGHT = mMinWindowHeight;
|
||||
|
||||
Rect currentBounds;
|
||||
Rect previousBounds;
|
||||
|
||||
GetEventParameter(event, kEventParamCurrentBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, ¤tBounds);
|
||||
GetEventParameter(event, kEventParamPreviousBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, &previousBounds);
|
||||
|
||||
|
||||
// Put an offset into window un-maximize operation since the kEventWindowGetIdealSize
|
||||
// event only allows the specification of size and not position.
|
||||
if (mMaximized)
|
||||
|
|
@ -2561,7 +2561,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
short leftOffset = mPreviousWindowRect.left - currentBounds.left;
|
||||
currentBounds.left += leftOffset;
|
||||
currentBounds.right += leftOffset;
|
||||
|
||||
|
||||
short topOffset = mPreviousWindowRect.top - currentBounds.top;
|
||||
currentBounds.top += topOffset;
|
||||
currentBounds.bottom += topOffset;
|
||||
|
|
@ -2581,7 +2581,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
{
|
||||
currentBounds.bottom = currentBounds.top + MIN_HEIGHT;
|
||||
}
|
||||
|
||||
|
||||
SetEventParameter(event, kEventParamCurrentBounds, typeQDRectangle, sizeof(Rect), ¤tBounds);
|
||||
result = noErr;
|
||||
}
|
||||
|
|
@ -2592,38 +2592,38 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
// Get new window bounds
|
||||
Rect newBounds;
|
||||
GetEventParameter(event, kEventParamCurrentBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, &newBounds);
|
||||
|
||||
|
||||
// Get previous window bounds
|
||||
Rect oldBounds;
|
||||
GetEventParameter(event, kEventParamPreviousBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, &oldBounds);
|
||||
|
||||
|
||||
// Determine if the new size is larger than the old
|
||||
bool newBoundsLarger = ((newBounds.right - newBounds.left) >= (oldBounds.right - oldBounds.left));
|
||||
newBoundsLarger &= ((newBounds.bottom - newBounds.top) >= (oldBounds.bottom - oldBounds.top));
|
||||
|
||||
|
||||
// Check to see if this is a zoom event (+ button on window pane)
|
||||
unsigned int eventParams;
|
||||
GetEventParameter(event, kEventParamAttributes, typeUInt32, NULL, sizeof(int), NULL, &eventParams);
|
||||
bool isZoomEvent = ((eventParams & kWindowBoundsChangeZoom) != 0);
|
||||
|
||||
|
||||
// Maximized flag is if zoom event and increasing window size
|
||||
mMaximized = (isZoomEvent && newBoundsLarger);
|
||||
|
||||
|
||||
aglUpdateContext(mContext);
|
||||
|
||||
|
||||
mCallbacks->handleResize(this, newBounds.right - newBounds.left, newBounds.bottom - newBounds.top);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case kEventWindowGetIdealSize:
|
||||
// Only recommend a new ideal size when un-maximizing
|
||||
if (mMaximized == TRUE)
|
||||
{
|
||||
Point nonMaximizedSize;
|
||||
|
||||
|
||||
nonMaximizedSize.v = mPreviousWindowRect.bottom - mPreviousWindowRect.top;
|
||||
nonMaximizedSize.h = mPreviousWindowRect.right - mPreviousWindowRect.left;
|
||||
|
||||
|
||||
SetEventParameter(event, kEventParamDimensions, typeQDPoint, sizeof(Point), &nonMaximizedSize);
|
||||
result = noErr;
|
||||
}
|
||||
|
|
@ -2678,7 +2678,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
if (mPreeditor)
|
||||
{
|
||||
switch(evtKind)
|
||||
{
|
||||
{
|
||||
|
||||
case kEventTSMDocumentAccessGetLength:
|
||||
{
|
||||
|
|
@ -2697,14 +2697,14 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
{
|
||||
// Return the selected range, excluding preedit.
|
||||
// In our preeditor, preedit and selection are exclusive, so,
|
||||
// when it has a preedit, there is no selection and the
|
||||
// when it has a preedit, there is no selection and the
|
||||
// insertion point is on the preedit that corrupses into the
|
||||
// beginning of the preedit when the preedit was removed.
|
||||
|
||||
S32 preedit, preedit_length;
|
||||
mPreeditor->getPreeditRange(&preedit, &preedit_length);
|
||||
const LLWString & text = mPreeditor->getPreeditString();
|
||||
|
||||
|
||||
CFRange range;
|
||||
if (preedit_length)
|
||||
{
|
||||
|
|
@ -2768,7 +2768,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
|
|||
memcpy(target_pointer, text_utf16.c_str() + range.location, range.length * sizeof(UniChar));
|
||||
|
||||
// Note that result has already been set above.
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -2815,14 +2815,14 @@ const char* cursorIDToName(int id)
|
|||
case UI_CURSOR_TOOLPLAY: return "UI_CURSOR_TOOLPLAY";
|
||||
case UI_CURSOR_TOOLPAUSE: return "UI_CURSOR_TOOLPAUSE";
|
||||
case UI_CURSOR_TOOLMEDIAOPEN: return "UI_CURSOR_TOOLMEDIAOPEN";
|
||||
case UI_CURSOR_PIPETTE: return "UI_CURSOR_PIPETTE";
|
||||
case UI_CURSOR_PIPETTE: return "UI_CURSOR_PIPETTE";
|
||||
case UI_CURSOR_TOOLSIT: return "UI_CURSOR_TOOLSIT";
|
||||
case UI_CURSOR_TOOLBUY: return "UI_CURSOR_TOOLBUY";
|
||||
case UI_CURSOR_TOOLOPEN: return "UI_CURSOR_TOOLOPEN";
|
||||
}
|
||||
|
||||
llerrs << "cursorIDToName: unknown cursor id" << id << llendl;
|
||||
|
||||
|
||||
return "UI_CURSOR_ARROW";
|
||||
}
|
||||
|
||||
|
|
@ -2838,7 +2838,7 @@ static void initPixmapCursor(int cursorid, int hotspotX, int hotspotY)
|
|||
fullpath += gDirUtilp->getDirDelimiter();
|
||||
fullpath += cursorIDToName(cursorid);
|
||||
fullpath += ".tif";
|
||||
|
||||
|
||||
gCursors[cursorid] = createImageCursor(fullpath.c_str(), hotspotX, hotspotY);
|
||||
}
|
||||
|
||||
|
|
@ -2846,20 +2846,20 @@ void LLWindowMacOSX::setCursor(ECursorType cursor)
|
|||
{
|
||||
OSStatus result = noErr;
|
||||
|
||||
if (mDragOverrideCursor != -1)
|
||||
if (mDragOverrideCursor != -1)
|
||||
{
|
||||
// A drag is in progress...remember the requested cursor and we'll
|
||||
// restore it when it is done
|
||||
mCurrentCursor = cursor;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (cursor == UI_CURSOR_ARROW
|
||||
&& mBusyCount > 0)
|
||||
{
|
||||
cursor = UI_CURSOR_WORKING;
|
||||
}
|
||||
|
||||
|
||||
if(mCurrentCursor == cursor)
|
||||
return;
|
||||
|
||||
|
|
@ -3269,14 +3269,14 @@ void LLWindowMacOSX::spawnWebBrowser(const std::string& escaped_url, bool async)
|
|||
LLSD LLWindowMacOSX::getNativeKeyData()
|
||||
{
|
||||
LLSD result = LLSD::emptyMap();
|
||||
|
||||
|
||||
if(mRawKeyEvent)
|
||||
{
|
||||
char char_code = 0;
|
||||
UInt32 key_code = 0;
|
||||
UInt32 modifiers = 0;
|
||||
UInt32 keyboard_type = 0;
|
||||
|
||||
|
||||
GetEventParameter (mRawKeyEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(char), NULL, &char_code);
|
||||
GetEventParameter (mRawKeyEvent, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &key_code);
|
||||
GetEventParameter (mRawKeyEvent, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers);
|
||||
|
|
@ -3286,7 +3286,7 @@ LLSD LLWindowMacOSX::getNativeKeyData()
|
|||
result["key_code"] = (S32)key_code;
|
||||
result["modifiers"] = (S32)modifiers;
|
||||
result["keyboard_type"] = (S32)keyboard_type;
|
||||
|
||||
|
||||
#if 0
|
||||
// This causes trouble for control characters -- apparently character codes less than 32 (escape, control-A, etc)
|
||||
// cause llsd serialization to create XML that the llsd deserializer won't parse!
|
||||
|
|
@ -3295,7 +3295,7 @@ LLSD LLWindowMacOSX::getNativeKeyData()
|
|||
EventParamType actualType = typeUTF8Text;
|
||||
UInt32 actualSize = 0;
|
||||
char *buffer = NULL;
|
||||
|
||||
|
||||
err = GetEventParameter (mRawKeyEvent, kEventParamKeyUnicodes, typeUTF8Text, &actualType, 0, &actualSize, NULL);
|
||||
if(err == noErr)
|
||||
{
|
||||
|
|
@ -3308,7 +3308,7 @@ LLSD LLWindowMacOSX::getNativeKeyData()
|
|||
}
|
||||
delete[] buffer;
|
||||
}
|
||||
|
||||
|
||||
result["unicode"] = unicode;
|
||||
#endif
|
||||
|
||||
|
|
@ -3316,7 +3316,7 @@ LLSD LLWindowMacOSX::getNativeKeyData()
|
|||
|
||||
|
||||
lldebugs << "native key data is: " << result << llendl;
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -3363,17 +3363,17 @@ void *LLWindowMacOSX::getPlatformWindow()
|
|||
|
||||
void *LLWindowMacOSX::getMediaWindow()
|
||||
{
|
||||
/*
|
||||
Mozilla needs to be initialized with a WindowRef to function properly.
|
||||
/*
|
||||
Mozilla needs to be initialized with a WindowRef to function properly.
|
||||
(There's no good reason for this, since it shouldn't be interacting with our window in any way, but that's another issue.)
|
||||
If we're in windowed mode, we _could_ hand it our actual window pointer, but a subsequent switch to fullscreen will destroy that window,
|
||||
If we're in windowed mode, we _could_ hand it our actual window pointer, but a subsequent switch to fullscreen will destroy that window,
|
||||
which trips up Mozilla.
|
||||
Instead of using our actual window, we create an invisible window which will persist for the lifetime of the application and pass that to Mozilla.
|
||||
This satisfies its deep-seated need to latch onto a WindowRef and solves the issue with switching between fullscreen and windowed modes.
|
||||
|
||||
Note that we will never destroy this window (by design!), but since only one will ever be created per run of the application, that's okay.
|
||||
*/
|
||||
|
||||
|
||||
if(sMediaWindow == NULL)
|
||||
{
|
||||
Rect window_rect = {100, 100, 200, 200};
|
||||
|
|
@ -3382,13 +3382,13 @@ void *LLWindowMacOSX::getMediaWindow()
|
|||
NULL,
|
||||
&window_rect,
|
||||
(ConstStr255Param) "\p",
|
||||
false, // Create the window invisible.
|
||||
false, // Create the window invisible.
|
||||
zoomDocProc, // Window with a grow box and a zoom box
|
||||
kLastWindowOfClass, // create it behind other windows
|
||||
false, // no close box
|
||||
0);
|
||||
}
|
||||
|
||||
|
||||
return (void*)sMediaWindow;
|
||||
}
|
||||
|
||||
|
|
@ -3438,7 +3438,7 @@ void LLWindowMacOSX::allowLanguageTextInput(LLPreeditor *preeditor, BOOL b)
|
|||
}
|
||||
|
||||
UseInputWindow(mTSMDocument, !b);
|
||||
|
||||
|
||||
// Take care of old and new preeditors.
|
||||
if (preeditor != mPreeditor || !b)
|
||||
{
|
||||
|
|
@ -3457,7 +3457,7 @@ void LLWindowMacOSX::allowLanguageTextInput(LLPreeditor *preeditor, BOOL b)
|
|||
return;
|
||||
}
|
||||
mLanguageTextInputAllowed = b;
|
||||
|
||||
|
||||
if (b)
|
||||
{
|
||||
if (mTSMScriptCode != smRoman)
|
||||
|
|
@ -3506,7 +3506,7 @@ MASK LLWindowMacOSX::modifiersToMask(SInt16 modifiers)
|
|||
if(modifiers & (cmdKey | controlKey)) { mask |= MASK_CONTROL; }
|
||||
if(modifiers & optionKey) { mask |= MASK_ALT; }
|
||||
return mask;
|
||||
}
|
||||
}
|
||||
|
||||
#if LL_OS_DRAGDROP_ENABLED
|
||||
|
||||
|
|
@ -3517,53 +3517,53 @@ OSErr LLWindowMacOSX::dragTrackingHandler(DragTrackingMessage message, WindowRef
|
|||
LLWindowMacOSX *self = (LLWindowMacOSX*)handlerRefCon;
|
||||
|
||||
lldebugs << "drag tracking handler, message = " << message << llendl;
|
||||
|
||||
|
||||
switch(message)
|
||||
{
|
||||
case kDragTrackingInWindow:
|
||||
result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_TRACK);
|
||||
break;
|
||||
|
||||
|
||||
case kDragTrackingEnterHandler:
|
||||
result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_START_TRACKING);
|
||||
break;
|
||||
|
||||
|
||||
case kDragTrackingLeaveHandler:
|
||||
result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_STOP_TRACKING);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
OSErr LLWindowMacOSX::dragReceiveHandler(WindowRef theWindow, void * handlerRefCon,
|
||||
OSErr LLWindowMacOSX::dragReceiveHandler(WindowRef theWindow, void * handlerRefCon,
|
||||
DragRef drag)
|
||||
{
|
||||
{
|
||||
LLWindowMacOSX *self = (LLWindowMacOSX*)handlerRefCon;
|
||||
return self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_DROPPED);
|
||||
|
||||
}
|
||||
|
||||
OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDropAction action)
|
||||
{
|
||||
{
|
||||
OSErr result = dragNotAcceptedErr; // overall function result
|
||||
OSErr err = noErr; // for local error handling
|
||||
|
||||
|
||||
// Get the mouse position and modifiers of this drag.
|
||||
SInt16 modifiers, mouseDownModifiers, mouseUpModifiers;
|
||||
::GetDragModifiers(drag, &modifiers, &mouseDownModifiers, &mouseUpModifiers);
|
||||
MASK mask = LLWindowMacOSX::modifiersToMask(modifiers);
|
||||
|
||||
|
||||
Point mouse_point;
|
||||
// This will return the mouse point in global screen coords
|
||||
::GetDragMouse(drag, &mouse_point, NULL);
|
||||
LLCoordScreen screen_coords(mouse_point.h, mouse_point.v);
|
||||
LLCoordGL gl_pos;
|
||||
convertCoords(screen_coords, &gl_pos);
|
||||
|
||||
|
||||
// Look at the pasteboard and try to extract an URL from it
|
||||
PasteboardRef pasteboard;
|
||||
if(GetDragPasteboard(drag, &pasteboard) == noErr)
|
||||
|
|
@ -3571,22 +3571,22 @@ OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDrop
|
|||
ItemCount num_items = 0;
|
||||
// Treat an error here as an item count of 0
|
||||
(void)PasteboardGetItemCount(pasteboard, &num_items);
|
||||
|
||||
|
||||
// Only deal with single-item drags.
|
||||
if(num_items == 1)
|
||||
{
|
||||
PasteboardItemID item_id = NULL;
|
||||
CFArrayRef flavors = NULL;
|
||||
CFDataRef data = NULL;
|
||||
|
||||
|
||||
err = PasteboardGetItemIdentifier(pasteboard, 1, &item_id); // Yes, this really is 1-based.
|
||||
|
||||
|
||||
// Try to extract an URL from the pasteboard
|
||||
if(err == noErr)
|
||||
{
|
||||
err = PasteboardCopyItemFlavors( pasteboard, item_id, &flavors);
|
||||
}
|
||||
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
if(CFArrayContainsValue(flavors, CFRangeMake(0, CFArrayGetCount(flavors)), kUTTypeURL))
|
||||
|
|
@ -3599,9 +3599,9 @@ OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDrop
|
|||
// This is a string that might be an URL.
|
||||
err = PasteboardCopyItemFlavorData(pasteboard, item_id, kUTTypeUTF8PlainText, &data);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(flavors != NULL)
|
||||
{
|
||||
CFRelease(flavors);
|
||||
|
|
@ -3612,12 +3612,12 @@ OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDrop
|
|||
std::string url;
|
||||
url.assign((char*)CFDataGetBytePtr(data), CFDataGetLength(data));
|
||||
CFRelease(data);
|
||||
|
||||
|
||||
if(!url.empty())
|
||||
{
|
||||
LLWindowCallbacks::DragNDropResult res =
|
||||
LLWindowCallbacks::DragNDropResult res =
|
||||
mCallbacks->handleDragNDrop(this, gl_pos, mask, action, url);
|
||||
|
||||
|
||||
switch (res) {
|
||||
case LLWindowCallbacks::DND_NONE: // No drop allowed
|
||||
if (action == LLWindowCallbacks::DNDA_TRACK)
|
||||
|
|
@ -3652,7 +3652,7 @@ OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDrop
|
|||
// Restore the cursor
|
||||
ECursorType temp_cursor = mCurrentCursor;
|
||||
// get around the "setting the same cursor" code in setCursor()
|
||||
mCurrentCursor = UI_CURSOR_COUNT;
|
||||
mCurrentCursor = UI_CURSOR_COUNT;
|
||||
setCursor(temp_cursor);
|
||||
}
|
||||
else {
|
||||
|
|
@ -3664,7 +3664,7 @@ OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDrop
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2363,8 +2363,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
|
|||
case WM_GETMINMAXINFO:
|
||||
{
|
||||
LPMINMAXINFO min_max = (LPMINMAXINFO)l_param;
|
||||
min_max->ptMinTrackSize.x = 1024;
|
||||
min_max->ptMinTrackSize.y = 768;
|
||||
min_max->ptMinTrackSize.x = window_imp->mMinWindowWidth;
|
||||
min_max->ptMinTrackSize.y = window_imp->mMinWindowHeight;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12927,6 +12927,17 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>MinWindowHeight</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>SL viewer minimum window height in pixels</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>768</integer>
|
||||
</map>
|
||||
<key>WindowHeight</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -12934,7 +12945,7 @@
|
|||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>738</integer>
|
||||
</map>
|
||||
|
|
@ -12949,6 +12960,17 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>MinWindowWidth</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>SL viewer minimum window width in pixels</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>1024</integer>
|
||||
</map>
|
||||
<key>WindowWidth</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -12956,7 +12978,7 @@
|
|||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>1024</integer>
|
||||
</map>
|
||||
|
|
|
|||
|
|
@ -2860,10 +2860,22 @@ bool LLAppViewer::initWindow()
|
|||
|
||||
// always start windowed
|
||||
BOOL ignorePixelDepth = gSavedSettings.getBOOL("IgnorePixelDepth");
|
||||
|
||||
// clamp to minimum window size
|
||||
U32 min_window_width=gSavedSettings.getU32("MinWindowWidth");
|
||||
U32 window_width=gSavedSettings.getU32("WindowWidth");
|
||||
if ( window_width < min_window_width )
|
||||
window_width=min_window_width;
|
||||
|
||||
U32 min_window_height=gSavedSettings.getU32("MinWindowHeight");
|
||||
U32 window_height=gSavedSettings.getU32("WindowHeight");
|
||||
if ( window_height < min_window_height )
|
||||
window_height=min_window_height;
|
||||
|
||||
gViewerWindow = new LLViewerWindow(gWindowTitle,
|
||||
VIEWER_WINDOW_CLASSNAME,
|
||||
gSavedSettings.getS32("WindowX"), gSavedSettings.getS32("WindowY"),
|
||||
gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight"),
|
||||
window_width, window_height,
|
||||
gSavedSettings.getBOOL("WindowFullScreen"), ignorePixelDepth);
|
||||
|
||||
LL_INFOS("AppInit") << "gViewerwindow created." << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -1806,7 +1806,6 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel)
|
|||
mCheckEditGroupObjects(NULL),
|
||||
mCheckAllObjectEntry(NULL),
|
||||
mCheckGroupObjectEntry(NULL),
|
||||
mCheckEditLand(NULL),
|
||||
mCheckSafe(NULL),
|
||||
mCheckFly(NULL),
|
||||
mCheckGroupScripts(NULL),
|
||||
|
|
@ -1840,10 +1839,6 @@ BOOL LLPanelLandOptions::postBuild()
|
|||
mCheckGroupObjectEntry = getChild<LLCheckBoxCtrl>( "group object entry check");
|
||||
childSetCommitCallback("group object entry check", onCommitAny, this);
|
||||
|
||||
mCheckEditLand = getChild<LLCheckBoxCtrl>( "edit land check");
|
||||
childSetCommitCallback("edit land check", onCommitAny, this);
|
||||
|
||||
|
||||
mCheckGroupScripts = getChild<LLCheckBoxCtrl>( "check group scripts");
|
||||
childSetCommitCallback("check group scripts", onCommitAny, this);
|
||||
|
||||
|
|
@ -1956,9 +1951,6 @@ void LLPanelLandOptions::refresh()
|
|||
mCheckGroupObjectEntry ->set(FALSE);
|
||||
mCheckGroupObjectEntry ->setEnabled(FALSE);
|
||||
|
||||
mCheckEditLand ->set(FALSE);
|
||||
mCheckEditLand ->setEnabled(FALSE);
|
||||
|
||||
mCheckSafe ->set(FALSE);
|
||||
mCheckSafe ->setEnabled(FALSE);
|
||||
|
||||
|
|
@ -2006,10 +1998,6 @@ void LLPanelLandOptions::refresh()
|
|||
|
||||
mCheckGroupObjectEntry ->set( parcel->getAllowGroupObjectEntry() || parcel->getAllowAllObjectEntry());
|
||||
mCheckGroupObjectEntry ->setEnabled( can_change_options && !parcel->getAllowAllObjectEntry() );
|
||||
|
||||
BOOL can_change_terraform = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_EDIT);
|
||||
mCheckEditLand ->set( parcel->getAllowTerraform() );
|
||||
mCheckEditLand ->setEnabled( can_change_terraform );
|
||||
|
||||
mCheckSafe ->set( !parcel->getAllowDamage() );
|
||||
mCheckSafe ->setEnabled( can_change_options );
|
||||
|
|
@ -2235,7 +2223,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
|
|||
BOOL create_group_objects = self->mCheckEditGroupObjects->get() || self->mCheckEditObjects->get();
|
||||
BOOL all_object_entry = self->mCheckAllObjectEntry->get();
|
||||
BOOL group_object_entry = self->mCheckGroupObjectEntry->get() || self->mCheckAllObjectEntry->get();
|
||||
BOOL allow_terraform = self->mCheckEditLand->get();
|
||||
BOOL allow_terraform = false; // removed from UI so always off now - self->mCheckEditLand->get();
|
||||
BOOL allow_damage = !self->mCheckSafe->get();
|
||||
BOOL allow_fly = self->mCheckFly->get();
|
||||
BOOL allow_landmark = TRUE; // cannot restrict landmark creation
|
||||
|
|
|
|||
|
|
@ -330,7 +330,6 @@ private:
|
|||
LLCheckBoxCtrl* mCheckEditGroupObjects;
|
||||
LLCheckBoxCtrl* mCheckAllObjectEntry;
|
||||
LLCheckBoxCtrl* mCheckGroupObjectEntry;
|
||||
LLCheckBoxCtrl* mCheckEditLand;
|
||||
LLCheckBoxCtrl* mCheckSafe;
|
||||
LLCheckBoxCtrl* mCheckFly;
|
||||
LLCheckBoxCtrl* mCheckGroupScripts;
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ bool LLTipHandler::processNotification(const LLSD& notify)
|
|||
// don't show toast if Nearby Chat is opened
|
||||
LLNearbyChat* nearby_chat = LLNearbyChat::getInstance();
|
||||
LLNearbyChatBar* nearby_chat_bar = LLNearbyChatBar::getInstance();
|
||||
if (nearby_chat_bar->getVisible() && nearby_chat->getVisible())
|
||||
if (!nearby_chat_bar->isMinimized() && nearby_chat_bar->getVisible() && nearby_chat->getVisible())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2161,8 +2161,18 @@ void LLViewerWindow::reshape(S32 width, S32 height)
|
|||
if (!maximized
|
||||
&& mWindow->getSize(&window_size))
|
||||
{
|
||||
gSavedSettings.setS32("WindowWidth", window_size.mX);
|
||||
gSavedSettings.setS32("WindowHeight", window_size.mY);
|
||||
U32 min_window_width=gSavedSettings.getU32("MinWindowWidth");
|
||||
if ( window_size.mX < min_window_width )
|
||||
window_size.mX=min_window_width;
|
||||
gSavedSettings.setU32("WindowWidth", window_size.mX);
|
||||
|
||||
U32 min_window_height=gSavedSettings.getU32("MinWindowHeight");
|
||||
if ( window_size.mY < min_window_height )
|
||||
window_size.mY=min_window_height;
|
||||
gSavedSettings.setU32("WindowHeight", window_size.mY);
|
||||
|
||||
// tell the OS specific window code about min windoow size
|
||||
mWindow->setMinSize(min_window_width, min_window_height);
|
||||
}
|
||||
|
||||
LLViewerStats::getInstance()->setStat(LLViewerStats::ST_WINDOW_WIDTH, (F64)width);
|
||||
|
|
|
|||
|
|
@ -438,7 +438,7 @@ Tilbyd venskab til [NAME]?
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="RemoveFromFriends">
|
||||
Ønsker du at fjerne [NAME] fra din venneliste?
|
||||
Ønsker du at fjerne <nolink>[NAME]</nolink> fra din venneliste?
|
||||
</notification>
|
||||
<notification name="ConfirmItemDeleteHasLinks">
|
||||
Mindst en af genstandene har lænkede genstande der peger på den. Hvis du sletter denne genstand, vil lænkninger ikke virke mere. Det anbefales kraftigt at fjerne lænkninger først.
|
||||
|
|
@ -1023,10 +1023,10 @@ Henvis til dette fra en hjemmeside for at give andre nem adgang til denne lokati
|
|||
Erstattet manglende tøj/kropsdele med standard.
|
||||
</notification>
|
||||
<notification name="FriendOnline">
|
||||
[NAME] er logget på
|
||||
<nolink>[NAME]</nolink> er logget på
|
||||
</notification>
|
||||
<notification name="FriendOffline">
|
||||
[NAME] er logget af
|
||||
<nolink>[NAME]</nolink> er logget af
|
||||
</notification>
|
||||
<notification name="AddSelfFriend">
|
||||
Selvom du nok er meget sød, kan du ikke tilføje dig selv som ven.
|
||||
|
|
@ -1404,10 +1404,10 @@ Prøv igen om lidt.
|
|||
(Som udgangspunkt, vil du være i stand til at se den andens online status)
|
||||
</notification>
|
||||
<notification name="FriendshipAccepted">
|
||||
[NAME] accepterede dit tilbud om venskab.
|
||||
<nolink>[NAME]</nolink> accepterede dit tilbud om venskab.
|
||||
</notification>
|
||||
<notification name="FriendshipDeclined">
|
||||
[NAME] afviste dit tilbud om venskab.
|
||||
<nolink>[NAME]</nolink> afviste dit tilbud om venskab.
|
||||
</notification>
|
||||
<notification name="FriendshipAcceptedByMe">
|
||||
Tilbud om venskab accepteret.
|
||||
|
|
|
|||
|
|
@ -992,7 +992,7 @@ Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="RemoveFromFriends">
|
||||
Möchten Sie [NAME] aus Ihrer Freundesliste entfernen?
|
||||
Möchten Sie <nolink>[NAME]</nolink> aus Ihrer Freundesliste entfernen?
|
||||
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="RemoveMultipleFromFriends">
|
||||
|
|
@ -2134,10 +2134,10 @@ Hierzu wird Ihr Webbrowser geöffnet.
|
|||
Betreff: [SUBJECT], Nachricht: [MESSAGE]
|
||||
</notification>
|
||||
<notification name="FriendOnline">
|
||||
[NAME] ist online
|
||||
<nolink>[NAME]</nolink> ist online
|
||||
</notification>
|
||||
<notification name="FriendOffline">
|
||||
[NAME] ist offline
|
||||
<nolink>[NAME]</nolink> ist offline
|
||||
</notification>
|
||||
<notification name="AddSelfFriend">
|
||||
Obwohl Sie ein sehr netter Mensch sind, können Sie sich nicht selbst als Freund hinzufügen.
|
||||
|
|
@ -2532,10 +2532,10 @@ Versuchen Sie es in einigen Minuten erneut.
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="FriendshipAccepted">
|
||||
[NAME] hat Ihr Freundschaftsangebot akzeptiert.
|
||||
<nolink>[NAME]</nolink> hat Ihr Freundschaftsangebot akzeptiert.
|
||||
</notification>
|
||||
<notification name="FriendshipDeclined">
|
||||
[NAME] hat Ihr Freundschaftsangebot abgelehnt.
|
||||
<nolink>[NAME]</nolink> hat Ihr Freundschaftsangebot abgelehnt.
|
||||
</notification>
|
||||
<notification name="FriendshipAcceptedByMe">
|
||||
Ihr Freundschaftsangebot wurde angeommen.
|
||||
|
|
|
|||
|
|
@ -1208,7 +1208,7 @@ Only large parcels can be listed in search.
|
|||
</panel.string>
|
||||
<panel.string
|
||||
name="see_avs_text">
|
||||
See and chat with residents on this parcel
|
||||
Avatars on other parcels can see
|
||||
</panel.string>
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -1223,30 +1223,33 @@ Only large parcels can be listed in search.
|
|||
width="278">
|
||||
Allow other Residents to:
|
||||
</text>
|
||||
<check_box
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
name="allow_label0"
|
||||
width="150">
|
||||
Fly:
|
||||
</text>
|
||||
|
||||
<check_box
|
||||
height="16"
|
||||
label="Edit Terrain"
|
||||
layout="topleft"
|
||||
left="14"
|
||||
name="edit land check"
|
||||
tool_tip="If checked, anyone can terraform your land. It is best to leave this unchecked, as you can always edit your own land."
|
||||
top_pad="4"
|
||||
width="147i" />
|
||||
<check_box
|
||||
height="16"
|
||||
label="Fly"
|
||||
label="Everyone"
|
||||
layout="topleft"
|
||||
name="check fly"
|
||||
tool_tip="If checked, Residents can fly on your land. If unchecked, they can only fly into and over your land."
|
||||
left_pad="4"
|
||||
width="150" />
|
||||
left_pad="2"
|
||||
width="130" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="14"
|
||||
left="20"
|
||||
name="allow_label2"
|
||||
width="150">
|
||||
Build:
|
||||
|
|
@ -1271,7 +1274,7 @@ Only large parcels can be listed in search.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="14"
|
||||
left="20"
|
||||
name="allow_label3"
|
||||
width="150">
|
||||
Object Entry:
|
||||
|
|
@ -1298,7 +1301,7 @@ Only large parcels can be listed in search.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="14"
|
||||
left="20"
|
||||
name="allow_label4"
|
||||
width="150">
|
||||
Run Scripts:
|
||||
|
|
@ -1319,49 +1322,47 @@ Only large parcels can be listed in search.
|
|||
name="check group scripts"
|
||||
top_delta="0"
|
||||
width="70" />
|
||||
<text
|
||||
type="string"
|
||||
text_color="white"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="land_options_label"
|
||||
width="278">
|
||||
Land Options:
|
||||
</text>
|
||||
<check_box
|
||||
<panel
|
||||
bevel_style="none"
|
||||
border="true"
|
||||
top="146"
|
||||
bottom="146"
|
||||
follows="left|bottom|right"
|
||||
left="20"
|
||||
right="-20"/>
|
||||
<check_box
|
||||
height="16"
|
||||
label="Safe (no damage)"
|
||||
layout="topleft"
|
||||
left="14"
|
||||
left="18"
|
||||
name="check safe"
|
||||
tool_tip="If checked, sets the land to Safe, disabling damage combat. If cleared, damage combat is enabled."
|
||||
top_pad="5"
|
||||
top="130"
|
||||
width="200" />
|
||||
<check_box
|
||||
height="16"
|
||||
label="No Pushing"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
left_pad="35"
|
||||
name="PushRestrictCheck"
|
||||
tool_tip="Prevents scripts from pushing. Checking this option may be useful for preventing disruptive behavior on your land."
|
||||
top_delta="0"
|
||||
top="130"
|
||||
width="119" />
|
||||
<check_box
|
||||
height="16"
|
||||
label="Show Place in Search (L$30/week)"
|
||||
layout="topleft"
|
||||
left="14"
|
||||
left="18"
|
||||
name="ShowDirectoryCheck"
|
||||
tool_tip="Let people see this parcel in search results"
|
||||
top="150"
|
||||
width="430" />
|
||||
<combo_box
|
||||
enabled="false"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
left="20"
|
||||
top="194"
|
||||
name="land category with adult"
|
||||
visible="false"
|
||||
width="140">
|
||||
|
|
@ -1426,7 +1427,8 @@ Only large parcels can be listed in search.
|
|||
enabled="false"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
left="20"
|
||||
top="194"
|
||||
name="land category"
|
||||
visible="false"
|
||||
width="140">
|
||||
|
|
@ -1487,11 +1489,11 @@ Only large parcels can be listed in search.
|
|||
height="16"
|
||||
label="Moderate Content"
|
||||
layout="topleft"
|
||||
left="14"
|
||||
left="18"
|
||||
name="MatureCheck"
|
||||
top="177"
|
||||
top="170"
|
||||
label_text.valign="center"
|
||||
label_text.v_pad="-5"
|
||||
label_text.v_pad="-1"
|
||||
tool_tip=" "
|
||||
width="200" />
|
||||
<text
|
||||
|
|
@ -1500,18 +1502,19 @@ Only large parcels can be listed in search.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
left="20"
|
||||
name="Snapshot:"
|
||||
text_color="white"
|
||||
top="220"
|
||||
top="225"
|
||||
width="200">
|
||||
Snapshot:
|
||||
</text>
|
||||
<texture_picker
|
||||
follows="left|top"
|
||||
top_pad="0"
|
||||
height="150"
|
||||
layout="topleft"
|
||||
left="14"
|
||||
left="20"
|
||||
name="snapshot_ctrl"
|
||||
fallback_image="default_land_picture.j2c"
|
||||
tool_tip="Click to choose a picture"
|
||||
|
|
@ -1520,23 +1523,24 @@ Only large parcels can be listed in search.
|
|||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
text_color="white"
|
||||
text_color="LtGray"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="230"
|
||||
top="174"
|
||||
left="274"
|
||||
top="166"
|
||||
name="allow_label5"
|
||||
width="278">
|
||||
Allow Residents on other parcels to:
|
||||
and chat with avatars on this parcel
|
||||
</text>
|
||||
<check_box
|
||||
height="16"
|
||||
label="See Avatars"
|
||||
follows="top"
|
||||
layout="topleft"
|
||||
left="230"
|
||||
left="253"
|
||||
top="150"
|
||||
name="SeeAvatarsCheck"
|
||||
tool_tip="Allows residents on other parcels to see and chat with residents on this parcel, and you to see and chat with them."
|
||||
tool_tip="Allows avatars on other parcels to see and chat with avatars on this parcel, and you to see and chat with them."
|
||||
width="120" />
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -1544,8 +1548,8 @@ Only large parcels can be listed in search.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="230"
|
||||
top="230"
|
||||
left="255"
|
||||
top="282"
|
||||
text_color="white"
|
||||
name="landing_point"
|
||||
word_wrap="true"
|
||||
|
|
@ -1554,12 +1558,13 @@ Only large parcels can be listed in search.
|
|||
</text>
|
||||
<button
|
||||
follows="right|top"
|
||||
top_pad="0"
|
||||
height="23"
|
||||
label="Set"
|
||||
label_selected="Set"
|
||||
layout="topleft"
|
||||
name="Set"
|
||||
left="230"
|
||||
left="255"
|
||||
tool_tip="Sets the landing point where visitors arrive. Sets to your avatar's location inside this parcel."
|
||||
width="50" />
|
||||
<button
|
||||
|
|
@ -1579,7 +1584,7 @@ Only large parcels can be listed in search.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="230"
|
||||
left="255"
|
||||
top_pad="10"
|
||||
name="Teleport Routing: "
|
||||
width="200">
|
||||
|
|
@ -1589,7 +1594,7 @@ Only large parcels can be listed in search.
|
|||
height="23"
|
||||
layout="topleft"
|
||||
name="landing type"
|
||||
top_pad="3"
|
||||
top_pad="0"
|
||||
tool_tip="Teleport Routing -- select how to handle teleports onto your land"
|
||||
width="120">
|
||||
<combo_box.item
|
||||
|
|
|
|||
|
|
@ -2369,7 +2369,7 @@ Would you be my friend?
|
|||
name="RemoveFromFriends"
|
||||
type="alertmodal">
|
||||
<tag>friendship</tag>
|
||||
Do you want to remove [NAME] from your Friends List?
|
||||
Do you want to remove <nolink>[NAME]</nolink> from your Friends List?
|
||||
<tag>confirm</tag>
|
||||
<usetemplate
|
||||
name="okcancelbuttons"
|
||||
|
|
@ -5161,7 +5161,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
|
|||
name="FriendOnline"
|
||||
type="notifytip">
|
||||
<tag>friendship</tag>
|
||||
[NAME] is Online
|
||||
<nolink>[NAME]</nolink> is Online
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
@ -5169,7 +5169,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
|
|||
name="FriendOffline"
|
||||
type="notifytip">
|
||||
<tag>friendship</tag>
|
||||
[NAME] is Offline
|
||||
<nolink>[NAME]</nolink> is Offline
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
@ -6171,7 +6171,7 @@ Your object named <nolink>[OBJECTFROMNAME]</nolink> has given you th
|
|||
name="FriendshipAccepted"
|
||||
type="offer">
|
||||
<tag>friendship</tag>
|
||||
[NAME] accepted your friendship offer.
|
||||
<nolink>[NAME]</nolink> accepted your friendship offer.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
@ -6180,7 +6180,7 @@ Your object named <nolink>[OBJECTFROMNAME]</nolink> has given you th
|
|||
persist="true"
|
||||
type="notify">
|
||||
<tag>friendship</tag>
|
||||
[NAME] declined your friendship offer.
|
||||
<nolink>[NAME]</nolink> declined your friendship offer.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
|
|||
|
|
@ -981,7 +981,7 @@ no tienes el permiso de comprar terreno para el grupo que tienes activado actual
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="RemoveFromFriends">
|
||||
¿Quieres eliminar a [NAME] de tu lista de amigos?
|
||||
¿Quieres eliminar a <nolink>[NAME]</nolink> de tu lista de amigos?
|
||||
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="RemoveMultipleFromFriends">
|
||||
|
|
@ -2128,10 +2128,10 @@ Al hacerlo se iniciará el navegador web.
|
|||
Asunto: [SUBJECT], Mensaje: [MESSAGE]
|
||||
</notification>
|
||||
<notification name="FriendOnline">
|
||||
[NAME] está conectado
|
||||
<nolink>[NAME]</nolink> está conectado
|
||||
</notification>
|
||||
<notification name="FriendOffline">
|
||||
[NAME] está desconectado
|
||||
<nolink>[NAME]</nolink> está desconectado
|
||||
</notification>
|
||||
<notification name="AddSelfFriend">
|
||||
Aunque eres muy agradable, no puedes añadirte como amigo a ti mismo.
|
||||
|
|
@ -2526,10 +2526,10 @@ Por favor, vuelve a intentarlo en unos momentos.
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="FriendshipAccepted">
|
||||
[NAME] ha aceptado tu oferta de amistad.
|
||||
<nolink>[NAME]</nolink> ha aceptado tu oferta de amistad.
|
||||
</notification>
|
||||
<notification name="FriendshipDeclined">
|
||||
[NAME] ha rehusado tu oferta de amistad.
|
||||
<nolink>[NAME]</nolink> ha rehusado tu oferta de amistad.
|
||||
</notification>
|
||||
<notification name="FriendshipAcceptedByMe">
|
||||
Aceptado el ofrecimiento de amistad.
|
||||
|
|
|
|||
|
|
@ -980,7 +980,7 @@ Proposer à [NAME] de devenir votre ami(e) ?
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="RemoveFromFriends">
|
||||
Voulez-vous supprimer [NAME] de votre liste d'amis ?
|
||||
Voulez-vous supprimer <nolink>[NAME]</nolink> de votre liste d'amis ?
|
||||
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="RemoveMultipleFromFriends">
|
||||
|
|
@ -2119,10 +2119,10 @@ Cette opération lancera votre navigateur Web.
|
|||
Sujet : [SUBJECT], Message : [MESSAGE]
|
||||
</notification>
|
||||
<notification name="FriendOnline">
|
||||
[NAME] est en ligne
|
||||
<nolink>[NAME]</nolink> est en ligne
|
||||
</notification>
|
||||
<notification name="FriendOffline">
|
||||
[NAME] est hors ligne
|
||||
<nolink>[NAME]</nolink> est hors ligne
|
||||
</notification>
|
||||
<notification name="AddSelfFriend">
|
||||
Même si vous êtes extrêmement sympathique, vous ne pouvez pas devenir ami avec vous-même.
|
||||
|
|
@ -2518,10 +2518,10 @@ Veuillez réessayer dans quelques minutes.
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="FriendshipAccepted">
|
||||
[NAME] a accepté votre amitié.
|
||||
<nolink>[NAME]</nolink> a accepté votre amitié.
|
||||
</notification>
|
||||
<notification name="FriendshipDeclined">
|
||||
[NAME] a refusé votre amitié.
|
||||
<nolink>[NAME]</nolink> a refusé votre amitié.
|
||||
</notification>
|
||||
<notification name="FriendshipAcceptedByMe">
|
||||
Amitié acceptée.
|
||||
|
|
|
|||
|
|
@ -978,7 +978,7 @@ Offri l'amicizia a [NAME]?
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="RemoveFromFriends">
|
||||
Vuoi rimuovere [NAME] dalla lista dei tuoi amici?
|
||||
Vuoi rimuovere <nolink>[NAME]</nolink> dalla lista dei tuoi amici?
|
||||
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="RemoveMultipleFromFriends">
|
||||
|
|
@ -2125,10 +2125,10 @@ Verrà avviato il browser Web.
|
|||
Oggetto: [SUBJECT], Messaggio: [MESSAGE]
|
||||
</notification>
|
||||
<notification name="FriendOnline">
|
||||
[NAME] è Online
|
||||
<nolink>[NAME]</nolink> è Online
|
||||
</notification>
|
||||
<notification name="FriendOffline">
|
||||
[NAME] è Offline
|
||||
<nolink>[NAME]</nolink> è Offline
|
||||
</notification>
|
||||
<notification name="AddSelfFriend">
|
||||
Anche se sei molto simpatico, non puoi aggiungere te stesso all'elenco degli amici.
|
||||
|
|
@ -2520,10 +2520,10 @@ Riprova tra qualche istante.
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="FriendshipAccepted">
|
||||
[NAME] ha accettato la tua offerta di amicizia.
|
||||
<nolink>[NAME]</nolink> ha accettato la tua offerta di amicizia.
|
||||
</notification>
|
||||
<notification name="FriendshipDeclined">
|
||||
[NAME] ha rifiutato la tua offerta di amicizia.
|
||||
<nolink>[NAME]</nolink> ha rifiutato la tua offerta di amicizia.
|
||||
</notification>
|
||||
<notification name="FriendshipAcceptedByMe">
|
||||
Offerta di amicizia accettata.
|
||||
|
|
|
|||
|
|
@ -1010,7 +1010,7 @@ L$ は返金されません。
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="RemoveFromFriends">
|
||||
フレンドリストから [NAME] を削除しますか?
|
||||
フレンドリストから <nolink>[NAME]</nolink> を削除しますか?
|
||||
<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="RemoveMultipleFromFriends">
|
||||
|
|
@ -2167,10 +2167,10 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
|
|||
件名: [SUBJECT]、メッセージ: [MESSAGE]
|
||||
</notification>
|
||||
<notification name="FriendOnline">
|
||||
[NAME] はオンライン中です
|
||||
<nolink>[NAME]</nolink> はオンライン中です
|
||||
</notification>
|
||||
<notification name="FriendOffline">
|
||||
[NAME] はオフライン中です
|
||||
<nolink>[NAME]</nolink> はオフライン中です
|
||||
</notification>
|
||||
<notification name="AddSelfFriend">
|
||||
残念ながら自分自身をフレンド登録することはできません。
|
||||
|
|
@ -2567,10 +2567,10 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="FriendshipAccepted">
|
||||
[NAME]は、フレンド登録を受け入れました。
|
||||
<nolink>[NAME]</nolink>は、フレンド登録を受け入れました。
|
||||
</notification>
|
||||
<notification name="FriendshipDeclined">
|
||||
[NAME]は、フレンド登録を断りました。
|
||||
<nolink>[NAME]</nolink>は、フレンド登録を断りました。
|
||||
</notification>
|
||||
<notification name="FriendshipAcceptedByMe">
|
||||
フレンドの登録依頼が承認されました。
|
||||
|
|
|
|||
|
|
@ -946,7 +946,7 @@ Zaproponować znajomość [NAME]?
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="RemoveFromFriends">
|
||||
Czy chcesz usunąć [NAME] z listy znajomych?
|
||||
Czy chcesz usunąć <nolink>[NAME]</nolink> z listy znajomych?
|
||||
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="RemoveMultipleFromFriends">
|
||||
|
|
@ -2078,10 +2078,10 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t
|
|||
Temat: [SUBJECT], Treść: [MESSAGE]
|
||||
</notification>
|
||||
<notification name="FriendOnline">
|
||||
[NAME] jest w Second Life
|
||||
<nolink>[NAME]</nolink> jest w Second Life
|
||||
</notification>
|
||||
<notification name="FriendOffline">
|
||||
[NAME] opuszcza Second Life
|
||||
<nolink>[NAME]</nolink> opuszcza Second Life
|
||||
</notification>
|
||||
<notification name="AddSelfFriend">
|
||||
Nie możesz dodać siebie do listy znajomych.
|
||||
|
|
@ -2458,10 +2458,10 @@ Spróbuj ponowanie za kilka minut.
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="FriendshipAccepted">
|
||||
Twoja propozycja znajomości została przyjęta przez [NAME].
|
||||
Twoja propozycja znajomości została przyjęta przez <nolink>[NAME]</nolink>.
|
||||
</notification>
|
||||
<notification name="FriendshipDeclined">
|
||||
Twoja propozycja znajomości została odrzucona przez [NAME].
|
||||
Twoja propozycja znajomości została odrzucona przez <nolink>[NAME]</nolink>.
|
||||
</notification>
|
||||
<notification name="FriendshipAcceptedByMe">
|
||||
Propozycja znajomości została zaakceptowana.
|
||||
|
|
|
|||
|
|
@ -973,7 +973,7 @@ Oferecer amizade para [NAME]?
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="RemoveFromFriends">
|
||||
Remover [NAME] da sua lista de amigos?
|
||||
Remover <nolink>[NAME]</nolink> da sua lista de amigos?
|
||||
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Remover"/>
|
||||
</notification>
|
||||
<notification name="RemoveMultipleFromFriends">
|
||||
|
|
@ -2109,10 +2109,10 @@ Isso abrirá o seu navegador.
|
|||
Assunto: [SUBJECT], Mensagem: [MESSAGE]
|
||||
</notification>
|
||||
<notification name="FriendOnline">
|
||||
[NAME] está online
|
||||
<nolink>[NAME]</nolink> está online
|
||||
</notification>
|
||||
<notification name="FriendOffline">
|
||||
[NAME] está offline
|
||||
<nolink>[NAME]</nolink> está offline
|
||||
</notification>
|
||||
<notification name="AddSelfFriend">
|
||||
Você é o máximo! Mesmo assim, não dá para adicionar a si mesmo(a) como amigo(a).
|
||||
|
|
@ -2501,10 +2501,10 @@ Cada um pode ver o status do outro (definição padrão).
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="FriendshipAccepted">
|
||||
[NAME] aceitou seu convite de amizade.
|
||||
<nolink>[NAME]</nolink> aceitou seu convite de amizade.
|
||||
</notification>
|
||||
<notification name="FriendshipDeclined">
|
||||
[NAME] recusou seu convite de amizade
|
||||
<nolink>[NAME]</nolink> recusou seu convite de amizade
|
||||
</notification>
|
||||
<notification name="FriendshipAcceptedByMe">
|
||||
Oferta de amizada aceita.
|
||||
|
|
|
|||
|
|
@ -979,7 +979,7 @@
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="RemoveFromFriends">
|
||||
Удалить жителя [NAME] из вашего списка друзей?
|
||||
Удалить жителя <nolink>[NAME]</nolink> из вашего списка друзей?
|
||||
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="RemoveMultipleFromFriends">
|
||||
|
|
@ -2119,10 +2119,10 @@ http://secondlife.com/download.
|
|||
Раздел: [SUBJECT], сообщение: [MESSAGE]
|
||||
</notification>
|
||||
<notification name="FriendOnline">
|
||||
[NAME] в сети
|
||||
<nolink>[NAME]</nolink> в сети
|
||||
</notification>
|
||||
<notification name="FriendOffline">
|
||||
[NAME] не в сети
|
||||
<nolink>[NAME]</nolink> не в сети
|
||||
</notification>
|
||||
<notification name="AddSelfFriend">
|
||||
Вы лучше всех, но нельзя добавить в друзья себя самого.
|
||||
|
|
@ -2518,10 +2518,10 @@ http://secondlife.com/download.
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="FriendshipAccepted">
|
||||
[NAME] принял(а) ваше предложение дружить.
|
||||
<nolink>[NAME]</nolink> принял(а) ваше предложение дружить.
|
||||
</notification>
|
||||
<notification name="FriendshipDeclined">
|
||||
[NAME] отклонил(а) ваше предложение дружить.
|
||||
<nolink>[NAME]</nolink> отклонил(а) ваше предложение дружить.
|
||||
</notification>
|
||||
<notification name="FriendshipAcceptedByMe">
|
||||
Предложение дружить принято.
|
||||
|
|
|
|||
|
|
@ -979,7 +979,7 @@ Etkin grubunuz adına arazi satın almak için gerekli izne sahip değilsiniz.
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="RemoveFromFriends">
|
||||
[NAME] adlı kişiyi Arkadaş Listenizden çıkarmak istiyor musunuz?
|
||||
<nolink>[NAME]</nolink> adlı kişiyi Arkadaş Listenizden çıkarmak istiyor musunuz?
|
||||
<usetemplate name="okcancelbuttons" notext="İptal" yestext="Tamam"/>
|
||||
</notification>
|
||||
<notification name="RemoveMultipleFromFriends">
|
||||
|
|
@ -2119,10 +2119,10 @@ Bu adımda web tarayıcınızın başlatılacağına dikkat edin.
|
|||
Konu: [SUBJECT], İleti: [MESSAGE]
|
||||
</notification>
|
||||
<notification name="FriendOnline">
|
||||
[NAME] Çevrimiçi
|
||||
<nolink>[NAME]</nolink> Çevrimiçi
|
||||
</notification>
|
||||
<notification name="FriendOffline">
|
||||
[NAME] Çevrimdışı
|
||||
<nolink>[NAME]</nolink> Çevrimdışı
|
||||
</notification>
|
||||
<notification name="AddSelfFriend">
|
||||
Çok iyi biri olduğunuza eminiz fakat kendinizi arkadaş olarak ekleyemezsiniz.
|
||||
|
|
@ -2518,10 +2518,10 @@ Lütfen biraz sonra tekrar deneyin.
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="FriendshipAccepted">
|
||||
[NAME] arkadaşlık teklifinizi kabul etti.
|
||||
<nolink>[NAME]</nolink> arkadaşlık teklifinizi kabul etti.
|
||||
</notification>
|
||||
<notification name="FriendshipDeclined">
|
||||
[NAME] arkadaşlık teklifinizi reddetti.
|
||||
<nolink>[NAME]</nolink> arkadaşlık teklifinizi reddetti.
|
||||
</notification>
|
||||
<notification name="FriendshipAcceptedByMe">
|
||||
Arkadaşlık teklifi kabul edildi.
|
||||
|
|
|
|||
|
|
@ -966,7 +966,7 @@ Offer friendship to [NAME]?
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="RemoveFromFriends">
|
||||
Do you want to remove [NAME] from your Friends List?
|
||||
Do you want to remove <nolink>[NAME]</nolink> from your Friends List?
|
||||
<usetemplate name="okcancelbuttons" notext="取消" yestext="確定"/>
|
||||
</notification>
|
||||
<notification name="RemoveMultipleFromFriends">
|
||||
|
|
@ -2109,10 +2109,10 @@ Link to this from a web page to give others easy access to this location, or try
|
|||
Topic: [SUBJECT], Message: [MESSAGE]
|
||||
</notification>
|
||||
<notification name="FriendOnline">
|
||||
[NAME] 上線
|
||||
<nolink>[NAME]</nolink> 上線
|
||||
</notification>
|
||||
<notification name="FriendOffline">
|
||||
[NAME] 離線
|
||||
<nolink>[NAME]</nolink> 離線
|
||||
</notification>
|
||||
<notification name="AddSelfFriend">
|
||||
Although you're very nice, you can't add yourself as a friend.
|
||||
|
|
@ -2491,10 +2491,10 @@ Please try again in a few moments.
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="FriendshipAccepted">
|
||||
[NAME] accepted your friendship offer.
|
||||
<nolink>[NAME]</nolink> accepted your friendship offer.
|
||||
</notification>
|
||||
<notification name="FriendshipDeclined">
|
||||
[NAME] 謝絕你的交友邀請。
|
||||
<nolink>[NAME]</nolink> 謝絕你的交友邀請。
|
||||
</notification>
|
||||
<notification name="FriendshipAcceptedByMe">
|
||||
交友邀請被接受。
|
||||
|
|
|
|||
Loading…
Reference in New Issue