pip: Hide the preview when the target window is focused (#166)

This commit is contained in:
Adam Bieńkowski 2018-01-30 14:59:30 +01:00 committed by Rico Tzschichholz
parent f90fc625e3
commit c0eb426f81
2 changed files with 43 additions and 1 deletions

View File

@ -91,16 +91,32 @@ public class Gala.Plugins.PIP.Plugin : Gala.Plugin
var clip = rect.init (point_x, point_y, width, height); var clip = rect.init (point_x, point_y, width, height);
var popup_window = new PopupWindow (wm, active, clip); var popup_window = new PopupWindow (wm, active, clip);
popup_window.show.connect (on_popup_window_show);
popup_window.hide.connect (on_popup_window_hide);
add_window (popup_window); add_window (popup_window);
} }
} }
} }
private void on_popup_window_show (Clutter.Actor popup_window)
{
track_actor (popup_window);
update_region ();
}
private void on_popup_window_hide (Clutter.Actor popup_window)
{
untrack_actor (popup_window);
update_region ();
}
private void select_window_at (int x, int y) private void select_window_at (int x, int y)
{ {
var selected = get_window_actor_at (x, y); var selected = get_window_actor_at (x, y);
if (selected != null) { if (selected != null) {
var popup_window = new PopupWindow (wm, selected, null); var popup_window = new PopupWindow (wm, selected, null);
popup_window.show.connect (on_popup_window_show);
popup_window.hide.connect (on_popup_window_hide);
add_window (popup_window); add_window (popup_window);
} }
} }
@ -167,7 +183,6 @@ public class Gala.Plugins.PIP.Plugin : Gala.Plugin
{ {
popup_window.closed.connect (() => remove_window (popup_window)); popup_window.closed.connect (() => remove_window (popup_window));
windows.add (popup_window); windows.add (popup_window);
track_actor (popup_window);
wm.ui_group.add_child (popup_window); wm.ui_group.add_child (popup_window);
} }

View File

@ -77,6 +77,7 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor
var window = window_actor.get_meta_window (); var window = window_actor.get_meta_window ();
window.unmanaged.connect (on_close_click_clicked); window.unmanaged.connect (on_close_click_clicked);
window.notify["appears-focused"].connect (on_appears_focused_changed);
clone = new Clutter.Clone (window_actor.get_texture ()); clone = new Clutter.Clone (window_actor.get_texture ());
@ -153,6 +154,22 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor
set_easing_duration (0); set_easing_duration (0);
} }
public override void hide ()
{
opacity = 255;
set_easing_duration (200);
opacity = 0;
set_easing_duration (0);
ulong completed_id = 0UL;
completed_id = transitions_completed.connect (() => {
disconnect (completed_id);
base.hide ();
});
}
public override bool enter_event (Clutter.CrossingEvent event) public override bool enter_event (Clutter.CrossingEvent event)
{ {
close_button.opacity = 255; close_button.opacity = 255;
@ -265,6 +282,16 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor
}); });
} }
private void on_appears_focused_changed ()
{
var window = window_actor.get_meta_window ();
if (window.appears_focused) {
hide ();
} else {
show ();
}
}
private void update_size () private void update_size ()
{ {
if (container_clip != null) { if (container_clip != null) {