📄 qapplication_qws.cpp
字号:
region_offset_window = 0; } else { if (region_offset_window == re->window() && !region_offset.isNull()) {// qDebug("Rgn Adjust a %d, %d", region_offset.x(), region_offset.y()); translateExpose(re, region_offset); } if (!region_event || re->window() == region_event->window()) { if (region_event) { QRegion r1; r1.setRects(re->rectangles, re->simpleData.nrectangles); QRegion r2; r2.setRects(region_event->rectangles, region_event->simpleData.nrectangles); QRegion ur(r1 + r2); region_event->setData(reinterpret_cast<const char *>(ur.rects().constData()), ur.rects().count() * sizeof(QRect), true); region_event->simpleData.nrectangles = ur.rects().count(); delete e; } else { region_event = re; } } else { queue.append(e); } }#endif // 0 (RegionModified)#ifndef QT_NO_QWS_PROPERTIES } else if (e->type == QWSEvent::PropertyReply) { QWSPropertyReplyEvent *pe = static_cast<QWSPropertyReplyEvent*>(e); int len = pe->simpleData.len; char *data; if (len <= 0) { data = 0; } else { data = new char[len]; memcpy(data, pe->data, len) ; } QPaintDevice::qwsDisplay()->getPropertyLen = len; QPaintDevice::qwsDisplay()->getPropertyData = data; delete e;#endif // QT_NO_QWS_PROPERTIES } else if (e->type==QWSEvent::MaxWindowRect && qt_screen) { // Process this ASAP, in case new widgets are created (startup) setMaxWindowRect((static_cast<QWSMaxWindowRectEvent*>(e))->simpleData.rect); delete e;#ifndef QT_NO_COP } else if (e->type == QWSEvent::QCopMessage) { QWSQCopMessageEvent *pe = static_cast<QWSQCopMessageEvent*>(e); if (pe->simpleData.is_response) { qcop_response = pe; } else { queue.append(e); }#endif } else { queue.append(e); } //debugQueue();#ifndef QT_NO_QWS_MULTIPROCESS if (csocket && bytesRead >= bytesAvailable) break;#endif e = readMore(); }}#if 0void QWSDisplay::Data::offsetPendingExpose(int window, const QPoint &offset){ if (offset.isNull()) return; region_offset = offset; region_offset_window = window; for (int i = 0; i < queue.size(); ++i) { QWSEvent *e = queue.at(i); if (e->type == QWSEvent::RegionModified) { QWSRegionModifiedEvent *re = static_cast<QWSRegionModifiedEvent *>(e); if (!re->simpleData.is_ack && region_offset_window == re->window()) {// qDebug("Rgn Adjust b %d, %d", region_offset.x(), region_offset.y()); translateExpose(re, region_offset); } } } if (region_event && region_offset_window == region_event->window()) {// qDebug("Rgn Adjust c %d, %d", region_offset.x(), region_offset.y()); translateExpose(region_event, region_offset); }}#endif#ifndef QT_NO_QWS_MULTIPROCESSstatic int qws_connection_timeout = 5;void QWSDisplay::Data::connectToPipe(){ Q_ASSERT(csocket); int timeout = qgetenv("QWS_CONNECTION_TIMEOUT").toInt(); if (timeout) qws_connection_timeout = timeout; const QString pipe = qws_qtePipeFilename(); int i = 0; while (!csocket->connectToLocalFile(pipe)) { if (++i > qws_connection_timeout) { qWarning("No Qtopia Core server appears to be running."); qWarning("If you want to run this program as a server,"); qWarning("add the \"-qws\" command-line option."); exit(1); } sleep(1); }}void QWSDisplay::Data::waitForConnection(){ connected_event = 0; for (int i = 0; i < qws_connection_timeout; i++) { fillQueue(); if (connected_event) return; csocket->flush(); csocket->waitForReadyRead(1000); } csocket->flush(); if (!connected_event) qFatal("Did not receive a connection event from the qws server");}void QWSDisplay::Data::waitForRegionAck(int winId){ QWSEvent *ack = 0; if (csocket) { // GuiClient int i = 0; while (!ack) { fillQueue(); while (i < queue.size()) { QWSEvent *e = queue.at(i); if (e->type == QWSEvent::Region && e->window() == winId) { ack = e; queue.removeAt(i); break; } ++i; } if (!ack) { csocket->flush(); csocket->waitForReadyRead(1000); } } } else { // GuiServer fillQueue(); for (int i = 0; i < queue.size(); /* nothing */) { QWSEvent *e = queue.at(i); if (e->type == QWSEvent::Region && e->window() == winId) { ack = e; queue.removeAt(i); break; } ++i; } if (!ack) // already processed return; } Q_ASSERT(ack); qApp->qwsProcessEvent(ack); delete ack;}void QWSDisplay::Data::waitForRegionEvents(int winId){ if (!clientLock) return; // fill queue with unreceived region events if (!clientLock->hasLock(QWSLock::RegionEvent)) { for (;;) { fillQueue(); if (clientLock->hasLock(QWSLock::RegionEvent)) break; csocket->flush(); csocket->waitForReadyRead(1000); } } // check the queue for pending region events QWSEvent *regionEvent = 0; for (int i = 0; i < queue.size(); /* nothing */) { QWSEvent *e = queue.at(i); if (e->type == QWSEvent::Region && e->window() == winId) { delete regionEvent; regionEvent = e; queue.removeAt(i); } else { ++i; } } if (regionEvent) { qApp->qwsProcessEvent(regionEvent); delete regionEvent; }}#endif // QT_NO_QWS_MULTIPROCESSvoid QWSDisplay::Data::waitForCreation(){ fillQueue();#ifndef QT_NO_QWS_MULTIPROCESS while (unused_identifiers.count() == 0) { if (csocket) { csocket->flush(); csocket->waitForReadyRead(1000); } fillQueue(); }#endif}#ifndef QT_NO_QWS_MULTIPROCESSvoid QWSDisplay::Data::waitForPropertyReply(){ if (!csocket) return; fillQueue(); while (qt_fbdpy->getPropertyLen == -2) { csocket->flush(); csocket->waitForReadyRead(1000); fillQueue(); }}#endif#ifndef QT_NO_COPvoid QWSDisplay::Data::waitForQCopResponse(){ for (;;) { fillQueue(); if (qcop_response) break;#ifndef QT_NO_QWS_MULTIPROCESS if (csocket) { csocket->flush(); csocket->waitForReadyRead(1000); }#endif } queue.prepend(qcop_response); qcop_response = 0;}#endif/*! \class QWSDisplay qwsdisplay_qws.h \brief The QWSDisplay class provides a display for QWS; it is an internal class. \internal \ingroup qws*/QWSDisplay::QWSDisplay(){ d = new Data(0, qws_single_process);}QWSDisplay::~QWSDisplay(){ delete d; delete lock; lock = 0;}bool QWSDisplay::grabbed(){ return lock->locked();}void QWSDisplay::grab(){ lock->lock(QLock::Read);}void QWSDisplay::grab(bool write){ lock->lock(write ? QLock::Write : QLock::Read);}void QWSDisplay::ungrab(){ lock->unlock();}#if 0QWSRegionManager *QWSDisplay::regionManager() const{ return d->rgnMan;}#endifbool QWSDisplay::eventPending() const{#ifndef QT_NO_QWS_MULTIPROCESS d->flush();#endif d->fillQueue(); return d->queueNotEmpty();}/* Caller must delete return value! */QWSEvent *QWSDisplay::getEvent(){ d->fillQueue(); Q_ASSERT(d->queueNotEmpty()); QWSEvent* e = d->dequeue(); return e;}uchar* QWSDisplay::frameBuffer() const { return qt_screen->base(); }int QWSDisplay::width() const { return qt_screen->width(); }int QWSDisplay::height() const { return qt_screen->height(); }int QWSDisplay::depth() const { return qt_screen->depth(); }int QWSDisplay::pixmapDepth() const { return qt_screen->pixmapDepth(); }bool QWSDisplay::supportsDepth(int depth) const { return qt_screen->supportsDepth(depth); }uchar *QWSDisplay::sharedRam() const { return d->sharedRam; }int QWSDisplay::sharedRamSize() const { return d->sharedRamSize; }#ifndef QT_NO_QWS_PROPERTIESvoid QWSDisplay::addProperty(int winId, int property){ QWSAddPropertyCommand cmd; cmd.simpleData.windowid = winId; cmd.simpleData.property = property; d->sendCommand(cmd);}void QWSDisplay::setProperty(int winId, int property, int mode, const QByteArray &data){ QWSSetPropertyCommand cmd; cmd.simpleData.windowid = winId; cmd.simpleData.property = property; cmd.simpleData.mode = mode; cmd.setData(data.constData(), data.size()); d->sendCommand(cmd);}void QWSDisplay::setProperty(int winId, int property, int mode, const char * data){ QWSSetPropertyCommand cmd; cmd.simpleData.windowid = winId; cmd.simpleData.property = property; cmd.simpleData.mode = mode; cmd.setData(data, strlen(data)); d->sendCommand(cmd);}void QWSDisplay::removeProperty(int winId, int property){ QWSRemovePropertyCommand cmd; cmd.simpleData.windowid = winId; cmd.simpleData.property = property; d->sendCommand(cmd);}/* It is the caller's responsibility to delete[] \a data. */bool QWSDisplay::getProperty(int winId, int property, char *&data, int &len){ if (d->directServerConnection()) { const char *propertyData; bool retval = qwsServer->d_func()->get_property(winId, property, propertyData, len); if (len <= 0) { data = 0; } else { data = new char[len]; memcpy(data, propertyData, len) ; } return retval; } QWSGetPropertyCommand cmd; cmd.simpleData.windowid = winId; cmd.simpleData.property = property; d->sendCommand(cmd); getPropertyLen = -2; getPropertyData = 0;#ifndef QT_NO_QWS_MULTIPROCESS d->waitForPropertyReply();#endif len = getPropertyLen; data = getPropertyData; getPropertyLen = -2; getPropertyData = 0; return len != -1;}#endif // QT_NO_QWS_PROPERTIESvoid QWSDisplay::setAltitude(int winId, int alt, bool fixed){ QWSChangeAltitudeCommand cmd;#ifdef QT_DEBUG memset(cmd.simpleDataPtr, 0, sizeof(cmd.simpleData)); //shut up Valgrind#endif cmd.simpleData.windowid = winId; cmd.simpleData.altitude = QWSChangeAltitudeCommand::Altitude(alt); cmd.simpleData.fixed = fixed; if (d->directServerConnection()) { qwsServer->d_func()->set_altitude(&cmd); } else { d->sendSynchronousCommand(cmd); }}void QWSDisplay::setOpacity(int winId, int opacity){ QWSSetOpacityCommand cmd; cmd.simpleData.windowid = winId; cmd.simpleData.opacity = opacity; if (d->directServerConnection()) { qwsServer->d_func()->set_opacity(&cmd); } else { d->sendCommand(cmd); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -