static void display_dialog (void) { if (dialog == NULL) prepare_dialog (); gtk_widget_show (dialog); }
/** * Sets up the dialog, shows it and waits for response * * **/ static void run_dialog (void) { GtkBuilder *builder; GtkDialog *dialog; gint res; builder = gtk_builder_new (); dialog = prepare_dialog (builder); if (!dialog) { g_object_unref (builder); return; } for (;;) { gtk_widget_show (GTK_WIDGET (dialog)); res = gtk_dialog_run (dialog); switch (res) { case GTK_RESPONSE_OK: case GTK_RESPONSE_APPLY: if (!validate_dialog (builder, dialog, res)) continue; gather_dialog (builder, dialog); break; case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: break; default: g_return_if_reached (); break; } /* Break out of the loop by default */ break; } gather_response (res); g_object_unref (builder); }
static gboolean step_process_multiple (FilesCtx *ctx, const gchar **orig_uris, GError **err) { SeahorseWidget *swidget; gboolean done = FALSE; FileInfo *pkg_info = NULL; gchar *package = NULL; gchar *ext; GFile *file, *parent; gboolean ok = FALSE; GtkWidget *dlg; guint nfolders, nfiles; gchar *uris[2]; gchar *uri; GList *l; g_assert (err && !*err); for (l = ctx->finfos, nfolders = nfiles = 0; l; l = g_list_next (l)) { FileInfo *finfo = (FileInfo*)l->data; if (g_file_info_get_file_type (finfo->info) == G_FILE_TYPE_DIRECTORY) ++nfolders; else ++nfiles; } /* In the case of one or less files, no dialog */ if(nfolders == 0 && nfiles <= 1) return TRUE; /* The package extension */ if ((ext = g_settings_get_string (seahorse_tool_settings, "package-extension")) == NULL) ext = g_strdup (".zip"); /* Yes this happens when the schema isn't installed */ /* Figure out a good URI for our package */ for (l = ctx->finfos; l; l = g_list_next (l)) { if (l->data) { pkg_info = (FileInfo*)(l->data); break; } } /* This sets up but doesn't run the dialog */ swidget = prepare_dialog (ctx, nfolders, nfiles, pkg_info->info, ext); g_free (ext); dlg = seahorse_widget_get_toplevel (swidget); /* Inhibit popping up of progress dialog */ seahorse_tool_progress_block (TRUE); while (!done) { switch (gtk_dialog_run (GTK_DIALOG (dlg))) { case GTK_RESPONSE_HELP: /* TODO: Implement help */ break; case GTK_RESPONSE_OK: package = get_results (swidget); ok = TRUE; /* Fall through */ default: done = TRUE; break; } } /* Let progress dialog pop up */ seahorse_tool_progress_block (FALSE); seahorse_widget_destroy (swidget); /* Cancelled */ if (!ok) return FALSE; /* No package was selected? */ if (!package) return TRUE; /* A package was selected */ /* Make a new path based on the first uri */ parent = g_file_get_parent (pkg_info->file); if (!parent) parent = pkg_info->file; file = g_file_get_child_for_display_name (parent, package, err); if (!file) return FALSE; uri = g_file_get_uri (file); g_return_val_if_fail (uri, FALSE); g_object_unref (file); if (!seahorse_util_uris_package (uri, orig_uris)) { g_free (uri); return FALSE; } /* Free all file info */ g_list_foreach (ctx->finfos, (GFunc)free_file_info, NULL); g_list_free (ctx->finfos); ctx->finfos = NULL; /* Reload up the new file, as what to encrypt */ uris[0] = uri; uris[1] = NULL; ok = step_check_uris (ctx, (const gchar**)uris, err); g_free (uri); return ok; }
int main (int argc, char **argv) { GtkWidget *w1; gchar *path; g_type_init (); gtk_init (&argc, &argv); toplevel = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (toplevel), 12); grid = gtk_grid_new (); w1 = gtk_label_new ("File:"); gtk_widget_set_halign (w1, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), w1, 0, 0, 1, 1); file_l = gtk_button_new (); path = g_build_filename (g_get_current_dir (), "apple-red.png", NULL); file = g_file_new_for_path (path); gtk_button_set_label (GTK_BUTTON (file_l), path); g_free (path); gtk_widget_set_halign (file_l, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (grid), file_l, w1, GTK_POS_RIGHT, 3, 1); g_signal_connect (file_l, "clicked", G_CALLBACK (button_clicked), NULL); radio_file = gtk_radio_button_new_with_label (NULL, "Use GFile"); radio_content = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio_file), "Use content type"); gtk_grid_attach (GTK_GRID (grid), radio_file, 0, 1, 1, 1); gtk_grid_attach_next_to (GTK_GRID (grid), radio_content, radio_file, GTK_POS_BOTTOM, 1, 1); open = gtk_button_new_with_label ("Trigger App Chooser dialog"); gtk_grid_attach_next_to (GTK_GRID (grid), open, radio_content, GTK_POS_BOTTOM, 1, 1); recommended = gtk_check_button_new_with_label ("Show recommended"); gtk_grid_attach_next_to (GTK_GRID (grid), recommended, open, GTK_POS_BOTTOM, 1, 1); g_object_set (recommended, "active", TRUE, NULL); fallback = gtk_check_button_new_with_label ("Show fallback"); gtk_grid_attach_next_to (GTK_GRID (grid), fallback, recommended, GTK_POS_RIGHT, 1, 1); other = gtk_check_button_new_with_label ("Show other"); gtk_grid_attach_next_to (GTK_GRID (grid), other, fallback, GTK_POS_RIGHT, 1, 1); all = gtk_check_button_new_with_label ("Show all"); gtk_grid_attach_next_to (GTK_GRID (grid), all, other, GTK_POS_RIGHT, 1, 1); prepare_dialog (); g_signal_connect (open, "clicked", G_CALLBACK (display_dialog), NULL); gtk_container_add (GTK_CONTAINER (toplevel), grid); gtk_widget_show_all (toplevel); g_signal_connect (toplevel, "delete-event", G_CALLBACK (gtk_main_quit), NULL); gtk_main (); return EXIT_SUCCESS; }