QDesktopWidget Class Reference

#include <qdesktopwidget.h>

Inheritance diagram for QDesktopWidget:

Inheritance graph
[legend]
Collaboration diagram for QDesktopWidget:

Collaboration graph
[legend]
List of all members.

Detailed Description

Definition at line 36 of file qdesktopwidget.h.

Signals

void resized (int)
void workAreaResized (int)

Public Member Functions

 QDesktopWidget ()
 ~QDesktopWidget ()
bool isVirtualDesktop () const
int numScreens () const
int primaryScreen () const
int screenNumber (const QWidget *widget=0) const
int screenNumber (const QPoint &) const
QWidgetscreen (int screen=-1)
const QRect screenGeometry (int screen=-1) const
const QRect screenGeometry (const QWidget *widget) const
const QRect screenGeometry (const QPoint &point) const
const QRect availableGeometry (int screen=-1) const
const QRect availableGeometry (const QWidget *widget) const
const QRect availableGeometry (const QPoint &point) const

Protected Member Functions

void resizeEvent (QResizeEvent *e)

Friends

class QApplication


Constructor & Destructor Documentation

QDesktopWidget::QDesktopWidget (  ) 

Definition at line 163 of file qdesktopwidget_x11.cpp.

References d.

00164     : QWidget(*new QDesktopWidgetPrivate, 0, Qt::Desktop)
00165 {
00166     Q_D(QDesktopWidget);
00167     d->init();
00168 }

QDesktopWidget::~QDesktopWidget (  ) 

Definition at line 170 of file qdesktopwidget_x11.cpp.

00171 {
00172 }


Member Function Documentation

bool QDesktopWidget::isVirtualDesktop (  )  const

Definition at line 174 of file qdesktopwidget_x11.cpp.

References d.

Referenced by availableGeometry().

00175 {
00176     Q_D(const QDesktopWidget);
00177     return d->use_xinerama;
00178 }

int QDesktopWidget::numScreens (  )  const

Definition at line 186 of file qdesktopwidget_x11.cpp.

References d.

Referenced by QWidget::restoreGeometry().

00187 {
00188     Q_D(const QDesktopWidget);
00189     return d->screenCount;
00190 }

int QDesktopWidget::primaryScreen (  )  const

Definition at line 180 of file qdesktopwidget_x11.cpp.

References d.

Referenced by QWidget::restoreGeometry().

00181 {
00182     Q_D(const QDesktopWidget);
00183     return d->defaultScreen;
00184 }

int QDesktopWidget::screenNumber ( const QWidget widget = 0  )  const

Definition at line 270 of file qdesktopwidget_x11.cpp.

References d, QWidget::frameGeometry(), i, QWidget::isWindow(), QWidget::mapToGlobal(), QRect::moveTopLeft(), QWidget::size(), and QSize::width().

Referenced by QDialog::adjustPosition(), QDesignerWorkbench::availableGeometry(), QMenu::internalDelayedPopup(), main(), QWhatsThisPrivate::say(), and QToolTip::showText().

00271 {
00272     Q_D(const QDesktopWidget);
00273     if (!widget)
00274         return d->defaultScreen;
00275 
00276 #ifndef QT_NO_XINERAMA
00277     if (d->use_xinerama) {
00278         // this is how we do it for xinerama
00279         QRect frame = widget->frameGeometry();
00280         if (!widget->isWindow())
00281             frame.moveTopLeft(widget->mapToGlobal(QPoint(0, 0)));
00282 
00283         int maxSize = -1;
00284         int maxScreen = -1;
00285 
00286         for (int i = 0; i < d->screenCount; ++i) {
00287             QRect sect = d->rects[i].intersected(frame);
00288             int size = sect.width() * sect.height();
00289             if (size > maxSize && sect.width() > 0 && sect.height() > 0) {
00290                 maxSize = size;
00291                 maxScreen = i;
00292             }
00293         }
00294         return maxScreen;
00295     }
00296 #endif // QT_NO_XINERAMA
00297 
00298     return widget->x11Info().screen();
00299 }

