diff --git a/include/Mw/StringDefs.h b/include/Mw/StringDefs.h index 5e02854..1d55809 100644 --- a/include/Mw/StringDefs.h +++ b/include/Mw/StringDefs.h @@ -29,16 +29,16 @@ #define MwNiconPixmap "ViconPixmap" #define MwNsizeHints "VsizeHints" -#define MwNactivateHandler "Cactivate" /* NULL */ -#define MwNresizeHandler "Cresize" /* NULL */ -#define MwNtickHandler "Ctick" /* NULL */ -#define MwNmenuHandler "Cmenu" /* MwMenu */ -#define MwNmouseDownHandler "CmouseDownHandler" /* MwLLMouse* */ -#define MwNmouseUpHandler "CmouseUpHandler" /* asme as MwNmouseDownHandler */ -#define MwNmouseMoveHandler "CmouseMoveHandler" /* MwPoint* */ -#define MwNchangedHandler "CchangedHandler" /* NULL */ -#define MwNkeyHandler "CkeyHandler" /* int* (MwLLKeyEnum or character code) */ -#define MwNkeyReleaseHandler "CkeyReleaseHandler" /* same as MwNkeyHandler */ -#define MwNcloseHandler "CcloseHandler" /* NULL */ +#define MwNactivateHandler "Cactivate" /* NULL/int* (MwListBox) */ +#define MwNresizeHandler "Cresize" /* NULL */ +#define MwNtickHandler "Ctick" /* NULL */ +#define MwNmenuHandler "Cmenu" /* MwMenu */ +#define MwNmouseDownHandler "CmouseDown" /* MwLLMouse* */ +#define MwNmouseUpHandler "CmouseUp" /* asme as MwNmouseDownHandler */ +#define MwNmouseMoveHandler "CmouseMove" /* MwPoint* */ +#define MwNchangedHandler "Cchanged" /* NULL */ +#define MwNkeyHandler "Ckey" /* int* (MwLLKeyEnum or character code) */ +#define MwNkeyReleaseHandler "CkeyRelease" /* same as MwNkeyHandler */ +#define MwNcloseHandler "Cclose" /* NULL */ #endif diff --git a/include/Mw/TypeDefs.h b/include/Mw/TypeDefs.h index 462c957..4f21006 100644 --- a/include/Mw/TypeDefs.h +++ b/include/Mw/TypeDefs.h @@ -121,10 +121,11 @@ struct _MwViewport { }; struct _MwListBox { - MwWidget vscroll; - MwWidget frame; - char** list; - int selected; + MwWidget vscroll; + MwWidget frame; + char** list; + int selected; + unsigned long click_time; }; struct _MwSizeHints { diff --git a/src/widget/listbox.c b/src/widget/listbox.c index 049d9e3..bf2c290 100644 --- a/src/widget/listbox.c +++ b/src/widget/listbox.c @@ -29,7 +29,12 @@ static void frame_mouse_down(MwWidget handle, void* user, void* call) { st = get_first_entry(lb); for(i = 0; i < (h - MwDefaultBorderWidth * 2) / MwTextHeight(handle, "M"); i++) { if(y <= m->point.y && m->point.y <= (y + MwTextHeight(handle, "M"))) { - lb->selected = st + i; + unsigned long t; + if(((t = MwLLGetTick()) - lb->click_time) < 250 && lb->selected == st + i) { + MwDispatchUserHandler(handle->parent, MwNactivateHandler, &lb->selected); + } + lb->selected = st + i; + lb->click_time = t; } y += MwTextHeight(handle, "M"); } @@ -126,8 +131,9 @@ static int create(MwWidget handle) { MwSetDefault(handle); resize(handle); - lb->list = NULL; - lb->selected = -1; + lb->list = NULL; + lb->selected = -1; + lb->click_time = 0; return 0; }