/** * operation: The operation to create a new progress window for * * Creates a new progress window and adds the operation to it. * * Returns FALSE **/ static gboolean progress_show (SeahorseOperation *operation) { SeahorseWidget *swidget; GtkWidget *w; const gchar *title; gchar *t; if (!seahorse_operation_is_running (operation)) { /* Matches the ref in seahorse_progress_show */ g_object_unref (operation); return FALSE; } swidget = seahorse_widget_new_allow_multiple ("progress", NULL); g_return_val_if_fail (swidget != NULL, FALSE); /* Release our reference on the operation when this window is destroyed */ g_object_set_data_full (G_OBJECT (swidget), "operation", operation, (GDestroyNotify)g_object_unref); w = GTK_WIDGET (seahorse_widget_get_widget (swidget, swidget->name)); gtk_window_move (GTK_WINDOW (w), 10, 10); /* Setup the title */ title = (const gchar*)g_object_get_data (G_OBJECT (operation), "progress-title"); if (title) { /* The window title */ w = GTK_WIDGET (seahorse_widget_get_widget (swidget, swidget->name)); g_return_val_if_fail (w != NULL, FALSE); gtk_window_set_title (GTK_WINDOW (w), title); /* The main message title */ w = GTK_WIDGET (seahorse_widget_get_widget (swidget, "operation-title")); g_return_val_if_fail (w != NULL, FALSE); t = g_strdup_printf ("<b>%s</b>", title); gtk_label_set_markup (GTK_LABEL (w), t); g_free (t); } /* The details */ progress_operation_update (operation, NULL, seahorse_operation_get_progress (operation), swidget); g_signal_connect (operation, "progress", G_CALLBACK (progress_operation_update), swidget); /* Cancel events */ g_signal_connect (seahorse_widget_get_toplevel (swidget), "delete_event", G_CALLBACK (progress_delete_event), operation); /* Done and cleanup */ w = GTK_WIDGET (seahorse_widget_get_widget (swidget, swidget->name)); g_signal_connect (w, "destroy", G_CALLBACK (progress_destroy), operation); g_signal_connect (operation, "done", G_CALLBACK (progress_operation_done), swidget); return FALSE; }
G_MODULE_EXPORT void on_prefs_keyserver_add_clicked (GtkButton *button, gpointer user_data) { SeahorseWidget *sw = SEAHORSE_WIDGET (user_data); SeahorseWidget *swidget; gchar **types; GtkWidget *widget; gint response; gchar *result = NULL; GtkTreeView *treeview; GtkTreeStore *store; GtkTreeIter iter; guint i; swidget = seahorse_widget_new_allow_multiple ("add-keyserver", GTK_WINDOW (seahorse_widget_get_widget (sw, sw->name))); g_return_if_fail (swidget != NULL); widget = GTK_WIDGET (seahorse_widget_get_widget (swidget, "keyserver-type")); g_return_if_fail (widget != NULL); /* The list of types */ types = seahorse_servers_get_types (); /* Save these away for later */ g_object_set_data_full (G_OBJECT (swidget), "keyserver-types", types, (GDestroyNotify)g_strfreev); /* The description for the key server types, plus custom */ for (i = 0; types[i] != NULL; i++) gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), seahorse_servers_get_description (types[i])); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), _("Custom")); gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0); response = gtk_dialog_run (GTK_DIALOG (seahorse_widget_get_toplevel (swidget))); if (response == GTK_RESPONSE_ACCEPT) { result = calculate_keyserver_uri (swidget); if (result != NULL) { treeview = GTK_TREE_VIEW (seahorse_widget_get_widget (sw, "keyservers")); g_return_if_fail (treeview != NULL); store = GTK_TREE_STORE (gtk_tree_view_get_model (treeview)); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, KEYSERVER_COLUMN, result, -1); } g_free (result); } seahorse_widget_destroy (swidget); }
static gboolean on_timeout_show_progress (gpointer user_data) { TrackedTask *task = NULL; SeahorseWidget *swidget; GtkWidget *widget; GtkWindow *window; gchar *text; /* Guard against going away before we display */ if (tracked_tasks) task = g_hash_table_lookup (tracked_tasks, user_data); if (task == NULL) return FALSE; /* don't call again */ swidget = seahorse_widget_new_allow_multiple ("progress", NULL); g_return_val_if_fail (swidget != NULL, FALSE); window = GTK_WINDOW (seahorse_widget_get_toplevel (swidget)); g_signal_connect (window, "delete_event", G_CALLBACK (on_window_delete_event), task->cancellable); gtk_window_move (window, 10, 10); /* Setup the title */ if (task->title) { gtk_window_set_title (window, task->title); /* The main message title */ widget = seahorse_widget_get_widget (swidget, "progress-title"); text = g_strdup_printf ("<b>%s</b>", task->title); gtk_label_set_markup (GTK_LABEL (widget), text); g_free (text); } /* Setup the notice */ if (task->notice) { widget = seahorse_widget_get_widget (swidget, "progress-notice"); gtk_label_set_label (GTK_LABEL (widget), task->notice); gtk_widget_show (widget); } /* Setup the cancel button */ widget = seahorse_widget_get_widget (swidget, "progress-cancel"); g_signal_connect (widget, "clicked", G_CALLBACK (on_cancel_button_clicked), task->cancellable); /* Allow attach to work */ task->showing = FALSE; seahorse_progress_attach (task->cancellable, swidget->gtkbuilder); gtk_widget_show (GTK_WIDGET (window)); g_object_unref (swidget); return FALSE; /* don't call again */ }
/** * seahorse_upload_show * @keys: Upload a certain set of SSH keys * * Prompt a dialog to upload keys. **/ void seahorse_ssh_upload_prompt (GList *keys, GtkWindow *parent) { SeahorseWidget *swidget; GtkWindow *win; GtkWidget *w; g_return_if_fail (keys != NULL); swidget = seahorse_widget_new_allow_multiple ("ssh-upload", parent); g_return_if_fail (swidget != NULL); win = GTK_WINDOW (GTK_WIDGET (seahorse_widget_get_widget (swidget, swidget->name))); /* Default to the users current name */ w = GTK_WIDGET (seahorse_widget_get_widget (swidget, "user-label")); gtk_entry_set_text (GTK_ENTRY (w), g_get_user_name ()); /* Focus the host */ w = GTK_WIDGET (seahorse_widget_get_widget (swidget, "host-label")); gtk_widget_grab_focus (w); keys = g_list_copy (keys); g_object_set_data_full (G_OBJECT (swidget), "upload-keys", keys, (GDestroyNotify)g_list_free); on_upload_input_changed (NULL, swidget); for (;;) { switch (gtk_dialog_run (GTK_DIALOG (win))) { case GTK_RESPONSE_HELP: /* TODO: Help */ continue; case GTK_RESPONSE_ACCEPT: upload_keys (swidget); break; default: break; }; break; } seahorse_widget_destroy (swidget); }
void seahorse_gpgme_expires_new (SeahorseGpgmeSubkey *subkey, GtkWindow *parent) { SeahorseWidget *swidget; GtkWidget *date, *expire; gulong expires; gchar *title; const gchar *label; g_return_if_fail (subkey != NULL && SEAHORSE_IS_GPGME_SUBKEY (subkey)); swidget = seahorse_widget_new_allow_multiple ("expires", parent); g_return_if_fail (swidget != NULL); g_object_set_data_full (G_OBJECT (swidget), "subkey", g_object_ref (subkey), g_object_unref); date = GTK_WIDGET (seahorse_widget_get_widget (swidget, "calendar")); g_return_if_fail (date != NULL); expire = GTK_WIDGET (seahorse_widget_get_widget (swidget, "expire")); expires = seahorse_pgp_subkey_get_expires (SEAHORSE_PGP_SUBKEY (subkey)); if (!expires) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (expire), TRUE); gtk_widget_set_sensitive (date, FALSE); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (expire), FALSE); gtk_widget_set_sensitive (date, TRUE); } if (expires) { struct tm t; time_t time = (time_t)expires; if (gmtime_r (&time, &t)) { gtk_calendar_select_month (GTK_CALENDAR (date), t.tm_mon, t.tm_year + 1900); gtk_calendar_select_day (GTK_CALENDAR (date), t.tm_mday); } } label = seahorse_pgp_subkey_get_description (SEAHORSE_PGP_SUBKEY (subkey)); title = g_strdup_printf (_("Expiry: %s"), label); gtk_window_set_title (GTK_WINDOW (seahorse_widget_get_widget (swidget, swidget->name)), title); g_free (title); }