summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2017-05-01 11:55:10 +0800
committerJonas Ådahl <jadahl@gmail.com>2017-05-26 14:32:43 +0800
commit2b05748d5c0e4572f9b14008cc1105d0e5184c88 (patch)
tree0f030e0ef546f7f38232b1ac0137ac04172288c9
parentcd775929bfce846c957688a7e653a6c6a177cc53 (diff)
downloadmutter-2b05748d5c0e4572f9b14008cc1105d0e5184c88.tar.gz
monitor: Move get_suggested() behind behind vfunc
Only support suggested monitor positioning if the monitor is non-tiled. Normally this functionality is used by virtual machines to provide a hint of how to place the virtual monitors, and they don't tend to use tiled monitors anyway. https://bugzilla.gnome.org/show_bug.cgi?id=781723
-rw-r--r--src/backends/meta-monitor.c39
-rw-r--r--src/backends/meta-monitor.h3
2 files changed, 32 insertions, 10 deletions
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index af1287888..8310472ab 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -418,6 +418,23 @@ meta_monitor_normal_derive_dimensions (MetaMonitor *monitor,
*height = output->crtc->rect.height;
}
+static gboolean
+meta_monitor_normal_get_suggested_position (MetaMonitor *monitor,
+ int *x,
+ int *y)
+{
+ MetaOutput *output;
+
+ output = meta_monitor_get_main_output (monitor);
+ if (output->suggested_x < 0 && output->suggested_y < 0)
+ return FALSE;
+
+ *x = output->suggested_x;
+ *y = output->suggested_y;
+
+ return TRUE;
+}
+
static void
meta_monitor_normal_calculate_crtc_pos (MetaMonitor *monitor,
MetaMonitorMode *monitor_mode,
@@ -443,6 +460,7 @@ meta_monitor_normal_class_init (MetaMonitorNormalClass *klass)
monitor_class->get_main_output = meta_monitor_normal_get_main_output;
monitor_class->derive_dimensions = meta_monitor_normal_derive_dimensions;
monitor_class->calculate_crtc_pos = meta_monitor_normal_calculate_crtc_pos;
+ monitor_class->get_suggested_position = meta_monitor_normal_get_suggested_position;
}
uint32_t
@@ -456,16 +474,8 @@ meta_monitor_get_suggested_position (MetaMonitor *monitor,
int *x,
int *y)
{
- MetaOutput *main_output;
-
- main_output = meta_monitor_get_main_output (monitor);
- if (main_output->suggested_x < 0 && main_output->suggested_y < 0)
- return FALSE;
-
- *x = main_output->suggested_x;
- *y = main_output->suggested_y;
-
- return TRUE;
+ return META_MONITOR_GET_CLASS (monitor)->get_suggested_position (monitor,
+ x, y);
}
static void
@@ -804,6 +814,14 @@ meta_monitor_tiled_derive_dimensions (MetaMonitor *monitor,
*out_height = max_y - min_y;
}
+static gboolean
+meta_monitor_tiled_get_suggested_position (MetaMonitor *monitor,
+ int *x,
+ int *y)
+{
+ return FALSE;
+}
+
static void
meta_monitor_tiled_calculate_crtc_pos (MetaMonitor *monitor,
MetaMonitorMode *monitor_mode,
@@ -854,6 +872,7 @@ meta_monitor_tiled_class_init (MetaMonitorTiledClass *klass)
monitor_class->get_main_output = meta_monitor_tiled_get_main_output;
monitor_class->derive_dimensions = meta_monitor_tiled_derive_dimensions;
monitor_class->calculate_crtc_pos = meta_monitor_tiled_calculate_crtc_pos;
+ monitor_class->get_suggested_position = meta_monitor_tiled_get_suggested_position;
}
static void
diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
index e3adb6a7e..e1358e373 100644
--- a/src/backends/meta-monitor.h
+++ b/src/backends/meta-monitor.h
@@ -70,6 +70,9 @@ struct _MetaMonitorClass
MetaMonitorTransform crtc_transform,
int *out_x,
int *out_y);
+ gboolean (* get_suggested_position) (MetaMonitor *monitor,
+ int *width,
+ int *height);
};
#define META_TYPE_MONITOR_NORMAL (meta_monitor_normal_get_type ())