[metacity] compositor: remove meta_compositor_new



commit c2a805a5a631f01f2b6c0455228ed9388d0fd458
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Fri Sep 13 14:45:18 2019 +0300

    compositor: remove meta_compositor_new
    
    A base type shouldn't know about subtypes. Move needed functionality
    to MetaDisplay.

 src/compositor/meta-compositor-none.c    |  9 ++++
 src/compositor/meta-compositor-none.h    |  3 ++
 src/compositor/meta-compositor-vulkan.c  |  9 ++++
 src/compositor/meta-compositor-vulkan.h  |  3 ++
 src/compositor/meta-compositor-xrender.c |  9 ++++
 src/compositor/meta-compositor-xrender.h |  3 ++
 src/compositor/meta-compositor.c         | 48 +----------------
 src/core/display.c                       | 92 ++++++++++++++++++++++++++------
 src/include/meta-compositor.h            |  3 --
 9 files changed, 113 insertions(+), 66 deletions(-)
---
diff --git a/src/compositor/meta-compositor-none.c b/src/compositor/meta-compositor-none.c
index e60dba5a..fbfbc297 100644
--- a/src/compositor/meta-compositor-none.c
+++ b/src/compositor/meta-compositor-none.c
@@ -163,3 +163,12 @@ meta_compositor_none_init (MetaCompositorNone *none)
 {
   meta_compositor_set_composited (META_COMPOSITOR (none), FALSE);
 }
+
+MetaCompositor *
+meta_compositor_none_new (MetaDisplay  *display,
+                          GError      **error)
+{
+  return g_initable_new (META_TYPE_COMPOSITOR_NONE, NULL, error,
+                         "display", display,
+                         NULL);
+}
diff --git a/src/compositor/meta-compositor-none.h b/src/compositor/meta-compositor-none.h
index 2f6478db..38fdb9ea 100644
--- a/src/compositor/meta-compositor-none.h
+++ b/src/compositor/meta-compositor-none.h
@@ -26,6 +26,9 @@ G_BEGIN_DECLS
 G_DECLARE_FINAL_TYPE (MetaCompositorNone, meta_compositor_none,
                       META, COMPOSITOR_NONE, MetaCompositor)
 
+MetaCompositor *meta_compositor_none_new (MetaDisplay  *display,
+                                          GError      **error);
+
 G_END_DECLS
 
 #endif
diff --git a/src/compositor/meta-compositor-vulkan.c b/src/compositor/meta-compositor-vulkan.c
index 09883afa..e23d9dd9 100644
--- a/src/compositor/meta-compositor-vulkan.c
+++ b/src/compositor/meta-compositor-vulkan.c
@@ -1411,3 +1411,12 @@ meta_compositor_vulkan_init (MetaCompositorVulkan *vulkan)
 {
   meta_compositor_set_composited (META_COMPOSITOR (vulkan), TRUE);
 }
+
+MetaCompositor *
+meta_compositor_vulkan_new (MetaDisplay  *display,
+                            GError      **error)
+{
+  return g_initable_new (META_TYPE_COMPOSITOR_VULKAN, NULL, error,
+                         "display", display,
+                         NULL);
+}
diff --git a/src/compositor/meta-compositor-vulkan.h b/src/compositor/meta-compositor-vulkan.h
index f5a1c599..44831ff1 100644
--- a/src/compositor/meta-compositor-vulkan.h
+++ b/src/compositor/meta-compositor-vulkan.h
@@ -26,6 +26,9 @@ G_BEGIN_DECLS
 G_DECLARE_FINAL_TYPE (MetaCompositorVulkan, meta_compositor_vulkan,
                       META, COMPOSITOR_VULKAN, MetaCompositor)
 
+MetaCompositor *meta_compositor_vulkan_new (MetaDisplay  *display,
+                                            GError      **error);
+
 G_END_DECLS
 
 #endif
