diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-05-01 22:31:26 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-05-01 22:31:26 +0000 |
commit | fe90fbdbd18eed8712bbc30909efb1b7870f859f (patch) | |
tree | eee1c00f81d018b0b2ec87c6a61d59947ad75606 /NxWidgets/libnxwidgets/src | |
parent | fd4dd86fe8de2ddda1e8723973e8b5774528ebb7 (diff) | |
download | nuttx-fe90fbdbd18eed8712bbc30909efb1b7870f859f.tar.gz nuttx-fe90fbdbd18eed8712bbc30909efb1b7870f859f.tar.bz2 nuttx-fe90fbdbd18eed8712bbc30909efb1b7870f859f.zip |
NxWM update
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4683 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'NxWidgets/libnxwidgets/src')
-rw-r--r-- | NxWidgets/libnxwidgets/src/cimage.cxx | 2 | ||||
-rw-r--r-- | NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx | 27 |
2 files changed, 28 insertions, 1 deletions
diff --git a/NxWidgets/libnxwidgets/src/cimage.cxx b/NxWidgets/libnxwidgets/src/cimage.cxx index c905737fd..0ca6f571e 100644 --- a/NxWidgets/libnxwidgets/src/cimage.cxx +++ b/NxWidgets/libnxwidgets/src/cimage.cxx @@ -272,7 +272,7 @@ void CImage::drawContents(CGraphicsPort *port) } else { - port->drawBitmapGreyScale(rect.getX(),displayRow, + port->drawBitmapGreyScale(rect.getX(), displayRow, rect.getWidth(), 1, &bitmap, 0, 0); } diff --git a/NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx b/NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx index 5ea672a2f..a6807dad5 100644 --- a/NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx +++ b/NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx @@ -42,6 +42,7 @@ #include <stdint.h> #include <stdbool.h> #include <cstring> +#include <cerrno> #include "nxconfig.hxx" #include "cnxserver.hxx" @@ -427,6 +428,13 @@ void CWidgetControl::geometryEvent(NXHANDLE hWindow, m_hWindow = hWindow; nxgl_rectcopy(&m_bounds, bounds); + + // Wake up any threads waiting for initial position information. + // REVISIT: If the window is moved or repositioned, then the + // position and size data will be incorrect for a period of time. + // That case should be handled here as well. + + giveGeoSem(); } } @@ -865,6 +873,25 @@ bool CWidgetControl::pollCursorControlEvents(void) } /** + * Take the geometry semaphore (handling signal interruptions) + */ + +#ifdef CONFIG_NX_MULTIUSER +void CWidgetControl::takeGeoSem(void) +{ + // Take the geometry semaphore. Retry is an error occurs (only if + // the error is due to a signal interruption). + + int ret; + do + { + ret = sem_wait(&m_geosem); + } + while (ret < 0 && errno == EINTR); +} +#endif + +/** * Clear all mouse events */ |