summaryrefslogtreecommitdiff
path: root/NxWidgets/libnxwidgets/src
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-05-01 22:31:26 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-05-01 22:31:26 +0000
commitfe90fbdbd18eed8712bbc30909efb1b7870f859f (patch)
treeeee1c00f81d018b0b2ec87c6a61d59947ad75606 /NxWidgets/libnxwidgets/src
parentfd4dd86fe8de2ddda1e8723973e8b5774528ebb7 (diff)
downloadpx4-nuttx-fe90fbdbd18eed8712bbc30909efb1b7870f859f.tar.gz
px4-nuttx-fe90fbdbd18eed8712bbc30909efb1b7870f859f.tar.bz2
px4-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.cxx2
-rw-r--r--NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx27
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
*/