diff --git a/src/mir_monitor.c b/src/mir_monitor.c index b2c1ea55..8cb618cb 100644 --- a/src/mir_monitor.c +++ b/src/mir_monitor.c @@ -28,24 +28,6 @@ #include -static GLFWvidmode* createMonitorModes(MirDisplayOutput const* out) -{ - int n_mode; - GLFWvidmode* modes = calloc(out->num_modes, sizeof(GLFWvidmode)); - - for (n_mode = 0; n_mode < out->num_modes; n_mode++) - { - modes[n_mode].width = out->modes[n_mode].horizontal_resolution; - modes[n_mode].height = out->modes[n_mode].vertical_resolution; - modes[n_mode].refreshRate = out->modes[n_mode].refresh_rate; - modes[n_mode].redBits = 8; - modes[n_mode].greenBits = 8; - modes[n_mode].blueBits = 8; - } - - return modes; -} - ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// @@ -78,10 +60,6 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count) monitor->mir.y = out->position_y; monitor->mir.output_id = out->output_id; monitor->mir.cur_mode = out->current_mode; - monitor->modeCount = out->num_modes; - monitor->modes = createMonitorModes(out); - - _glfwPlatformGetVideoMode(monitor, &monitor->currentMode); monitors[d] = monitor; } @@ -108,14 +86,34 @@ void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos) GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* found) { + int i; GLFWvidmode* modes = NULL; - int i, count = monitor->modeCount; + MirDisplayConfiguration* display_config = + mir_connection_create_display_config(_glfw.mir.connection); - modes = calloc(count, sizeof(GLFWvidmode)); - for (i = 0; i < count; i++) - modes[i] = monitor->modes[i]; + for (i = 0; i < display_config->num_outputs; i++) + { + const MirDisplayOutput* out = display_config->outputs + i; + if (out->output_id != monitor->mir.output_id) + continue; + + modes = calloc(out->num_modes, sizeof(GLFWvidmode)); + + for (*found = 0; *found < out->num_modes; (*found)++) + { + modes[*found].width = out->modes[*found].horizontal_resolution; + modes[*found].height = out->modes[*found].vertical_resolution; + modes[*found].refreshRate = out->modes[*found].refresh_rate; + modes[*found].redBits = 8; + modes[*found].greenBits = 8; + modes[*found].blueBits = 8; + } + + break; + } + + mir_display_config_destroy(display_config); - *found = count; return modes; } diff --git a/src/mir_window.c b/src/mir_window.c index 39215174..b304b8a0 100644 --- a/src/mir_window.c +++ b/src/mir_window.c @@ -373,10 +373,12 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, if (wndconfig->monitor) { + GLFWvidmode mode; + _glfwPlatformGetVideoMode(wndconfig->monitor, &mode); + mir_surface_set_type(window->mir.surface, mir_surface_state_fullscreen); - if (wndconfig->width > wndconfig->monitor->currentMode.width || - wndconfig->height > wndconfig->monitor->currentMode.height) + if (wndconfig->width > mode.width || wndconfig->height > mode.height) { _glfwInputError(GLFW_PLATFORM_ERROR, "Mir: Requested surface size is to large (%i %i)\n",