Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prevent PiP from overlapping Wingpanel #2185

Merged
merged 3 commits into from
Dec 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions data/gala.metainfo.xml.in
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
</ul>
</description>
<issues>
<issue url="https://github.com/elementary/gala/issues/397">Prevent PIP overlapping wingpanel?</issue>
<issue url="https://github.com/elementary/gala/issues/857">Toggling the active window's maximization state during multitasking view messes up the window preview size</issue>
<issue url="https://github.com/elementary/gala/issues/1967">Some apps ignore HiDPI mode</issue>
<issue url="https://github.com/elementary/gala/issues/2088">Invisible window clones</issue>
Expand Down
48 changes: 10 additions & 38 deletions plugins/pip/PopupWindow.vala
Original file line number Diff line number Diff line change
Expand Up @@ -88,20 +88,15 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor {

update_size ();

#if HAS_MUTTER45
Mtk.Rectangle monitor_rect;
#else
Meta.Rectangle monitor_rect;
#endif
get_current_monitor_rect (out monitor_rect);
var workarea_rect = display.get_workspace_manager ().get_active_workspace ().get_work_area_all_monitors ();

float x_position, y_position;
if (Clutter.get_default_text_direction () == Clutter.TextDirection.RTL) {
x_position = SCREEN_MARGIN + monitor_rect.x;
x_position = SCREEN_MARGIN + workarea_rect.x;
} else {
x_position = monitor_rect.width + monitor_rect.x - SCREEN_MARGIN - width;
x_position = workarea_rect.x + workarea_rect.width - SCREEN_MARGIN - width;
}
y_position = monitor_rect.height + monitor_rect.y - SCREEN_MARGIN - height;
y_position = workarea_rect.y + workarea_rect.height - SCREEN_MARGIN - height;

set_position (x_position, y_position);

Expand Down Expand Up @@ -431,22 +426,12 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor {
private void place_window_in_screen () {
off_screen = false;

#if HAS_MUTTER45
Mtk.Rectangle monitor_rect;
#else
Meta.Rectangle monitor_rect;
#endif
get_current_monitor_rect (out monitor_rect);
var workarea_rect = display.get_workspace_manager ().get_active_workspace ().get_work_area_all_monitors ();

int monitor_x = monitor_rect.x;
int monitor_y = monitor_rect.y;
int monitor_width = monitor_rect.width;
int monitor_height = monitor_rect.height;

var screen_limit_start_x = SCREEN_MARGIN + monitor_x;
var screen_limit_end_x = monitor_width + monitor_x - SCREEN_MARGIN - width;
var screen_limit_start_y = SCREEN_MARGIN + monitor_y;
var screen_limit_end_y = monitor_height + monitor_y - SCREEN_MARGIN - height;
var screen_limit_start_x = workarea_rect.x + SCREEN_MARGIN;
var screen_limit_end_x = workarea_rect.x + workarea_rect.width - SCREEN_MARGIN - width;
var screen_limit_start_y = workarea_rect.y + SCREEN_MARGIN;
var screen_limit_end_y = workarea_rect.y + workarea_rect.height - SCREEN_MARGIN - height;

var duration = AnimationsSettings.get_animation_duration (300);

Expand All @@ -467,12 +452,7 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor {
set_easing_mode (Clutter.AnimationMode.EASE_OUT_BACK);
set_easing_duration (duration);

#if HAS_MUTTER45
Mtk.Rectangle monitor_rect;
#else
Meta.Rectangle monitor_rect;
#endif
get_current_monitor_rect (out monitor_rect);
var monitor_rect = display.get_monitor_geometry (display.get_current_monitor ());

int monitor_x = monitor_rect.x;
int monitor_y = monitor_rect.y;
Expand Down Expand Up @@ -546,14 +526,6 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor {
return false;
}

#if HAS_MUTTER45
private void get_current_monitor_rect (out Mtk.Rectangle rect) {
#else
private void get_current_monitor_rect (out Meta.Rectangle rect) {
#endif
rect = display.get_monitor_geometry (display.get_current_monitor ());
}

private void get_target_window_size (out float width, out float height) {
if (clone_container.has_clip) {
clone_container.get_clip (null, null, out width, out height);
Expand Down
Loading