static void on_display_monitor_added (GdkDisplay *display, GdkMonitor *monitor, GSManager *manager) { GSList *l; int n_monitors; n_monitors = gdk_display_get_n_monitors (display); gs_debug ("Monitor added on display %s, now there are %d", gdk_display_get_name (display), n_monitors); /* 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; } /* add a new window */ gs_manager_create_window_for_monitor (manager, monitor); /* and put unlock dialog up whereever it's supposed to be */ gs_manager_request_unlock (manager); }
static gboolean window_activity_cb (GSWindow *window, GSManager *manager) { gboolean handled; handled = gs_manager_request_unlock (manager); return handled; }
void gs_manager_show_message (GSManager *manager, const char *summary, const char *body, const char *icon) { GSWindow *window; g_return_if_fail (GS_IS_MANAGER (manager)); /* Find the GSWindow that contains the pointer */ window = find_window_at_pointer (manager); gs_window_show_message (window, summary, body, icon); gs_manager_request_unlock (manager); }
static void window_obscured_cb (GSWindow *window, GParamSpec *pspec, GSManager *manager) { gboolean obscured; obscured = gs_window_is_obscured (window); gs_debug ("Handling window obscured: %s", obscured ? "obscured" : "unobscured"); maybe_set_window_throttle (manager, window, obscured); if (! obscured) { gs_manager_request_unlock (manager); } }
static void on_screen_monitors_changed (GdkScreen *screen, GSManager *manager) { GSList *l; int n_monitors; int n_windows; int i; n_monitors = gdk_screen_get_n_monitors (screen); n_windows = g_slist_length (manager->priv->windows); gs_debug ("Monitors changed for screen %d: num=%d", gdk_screen_get_number (screen), n_monitors); if (n_monitors > n_windows) { /* 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 more windows */ for (i = n_windows; i < n_monitors; i++) { gs_manager_create_window_for_monitor (manager, screen, i); } /* And put unlock dialog up where ever it's supposed to be */ gs_manager_request_unlock (manager); } else { gdk_x11_grab_server (); /* remove the extra windows */ l = manager->priv->windows; while (l != NULL) { GdkScreen *this_screen; int this_monitor; GSList *next = l->next; this_screen = gs_window_get_screen (GS_WINDOW (l->data)); this_monitor = gs_window_get_monitor (GS_WINDOW (l->data)); if (this_screen == screen && this_monitor >= n_monitors) { 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; } /* 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) { gs_manager_request_unlock (manager); } gdk_flush (); gdk_x11_ungrab_server (); } }