亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xserverdesktop.cc

?? Informix Table extraction queries have been optimized
?? CC
?? 第 1 頁 / 共 3 頁
字號:
        }      }    }    int rfbMaskBytesPerRow = (w + 7) / 8;    rdr::U8* cursorMask = new rdr::U8[rfbMaskBytesPerRow * h];    for (int j = 0; j < h; j++) {      for (int i = 0; i < rfbMaskBytesPerRow; i++)#if (BITMAP_BIT_ORDER == MSBFirst)        cursorMask[j * rfbMaskBytesPerRow + i]          = cursor->bits->mask[j * xMaskBytesPerRow + i];#else        cursorMask[j * rfbMaskBytesPerRow + i]          = reverseBits[cursor->bits->mask[j * xMaskBytesPerRow + i]];#endif    }    server->setCursor(cursor->bits->width, cursor->bits->height,                      Point(cursor->bits->xhot, cursor->bits->yhot),                      cursorData, cursorMask);    server->tryUpdate();    delete [] cursorData;    delete [] cursorMask;  } catch (rdr::Exception& e) {    vlog.error("XserverDesktop::setCursor: %s",e.str());  }}static void printRegion(RegionPtr reg){  int nrects = REGION_NUM_RECTS(reg);  fprintf(stderr,"Region num rects %2d extents %3d,%3d %3dx%3d\n",nrects,          (REGION_EXTENTS(pScreen,reg))->x1,          (REGION_EXTENTS(pScreen,reg))->y1,          (REGION_EXTENTS(pScreen,reg))->x2-(REGION_EXTENTS(pScreen,reg))->x1,          (REGION_EXTENTS(pScreen,reg))->y2-(REGION_EXTENTS(pScreen,reg))->y1);  for (int i = 0; i < nrects; i++) {    fprintf(stderr,"    rect %3d,%3d %3dx%3d\n",            REGION_RECTS(reg)[i].x1,            REGION_RECTS(reg)[i].y1,            REGION_RECTS(reg)[i].x2-REGION_RECTS(reg)[i].x1,            REGION_RECTS(reg)[i].y2-REGION_RECTS(reg)[i].y1);  }}CARD32 XserverDesktop::deferredUpdateTimerCallback(OsTimerPtr timer,                                                   CARD32 now, pointer arg){  XserverDesktop* desktop = (XserverDesktop*)arg;  desktop->deferredUpdateTimerSet = false;  try {    desktop->server->tryUpdate();  } catch (rdr::Exception& e) {    vlog.error("XserverDesktop::deferredUpdateTimerCallback: %s",e.str());  }  return 0;}void XserverDesktop::deferUpdate(){  if (deferUpdateTime != 0) {    if (!deferredUpdateTimerSet || alwaysSetDeferUpdateTimer) {      deferredUpdateTimerSet = true;      deferredUpdateTimer = TimerSet(deferredUpdateTimer, 0,                                     deferUpdateTime,                                     deferredUpdateTimerCallback, this);    }  } else {    server->tryUpdate();  }}void XserverDesktop::add_changed(RegionPtr reg){  if (ignoreHooks_) return;  if (grabbing) return;  try {    rfb::Region rfbReg;    rfbReg.setExtentsAndOrderedRects((ShortRect*)REGION_EXTENTS(pScreen, reg),                                     REGION_NUM_RECTS(reg),                                     (ShortRect*)REGION_RECTS(reg));    server->add_changed(rfbReg);    deferUpdate();  } catch (rdr::Exception& e) {    vlog.error("XserverDesktop::add_changed: %s",e.str());  }}void XserverDesktop::add_copied(RegionPtr dst, int dx, int dy){  if (ignoreHooks_) return;  if (grabbing) return;  try {    rfb::Region rfbReg;    rfbReg.setExtentsAndOrderedRects((ShortRect*)REGION_EXTENTS(pScreen, dst),                                     REGION_NUM_RECTS(dst),                                     (ShortRect*)REGION_RECTS(dst));    server->add_copied(rfbReg, rfb::Point(dx, dy));    deferUpdate();  } catch (rdr::Exception& e) {    vlog.error("XserverDesktop::add_copied: %s",e.str());  }}void XserverDesktop::positionCursor(){  if (!cursorPos.equals(oldCursorPos)) {    oldCursorPos = cursorPos;    (*pScreen->SetCursorPosition) (pScreen, cursorPos.x, cursorPos.y, FALSE);    server->setCursorPos(cursorPos);    server->tryUpdate();  }}void XserverDesktop::blockHandler(fd_set* fds){  try {    ScreenPtr screenWithCursor = GetCurrentRootWindow()->drawable.pScreen;    if (screenWithCursor == pScreen) {      int x, y;      GetSpritePosition(&x, &y);      if (x != cursorPos.x || y != cursorPos.y) {        cursorPos = oldCursorPos = Point(x, y);        server->setCursorPos(cursorPos);        server->tryUpdate();      }    }    if (listener)      FD_SET(listener->getFd(), fds);    if (httpListener)      FD_SET(httpListener->getFd(), fds);    std::list<Socket*> sockets;    server->getSockets(&sockets);    std::list<Socket*>::iterator i;    for (i = sockets.begin(); i != sockets.end(); i++) {      int fd = (*i)->getFd();      if ((*i)->isShutdown()) {        vlog.debug("client gone, sock %d",fd);        server->removeSocket(*i);        vncClientGone(fd);        delete (*i);      } else {        FD_SET(fd, fds);      }    }    if (httpServer) {      httpServer->getSockets(&sockets);      for (i = sockets.begin(); i != sockets.end(); i++) {        int fd = (*i)->getFd();        if ((*i)->isShutdown()) {          vlog.debug("http client gone, sock %d",fd);          httpServer->removeSocket(*i);          delete (*i);        } else {          FD_SET(fd, fds);        }      }    }  } catch (rdr::Exception& e) {    vlog.error("XserverDesktop::blockHandler: %s",e.str());  }}static CARD32 dummyTimerCallback(OsTimerPtr timer, CARD32 now, pointer arg) {  return 0;}void XserverDesktop::wakeupHandler(fd_set* fds, int nfds){  try {    if (nfds >= 1) {      if (listener) {        if (FD_ISSET(listener->getFd(), fds)) {          FD_CLR(listener->getFd(), fds);          Socket* sock = listener->accept();          server->addSocket(sock);          vlog.debug("new client, sock %d",sock->getFd());        }      }      if (httpListener) {        if (FD_ISSET(httpListener->getFd(), fds)) {          FD_CLR(httpListener->getFd(), fds);          Socket* sock = httpListener->accept();          httpServer->addSocket(sock);          vlog.debug("new http client, sock %d",sock->getFd());        }      }      std::list<Socket*> sockets;      server->getSockets(&sockets);      std::list<Socket*>::iterator i;      for (i = sockets.begin(); i != sockets.end(); i++) {        int fd = (*i)->getFd();        if (FD_ISSET(fd, fds)) {          FD_CLR(fd, fds);          server->processSocketEvent(*i);        }      }      if (httpServer) {        httpServer->getSockets(&sockets);        for (i = sockets.begin(); i != sockets.end(); i++) {          int fd = (*i)->getFd();          if (FD_ISSET(fd, fds)) {            FD_CLR(fd, fds);            httpServer->processSocketEvent(*i);          }        }      }      positionCursor();    }    int timeout = server->checkTimeouts();    if (timeout > 0) {      // set a dummy timer just so we are guaranteed be called again next time.      dummyTimer = TimerSet(dummyTimer, 0, timeout,                            dummyTimerCallback, 0);    }  } catch (rdr::Exception& e) {    vlog.error("XserverDesktop::wakeupHandler: %s",e.str());  }}void XserverDesktop::addClient(Socket* sock, bool reverse){  vlog.debug("new client, sock %d reverse %d",sock->getFd(),reverse);  server->addSocket(sock, reverse);}void XserverDesktop::disconnectClients(){  vlog.debug("disconnecting all clients");  return server->closeClients("Disconnection from server end");}int XserverDesktop::getQueryTimeout(void* opaqueId,                                    const char** address,                                    const char** username){  if (opaqueId && queryConnectId == opaqueId) {    vlog.info("address=%s, username=%s, timeout=%d",              queryConnectAddress.buf, queryConnectUsername.buf,              (int)queryConnectTimeout);    if (address) *address = queryConnectAddress.buf;    if (username) *username = queryConnectUsername.buf;    return queryConnectTimeout;  }  return 0;}void XserverDesktop::approveConnection(void* opaqueId, bool accept,                                       const char* rejectMsg){  if (queryConnectId == opaqueId) {    server->approveConnection((network::Socket*)opaqueId, accept, rejectMsg);    queryConnectId = 0;  }}/////////////////////////////////////////////////////////////////////////////// SDesktop callbacksvoid XserverDesktop::pointerEvent(const Point& pos, int buttonMask){  xEvent ev;  DevicePtr dev = LookupPointerDevice();  // SetCursorPosition seems to be very expensive (at least on XFree86 3.3.6  // for S3), so we delay calling it until positionCursor() is called at the  // end of processing a load of RFB.  //(*pScreen->SetCursorPosition) (pScreen, pos.x, pos.y, FALSE);  NewCurrentScreen(pScreen, pos.x, pos.y);  ev.u.u.type = MotionNotify;  ev.u.u.detail = 0;  ev.u.keyButtonPointer.rootX = pos.x;  ev.u.keyButtonPointer.rootY = pos.y;  ev.u.keyButtonPointer.time = GetTimeInMillis();  if (!pos.equals(cursorPos))    (*dev->processInputProc)(&ev, (DeviceIntPtr)dev, 1);  for (int i = 0; i < 5; i++) {    if ((buttonMask ^ oldButtonMask) & (1<<i)) {#ifdef XINPUT      // God knows why but some idiot decided to conditionally move the pointer      // mapping out of DIX, so we guess here that if XINPUT is defined we have      // to do it ourselves...      ev.u.u.detail = ((DeviceIntPtr)dev)->button->map[i + 1];#else      ev.u.u.detail = i + 1;#endif      ev.u.u.type = (buttonMask & (1<<i)) ? ButtonPress : ButtonRelease;      (*dev->processInputProc)(&ev, (DeviceIntPtr)dev, 1);    }  }  cursorPos = pos;  oldButtonMask = buttonMask;}void XserverDesktop::clientCutText(const char* str, int len){  vncClientCutText(str, len);}void XserverDesktop::grabRegion(const rfb::Region& region){  if (directFbptr) return;  if (!pScreen->GetImage) {    vlog.error("VNC error: pScreen->GetImage == 0");    return;  }  grabbing = true;  int bytesPerPixel = format.bpp/8;  int bytesPerRow = pScreen->width * bytesPerPixel;  std::vector<rfb::Rect> rects;  std::vector<rfb::Rect>::iterator i;  region.get_rects(&rects);  for (i = rects.begin(); i != rects.end(); i++) {    for (int y = i->tl.y; y < i->br.y; y++) {      (*pScreen->GetImage) ((DrawablePtr)WindowTable[pScreen->myNum],                            i->tl.x, y, i->width(), 1,                            ZPixmap, (unsigned long)~0L,                            ((char*)data                             + y * bytesPerRow + i->tl.x * bytesPerPixel));    }  }  grabbing = false;}void XserverDesktop::lookup(int index, int* r, int* g, int* b){  if ((cmap->c_class | DynamicClass) == DirectColor) {    VisualPtr v = cmap->pVisual;    *r = cmap->red  [(index & v->redMask  ) >> v->offsetRed  ].co.local.red;    *g = cmap->green[(index & v->greenMask) >> v->offsetGreen].co.local.green;    *b = cmap->blue [(index & v->blueMask ) >> v->offsetBlue ].co.local.blue;  } else {    EntryPtr pent;    pent = (EntryPtr)&cmap->red[index];    if (pent->fShared) {      *r = pent->co.shco.red->color;      *g = pent->co.shco.green->color;      *b = pent->co.shco.blue->color;    } else {      *r = pent->co.local.red;      *g = pent->co.local.green;      *b = pent->co.local.blue;    }  }}//// Keyboard handling//#define IS_PRESSED(keyc, keycode) \  ((keyc)->down[(keycode) >> 3] & (1 << ((keycode) & 7)))// ModifierState is a class which helps simplify generating a "fake" press// or release of shift, ctrl, alt, etc.  An instance of the class is created// for every modifier which may need to be pressed or released.  Then either// press() or release() may be called to make sure that the corresponding keys// are in the right state.  The destructor of the class automatically reverts// to the previous state.  Each modifier may have multiple keys associated with// it, so in the case of a fake release, this may involve releasing more than// one key.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美区一区二区三区| 亚洲国产日韩精品| 国产偷v国产偷v亚洲高清| 日韩免费观看2025年上映的电影| 91久久精品国产91性色tv| 91一区二区三区在线观看| 成人免费看片app下载| 国产传媒一区在线| 丁香婷婷综合激情五月色| 成人一道本在线| 成人黄色在线看| 91香蕉视频在线| 在线观看视频一区二区| 欧美视频一区二区三区在线观看| 欧洲视频一区二区| 欧美美女bb生活片| 欧美一区二区三区视频| 欧美mv日韩mv亚洲| 精品福利一区二区三区免费视频| 久久亚洲一区二区三区明星换脸 | 国产精品天美传媒| 国产精品成人免费在线| 亚洲伦在线观看| 亚洲国产美女搞黄色| 亚洲成人久久影院| 美女脱光内衣内裤视频久久影院| 青青草97国产精品免费观看无弹窗版| 日韩av一二三| 国产精品1区2区3区在线观看| 国产99精品国产| 日本精品一区二区三区四区的功能| 日本韩国精品在线| 欧美一区二区三区四区高清| 国产夜色精品一区二区av| 成人欧美一区二区三区| 亚洲一区二区av在线| 麻豆免费看一区二区三区| 丁香婷婷综合网| 欧美日韩免费高清一区色橹橹| 日韩欧美一级精品久久| 国产精品欧美综合在线| 亚洲图片一区二区| 国产福利电影一区二区三区| 91高清视频免费看| 精品播放一区二区| 一区二区三区丝袜| 激情久久五月天| 欧美在线一区二区| 久久精品免费在线观看| 天堂成人免费av电影一区| 韩国女主播一区| 在线视频一区二区三区| 精品国产凹凸成av人导航| 亚洲啪啪综合av一区二区三区| 男女视频一区二区| 91香蕉视频在线| 久久美女高清视频| 亚洲第一久久影院| 成人一区二区三区| 欧美成人一区二区| 亚洲午夜精品17c| 成人精品国产免费网站| 日韩欧美电影在线| 亚洲一区二区av在线| 成人av免费观看| 久久亚洲一区二区三区明星换脸| 亚洲电影第三页| 91麻豆国产精品久久| 国产亚洲一区二区在线观看| 天天免费综合色| 色婷婷久久综合| 国产精品第五页| 国产麻豆成人传媒免费观看| 91精品国产美女浴室洗澡无遮挡| 亚洲日本护士毛茸茸| 国产成人免费视频| 日韩一级完整毛片| 亚洲国产aⅴ天堂久久| youjizz国产精品| 久久久久久夜精品精品免费| 日本91福利区| 欧美日韩国产影片| 一区二区三区在线免费播放| 成人免费的视频| 久久精品人人爽人人爽| 精品在线一区二区三区| 91精品国产麻豆国产自产在线| 夜夜嗨av一区二区三区中文字幕 | 成+人+亚洲+综合天堂| 国产亚洲福利社区一区| 久久国内精品视频| 日韩天堂在线观看| 免费一级欧美片在线观看| 在线播放亚洲一区| 午夜视频在线观看一区二区三区| 日本大香伊一区二区三区| 中文字幕一区二区三中文字幕| 国产乱淫av一区二区三区 | 日韩在线播放一区二区| 欧美日韩中字一区| 亚洲综合999| 欧美日韩一卡二卡三卡| 亚洲国产一区二区视频| 欧美综合色免费| 亚洲成人午夜电影| 欧美肥胖老妇做爰| 免费观看久久久4p| 精品国产一区二区在线观看| 美女mm1313爽爽久久久蜜臀| 精品久久五月天| 国内精品视频666| 国产日韩v精品一区二区| 国产999精品久久| 国产精品第一页第二页第三页| av一区二区三区黑人| 亚洲色欲色欲www| 91福利视频在线| 丝袜a∨在线一区二区三区不卡| 在线播放日韩导航| 黄一区二区三区| 国产精品毛片高清在线完整版| zzijzzij亚洲日本少妇熟睡| 亚洲综合成人在线视频| 91精品久久久久久久99蜜桃 | kk眼镜猥琐国模调教系列一区二区| 一区在线观看免费| 欧美曰成人黄网| 久久91精品久久久久久秒播| 欧美国产国产综合| 在线精品亚洲一区二区不卡| 免费在线视频一区| 中文字幕不卡在线播放| 色偷偷88欧美精品久久久| 午夜久久久久久久久| 欧美精品一区在线观看| 99精品视频免费在线观看| 亚洲v精品v日韩v欧美v专区| 久久久蜜桃精品| 色综合色狠狠综合色| 婷婷丁香久久五月婷婷| 久久久精品免费观看| 在线观看中文字幕不卡| 精品一区二区三区免费毛片爱| 中文字幕一区日韩精品欧美| 777午夜精品视频在线播放| 国产馆精品极品| 夜夜精品浪潮av一区二区三区| 欧美成人r级一区二区三区| www.欧美色图| 日本不卡视频一二三区| 国产精品久久看| 日韩一区二区三| 色欧美片视频在线观看在线视频| 免费美女久久99| 日韩久久一区二区| 精品少妇一区二区三区视频免付费| aaa亚洲精品一二三区| 免费久久99精品国产| 亚洲天堂2016| 精品国产乱码久久久久久图片| av一二三不卡影片| 久久超碰97人人做人人爱| 亚洲精品水蜜桃| 久久先锋影音av鲁色资源 | 亚洲免费在线视频| 精品久久久久久久久久久久包黑料| 99久久99久久久精品齐齐| 蜜臀久久99精品久久久画质超高清| 国产精品国产精品国产专区不片| 欧美一区午夜视频在线观看| 97成人超碰视| 国产a区久久久| 裸体歌舞表演一区二区| 亚洲综合无码一区二区| 亚洲国产成人在线| 欧美不卡激情三级在线观看| 欧美日韩国产小视频在线观看| 972aa.com艺术欧美| 国产一区视频导航| 美女网站一区二区| 婷婷综合久久一区二区三区| 亚洲欧美一区二区久久| 欧美国产禁国产网站cc| 久久久久久久久久久久久久久99| 欧美精品丝袜久久久中文字幕| 99精品视频在线播放观看| 成人av在线一区二区| 国产99久久久国产精品免费看| 美女免费视频一区二区| 日韩激情一二三区| 亚洲大片免费看| 亚洲一区二区成人在线观看| 日韩美女视频一区二区 | 亚洲福利电影网| 亚洲国产日韩精品| 亚洲国产综合在线| 亚洲一二三专区| 一区二区三区成人| 一区二区三区在线播放| 亚洲欧美激情插|