diff --git a/src/compositor/meta-compositor-xrender.c b/src/compositor/meta-compositor-xrender.c
index 50f78c02..9a2f62ef 100644
--- a/src/compositor/meta-compositor-xrender.c
+++ b/src/compositor/meta-compositor-xrender.c
@@ -3154,3 +3154,12 @@ meta_compositor_xrender_init (MetaCompositorXRender *xrender)
 {
   meta_compositor_set_composited (META_COMPOSITOR (xrender), TRUE);
 }
+
+MetaCompositor *
+meta_compositor_xrender_new (MetaDisplay  *display,
+                             GError      **error)
+{
+  return g_initable_new (META_TYPE_COMPOSITOR_XRENDER, NULL, error,
+                         "display", display,
+                         NULL);
+}
diff --git a/src/compositor/meta-compositor-xrender.h b/src/compositor/meta-compositor-xrender.h
index 18ea6d14..49d6aa5f 100644
--- a/src/compositor/meta-compositor-xrender.h
+++ b/src/compositor/meta-compositor-xrender.h
@@ -26,6 +26,9 @@ G_BEGIN_DECLS
 G_DECLARE_FINAL_TYPE (MetaCompositorXRender, meta_compositor_xrender,
                       META, COMPOSITOR_XRENDER, MetaCompositor)
 
+MetaCompositor *meta_compositor_xrender_new (MetaDisplay  *display,
+                                             GError      **error);
+
 G_END_DECLS
 
 #endif
diff --git a/src/compositor/meta-compositor.c b/src/compositor/meta-compositor.c
index be518911..abe81122 100644
--- a/src/compositor/meta-compositor.c
+++ b/src/compositor/meta-compositor.c
@@ -17,6 +17,7 @@
  */
 
 #include "config.h"
+#include "meta-compositor-private.h"
 
 #include <X11/extensions/shape.h>
 #include <X11/extensions/Xcomposite.h>
@@ -24,9 +25,6 @@
 
 #include "display-private.h"
 #include "errors.h"
-#include "meta-compositor-none.h"
-#include "meta-compositor-xrender.h"
-#include "meta-compositor-vulkan.h"
 #include "screen-private.h"
 
 typedef struct
@@ -248,50 +246,6 @@ meta_compositor_init (MetaCompositor *compositor)
 {
 }
 
-MetaCompositor *
-meta_compositor_new (MetaCompositorType  type,
-                     MetaDisplay        *display)
-{
-  GType gtype;
-  MetaCompositor *compositor;
-  GError *error;
-
-  switch (type)
-    {
-      case META_COMPOSITOR_TYPE_NONE:
-        gtype = META_TYPE_COMPOSITOR_NONE;
-        break;
-
-      case META_COMPOSITOR_TYPE_XRENDER:
-        gtype = META_TYPE_COMPOSITOR_XRENDER;
-        break;
-
-      case META_COMPOSITOR_TYPE_VULKAN:
-        gtype = META_TYPE_COMPOSITOR_VULKAN;
-        break;
-
-      default:
-        g_assert_not_reached ();
-        break;
-    }
-
-  error = NULL;
-  compositor = g_initable_new (gtype, NULL, &error, "display", display, NULL);
-
-  if (compositor == NULL)
-    {
-      g_warning ("Failed to create %s: %s", g_type_name (gtype), error->message);
-      g_error_free (error);
-
-      if (type != META_COMPOSITOR_TYPE_NONE)
-        compositor = meta_compositor_new (META_COMPOSITOR_TYPE_NONE, display);
-    }
-
-  g_assert (compositor != NULL);
-
-  return compositor;
-}
-
 void
 meta_compositor_add_window (MetaCompositor *compositor,
                             MetaWindow     *window)
diff --git a/src/core/display.c b/src/core/display.c
index 4e150d29..1ddb4505 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -66,6 +66,10 @@
 #include <X11/extensions/Xfixes.h>
 #include <string.h>
 
