Age | Commit message (Collapse) | Author |
|
stringwidth() and string() sometimes failed spuriously due
to the wrong assumption that cachechars() will only fail
when a different subfont is needed. in fact, cachechars()
can fail for other reasons like when it resizes the fontcache
(or fails todo so).
theres also the case when loadchar() is unable to translate
a character and returns 0. this case needs to be differentiated
from such temporary conditions like fontcache resize or subfont
load to stop the retry loop in string() and stringwidth().
now cachechars() returns -1 to indicate that it cannot
proceed and we test this in string() and stringwidth()
to skip over untranslatable characters to make progress
instead of retrying.
|
|
|
|
|
|
|
|
getting rid of the goto at the end of the while
loop by moving the if(subfontnae) case before
the cachechars() call.
|
|
cachechars() used to skip over characters on its own when
loadchar() could not find the character or a PJW replacement.
this resulted in wrong width calculation. now we just return
and handle the case inside _string and _stringwidth.
fix subfont leak in stringwidth()
remove annoying prints in stringwidth()
|
|
newwindow() used to mount the new window directly on /dev, resulting
in the old window and the new one being mounted over each other.
we now try to unmount the old window from /dev first, mount new
window to /mnt/wsys (replacing the old) and then bind /mnt/wsys
before /dev.
if theres no /mnt/wsys, just mount window directly before /dev.
|
|
the changeset r541ead66e8af:
"libdraw: make ebread() return buffer immidiately if available"
makes mouse sluggish when the program cant keep up as mouse
events queue up. this more or less restores the original
behaviour but only for mouse events.
|
|
when receiving interrupt note
fix the default note handler for event programs. only handle non system
notes or notes in the slave processes. for interrupt in the main process,
just call exits() which will do the cleanup and restore window label
properly.
this makes completely overriding the note handler in gping and
stats uneccesary.
|
|
this reduces number of syscalls and improves performance for vt
|
|
|
|
|
|
depending on the font, poping the menu would move your cursor
one pixel down each time (due to division). this is annoying
when using a trackpoint and trying to repeat some operation
over 9000 times.
the cursor should only be moved when the menu is repositioned
to contain it on the screen.
|
|
rectangles
not checking the rectangle dimensions causes integer overflows
and memory corruption. adding a new badrect() function that checks
for these cases.
|
|
agefont-nodisplay patch)
If you run this:
{for (i in `{seq 1 70000}) echo '½•α·'} | mc | wc
mc will eventually suicide. The error comes from
/sys/src/libdraw/font.c:/^agefont which assumes it has a
display. Normally, this is set up by geninitdraw (usually
via initdraw), but mc.c avoids that to avoid the screen
redraws (flicker, at a minimum, but worse in long-running
cases).
graphics(2) does not prohibit this use, so I made the least
intrusive change to make it work.
|
|
the initial fontresize() might fail but its error code is ignored
potentially leaving f->cacheimage == nil. make sure we call
fontresize() in loadchar() when theres no cacheimage and check the
return value to avoid nil pointer dereference.
|
|
|
|
|
|
|
|
dont zero *winp so the "screen" pointer is preserved.
|
|
instead of trying to make rio not change the window image too fast
and give the client some time to attach it (which turns out to be
impossible), we acknowledge that there is a race and just retry
the window reattach as long as the winname keeps changing in
gengetwindow().
|
|
fonts)
the text for a menu entry is drawn from:
y = textr.min.y + i*(font->height+Vspacing);
but we calculated the item from:
r = insetrect(textr);
i = (p.y - r.min.y) / (font->height+Vspacing);
the insetrect is wrong.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
delayed note leak (this fixes the "too many delayed notes" error with auth/fgui)
|
|
|
|
|
|
|
|
limit by outputting uncompressed image in writememimage() if compressed blocksize exceeds chunk limit
|
|
|
|
|
|
|
|
|
|
|