[mutter/wayland] Move the dummy monitor manager to his own subclass / file



commit 2a0289a21696b9bfe2a85a0d35c7ecb24fe98b0c
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Mon Mar 31 21:50:09 2014 -0400

    Move the dummy monitor manager to his own subclass / file

 src/Makefile.am                       |    2 +
 src/core/meta-monitor-manager-dummy.c |  243 +++++++++++++++++++++++++++++++++
 src/core/meta-monitor-manager-dummy.h |   40 ++++++
 src/core/monitor.c                    |  201 +--------------------------
 4 files changed, 290 insertions(+), 196 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 5f43272..c53a6c9 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -144,6 +144,8 @@ libmutter_wayland_la_SOURCES =                      \
        core/monitor.c                          \
        core/monitor-config.c                   \
        core/monitor-private.h                  \
+       core/meta-monitor-manager-dummy.c       \
+       core/meta-monitor-manager-dummy.h       \
        core/meta-monitor-manager-kms.c         \
        core/meta-monitor-manager-kms.h         \
        core/meta-monitor-manager-xrandr.c      \
diff --git a/src/core/meta-monitor-manager-dummy.c b/src/core/meta-monitor-manager-dummy.c
new file mode 100644
index 0000000..cf74d9d
--- /dev/null
+++ b/src/core/meta-monitor-manager-dummy.c
@@ -0,0 +1,243 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/*
+ * Copyright (C) 2001, 2002 Havoc Pennington
+ * Copyright (C) 2002, 2003 Red Hat Inc.
+ * Some ICCCM manager selection code derived from fvwm2,
+ * Copyright (C) 2001 Dominik Vogt, Matthias Clasen, and fvwm2 team
+ * Copyright (C) 2003 Rob Adams
+ * Copyright (C) 2004-2006 Elijah Newren
+ * Copyright (C) 2013 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include "meta-monitor-manager-dummy.h"
+
+#define ALL_WL_TRANSFORMS ((1 << (WL_OUTPUT_TRANSFORM_FLIPPED_270 + 1)) - 1)
+
+struct _MetaMonitorManagerDummy
+{
+  MetaMonitorManager parent_instance;
+};
+
+struct _MetaMonitorManagerDummyClass
+{
+  MetaMonitorManagerClass parent_class;
+};
+
+G_DEFINE_TYPE (MetaMonitorManagerDummy, meta_monitor_manager_dummy, META_TYPE_MONITOR_MANAGER);
+
+static void
+meta_monitor_manager_dummy_read_current (MetaMonitorManager *manager)
+{
+  manager->max_screen_width = 65535;
+  manager->max_screen_height = 65535;
+  manager->screen_width = 1024;
+  manager->screen_height = 768;
+
+  manager->modes = g_new0 (MetaMonitorMode, 1);
+  manager->n_modes = 1;
+
+  manager->modes[0].mode_id = 0;
+  manager->modes[0].width = 1024;
+  manager->modes[0].height = 768;
+  manager->modes[0].refresh_rate = 60.0;
+
+  manager->crtcs = g_new0 (MetaCRTC, 1);
+  manager->n_crtcs = 1;
+
+  manager->crtcs[0].crtc_id = 1;
+  manager->crtcs[0].rect.x = 0;
+  manager->crtcs[0].rect.y = 0;
+  manager->crtcs[0].rect.width = manager->modes[0].width;
+  manager->crtcs[0].rect.height = manager->modes[0].height;
+  manager->crtcs[0].current_mode = &manager->modes[0];
+  manager->crtcs[0].transform = WL_OUTPUT_TRANSFORM_NORMAL;
+  manager->crtcs[0].all_transforms = ALL_WL_TRANSFORMS;
+  manager->crtcs[0].is_dirty = FALSE;
+  manager->crtcs[0].logical_monitor = NULL;
+
+  manager->outputs = g_new0 (MetaOutput, 1);
+  manager->n_outputs = 1;
+
+  manager->outputs[0].crtc = &manager->crtcs[0];
+  manager->outputs[0].output_id = 1;
+  manager->outputs[0].name = g_strdup ("LVDS");
+  manager->outputs[0].vendor = g_strdup ("MetaProducts Inc.");
+  manager->outputs[0].product = g_strdup ("unknown");
+  manager->outputs[0].serial = g_strdup ("0xC0FFEE");
+  manager->outputs[0].width_mm = 222;
+  manager->outputs[0].height_mm = 125;
+  manager->outputs[0].subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
+  manager->outputs[0].preferred_mode = &manager->modes[0];
+  manager->outputs[0].n_modes = 1;
+  manager->outputs[0].modes = g_new0 (MetaMonitorMode *, 1);
+  manager->outputs[0].modes[0] = &manager->modes[0];
+  manager->outputs[0].n_possible_crtcs = 1;
+  manager->outputs[0].possible_crtcs = g_new0 (MetaCRTC *, 1);
+  manager->outputs[0].possible_crtcs[0] = &manager->crtcs[0];
+  manager->outputs[0].n_possible_clones = 0;
+  manager->outputs[0].possible_clones = g_new0 (MetaOutput *, 0);
+  manager->outputs[0].backlight = -1;
+  manager->outputs[0].backlight_min = 0;
+  manager->outputs[0].backlight_max = 0;
+}
+
+static void
+meta_monitor_manager_dummy_apply_config (MetaMonitorManager *manager,
+                                         MetaCRTCInfo       **crtcs,
+                                         unsigned int         n_crtcs,
+                                         MetaOutputInfo     **outputs,
+                                         unsigned int         n_outputs)
+{
+    unsigned i;
+    int screen_width = 0, screen_height = 0;
+
+  for (i = 0; i < n_crtcs; i++)
+    {
+      MetaCRTCInfo *crtc_info = crtcs[i];
+      MetaCRTC *crtc = crtc_info->crtc;
+      crtc->is_dirty = TRUE;
+
+      if (crtc_info->mode == NULL)
+        {
+          crtc->rect.x = 0;
+          crtc->rect.y = 0;
+          crtc->rect.width = 0;
+          crtc->rect.height = 0;
+          crtc->current_mode = NULL;
+        }
+      else
+        {
+          MetaMonitorMode *mode;
+          MetaOutput *output;
+          int i, n_outputs;
+          int width, height;
+
+          mode = crtc_info->mode;
+
+          if (meta_monitor_transform_is_rotated (crtc_info->transform))
+            {
+              width = mode->height;
+              height = mode->width;
+            }
+          else
+            {
+              width = mode->width;
+              height = mode->height;
+            }
+
+          crtc->rect.x = crtc_info->x;
+          crtc->rect.y = crtc_info->y;
+          crtc->rect.width = width;
+          crtc->rect.height = height;
+          crtc->current_mode = mode;
+          crtc->transform = crtc_info->transform;
+
+          screen_width = MAX (screen_width, crtc_info->x + width);
+          screen_height = MAX (screen_height, crtc_info->y + height);
+
+          n_outputs = crtc_info->outputs->len;
+          for (i = 0; i < n_outputs; i++)
+            {
+              output = ((MetaOutput**)crtc_info->outputs->pdata)[i];
+
+              output->is_dirty = TRUE;
+              output->crtc = crtc;
+            }
+        }
+    }
+
+  for (i = 0; i < n_outputs; i++)
+    {
+      MetaOutputInfo *output_info = outputs[i];
+      MetaOutput *output = output_info->output;
+
+      output->is_primary = output_info->is_primary;
+      output->is_presentation = output_info->is_presentation;
+    }
+
+  /* Disable CRTCs not mentioned in the list */
+  for (i = 0; i < manager->n_crtcs; i++)
+    {
+      MetaCRTC *crtc = &manager->crtcs[i];
+
+      crtc->logical_monitor = NULL;
+
+      if (crtc->is_dirty)
+        {
+          crtc->is_dirty = FALSE;
+          continue;
+        }
+
+      crtc->rect.x = 0;
+      crtc->rect.y = 0;
+      crtc->rect.width = 0;
+      crtc->rect.height = 0;
+      crtc->current_mode = NULL;
+    }
+
+  /* Disable outputs not mentioned in the list */
+  for (i = 0; i < manager->n_outputs; i++)
+    {
+      MetaOutput *output = &manager->outputs[i];
+
+      if (output->is_dirty)
+        {
+          output->is_dirty = FALSE;
+          continue;
+        }
+
+      output->crtc = NULL;
+      output->is_primary = FALSE;
+    }
+
+  manager->screen_width = screen_width;
+  manager->screen_height = screen_height;
+
+  meta_monitor_manager_rebuild_derived (manager);
+}
+
+static GBytes *
+meta_monitor_manager_dummy_read_edid (MetaMonitorManager *manager,
+                                      MetaOutput         *output)
+{
+  return NULL;
+}
+
+static char *
+meta_monitor_manager_dummy_get_edid_file (MetaMonitorManager *manager,
+                                          MetaOutput         *output)
+{
+  return NULL;
+}
+
+static void
+meta_monitor_manager_dummy_class_init (MetaMonitorManagerDummyClass *klass)
+{
+  MetaMonitorManagerClass *manager_class = META_MONITOR_MANAGER_CLASS (klass);
+
+  manager_class->read_current = meta_monitor_manager_dummy_read_current;
+  manager_class->apply_configuration = meta_monitor_manager_dummy_apply_config;
+  manager_class->get_edid_file = meta_monitor_manager_dummy_get_edid_file;
+  manager_class->read_edid = meta_monitor_manager_dummy_read_edid;
+}
+
+static void
+meta_monitor_manager_dummy_init (MetaMonitorManagerDummy *manager)
+{
+}
diff --git a/src/core/meta-monitor-manager-dummy.h b/src/core/meta-monitor-manager-dummy.h
new file mode 100644
index 0000000..896838c
--- /dev/null
+++ b/src/core/meta-monitor-manager-dummy.h
@@ -0,0 +1,40 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/*
+ * Copyright (C) 2001 Havoc Pennington
+ * Copyright (C) 2003 Rob Adams
+ * Copyright (C) 2004-2006 Elijah Newren
+ * Copyright (C) 2013 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef META_MONITOR_MANAGER_DUMMY_H
+#define META_MONITOR_MANAGER_DUMMY_H
+
+#include "monitor-private.h"
+
+#define META_TYPE_MONITOR_MANAGER_DUMMY            (meta_monitor_manager_dummy_get_type ())
+#define META_MONITOR_MANAGER_DUMMY(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
META_TYPE_MONITOR_MANAGER_DUMMY, MetaMonitorManagerDummy))
+#define META_MONITOR_MANAGER_DUMMY_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  
META_TYPE_MONITOR_MANAGER_DUMMY, MetaMonitorManagerDummyClass))
+#define META_IS_MONITOR_MANAGER_DUMMY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
META_TYPE_MONITOR_MANAGER_DUMMY))
+#define META_IS_MONITOR_MANAGER_DUMMY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  
META_TYPE_MONITOR_MANAGER_DUMMY))
+#define META_MONITOR_MANAGER_DUMMY_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  
META_TYPE_MONITOR_MANAGER_DUMMY, MetaMonitorManagerDummyClass))
+
+typedef struct _MetaMonitorManagerDummyClass    MetaMonitorManagerDummyClass;
+typedef struct _MetaMonitorManagerDummy         MetaMonitorManagerDummy;
+
+GType meta_monitor_manager_dummy_get_type (void);
+
+#endif /* META_MONITOR_MANAGER_DUMMY_H */
diff --git a/src/core/monitor.c b/src/core/monitor.c
index 51fb280..d2d9f20 100644
--- a/src/core/monitor.c
+++ b/src/core/monitor.c
@@ -36,11 +36,10 @@
 #include "monitor-private.h"
 #include "meta-monitor-manager-kms.h"
 #include "meta-monitor-manager-xrandr.h"
