github.com/AlpineAIO/wails/v2@v2.0.0-beta.32.0.20240505041856-1047a8fa5fef/internal/frontend/dispatcher/window.go (about)

     1  package dispatcher
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  	"strconv"
     7  	"strings"
     8  
     9  	"github.com/AlpineAIO/wails/v2/internal/frontend"
    10  	"github.com/AlpineAIO/wails/v2/pkg/options"
    11  )
    12  
    13  func (d *Dispatcher) mustAtoI(input string) int {
    14  	result, err := strconv.Atoi(input)
    15  	if err != nil {
    16  		d.log.Error("cannot convert %s to integer!", input)
    17  	}
    18  	return result
    19  }
    20  
    21  func (d *Dispatcher) processWindowMessage(message string, sender frontend.Frontend) (string, error) {
    22  	if len(message) < 2 {
    23  		return "", errors.New("Invalid Window Message: " + message)
    24  	}
    25  
    26  	switch message[1] {
    27  	case 'A':
    28  		switch message[2:] {
    29  		case "SDT":
    30  			go sender.WindowSetSystemDefaultTheme()
    31  		case "LT":
    32  			go sender.WindowSetLightTheme()
    33  		case "DT":
    34  			go sender.WindowSetDarkTheme()
    35  		case "TP:0", "TP:1":
    36  			if message[2:] == "TP:0" {
    37  				go sender.WindowSetAlwaysOnTop(false)
    38  			} else if message[2:] == "TP:1" {
    39  				go sender.WindowSetAlwaysOnTop(true)
    40  			}
    41  		}
    42  	case 'c':
    43  		go sender.WindowCenter()
    44  	case 'T':
    45  		title := message[2:]
    46  		go sender.WindowSetTitle(title)
    47  	case 'F':
    48  		go sender.WindowFullscreen()
    49  	case 'f':
    50  		go sender.WindowUnfullscreen()
    51  	case 's':
    52  		parts := strings.Split(message[3:], ":")
    53  		w := d.mustAtoI(parts[0])
    54  		h := d.mustAtoI(parts[1])
    55  		go sender.WindowSetSize(w, h)
    56  	case 'p':
    57  		parts := strings.Split(message[3:], ":")
    58  		x := d.mustAtoI(parts[0])
    59  		y := d.mustAtoI(parts[1])
    60  		go sender.WindowSetPosition(x, y)
    61  	case 'H':
    62  		go sender.WindowHide()
    63  	case 'S':
    64  		go sender.WindowShow()
    65  	case 'R':
    66  		go sender.WindowReloadApp()
    67  	case 'r':
    68  		var rgba options.RGBA
    69  		err := json.Unmarshal([]byte(message[3:]), &rgba)
    70  		if err != nil {
    71  			return "", err
    72  		}
    73  		go sender.WindowSetBackgroundColour(&rgba)
    74  	case 'M':
    75  		go sender.WindowMaximise()
    76  	case 't':
    77  		go sender.WindowToggleMaximise()
    78  	case 'U':
    79  		go sender.WindowUnmaximise()
    80  	case 'm':
    81  		go sender.WindowMinimise()
    82  	case 'u':
    83  		go sender.WindowUnminimise()
    84  	case 'Z':
    85  		parts := strings.Split(message[3:], ":")
    86  		w := d.mustAtoI(parts[0])
    87  		h := d.mustAtoI(parts[1])
    88  		go sender.WindowSetMaxSize(w, h)
    89  	case 'z':
    90  		parts := strings.Split(message[3:], ":")
    91  		w := d.mustAtoI(parts[0])
    92  		h := d.mustAtoI(parts[1])
    93  		go sender.WindowSetMinSize(w, h)
    94  	default:
    95  		d.log.Error("unknown Window message: %s", message)
    96  	}
    97  
    98  	return "", nil
    99  }