KScreen::Config::current can return null

remotes/origin/KDE/4.13
Albert Astals Cid 12 years ago
parent 67a2a1222c
commit 9252044c0c
  1. 60
      core/utils.cpp

@ -100,40 +100,42 @@ QSizeF Utils::realDpi(QWidget* widgetOnScreen)
// Firstly try to retrieve DPI via LibKScreen // Firstly try to retrieve DPI via LibKScreen
#if HAVE_LIBKSCREEN #if HAVE_LIBKSCREEN
KScreen::Config* config = KScreen::Config::current(); KScreen::Config* config = KScreen::Config::current();
KScreen::OutputList outputs = config->outputs(); if (config) {
QPoint globalPos = widgetOnScreen->parentWidget() ? KScreen::OutputList outputs = config->outputs();
widgetOnScreen->mapToGlobal(widgetOnScreen->pos()): QPoint globalPos = widgetOnScreen->parentWidget() ?
widgetOnScreen->pos(); widgetOnScreen->mapToGlobal(widgetOnScreen->pos()):
QRect widgetRect(globalPos, widgetOnScreen->size()); widgetOnScreen->pos();
QRect widgetRect(globalPos, widgetOnScreen->size());
KScreen::Output* selectedOutput = 0;
int maxArea = 0; KScreen::Output* selectedOutput = 0;
Q_FOREACH(KScreen::Output *output, outputs) int maxArea = 0;
{ Q_FOREACH(KScreen::Output *output, outputs)
if (output->currentMode())
{ {
QRect outputRect(output->pos(),output->currentMode()->size()); if (output->currentMode())
QRect intersection = outputRect.intersected(widgetRect);
int area = intersection.width()*intersection.height();
if (area > maxArea)
{ {
maxArea = area; QRect outputRect(output->pos(),output->currentMode()->size());
selectedOutput = output; QRect intersection = outputRect.intersected(widgetRect);
int area = intersection.width()*intersection.height();
if (area > maxArea)
{
maxArea = area;
selectedOutput = output;
}
} }
} }
}
if (selectedOutput) if (selectedOutput)
{ {
kDebug() << "Found widget at output #" << selectedOutput->id(); kDebug() << "Found widget at output #" << selectedOutput->id();
QRect outputRect(selectedOutput->pos(),selectedOutput->currentMode()->size()); QRect outputRect(selectedOutput->pos(),selectedOutput->currentMode()->size());
QSize szMM = selectedOutput->sizeMm(); QSize szMM = selectedOutput->sizeMm();
kDebug() << "Output size is " << szMM; kDebug() << "Output size is " << szMM;
if (szMM.width() > 0 && szMM.height() > 0 && outputRect.width() > 0 && outputRect.height() > 0) { if (szMM.width() > 0 && szMM.height() > 0 && outputRect.width() > 0 && outputRect.height() > 0) {
QSizeF res(static_cast<qreal>(outputRect.width())*25.4/szMM.width(), QSizeF res(static_cast<qreal>(outputRect.width())*25.4/szMM.width(),
static_cast<qreal>(outputRect.height())*25.4/szMM.height()); static_cast<qreal>(outputRect.height())*25.4/szMM.height());
kDebug() << "Output DPI is " << res; kDebug() << "Output DPI is " << res;
return res; return res;
}
} }
} }
#endif #endif

Loading…
Cancel
Save