Here is the call graph for this function:

int QDesktopWidget::screenNumber ( const QPoint  )  const

Definition at line 301 of file qdesktopwidget_x11.cpp.

References d, and i.

00302 {
00303     Q_D(const QDesktopWidget);
00304     int closestScreen = -1;
00305     int shortestDistance = INT_MAX;
00306     for (int i = 0; i < d->screenCount; ++i) {
00307         int thisDistance = d->pointToRect(point, d->rects[i]);
00308         if (thisDistance < shortestDistance) {
00309             shortestDistance = thisDistance;
00310             closestScreen = i;
00311         }
00312     }
00313     return closestScreen;
00314 }

QWidget * QDesktopWidget::screen ( int  screen = -1  ) 

Definition at line 192 of file qdesktopwidget_x11.cpp.

References d, Qt::Desktop, and qt_x11_create_desktop_on_screen.

Referenced by find_trans_colors(), QWidget::mapFromGlobal(), qt_check_clipboard_sentinel(), and qt_check_selection_sentinel().

00193 {
00194     Q_D(QDesktopWidget);
00195     if (d->use_xinerama)
00196         return this;
00197 
00198     if (screen < 0 || screen >= d->screenCount)
00199         screen = d->defaultScreen;
00200 
00201     if (! d->screens) {
00202         d->screens = new QWidget*[d->screenCount];
00203         memset(d->screens, 0, d->screenCount * sizeof(QWidget *));
00204         d->screens[d->defaultScreen] = this;
00205     }
00206 
00207     if (! d->screens[screen] ||               // not created yet
00208         ! (d->screens[screen]->windowType() == Qt::Desktop)) { // reparented away
00209         qt_x11_create_desktop_on_screen = screen;
00210         d->screens[screen] = new QSingleDesktopWidget;
00211         qt_x11_create_desktop_on_screen = -1;
00212     }
00213 
00214     return d->screens[screen];
00215 }

const QRect QDesktopWidget::screenGeometry ( int  screen = -1  )  const

Definition at line 261 of file qdesktopwidget_x11.cpp.

References d.

Referenced by QWidget::adjustSize(), availableGeometry(), QBalloonTip::balloon(), Q3FileDialog::init(), QMenuBarPrivate::popupAction(), QMenuPrivate::popupGeometry(), QComboBoxPrivate::popupGeometry(), QWhatsThisPrivate::say(), QToolTip::showText(), and QWindowsXPStylePrivate::tabBody().

00262 {
00263     Q_D(const QDesktopWidget);
00264     if (screen < 0 || screen >= d->screenCount)
00265         screen = d->defaultScreen;
00266 
00267     return d->rects[screen];
00268 }

const QRect QDesktopWidget::screenGeometry ( const QWidget widget  )  const [inline]

Definition at line 54 of file qdesktopwidget.h.

00055     { return screenGeometry(screenNumber(widget)); }

const QRect QDesktopWidget::screenGeometry ( const QPoint point  )  const [inline]

Definition at line 56 of file qdesktopwidget.h.

00057     { return screenGeometry(screenNumber(point)); }

const QRect QDesktopWidget::availableGeometry ( int  screen = -1  )  const

Definition at line 217 of file qdesktopwidget_x11.cpp.

References QX11Info::appRootWindow(), ATOM, d, data, i, isVirtualDesktop(), qt_desktopwidget_workarea_dirty, qt_net_supports(), screenGeometry(), Success, and X11.

