@@ -4146,3 +4146,62 @@ meta_window_x11_get_client_rect (MetaWindowX11 *window_x11)
41464146
41474147 return priv -> client_rect ;
41484148}
4149+
4150+ static gboolean
4151+ has_requested_bypass_compositor (MetaWindowX11 * window_x11 )
4152+ {
4153+ MetaWindowX11Private * priv = meta_window_x11_get_instance_private (window_x11 );
4154+
4155+ return priv -> bypass_compositor == META_BYPASS_COMPOSITOR_HINT_ON ;
4156+ }
4157+
4158+ static gboolean
4159+ has_requested_dont_bypass_compositor (MetaWindowX11 * window_x11 )
4160+ {
4161+ MetaWindowX11Private * priv = meta_window_x11_get_instance_private (window_x11 );
4162+
4163+ return priv -> bypass_compositor == META_BYPASS_COMPOSITOR_HINT_OFF ;
4164+ }
4165+
4166+ gboolean
4167+ meta_window_x11_can_unredirect (MetaWindowX11 * window_x11 )
4168+ {
4169+ MetaWindow * window = META_WINDOW (window_x11 );
4170+
4171+ if (has_requested_dont_bypass_compositor (window_x11 ))
4172+ return FALSE;
4173+
4174+ if (window -> opacity != 0xFF )
4175+ return FALSE;
4176+
4177+ if (window -> shape_region != NULL )
4178+ return FALSE;
4179+
4180+ if (!window -> monitor )
4181+ return FALSE;
4182+
4183+ if (window -> fullscreen )
4184+ return TRUE;
4185+
4186+ if (meta_window_is_screen_sized (window ))
4187+ return TRUE;
4188+
4189+ if (has_requested_bypass_compositor (window_x11 ))
4190+ return TRUE;
4191+
4192+ if (window -> override_redirect )
4193+ {
4194+ MetaRectangle window_rect ;
4195+ MetaRectangle logical_monitor_layout ;
4196+ MetaLogicalMonitor * logical_monitor = window -> monitor ;
4197+
4198+ meta_window_get_frame_rect (window , & window_rect );
4199+ logical_monitor_layout =
4200+ meta_logical_monitor_get_layout (logical_monitor );
4201+
4202+ if (meta_rectangle_equal (& window_rect , & logical_monitor_layout ))
4203+ return TRUE;
4204+ }
4205+
4206+ return FALSE;
4207+ }
0 commit comments