bool HaikuWindowProxy::QuitRequested() { Q_EMIT quitRequested(); // Return false to prevent Haiku windowing system to clean up // the BWindow and BView instances. We will do that ourself when // Qt invokes the dtor of QHaikuWindow return false; }
SimplyWidget::SimplyWidget(QWidget *ip_parent) : QWidget(ip_parent) , mp_SimplyView(new SimplyView(this)) { //QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); connect(mp_SimplyView, SIGNAL(quitRequested()), SLOT(close())); QVBoxLayout *p_layout = new QVBoxLayout; p_layout->addWidget(mp_SimplyView); p_layout->setMargin(0); setLayout(p_layout); }
MainApplication::MainApplication(QObject *parent) : QObject(parent) { raopService = new RaopService(0); dnssdService = new DnssdService(0); trayIconMenu = new QMenu(0); // Initialize the service raopService->init(10, &m_callbacks); dnssdService->init(); quitAction = new QAction(tr("&Quit"), trayIconMenu); connect(quitAction, SIGNAL(triggered()), this, SIGNAL(quitRequested())); trayIconMenu->addAction(quitAction); // Construct the actual system tray icon trayIcon = new QSystemTrayIcon(this); trayIcon->setContextMenu(trayIconMenu); trayIcon->setIcon(QIcon(":icons/airtv.svg")); }
void PDFViewerWindow::keyPressEvent(QKeyEvent* e) { QWidget::keyPressEvent(e); switch( e->key() ) { case Qt::Key_G: changePageNumberDialog(); break; case Qt::Key_F12: case Qt::Key_S: //Swap emit screenSwapRequested(); break; case Qt::Key_Escape: case Qt::Key_Q: //quit emit quitRequested(); break; case Qt::Key_Space: case Qt::Key_Enter: case Qt::Key_Return: case Qt::Key_PageDown: case Qt::Key_Down: case Qt::Key_Right: case Qt::Key_F: // Forward case Qt::Key_N: // Next emit nextPageRequested(); break; case Qt::Key_PageUp: case Qt::Key_Up: case Qt::Key_Left: case Qt::Key_Backspace: case Qt::Key_B: // Back case Qt::Key_P: //Previous emit previousPageRequested(); break; case Qt::Key_Home: case Qt::Key_H: //Home emit restartRequested(); break; } }
QHaikuWindow::QHaikuWindow(QWindow *window) : QPlatformWindow(window) , m_window(Q_NULLPTR) , m_windowState(Qt::WindowNoState) { const QRect rect = initialGeometry(window, window->geometry(), DefaultWindowWidth, DefaultWindowHeight); HaikuWindowProxy *haikuWindow = new HaikuWindowProxy(window, rect, Q_NULLPTR); connect(haikuWindow, SIGNAL(moved(QPoint)), SLOT(haikuWindowMoved(QPoint))); connect(haikuWindow, SIGNAL(resized(QSize,bool)), SLOT(haikuWindowResized(QSize,bool))); connect(haikuWindow, SIGNAL(windowActivated(bool)), SLOT(haikuWindowActivated(bool))); connect(haikuWindow, SIGNAL(minimized(bool)), SLOT(haikuWindowMinimized(bool))); connect(haikuWindow, SIGNAL(zoomed()), SLOT(haikuWindowZoomed())); connect(haikuWindow, SIGNAL(quitRequested()), SLOT(haikuWindowQuitRequested()), Qt::BlockingQueuedConnection); m_window = haikuWindow; if (!m_window) qFatal("QHaikuWindow: failed to create window"); setGeometry(rect); setWindowFlags(window->flags()); }
int main(int argc, char *argv[]) { QtSingleApplication a(argc, argv); if (a.isRunning()) { return 0; } a.setApplicationName("AirTV"); if (!QSystemTrayIcon::isSystemTrayAvailable()) { QMessageBox::critical(0, QObject::tr("Systray"), QObject::tr("I couldn't detect any system tray " "on this system.")); return 1; } QApplication::setQuitOnLastWindowClosed(false); MainApplication m; QObject::connect(&m, SIGNAL(quitRequested()), &a, SLOT(quit())); QObject::connect(&a, SIGNAL(aboutToQuit()), &m, SLOT(aboutToQuit())); m.start(); return a.exec(); }
int ParallelFileProcessor::run() { FileEntry entry; int i, nRequested = nJobs; double N = size(), prevPerc = 0; if( nJobs >= 1 ){ allDoneEvent = CreateEvent( NULL, false, false, NULL ); } for( i = 0 ; i < nJobs ; ++i ){ // workers attacking the item list rear are created last // (not that this makes any difference except in the stats summary print out...) bool fromRear = i >= nJobs - nReverse; FileProcessor *thread = new FileProcessor(this, fromRear, i); if( thread ){ threadPool.push_back(thread); } else{ nJobs -= 1; } } if( nJobs != nRequested ){ fprintf( stderr, "Parallel processing with %ld instead of %d threads\n", nJobs, nRequested ); } const double startTime = HRTime_Time(); for( i = 0 ; i < nJobs ; ++i ){ threadPool[i]->Start(); } if( allDoneEvent ){ DWORD waitResult = ~WAIT_OBJECT_0; // contrary to what one might expect, we should NOT use size()==0 as a stopping criterium. // The queue size is decreased when a worker picks a new file to process, not when it's // finished. Using size()==0 as a stopping criterium caused the processing interrupts // that were observed with large files. while( nJobs >= 1 && !quitRequested() && waitResult != WAIT_OBJECT_0 ){ if( nJobs ){ double perc = 100.0 * nProcessed / N; if( perc >= prevPerc + 10 ){ fprintf( stderr, "%s %d%%", (prevPerc > 0)? " .." : "", int(perc + 0.5) ); if( verboseLevel > 1 ){ double avCPUUsage = 0; for( i = 0 ; i < nJobs ; ++i ){ if( threadPool[i]->nProcessed && threadPool[i]->avCPUUsage > 0){ avCPUUsage += threadPool[i]->avCPUUsage / threadPool[i]->nProcessed; } } if (avCPUUsage >= 0) { // we report the combined, not the average CPU time, so N threads // having run at 100% CPU will print as N00% CPU. fprintf( stderr, " [%0.2lf%%]", avCPUUsage ); } } fflush(stderr); prevPerc = perc; } } waitResult = WaitForSingleObject( allDoneEvent, 2000 ); } if( (quitRequested() && !threadPool.empty()) || nProcessing > 0 ){ // the WaitForSingleObject() call above was interrupted by the signal that // led to quitRequested() being set and as a result the workers haven't yet // had the chance to exit cleanly. Give them that chance now. fprintf( stderr, " quitting [%ld]...", nProcessing ); fflush(stderr); waitResult = WaitForSingleObject( allDoneEvent, nProcessing * 500 ); for( i = 0 ; i < nProcessing && waitResult == WAIT_TIMEOUT ; ++i ){ fprintf( stderr, " [%ld]...", nProcessing) ; fflush(stderr); waitResult = WaitForSingleObject( allDoneEvent, nProcessing * 500 ); } } fputc( '\n', stderr ); CloseHandle(allDoneEvent); allDoneEvent = NULL; } i = 0; double totalUTime = 0, totalSTime = 0; // forced verbose mode: prints out statistics even if some aren't meaningful when // verboseLevel==0 (like compression ratios in zfsctool). int verbose = verboseLevel; if (getenv("VERBOSE")) { verbose = atoi(getenv("VERBOSE")); } while( !threadPool.empty() ){ FileProcessor *thread = threadPool.front(); if( thread->GetExitCode() == (THREAD_RETURN)STILL_ACTIVE ){ fprintf( stderr, "Stopping worker thread #%d that is still %s!\n", i, (thread->scope)? "processing" : "active" ); std::string currentFileName = thread->currentFileName(); if( currentFileName.c_str()[0] ){ fprintf( stderr, "\tcurrent file: %s\n", currentFileName.c_str() ); } thread->Stop(true); } if( thread->nProcessed ){ if( verbose ){ fprintf( stderr, "Worker thread #%d processed %ld files", i, thread->nProcessed ); fprintf( stderr, ", %0.2lf Kb [%0.2lf Kb] -> %0.2lf Kb [%0.2lf Kb] (%0.2lf%%)", thread->runningTotalRaw/1024.0, thread->runningTotalRaw/1024.0/thread->nProcessed, thread->runningTotalCompressed/1024.0, thread->runningTotalCompressed/1024.0/thread->nProcessed, 100.0 * double(thread->runningTotalRaw - thread->runningTotalCompressed) / double(thread->runningTotalRaw) ); if( thread->isBackwards ){ fprintf( stderr, " [reverse]"); } if( verbose > 1 ){ if( thread->hasInfo ){ fprintf( stderr, "\n\t%gs user + %gs system", thread->userTime, thread->systemTime ); totalUTime += thread->userTime, totalSTime += thread->systemTime; #ifdef __MACH__ fprintf( stderr, "; %ds slept", thread->threadInfo.sleep_time ); #elif defined(CLOCK_THREAD_CPUTIME_ID) fprintf(stderr, " ; %gs CPU", thread->cpuTime); #endif const auto acu = thread->avCPUUsage / thread->nProcessed; if (thread->avCPUUsage >= 0) { fprintf(stderr, "; %0.2lf%%", acu); } if (thread->m_ThreadCtx.m_runTime > 0) { const auto rcu = (thread->userTime + thread->systemTime) * 100.0 / thread->m_ThreadCtx.m_runTime; if (std::fabs(rcu - acu) > 5) { fprintf(stderr, "; %0.2lf%% real", rcu); } } } } fputc( '\n', stderr ); } } delete thread; threadPool.pop_front(); i++; } const double endTime = HRTime_Time(); if( verbose > 1 && (totalUTime || totalSTime)){ const double totalCPUUsage = (totalUTime + totalSTime) * 100.0 / (endTime - startTime); fprintf(stderr, "Total %gs user + %gs system; %gs total; %0.2lf%% CPU\n", totalUTime, totalSTime, endTime - startTime, totalCPUUsage); } return nProcessed; }
// The event loop itself. void GfuiEventLoop::operator()() { SDL_Event event; // Event structure #if SDL_MAJOR_VERSION >= 2 static int unicode = 0; static SDL_Keymod modifier = KMOD_NONE; #endif // Check for events. while (!quitRequested()) { // Loop until there are no events left in the queue. while (!quitRequested() && SDL_PollEvent(&event)) { // Process events we care about, and ignore the others. switch(event.type) { case SDL_KEYDOWN: #if SDL_MAJOR_VERSION < 2 injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 0,event.key.keysym.unicode); #else if((event.key.keysym.sym & SDLK_SCANCODE_MASK) == SDLK_SCANCODE_MASK) { injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 0,0); } else if(false == isprint(event.key.keysym.sym)) { injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 0,0); } else if((event.key.keysym.mod != KMOD_NONE) &&(event.key.keysym.mod != KMOD_LSHIFT) &&(event.key.keysym.mod != KMOD_RSHIFT)) { injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 0,0); } #if 0 else { printf("SDL_KEYDOWN: %c\r\n",(char)event.key.keysym.sym); } #endif #endif break; #if SDL_MAJOR_VERSION >= 2 case SDL_TEXTINPUT: unicode = (int)(event.text.text[0]); modifier = SDL_GetModState(); injectKeyboardEvent(unicode,modifier, 0,0); //printf("SDL_TEXTINPUT: %c %X\r\n",(char)unicode,modifier); break; #endif case SDL_KEYUP: #if SDL_MAJOR_VERSION < 2 injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 1,event.key.keysym.unicode); #else if((event.key.keysym.sym & SDLK_SCANCODE_MASK) == SDLK_SCANCODE_MASK) { injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 1,0); } else if(false == isprint(event.key.keysym.sym)) { injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 1,0); } else if((event.key.keysym.mod != KMOD_NONE) &&(event.key.keysym.mod != KMOD_LSHIFT) &&(event.key.keysym.mod != KMOD_RSHIFT)) { injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 1,0); } else { injectKeyboardEvent(unicode, event.key.keysym.mod, 1,0); //printf("SDL_KEYUP: %c unicode = %c\r\n",(char)event.key.keysym.sym,unicode); } #endif break; case SDL_MOUSEMOTION: injectMouseMotionEvent(event.motion.state, event.motion.x, event.motion.y); break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: injectMouseButtonEvent(event.button.button, event.button.state, event.button.x, event.button.y); break; case SDL_QUIT: postQuit(); break; #if SDL_MAJOR_VERSION >= 2 #if SDL_JOYSTICK case SDL_JOYAXISMOTION: injectJoystickAxisEvent(event.jaxis.which, event.jaxis.axis, (float) event.jaxis.value / 32768); break; case SDL_JOYBUTTONDOWN: injectJoystickButtonEvent(event.jbutton.which, event.jbutton.button, SDL_PRESSED); break; case SDL_JOYBUTTONUP: injectJoystickButtonEvent(event.jbutton.which, event.jbutton.button, 0); break; #endif case SDL_WINDOWEVENT_EXPOSED: #else case SDL_VIDEOEXPOSE: #endif forceRedisplay(); break; } } if (!quitRequested()) { // Recompute if anything to. recompute(); // Redisplay if anything to. redisplay(); } } GfLogTrace("Quitting GFUI event loop.\n"); }
DSPDFViewer::DSPDFViewer(const RuntimeConfiguration& r): runtimeConfiguration(r), pdfDocument(Poppler::Document::load(r.filePathQString())) , renderFactory(r.filePathQString()), m_pagenumber(0), audienceWindow(0, r.useFullPage()? PagePart::FullPage : PagePart::LeftHalf , false, r), secondaryWindow(1, r.useFullPage()? PagePart::FullPage : PagePart::RightHalf, true, r, r.useSecondScreen() ) { qDebug() << "Starting constructor" ; if ( ! r.useSecondScreen() ) { secondaryWindow.hide(); } audienceWindow.showLoadingScreen(0); secondaryWindow.showLoadingScreen(0); if ( ! pdfDocument || pdfDocument->isLocked() ) { /// FIXME: Error message throw std::runtime_error("I was not able to open the PDF document. Sorry."); } setHighQuality(true); qDebug() << "Connecting audience window"; audienceWindow.setPageNumberLimits(0, numberOfPages()-1); connect( &renderFactory, SIGNAL(pageRendered(QSharedPointer<RenderedPage>)), &audienceWindow, SLOT(renderedPageIncoming(QSharedPointer<RenderedPage>))); connect( &renderFactory, SIGNAL(thumbnailRendered(QSharedPointer<RenderedPage>)), &audienceWindow, SLOT(renderedThumbnailIncoming(QSharedPointer<RenderedPage>))); connect( &audienceWindow, SIGNAL(nextPageRequested()), this, SLOT(goForward())); connect( &audienceWindow, SIGNAL(previousPageRequested()), this, SLOT(goBackward())); connect( &audienceWindow, SIGNAL(pageRequested(uint)), this, SLOT(gotoPage(uint))); connect( &audienceWindow, SIGNAL(quitRequested()), this, SLOT(exit())); connect( &audienceWindow, SIGNAL(rerenderRequested()), this, SLOT(renderPage())); connect( &audienceWindow, SIGNAL(restartRequested()), this, SLOT(goToStartAndResetClocks())); connect( &audienceWindow, SIGNAL(screenSwapRequested()), this, SLOT(swapScreens()) ); if ( r.useSecondScreen() ) { qDebug() << "Connecting secondary window"; secondaryWindow.setPageNumberLimits(0, numberOfPages()-1); connect( &renderFactory, SIGNAL(pageRendered(QSharedPointer<RenderedPage>)), &secondaryWindow, SLOT(renderedPageIncoming(QSharedPointer<RenderedPage>))); connect( &renderFactory, SIGNAL(thumbnailRendered(QSharedPointer<RenderedPage>)), &secondaryWindow, SLOT(renderedThumbnailIncoming(QSharedPointer<RenderedPage>))); connect( &secondaryWindow, SIGNAL(nextPageRequested()), this, SLOT(goForward())); connect( &secondaryWindow, SIGNAL(previousPageRequested()), this, SLOT(goBackward())); connect( &secondaryWindow, SIGNAL(pageRequested(uint)), this, SLOT(gotoPage(uint))); connect( &secondaryWindow, SIGNAL(quitRequested()), this, SLOT(exit())); connect( &secondaryWindow, SIGNAL(rerenderRequested()), this, SLOT(renderPage())); connect( &secondaryWindow, SIGNAL(restartRequested()), this, SLOT(goToStartAndResetClocks())); connect( &secondaryWindow, SIGNAL(screenSwapRequested()), this, SLOT(swapScreens()) ); connect( this, SIGNAL(presentationClockUpdate(QTime)), &secondaryWindow, SLOT(updatePresentationClock(QTime))); connect( this, SIGNAL(slideClockUpdate(QTime)), &secondaryWindow, SLOT(updateSlideClock(QTime))); connect( this, SIGNAL(wallClockUpdate(QTime)), &secondaryWindow, SLOT(updateWallClock(QTime))); } renderPage(); clockDisplayTimer.setInterval(TIMER_UPDATE_INTERVAL); clockDisplayTimer.start(); connect( &clockDisplayTimer, SIGNAL(timeout()), this, SLOT(sendAllClockSignals())); sendAllClockSignals(); }