mirror of
https://gitea.nishi.boats/pyrite-dev/milsko
synced 2026-01-07 18:09:44 +00:00
fix segfault
git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@407 b9cfdab3-6d41-4d17-bbe4-086880011989
This commit is contained in:
@@ -28,6 +28,8 @@ typedef struct filechooser {
|
|||||||
MwLLPixmap computer;
|
MwLLPixmap computer;
|
||||||
} filechooser_t;
|
} filechooser_t;
|
||||||
|
|
||||||
|
static void scan(MwWidget handle, const char* path);
|
||||||
|
|
||||||
static void destroy(MwWidget handle) {
|
static void destroy(MwWidget handle) {
|
||||||
filechooser_t* fc = handle->opaque;
|
filechooser_t* fc = handle->opaque;
|
||||||
int i;
|
int i;
|
||||||
@@ -67,6 +69,15 @@ static void okay(MwWidget handle, void* user, void* call) {
|
|||||||
destroy(handle->parent);
|
destroy(handle->parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void files_activate(MwWidget handle, void* user, void* call) {
|
||||||
|
int index = *(int*)call;
|
||||||
|
filechooser_t* fc = handle->parent->opaque;
|
||||||
|
|
||||||
|
(void)user;
|
||||||
|
|
||||||
|
scan(handle->parent, fc->sorted_entries[index - 1]->name);
|
||||||
|
}
|
||||||
|
|
||||||
static void layout(MwWidget handle) {
|
static void layout(MwWidget handle) {
|
||||||
filechooser_t* fc = handle->opaque;
|
filechooser_t* fc = handle->opaque;
|
||||||
int w = MwGetInteger(handle, MwNwidth);
|
int w = MwGetInteger(handle, MwNwidth);
|
||||||
@@ -100,6 +111,7 @@ static void layout(MwWidget handle) {
|
|||||||
MwNhasHeading, 1,
|
MwNhasHeading, 1,
|
||||||
MwNleftPadding, 16,
|
MwNleftPadding, 16,
|
||||||
NULL);
|
NULL);
|
||||||
|
MwAddUserHandler(fc->files, MwNactivateHandler, files_activate, NULL);
|
||||||
} else {
|
} else {
|
||||||
MwVaApply(fc->files,
|
MwVaApply(fc->files,
|
||||||
MwNx, wx,
|
MwNx, wx,
|
||||||
|
|||||||
@@ -73,13 +73,16 @@ static void frame_mouse_down(MwWidget handle, void* user, void* call) {
|
|||||||
int h = MwGetInteger(handle, MwNheight);
|
int h = MwGetInteger(handle, MwNheight);
|
||||||
|
|
||||||
st = get_first_entry(handle->parent, lb);
|
st = get_first_entry(handle->parent, lb);
|
||||||
for(i = 0; i < (h - MwDefaultBorderWidth * 2) / MwTextHeight(handle, "M"); i++) {
|
for(i = 0; (st + i) < arrlen(lb->list) && i < (h - MwDefaultBorderWidth * 2) / MwTextHeight(handle, "M"); i++) {
|
||||||
if(y <= m->point.y && m->point.y <= (y + MwTextHeight(handle, "M"))) {
|
if(y <= m->point.y && m->point.y <= (y + MwTextHeight(handle, "M"))) {
|
||||||
unsigned long t;
|
unsigned long t;
|
||||||
|
|
||||||
|
lb->selected = st + i;
|
||||||
|
|
||||||
if(((t = MwLLGetTick()) - lb->click_time) < 250 && lb->selected == st + i) {
|
if(((t = MwLLGetTick()) - lb->click_time) < 250 && lb->selected == st + i) {
|
||||||
MwDispatchUserHandler(handle->parent, MwNactivateHandler, &lb->selected);
|
MwDispatchUserHandler(handle->parent, MwNactivateHandler, &lb->selected);
|
||||||
}
|
}
|
||||||
lb->selected = st + i;
|
|
||||||
lb->click_time = t;
|
lb->click_time = t;
|
||||||
}
|
}
|
||||||
y += MwTextHeight(handle, "M");
|
y += MwTextHeight(handle, "M");
|
||||||
@@ -114,7 +117,7 @@ static void frame_mouse_move(MwWidget handle, void* user, void* call) {
|
|||||||
int h = MwGetInteger(handle, MwNheight);
|
int h = MwGetInteger(handle, MwNheight);
|
||||||
|
|
||||||
st = get_first_entry(handle->parent, lb);
|
st = get_first_entry(handle->parent, lb);
|
||||||
for(i = 0; i < (h - MwDefaultBorderWidth * 2) / MwTextHeight(handle, "M"); i++) {
|
for(i = 0; (st + i) < arrlen(lb->list) && i < (h - MwDefaultBorderWidth * 2) / MwTextHeight(handle, "M"); i++) {
|
||||||
if(y <= p->y && p->y <= (y + MwTextHeight(handle, "M"))) {
|
if(y <= p->y && p->y <= (y + MwTextHeight(handle, "M"))) {
|
||||||
lb->selected = st + i;
|
lb->selected = st + i;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user