aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gwin/gwin.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/src/gwin/gwin.c b/src/gwin/gwin.c
index 5c164444..1ec8280c 100644
--- a/src/gwin/gwin.c
+++ b/src/gwin/gwin.c
@@ -181,11 +181,16 @@ GHandle gwinGWindowCreate(GDisplay *g, GWindowObject *pgw, const GWindowInit *pI
void gwinDestroy(GHandle gh) {
#if GWIN_NEED_HIERARCHY
- // kill your children as long as you have any
- while (gh->child) {
- GHandle tmp = gh->child;
- gh->child = gh->child->sibling;
- gwinDestroy(tmp);
+ // fix hierarchy structure
+ if (gh->parent->child == gh) {
+ // we are the first child
+ gh->parent->child = gh->sibling;
+ } else {
+ // find our predecessor
+ GHandle tmp = gh->parent->child;
+ while (tmp->sibling != gh)
+ tmp = tmp->sibling;
+ tmp->sibling = gh->sibling;
}
#endif
@@ -269,6 +274,22 @@ bool_t gwinGetEnabled(GHandle gh) {
#endif
}
+void gwinGetAbsoluteCoordinates(GHandle gh, coord_t *x, coord_t *y) {
+ #if GWIN_NEED_HIERARCHY
+ GHandle tmp;
+
+ // sum up all relative coordinates up to the root parent
+ for (*x = 0, *y = 0, tmp = gh; tmp; tmp = tmp->parent) {
+ *x += tmp->x;
+ *y += tmp->y;
+ }
+
+ #else
+ *x = gh->x;
+ *y = gh->y;
+ #endif
+}
+
void gwinMove(GHandle gh, coord_t x, coord_t y) {
_gwm_redim(gh, x, y, gh->width, gh->height);
}