+#include "compositor/meta-compositor-none.h"
+#include "compositor/meta-compositor-xrender.h"
+#include "compositor/meta-compositor-vulkan.h"
+
 #define GRAB_OP_IS_WINDOW_SWITCH(g)                     \
         (g == META_GRAB_OP_KEYBOARD_TABBING_NORMAL  ||  \
          g == META_GRAB_OP_KEYBOARD_TABBING_DOCK    ||  \
@@ -256,23 +260,14 @@ notify_composited_cb (MetaCompositor *compositor,
   meta_ui_set_composited (display->screen->ui, composited);
 }
 
-static void
-update_compositor (MetaDisplay *display,
-                   gboolean     composite_windows)
+static MetaCompositorType
+get_compositor_type (MetaDisplay *display)
 {
   const gchar *compositor;
   MetaCompositorType type;
-  gboolean old_composited;
-  gboolean composited;
-
-  old_composited = FALSE;
-  if (display->compositor != NULL)
-    {
-      old_composited = meta_compositor_is_composited (display->compositor);
-      g_object_unref (display->compositor);
-    }
 
   compositor = g_getenv ("META_COMPOSITOR");
+
   if (compositor != NULL)
     {
       if (g_strcmp0 (compositor, "vulkan") == 0)
@@ -290,19 +285,84 @@ update_compositor (MetaDisplay *display,
         type = META_COMPOSITOR_TYPE_NONE;
     }
 
-  display->compositor = meta_compositor_new (type, display);
-  composited = meta_compositor_is_composited (display->compositor);
+  return type;
+}
+
+static MetaCompositor *
+create_compositor (MetaDisplay         *display,
+                   MetaCompositorType   type,
+                   GError             **error)
+{
+  MetaCompositor *compositor;
+
+  compositor = NULL;
+
+  switch (type)
+    {
+      case META_COMPOSITOR_TYPE_NONE:
+        compositor = meta_compositor_none_new (display, error);
+        break;
+
+      case META_COMPOSITOR_TYPE_XRENDER:
+        compositor = meta_compositor_xrender_new (display, error);
+        break;
+
+      case META_COMPOSITOR_TYPE_VULKAN:
+        compositor = meta_compositor_vulkan_new (display, error);
+        break;
+
+      default:
+        g_assert_not_reached ();
+        break;
+    }
+
+  return compositor;
+}
+
+static void
+update_compositor (MetaDisplay *display,
+                   gboolean     composite_windows)
+{
+  GError *error;
+  gboolean old_composited;
+  gboolean composited;
+
+  old_composited = FALSE;
+  if (display->compositor != NULL)
+    {
+      old_composited = meta_compositor_is_composited (display->compositor);
+      g_object_unref (display->compositor);
+    }
+
+  error = NULL;
+  display->compositor = create_compositor (display,
+                                           get_compositor_type (display),
+                                           &error);
+
+  if (error != NULL)
+    {
+      g_warning ("Failed to create compositor: %s", error->message);
+      g_error_free (error);
+
+      g_assert (display->compositor == NULL);
+      display->compositor = create_compositor (display,
+                                               META_COMPOSITOR_TYPE_NONE,
+                                               NULL);
+
+      g_assert (display->compositor != NULL);
+    }
 
   g_signal_connect (display->compositor, "notify::composited",
                     G_CALLBACK (notify_composited_cb), display);
 
+  composited = meta_compositor_is_composited (display->compositor);
+  meta_ui_set_composited (display->screen->ui, composited);
+
   if (old_composited != composited)
     meta_screen_foreach_window (display->screen, reframe_func, NULL);
 
   if (composite_windows)
     meta_screen_composite_all_windows (display->screen);
-
-  meta_ui_set_composited (display->screen->ui, composited);
 }
 
 /**
diff --git a/src/include/meta-compositor.h b/src/include/meta-compositor.h
index 5668c2cc..25d09079 100644
--- a/src/include/meta-compositor.h
+++ b/src/include/meta-compositor.h
@@ -47,9 +47,6 @@ typedef enum
   META_EFFECT_TYPE_UNMINIMIZE,
 } MetaEffectType;
 
-MetaCompositor  *meta_compositor_new                          (MetaCompositorType  type,
-                                                               MetaDisplay        *display);
-
 void             meta_compositor_add_window                   (MetaCompositor     *compositor,
                                                                MetaWindow         *window);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]