X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/ab4f20e89741179eddf9cc25417207ab725a4adb..c13772b1ab493bfc92760c9c45c6aa5c58074ab1:/mac/macctrls.c diff --git a/mac/macctrls.c b/mac/macctrls.c index 7dc37a69..450b1cd1 100644 --- a/mac/macctrls.c +++ b/mac/macctrls.c @@ -1,4 +1,4 @@ -/* $Id: macctrls.c,v 1.41 2003/05/10 20:23:23 ben Exp $ */ +/* $Id$ */ /* * Copyright (c) 2003 Ben Harris * All rights reserved. @@ -248,6 +248,7 @@ void macctrl_layoutbox(struct controlbox *cb, WindowPtr window, mcs->focus = NULL; mcs->defbutton = NULL; mcs->canbutton = NULL; + mcs->curpanel = 1; /* Count the number of panels */ mcs->npanels = 1; for (i = 1; i < cb->nctrlsets; i++) @@ -291,8 +292,8 @@ static void macctrl_layoutset(struct mac_layoutstate *curstate, struct controlset *s, WindowPtr window, struct macctrls *mcs) { - unsigned int i, j, ncols, colstart; - struct mac_layoutstate cols[MAXCOLS]; + unsigned int i, j, ncols, colstart, colspan; + struct mac_layoutstate cols[MAXCOLS], pos; cols[0] = *curstate; ncols = 1; @@ -301,8 +302,8 @@ static void macctrl_layoutset(struct mac_layoutstate *curstate, union control *ctrl = s->ctrls[i]; colstart = COLUMN_START(ctrl->generic.column); - switch (ctrl->generic.type) { - case CTRL_COLUMNS: + colspan = COLUMN_SPAN(ctrl->generic.column); + if (ctrl->generic.type == CTRL_COLUMNS) { if (ctrl->columns.ncols != 1) { ncols = ctrl->columns.ncols; assert(ncols <= MAXCOLS); @@ -324,28 +325,40 @@ static void macctrl_layoutset(struct mac_layoutstate *curstate, cols[0].width = curstate->width; ncols = 1; } - break; - case CTRL_TEXT: - macctrl_text(mcs, window, &cols[colstart], ctrl); - break; - case CTRL_EDITBOX: - macctrl_editbox(mcs, window, &cols[colstart], ctrl); - break; - case CTRL_RADIO: - macctrl_radio(mcs, window, &cols[colstart], ctrl); - break; - case CTRL_CHECKBOX: - macctrl_checkbox(mcs, window, &cols[colstart], ctrl); - break; - case CTRL_BUTTON: - macctrl_button(mcs, window, &cols[colstart], ctrl); - break; - case CTRL_LISTBOX: - if (ctrl->listbox.height == 0) - macctrl_popup(mcs, window, &cols[colstart], ctrl); - else - macctrl_listbox(mcs, window, &cols[colstart], ctrl); - break; + } else { + pos = cols[colstart]; + pos.width = cols[colstart + colspan - 1].width + + (cols[colstart + colspan - 1].pos.h - cols[colstart].pos.h); + + for (j = colstart; j < colstart + colspan; j++) + if (pos.pos.v < cols[j].pos.v) + pos.pos.v = cols[j].pos.v; + + switch (ctrl->generic.type) { + case CTRL_TEXT: + macctrl_text(mcs, window, &pos, ctrl); + break; + case CTRL_EDITBOX: + macctrl_editbox(mcs, window, &pos, ctrl); + break; + case CTRL_RADIO: + macctrl_radio(mcs, window, &pos, ctrl); + break; + case CTRL_CHECKBOX: + macctrl_checkbox(mcs, window, &pos, ctrl); + break; + case CTRL_BUTTON: + macctrl_button(mcs, window, &pos, ctrl); + break; + case CTRL_LISTBOX: + if (ctrl->listbox.height == 0) + macctrl_popup(mcs, window, &pos, ctrl); + else + macctrl_listbox(mcs, window, &pos, ctrl); + break; + } + for (j = colstart; j < colstart + colspan; j++) + cols[j].pos.v = pos.pos.v; } } for (j = 0; j < ncols; j++) @@ -1396,9 +1409,18 @@ void dlg_refresh(union control *ctrl, void *dlg) { struct macctrls *mcs = dlg; union macctrl *mc; + int i; - if (ctrl == NULL) - return; /* FIXME */ + if (ctrl == NULL) { + /* NULL means refresh every control */ + for (i = 0 ; i < mcs->npanels; i++) { + for (mc = mcs->panels[i]; mc != NULL; mc = mc->generic.next) { + ctrlevent(mcs, mc, EVENT_REFRESH); + } + } + return; + } + /* Just refresh a specific control */ mc = findbyctrl(mcs, ctrl); assert(mc != NULL); ctrlevent(mcs, mc, EVENT_REFRESH);