Condition when resizing a window to close to 0 width or height
When resizing a window, if you shrink it too much in one dimension, a condition gets signalled. It sounds reasonable in theory, though I recall seeing in XLib documentation a note that the application should generally live with whatever size it gets (see here).
For now, I suggest one or both of the following approaches:
- Finding a way to tell WM that the application needs to be no smaller than some given size (maybe through this?) - various other programs I've tested, like Emacs, terminal and Files on Ubuntu, have some different minimum sizes set.
- Handling the condition by telling X to resize the window back.
Not sure whether the handling should happen on the demo size, or should some of it be integrated directly into CLX port as (configurable) "sane defaults".
Condition example with backtrace:
Trying to resize sheet #<CLIM:VBOX-PANE {10105F5A73}> to be too small (-1 x 236)
[Condition of type SIMPLE-ERROR]
Restarts:
0: [NIL] Restart event loop for #<CLX-PORT {100205AED3}>
1: [NIL] Exit event loop for #<CLX-PORT {100205AED3}>
2: [ABORT] abort thread (#<THREAD "CLIM Event Dispatcher for (CLX)" RUNNING {1002365A53}>)
Backtrace:
0: ((:METHOD CLIM:RESIZE-SHEET (CLIM:BASIC-SHEET T T)) #<CLIM:VBOX-PANE {10105F5A73}> -1 236) [fast-method]
Locals:
CLIM-SILICA::HEIGHT = 236
CLIM:SHEET = #<CLIM:VBOX-PANE {10105F5A73}>
CLIM-SILICA::WIDTH = -1
1: ((:METHOD CLIM:MOVE-AND-RESIZE-SHEET (CLIM:BASIC-SHEET T T T T)) #<CLIM:VBOX-PANE {10105F5A73}> 1 1 -1 236) [fast-method]
Locals:
CLIM-SILICA::HEIGHT = 236
CLIM:SHEET = #<CLIM:VBOX-PANE {10105F5A73}>
CLIM-SILICA::WIDTH = -1
CLIM-SILICA::X = 1
CLIM-SILICA::Y = 1
2: ((:METHOD CLIM:ALLOCATE-SPACE (CLIM:BORDER-PANE T T)) #<CLIM:OUTLINED-PANE {10104C8B83}> 1 238) [fast-method]
Locals:
CLIM-SILICA::HEIGHT = 238
CLIM:PANE = #<CLIM:OUTLINED-PANE {10104C8B83}>
CLIM-SILICA::WIDTH = 1
3: ((SB-PCL::EMF CLIM:NOTE-SHEET-REGION-CHANGED) #<unused argument> #<unused argument> #<CLIM:OUTLINED-PANE {10104C8B83}>)
Locals:
SB-PCL::.ARG0. = #<CLIM:OUTLINED-PANE {10104C8B83}>
SB-DEBUG::MORE = NIL
4: ((:METHOD CLIM:LAYOUT-FRAME (CLIM:STANDARD-APPLICATION-FRAME)) #<CLIM-DEMO::DEMO-DRIVER {10026A5233}> 1 238) [fast-method]
Locals:
CLIM-INTERNALS::FRAME = #<CLIM-DEMO::DEMO-DRIVER {10026A5233}>
CLIM-INTERNALS::HEIGHT = 238
CLIM-INTERNALS::WIDTH = 1
5: ((SB-PCL::EMF CLIM:NOTE-SHEET-REGION-CHANGED) #<unused argument> #<unused argument> #<CLIM:TOP-LEVEL-SHEET {10104C8BC3}> :PORT-DID-IT T)
Locals:
SB-PCL::.ARG0. = #<CLIM:TOP-LEVEL-SHEET {10104C8BC3}>
SB-DEBUG::MORE = (:PORT-DID-IT T)
6: ((:METHOD CLIM-SILICA:MIRROR-REGION-UPDATED (CLIM:BASIC-PORT CLIM:MIRRORED-SHEET-MIXIN)) #<CLX-CLIM::CLX-PORT {100205AED3}> #<CLIM:TOP-LEVEL-SHEET {10104C8BC3}>) [fast-method]
Locals:
CLIM:PORT = #<CLX-CLIM::CLX-PORT {100205AED3}>
CLIM:SHEET = #<CLIM:TOP-LEVEL-SHEET {10104C8BC3}>
CLIM-SILICA::TRANSFORMATION-CHANGED-P = NIL
7: ((:METHOD CLIM:HANDLE-EVENT (CLIM:MIRRORED-SHEET-MIXIN CLIM:WINDOW-CONFIGURATION-EVENT)) #<CLIM:TOP-LEVEL-SHEET {10104C8BC3}> #<CLIM:WINDOW-CONFIGURATION-EVENT /x 0:1 y 0:238/>) [fast-method]
Locals:
CLIM:EVENT = #<CLIM:WINDOW-CONFIGURATION-EVENT /x 0:1 y 0:238/>
CLIM:SHEET = #<CLIM:TOP-LEVEL-SHEET {10104C8BC3}>
8: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN CLIM:PROCESS-NEXT-EVENT))
9: ((FLET "WITHOUT-INTERRUPTS-BODY-29" :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))
10: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN CLIM:PROCESS-NEXT-EVENT) {7FFFEAB5E5AB}> #<SB-THREAD:MUTEX "CLX Event Lock" owner: #<SB-THREAD:THREAD "CLI..
11: ((:METHOD CLIM:PROCESS-NEXT-EVENT (CLX-CLIM::CLX-PORT)) #<unavailable argument> :TIMEOUT #<unavailable argument> :WAIT-FUNCTION #<unused argument> :STATE #<unused argument>) [fast-method]
12: ((:METHOD CLIM-SILICA:PORT-EVENT-LOOP (CLIM:BASIC-PORT)) #<CLX-CLIM::CLX-PORT {100205AED3}>) [fast-method]
13: ((FLET "WITHOUT-INTERRUPTS-BODY-4" :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
14: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
15: ((FLET "WITHOUT-INTERRUPTS-BODY-1" :IN SB-THREAD::CALL-WITH-MUTEX))
16: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) {7FFFEAB5EC9B}> #<SB-THREAD:MUTEX "thread result lock" owner: #<SB-THREAD:THR..
17: (SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE #<SB-THREAD:THREAD "CLIM Event Dispatcher for (CLX)" RUNNING {1002365A53}> NIL #<CLOSURE (LAMBDA NIL :IN CLIM:RESTART-PORT) {1002364C5B}> (#<SB-THREAD:TH..
18: ("foreign function: call_into_lisp")
19: ("foreign function: new_thread_trampoline")
--more--