I am trying to create an extension with a function to directly open apps (from the appgrid or search results) in split view.
I couldn’t find the code which is responsible for GNOME’s split view in the js code, so I tried to size the windows myself.
What I did is call app.open_new_window(-1)
and then on the window-create signal I call this function (after a short timeout):
tileWindow: function(window) {
if (window) {
if (window.get_maximized())
window.unmaximize(window.get_maximized());
if (window.allows_resize() && window.allows_move()) {
let working_space = window.get_work_area_current_monitor()
let x;
let y = working_space.y;
let height = working_space.height;
let width = working_space.width / 2;
if (this.windowToTileTo == Meta.Side.LEFT)
x = working_space.x;
else if (this.windowToTileTo == Meta.Side.RIGHT)
x = working_space.x + width;
window.move_resize_frame(true, x, y, width, height);
window.maximize(Meta.MaximizeFlags.VERTICAL); // ----- Problem causer -------
this.windowToTileTo = undefined;
}
}
},
The problem I have is with window.maximize(Meta.MaximizeFlags.VERTICAL);
. Calling this makes the window stick to the Topbar and prevents vertical movement. I can only restore the normal behaviour by using GNOME’s “auto-sizing” function (like maximizing by pushing the window into the topbar or side). Here is a GIF which shows me trying to pull the window from the topbar down. https://imgur.com/a/5bMk6EM
I don’t understand what is causing this.
Any help is appreciated. Pointing me to the code where GNOME does the split view, might be helpful as well. Thank you.