From 6e1a9db2647493126e524ad15439c56c205fba53 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 12 Apr 2020 09:04:03 +0200 Subject: [PATCH] Also implement gwidget_hide() --- include/GToolkit/GWidget.h | 1 + src/common.h | 3 ++- src/gwidget.c | 15 +++++++++++++++ src/gwindow.c | 10 ++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/include/GToolkit/GWidget.h b/include/GToolkit/GWidget.h index c3e34dc..2a10c33 100644 --- a/include/GToolkit/GWidget.h +++ b/include/GToolkit/GWidget.h @@ -39,6 +39,7 @@ typedef struct _GWidget GWidget; /* functions */ +void gwidget_hide(GWidget * gwidget); void gwidget_show(GWidget * gwidget); #endif /* !GTOOLKIT_GWIDGET_H */ diff --git a/src/common.h b/src/common.h index b59de03..77c8651 100644 --- a/src/common.h +++ b/src/common.h @@ -40,7 +40,8 @@ /* types */ typedef enum _GWidgetHandler { - GWIDGET_HANDLER_SHOW = 0 + GWIDGET_HANDLER_HIDE = 0, + GWIDGET_HANDLER_SHOW } GWidgetHandler; # define GWIDGET_HANDLER_LAST GWIDGET_HANDLER_SHOW # define GWIDGET_HANDLER_COUNT (GWIDGET_HANDLER_LAST + 1) diff --git a/src/gwidget.c b/src/gwidget.c index 2e26a0f..680ba11 100644 --- a/src/gwidget.c +++ b/src/gwidget.c @@ -46,6 +46,7 @@ struct _GWidget void * self; /* handlers */ + GWidgetHandlerSelf handler_hide; GWidgetHandlerSelf handler_show; }; @@ -61,6 +62,7 @@ GWidget * gwidget_new(void) return NULL; gwidget->gwidget = gwidget; gwidget->self = NULL; + gwidget->handler_hide = NULL; gwidget->handler_show = NULL; return gwidget; } @@ -82,6 +84,9 @@ void gwidget_set_handler(GWidget * gwidget, GWidgetHandler handler, ...) va_start(ap, handler); switch(handler) { + case GWIDGET_HANDLER_HIDE: + gwidget->handler_hide = va_arg(ap, GWidgetHandlerSelf); + break; case GWIDGET_HANDLER_SHOW: gwidget->handler_show = va_arg(ap, GWidgetHandlerSelf); break; @@ -98,6 +103,16 @@ void gwidget_set_self(GWidget * gwidget, void * self) /* useful */ +/* gwidget_hide */ +void gwidget_hide(GWidget * gwidget) +{ + if(gwidget->gwidget != gwidget) + gwidget = gwidget->gwidget; + if(gwidget->handler_hide != NULL) + gwidget->handler_hide(gwidget->self); +} + + /* gwidget_show */ void gwidget_show(GWidget * gwidget) { diff --git a/src/gwindow.c b/src/gwindow.c index f7a28d0..066433a 100644 --- a/src/gwindow.c +++ b/src/gwindow.c @@ -55,6 +55,7 @@ struct _GWindow /* prototypes */ +static void _gwindow_hide(GWindow * gwindow); static void _gwindow_show(GWindow * gwindow); @@ -77,6 +78,8 @@ GWindow * gwindow_new(void) return NULL; } gwidget_set_self(gwindow->gwidget, gwindow); + gwidget_set_handler(gwindow->gwidget, GWIDGET_HANDLER_HIDE, + _gwindow_hide); gwidget_set_handler(gwindow->gwidget, GWIDGET_HANDLER_SHOW, _gwindow_show); gwindow->title = NULL; @@ -243,6 +246,13 @@ void gwindow_resize(GWindow * gwindow, int width, int height) /* private */ /* functions */ +/* gwindow_hide */ +static void _gwindow_hide(GWindow * gwindow) +{ + XUnmapWindow(gtoolkit_get_display(), gwindow->window); +} + + /* gwindow_show */ static void _gwindow_show(GWindow * gwindow) /* FIXME accept flags (focus...) */