Skip to content

Commit 60e5c86

Browse files
committed
Initial support for keeping shellclients in the multitasking view
1 parent 8fa0806 commit 60e5c86

File tree

10 files changed

+50
-316
lines changed

10 files changed

+50
-316
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
@@ -39,6 +39,7 @@ namespace Gala {
3939
focus_panel,
4040
set_size,
4141
set_hide_mode,
42+
request_visible_in_multitasking_view,
4243
};
4344

4445
wayland_pantheon_widget_interface = {
@@ -292,6 +293,23 @@ namespace Gala {
292293
ShellClientsManager.get_instance ().set_hide_mode (window, hide_mode);
293294
}
294295

296+
internal static void request_visible_in_multitasking_view (Wl.Client client, Wl.Resource resource) {
297+
unowned PanelSurface? panel_surface = resource.get_user_data<PanelSurface> ();
298+
if (panel_surface.wayland_surface == null) {
299+
warning ("Window tried to set visible in mutltiasking view but wayland surface is null.");
300+
return;
301+
}
302+
303+
Meta.Window? window;
304+
panel_surface.wayland_surface.get ("window", out window, null);
305+
if (window == null) {
306+
warning ("Window tried to set hide mode but wayland surface had no associated window.");
307+
return;
308+
}
309+
310+
ShellClientsManager.get_instance ().request_visible_in_multitasking_view (window);
311+
}
312+
295313
internal static void set_keep_above (Wl.Client client, Wl.Resource resource) {
296314
unowned ExtendedBehaviorSurface? eb_surface = resource.get_user_data<ExtendedBehaviorSurface> ();
297315
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
@@ -8,6 +8,8 @@
88
public class Gala.ShellWindow : PositionedWindow, GestureTarget {
99
public Clutter.Actor? actor { get { return window_actor; } }
1010

11+
public bool visible_in_multitasking_view { get; set; default = false; }
12+
1113
private Meta.WindowActor window_actor;
1214
private double custom_progress = 0;
1315
private double multitasking_view_progress = 0;
@@ -38,9 +40,16 @@ public class Gala.ShellWindow : PositionedWindow, GestureTarget {
3840
);
3941
}
4042

43+
private double get_hidden_progress () {
44+
if (visible_in_multitasking_view) {
45+
return double.min (custom_progress, 1 - multitasking_view_progress);
46+
} else {
47+
return double.max (custom_progress, multitasking_view_progress);
48+
}
49+
}
50+
4151
private void update_property () {
42-
var hidden_progress = double.max (custom_progress, multitasking_view_progress);
43-
property_target.propagate (UPDATE, DOCK, hidden_progress);
52+
property_target.propagate (UPDATE, DOCK, get_hidden_progress ());
4453
}
4554

4655
public override void propagate (UpdateType update_type, GestureAction action, double progress) {
@@ -82,7 +91,7 @@ public class Gala.ShellWindow : PositionedWindow, GestureTarget {
8291
}
8392

8493
private void update_visibility () {
85-
var visible = double.max (multitasking_view_progress, custom_progress) < 0.1;
94+
var visible = get_hidden_progress () < 0.1;
8695
var animating = animations_ongoing > 0;
8796

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

src/Widgets/MultitaskingView/IconGroupContainer.vala

Lines changed: 0 additions & 163 deletions
This file was deleted.

0 commit comments

Comments
 (0)