mirror of
https://github.com/brl/mutter.git
synced 2025-06-22 04:59:55 +00:00
Move monitor management API to MetaDisplay
This includes changing various users to use MetaDisplay directly, who used MetaScreen only for this before. https://bugzilla.gnome.org/show_bug.cgi?id=759538
This commit is contained in:

committed by
Jonas Ådahl

parent
68f261e8e2
commit
e1c67a1824
@ -2908,8 +2908,8 @@ lookup_tablet_monitor (MetaDisplay *display,
|
||||
|
||||
if (monitor)
|
||||
{
|
||||
monitor_idx = meta_screen_get_monitor_index_for_rect (display->screen,
|
||||
&monitor->rect);
|
||||
monitor_idx = meta_display_get_monitor_index_for_rect (display,
|
||||
&monitor->rect);
|
||||
}
|
||||
|
||||
return monitor_idx;
|
||||
@ -3445,3 +3445,180 @@ meta_display_queue_check_fullscreen (MetaDisplay *display)
|
||||
check_fullscreen_func,
|
||||
display, NULL);
|
||||
}
|
||||
|
||||
int
|
||||
meta_display_get_monitor_index_for_rect (MetaDisplay *display,
|
||||
MetaRectangle *rect)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
|
||||
logical_monitor =
|
||||
meta_monitor_manager_get_logical_monitor_from_rect (monitor_manager, rect);
|
||||
if (!logical_monitor)
|
||||
return -1;
|
||||
|
||||
return logical_monitor->number;
|
||||
}
|
||||
|
||||
int
|
||||
meta_display_get_monitor_neighbor_index (MetaDisplay *display,
|
||||
int which_monitor,
|
||||
MetaDisplayDirection direction)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
MetaLogicalMonitor *neighbor;
|
||||
|
||||
logical_monitor =
|
||||
meta_monitor_manager_get_logical_monitor_from_number (monitor_manager,
|
||||
which_monitor);
|
||||
neighbor = meta_monitor_manager_get_logical_monitor_neighbor (monitor_manager,
|
||||
logical_monitor,
|
||||
direction);
|
||||
return neighbor ? neighbor->number : -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_display_get_current_monitor:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Gets the index of the monitor that currently has the mouse pointer.
|
||||
*
|
||||
* Return value: a monitor index
|
||||
*/
|
||||
int
|
||||
meta_display_get_current_monitor (MetaDisplay *display)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
|
||||
logical_monitor = meta_backend_get_current_logical_monitor (backend);
|
||||
|
||||
/* Pretend its the first when there is no actual current monitor. */
|
||||
if (!logical_monitor)
|
||||
return 0;
|
||||
|
||||
return logical_monitor->number;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_display_get_n_monitors:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Gets the number of monitors that are joined together to form @display.
|
||||
*
|
||||
* Return value: the number of monitors
|
||||
*/
|
||||
int
|
||||
meta_display_get_n_monitors (MetaDisplay *display)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
|
||||
g_return_val_if_fail (META_IS_DISPLAY (display), 0);
|
||||
|
||||
return meta_monitor_manager_get_num_logical_monitors (monitor_manager);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_display_get_primary_monitor:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Gets the index of the primary monitor on this @display.
|
||||
*
|
||||
* Return value: a monitor index
|
||||
*/
|
||||
int
|
||||
meta_display_get_primary_monitor (MetaDisplay *display)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
|
||||
g_return_val_if_fail (META_IS_DISPLAY (display), 0);
|
||||
|
||||
logical_monitor =
|
||||
meta_monitor_manager_get_primary_logical_monitor (monitor_manager);
|
||||
if (logical_monitor)
|
||||
return logical_monitor->number;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_display_get_monitor_geometry:
|
||||
* @display: a #MetaDisplay
|
||||
* @monitor: the monitor number
|
||||
* @geometry: (out): location to store the monitor geometry
|
||||
*
|
||||
* Stores the location and size of the indicated monitor in @geometry.
|
||||
*/
|
||||
void
|
||||
meta_display_get_monitor_geometry (MetaDisplay *display,
|
||||
int monitor,
|
||||
MetaRectangle *geometry)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
#ifndef G_DISABLE_CHECKS
|
||||
int n_logical_monitors =
|
||||
meta_monitor_manager_get_num_logical_monitors (monitor_manager);
|
||||
#endif
|
||||
|
||||
g_return_if_fail (META_IS_DISPLAY (display));
|
||||
g_return_if_fail (monitor >= 0 && monitor < n_logical_monitors);
|
||||
g_return_if_fail (geometry != NULL);
|
||||
|
||||
logical_monitor =
|
||||
meta_monitor_manager_get_logical_monitor_from_number (monitor_manager,
|
||||
monitor);
|
||||
*geometry = logical_monitor->rect;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_display_get_monitor_in_fullscreen:
|
||||
* @display: a #MetaDisplay
|
||||
* @monitor: the monitor number
|
||||
*
|
||||
* Determines whether there is a fullscreen window obscuring the specified
|
||||
* monitor. If there is a fullscreen window, the desktop environment will
|
||||
* typically hide any controls that might obscure the fullscreen window.
|
||||
*
|
||||
* You can get notification when this changes by connecting to
|
||||
* MetaDisplay::in-fullscreen-changed.
|
||||
*
|
||||
* Returns: %TRUE if there is a fullscreen window covering the specified monitor.
|
||||
*/
|
||||
gboolean
|
||||
meta_display_get_monitor_in_fullscreen (MetaDisplay *display,
|
||||
int monitor)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
#ifndef G_DISABLE_CHECKS
|
||||
int n_logical_monitors =
|
||||
meta_monitor_manager_get_num_logical_monitors (monitor_manager);
|
||||
#endif
|
||||
|
||||
g_return_val_if_fail (META_IS_DISPLAY (display), FALSE);
|
||||
g_return_val_if_fail (monitor >= 0 &&
|
||||
monitor < n_logical_monitors, FALSE);
|
||||
|
||||
logical_monitor =
|
||||
meta_monitor_manager_get_logical_monitor_from_number (monitor_manager,
|
||||
monitor);
|
||||
|
||||
/* We use -1 as a flag to mean "not known yet" for notification
|
||||
purposes */ return logical_monitor->in_fullscreen == TRUE;
|
||||
}
|
||||
|
@ -4222,28 +4222,28 @@ init_builtin_key_bindings (MetaDisplay *display)
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_LEFT,
|
||||
handle_move_to_monitor, META_SCREEN_LEFT);
|
||||
handle_move_to_monitor, META_DISPLAY_LEFT);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-monitor-right",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_RIGHT,
|
||||
handle_move_to_monitor, META_SCREEN_RIGHT);
|
||||
handle_move_to_monitor, META_DISPLAY_RIGHT);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-monitor-down",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_DOWN,
|
||||
handle_move_to_monitor, META_SCREEN_DOWN);
|
||||
handle_move_to_monitor, META_DISPLAY_DOWN);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-monitor-up",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_UP,
|
||||
handle_move_to_monitor, META_SCREEN_UP);
|
||||
handle_move_to_monitor, META_DISPLAY_UP);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"raise-or-lower",
|
||||
|
@ -744,144 +744,6 @@ meta_screen_get_mouse_window (MetaScreen *screen,
|
||||
return window;
|
||||
}
|
||||
|
||||
int
|
||||
meta_screen_get_monitor_index_for_rect (MetaScreen *screen,
|
||||
MetaRectangle *rect)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
|
||||
logical_monitor =
|
||||
meta_monitor_manager_get_logical_monitor_from_rect (monitor_manager, rect);
|
||||
if (!logical_monitor)
|
||||
return -1;
|
||||
|
||||
return logical_monitor->number;
|
||||
}
|
||||
|
||||
int
|
||||
meta_screen_get_monitor_neighbor_index (MetaScreen *screen,
|
||||
int which_monitor,
|
||||
MetaScreenDirection direction)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
MetaLogicalMonitor *neighbor;
|
||||
|
||||
logical_monitor =
|
||||
meta_monitor_manager_get_logical_monitor_from_number (monitor_manager,
|
||||
which_monitor);
|
||||
neighbor = meta_monitor_manager_get_logical_monitor_neighbor (monitor_manager,
|
||||
logical_monitor,
|
||||
direction);
|
||||
return neighbor ? neighbor->number : -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_screen_get_current_monitor:
|
||||
* @screen: a #MetaScreen
|
||||
*
|
||||
* Gets the index of the monitor that currently has the mouse pointer.
|
||||
*
|
||||
* Return value: a monitor index
|
||||
*/
|
||||
int
|
||||
meta_screen_get_current_monitor (MetaScreen *screen)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
|
||||
logical_monitor = meta_backend_get_current_logical_monitor (backend);
|
||||
|
||||
/* Pretend its the first when there is no actual current monitor. */
|
||||
if (!logical_monitor)
|
||||
return 0;
|
||||
|
||||
return logical_monitor->number;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_screen_get_n_monitors:
|
||||
* @screen: a #MetaScreen
|
||||
*
|
||||
* Gets the number of monitors that are joined together to form @screen.
|
||||
*
|
||||
* Return value: the number of monitors
|
||||
*/
|
||||
int
|
||||
meta_screen_get_n_monitors (MetaScreen *screen)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
|
||||
g_return_val_if_fail (META_IS_SCREEN (screen), 0);
|
||||
|
||||
return meta_monitor_manager_get_num_logical_monitors (monitor_manager);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_screen_get_primary_monitor:
|
||||
* @screen: a #MetaScreen
|
||||
*
|
||||
* Gets the index of the primary monitor on this @screen.
|
||||
*
|
||||
* Return value: a monitor index
|
||||
*/
|
||||
int
|
||||
meta_screen_get_primary_monitor (MetaScreen *screen)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
|
||||
g_return_val_if_fail (META_IS_SCREEN (screen), 0);
|
||||
|
||||
logical_monitor =
|
||||
meta_monitor_manager_get_primary_logical_monitor (monitor_manager);
|
||||
if (logical_monitor)
|
||||
return logical_monitor->number;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_screen_get_monitor_geometry:
|
||||
* @screen: a #MetaScreen
|
||||
* @monitor: the monitor number
|
||||
* @geometry: (out): location to store the monitor geometry
|
||||
*
|
||||
* Stores the location and size of the indicated monitor in @geometry.
|
||||
*/
|
||||
void
|
||||
meta_screen_get_monitor_geometry (MetaScreen *screen,
|
||||
int monitor,
|
||||
MetaRectangle *geometry)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
#ifndef G_DISABLE_CHECKS
|
||||
int n_logical_monitors =
|
||||
meta_monitor_manager_get_num_logical_monitors (monitor_manager);
|
||||
#endif
|
||||
|
||||
g_return_if_fail (META_IS_SCREEN (screen));
|
||||
g_return_if_fail (monitor >= 0 && monitor < n_logical_monitors);
|
||||
g_return_if_fail (geometry != NULL);
|
||||
|
||||
logical_monitor =
|
||||
meta_monitor_manager_get_logical_monitor_from_number (monitor_manager,
|
||||
monitor);
|
||||
*geometry = logical_monitor->rect;
|
||||
}
|
||||
|
||||
#define _NET_WM_ORIENTATION_HORZ 0
|
||||
#define _NET_WM_ORIENTATION_VERT 1
|
||||
|
||||
@ -1594,42 +1456,3 @@ meta_screen_set_active_workspace_hint (MetaScreen *screen)
|
||||
32, PropModeReplace, (guchar*) data, 1);
|
||||
meta_error_trap_pop (x11_display);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_screen_get_monitor_in_fullscreen:
|
||||
* @screen: a #MetaScreen
|
||||
* @monitor: the monitor number
|
||||
*
|
||||
* Determines whether there is a fullscreen window obscuring the specified
|
||||
* monitor. If there is a fullscreen window, the desktop environment will
|
||||
* typically hide any controls that might obscure the fullscreen window.
|
||||
*
|
||||
* You can get notification when this changes by connecting to
|
||||
* MetaScreen::in-fullscreen-changed.
|
||||
*
|
||||
* Returns: %TRUE if there is a fullscreen window covering the specified monitor.
|
||||
*/
|
||||
gboolean
|
||||
meta_screen_get_monitor_in_fullscreen (MetaScreen *screen,
|
||||
int monitor)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
#ifndef G_DISABLE_CHECKS
|
||||
int n_logical_monitors =
|
||||
meta_monitor_manager_get_num_logical_monitors (monitor_manager);
|
||||
#endif
|
||||
|
||||
g_return_val_if_fail (META_IS_SCREEN (screen), FALSE);
|
||||
g_return_val_if_fail (monitor >= 0 &&
|
||||
monitor < n_logical_monitors, FALSE);
|
||||
|
||||
logical_monitor =
|
||||
meta_monitor_manager_get_logical_monitor_from_number (monitor_manager,
|
||||
monitor);
|
||||
|
||||
/* We use -1 as a flag to mean "not known yet" for notification purposes */
|
||||
return logical_monitor->in_fullscreen == TRUE;
|
||||
}
|
||||
|
@ -2948,7 +2948,7 @@ meta_window_is_monitor_sized (MetaWindow *window)
|
||||
MetaRectangle window_rect, monitor_rect;
|
||||
|
||||
meta_window_get_frame_rect (window, &window_rect);
|
||||
meta_screen_get_monitor_geometry (window->screen, window->monitor->number, &monitor_rect);
|
||||
meta_display_get_monitor_geometry (window->display, window->monitor->number, &monitor_rect);
|
||||
|
||||
if (meta_rectangle_equal (&window_rect, &monitor_rect))
|
||||
return TRUE;
|
||||
@ -3170,7 +3170,7 @@ meta_window_can_tile_side_by_side (MetaWindow *window)
|
||||
if (!meta_window_can_tile_maximized (window))
|
||||
return FALSE;
|
||||
|
||||
monitor = meta_screen_get_current_monitor (window->screen);
|
||||
monitor = meta_display_get_current_monitor (window->display);
|
||||
meta_window_get_work_area_for_monitor (window, monitor, &tile_area);
|
||||
|
||||
/* Do not allow tiling in portrait orientation */
|
||||
|
@ -1024,7 +1024,7 @@ meta_workspace_set_builtin_struts (MetaWorkspace *workspace,
|
||||
case META_SIDE_TOP:
|
||||
if (meta_monitor_manager_get_logical_monitor_neighbor (monitor_manager,
|
||||
logical_monitor,
|
||||
META_SCREEN_UP))
|
||||
META_DISPLAY_UP))
|
||||
continue;
|
||||
|
||||
strut->rect.height += strut->rect.y;
|
||||
@ -1033,7 +1033,7 @@ meta_workspace_set_builtin_struts (MetaWorkspace *workspace,
|
||||
case META_SIDE_BOTTOM:
|
||||
if (meta_monitor_manager_get_logical_monitor_neighbor (monitor_manager,
|
||||
logical_monitor,
|
||||
META_SCREEN_DOWN))
|
||||
META_DISPLAY_DOWN))
|
||||
continue;
|
||||
|
||||
strut->rect.height = screen->display->rect.height - strut->rect.y;
|
||||
@ -1041,7 +1041,7 @@ meta_workspace_set_builtin_struts (MetaWorkspace *workspace,
|
||||
case META_SIDE_LEFT:
|
||||
if (meta_monitor_manager_get_logical_monitor_neighbor (monitor_manager,
|
||||
logical_monitor,
|
||||
META_SCREEN_LEFT))
|
||||
META_DISPLAY_LEFT))
|
||||
continue;
|
||||
|
||||
strut->rect.width += strut->rect.x;
|
||||
@ -1050,7 +1050,7 @@ meta_workspace_set_builtin_struts (MetaWorkspace *workspace,
|
||||
case META_SIDE_RIGHT:
|
||||
if (meta_monitor_manager_get_logical_monitor_neighbor (monitor_manager,
|
||||
logical_monitor,
|
||||
META_SCREEN_RIGHT))
|
||||
META_DISPLAY_RIGHT))
|
||||
continue;
|
||||
|
||||
strut->rect.width = screen->display->rect.width - strut->rect.x;
|
||||
|
Reference in New Issue
Block a user