Some stuff I added (or plan to add):
Return values and automation of window propertiesMidori OS apps need to manually specify what they need, such as adding a close button and triggering its logic in the app's logic. I would like to introduce window flags, which the window manager will take care of without you needing to explicitly specify these except just a flag value you set in the property DEF of the app. About return values, I changed the format of the app DEF, it returns a value and also specifies how the app should react.
There's 2 types of closing however: Closing (as of setting a flag for the app to think about it closing) and Kill (forcibly end the process, regardless if it wants or not). This is so Task Manager can moderate the window manager properly.
Return code specifications-1 or lower: App will not close when flagged to. 0: App closes immediately. 1: App can be closed. Progress data can be appended using WM_mkProgressCode() in the RETURN. It returns a value lower than -1, so it will refuse to close.
Window arraysApp windows can use global values, but no longer have predefined arrays like in Midori OS, but you can create them yourself, as well as other ones. It's basically Midori's later array concept but more generalized. The main idea is that you "allocate" an array from the pool and it returns an array ID to later get the array name and use VAR() to read/write to it. The way I implement this allows you to get the first allocated array ID of the window using WM_1stArr(WID) and have the other associated array IDs inside that one, but global variables can hold them too. Example:
DEF APP_TEST_ARR(WID,SX,SY,EX,EY) VAR ARRID%,ARRN$ IF ! WM_HasArray(WID) THEN '"Allocate" an integer array with 32 elements '0 - int, 1 - float, 2 - string ARRID% = WM_AllocArray(WID, 0, 32) IF ARRID%<0 THEN RETURN 0'No free array, will not continue ELSE ARRID% = WM_1stArr(WID) ENDIF ARRN$ = WM_GetArr$(ARRID%) GPUTCHR SX,SY,"ARR="+STR$(VAR(ARRN$)) INC VAR(ARRN$) RETURN 1 'When signal sent, close immediately END
Tooltips and Context MenusShowcase of a tooltip in the application menu. It's rendered on top of everything Context menus, makes a child window with these options and you can set it to change the parent windows's state or change a value in a windows's array for it to read and react to it.
Task Manager improvementsGot around to finish it up... The memory diagram was updated to show "danger zones". SmileBASIC 3 is not forgiving when your low on memory, sometimes it just throws an out of memory error even if you're just storing a 4-letter string with around 1 MB "free". The colors should be obvious; green is all good, yellow is dangerous and red is death; the session will be killed and CYMOS will panic. Light mode works decently and: when hovering over an entry, it will show the number of milliseconds it took to run; the number is not updated often to not flicker all over. Windows should preferably be only taking 2-3 ms to run so you can squeeze around 4 apps in and it stays at solid 60FPS. If not, then it's not an issue since CYMOS is sorta good at handling inconsequent framerates and you can cap the framerate should your app be a bit complex. ;P
Session saving through shutdown tasksThis is probably not useful for text editors but is for more generic things, such as the API logger or my file system. CYMOS will not immediately shut down but ensure all apps are properly closed and all needed data has been saved. For these, you can interact with the logon UI to like show a progress meter or explain what the task is currently doing. Should a task not finish in time, i.e. it might be stuck, you can choose to cancel the shutdown, skip that task and move on or wait a bit more.
Function key integrationWant to make function keys useful... I suck at describing things lol The 4th key gives it away... there's a hidden string in it but you'll have to wait :P The 5th key just shows/hides the keyboard, nothing special
App SwitcherSelf-explanatory, this is tied to the 4th function key.
Quite a bit, sorry for taking so long and to blast out so much but it's how it is, eh? It's definitely still in beta, I don't even have a package loader yet, but it already gives an idea as to how it works.