Skip to content

Commit e99cbb6

Browse files
committed
Initial support for keeping shellclients in the multitasking view
1 parent 434b79a commit e99cbb6

12 files changed

+52
-900
lines changed

protocol/pantheon-desktop-shell-v1.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@
9898

9999
<arg name="hide_mode" type="uint" enum="hide_mode" summary="hide mode"/>
100100
</request>
101+
102+
<request name="request_visible_in_multitasking_view">
103+
<description summary="request visible in multitasking view">
104+
Tell the shell that the panel would like to be visible in the multitasking view.
105+
</description>
106+
</request>
101107
</interface>
102108

103109
<interface name="io_elementary_pantheon_widget_v1" version="1">

protocol/pantheon-desktop-shell.vapi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ namespace Pantheon.Desktop {
4141
public Focus focus;
4242
public SetSize set_size;
4343
public SetHideMode set_hide_mode;
44+
public RequestVisibleInMultitaskingView request_visible_in_multitasking_view;
4445
}
4546

4647
[CCode (cheader_filename = "pantheon-desktop-shell-server-protocol.h", cname = "struct io_elementary_pantheon_widget_v1_interface")]
@@ -75,6 +76,8 @@ namespace Pantheon.Desktop {
7576
[CCode (has_target = false, has_typedef = false)]
7677
public delegate void SetHideMode (Wl.Client client, Wl.Resource resource, [CCode (type = "uint32_t")] HideMode hide_mode);
7778
[CCode (has_target = false, has_typedef = false)]
79+
public delegate void RequestVisibleInMultitaskingView (Wl.Client client, Wl.Resource resource);
80+
[CCode (has_target = false, has_typedef = false)]
7881
public delegate void SetKeepAbove (Wl.Client client, Wl.Resource resource);
7982
[CCode (has_target = false, has_typedef = false)]
8083
public delegate void MakeCentered (Wl.Client client, Wl.Resource resource);

src/PantheonShell.vala

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ namespace Gala {
5858
focus_panel,
5959
set_size,
6060
set_hide_mode,
61+
request_visible_in_multitasking_view,
6162
};
6263

6364
wayland_pantheon_widget_interface = {
@@ -311,6 +312,23 @@ namespace Gala {
311312
ShellClientsManager.get_instance ().set_hide_mode (window, hide_mode);
312313
}
313314

315+
internal static void request_visible_in_multitasking_view (Wl.Client client, Wl.Resource resource) {
316+
unowned PanelSurface? panel_surface = resource.get_user_data<PanelSurface> ();
317+
if (panel_surface.wayland_surface == null) {
318+
warning ("Window tried to set visible in mutltiasking view but wayland surface is null.");
319+
return;
320+
}
321+
322+
Meta.Window? window;
323+
panel_surface.wayland_surface.get ("window", out window, null);
324+
if (window == null) {
325+
warning ("Window tried to set hide mode but wayland surface had no associated window.");
326+
return;
327+
}
328+
329+
ShellClientsManager.get_instance ().request_visible_in_multitasking_view (window);
330+
}
331+
314332
internal static void set_keep_above (Wl.Client client, Wl.Resource resource) {
315333
unowned ExtendedBehaviorSurface? eb_surface = resource.get_user_data<ExtendedBehaviorSurface> ();
316334
if (eb_surface.wayland_surface == null) {

src/ShellClients/ShellClientsManager.vala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,15 @@ public class Gala.ShellClientsManager : Object, GestureTarget {
185185
panel_windows[window].hide_mode = hide_mode;
186186
}
187187

188+
public void request_visible_in_multitasking_view (Meta.Window window) {
189+
if (!(window in panel_windows)) {
190+
warning ("Set anchor for window before visible in mutltiasking view.");
191+
return;
192+
}
193+
194+
panel_windows[window].visible_in_multitasking_view = true;
195+
}
196+
188197
public void make_centered (Meta.Window window) requires (!is_itself_positioned (window)) {
189198
positioned_windows[window] = new ShellWindow (window, CENTER);
190199

src/ShellClients/ShellWindow.vala

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ public class Gala.ShellWindow : PositionedWindow, GestureTarget {
1010

1111
public Clutter.Actor? actor { get { return window_actor; } }
1212

13+
public bool visible_in_multitasking_view { get; set; default = false; }
14+
1315
private Meta.WindowActor window_actor;
1416
private double custom_progress = 0;
1517
private double multitasking_view_progress = 0;
@@ -40,9 +42,16 @@ public class Gala.ShellWindow : PositionedWindow, GestureTarget {
4042
);
4143
}
4244

45+
private double get_hidden_progress () {
46+
if (visible_in_multitasking_view) {
47+
return double.min (custom_progress, 1 - multitasking_view_progress);
48+
} else {
49+
return double.max (custom_progress, multitasking_view_progress);
50+
}
51+
}
52+
4353
private void update_property () {
44-
var hidden_progress = double.max (custom_progress, multitasking_view_progress);
45-
property_target.propagate (UPDATE, GESTURE_ID, hidden_progress);
54+
property_target.propagate (UPDATE, GESTURE_ID, get_hidden_progress ());
4655
}
4756

4857
public override void propagate (UpdateType update_type, string id, double progress) {
@@ -84,7 +93,7 @@ public class Gala.ShellWindow : PositionedWindow, GestureTarget {
8493
}
8594

8695
private void update_visibility () {
87-
var visible = double.max (multitasking_view_progress, custom_progress) < 0.1;
96+
var visible = get_hidden_progress () < 0.1;
8897
var animating = animations_ongoing > 0;
8998

9099
if (!Meta.Util.is_wayland_compositor ()) {

0 commit comments

Comments
 (0)