static GHashTable * meta_wayland_compositor_update_outputs (MetaWaylandCompositor *compositor, MetaMonitorManager *monitors) { unsigned int i; GHashTable *new_table; MetaMonitorInfo *monitor_infos; unsigned int n_monitor_infos; monitor_infos = meta_monitor_manager_get_monitor_infos (monitors, &n_monitor_infos); new_table = g_hash_table_new_full (NULL, NULL, NULL, wayland_output_destroy_notify); for (i = 0; i < n_monitor_infos; i++) { MetaMonitorInfo *info = &monitor_infos[i]; MetaWaylandOutput *wayland_output; if (info->winsys_id == 0) continue; wayland_output = g_hash_table_lookup (compositor->outputs, GSIZE_TO_POINTER (info->winsys_id)); if (wayland_output) { g_hash_table_steal (compositor->outputs, GSIZE_TO_POINTER (info->winsys_id)); } else wayland_output = meta_wayland_output_new (compositor, info); wayland_output_update_for_output (wayland_output, info); g_hash_table_insert (new_table, GSIZE_TO_POINTER (info->winsys_id), wayland_output); } g_hash_table_destroy (compositor->outputs); return new_table; }
static GHashTable * meta_wayland_compositor_update_outputs (MetaWaylandCompositor *compositor, MetaMonitorManager *monitors) { MetaOutput *outputs; unsigned int i, n_outputs; GHashTable *new_table; outputs = meta_monitor_manager_get_outputs (monitors, &n_outputs); new_table = g_hash_table_new_full (NULL, NULL, NULL, wayland_output_destroy_notify); for (i = 0; i < n_outputs; i++) { MetaOutput *output = &outputs[i]; MetaWaylandOutput *wayland_output; /* wayland does not expose disabled outputs */ if (output->crtc == NULL) { g_hash_table_remove (compositor->outputs, GSIZE_TO_POINTER (output->winsys_id)); continue; } wayland_output = g_hash_table_lookup (compositor->outputs, GSIZE_TO_POINTER (output->winsys_id)); if (wayland_output) { g_hash_table_steal (compositor->outputs, GSIZE_TO_POINTER (output->winsys_id)); } else { wayland_output = g_slice_new0 (MetaWaylandOutput); wayland_output->global = wl_global_create (compositor->wayland_display, &wl_output_interface, META_WL_OUTPUT_VERSION, wayland_output, bind_output); } wayland_output_update_for_output (wayland_output, output); g_hash_table_insert (new_table, GSIZE_TO_POINTER (output->winsys_id), wayland_output); } g_hash_table_destroy (compositor->outputs); return new_table; }