Turn off atomic update during direct transmission
This commit is contained in:
parent
80204c6056
commit
94db6053d5
@ -327,8 +327,13 @@ func (self *ImageCollection) new_graphics_command() *GraphicsCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func transmit_by_escape_code(lp *loop.Loop, image_id uint32, temp_file_map map[uint32]*temp_resource, frame *images.ImageFrame, gc *GraphicsCommand) {
|
func transmit_by_escape_code(lp *loop.Loop, image_id uint32, temp_file_map map[uint32]*temp_resource, frame *images.ImageFrame, gc *GraphicsCommand) {
|
||||||
|
atomic := lp.IsAtomicUpdateActive()
|
||||||
|
lp.EndAtomicUpdate()
|
||||||
gc.SetTransmission(GRT_transmission_direct)
|
gc.SetTransmission(GRT_transmission_direct)
|
||||||
gc.WriteWithPayloadToLoop(lp, frame.Data())
|
gc.WriteWithPayloadToLoop(lp, frame.Data())
|
||||||
|
if atomic {
|
||||||
|
lp.StartAtomicUpdate()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func transmit_by_shm(lp *loop.Loop, image_id uint32, temp_file_map map[uint32]*temp_resource, frame *images.ImageFrame, gc *GraphicsCommand) {
|
func transmit_by_shm(lp *loop.Loop, image_id uint32, temp_file_map map[uint32]*temp_resource, frame *images.ImageFrame, gc *GraphicsCommand) {
|
||||||
|
|||||||
@ -62,6 +62,7 @@ type Loop struct {
|
|||||||
on_SIGTSTP func() error
|
on_SIGTSTP func() error
|
||||||
style_cache map[string]func(...any) string
|
style_cache map[string]func(...any) string
|
||||||
style_ctx style.Context
|
style_ctx style.Context
|
||||||
|
atomic_update_active bool
|
||||||
|
|
||||||
// Suspend the loop restoring terminal state. Call the return resume function to restore the loop
|
// Suspend the loop restoring terminal state. Call the return resume function to restore the loop
|
||||||
Suspend func() (func() error, error)
|
Suspend func() (func() error, error)
|
||||||
@ -290,11 +291,20 @@ func (self *Loop) Beep() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *Loop) StartAtomicUpdate() {
|
func (self *Loop) StartAtomicUpdate() {
|
||||||
|
if self.atomic_update_active {
|
||||||
|
self.EndAtomicUpdate()
|
||||||
|
}
|
||||||
self.QueueWriteString(PENDING_UPDATE.EscapeCodeToSet())
|
self.QueueWriteString(PENDING_UPDATE.EscapeCodeToSet())
|
||||||
|
self.atomic_update_active = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *Loop) IsAtomicUpdateActive() bool { return self.atomic_update_active }
|
||||||
|
|
||||||
func (self *Loop) EndAtomicUpdate() {
|
func (self *Loop) EndAtomicUpdate() {
|
||||||
self.QueueWriteString(PENDING_UPDATE.EscapeCodeToReset())
|
if self.atomic_update_active {
|
||||||
|
self.QueueWriteString(PENDING_UPDATE.EscapeCodeToReset())
|
||||||
|
self.atomic_update_active = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *Loop) SetCursorShape(shape CursorShapes, blink bool) {
|
func (self *Loop) SetCursorShape(shape CursorShapes, blink bool) {
|
||||||
|
|||||||
@ -286,6 +286,7 @@ func (self *Loop) run() (err error) {
|
|||||||
self.death_signal = SIGNULL
|
self.death_signal = SIGNULL
|
||||||
self.escape_code_parser.Reset()
|
self.escape_code_parser.Reset()
|
||||||
self.exit_code = 0
|
self.exit_code = 0
|
||||||
|
self.atomic_update_active = false
|
||||||
self.timers = make([]*timer, 0, 1)
|
self.timers = make([]*timer, 0, 1)
|
||||||
no_timeout_channel := make(<-chan time.Time)
|
no_timeout_channel := make(<-chan time.Time)
|
||||||
finalizer := ""
|
finalizer := ""
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user