Skip to content
Permalink
Browse files

fix more GdkScreen related deprecations

This is a follow-up to 5d4416a to fix #152
  • Loading branch information...
XRevan86 authored and raveit65 committed Aug 21, 2018
1 parent 762ae73 commit 465734b765fcfa28a8b63a877bedd65cd2de959e
Showing with 62 additions and 74 deletions.
  1. +62 −74 src/gs-manager.c
@@ -1268,11 +1268,8 @@ apply_background_to_window (GSManager *manager,
GSWindow *window)
{
cairo_surface_t *surface;
GdkDisplay *display;
GdkScreen *screen;
int width;
int height;
gint scale;

mate_bg_load_from_preferences (manager->priv->bg);

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

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

static void
on_screen_monitors_changed (GdkScreen *screen,
GSManager *manager)
on_display_monitor_added (GdkDisplay *display,
GdkMonitor *monitor,
GSManager *manager)
{
GSList *l;
GdkDisplay *display;
int n_monitors;
int n_windows;
int i;

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

gs_debug ("Monitors changed for display %s: num=%d",
gdk_display_get_name (display),
n_monitors);
gs_debug ("Monitor added on display %s, now there are %d",
gdk_display_get_name (display), n_monitors);

if (n_monitors > n_windows)
/* Tear down the unlock dialog in case we want to move it
* to the new monitor
*/
l = manager->priv->windows;
while (l != NULL)
{
gs_window_cancel_unlock_request (GS_WINDOW (l->data));
l = l->next;
}

/* Tear down unlock dialog in case we want to move it
* to a new monitor
*/
l = manager->priv->windows;
while (l != NULL)
{
gs_window_cancel_unlock_request (GS_WINDOW (l->data));
l = l->next;
}
/* add a new window */
gs_manager_create_window_for_monitor (manager, monitor);

/* add more windows */
for (i = n_windows; i < n_monitors; i++)
{
GdkMonitor *mon = gdk_display_get_monitor (display, i);
gs_manager_create_window_for_monitor (manager, mon);
}
/* and put unlock dialog up whereever it's supposed to be */
gs_manager_request_unlock (manager);
}

/* And put unlock dialog up where ever it's supposed to be
*/
gs_manager_request_unlock (manager);
}
else
{
static void
on_display_monitor_removed (GdkDisplay *display,
GdkMonitor *monitor,
GSManager *manager)
{
GSList *l;
int n_monitors;

gdk_x11_grab_server ();
n_monitors = gdk_display_get_n_monitors (display);

/* remove the extra windows */
l = manager->priv->windows;
while (l != NULL)
{
GdkDisplay *this_display;
GdkMonitor *this_monitor;
GSList *next = l->next;

this_display = gs_window_get_display (GS_WINDOW (l->data));
this_monitor = gs_window_get_monitor (GS_WINDOW (l->data));
if (this_display == display &&
!GDK_IS_MONITOR (this_monitor))
{
manager_maybe_stop_job_for_window (manager, GS_WINDOW (l->data));
g_hash_table_remove (manager->priv->jobs, l->data);
gs_window_destroy (GS_WINDOW (l->data));
manager->priv->windows = g_slist_delete_link (manager->priv->windows, l);
}
l = next;
}
gs_debug ("Monitor removed on display %s, now there are %d",
gdk_display_get_name (display), n_monitors);

/* make sure there is a lock dialog on a connected monitor,
* and that the keyboard is still properly grabbed after all
* the windows above got destroyed*/
if (n_windows > n_monitors)
gdk_x11_grab_server ();

/* remove the now extra window */
l = manager->priv->windows;
while (l != NULL)
{
GdkDisplay *this_display;
GdkMonitor *this_monitor;
GSList *next = l->next;

this_display = gs_window_get_display (GS_WINDOW (l->data));
this_monitor = gs_window_get_monitor (GS_WINDOW (l->data));
if (this_display == display && this_monitor == monitor)
{
gs_manager_request_unlock (manager);
manager_maybe_stop_job_for_window (manager,
GS_WINDOW (l->data));
g_hash_table_remove (manager->priv->jobs, l->data);
gs_window_destroy (GS_WINDOW (l->data));
manager->priv->windows = g_slist_delete_link (manager->priv->windows, l);
}

gdk_flush ();
gdk_x11_ungrab_server ();
l = next;
}

gdk_display_flush (display);
gdk_x11_ungrab_server ();
}

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

display = gdk_display_get_default ();

g_signal_handlers_disconnect_by_func (gdk_display_get_default_screen (display),
on_screen_monitors_changed,
g_signal_handlers_disconnect_by_func (display,
on_display_monitor_removed,
manager);
g_signal_handlers_disconnect_by_func (display,
on_display_monitor_added,
manager);

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

display = gdk_display_get_default ();
g_signal_connect (gdk_display_get_default_screen (display),
"monitors-changed",
G_CALLBACK (on_screen_monitors_changed),
g_signal_connect (display, "monitor-added",
G_CALLBACK (on_display_monitor_added),
manager);
g_signal_connect (display, "monitor-removed",
G_CALLBACK (on_display_monitor_removed),
manager);

gs_manager_create_windows_for_display (manager, display);

0 comments on commit 465734b

Please sign in to comment.
You can’t perform that action at this time.