5
5
* Authored by: Leonhard Kargl <[email protected] >
6
6
*/
7
7
8
- public class Gala.PanelWindow : Object {
8
+ public class Gala.PanelWindow : ShellWindow {
9
+ private const int ANIMATION_DURATION = 250 ;
10
+
9
11
private static HashTable<Meta . Window , Meta . Strut ? > window_struts = new HashTable<Meta . Window , Meta .Strut ?> (null , null );
10
12
11
13
public WindowManager wm { get ; construct; }
12
- public Meta . Window window { get ; construct; }
13
14
public Pantheon . Desktop . Anchor anchor { get ; construct set ; }
14
15
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
+ }
16
33
17
- private PanelClone clone;
34
+ hide_tracker. hide_mode = value ;
35
+ }
36
+ }
37
+
38
+ private GestureTracker default_gesture_tracker;
39
+ private HideTracker ? hide_tracker;
18
40
19
41
private int width = - 1 ;
20
42
private int height = - 1 ;
21
43
22
44
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) );
24
46
}
25
47
26
48
construct {
@@ -30,22 +52,26 @@ public class Gala.PanelWindow : Object {
30
52
}
31
53
});
32
54
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));
40
56
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 ();
44
58
workspace_manager. workspace_added. connect (update_strut);
45
59
workspace_manager. workspace_removed. connect (update_strut);
46
60
47
61
window. size_changed. connect (update_strut);
48
62
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
+ });
49
75
}
50
76
51
77
#if HAS_MUTTER45
@@ -78,22 +104,24 @@ public class Gala.PanelWindow : Object {
78
104
update_strut ();
79
105
}
80
106
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
+ }
83
110
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 ;
88
114
}
115
+
116
+ remove_state (CUSTOM_HIDDEN , default_gesture_tracker, false );
89
117
}
90
118
91
119
private void make_exclusive () {
92
120
update_strut ();
93
121
}
94
122
95
123
private void update_strut () {
96
- if (clone . hide_mode != NEVER ) {
124
+ if (hide_mode != NEVER ) {
97
125
return ;
98
126
}
99
127
0 commit comments