Move current logical monitor retrieval to the backends
The method used for getting the current logical monitor (the monitor where the pointer cursor is currently at) depends on the backend type, so move that logic to the corresponding backends. https://bugzilla.gnome.org/show_bug.cgi?id=777732
This commit is contained in:
@ -651,8 +651,6 @@ meta_display_open (void)
|
||||
display->leader_window = None;
|
||||
display->timestamp_pinging_window = None;
|
||||
|
||||
display->monitor_cache_invalidated = TRUE;
|
||||
|
||||
display->groups_by_leader = NULL;
|
||||
|
||||
display->screen = NULL;
|
||||
@ -3085,6 +3083,7 @@ meta_display_request_pad_osd (MetaDisplay *display,
|
||||
ClutterInputDevice *pad,
|
||||
gboolean edition_mode)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaInputSettings *input_settings;
|
||||
const gchar *layout_path = NULL;
|
||||
ClutterActor *osd;
|
||||
@ -3119,7 +3118,7 @@ meta_display_request_pad_osd (MetaDisplay *display,
|
||||
return;
|
||||
|
||||
if (!logical_monitor)
|
||||
logical_monitor = meta_screen_get_current_logical_monitor (display->screen);
|
||||
logical_monitor = meta_backend_get_current_logical_monitor (backend);
|
||||
|
||||
g_signal_emit (display, display_signals[SHOW_PAD_OSD], 0,
|
||||
pad, settings, layout_path,
|
||||
|
@ -81,6 +81,7 @@ find_next_cascade (MetaWindow *window,
|
||||
int *new_x,
|
||||
int *new_y)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
GList *tmp;
|
||||
GList *sorted;
|
||||
int cascade_x, cascade_y;
|
||||
@ -114,7 +115,7 @@ find_next_cascade (MetaWindow *window,
|
||||
* of NW corner of window frame.
|
||||
*/
|
||||
|
||||
current = meta_screen_get_current_logical_monitor (window->screen);
|
||||
current = meta_backend_get_current_logical_monitor (backend);
|
||||
meta_window_get_work_area_for_logical_monitor (window, current, &work_area);
|
||||
|
||||
cascade_x = MAX (0, work_area.x);
|
||||
@ -665,6 +666,7 @@ meta_window_place (MetaWindow *window,
|
||||
int *new_x,
|
||||
int *new_y)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
GList *windows = NULL;
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
|
||||
@ -815,7 +817,7 @@ meta_window_place (MetaWindow *window,
|
||||
meta_window_get_frame_rect (window, &frame_rect);
|
||||
|
||||
/* Warning, this function is a round trip! */
|
||||
logical_monitor = meta_screen_get_current_logical_monitor (window->screen);
|
||||
logical_monitor = meta_backend_get_current_logical_monitor (backend);
|
||||
|
||||
w = logical_monitor->rect.width;
|
||||
h = logical_monitor->rect.height;
|
||||
@ -859,8 +861,8 @@ meta_window_place (MetaWindow *window,
|
||||
g_slist_free (all_windows);
|
||||
}
|
||||
|
||||
/* Warning, this is a round trip! */
|
||||
logical_monitor = meta_screen_get_current_logical_monitor (window->screen);
|
||||
/* Warning, on X11 this might be a round trip! */
|
||||
logical_monitor = meta_backend_get_current_logical_monitor (backend);
|
||||
|
||||
/* Maximize windows if they are too big for their work area (bit of
|
||||
* a hack here). Assume undecorated windows probably don't intend to
|
||||
|
@ -77,9 +77,6 @@ struct _MetaScreen
|
||||
|
||||
gboolean has_xinerama_indices;
|
||||
|
||||
/* Cache the current monitor */
|
||||
int last_monitor_index;
|
||||
|
||||
GSList *startup_sequences;
|
||||
|
||||
Window wm_cm_selection_window;
|
||||
@ -133,10 +130,6 @@ void meta_screen_hide_tile_preview (MetaScreen *screen);
|
||||
MetaWindow* meta_screen_get_mouse_window (MetaScreen *screen,
|
||||
MetaWindow *not_this_one);
|
||||
|
||||
MetaLogicalMonitor * meta_screen_get_current_logical_monitor (MetaScreen *screen);
|
||||
MetaLogicalMonitor * meta_screen_get_current_logical_monitor_for_pos (MetaScreen *screen,
|
||||
int x,
|
||||
int y);
|
||||
MetaLogicalMonitor * meta_screen_calculate_logical_monitor_for_window (MetaScreen *screen,
|
||||
MetaWindow *window);
|
||||
|
||||
|
@ -430,9 +430,7 @@ reload_logical_monitors (MetaScreen *screen)
|
||||
meta_workspace_invalidate_work_area (space);
|
||||
}
|
||||
|
||||
screen->last_monitor_index = 0;
|
||||
screen->has_xinerama_indices = FALSE;
|
||||
screen->display->monitor_cache_invalidated = TRUE;
|
||||
}
|
||||
|
||||
/* The guard window allows us to leave minimized windows mapped so
|
||||
@ -1488,97 +1486,6 @@ meta_screen_get_monitor_neighbor_index (MetaScreen *screen,
|
||||
return logical_monitor ? logical_monitor->number : -1;
|
||||
}
|
||||
|
||||
MetaLogicalMonitor *
|
||||
meta_screen_get_current_logical_monitor (MetaScreen *screen)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitors;
|
||||
unsigned int n_logical_monitors;
|
||||
int monitor_index;
|
||||
|
||||
logical_monitors =
|
||||
meta_monitor_manager_get_logical_monitors (monitor_manager,
|
||||
&n_logical_monitors);
|
||||
monitor_index = meta_screen_get_current_monitor (screen);
|
||||
|
||||
return &logical_monitors[monitor_index];
|
||||
}
|
||||
|
||||
static int
|
||||
meta_screen_get_current_monitor_for_pos (MetaScreen *screen,
|
||||
int x,
|
||||
int y);
|
||||
|
||||
MetaLogicalMonitor *
|
||||
meta_screen_get_current_logical_monitor_for_pos (MetaScreen *screen,
|
||||
int x,
|
||||
int y)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitors;
|
||||
unsigned int n_logical_monitors;
|
||||
int monitor_index;
|
||||
|
||||
logical_monitors =
|
||||
meta_monitor_manager_get_logical_monitors (monitor_manager,
|
||||
&n_logical_monitors);
|
||||
monitor_index = meta_screen_get_current_monitor_for_pos (screen, x, y);
|
||||
|
||||
return &logical_monitors[monitor_index];
|
||||
}
|
||||
|
||||
static int
|
||||
meta_screen_get_current_monitor_for_pos (MetaScreen *screen,
|
||||
int x,
|
||||
int y)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaLogicalMonitor *logical_monitors;
|
||||
unsigned int n_logical_monitors;
|
||||
|
||||
logical_monitors =
|
||||
meta_monitor_manager_get_logical_monitors (monitor_manager,
|
||||
&n_logical_monitors);
|
||||
|
||||
if (n_logical_monitors == 1)
|
||||
return 0;
|
||||
else if (screen->display->monitor_cache_invalidated)
|
||||
{
|
||||
unsigned int i;
|
||||
MetaRectangle pointer_position;
|
||||
pointer_position.x = x;
|
||||
pointer_position.y = y;
|
||||
pointer_position.width = pointer_position.height = 1;
|
||||
|
||||
screen->display->monitor_cache_invalidated = FALSE;
|
||||
screen->last_monitor_index = 0;
|
||||
|
||||
for (i = 0; i < n_logical_monitors; i++)
|
||||
{
|
||||
if (meta_rectangle_contains_rect (&logical_monitors[i].rect,
|
||||
&pointer_position))
|
||||
{
|
||||
screen->last_monitor_index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
meta_topic (META_DEBUG_XINERAMA,
|
||||
"Rechecked current monitor, now %d\n",
|
||||
screen->last_monitor_index);
|
||||
|
||||
}
|
||||
|
||||
return screen->last_monitor_index;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* meta_screen_get_current_monitor:
|
||||
* @screen: a #MetaScreen
|
||||
@ -1591,27 +1498,15 @@ int
|
||||
meta_screen_get_current_monitor (MetaScreen *screen)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend);
|
||||
int n_logical_monitors =
|
||||
meta_monitor_manager_get_num_logical_monitors (monitor_manager);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
|
||||
if (n_logical_monitors == 1)
|
||||
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;
|
||||
|
||||
/* Sadly, we have to do it this way. Yuck.
|
||||
*/
|
||||
|
||||
if (screen->display->monitor_cache_invalidated)
|
||||
{
|
||||
int x, y;
|
||||
|
||||
meta_cursor_tracker_get_pointer (cursor_tracker, &x, &y, NULL);
|
||||
meta_screen_get_current_monitor_for_pos (screen, x, y);
|
||||
}
|
||||
|
||||
return screen->last_monitor_index;
|
||||
return logical_monitor->number;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -729,6 +729,8 @@ void meta_window_activate_full (MetaWindow *window,
|
||||
MetaClientType source_indication,
|
||||
MetaWorkspace *workspace);
|
||||
|
||||
MetaLogicalMonitor * meta_window_calculate_main_logical_monitor (MetaWindow *window);
|
||||
|
||||
void meta_window_update_monitor (MetaWindow *window,
|
||||
gboolean user_op);
|
||||
|
||||
|
Reference in New Issue
Block a user