void WindowGrabber::mousePressEvent( QMouseEvent *e ) { if ( e->button() == Qt::RightButton ) { yPos = e->globalY(); } else { if ( current != -1 ) { windowPosition = e->globalPos() - e->pos() + windows[current].topLeft(); emit windowGrabbed( palette().brush( backgroundRole() ).texture().copy( windows[ current ] ) ); } else { windowPosition = QPoint(0,0); emit windowGrabbed( QPixmap() ); } accept(); } }
void KSnapshot::performGrab() { int x = 0; int y = 0; grabber->releaseMouse(); grabber->hide(); grabTimer.stop(); title.clear(); windowClass.clear(); if ( mode() == ChildWindow ) { WindowGrabber wndGrab; connect( &wndGrab, SIGNAL(windowGrabbed(QPixmap)), SLOT(slotWindowGrabbed(QPixmap)) ); wndGrab.exec(); QPoint offset = wndGrab.lastWindowPosition(); x = offset.x(); y = offset.y(); qDebug() << "last window position is" << offset; } else if ( mode() == WindowUnderCursor ) { snapshot = WindowGrabber::grabCurrent( includeDecorations() ); QPoint offset = WindowGrabber::lastWindowPosition(); x = offset.x(); y = offset.y(); // If we're showing decorations anyway then we'll add the title and window // class to the output image meta data. if ( includeDecorations() ) { title = WindowGrabber::lastWindowTitle(); } } else if ( mode() == CurrentScreen ) { qDebug() << "Desktop Geom2 = " << QApplication::desktop()->geometry(); QDesktopWidget *desktop = QApplication::desktop(); int screenId = desktop->screenNumber( QCursor::pos() ); qDebug() << "Screenid2 = " << screenId; QRect geom = desktop->screenGeometry( screenId ); qDebug() << "Geometry2 = " << geom; x = geom.x(); y = geom.y(); snapshot = QPixmap::grabWindow( desktop->winId(), x, y, geom.width(), geom.height() ); } else { snapshot = QPixmap::grabWindow( QApplication::desktop()->winId() ); } #ifdef HAVE_X11_EXTENSIONS_XFIXES_H if (haveXFixes && includePointer()) { grabPointerImage(x, y); } #endif // HAVE_X11_EXTENSIONS_XFIXES_H if ( snapshot.isNull() ) { mainWidget->ok_btn->setEnabled(false); mainWidget->save_btn->setEnabled(false); } else { mainWidget->ok_btn->setEnabled(true); mainWidget->save_btn->setEnabled(true); } updatePreview(); QApplication::restoreOverrideCursor(); modified = true; updateCaption(); if (savedPosition != QPoint(-1, -1)) { move(savedPosition); } show(); }