(metaWindow)
| 3449 | } |
| 3450 | |
| 3451 | export function registerWindow(metaWindow) { |
| 3452 | if (is_override_redirect(metaWindow)) { |
| 3453 | return false; |
| 3454 | } |
| 3455 | |
| 3456 | if (metaWindow.clone) { |
| 3457 | // Can now happen when setting session-modes to "unlock-dialog" or |
| 3458 | // resetting gnome-shell in-place (e.g. on X11) |
| 3459 | console.warn("window already registered", metaWindow.title); |
| 3460 | return false; |
| 3461 | } |
| 3462 | |
| 3463 | const actor = metaWindow.get_compositor_private(); |
| 3464 | const cloneActor = new Clutter.Clone({ source: actor }); |
| 3465 | const clone = new Clutter.Actor(); |
| 3466 | clone.add_child(cloneActor); |
| 3467 | |
| 3468 | // create shade |
| 3469 | const shade = new St.Widget({ style_class: 'paperwm-clone-shade' }); |
| 3470 | // default opacity |
| 3471 | clone.add_child(shade); |
| 3472 | Utils.actor_raise(shade); |
| 3473 | shade.opacity = 0; |
| 3474 | shade.hide(); |
| 3475 | |
| 3476 | metaWindow.clone = clone; |
| 3477 | metaWindow.clone.cloneActor = cloneActor; |
| 3478 | metaWindow.clone.shade = shade; |
| 3479 | |
| 3480 | clone.targetX = 0; |
| 3481 | clone.meta_window = metaWindow; |
| 3482 | |
| 3483 | signals.connect(metaWindow, "focus", (metaWindow, user_data) => { |
| 3484 | focus_handler(metaWindow, user_data); |
| 3485 | }); |
| 3486 | signals.connect(metaWindow, 'size-changed', allocateClone); |
| 3487 | // Note: runs before gnome-shell's minimize handling code |
| 3488 | signals.connect(metaWindow, 'notify::fullscreen', () => { |
| 3489 | // if window is in a column, expel it |
| 3490 | barf(metaWindow, metaWindow); |
| 3491 | |
| 3492 | /** |
| 3493 | * Set fullscreen windows to "always on top". This is to ensure |
| 3494 | * that the fullscreened window is "above" modal windows. |
| 3495 | */ |
| 3496 | if (metaWindow.fullscreen) { |
| 3497 | // get current "above" value (for later restoring) |
| 3498 | metaWindow._fullscreen_above = metaWindow.is_above(); |
| 3499 | metaWindow.make_above(); |
| 3500 | } |
| 3501 | else if (metaWindow._fullscreen_above !== null) { |
| 3502 | if (!metaWindow._fullscreen_above) { |
| 3503 | metaWindow.unmake_above(); |
| 3504 | } |
| 3505 | delete metaWindow._fullscreen_above; |
| 3506 | } |
| 3507 | |
| 3508 | spaces.spaceOfWindow(metaWindow)?.setSpaceTopbarElementsVisible(true); |
no test coverage detected