aboutsummaryrefslogtreecommitdiffstats
path: root/src/gwin
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2016-02-10 13:57:04 +1000
committerinmarket <andrewh@inmarket.com.au>2016-02-10 13:57:04 +1000
commit507fb2d57e2d76d4a268e664efd3c59431132061 (patch)
tree606ebdd06770ee953439f6867db6816cdec5d5b0 /src/gwin
parent3847f54dae60c10268c054590859ad20f95b54a1 (diff)
downloaduGFX-507fb2d57e2d76d4a268e664efd3c59431132061.tar.gz
uGFX-507fb2d57e2d76d4a268e664efd3c59431132061.tar.bz2
uGFX-507fb2d57e2d76d4a268e664efd3c59431132061.zip
Add GWIN_FRAME_KEEPONCLOSE flag to prevent destruction of a frame on close
Diffstat (limited to 'src/gwin')
-rw-r--r--src/gwin/gwin_frame.c16
-rw-r--r--src/gwin/gwin_frame.h7
2 files changed, 13 insertions, 10 deletions
diff --git a/src/gwin/gwin_frame.c b/src/gwin/gwin_frame.c
index 28d7c01d..a9abbb9b 100644
--- a/src/gwin/gwin_frame.c
+++ b/src/gwin/gwin_frame.c
@@ -28,11 +28,11 @@
#define FRM_BORDER_B 2 // Bottom Border
/* Internal state flags */
-#define GWIN_FRAME_USER_FLAGS (GWIN_FRAME_CLOSE_BTN|GWIN_FRAME_MINMAX_BTN)
-#define GWIN_FRAME_CLOSE_PRESSED (GWIN_FRAME_MINMAX_BTN << 1)
-#define GWIN_FRAME_MIN_PRESSED (GWIN_FRAME_MINMAX_BTN << 2)
-#define GWIN_FRAME_MAX_PRESSED (GWIN_FRAME_MINMAX_BTN << 3)
-#define GWIN_FRAME_REDRAW_FRAME (GWIN_FRAME_MINMAX_BTN << 4) // Only redraw the frame
+#define GWIN_FRAME_USER_FLAGS (GWIN_FRAME_CLOSE_BTN|GWIN_FRAME_MINMAX_BTN|GWIN_FRAME_KEEPONCLOSE)
+#define GWIN_FRAME_CLOSE_PRESSED (GWIN_FRAME_KEEPONCLOSE << 1)
+#define GWIN_FRAME_MIN_PRESSED (GWIN_FRAME_KEEPONCLOSE << 2)
+#define GWIN_FRAME_MAX_PRESSED (GWIN_FRAME_KEEPONCLOSE << 3)
+#define GWIN_FRAME_REDRAW_FRAME (GWIN_FRAME_KEEPONCLOSE << 4) // Only redraw the frame
#if GWIN_FRAME_CLOSE_BTN < GWIN_FIRST_CONTROL_FLAG
#error "GWIN Frame: - Flag definitions don't match"
#endif
@@ -96,7 +96,8 @@ static void forceFrameRedraw(GWidgetObject *gw) {
gw->g.flags &= ~(GWIN_FRAME_CLOSE_PRESSED|GWIN_FRAME_MAX_PRESSED|GWIN_FRAME_MIN_PRESSED);
forceFrameRedraw(gw);
_gwinSendEvent(&gw->g, GEVENT_GWIN_CLOSE);
- _gwinDestroy(&gw->g, REDRAW_INSESSION);
+ if (!(gw->g.flags & GWIN_FRAME_KEEPONCLOSE))
+ _gwinDestroy(&gw->g, REDRAW_INSESSION);
return;
}
if ((gw->g.flags & GWIN_FRAME_MAX_PRESSED)) {
@@ -129,7 +130,8 @@ static void forceFrameRedraw(GWidgetObject *gw) {
gw->g.flags &= ~(GWIN_FRAME_CLOSE_PRESSED|GWIN_FRAME_MAX_PRESSED|GWIN_FRAME_MIN_PRESSED);
forceFrameRedraw(gw);
_gwinSendEvent(&gw->g, GEVENT_GWIN_CLOSE);
- _gwinDestroy(&gw->g, REDRAW_INSESSION);
+ if (!(gw->g.flags & GWIN_FRAME_KEEPONCLOSE))
+ _gwinDestroy(&gw->g, REDRAW_INSESSION);
return;
}
pos -= FRM_BUTTON_X;
diff --git a/src/gwin/gwin_frame.h b/src/gwin/gwin_frame.h
index 18af2e50..45c97b53 100644
--- a/src/gwin/gwin_frame.h
+++ b/src/gwin/gwin_frame.h
@@ -31,9 +31,10 @@
* @brief Flags for gwinFrameCreate()
* @{
*/
-#define GWIN_FRAME_BORDER 0x00000000 // Deprecated. A border is always shown with a frame window now.
-#define GWIN_FRAME_CLOSE_BTN 0x00000001
-#define GWIN_FRAME_MINMAX_BTN 0x00000002
+#define GWIN_FRAME_BORDER 0x00000000 /**< Deprecated. A border is always shown with a frame window now. */
+#define GWIN_FRAME_CLOSE_BTN 0x00000001 /**< Should a close button be shown? */
+#define GWIN_FRAME_MINMAX_BTN 0x00000002 /**< Should minimize and maximize buttons be shown? */
+#define GWIN_FRAME_KEEPONCLOSE 0x00000004 /**< Don't automatically destroy the frame on close */
/** @} */
typedef GContainerObject GFrameObject;