MetaScreen: Add tracking of whether there are fullscreen windows
Trying to track the fullscreen status outside of Mutter, as GNOME Shell was doing previously, was very prone to errors, because Mutter has a very tricky definition of when a window is set to be fullscreen and *actually* acting like a fullscreen window. * Add meta_screen_get_monitor_in_fullscreen() and an ::in-fullscreen-changed signal. This allows an application to track when there are fullscreen windows on a monitor. * Do the computation of fullscreen status in a "later" function that runs after showing, so we properly take focus into account. * To get ordering of different phases right, add more values to MetaLaterType. * Add auto-minimization, similar to what was added to GNOME Shell earlier in this cycle - if a window is set to be fullscreen, but not actually fullscreen, minimize. https://bugzilla.gnome.org/show_bug.cgi?id=649748
This commit is contained in:
@@ -46,6 +46,7 @@ struct _MetaMonitorInfo
|
||||
int number;
|
||||
MetaRectangle rect;
|
||||
gboolean is_primary;
|
||||
gboolean in_fullscreen;
|
||||
XID output; /* The primary or first output for this crtc, None if no xrandr */
|
||||
};
|
||||
|
||||
@@ -117,6 +118,7 @@ struct _MetaScreen
|
||||
guint32 wm_cm_timestamp;
|
||||
|
||||
guint work_area_later;
|
||||
guint check_fullscreen_later;
|
||||
|
||||
int rows_of_workspaces;
|
||||
int columns_of_workspaces;
|
||||
@@ -201,6 +203,8 @@ void meta_screen_get_natural_monitor_list (MetaScreen *screen,
|
||||
void meta_screen_update_workspace_layout (MetaScreen *screen);
|
||||
void meta_screen_update_workspace_names (MetaScreen *screen);
|
||||
void meta_screen_queue_workarea_recalc (MetaScreen *screen);
|
||||
void meta_screen_queue_check_fullscreen (MetaScreen *screen);
|
||||
|
||||
|
||||
Window meta_create_offscreen_window (Display *xdisplay,
|
||||
Window parent,
|
||||
|
Reference in New Issue
Block a user