Also implement gwidget_hide()

This commit is contained in:
Pierre Pronchery 2020-04-12 09:04:03 +02:00
parent 7077c0605c
commit 6e1a9db264
4 changed files with 28 additions and 1 deletions

View File

@ -39,6 +39,7 @@ typedef struct _GWidget GWidget;
/* functions */ /* functions */
void gwidget_hide(GWidget * gwidget);
void gwidget_show(GWidget * gwidget); void gwidget_show(GWidget * gwidget);
#endif /* !GTOOLKIT_GWIDGET_H */ #endif /* !GTOOLKIT_GWIDGET_H */

View File

@ -40,7 +40,8 @@
/* types */ /* types */
typedef enum _GWidgetHandler typedef enum _GWidgetHandler
{ {
GWIDGET_HANDLER_SHOW = 0 GWIDGET_HANDLER_HIDE = 0,
GWIDGET_HANDLER_SHOW
} GWidgetHandler; } GWidgetHandler;
# define GWIDGET_HANDLER_LAST GWIDGET_HANDLER_SHOW # define GWIDGET_HANDLER_LAST GWIDGET_HANDLER_SHOW
# define GWIDGET_HANDLER_COUNT (GWIDGET_HANDLER_LAST + 1) # define GWIDGET_HANDLER_COUNT (GWIDGET_HANDLER_LAST + 1)

View File

@ -46,6 +46,7 @@ struct _GWidget
void * self; void * self;
/* handlers */ /* handlers */
GWidgetHandlerSelf handler_hide;
GWidgetHandlerSelf handler_show; GWidgetHandlerSelf handler_show;
}; };
@ -61,6 +62,7 @@ GWidget * gwidget_new(void)
return NULL; return NULL;
gwidget->gwidget = gwidget; gwidget->gwidget = gwidget;
gwidget->self = NULL; gwidget->self = NULL;
gwidget->handler_hide = NULL;
gwidget->handler_show = NULL; gwidget->handler_show = NULL;
return gwidget; return gwidget;
} }
@ -82,6 +84,9 @@ void gwidget_set_handler(GWidget * gwidget, GWidgetHandler handler, ...)
va_start(ap, handler); va_start(ap, handler);
switch(handler) switch(handler)
{ {
case GWIDGET_HANDLER_HIDE:
gwidget->handler_hide = va_arg(ap, GWidgetHandlerSelf);
break;
case GWIDGET_HANDLER_SHOW: case GWIDGET_HANDLER_SHOW:
gwidget->handler_show = va_arg(ap, GWidgetHandlerSelf); gwidget->handler_show = va_arg(ap, GWidgetHandlerSelf);
break; break;
@ -98,6 +103,16 @@ void gwidget_set_self(GWidget * gwidget, void * self)
/* useful */ /* 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 */ /* gwidget_show */
void gwidget_show(GWidget * gwidget) void gwidget_show(GWidget * gwidget)
{ {

View File

@ -55,6 +55,7 @@ struct _GWindow
/* prototypes */ /* prototypes */
static void _gwindow_hide(GWindow * gwindow);
static void _gwindow_show(GWindow * gwindow); static void _gwindow_show(GWindow * gwindow);
@ -77,6 +78,8 @@ GWindow * gwindow_new(void)
return NULL; return NULL;
} }
gwidget_set_self(gwindow->gwidget, gwindow); gwidget_set_self(gwindow->gwidget, gwindow);
gwidget_set_handler(gwindow->gwidget, GWIDGET_HANDLER_HIDE,
_gwindow_hide);
gwidget_set_handler(gwindow->gwidget, GWIDGET_HANDLER_SHOW, gwidget_set_handler(gwindow->gwidget, GWIDGET_HANDLER_SHOW,
_gwindow_show); _gwindow_show);
gwindow->title = NULL; gwindow->title = NULL;
@ -243,6 +246,13 @@ void gwindow_resize(GWindow * gwindow, int width, int height)
/* private */ /* private */
/* functions */ /* functions */
/* gwindow_hide */
static void _gwindow_hide(GWindow * gwindow)
{
XUnmapWindow(gtoolkit_get_display(), gwindow->window);
}
/* gwindow_show */ /* gwindow_show */
static void _gwindow_show(GWindow * gwindow) static void _gwindow_show(GWindow * gwindow)
/* FIXME accept flags (focus...) */ /* FIXME accept flags (focus...) */