+#include "meta-monitor-manager-dummy.h"
 
 #include "meta-dbus-xrandr.h"
 
-#define ALL_WL_TRANSFORMS ((1 << (WL_OUTPUT_TRANSFORM_FLIPPED_270 + 1)) - 1)
-
 enum {
   CONFIRM_DISPLAY_CHANGE,
   SIGNALS_LAST
@@ -56,197 +55,12 @@ static int signals[SIGNALS_LAST];
 
 static void meta_monitor_manager_display_config_init (MetaDBusDisplayConfigIface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (MetaMonitorManager, meta_monitor_manager, META_DBUS_TYPE_DISPLAY_CONFIG_SKELETON,
-                         G_IMPLEMENT_INTERFACE (META_DBUS_TYPE_DISPLAY_CONFIG, 
meta_monitor_manager_display_config_init));
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE (MetaMonitorManager, meta_monitor_manager, 
META_DBUS_TYPE_DISPLAY_CONFIG_SKELETON,
+                                  G_IMPLEMENT_INTERFACE (META_DBUS_TYPE_DISPLAY_CONFIG, 
meta_monitor_manager_display_config_init));
 
 static void initialize_dbus_interface (MetaMonitorManager *manager);
 
 static void
-read_current_dummy (MetaMonitorManager *manager)
-{
-  manager->max_screen_width = 65535;
-  manager->max_screen_height = 65535;
-  manager->screen_width = 1024;
-  manager->screen_height = 768;
-
-  manager->modes = g_new0 (MetaMonitorMode, 1);
-  manager->n_modes = 1;
-
-  manager->modes[0].mode_id = 0;
-  manager->modes[0].width = 1024;
-  manager->modes[0].height = 768;
-  manager->modes[0].refresh_rate = 60.0;
-
-  manager->crtcs = g_new0 (MetaCRTC, 1);
-  manager->n_crtcs = 1;
-
-  manager->crtcs[0].crtc_id = 1;
-  manager->crtcs[0].rect.x = 0;
-  manager->crtcs[0].rect.y = 0;
-  manager->crtcs[0].rect.width = manager->modes[0].width;
-  manager->crtcs[0].rect.height = manager->modes[0].height;
-  manager->crtcs[0].current_mode = &manager->modes[0];
-  manager->crtcs[0].transform = WL_OUTPUT_TRANSFORM_NORMAL;
-  manager->crtcs[0].all_transforms = ALL_WL_TRANSFORMS;
-  manager->crtcs[0].is_dirty = FALSE;
-  manager->crtcs[0].logical_monitor = NULL;
-
-  manager->outputs = g_new0 (MetaOutput, 1);
-  manager->n_outputs = 1;
-
-  manager->outputs[0].crtc = &manager->crtcs[0];
-  manager->outputs[0].output_id = 1;
-  manager->outputs[0].name = g_strdup ("LVDS");
-  manager->outputs[0].vendor = g_strdup ("MetaProducts Inc.");
-  manager->outputs[0].product = g_strdup ("unknown");
-  manager->outputs[0].serial = g_strdup ("0xC0FFEE");
-  manager->outputs[0].width_mm = 222;
-  manager->outputs[0].height_mm = 125;
-  manager->outputs[0].subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
-  manager->outputs[0].preferred_mode = &manager->modes[0];
-  manager->outputs[0].n_modes = 1;
-  manager->outputs[0].modes = g_new0 (MetaMonitorMode *, 1);
-  manager->outputs[0].modes[0] = &manager->modes[0];
-  manager->outputs[0].n_possible_crtcs = 1;
-  manager->outputs[0].possible_crtcs = g_new0 (MetaCRTC *, 1);
-  manager->outputs[0].possible_crtcs[0] = &manager->crtcs[0];
-  manager->outputs[0].n_possible_clones = 0;
-  manager->outputs[0].possible_clones = g_new0 (MetaOutput *, 0);
-  manager->outputs[0].backlight = -1;
-  manager->outputs[0].backlight_min = 0;
-  manager->outputs[0].backlight_max = 0;
-}
-
-static void
-apply_config_dummy (MetaMonitorManager *manager,
-                    MetaCRTCInfo       **crtcs,
-                    unsigned int         n_crtcs,
-                    MetaOutputInfo     **outputs,
-                    unsigned int         n_outputs)
-{
-  unsigned i;
-  int screen_width = 0, screen_height = 0;
-
-  for (i = 0; i < n_crtcs; i++)
-    {
-      MetaCRTCInfo *crtc_info = crtcs[i];
-      MetaCRTC *crtc = crtc_info->crtc;
-      crtc->is_dirty = TRUE;
-
-      if (crtc_info->mode == NULL)
-        {
-          crtc->rect.x = 0;
-          crtc->rect.y = 0;
-          crtc->rect.width = 0;
-          crtc->rect.height = 0;
-          crtc->current_mode = NULL;
-        }
-      else
-        {
-          MetaMonitorMode *mode;
-          MetaOutput *output;
-          int i, n_outputs;
-          int width, height;
-
-          mode = crtc_info->mode;
-
-          if (meta_monitor_transform_is_rotated (crtc_info->transform))
-            {
-              width = mode->height;
-              height = mode->width;
-            }
-          else
-            {
-              width = mode->width;
-              height = mode->height;
-            }
-
-          crtc->rect.x = crtc_info->x;
-          crtc->rect.y = crtc_info->y;
-          crtc->rect.width = width;
-          crtc->rect.height = height;
-          crtc->current_mode = mode;
-          crtc->transform = crtc_info->transform;
-
-          screen_width = MAX (screen_width, crtc_info->x + width);
-          screen_height = MAX (screen_height, crtc_info->y + height);
-
-          n_outputs = crtc_info->outputs->len;
-          for (i = 0; i < n_outputs; i++)
-            {
-              output = ((MetaOutput**)crtc_info->outputs->pdata)[i];
-
-              output->is_dirty = TRUE;
-              output->crtc = crtc;
-            }
-        }
-    }
-
-  for (i = 0; i < n_outputs; i++)
-    {
-      MetaOutputInfo *output_info = outputs[i];
-      MetaOutput *output = output_info->output;
-
-      output->is_primary = output_info->is_primary;
-      output->is_presentation = output_info->is_presentation;
-    }
-
-  /* Disable CRTCs not mentioned in the list */
-  for (i = 0; i < manager->n_crtcs; i++)
-    {
-      MetaCRTC *crtc = &manager->crtcs[i];
-
-      crtc->logical_monitor = NULL;
-
-      if (crtc->is_dirty)
-        {
-          crtc->is_dirty = FALSE;
-          continue;
-        }
-
-      crtc->rect.x = 0;
-      crtc->rect.y = 0;
-      crtc->rect.width = 0;
-      crtc->rect.height = 0;
-      crtc->current_mode = NULL;
-    }
-
-  /* Disable outputs not mentioned in the list */
-  for (i = 0; i < manager->n_outputs; i++)
-    {
-      MetaOutput *output = &manager->outputs[i];
-
-      if (output->is_dirty)
-        {
-          output->is_dirty = FALSE;
-          continue;
-        }
-
-      output->crtc = NULL;
-      output->is_primary = FALSE;
-    }
-
-  manager->screen_width = screen_width;
-  manager->screen_height = screen_height;
-
-  meta_monitor_manager_rebuild_derived (manager);
-}
-
-static GBytes *
-read_edid_dummy (MetaMonitorManager *manager,
-                 MetaOutput         *output)
-{
-  return NULL;
-}
-
-static char *
-get_edid_file_dummy (MetaMonitorManager *manager,
-                     MetaOutput         *output)
-{
-  return NULL;
-}
-
-static void
 meta_monitor_manager_init (MetaMonitorManager *manager)
 {
 }
@@ -369,7 +183,7 @@ get_default_backend (void)
        * we're a nested configuration, so return the dummy
        * monitor setup. */
       if (meta_is_wayland_compositor ())
-        return META_TYPE_MONITOR_MANAGER;
+        return META_TYPE_MONITOR_MANAGER_DUMMY;
       else
         return META_TYPE_MONITOR_MANAGER_XRANDR;
     }
@@ -381,7 +195,7 @@ get_default_backend (void)
       /* Use the dummy implementation on Wayland for now.
        * In the future, we should support wl_fullscreen_output
        * which will have CRTC management in the protocol. */
-      return META_TYPE_MONITOR_MANAGER;
+      return META_TYPE_MONITOR_MANAGER_DUMMY;
     }
 #endif
 
@@ -586,11 +400,6 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
   object_class->dispose = meta_monitor_manager_dispose;
   object_class->finalize = meta_monitor_manager_finalize;
 
-  klass->read_current = read_current_dummy;
-  klass->apply_configuration = apply_config_dummy;
-  klass->get_edid_file = get_edid_file_dummy;
-  klass->read_edid = read_edid_dummy;
-
   signals[CONFIRM_DISPLAY_CHANGE] =
     g_signal_new ("confirm-display-change",
                  G_TYPE_FROM_CLASS (object_class),


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