mirror of
https://github.com/HeyPuter/puter.git
synced 2025-02-02 23:28:39 +08:00
Allow apps to resize/reposition their windows
The resizing and repositioning is safe from abuse in that the window's position and size cannot cause it to escape the viewport. More could be done here, e.g. rate limit resize/repos. I will request rate-limiting in a separate issue.
This commit is contained in:
parent
a52a49797a
commit
a5584317c8
93
src/IPC.js
93
src/IPC.js
@ -333,7 +333,6 @@ window.addEventListener('message', async (event) => {
|
||||
initiating_app_uuid: app_uuid,
|
||||
});
|
||||
}
|
||||
|
||||
//--------------------------------------------------------
|
||||
// setWindowTitle
|
||||
//--------------------------------------------------------
|
||||
@ -347,6 +346,98 @@ window.addEventListener('message', async (event) => {
|
||||
}, '*');
|
||||
}
|
||||
//--------------------------------------------------------
|
||||
// setWindowWidth
|
||||
//--------------------------------------------------------
|
||||
else if(event.data.msg === 'setWindowWidth' && event.data.width !== undefined){
|
||||
event.data.width = parseFloat(event.data.width);
|
||||
// must be at least 200
|
||||
if(event.data.width < 200)
|
||||
event.data.width = 200;
|
||||
// set window width
|
||||
$($el_parent_window).css('width', event.data.width);
|
||||
// send confirmation to requester window
|
||||
target_iframe.contentWindow.postMessage({
|
||||
original_msg_id: msg_id,
|
||||
}, '*');
|
||||
}
|
||||
//--------------------------------------------------------
|
||||
// setWindowHeight
|
||||
//--------------------------------------------------------
|
||||
else if(event.data.msg === 'setWindowHeight' && event.data.height !== undefined){
|
||||
event.data.height = parseFloat(event.data.height);
|
||||
// must be at least 200
|
||||
if(event.data.height < 200)
|
||||
event.data.height = 200;
|
||||
|
||||
// convert to number and set
|
||||
$($el_parent_window).css('height', event.data.height);
|
||||
|
||||
// send confirmation to requester window
|
||||
target_iframe.contentWindow.postMessage({
|
||||
original_msg_id: msg_id,
|
||||
}, '*');
|
||||
}
|
||||
//--------------------------------------------------------
|
||||
// setWindowSize
|
||||
//--------------------------------------------------------
|
||||
else if(event.data.msg === 'setWindowSize' && (event.data.width !== undefined || event.data.height !== undefined)){
|
||||
// convert to number and set
|
||||
if(event.data.width !== undefined){
|
||||
event.data.width = parseFloat(event.data.width);
|
||||
// must be at least 200
|
||||
if(event.data.width < 200)
|
||||
event.data.width = 200;
|
||||
$($el_parent_window).css('width', event.data.width);
|
||||
}
|
||||
|
||||
if(event.data.height !== undefined){
|
||||
event.data.height = parseFloat(event.data.height);
|
||||
// must be at least 200
|
||||
if(event.data.height < 200)
|
||||
event.data.height = 200;
|
||||
$($el_parent_window).css('height', event.data.height);
|
||||
}
|
||||
|
||||
// send confirmation to requester window
|
||||
target_iframe.contentWindow.postMessage({
|
||||
original_msg_id: msg_id,
|
||||
}, '*');
|
||||
}
|
||||
//--------------------------------------------------------
|
||||
// setWindowPosition
|
||||
//--------------------------------------------------------
|
||||
else if(event.data.msg === 'setWindowPosition' && (event.data.x !== undefined || event.data.y !== undefined)){
|
||||
// convert to number and set
|
||||
if(event.data.x !== undefined){
|
||||
event.data.x = parseFloat(event.data.x);
|
||||
// we don't want the window to go off the left edge of the screen
|
||||
if(event.data.x < 0)
|
||||
event.data.x = 0;
|
||||
// we don't want the window to go off the right edge of the screen
|
||||
if(event.data.x > window.innerWidth - 100)
|
||||
event.data.x = window.innerWidth - 100;
|
||||
// set window left
|
||||
$($el_parent_window).css('left', parseFloat(event.data.x));
|
||||
}
|
||||
|
||||
if(event.data.y !== undefined){
|
||||
event.data.y = parseFloat(event.data.y);
|
||||
// we don't want the window to go off the top edge of the screen
|
||||
if(event.data.y < window.taskbar_height)
|
||||
event.data.y = window.taskbar_height;
|
||||
// we don't want the window to go off the bottom edge of the screen
|
||||
if(event.data.y > window.innerHeight - 100)
|
||||
event.data.y = window.innerHeight - 100;
|
||||
// set window top
|
||||
$($el_parent_window).css('top', parseFloat(event.data.y));
|
||||
}
|
||||
|
||||
// send confirmation to requester window
|
||||
target_iframe.contentWindow.postMessage({
|
||||
original_msg_id: msg_id,
|
||||
}, '*');
|
||||
}
|
||||
//--------------------------------------------------------
|
||||
// watchItem
|
||||
//--------------------------------------------------------
|
||||
else if(event.data.msg === 'watchItem' && event.data.item_uid !== undefined){
|
||||
|
Loading…
Reference in New Issue
Block a user