From bfdbe341d4970a9269c52b47fa8fb749a325a69b Mon Sep 17 00:00:00 2001 From: Logan Rathbone Date: Thu, 11 Feb 2021 22:03:47 -0500 Subject: Make zenity run with gtk4 (very unstable). --- src/main.c | 59 +++++++++++----- src/util.c | 75 +++++++++------------ src/util.h | 20 +++--- src/zenity.ui | 211 ++++------------------------------------------------------ 4 files changed, 96 insertions(+), 269 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index a211e15..d4281cf 100644 --- a/src/main.c +++ b/src/main.c @@ -33,26 +33,20 @@ #include +typedef struct { + int argc; + char **argv; +} ZenityArgs; -int -main (int argc, char *argv[]) +static void +activate_cb (GtkApplication *app, gpointer user_data) { + ZenityArgs *args = user_data; ZenityParsingOptions *results; int retval; - /* boilerplate i18n stuff */ - setlocale (LC_ALL, ""); - bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); - - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - textdomain (GETTEXT_PACKAGE); - /* */ - - // FIXME - may not be needed at all with the way I've factored util.c. - // But may need to replace this with gapplication here instead, depending. -// gtk_init (&argc, &argv); - - results = zenity_option_parse (argc, argv); + results = zenity_option_parse (args->argc, args->argv); + g_free (args); switch (results->mode) { @@ -61,7 +55,7 @@ main (int argc, char *argv[]) break; case MODE_ENTRY: - results->entry_data->data = (const char **) argv + 1; + results->entry_data->data = (const char **) args->argv + 1; zenity_entry (results->data, results->entry_data); break; @@ -81,7 +75,7 @@ main (int argc, char *argv[]) break; case MODE_LIST: - results->tree_data->data = (const char **) argv + 1; + results->tree_data->data = (const char **) args->argv + 1; zenity_tree (results->data, results->tree_data); break; @@ -135,5 +129,34 @@ main (int argc, char *argv[]) zenity_option_free (); - exit (retval); + // FIXME - pass retval to gapplication properly. +// exit (retval); +} + +int +main (int argc, char *argv[]) +{ + ZenityArgs *args; + GtkApplication *app; + int status; + + /* boilerplate i18n stuff */ + setlocale (LC_ALL, ""); + bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); + + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + textdomain (GETTEXT_PACKAGE); + /* */ + + args = g_new (ZenityArgs, 1); + args->argc = argc; + args->argv = argv; + + app = gtk_application_new ("org.gnome.Zenity", G_APPLICATION_FLAGS_NONE); + g_signal_connect (app, "activate", + G_CALLBACK(activate_cb), args); + status = g_application_run (G_APPLICATION(app), 0, NULL); + g_object_unref (app); + + return status; } diff --git a/src/util.c b/src/util.c index 0e90201..0c35144 100644 --- a/src/util.c +++ b/src/util.c @@ -49,7 +49,8 @@ #define ZENITY_EXTRA_DEFAULT 127 GtkBuilder * -zenity_util_load_ui_file (const gchar *root_widget, ...) { +zenity_util_load_ui_file (const char *root_widget, ...) +{ va_list args; char *arg = NULL; GPtrArray *ptrarray; @@ -67,11 +68,11 @@ zenity_util_load_ui_file (const gchar *root_widget, ...) { va_start (args, root_widget); - arg = va_arg (args, gchar *); + arg = va_arg (args, char *); while (arg) { g_ptr_array_add (ptrarray, g_strdup (arg)); - arg = va_arg (args, gchar *); + arg = va_arg (args, char *); } va_end (args); @@ -81,13 +82,13 @@ zenity_util_load_ui_file (const gchar *root_widget, ...) { if (g_file_test (ZENITY_UI_FILE_RELATIVEPATH, G_FILE_TEST_EXISTS)) { /* Try current dir, for debugging */ - result = gtk_builder_add_objects_from_file ( - builder, ZENITY_UI_FILE_RELATIVEPATH, (const char **)objects, NULL); + result = gtk_builder_add_objects_from_file (builder, + ZENITY_UI_FILE_RELATIVEPATH, (const char **)objects, NULL); } if (result == 0) - result = gtk_builder_add_objects_from_file ( - builder, ZENITY_UI_FILE_FULLPATH, (const char **)objects, &error); + result = gtk_builder_add_objects_from_file (builder, + ZENITY_UI_FILE_FULLPATH, (const char **)objects, &error); g_strfreev (objects); @@ -102,8 +103,9 @@ zenity_util_load_ui_file (const gchar *root_widget, ...) { return builder; } -gchar * -zenity_util_strip_newline (gchar *string) { + +char * +zenity_util_strip_newline (char *string) { gsize len; g_return_val_if_fail (string != NULL, NULL); @@ -120,11 +122,11 @@ zenity_util_strip_newline (gchar *string) { } gboolean -zenity_util_fill_file_buffer (GtkTextBuffer *buffer, const gchar *filename) { +zenity_util_fill_file_buffer (GtkTextBuffer *buffer, const char *filename) { GtkTextIter iter, end; FILE *f; - gchar buf[2048]; - gint remaining = 0; + char buf[2048]; + int remaining = 0; if (filename == NULL) return FALSE; @@ -139,7 +141,7 @@ zenity_util_fill_file_buffer (GtkTextBuffer *buffer, const gchar *filename) { gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0); while (!feof (f)) { - gint count; + int count; const char *leftover; int to_read = 2047 - remaining; @@ -176,8 +178,8 @@ zenity_util_fill_file_buffer (GtkTextBuffer *buffer, const gchar *filename) { return TRUE; } -const gchar * -zenity_util_icon_name_from_filename (const gchar *filename) { +const char * +zenity_util_icon_name_from_filename (const char *filename) { if (!filename || !filename[0]) return "dialog-warning"; /* default */ @@ -194,8 +196,8 @@ zenity_util_icon_name_from_filename (const gchar *filename) { void zenity_util_set_window_icon_from_file ( - GtkWidget *widget, const gchar *filename) { - const gchar *icon_name; + GtkWidget *widget, const char *filename) { + const char *icon_name; icon_name = zenity_util_icon_name_from_filename (filename); if (icon_name) { @@ -208,7 +210,7 @@ zenity_util_set_window_icon_from_file ( void zenity_util_set_window_icon (GtkWidget *widget, - const gchar *filename, const gchar *default_file) + const char *filename, const char *default_file) { if (filename != NULL) { zenity_util_set_window_icon_from_file (widget, filename); @@ -220,7 +222,7 @@ zenity_util_set_window_icon (GtkWidget *widget, void zenity_util_set_window_icon_from_icon_name ( - GtkWidget *widget, const gchar *filename, const gchar *default_icon_name) { + GtkWidget *widget, const char *filename, const char *default_icon_name) { if (filename != NULL) zenity_util_set_window_icon_from_file (widget, filename); else @@ -229,7 +231,7 @@ zenity_util_set_window_icon_from_icon_name ( void zenity_util_show_help (GError **error) { - gchar *tmp; + char *tmp; tmp = g_find_program_in_path ("yelp"); if (tmp) { @@ -238,11 +240,11 @@ zenity_util_show_help (GError **error) { } } -gint +int zenity_util_return_exit_code (ZenityExitCode value) { - const gchar *env_var = NULL; - gint retval; + const char *env_var = NULL; + int retval; switch (value) { @@ -400,8 +402,9 @@ zenity_util_timeout_handle (gpointer data) { GtkDialog *dialog = GTK_DIALOG (data); - if (dialog != NULL) + if (dialog != NULL) { gtk_dialog_response (dialog, ZENITY_TIMEOUT); + } else { zenity_util_gapp_quit (GTK_WINDOW(dialog)); exit (ZENITY_TIMEOUT); @@ -409,29 +412,15 @@ zenity_util_timeout_handle (gpointer data) return FALSE; } -/* zenity_util_gapp_main Helper */ - -static void -activate_cb (GtkApplication *app, gpointer user_data) { - GtkWindow *window = GTK_WINDOW(user_data); - - gtk_application_add_window (app, window); -} - -int -zenity_util_gapp_main (GtkWindow *window) { +void +zenity_util_gapp_main (GtkWindow *window) +{ GtkApplication *app; - int status; g_assert (GTK_IS_WINDOW (window)); - app = gtk_application_new ("org.gnome.Zenity", G_APPLICATION_FLAGS_NONE); - g_signal_connect (app, "activate", - G_CALLBACK(activate_cb), window); - status = g_application_run (G_APPLICATION(app), 0, NULL); - g_object_unref (app); - - return status; + app = GTK_APPLICATION(g_application_get_default ()); + gtk_application_add_window (app, window); } void diff --git a/src/util.h b/src/util.h index 99ce0e8..c1b2c34 100644 --- a/src/util.h +++ b/src/util.h @@ -1,4 +1,4 @@ -/* vim: colorcolumn=80 ts=4 sw=t +/* vim: colorcolumn=80 ts=4 sw=4 */ /* * util.h @@ -46,24 +46,24 @@ G_BEGIN_DECLS #define ZENITY_IMAGE_FULLPATH(filename) (ZENITY_DATADIR "/" filename) -GtkBuilder *zenity_util_load_ui_file (const gchar *widget_root, +GtkBuilder *zenity_util_load_ui_file (const char *widget_root, ...) G_GNUC_NULL_TERMINATED; -gchar *zenity_util_strip_newline (gchar *string); +char *zenity_util_strip_newline (char *string); gboolean zenity_util_fill_file_buffer (GtkTextBuffer *buffer, - const gchar *filename); -const gchar *zenity_util_icon_name_from_filename (const gchar *filename); + const char *filename); +const char *zenity_util_icon_name_from_filename (const char *filename); void zenity_util_set_window_icon (GtkWidget *widget, - const gchar *filename, const gchar *default_file); + const char *filename, const char *default_file); void zenity_util_set_window_icon_from_icon_name (GtkWidget *widget, - const gchar *filename, const gchar *default_icon_name); + const char *filename, const char *default_icon_name); void zenity_util_set_window_icon_from_file (GtkWidget *widget, - const gchar *filename); + const char *filename); void zenity_util_show_help (GError **error); -gint zenity_util_return_exit_code (ZenityExitCode value); +int zenity_util_return_exit_code (ZenityExitCode value); void zenity_util_exit_code_with_data (ZenityExitCode value, ZenityData *data); void zenity_util_show_dialog (GtkWidget *widget); gboolean zenity_util_timeout_handle (gpointer data); -int zenity_util_gapp_main (GtkWindow *window); +void zenity_util_gapp_main (GtkWindow *window); void zenity_util_gapp_quit (GtkWindow *window); G_END_DECLS diff --git a/src/zenity.ui b/src/zenity.ui index 41ec10c..25e8db9 100644 --- a/src/zenity.ui +++ b/src/zenity.ui @@ -9,26 +9,21 @@ 1 0 - 5 Adjust the scale value 300 100 - dialog - 0 0 - 5 vertical 6 center 0 - 4 Adjust the scale value 0 @@ -51,31 +46,18 @@ zenity_scale_ok_button - + True False - end Cancel - True - - False - False - 0 - OK - True - - False - False - 1 - @@ -83,13 +65,9 @@ 0 - 5 Text View - center 300 200 - dialog - 0 @@ -98,12 +76,10 @@ 1 0 - 5 vertical 1 - etched-in 2 @@ -121,7 +97,6 @@ center 0 - 0.5 @@ -133,44 +108,26 @@ zenity_text_close_button - + True False - end Cancel - - False - False - 0 - OK - True 1 - right - - - False - False - 1 - 0 - 5 Calendar selection - center - dialog - 0 @@ -178,7 +135,6 @@ 0 - 5 vertical 6 @@ -206,7 +162,8 @@ zenity_calendar 0 - + Calendar + zenity_calendar @@ -224,43 +181,25 @@ zenity_calendar_ok_button - + True False - end Cancel - True - - False - False - 0 - OK - 1 - True - - False - False - 1 - 0 - 5 Add a new entry - center - dialog - 0 @@ -269,7 +208,6 @@ 0 - 6 1 @@ -299,43 +237,25 @@ zenity_entry_ok_button - + True False - end Cancel - True - - False - False - 0 - OK - True - 1 - - False - False - 1 - 0 - 5 Error - center - dialog - 0 @@ -343,20 +263,16 @@ 0 - 6 1 0 - 5 12 center 0 - 0 dialog-error - 6 @@ -378,29 +294,18 @@ zenity_error_ok_button - - True + False - end OK - True - - False - False - 0 - 0 - 5 - center - normal 0 @@ -464,42 +369,27 @@ zenity_forms_ok_button - + True False - end Cancel 1 - - False - False - 0 - OK 1 - - False - False - 1 - 0 - 5 Information - center - dialog - 0 @@ -507,15 +397,12 @@ 0 - 5 12 center 0 - 0 dialog-information - 6 @@ -535,31 +422,20 @@ zenity_info_ok_button - + True False - end OK - True - - False - False - 0 - 0 - 5 Progress - center - dialog - 0 @@ -568,7 +444,6 @@ center 0 - 5 vertical 6 @@ -603,44 +478,26 @@ zenity_progress_ok_button - + True False - end Cancel - True - - False - False - 0 - OK 0 - 1 - True - - False - False - 1 - 0 - 5 Question - center - dialog - 0 @@ -648,15 +505,11 @@ 0 - 5 12 0 - 0 - 0 dialog-question - 6 @@ -673,29 +526,23 @@ - + True False - end 0 - 5 Select items from the list - center 300 196 - dialog - 0 0 - 5 vertical 6 @@ -708,12 +555,10 @@ - in 1 1 - 1 @@ -730,42 +575,24 @@ zenity_tree_ok_button - - True + False - end Cancel - True - - False - False - 0 - OK - True - - False - False - 1 - 0 - 5 Warning - center - dialog - 0 @@ -773,15 +600,11 @@ 0 - 5 12 0 - 0 - 0 dialog-warning - 6 @@ -801,21 +624,13 @@ zenity_warning_ok_button - + True False - end OK - 1 - True - - False - False - 0 - -- cgit v1.2.1