#include #include #include #include "session-lock.h" static void unlock_session(GtkButton *button, DiyaSessionShell *shell) { (void)button; assert(shell); diya_session_shell_unlock(shell); } void diya_session_shell_lock(DiyaSessionShell* shell) { assert(shell); GtkSessionLockInstance * lock; g_object_get(shell, DIYA_PROP_SESSION_LOCK, &lock, NULL); assert(lock); if(gtk_session_lock_instance_is_locked(lock)) { g_warning("Shell session is already locked, doing nothing"); return; } if(!gtk_session_lock_instance_lock(lock)) { g_error("gtk_session_lock_instance_lock:Unable to lock the current session"); return; } GtkApplication * app; g_object_get(shell, DIYA_PROP_SHELL_APPLICATION, &app, NULL); assert(app); GdkDisplay *display = gdk_display_get_default(); GListModel *monitors = gdk_display_get_monitors(display); guint n_monitors = g_list_model_get_n_items(monitors); for (guint i = 0; i < n_monitors; ++i) { GdkMonitor *monitor = g_list_model_get_item(monitors, i); GtkWindow *gtk_window = GTK_WINDOW(gtk_application_window_new(app)); gtk_session_lock_instance_assign_window_to_monitor(lock, gtk_window, monitor); GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_halign(box, GTK_ALIGN_CENTER); gtk_widget_set_valign(box, GTK_ALIGN_CENTER); gtk_box_set_spacing(GTK_BOX (box), 10); GtkWidget *label = gtk_label_new("GTK Session Lock example"); gtk_box_append(GTK_BOX(box), label); GtkWidget *button = gtk_button_new_with_label("Unlock"); g_signal_connect(button, "clicked", G_CALLBACK(unlock_session), shell); gtk_box_append(GTK_BOX(box), button); // Not displayed, but allows testing that creating popups doesn't crash GTK gtk_widget_set_tooltip_text(button, "Foo Bar Baz"); gtk_window_set_child(GTK_WINDOW(gtk_window), box); gtk_window_present(gtk_window); } } void diya_session_shell_unlock(DiyaSessionShell* shell) { assert(shell); GtkSessionLockInstance * lock; g_object_get(shell, DIYA_PROP_SESSION_LOCK, &lock, NULL); assert(lock); gtk_session_lock_instance_unlock(lock); g_debug("gtk_session_lock_instance_unlock: Shell unlocked"); }