Custom sizes with XRandR (#25)

* xserver dummy with RandR.

* update.

* remove screen configurations from xorg.

* screen size cannot be nil anymore.

* use predefined screen configurations.

* use screen configurations.

* fix error.

* remove comment.
This commit is contained in:
Miroslav Šedivý 2023-02-14 21:18:47 +01:00 committed by GitHub
parent bfabee12e2
commit f8b128e1e9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 666 additions and 107 deletions

View file

@ -13,11 +13,20 @@ func (h *MessageHandlerCtx) screenSet(session types.Session, payload *message.Sc
return errors.New("is not the admin")
}
data := types.ScreenSize(*payload)
if err := h.desktop.SetScreenSize(data); err != nil {
size, err := h.desktop.SetScreenSize(types.ScreenSize{
Width: payload.Width,
Height: payload.Height,
Rate: payload.Rate,
})
if err != nil {
return err
}
h.sessions.Broadcast(event.SCREEN_UPDATED, payload)
h.sessions.Broadcast(event.SCREEN_UPDATED, message.ScreenSize{
Width: size.Width,
Height: size.Height,
Rate: size.Rate,
})
return nil
}

View file

@ -1,8 +1,6 @@
package handler
import (
"errors"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
@ -25,8 +23,10 @@ func (h *MessageHandlerCtx) systemInit(session types.Session) error {
}
size := h.desktop.GetScreenSize()
if size == nil {
return errors.New("could not get screen size")
screenSize := message.ScreenSize{
Width: size.Width,
Height: size.Height,
Rate: size.Rate,
}
sessions := map[string]message.SessionData{}
@ -44,7 +44,7 @@ func (h *MessageHandlerCtx) systemInit(session types.Session) error {
message.SystemInit{
SessionId: session.ID(),
ControlHost: controlHost,
ScreenSize: message.ScreenSize(*size),
ScreenSize: screenSize,
Sessions: sessions,
Settings: h.sessions.Settings(),
ScreencastEnabled: h.capture.Screencast().Enabled(),
@ -57,22 +57,22 @@ func (h *MessageHandlerCtx) systemInit(session types.Session) error {
}
func (h *MessageHandlerCtx) systemAdmin(session types.Session) error {
screenSizesList := []message.ScreenSize{}
for _, size := range h.desktop.ScreenConfigurations() {
for _, rate := range size.Rates {
screenSizesList = append(screenSizesList, message.ScreenSize{
Width: size.Width,
Height: size.Height,
Rate: rate,
})
}
configurations := h.desktop.ScreenConfigurations()
list := make([]message.ScreenSize, 0, len(configurations))
for _, conf := range configurations {
list = append(list, message.ScreenSize{
Width: conf.Width,
Height: conf.Height,
Rate: conf.Rate,
})
}
broadcast := h.capture.Broadcast()
session.Send(
event.SYSTEM_ADMIN,
message.SystemAdmin{
ScreenSizesList: screenSizesList,
ScreenSizesList: list, // TODO: remove
BroadcastStatus: message.BroadcastStatus{
IsActive: broadcast.Started(),
URL: broadcast.Url(),