Updated the dialogue
This commit is contained in:
parent
747077f365
commit
07cb76f425
@ -1,41 +1,153 @@
|
|||||||
#include "gio/gio.h"
|
#include "gio/gio.h"
|
||||||
|
#include "glib-object.h"
|
||||||
|
#include "glib.h"
|
||||||
#include <adwaita.h>
|
#include <adwaita.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define YES 0
|
||||||
|
#define NO 1
|
||||||
|
#define PERM 2
|
||||||
|
|
||||||
|
int exit_code = 0;
|
||||||
|
gboolean is_permanent = false;
|
||||||
|
GtkEntryBuffer *entry_buffer = NULL;
|
||||||
|
GtkWidget *checkbox = NULL;
|
||||||
|
|
||||||
|
static void negative_response(GtkWindow *window) {
|
||||||
|
fprintf(stdout, "%s", gtk_entry_buffer_get_text(entry_buffer));
|
||||||
|
exit_code = (gtk_check_button_get_active(GTK_CHECK_BUTTON(checkbox)))
|
||||||
|
? YES | PERM
|
||||||
|
: YES;
|
||||||
|
gtk_window_close(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void positive_response(GtkWindow *window) {
|
||||||
|
fprintf(stdout, "%s", gtk_entry_buffer_get_text(entry_buffer));
|
||||||
|
exit_code = (gtk_check_button_get_active(GTK_CHECK_BUTTON(checkbox)))
|
||||||
|
? NO | PERM
|
||||||
|
: NO;
|
||||||
|
gtk_window_close(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void on_check_button_toggled(GtkToggleButton *button,
|
||||||
|
gpointer user_data) {
|
||||||
|
gboolean active = gtk_toggle_button_get_active(button);
|
||||||
|
}
|
||||||
|
|
||||||
static void on_activate(GtkApplication *app, gpointer user_data) {
|
static void on_activate(GtkApplication *app, gpointer user_data) {
|
||||||
// Create the main window
|
// Create the main window
|
||||||
AdwMessageDialog *dialog = ADW_MESSAGE_DIALOG(
|
AdwWindow *window = ADW_WINDOW(adw_window_new());
|
||||||
adw_message_dialog_new(NULL, "Allow access?", "allow_access?"));
|
gtk_window_set_application(GTK_WINDOW(window), app);
|
||||||
|
gtk_window_set_title(GTK_WINDOW(window), "icfs");
|
||||||
|
// gtk_window_set_default_size(GTK_WINDOW(window), 300, 150);
|
||||||
|
|
||||||
// Set the dialog as transient for the (non-existent) parent window
|
AdwStatusPage *content = ADW_STATUS_PAGE(adw_status_page_new());
|
||||||
gtk_window_set_application(GTK_WINDOW(dialog), app);
|
adw_status_page_set_title(content, "Allow access?");
|
||||||
|
|
||||||
// Add response buttons
|
char *description = NULL;
|
||||||
adw_message_dialog_add_response(dialog, "cancel", "Cancel");
|
asprintf(
|
||||||
adw_message_dialog_add_response(dialog, "ok", "OK");
|
&description,
|
||||||
|
"Allow process <tt>%s</tt> with PID <tt>%s</tt> to access <tt>%s</tt>",
|
||||||
|
g_object_get_data(G_OBJECT(app), "accessing_name"),
|
||||||
|
g_object_get_data(G_OBJECT(app), "accessing_pid"),
|
||||||
|
g_object_get_data(G_OBJECT(app), "access_dir"));
|
||||||
|
adw_status_page_set_description(content, description);
|
||||||
|
free(description);
|
||||||
|
|
||||||
// Set default response
|
entry_buffer = gtk_entry_buffer_new(
|
||||||
adw_message_dialog_set_default_response(dialog, "ok");
|
g_object_get_data(G_OBJECT(app), "access_dir"),
|
||||||
|
strlen(g_object_get_data(G_OBJECT(app), "access_dir")));
|
||||||
|
|
||||||
// Set close response (when clicking X)
|
GtkWidget *entry = gtk_entry_new();
|
||||||
adw_message_dialog_set_close_response(dialog, "cancel");
|
gtk_entry_set_buffer(GTK_ENTRY(entry), entry_buffer);
|
||||||
|
gtk_entry_set_placeholder_text(GTK_ENTRY(entry), "Enter filename");
|
||||||
|
gtk_widget_set_hexpand(entry, TRUE);
|
||||||
|
|
||||||
// Connect response handler
|
// Create a prefix label and box
|
||||||
// g_signal_connect(dialog, "response", G_CALLBACK(gtk_window_close), dialog);
|
GtkWidget *entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
|
GtkWidget *prefix_label =
|
||||||
|
gtk_label_new(g_object_get_data(G_OBJECT(app), "root_folder"));
|
||||||
|
gtk_box_append(GTK_BOX(entry_box), prefix_label);
|
||||||
|
gtk_box_append(GTK_BOX(entry_box), entry);
|
||||||
|
|
||||||
|
checkbox = gtk_check_button_new_with_label("Permanent");
|
||||||
|
gtk_check_button_set_active(GTK_CHECK_BUTTON(checkbox), false);
|
||||||
|
// gtk_widget_set_halign(checkbox, GTK_ALIGN_CENTER);
|
||||||
|
|
||||||
|
GtkWidget *yes_button = gtk_button_new_with_label("Yes");
|
||||||
|
gtk_widget_set_hexpand(yes_button, TRUE);
|
||||||
|
g_signal_connect_swapped(yes_button, "clicked", G_CALLBACK(positive_response),
|
||||||
|
window);
|
||||||
|
|
||||||
|
GtkWidget *no_button = gtk_button_new_with_label("No");
|
||||||
|
gtk_widget_set_hexpand(no_button, TRUE);
|
||||||
|
g_signal_connect_swapped(no_button, "clicked", G_CALLBACK(negative_response),
|
||||||
|
window);
|
||||||
|
|
||||||
|
GtkWidget *button_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
|
||||||
|
gtk_box_append(GTK_BOX(button_box), yes_button);
|
||||||
|
gtk_box_append(GTK_BOX(button_box), no_button);
|
||||||
|
gtk_widget_set_halign(button_box, GTK_ALIGN_FILL);
|
||||||
|
|
||||||
|
// Combine everything in a box
|
||||||
|
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
|
||||||
|
gtk_box_append(GTK_BOX(box), GTK_WIDGET(content));
|
||||||
|
gtk_box_append(GTK_BOX(box), entry_box);
|
||||||
|
gtk_box_append(GTK_BOX(box), checkbox);
|
||||||
|
gtk_box_append(GTK_BOX(box), button_box);
|
||||||
|
gtk_widget_set_margin_top(GTK_WIDGET(box), 12);
|
||||||
|
gtk_widget_set_margin_bottom(GTK_WIDGET(box), 12);
|
||||||
|
gtk_widget_set_margin_start(GTK_WIDGET(box), 12);
|
||||||
|
gtk_widget_set_margin_end(GTK_WIDGET(box), 12);
|
||||||
|
|
||||||
|
// g_signal_connect(window, "response", G_CALLBACK(gtk_window_close), window);
|
||||||
|
|
||||||
// Show the dialog
|
// Show the dialog
|
||||||
gtk_window_present(GTK_WINDOW(dialog));
|
adw_window_set_content(window, box);
|
||||||
|
gtk_window_present(GTK_WINDOW(window));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int on_command_line(GApplication *app, GApplicationCommandLine *cmdline,
|
||||||
|
gpointer user_data) {
|
||||||
|
gchar **argv;
|
||||||
|
gint argc;
|
||||||
|
|
||||||
|
argv = g_application_command_line_get_arguments(cmdline, &argc);
|
||||||
|
|
||||||
|
// Handle your arguments here
|
||||||
|
if (argc >= 4) {
|
||||||
|
fprintf(stderr, "%s\n", argv[1]);
|
||||||
|
g_object_set_data_full(G_OBJECT(app), "accessing_pid", g_strdup(argv[1]),
|
||||||
|
g_free);
|
||||||
|
g_object_set_data_full(G_OBJECT(app), "accessing_name", g_strdup(argv[2]),
|
||||||
|
g_free);
|
||||||
|
g_object_set_data_full(G_OBJECT(app), "root_folder", g_strdup(argv[3]),
|
||||||
|
g_free);
|
||||||
|
g_object_set_data_full(G_OBJECT(app), "access_dir", g_strdup(argv[4]),
|
||||||
|
g_free);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_strfreev(argv);
|
||||||
|
|
||||||
|
// Activate the application
|
||||||
|
g_application_activate(app);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
// Create a new application
|
// Create a new application
|
||||||
AdwApplication *app = adw_application_new("com.example.zenityclone",
|
AdwApplication *app = adw_application_new("com.example.zenityclone",
|
||||||
G_APPLICATION_DEFAULT_FLAGS);
|
G_APPLICATION_HANDLES_COMMAND_LINE);
|
||||||
|
|
||||||
|
g_signal_connect(app, "command-line", G_CALLBACK(on_command_line), NULL);
|
||||||
g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL);
|
g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL);
|
||||||
|
|
||||||
// Run the application
|
// Run the application
|
||||||
int status = g_application_run(G_APPLICATION(app), argc, argv);
|
int status = g_application_run(G_APPLICATION(app), argc, argv);
|
||||||
g_object_unref(app);
|
g_object_unref(app);
|
||||||
|
|
||||||
return status;
|
return (status == 0) ? exit_code : status;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user