Skip to content

Commit 1edf44b

Browse files
committed
Initial support for keeping shellclients in the multitasking view
1 parent f480bb8 commit 1edf44b

13 files changed

+50
-1069
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
@@ -9,6 +9,8 @@ public class Gala.ShellWindow : PositionedWindow, GestureTarget {
99
public Clutter.Actor? actor { get { return window_actor; } }
1010
public bool restore_previous_x11_region { private get; set; default = false; }
1111

12+
public bool visible_in_multitasking_view { get; set; default = false; }
13+
1214
private Meta.WindowActor window_actor;
1315
private double custom_progress = 0;
1416
private double multitasking_view_progress = 0;
@@ -44,9 +46,16 @@ public class Gala.ShellWindow : PositionedWindow, GestureTarget {
4446
);
4547
}
4648

49+
private double get_hidden_progress () {
50+
if (visible_in_multitasking_view) {
51+
return double.min (custom_progress, 1 - multitasking_view_progress);
52+
} else {
53+
return double.max (custom_progress, multitasking_view_progress);
54+
}
55+
}
56+
4757
private void update_property () {
48-
var hidden_progress = double.max (custom_progress, multitasking_view_progress);
49-
property_target.propagate (UPDATE, DOCK, hidden_progress);
58+
property_target.propagate (UPDATE, DOCK, get_hidden_progress ());
5059
}
5160

5261
public override void propagate (UpdateType update_type, GestureAction action, double progress) {
@@ -88,7 +97,7 @@ public class Gala.ShellWindow : PositionedWindow, GestureTarget {
8897
}
8998

9099
private void update_visibility () {
91-
var visible = double.max (multitasking_view_progress, custom_progress) < 0.1;
100+
var visible = get_hidden_progress () < 0.1;
92101
var animating = animations_ongoing > 0;
93102

94103
window_actor.visible = animating || visible;

0 commit comments

Comments
 (0)