summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@nokia.com>2009-12-16 14:19:45 +0100
committerJørgen Lind <jorgen.lind@nokia.com>2009-12-16 14:19:45 +0100
commitb2aefe0ff51a2cdb4990eb9bc19cfb044193ed21 (patch)
treebc51723e815b7cf7b4d8f54e7558d9ca864c2e89
parent0447b44246ff46eb273f95b6daf3e7f7de73ca6b (diff)
Some cleanup and fix popup and tooltip event propagation
-rw-r--r--src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp6
-rw-r--r--src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp9
-rw-r--r--src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h2
-rw-r--r--src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp3
-rw-r--r--src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp21
-rw-r--r--src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h1
-rw-r--r--src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp32
-rw-r--r--src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h4
8 files changed, 45 insertions, 33 deletions
diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp
index 3c58970c19..a995b0f4c9 100644
--- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp
+++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp
@@ -76,7 +76,11 @@ QImage *QDirectFbBlitter::doLock()
int bpl;
const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast<void**>(&mem), &bpl);
if (result == DFB_OK) {
- QImage::Format format = QDirectFbConvenience::imageFormatFromSurface(m_surface);
+ DFBSurfacePixelFormat dfbFormat;
+ DFBSurfaceCapabilities dfbCaps;
+ m_surface->GetPixelFormat(m_surface,&dfbFormat);
+ m_surface->GetCapabilities(m_surface,&dfbCaps);
+ QImage::Format format = QDirectFbConvenience::imageFormatFromSurfaceFormat(dfbFormat, dfbCaps);
int w, h;
m_surface->GetSize(m_surface,&w,&h);
m_image = QImage(static_cast<uchar *>(mem),w,h,bpl,format);
diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp
index 63ae2894ad..2bd2f3bda8 100644
--- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp
+++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp
@@ -2,11 +2,8 @@
IDirectFB *QDirectFbConvenience::dfb = 0;
-QImage::Format QDirectFbConvenience::imageFormatFromSurface(IDirectFBSurface *surface)
+QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps)
{
- DFBSurfacePixelFormat format;
- surface->GetPixelFormat(surface, &format);
-
switch (format) {
case DSPF_LUT8:
return QImage::Format_Indexed8;
@@ -28,10 +25,6 @@ QImage::Format QDirectFbConvenience::imageFormatFromSurface(IDirectFBSurface *su
case DSPF_RGB32:
return QImage::Format_RGB32;
case DSPF_ARGB: {
- DFBSurfaceCapabilities caps;
- const DFBResult result = surface->GetCapabilities(surface, &caps);
- Q_ASSERT(result == DFB_OK);
- Q_UNUSED(result);
return (caps & DSCAPS_PREMULTIPLIED
? QImage::Format_ARGB32_Premultiplied
: QImage::Format_ARGB32); }
diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h
index 2f5e10b42b..9c65b1ff8f 100644
--- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h
+++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h
@@ -17,7 +17,7 @@ public:
class QDirectFbConvenience
{
public:
- static QImage::Format imageFormatFromSurface(IDirectFBSurface *surface);
+ static QImage::Format imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps);
//This is set by the graphicssystem constructor
static IDirectFB *dfbInterface() { return dfb; }
diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp
index 744b5c0e5e..38bc41ca72 100644
--- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp
+++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp
@@ -46,9 +46,6 @@ void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw)
IDirectFBWindow *window;
dfbDisplayLayer->GetWindow(dfbDisplayLayer,id,&window);
- window->DisableEvents(window,DWET_ALL);
- window->EnableEvents(window,DFBWindowEventType(DWET_ALL));
- window->SetKeySelection(window,DWKS_ALL,NULL,0);
window->AttachEventBuffer(window,eventBuffer);
}
diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp
index fe3b1d878a..d9da01bbc0 100644
--- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp
+++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp
@@ -68,27 +68,16 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int
// m_layer->SetConfiguration(m_layer, displayLayerConfig);
m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED);
- IDirectFBSurface *topLevelSurface;
- //This line gives a warning
- m_layer->GetSurface(m_layer, &topLevelSurface);
- m_format = QDirectFbConvenience::imageFormatFromSurface(topLevelSurface);
- result = m_layer->GetScreen(m_layer,&m_screen);
- if (result != DFB_OK) {
- DirectFBError("QDirectFbGraphicsSystemScreen: Failed to get screen", result);
- }
-
- int w(0),h(0);
-
- //Asking the screen for its size gives the desktop geometry on X11
- //Thats not something we want, so ask the topLevelSorface instead
- topLevelSurface->GetSize(topLevelSurface,&w,&h);
+ DFBDisplayLayerConfig config;
+ m_layer->GetConfiguration(m_layer, &config);
- m_geometry = QRect(0,0,w,h);
+ m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps);
+ m_geometry = QRect(0,0,config.width,config.height);
const int dpi = 72;
const qreal inch = 25.4;
m_depth = 32;
- m_physicalSize = QSize(qRound(w * inch / dpi), qRound(h *inch / dpi));
+ m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi));
}
QDirectFbGraphicsSystemScreen::~QDirectFbGraphicsSystemScreen()
diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h
index 6068495f3c..ff6a4263fa 100644
--- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h
+++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h
@@ -70,7 +70,6 @@ public:
QDirectFbInput m_input;
- IDirectFBScreen *m_screen;
IDirectFBDisplayLayer *m_layer;
};
diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp
index 6c8b2b4fe9..e0bd33e0b0 100644
--- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp
+++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp
@@ -42,6 +42,7 @@
#include "qwindowsurface_minimaldfb.h"
#include "qgraphicssystem_minimaldfb.h"
#include "qblitter_directfb.h"
+#include "qdirectfbconvenience.h"
#include <private/qpixmap_blitter_p.h>
#include <QtCore/qdebug.h>
@@ -50,7 +51,7 @@ QT_BEGIN_NAMESPACE
QDirectFbWindowSurface::QDirectFbWindowSurface
(QDirectFbGraphicsSystemScreen *screen, QWidget *window)
- : QWindowSurface(window), m_screen(screen), m_lock(false)
+ : QWindowSurface(window), m_screen(screen)
{
window->setWindowSurface(this);
m_dfbWindow = m_screen->createWindow(window->rect(),window);
@@ -96,7 +97,6 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion &region, const
void QDirectFbWindowSurface::setGeometry(const QRect &rect)
{
- m_dfbSurface->Release(m_dfbSurface);
QWindowSurface::setGeometry(rect);
m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(),
rect.width(), rect.height());
@@ -124,4 +124,32 @@ void QDirectFbWindowSurface::endPaint(const QRegion &region)
Q_UNUSED(region);
}
+void QDirectFbWindowSurface::setVisible(bool visible)
+{
+ if (visible) {
+ int x = this->geometry().x();
+ int y = this->geometry().y();
+ m_dfbWindow->MoveTo(m_dfbWindow,x,y);
+ } else {
+ IDirectFBDisplayLayer *displayLayer;
+ QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY,&displayLayer);
+
+ DFBDisplayLayerConfig config;
+ displayLayer->GetConfiguration(displayLayer,&config);
+ m_dfbWindow->MoveTo(m_dfbWindow,config.width+1,config.height + 1);
+ }
+}
+
+Qt::WindowFlags QDirectFbWindowSurface::setWindowFlags(Qt::WindowFlags type)
+{
+ if (type == Qt::Popup || type == Qt::ToolTip)
+ {
+ DFBWindowOptions options;
+ m_dfbWindow->GetOptions(m_dfbWindow,&options);
+ options = DFBWindowOptions(options | DWOP_GHOST);
+ m_dfbWindow->SetOptions(m_dfbWindow,options);
+ }
+ return type;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h
index 98575ffa14..aeee0496b8 100644
--- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h
+++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h
@@ -66,13 +66,15 @@ public:
void beginPaint(const QRegion &region);
void endPaint(const QRegion &region);
+ void setVisible(bool visible);
+ Qt::WindowFlags setWindowFlags(Qt::WindowFlags type);
+
private:
void lockSurfaceToImage();
QDirectFbGraphicsSystemScreen *m_screen;
QPixmap *m_pixmap;
QBlittablePixmapData *pmdata;
- bool m_lock;
IDirectFBWindow *m_dfbWindow;
IDirectFBSurface *m_dfbSurface;