55 * Authored by: Leonhard Kargl <[email protected] > 66 */
77
8- public class Gala.PanelWindow : Object {
8+ public class Gala.PanelWindow : ShellWindow {
9+ private const int ANIMATION_DURATION = 250 ;
10+
911 private static HashTable<Meta . Window , Meta . Strut ? > window_struts = new HashTable<Meta . Window , Meta .Strut ?> (null , null );
1012
1113 public WindowManager wm { get ; construct; }
12- public Meta . Window window { get ; construct; }
1314 public Pantheon . Desktop . Anchor anchor { get ; construct set ; }
1415
15- private WindowPositioner window_positioner;
16+ public Pantheon . Desktop . HideMode hide_mode {
17+ get {
18+ return hide_tracker == null ? Pantheon . Desktop . HideMode . NEVER : hide_tracker. hide_mode;
19+ }
20+ set {
21+ if (value == NEVER ) {
22+ hide_tracker = null ;
23+ show ();
24+ make_exclusive ();
25+ return ;
26+ } else if (hide_tracker == null ) {
27+ unmake_exclusive ();
28+
29+ hide_tracker = new HideTracker (wm. get_display (), this );
30+ hide_tracker. hide. connect (hide);
31+ hide_tracker. show. connect (show);
32+ }
1633
17- private PanelClone clone;
34+ hide_tracker. hide_mode = value ;
35+ }
36+ }
37+
38+ private GestureTracker default_gesture_tracker;
39+ private HideTracker ? hide_tracker;
1840
1941 private int width = - 1 ;
2042 private int height = - 1 ;
2143
2244 public PanelWindow (WindowManager wm, Meta . Window window, Pantheon . Desktop . Anchor anchor) {
23- Object (wm: wm, window: window, anchor : anchor);
45+ Object (wm: wm, anchor : anchor, window: window, position : Position . from_anchor ( anchor) );
2446 }
2547
2648 construct {
@@ -30,22 +52,26 @@ public class Gala.PanelWindow : Object {
3052 }
3153 });
3254
33- window. stick ();
34-
35- clone = new PanelClone (wm, this );
36-
37- unowned var display = wm. get_display ();
38-
39- window_positioner = new WindowPositioner (display, window, WindowPositioner . Position . from_anchor (anchor));
55+ notify[" anchor" ]. connect (() = > position = Position . from_anchor (anchor));
4056
41- notify[" anchor" ]. connect (() = > window_positioner. position = WindowPositioner . Position . from_anchor (anchor));
42-
43- unowned var workspace_manager = display. get_workspace_manager ();
57+ unowned var workspace_manager = window. display. get_workspace_manager ();
4458 workspace_manager. workspace_added. connect (update_strut);
4559 workspace_manager. workspace_removed. connect (update_strut);
4660
4761 window. size_changed. connect (update_strut);
4862 window. position_changed. connect (update_strut);
63+
64+ default_gesture_tracker = new GestureTracker (ANIMATION_DURATION , ANIMATION_DURATION );
65+
66+ window. display. in_fullscreen_changed. connect (() = > {
67+ if (wm. get_display (). get_monitor_in_fullscreen (window. get_monitor ())) {
68+ hide ();
69+ } else if (hide_mode == NEVER ) {
70+ show ();
71+ } else {
72+ hide_tracker. update_overlap ();
73+ }
74+ });
4975 }
5076
5177#if HAS_MUTTER45
@@ -78,22 +104,24 @@ public class Gala.PanelWindow : Object {
78104 update_strut ();
79105 }
80106
81- public void set_hide_mode (Pantheon . Desktop . HideMode hide_mode) {
82- clone. hide_mode = hide_mode;
107+ private void hide () {
108+ add_state (CUSTOM_HIDDEN , default_gesture_tracker, false );
109+ }
83110
84- if (hide_mode == NEVER ) {
85- make_exclusive ();
86- } else {
87- unmake_exclusive ();
111+ private void show () {
112+ if (window. display. get_monitor_in_fullscreen (window. get_monitor ())) {
113+ return ;
88114 }
115+
116+ remove_state (CUSTOM_HIDDEN , default_gesture_tracker, false );
89117 }
90118
91119 private void make_exclusive () {
92120 update_strut ();
93121 }
94122
95123 private void update_strut () {
96- if (clone . hide_mode != NEVER ) {
124+ if (hide_mode != NEVER ) {
97125 return ;
98126 }
99127
0 commit comments