summaryrefslogtreecommitdiff
path: root/NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-05-07 18:19:17 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-05-07 18:19:17 +0000
commit1d7b4d2140b3d4dec9554a333e0e442103e3708f (patch)
tree983597adcf78127e26ae3cfd3d4f3fe6b3c18476 /NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx
parent0860510a3519855cdbff730ab01f8ea08220e183 (diff)
downloadnuttx-1d7b4d2140b3d4dec9554a333e0e442103e3708f.tar.gz
nuttx-1d7b4d2140b3d4dec9554a333e0e442103e3708f.tar.bz2
nuttx-1d7b4d2140b3d4dec9554a333e0e442103e3708f.zip
Most fixes to get NxWM working on the STM3240G-EVAL
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4710 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx')
-rw-r--r--NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx59
1 files changed, 25 insertions, 34 deletions
diff --git a/NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx b/NxWidgets/libnxwidgets/src/cwidgetcontrol.cxx
index 42cd047fa..9c90a5bfd 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 <sched.h>
#include <cerrno>
#include "nxconfig.hxx"
@@ -396,22 +397,38 @@ void CWidgetControl::setFocusedWidget(CNxWidget *widget)
widget->focus();
}
-#warning "Widgets with focus need to go on a stack so that focus can be restored"
}
/**
- * Set the size of the window. This is normally reported by an NX callback. But
- * the toolbar widget control does not get NX callbacks and has to get the
- * window size throught this method. This method should not be called by user
- * code
+ * This event is called from CCallback instance to provide
+ * notifications of certain NX-server related events. This event,
+ * in particular, will occur when the position or size of the underlying
+ * window occurs.
*
* @param hWindow The window handle that should be used to communicate
* with the window
- * @param bounds. The size of the underlying window.
+ * @param pos The position of the window in the physical device space.
+ * @param size The size of the window.
+ * @param bounds The size of the underlying display (pixels x rows)
*/
-void CWidgetControl::setWindowBounds(NXHANDLE hWindow, FAR const struct nxgl_rect_s *bounds)
+void CWidgetControl::geometryEvent(NXHANDLE hWindow,
+ FAR const struct nxgl_size_s *size,
+ FAR const struct nxgl_point_s *pos,
+ FAR const struct nxgl_rect_s *bounds)
{
+ // Disable pre-emption so that we can be assured that the following
+ // operations are atomic
+
+ sched_lock();
+
+ // Save positional data that may change dynamically
+
+ m_pos.x = pos->x;
+ m_pos.y = pos->y;
+ m_size.h = size->h;
+ m_size.w = size->w;
+
// The first callback is important. This is the handshake that proves
// that we are truly communicating with the servier. This is also
// a critical point because this is when we know the physical
@@ -431,33 +448,7 @@ void CWidgetControl::setWindowBounds(NXHANDLE hWindow, FAR const struct nxgl_rec
giveGeoSem();
}
-}
-
-/**
- * This event is called from CCallback instance to provide
- * notifications of certain NX-server related events. This event,
- * in particular, will occur when the position or size of the underlying
- * window occurs.
- *
- * @param hWindow The window handle that should be used to communicate
- * with the window
- * @param pos The position of the window in the physical device space.
- * @param size The size of the window.
- * @param bounds The size of the underlying display (pixels x rows)
- */
-
-void CWidgetControl::geometryEvent(NXHANDLE hWindow,
- FAR const struct nxgl_size_s *size,
- FAR const struct nxgl_point_s *pos,
- FAR const struct nxgl_rect_s *bounds)
-{
- // Save positional data that may change dynamically
-
- m_pos.x = pos->x;
- m_pos.y = pos->y;
- m_size.h = size->h;
- m_size.w = size->w;
- setWindowBounds(hWindow, bounds);
+ sched_unlock();
}
/**