void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* context, PassRefPtr<NotificationPermissionCallback> callback) { if (dumpNotification) printf("DESKTOP NOTIFICATION PERMISSION REQUESTED: %s\n", QString(context->securityOrigin()->toString()).toUtf8().constData()); NotificationClient::Permission permission = checkPermission(context); if (permission != NotificationClient::PermissionNotAllowed) { if (callback) callback->handleEvent(Notification::permissionString(permission)); return; } QHash<ScriptExecutionContext*, CallbacksInfo >::iterator iter = m_pendingPermissionRequests.find(context); if (iter != m_pendingPermissionRequests.end()) iter.value().m_callbacks.append(callback); else { RefPtr<NotificationPermissionCallback> cb = callback; CallbacksInfo info; info.m_frame = toFrame(context); info.m_callbacks.append(cb); if (toPage(context) && toFrame(context)) { m_pendingPermissionRequests.insert(context, info); toPage(context)->notificationsPermissionRequested(toFrame(context)); } } }
void JavaScriptDebugServer::sourceParsed(ExecState* exec, int sourceID, const UString& sourceURL, const SourceProvider& source, int startingLineNumber, int errorLine, const UString& errorMessage) { if (m_callingListeners) return; Page* page = toPage(exec->dynamicGlobalObject()); if (!page) return; m_callingListeners = true; ASSERT(hasListeners()); bool isError = errorLine != -1; if (!m_listeners.isEmpty()) { if (isError) dispatchFailedToParseSource(m_listeners, exec, source, startingLineNumber, sourceURL, errorLine, errorMessage); else dispatchDidParseSource(m_listeners, exec, source, startingLineNumber, sourceURL, sourceID); } if (ListenerSet* pageListeners = m_pageListenersMap.get(page)) { ASSERT(!pageListeners->isEmpty()); if (isError) dispatchFailedToParseSource(*pageListeners, exec, source, startingLineNumber, sourceURL, errorLine, errorMessage); else dispatchDidParseSource(*pageListeners, exec, source, startingLineNumber, sourceURL, sourceID); } m_callingListeners = false; }
void JavaScriptDebugServer::willExecuteProgram(const DebuggerCallFrame& debuggerCallFrame, int sourceID, int lineNumber) { if (m_paused) return; m_currentCallFrame = JavaScriptCallFrame::create(debuggerCallFrame, m_currentCallFrame, sourceID, lineNumber); pauseIfNeeded(toPage(debuggerCallFrame.dynamicGlobalObject())); }
void PagedFreeStore::deallocate (void* const p) { Page* const page = toPage (p); PagedFreeStore& allocator = page->getAllocator (); allocator.m_hot->garbage->push_front (page); #if LOG_GC allocator.m_used.release (); #endif }
void JavaScriptDebugServer::atStatement(const DebuggerCallFrame& debuggerCallFrame, int sourceID, int lineNumber) { if (m_paused) return; ASSERT(m_currentCallFrame); if (!m_currentCallFrame) return; m_currentCallFrame->update(debuggerCallFrame, sourceID, lineNumber); pauseIfNeeded(toPage(debuggerCallFrame.dynamicGlobalObject())); }
void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* context, PassRefPtr<VoidCallback> callback) { if (dumpNotification) printf("DESKTOP NOTIFICATION PERMISSION REQUESTED: %s\n", QString(context->securityOrigin()->toString()).toUtf8().constData()); QHash<ScriptExecutionContext*, CallbacksInfo >::iterator iter = m_pendingPermissionRequests.find(context); if (iter != m_pendingPermissionRequests.end()) iter.value().m_callbacks.append(callback); else { RefPtr<VoidCallback> cb = callback; CallbacksInfo info; info.m_frame = toFrame(context); info.m_callbacks.append(cb); m_pendingPermissionRequests.insert(context, info); if (toPage(context) && toFrame(context)) { m_pendingPermissionRequests.insert(context, info); emit toPage(context)->featurePermissionRequested(toFrame(context), QWebPage::Notifications); } } }
void JavaScriptDebugServer::didExecuteProgram(const DebuggerCallFrame& debuggerCallFrame, int sourceID, int lineNumber) { if (m_paused) return; ASSERT(m_currentCallFrame); if (!m_currentCallFrame) return; m_currentCallFrame->update(debuggerCallFrame, sourceID, lineNumber); pauseIfNeeded(toPage(debuggerCallFrame.dynamicGlobalObject())); // Treat stepping over the end of a program like stepping out. if (m_currentCallFrame == m_pauseOnCallFrame) m_pauseOnCallFrame = m_currentCallFrame->caller(); m_currentCallFrame = m_currentCallFrame->caller(); }
bool QPrinter::prepare(PMPrintSettings *s) { if (!psession && PMCreateSession(&psession) != noErr) return FALSE; if (*s == kPMNoPrintSettings) { if (PMCreatePrintSettings(s) != noErr) return FALSE; if (PMSessionDefaultPrintSettings(psession, *s) != noErr) return FALSE; } else { if (PMSessionValidatePrintSettings(psession, *s, kPMDontWantBoolean) != noErr) return FALSE; } if (minPage() != 0 || maxPage() != 0) PMSetPageRange(*s, minPage(), maxPage()); if (d->printRange != AllPages) { PMSetFirstPage(*s, fromPage(), TRUE); PMSetLastPage(*s, toPage(), TRUE); } PMSetColorMode(*s, colorMode() == GrayScale ? kPMGray : kPMColor); PMSetCopies(*s, numCopies(), TRUE); if (outputToFile()) { CFStringRef cfstring = qstring2cfstring(outputFileName()); CFURLRef outFile = CFURLCreateWithFileSystemPath(kCFAllocatorSystemDefault, cfstring, kCFURLPOSIXPathStyle, false); PMSessionSetDestination(psession, *s, kPMDestinationFile, kPMDocumentFormatPDF, outFile); CFRelease(outFile); CFRelease(cfstring); } QString printName = printerName(); if (!printName.isEmpty()) { CFStringRef pname = qstring2cfstring(printName); PMSessionSetCurrentPrinter(psession, pname); CFRelease(pname); } return TRUE; }
// Print a range of lines to a printer. int QsciPrinter::printRange(QsciScintillaBase *qsb, int from, int to) { // Sanity check. if (!qsb) return false; // Setup the printing area. QRect def_area; def_area.setX(0); def_area.setY(0); QPaintDeviceMetrics metrics(this); def_area.setWidth(metrics.width()); def_area.setHeight(metrics.height()); // Get the page range. int pgFrom, pgTo; pgFrom = fromPage(); pgTo = toPage(); // Find the position range. long startPos, endPos; endPos = qsb->SendScintilla(QsciScintillaBase::SCI_GETLENGTH); startPos = (from > 0 ? qsb -> SendScintilla(QsciScintillaBase::SCI_POSITIONFROMLINE,from) : 0); if (to >= 0) { long toPos = qsb -> SendScintilla(QsciScintillaBase::SCI_POSITIONFROMLINE,to + 1); if (endPos > toPos) endPos = toPos; } if (startPos >= endPos) return false; QPainter painter(this); bool reverse = (pageOrder() == LastPageFirst); bool needNewPage = false; qsb -> SendScintilla(QsciScintillaBase::SCI_SETPRINTMAGNIFICATION,mag); qsb -> SendScintilla(QsciScintillaBase::SCI_SETPRINTWRAPMODE,wrap); for (int i = 1; i <= numCopies(); ++i) { // If we are printing in reverse page order then remember the start // position of each page. QValueStack<long> pageStarts; int currPage = 1; long pos = startPos; while (pos < endPos) { // See if we have finished the requested page range. if (pgTo > 0 && pgTo < currPage) break; // See if we are going to render this page, or just see how much // would fit onto it. bool render = false; if (pgFrom == 0 || pgFrom <= currPage) { if (reverse) pageStarts.push(pos); else { render = true; if (needNewPage) { if (!newPage()) return false; } else needNewPage = true; } } QRect area = def_area; formatPage(painter,render,area,currPage); pos = qsb -> SendScintilla(QsciScintillaBase::SCI_FORMATRANGE,render,&painter,area,pos,endPos); ++currPage; } // All done if we are printing in normal page order. if (!reverse) continue; // Now go through each page on the stack and really print it. while (!pageStarts.isEmpty()) { --currPage; long ePos = pos; pos = pageStarts.pop(); if (needNewPage) { if (!newPage()) return false; } else needNewPage = true; QRect area = def_area; formatPage(painter,true,area,currPage); qsb->SendScintilla(QsciScintillaBase::SCI_FORMATRANGE,true,&painter,area,pos,ePos); } } return true; }
int QPrintDialog::exec() { Q_D(QPrintDialog); QMacBlockingFunction func; Boolean result; // If someone is reusing a QPrinter object, the end released all our old // information. In this case, we must reinitialize. if (d->ep->session == 0) d->ep->initialize(); // Carbon's documentation lies. // It seems the only way that Carbon lets you use all is if the minimum // for the page range is 1. This _kind of_ makes sense if you think about // it. However, calling _q_setFirstPage or _q_setLastPage always enforces the range. PMSetPageRange(d->ep->settings, minPage(), maxPage()); if (printRange() == PageRange) { PMSetFirstPage(d->ep->settings, fromPage(), false); PMSetLastPage(d->ep->settings, toPage(), false); } { //simulate modality QWidget modal_widg(0, Qt::Window); modal_widg.setObjectName(QLatin1String(__FILE__ "__modal_dlg")); QApplicationPrivate::enterModal(&modal_widg); PMSessionPrintDialog(d->ep->session, d->ep->settings, d->ep->format, &result); QApplicationPrivate::leaveModal(&modal_widg); } if (result) { UInt32 frompage, topage; PMGetFirstPage(d->ep->settings, &frompage); PMGetLastPage(d->ep->settings, &topage); topage = qMin(UInt32(INT_MAX), topage); setFromTo(frompage, topage); // OK, I need to map these values back let's see // If from is 1 and to is INT_MAX, then print it all // (Apologies to the folks with more than INT_MAX pages) // ...that's a joke. if (fromPage() == 1 && toPage() == INT_MAX) { setPrintRange(AllPages); setFromTo(0,0); } else { setPrintRange(PageRange); // In a way a lie, but it shouldn't hurt. // Carbon hands us back a very large number here even for ALL, set it to max // in that case to follow the behavior of the other print dialogs. if (maxPage() < toPage()) setFromTo(fromPage(), maxPage()); } // Keep us in sync with file output PMDestinationType dest; PMSessionGetDestinationType(d->ep->session, d->ep->settings, &dest); if (dest == kPMDestinationFile) { QCFType<CFURLRef> file; PMSessionCopyDestinationLocation(d->ep->session, d->ep->settings, &file); UInt8 localFile[2048]; // Assuming there's a POSIX file system here. CFURLGetFileSystemRepresentation(file, true, localFile, sizeof(localFile)); d->ep->outputFilename = QString::fromUtf8(reinterpret_cast<const char *>(localFile)); } } return result; }
Page* Fermata::page() const { System* s = system(); return toPage(s ? s->parent() : 0); }