return screen->screen_num;
}
+static void
+notify_surface_monitor_change (GdkX11Display *display,
+ GdkMonitor *monitor)
+{
+ GHashTableIter iter;
+ GdkSurface *surface;
+
+ /* We iterate the surfaces via the hash table here because it's the only
+ * thing that contains all the surfaces.
+ */
+ if (display->xid_ht == NULL)
+ return;
+
+ g_hash_table_iter_init (&iter, display->xid_ht);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&surface))
+ {
+ gdk_x11_surface_check_monitor (surface, monitor);
+ }
+}
+
static GdkX11Monitor *
find_monitor_by_output (GdkX11Display *x11_display, XID output)
{
for (i = g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)) - 1; i >= 0; i--)
{
GdkX11Monitor *monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
+ notify_surface_monitor_change (x11_display, GDK_MONITOR (monitor));
if (monitor->add)
{
gdk_display_monitor_added (display, GDK_MONITOR (monitor));
for (i = g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)) - 1; i >= 0; i--)
{
GdkX11Monitor *monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
+ notify_surface_monitor_change (x11_display, GDK_MONITOR (monitor));
if (monitor->add)
{
gdk_display_monitor_added (display, GDK_MONITOR (monitor));
for (i = g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)) - 1; i >= 0; i--)
{
monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
+ notify_surface_monitor_change (x11_display, GDK_MONITOR (monitor));
if (monitor->add)
{
gdk_display_monitor_added (GDK_DISPLAY (x11_display), GDK_MONITOR (monitor));
const gchar *name);
static void move_to_current_desktop (GdkSurface *surface);
static void gdk_x11_toplevel_state_callback (GdkSurface *surface);
-static void gdk_x11_surface_on_monitor_added (GdkSurface *surface,
- GdkMonitor *monitor);
-static void gdk_x11_surface_on_monitor_removed (GdkSurface *surface,
- GdkMonitor *monitor);
/* Return whether time1 is considered later than time2 as far as xserver
* time is concerned. Accounts for wraparound.
_gdk_x11_display_remove_window (display, impl->xid);
if (impl->toplevel && impl->toplevel->focus_window)
_gdk_x11_display_remove_window (display, impl->toplevel->focus_window);
-
- g_signal_handlers_disconnect_by_func (display,
- gdk_x11_surface_on_monitor_added,
- GDK_SURFACE (object));
- g_signal_handlers_disconnect_by_func (display,
- gdk_x11_surface_on_monitor_removed,
- GDK_SURFACE (object));
}
g_clear_pointer (&impl->surface_is_on_monitor, g_list_free);
gdk_surface_freeze_updates (surface);
- g_signal_connect_swapped (surface->display, "monitor-added",
- G_CALLBACK (gdk_x11_surface_on_monitor_added),
- surface);
- g_signal_connect_swapped (surface->display, "monitor-removed",
- G_CALLBACK (gdk_x11_surface_on_monitor_removed),
- surface);
-
return surface;
}
}
}
-static void
+void
gdk_x11_surface_check_monitor (GdkSurface *surface,
GdkMonitor *monitor)
{
}
}
-static void
-gdk_x11_surface_on_monitor_added (GdkSurface *surface,
- GdkMonitor *monitor)
-{
- gdk_x11_surface_check_monitor (surface, monitor);
- g_signal_connect_swapped (G_OBJECT (monitor), "notify::geometry",
- G_CALLBACK (gdk_x11_surface_check_monitor),
- surface);
-}
-
-static void
-gdk_x11_surface_on_monitor_removed (GdkSurface *surface,
- GdkMonitor *monitor)
-{
- gdk_x11_surface_check_monitor (surface, monitor);
- g_signal_handlers_disconnect_by_func (G_OBJECT (monitor),
- gdk_x11_surface_check_monitor,
- monitor);
-}
-
static void gdk_x11_surface_set_geometry_hints (GdkSurface *surface,
const GdkGeometry *geometry,
GdkSurfaceHints geom_mask);