~mdw
/
sgt
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Revamp the window-resize behaviour UI so there are only three states
[sgt/putty]
/
window.c
diff --git
a/window.c
b/window.c
index
cd5f703
..
8e576bf
100644
(file)
--- a/
window.c
+++ b/
window.c
@@
-429,7
+429,7
@@
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
int exwinmode = 0;
if (!cfg.scrollbar)
winmode &= ~(WS_VSCROLL);
int exwinmode = 0;
if (!cfg.scrollbar)
winmode &= ~(WS_VSCROLL);
- if (cfg.
locksize && cfg.lockfont
)
+ if (cfg.
resize_action == RESIZE_DISABLED
)
winmode &= ~(WS_THICKFRAME | WS_MAXIMIZEBOX);
if (cfg.alwaysontop)
exwinmode |= WS_EX_TOPMOST;
winmode &= ~(WS_THICKFRAME | WS_MAXIMIZEBOX);
if (cfg.alwaysontop)
exwinmode |= WS_EX_TOPMOST;
@@
-526,12
+526,6
@@
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
session_closed = FALSE;
/*
session_closed = FALSE;
/*
- * Set up the input and output buffers.
- */
- inbuf_head = 0;
- outbuf_reap = outbuf_head = 0;
-
- /*
* Prepare the mouse handler.
*/
lastact = MA_NOTHING;
* Prepare the mouse handler.
*/
lastact = MA_NOTHING;
@@
-660,8
+654,7
@@
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
timer_id = 0;
}
HideCaret(hwnd);
timer_id = 0;
}
HideCaret(hwnd);
- if (inbuf_head)
- term_out();
+ term_out();
term_update();
ShowCaret(hwnd);
term_update();
ShowCaret(hwnd);
@@
-1099,11
+1092,11
@@
void request_resize(int w, int h)
/* If the window is maximized supress resizing attempts */
if (IsZoomed(hwnd)) {
/* If the window is maximized supress resizing attempts */
if (IsZoomed(hwnd)) {
- if (cfg.
lockfont
)
+ if (cfg.
resize_action != RESIZE_FONT
)
return;
}
return;
}
- if (cfg.
lockfont && cfg.locksize
) return;
+ if (cfg.
resize_action == RESIZE_DISABLED
) return;
if (h == rows && w == cols) return;
/* Sanity checks ... */
if (h == rows && w == cols) return;
/* Sanity checks ... */
@@
-1136,7
+1129,7
@@
void request_resize(int w, int h)
term_size(h, w, cfg.savelines);
term_size(h, w, cfg.savelines);
- if (cfg.
lockfont
) {
+ if (cfg.
resize_action != RESIZE_FONT
) {
width = extra_width + font_width * w;
height = extra_height + font_height * h;
width = extra_width + font_width * w;
height = extra_height + font_height * h;
@@
-1204,7
+1197,7
@@
static void reset_window(int reinit) {
extra_width = wr.right - wr.left - cr.right + cr.left;
extra_height = wr.bottom - wr.top - cr.bottom + cr.top;
extra_width = wr.right - wr.left - cr.right + cr.left;
extra_height = wr.bottom - wr.top - cr.bottom + cr.top;
- if (
!cfg.lockfont
) {
+ if (
cfg.resize_action == RESIZE_FONT
) {
if ( font_width != win_width/cols ||
font_height != win_height/rows) {
deinit_fonts();
if ( font_width != win_width/cols ||
font_height != win_height/rows) {
deinit_fonts();
@@
-1267,7
+1260,7
@@
static void reset_window(int reinit) {
* window. But that may be too big for the screen which forces us
* to change the terminal.
*/
* window. But that may be too big for the screen which forces us
* to change the terminal.
*/
- if ((cfg.
lockfont
&& reinit==0) || reinit>0) {
+ if ((cfg.
resize_action != RESIZE_FONT
&& reinit==0) || reinit>0) {
offset_width = offset_height = cfg.window_border;
extra_width = wr.right - wr.left - cr.right + cr.left + offset_width*2;
extra_height = wr.bottom - wr.top - cr.bottom + cr.top +offset_height*2;
offset_width = offset_height = cfg.window_border;
extra_width = wr.right - wr.left - cr.right + cr.left + offset_width*2;
extra_height = wr.bottom - wr.top - cr.bottom + cr.top +offset_height*2;
@@
-1392,8
+1385,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
case WM_TIMER:
if (pending_netevent)
enact_pending_netevent();
case WM_TIMER:
if (pending_netevent)
enact_pending_netevent();
- if (inbuf_head)
- term_out();
+ term_out();
noise_regular();
HideCaret(hwnd);
term_update();
noise_regular();
HideCaret(hwnd);
term_update();
@@
-1516,7
+1508,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
* Flush the line discipline's edit buffer in the
* case where local editing has just been disabled.
*/
* Flush the line discipline's edit buffer in the
* case where local editing has just been disabled.
*/
- ldisc_send(NULL, 0);
+ ldisc_send(NULL, 0
, 0
);
if (pal)
DeleteObject(pal);
logpal = NULL;
if (pal)
DeleteObject(pal);
logpal = NULL;
@@
-1528,7
+1520,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
if (cfg.height != prev_cfg.height ||
cfg.width != prev_cfg.width ||
cfg.savelines != prev_cfg.savelines ||
if (cfg.height != prev_cfg.height ||
cfg.width != prev_cfg.width ||
cfg.savelines != prev_cfg.savelines ||
- cfg.
locksize
)
+ cfg.
resize_action != RESIZE_TERM
)
term_size(cfg.height, cfg.width, cfg.savelines);
/* Enable or disable the scroll bar, etc */
term_size(cfg.height, cfg.width, cfg.savelines);
/* Enable or disable the scroll bar, etc */
@@
-1559,7
+1551,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
nflg |= WS_VSCROLL;
else
nflg &= ~WS_VSCROLL;
nflg |= WS_VSCROLL;
else
nflg &= ~WS_VSCROLL;
- if (cfg.
locksize && cfg.lockfont
)
+ if (cfg.
resize_action == RESIZE_DISABLED
)
nflg &= ~(WS_THICKFRAME | WS_MAXIMIZEBOX);
else
nflg |= (WS_THICKFRAME | WS_MAXIMIZEBOX);
nflg &= ~(WS_THICKFRAME | WS_MAXIMIZEBOX);
else
nflg |= (WS_THICKFRAME | WS_MAXIMIZEBOX);
@@
-1580,7
+1572,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
}
/* Oops */
}
/* Oops */
- if (cfg.
locksize && cfg.lockfont
&& IsZoomed(hwnd)) {
+ if (cfg.
resize_action == RESIZE_DISABLED
&& IsZoomed(hwnd)) {
force_normal(hwnd);
init_lvl = 2;
}
force_normal(hwnd);
init_lvl = 2;
}
@@
-1599,7
+1591,8
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
cfg.fontcharset != prev_cfg.fontcharset ||
cfg.vtmode != prev_cfg.vtmode ||
cfg.bold_colour != prev_cfg.bold_colour ||
cfg.fontcharset != prev_cfg.fontcharset ||
cfg.vtmode != prev_cfg.vtmode ||
cfg.bold_colour != prev_cfg.bold_colour ||
- (cfg.lockfont && !prev_cfg.lockfont))
+ (cfg.resize_action != RESIZE_FONT &&
+ prev_cfg.resize_action == RESIZE_FONT))
init_lvl = 2;
InvalidateRect(hwnd, NULL, TRUE);
init_lvl = 2;
InvalidateRect(hwnd, NULL, TRUE);
@@
-1910,7
+1903,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
* 1) Keep the sizetip uptodate
* 2) Make sure the window size is _stepped_ in units of the font size.
*/
* 1) Keep the sizetip uptodate
* 2) Make sure the window size is _stepped_ in units of the font size.
*/
- if (
!cfg.locksize
&& !alt_pressed) {
+ if (
cfg.resize_action == RESIZE_TERM
&& !alt_pressed) {
int width, height, w, h, ew, eh;
LPRECT r = (LPRECT) lParam;
int width, height, w, h, ew, eh;
LPRECT r = (LPRECT) lParam;
@@
-2010,7
+2003,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
if (wParam == SIZE_RESTORED || wParam == SIZE_MAXIMIZED)
SetWindowText(hwnd, window_name);
if (wParam == SIZE_RESTORED || wParam == SIZE_MAXIMIZED)
SetWindowText(hwnd, window_name);
- if (cfg.
lockfont && cfg.locksize
) {
+ if (cfg.
resize_action == RESIZE_DISABLED
) {
/* A resize, well it better be a minimize. */
reset_window(-1);
} else {
/* A resize, well it better be a minimize. */
reset_window(-1);
} else {
@@
-2025,7
+2018,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
was_zoomed = 1;
prev_rows = rows;
prev_cols = cols;
was_zoomed = 1;
prev_rows = rows;
prev_cols = cols;
- if (cfg.
lockfont
) {
+ if (cfg.
resize_action != RESIZE_FONT
) {
w = width / font_width;
if (w < 1) w = 1;
h = height / font_height;
w = width / font_width;
if (w < 1) w = 1;
h = height / font_height;
@@
-2036,7
+2029,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
reset_window(0);
} else if (wParam == SIZE_RESTORED && was_zoomed) {
was_zoomed = 0;
reset_window(0);
} else if (wParam == SIZE_RESTORED && was_zoomed) {
was_zoomed = 0;
- if (cfg.
lockfont
)
+ if (cfg.
resize_action != RESIZE_FONT
)
term_size(prev_rows, prev_cols, cfg.savelines);
reset_window(0);
}
term_size(prev_rows, prev_cols, cfg.savelines);
reset_window(0);
}
@@
-2055,7
+2048,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
* down the connection during an NT opaque drag.)
*/
if (resizing) {
* down the connection during an NT opaque drag.)
*/
if (resizing) {
- if (
!cfg.locksize
&& !alt_pressed) {
+ if (
cfg.resize_action == RESIZE_TERM
&& !alt_pressed) {
need_backend_resize = TRUE;
w = (width-cfg.window_border*2) / font_width;
if (w < 1) w = 1;
need_backend_resize = TRUE;
w = (width-cfg.window_border*2) / font_width;
if (w < 1) w = 1;
@@
-2151,6
+2144,14
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
if (len != 0) {
/*
if (len != 0) {
/*
+ * Interrupt an ongoing paste. I'm not sure
+ * this is sensible, but for the moment it's
+ * preferable to having to faff about buffering
+ * things.
+ */
+ term_nopaste();
+
+ /*
* We need not bother about stdin backlogs
* here, because in GUI PuTTY we can't do
* anything about it anyway; there's no means
* We need not bother about stdin backlogs
* here, because in GUI PuTTY we can't do
* anything about it anyway; there's no means
@@
-2158,7
+2159,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
* messages. We _have_ to buffer everything
* we're sent.
*/
* messages. We _have_ to buffer everything
* we're sent.
*/
- ldisc_send(buf, len);
+ ldisc_send(buf, len
, 1
);
show_mouseptr(0);
}
}
show_mouseptr(0);
}
}
@@
-2197,7
+2198,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
if (n > 0) {
buff = (char*) smalloc(n);
ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, buff, n);
if (n > 0) {
buff = (char*) smalloc(n);
ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, buff, n);
- luni_send((unsigned short *)buff, n / 2);
+ luni_send((unsigned short *)buff, n / 2
, 1
);
free(buff);
}
ImmReleaseContext(hwnd, hIMC);
free(buff);
}
ImmReleaseContext(hwnd, hIMC);
@@
-2210,10
+2211,10
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
buf[1] = wParam;
buf[0] = wParam >> 8;
buf[1] = wParam;
buf[0] = wParam >> 8;
- lpage_send(kbd_codepage, buf, 2);
+ lpage_send(kbd_codepage, buf, 2
, 1
);
} else {
char c = (unsigned char) wParam;
} else {
char c = (unsigned char) wParam;
- lpage_send(kbd_codepage, &c, 1);
+ lpage_send(kbd_codepage, &c, 1
, 1
);
}
return (0);
case WM_CHAR:
}
return (0);
case WM_CHAR:
@@
-2226,7
+2227,7
@@
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
*/
{
char c = (unsigned char)wParam;
*/
{
char c = (unsigned char)wParam;
- lpage_send(CP_ACP, &c, 1);
+ lpage_send(CP_ACP, &c, 1
, 1
);
}
return 0;
case WM_SETCURSOR:
}
return 0;
case WM_SETCURSOR:
@@
-2831,10
+2832,6
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
seen_key_event = 1;
}
seen_key_event = 1;
}
- /* Make sure we're not pasting */
- if (key_down)
- term_nopaste();
-
if (compose_state > 1 && left_alt)
compose_state = 0;
if (compose_state > 1 && left_alt)
compose_state = 0;
@@
-3364,6
+3361,14
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
#endif
if (r > 0) {
WCHAR keybuf;
#endif
if (r > 0) {
WCHAR keybuf;
+
+ /*
+ * Interrupt an ongoing paste. I'm not sure this is
+ * sensible, but for the moment it's preferable to
+ * having to faff about buffering things.
+ */
+ term_nopaste();
+
p = output;
for (i = 0; i < r; i++) {
unsigned char ch = (unsigned char) keys[i];
p = output;
for (i = 0; i < r; i++) {
unsigned char ch = (unsigned char) keys[i];
@@
-3382,7
+3387,7
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
return 0;
}
keybuf = nc;
return 0;
}
keybuf = nc;
- luni_send(&keybuf, 1);
+ luni_send(&keybuf, 1
, 1
);
continue;
}
continue;
}
@@
-3392,7
+3397,7
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
if (alt_sum) {
if (in_utf || dbcs_screenfont) {
keybuf = alt_sum;
if (alt_sum) {
if (in_utf || dbcs_screenfont) {
keybuf = alt_sum;
- luni_send(&keybuf, 1);
+ luni_send(&keybuf, 1
, 1
);
} else {
ch = (char) alt_sum;
/*
} else {
ch = (char) alt_sum;
/*
@@
-3404,22
+3409,22
@@
static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
* messages. We _have_ to buffer
* everything we're sent.
*/
* messages. We _have_ to buffer
* everything we're sent.
*/
- ldisc_send(&ch, 1);
+ ldisc_send(&ch, 1
, 1
);
}
alt_sum = 0;
} else
}
alt_sum = 0;
} else
- lpage_send(kbd_codepage, &ch, 1);
+ lpage_send(kbd_codepage, &ch, 1
, 1
);
} else {
if(capsOn && ch < 0x80) {
WCHAR cbuf[2];
cbuf[0] = 27;
cbuf[1] = xlat_uskbd2cyrllic(ch);
} else {
if(capsOn && ch < 0x80) {
WCHAR cbuf[2];
cbuf[0] = 27;
cbuf[1] = xlat_uskbd2cyrllic(ch);
- luni_send(cbuf+!left_alt, 1+!!left_alt);
+ luni_send(cbuf+!left_alt, 1+!!left_alt
, 1
);
} else {
char cbuf[2];
cbuf[0] = '\033';
cbuf[1] = ch;
} else {
char cbuf[2];
cbuf[0] = '\033';
cbuf[1] = ch;
- lpage_send(kbd_codepage, cbuf+!left_alt, 1+!!left_alt);
+ lpage_send(kbd_codepage, cbuf+!left_alt, 1+!!left_alt
, 1
);
}
}
show_mouseptr(0);
}
}
show_mouseptr(0);