void WidgetKeyboardEvent::GetAccessKeyCandidates(nsTArray<uint32_t>& aCandidates) { MOZ_ASSERT(aCandidates.IsEmpty(), "aCandidates must be empty"); // return the lower cased charCode candidates for access keys. // the priority of the charCodes are: // 0: charCode, 1: unshiftedCharCodes[0], 2: shiftedCharCodes[0] // 3: unshiftedCharCodes[1], 4: shiftedCharCodes[1],... if (charCode) { uint32_t ch = charCode; if (IS_IN_BMP(ch)) { ch = ToLowerCase(static_cast<char16_t>(ch)); } aCandidates.AppendElement(ch); } for (uint32_t i = 0; i < alternativeCharCodes.Length(); ++i) { uint32_t ch[2] = { alternativeCharCodes[i].mUnshiftedCharCode, alternativeCharCodes[i].mShiftedCharCode }; for (uint32_t j = 0; j < 2; ++j) { if (!ch[j]) { continue; } if (IS_IN_BMP(ch[j])) { ch[j] = ToLowerCase(static_cast<char16_t>(ch[j])); } // Don't append the charCode that was already appended. if (aCandidates.IndexOf(ch[j]) == aCandidates.NoIndex) { aCandidates.AppendElement(ch[j]); } } } // Special case for "Space" key. With some keyboard layouts, "Space" with // or without Shift key causes non-ASCII space. For such keyboard layouts, // we should guarantee that the key press works as an ASCII white space key // press. However, if the space key is assigned to a function key, it // shouldn't work as a space key. if (mKeyNameIndex == KEY_NAME_INDEX_USE_STRING && mCodeNameIndex == CODE_NAME_INDEX_Space && charCode != static_cast<uint32_t>(' ')) { aCandidates.AppendElement(static_cast<uint32_t>(' ')); } return; }
void nsFontCache::Compact() { // Need to loop backward because the running element can be removed on // the way for (int32_t i = mFontMetrics.Length()-1; i >= 0; --i) { nsFontMetrics* fm = mFontMetrics[i]; nsFontMetrics* oldfm = fm; // Destroy() isn't here because we want our device context to be // notified NS_RELEASE(fm); // this will reset fm to nullptr // if the font is really gone, it would have called back in // FontMetricsDeleted() and would have removed itself if (mFontMetrics.IndexOf(oldfm) != mFontMetrics.NoIndex) { // nope, the font is still there, so let's hold onto it too NS_ADDREF(oldfm); } } }
void DBusWatcher::HandleWatchRemove() { int fd; ssize_t res = TEMP_FAILURE_RETRY(read(mControlFdR.get(), &fd, sizeof(fd))); if (res < 0) { LOG("Cannot read DBus watch remove descriptor data from socket!\n"); return; } unsigned int flags; res = TEMP_FAILURE_RETRY(read(mControlFdR.get(), &flags, sizeof(flags))); if (res < 0) { LOG("Cannot read DBus watch remove flag data from socket!\n"); return; } struct pollfd p = { fd, // .fd DBusFlagsToUnixEvents(flags), // .events 0 // .revents }; int index = mPollData.IndexOf(p, 0, PollFdComparator()); // There are times where removes can be requested for watches that // haven't been added (for example, whenever gecko comes up after // adapters have already been enabled), so check to make sure we're // using the watch in the first place if (index < 0) { LOG("DBus requested watch removal of non-existant socket, ignoring..."); return; } mPollData.RemoveElementAt(index); // DBusWatch pointers are maintained by DBus, so we won't leak by // removing. mWatchData.RemoveElementAt(index); }