Referenced by QDialog::adjustPosition(), QDesignerWorkbench::availableGeometry(), QDateTimeEdit::mousePressEvent(), Oubliette::paintEvent(), Q3ComboBox::popup(), QMenuPrivate::popupGeometry(), QComboBoxPrivate::popupGeometry(), QWidget::restoreGeometry(), QDesignerSettings::setGeometryHelper(), QWidget::setWindowState(), QWidgetPrivate::show_sys(), QCompleterPrivate::showPopup(), QToolTip::showText(), QDesignerWorkbench::switchToNeutralMode(), QDesignerWorkbench::switchToTopLevelMode(), and QMessageBoxPrivate::updateSize().

00218 {
00219     Q_D(const QDesktopWidget);
00220     if (qt_desktopwidget_workarea_dirty) {
00221         // the workareas are dirty, invalidate them
00222         for (int i = 0; i < d->screenCount; ++i)
00223             d->workareas[i] = QRect();
00224         qt_desktopwidget_workarea_dirty = false;
00225     }
00226 
00227     if (screen < 0 || screen >= d->screenCount)
00228         screen = d->defaultScreen;
00229 
00230     if (d->workareas[screen].isValid())
00231         return d->workareas[screen];
00232 
00233     if (! isVirtualDesktop() && qt_net_supports(ATOM(_NET_WORKAREA))) {
00234         Atom ret;
00235         int format, e;
00236         unsigned char *data = 0;
00237         unsigned long nitems, after;
00238 
00239         e = XGetWindowProperty(X11->display,
00240                                 QX11Info::appRootWindow(screen),
00241                                 ATOM(_NET_WORKAREA), 0, 4, False, XA_CARDINAL,
00242                                 &ret, &format, &nitems, &after, &data);
00243 
00244         if (e == Success && ret == XA_CARDINAL &&
00245             format == 32 && nitems == 4) {
00246             long *workarea = (long *) data;
00247             d->workareas[screen].setRect(workarea[0], workarea[1],
00248                                           workarea[2], workarea[3]);
00249         } else {
00250             d->workareas[screen] = screenGeometry(screen);
00251         }
00252         if (data)
00253             XFree(data);
00254     } else {
00255         d->workareas[screen] = screenGeometry(screen);
00256     }
00257 
00258     return d->workareas[screen];
00259 }

Here is the call graph for this function:

const QRect QDesktopWidget::availableGeometry ( const QWidget widget  )  const [inline]

Definition at line 60 of file qdesktopwidget.h.

00061     { return availableGeometry(screenNumber(widget)); }

const QRect QDesktopWidget::availableGeometry ( const QPoint point  )  const [inline]

Definition at line 62 of file qdesktopwidget.h.

00063     { return availableGeometry(screenNumber(point)); }

void QDesktopWidget::resized ( int   )  [signal]

void QDesktopWidget::workAreaResized ( int   )  [signal]

void QDesktopWidget::resizeEvent ( QResizeEvent e  )  [protected, virtual]

This event handler can be reimplemented in a subclass to receive widget resize events which are passed in the event parameter. When resizeEvent() is called, the widget already has its new geometry. The old size is accessible through QResizeEvent::oldSize().

The widget will be erased and receive a paint event immediately after processing the resize event. No drawing need be (or should be) done inside this handler.

See also:
moveEvent(), event(), resize(), QResizeEvent, paintEvent(), {Scribble Example}

Reimplemented from QWidget.

Definition at line 316 of file qdesktopwidget_x11.cpp.

References d, QWidget::event(), qt_desktopwidget_workarea_dirty, and QWidget::resizeEvent().

00317 {
00318     Q_D(QDesktopWidget);
00319     d->init();
00320     qt_desktopwidget_workarea_dirty = true;
00321     QWidget::resizeEvent(event);
00322 }

Here is the call graph for this function:


Friends And Related Function Documentation

friend class QApplication [friend]

Reimplemented from QWidget.

Definition at line 76 of file qdesktopwidget.h.


The documentation for this class was generated from the following files:
Generated on Thu Mar 15 17:21:26 2007 for Qt 4.2 User's Guide by  doxygen 1.5.1