Skip to content

Commit 465734b

Browse files
XRevan86raveit65
authored andcommitted
fix more GdkScreen related deprecations
This is a follow-up to 5d4416a to fix #152
1 parent 762ae73 commit 465734b

File tree

1 file changed

+62
-74
lines changed

1 file changed

+62
-74
lines changed

‎src/gs-manager.c‎

Lines changed: 62 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1268,11 +1268,8 @@ apply_background_to_window (GSManager *manager,
12681268
GSWindow *window)
12691269
{
12701270
cairo_surface_t *surface;
1271-
GdkDisplay *display;
1272-
GdkScreen *screen;
12731271
int width;
12741272
int height;
1275-
gint scale;
12761273

12771274
mate_bg_load_from_preferences (manager->priv->bg);
12781275

@@ -1282,11 +1279,8 @@ apply_background_to_window (GSManager *manager,
12821279
gs_window_set_background_surface (window, NULL);
12831280
}
12841281

1285-
display = gs_window_get_display (window);
1286-
screen = gdk_display_get_default_screen (display);
1287-
scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
1288-
width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
1289-
height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
1282+
gtk_widget_get_preferred_width (GTK_WIDGET (window), &width, NULL);
1283+
gtk_widget_get_preferred_height (GTK_WIDGET (window), &height, NULL);
12901284
gs_debug ("Creating background w:%d h:%d", width, height);
12911285
surface = mate_bg_create_surface (manager->priv->bg,
12921286
gs_window_get_gdk_window (window),
@@ -1563,84 +1557,73 @@ gs_manager_create_window_for_monitor (GSManager *manager,
15631557
}
15641558

15651559
static void
1566-
on_screen_monitors_changed (GdkScreen *screen,
1567-
GSManager *manager)
1560+
on_display_monitor_added (GdkDisplay *display,
1561+
GdkMonitor *monitor,
1562+
GSManager *manager)
15681563
{
15691564
GSList *l;
1570-
GdkDisplay *display;
15711565
int n_monitors;
1572-
int n_windows;
1573-
int i;
15741566

1575-
display = gdk_screen_get_display (screen);
15761567
n_monitors = gdk_display_get_n_monitors (display);
1577-
n_windows = g_slist_length (manager->priv->windows);
15781568

1579-
gs_debug ("Monitors changed for display %s: num=%d",
1580-
gdk_display_get_name (display),
1581-
n_monitors);
1569+
gs_debug ("Monitor added on display %s, now there are %d",
1570+
gdk_display_get_name (display), n_monitors);
15821571

1583-
if (n_monitors > n_windows)
1572+
/* Tear down the unlock dialog in case we want to move it
1573+
* to the new monitor
1574+
*/
1575+
l = manager->priv->windows;
1576+
while (l != NULL)
15841577
{
1578+
gs_window_cancel_unlock_request (GS_WINDOW (l->data));
1579+
l = l->next;
1580+
}
15851581

1586-
/* Tear down unlock dialog in case we want to move it
1587-
* to a new monitor
1588-
*/
1589-
l = manager->priv->windows;
1590-
while (l != NULL)
1591-
{
1592-
gs_window_cancel_unlock_request (GS_WINDOW (l->data));
1593-
l = l->next;
1594-
}
1582+
/* add a new window */
1583+
gs_manager_create_window_for_monitor (manager, monitor);
15951584

1596-
/* add more windows */
1597-
for (i = n_windows; i < n_monitors; i++)
1598-
{
1599-
GdkMonitor *mon = gdk_display_get_monitor (display, i);
1600-
gs_manager_create_window_for_monitor (manager, mon);
1601-
}
1585+
/* and put unlock dialog up whereever it's supposed to be */
1586+
gs_manager_request_unlock (manager);
1587+
}
16021588

1603-
/* And put unlock dialog up where ever it's supposed to be
1604-
*/
1605-
gs_manager_request_unlock (manager);
1606-
}
1607-
else
1608-
{
1589+
static void
1590+
on_display_monitor_removed (GdkDisplay *display,
1591+
GdkMonitor *monitor,
1592+
GSManager *manager)
1593+
{
1594+
GSList *l;
1595+
int n_monitors;
16091596

1610-
gdk_x11_grab_server ();
1597+
n_monitors = gdk_display_get_n_monitors (display);
16111598

1612-
/* remove the extra windows */
1613-
l = manager->priv->windows;
1614-
while (l != NULL)
1615-
{
1616-
GdkDisplay *this_display;
1617-
GdkMonitor *this_monitor;
1618-
GSList *next = l->next;
1619-
1620-
this_display = gs_window_get_display (GS_WINDOW (l->data));
1621-
this_monitor = gs_window_get_monitor (GS_WINDOW (l->data));
1622-
if (this_display == display &&
1623-
!GDK_IS_MONITOR (this_monitor))
1624-
{
1625-
manager_maybe_stop_job_for_window (manager, GS_WINDOW (l->data));
1626-
g_hash_table_remove (manager->priv->jobs, l->data);
1627-
gs_window_destroy (GS_WINDOW (l->data));
1628-
manager->priv->windows = g_slist_delete_link (manager->priv->windows, l);
1629-
}
1630-
l = next;
1631-
}
1599+
gs_debug ("Monitor removed on display %s, now there are %d",
1600+
gdk_display_get_name (display), n_monitors);
16321601

1633-
/* make sure there is a lock dialog on a connected monitor,
1634-
* and that the keyboard is still properly grabbed after all
1635-
* the windows above got destroyed*/
1636-
if (n_windows > n_monitors)
1602+
gdk_x11_grab_server ();
1603+
1604+
/* remove the now extra window */
1605+
l = manager->priv->windows;
1606+
while (l != NULL)
1607+
{
1608+
GdkDisplay *this_display;
1609+
GdkMonitor *this_monitor;
1610+
GSList *next = l->next;
1611+
1612+
this_display = gs_window_get_display (GS_WINDOW (l->data));
1613+
this_monitor = gs_window_get_monitor (GS_WINDOW (l->data));
1614+
if (this_display == display && this_monitor == monitor)
16371615
{
1638-
gs_manager_request_unlock (manager);
1616+
manager_maybe_stop_job_for_window (manager,
1617+
GS_WINDOW (l->data));
1618+
g_hash_table_remove (manager->priv->jobs, l->data);
1619+
gs_window_destroy (GS_WINDOW (l->data));
1620+
manager->priv->windows = g_slist_delete_link (manager->priv->windows, l);
16391621
}
1640-
1641-
gdk_flush ();
1642-
gdk_x11_ungrab_server ();
1622+
l = next;
16431623
}
1624+
1625+
gdk_display_flush (display);
1626+
gdk_x11_ungrab_server ();
16441627
}
16451628

16461629
static void
@@ -1659,8 +1642,11 @@ gs_manager_destroy_windows (GSManager *manager)
16591642

16601643
display = gdk_display_get_default ();
16611644

1662-
g_signal_handlers_disconnect_by_func (gdk_display_get_default_screen (display),
1663-
on_screen_monitors_changed,
1645+
g_signal_handlers_disconnect_by_func (display,
1646+
on_display_monitor_removed,
1647+
manager);
1648+
g_signal_handlers_disconnect_by_func (display,
1649+
on_display_monitor_added,
16641650
manager);
16651651

16661652
for (l = manager->priv->windows; l; l = l->next)
@@ -1753,9 +1739,11 @@ gs_manager_create_windows (GSManager *manager)
17531739
g_assert (manager->priv->windows == NULL);
17541740

17551741
display = gdk_display_get_default ();
1756-
g_signal_connect (gdk_display_get_default_screen (display),
1757-
"monitors-changed",
1758-
G_CALLBACK (on_screen_monitors_changed),
1742+
g_signal_connect (display, "monitor-added",
1743+
G_CALLBACK (on_display_monitor_added),
1744+
manager);
1745+
g_signal_connect (display, "monitor-removed",
1746+
G_CALLBACK (on_display_monitor_removed),
17591747
manager);
17601748

17611749
gs_manager_create_windows_for_display (manager, display);

0 commit comments

Comments
 (0)