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 */
void gwidget_hide(GWidget * gwidget);
void gwidget_show(GWidget * gwidget);
#endif /* !GTOOLKIT_GWIDGET_H */

View File

@ -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)

View File

@ -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)
{

View File

@ -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...) */