summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLogan Rathbone <poprocks@gmail.com>2023-01-26 19:33:49 -0500
committerLogan Rathbone <poprocks@gmail.com>2023-01-26 19:33:49 -0500
commitb33e643229f4b03ca6943edc2b2c2dff7967bdd2 (patch)
tree95d1ba24baaface207f61ff215178f339c3afed6 /src
parent92eca1e32d433fd4ce45abb0b62306b1d6e0339f (diff)
parenta0c55e36136eb4469156f57877829ea39c016cbb (diff)
downloadzenity-b33e643229f4b03ca6943edc2b2c2dff7967bdd2.tar.gz
Merge branch 'gtk4-port'
Diffstat (limited to 'src')
-rw-r--r--src/about.c83
-rw-r--r--src/calendar.c159
-rw-r--r--src/color.c75
-rw-r--r--src/entry.c186
-rw-r--r--src/fileselection.c206
-rw-r--r--src/forms.c392
-rwxr-xr-xsrc/gdialog.in353
-rw-r--r--src/main.c115
-rw-r--r--src/meson.build42
-rw-r--r--src/msg.c183
-rw-r--r--src/notification.c369
-rw-r--r--src/option.c2118
-rw-r--r--src/option.h19
-rw-r--r--src/password.c209
-rw-r--r--src/progress.c338
-rw-r--r--src/scale.c133
-rw-r--r--src/text.c268
-rw-r--r--src/tree.c555
-rw-r--r--src/util.c478
-rw-r--r--src/util.h89
-rw-r--r--src/zenity.gresource.xml.in28
-rw-r--r--src/zenity.h141
-rw-r--r--src/zenity.ui1639
23 files changed, 3686 insertions, 4492 deletions
diff --git a/src/about.c b/src/about.c
index c0baa9e..b71ea13 100644
--- a/src/about.c
+++ b/src/about.c
@@ -1,12 +1,15 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* about.c
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
- * Copyright (C) 2001 CodeFactory AB
- * Copyright (C) 2001, 2002 Anders Carlsson
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * Copyright © 2001 CodeFactory AB
+ * Copyright © 2001, 2002 Anders Carlsson
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
@@ -15,7 +18,7 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
@@ -24,22 +27,19 @@
* Anders Carlsson <andersca@gnu.org>
*/
-#include "config.h"
#include "util.h"
#include "zenity.h"
-#include <gdk/gdkkeysyms.h>
+
#include <string.h>
-#define GTK_RESPONSE_CREDITS 0
-#define ZENITY_HELP_PATH ZENITY_DATADIR "/help/"
+#include <config.h>
static GtkWidget *dialog;
-static void zenity_about_dialog_response (
- GtkWidget *widget, int response, gpointer data);
+static void zenity_about_close_cb (GtkWindow *window, gpointer data);
/* Sync with the people in the THANKS file */
-static const gchar *const authors[] = {"Glynn Foster <glynn foster sun com>",
+static const char *const authors[] = {"Glynn Foster <glynn foster sun com>",
"Lucas Rocha <lucasr gnome org>",
"Mike Newman <mikegtn gnome org>",
NULL};
@@ -50,8 +50,6 @@ static const char *documenters[] = {"Glynn Foster <glynn.foster@sun.com>",
"GNOME Documentation Project",
NULL};
-static gchar *translators;
-
static const char *license[] = {
N_ ("This program is free software; you can redistribute it and/or modify "
"it under the terms of the GNU Lesser General Public License as "
@@ -69,72 +67,55 @@ static const char *license[] = {
"02110-1301, USA.")};
void
-zenity_about (ZenityData *data) {
- GdkPixbuf *logo;
+zenity_about (ZenityData *data)
+{
char *license_trans;
- translators = _ ("translator-credits");
- logo =
- gdk_pixbuf_new_from_file (ZENITY_IMAGE_FULLPATH ("zenity.png"), NULL);
-
license_trans = g_strconcat (
- _ (license[0]), "\n", _ (license[1]), "\n", _ (license[2]), "\n", NULL);
+ _(license[0]), "\n", _(license[1]), "\n", _(license[2]), "\n", NULL);
dialog = gtk_about_dialog_new ();
g_object_set (G_OBJECT (dialog),
- "name",
+ "program-name",
"Zenity",
"version",
VERSION,
"copyright",
- "Copyright \xc2\xa9 2003 Sun Microsystems",
+ "Copyright \xc2\xa9 2003 Sun Microsystems\n"
+ "Copyright \xc2\xa9 2021-2023 Logan Rathbone\n",
"comments",
- _ ("Display dialog boxes from shell scripts"),
+ _("Display dialog boxes from shell scripts"),
"authors",
authors,
"documenters",
documenters,
- "translator-credits",
- translators,
"website",
- "http://live.gnome.org/Zenity",
- "logo",
- logo,
+ "https://gitlab.gnome.org/GNOME/zenity",
"wrap-license",
TRUE,
"license",
license_trans,
+ "icon-name",
+ "zenity",
+ "logo-icon-name",
+ "zenity",
NULL);
g_free (license_trans);
- zenity_util_set_window_icon (
- dialog, NULL, ZENITY_IMAGE_FULLPATH ("zenity.png"));
+ g_signal_connect (dialog, "close-request",
+ G_CALLBACK(zenity_about_close_cb), data);
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_about_dialog_response),
- data);
-
- zenity_util_show_dialog (dialog, data->attach);
- gtk_main ();
+ zenity_util_show_dialog (dialog);
+ zenity_util_gapp_main (GTK_WINDOW (dialog));
}
static void
-zenity_about_dialog_response (GtkWidget *widget, int response, gpointer data) {
+zenity_about_close_cb (GtkWindow *window, gpointer data)
+{
ZenityData *zen_data = data;
- switch (response) {
- case GTK_RESPONSE_CLOSE:
- zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
- break;
-
- default:
- /* Esc dialog */
- zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
- break;
- }
-
- gtk_main_quit ();
+ zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
+ zenity_util_gapp_quit (window, zen_data);
}
diff --git a/src/calendar.c b/src/calendar.c
index 9aaf927..f5237d1 100644
--- a/src/calendar.c
+++ b/src/calendar.c
@@ -1,19 +1,22 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* calendar.c
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
@@ -21,55 +24,50 @@
* Authors: Glynn Foster <glynn.foster@sun.com>
*/
-#include "config.h"
#include "util.h"
#include "zenity.h"
+
#include <time.h>
+#include <config.h>
+
static GtkWidget *calendar;
static ZenityCalendarData *zen_cal_data;
-static void zenity_calendar_dialog_response (
- GtkWidget *widget, int response, gpointer data);
-static void zenity_calendar_double_click (GtkCalendar *calendar, gpointer data);
+static void zenity_calendar_dialog_response (GtkWidget *widget, char *rstr, gpointer data);
void
-zenity_calendar (ZenityData *data, ZenityCalendarData *cal_data) {
- GtkBuilder *builder;
+zenity_calendar (ZenityData *data, ZenityCalendarData *cal_data)
+{
+ g_autoptr(GtkBuilder) builder = NULL;
GtkWidget *dialog;
- GtkWidget *button;
GObject *text;
zen_cal_data = cal_data;
- builder = zenity_util_load_ui_file ("zenity_calendar_dialog", NULL);
+ builder = zenity_util_load_ui_file ("zenity_calendar_dialog", "zenity_calendar_box", NULL);
if (builder == NULL) {
data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
return;
}
- gtk_builder_connect_signals (builder, NULL);
-
- dialog =
- GTK_WIDGET (gtk_builder_get_object (builder, "zenity_calendar_dialog"));
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder,
+ "zenity_calendar_dialog"));
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_calendar_dialog_response),
- data);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK(zenity_calendar_dialog_response), data);
if (data->dialog_title)
gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
- zenity_util_set_window_icon (dialog,
- data->window_icon,
- ZENITY_IMAGE_FULLPATH ("zenity-calendar.png"));
+ gtk_window_set_icon_name (GTK_WINDOW(dialog),
+ "x-office-calendar");
if (data->width > -1 || data->height > -1)
- gtk_window_set_default_size (
- GTK_WINDOW (dialog), data->width, data->height);
+ gtk_window_set_default_size (GTK_WINDOW(dialog),
+ data->width, data->height);
if (data->modal)
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
@@ -77,24 +75,28 @@ zenity_calendar (ZenityData *data, ZenityCalendarData *cal_data) {
text = gtk_builder_get_object (builder, "zenity_calendar_text");
if (cal_data->dialog_text)
- gtk_label_set_markup (
- GTK_LABEL (text), g_strcompress (cal_data->dialog_text));
+ gtk_label_set_markup (GTK_LABEL(text),
+ g_strcompress (cal_data->dialog_text));
- calendar = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_calendar"));
+ calendar = GTK_WIDGET(gtk_builder_get_object (builder, "zenity_calendar"));
if (cal_data->month > 0 || cal_data->year > 0)
- gtk_calendar_select_month (
- GTK_CALENDAR (calendar), cal_data->month - 1, cal_data->year);
- if (cal_data->day > 0)
- gtk_calendar_select_day (GTK_CALENDAR (calendar), cal_data->day);
+ {
+ g_object_set (calendar,
+ "month", cal_data->month - 1,
+ "year", cal_data->year,
+ NULL);
+ }
- g_signal_connect (calendar,
- "day-selected-double-click",
- G_CALLBACK (zenity_calendar_double_click),
- data);
+ if (cal_data->day > 0)
+ {
+ g_object_set (calendar,
+ "day", cal_data->day - 1,
+ NULL);
+ }
gtk_label_set_mnemonic_widget (GTK_LABEL (text), calendar);
- zenity_util_show_dialog (dialog, data->attach);
+ zenity_util_show_dialog (dialog);
if (data->timeout_delay > 0) {
g_timeout_add_seconds (data->timeout_delay,
@@ -102,60 +104,58 @@ zenity_calendar (ZenityData *data, ZenityCalendarData *cal_data) {
dialog);
}
- if (data->extra_label) {
- gint i = 0;
- while (data->extra_label[i] != NULL) {
- gtk_dialog_add_button (
- GTK_DIALOG (dialog), data->extra_label[i], i);
- i++;
- }
+ if (data->extra_label)
+ {
+ ZENITY_UTIL_ADD_EXTRA_LABELS (dialog)
}
- if (data->ok_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_calendar_ok_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
+ if (data->ok_label)
+ {
+ ZENITY_UTIL_SETUP_OK_BUTTON_LABEL (dialog);
}
- if (data->cancel_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_calendar_cancel_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
+ if (data->cancel_label)
+ {
+ ZENITY_UTIL_SETUP_CANCEL_BUTTON_LABEL (dialog);
}
- g_object_unref (builder);
-
- gtk_main ();
+ zenity_util_gapp_main (GTK_WINDOW(dialog));
}
+
static void
-zenity_calendar_dialog_output (void) {
- guint day, month, year;
- gchar time_string[128];
- GDate *date = NULL;
-
- gtk_calendar_get_date (GTK_CALENDAR (calendar), &day, &month, &year);
- date = g_date_new_dmy (year, month + 1, day);
- g_date_strftime (time_string, 127, zen_cal_data->date_format, date);
+zenity_calendar_dialog_output (void)
+{
+ int day, month, year;
+ g_autofree char *time_string = NULL;
+ g_autoptr(GDateTime) date = NULL;
+
+ g_object_get (calendar,
+ "day", &day,
+ "month", &month,
+ "year", &year,
+ NULL);
+
+ date = g_date_time_new_local (year, month + 1, day + 1,
+ 0, 0, 0);
+
+ time_string = g_date_time_format (date, zen_cal_data->date_format);
g_print ("%s\n", time_string);
-
- if (date != NULL)
- g_date_free (date);
}
static void
-zenity_calendar_dialog_response (
- GtkWidget *widget, int response, gpointer data) {
- ZenityData *zen_data;
-
- zen_data = data;
-
- switch (response) {
- case GTK_RESPONSE_OK:
+zenity_calendar_dialog_response (GtkWidget *widget, char *rstr, gpointer data)
+{
+ ZenityData *zen_data = data;
+ ZenityExitCode response = zenity_util_parse_dialog_response (rstr);
+
+ switch (response)
+ {
+ case ZENITY_OK:
zenity_calendar_dialog_output ();
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
break;
- case GTK_RESPONSE_CANCEL:
+ case ZENITY_CANCEL:
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
break;
@@ -166,15 +166,10 @@ zenity_calendar_dialog_response (
default:
if (zen_data->extra_label &&
- response < g_strv_length (zen_data->extra_label))
+ response < (int)g_strv_length (zen_data->extra_label))
printf ("%s\n", zen_data->extra_label[response]);
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
break;
}
- gtk_main_quit ();
-}
-
-static void
-zenity_calendar_double_click (GtkCalendar *cal, gpointer data) {
- zenity_calendar_dialog_response (NULL, GTK_RESPONSE_OK, data);
+ zenity_util_gapp_quit (GTK_WINDOW(gtk_widget_get_native (widget)), zen_data);
}
diff --git a/src/color.c b/src/color.c
index 9ef233e..d1f7c8e 100644
--- a/src/color.c
+++ b/src/color.c
@@ -1,19 +1,22 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* color.c
*
- * Copyright (C) 2010 Berislav Kovacki
+ * Copyright © 2010 Berislav Kovacki
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
@@ -27,51 +30,34 @@
#include "zenity.h"
#include <string.h>
+/* TODO: port to GtkColorDialog */
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+
static ZenityData *zen_data;
-static void zenity_colorselection_dialog_response (
- GtkWidget *widget, int response, gpointer data);
+static void zenity_colorselection_dialog_response (GtkWidget *widget, int response, gpointer data);
void
-zenity_colorselection (ZenityData *data, ZenityColorData *color_data) {
+zenity_colorselection (ZenityData *data, ZenityColorData *color_data)
+{
GtkWidget *dialog;
- GtkWidget *button;
GdkRGBA color;
zen_data = data;
dialog = gtk_color_chooser_dialog_new (data->dialog_title, NULL);
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_colorselection_dialog_response),
- color_data);
+ g_signal_connect (dialog, "response", G_CALLBACK (zenity_colorselection_dialog_response), color_data);
- if (color_data->color) {
- if (gdk_rgba_parse (&color, color_data->color)) {
- gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (dialog), &color);
- }
+ if (color_data->color &&
+ gdk_rgba_parse (&color, color_data->color))
+ {
+ gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(dialog), &color);
}
- if (data->extra_label) {
- gint i = 0;
- while (data->extra_label[i] != NULL) {
- gtk_dialog_add_button (
- GTK_DIALOG (dialog), data->extra_label[i], i);
- i++;
- }
- }
-
- if (data->ok_label) {
- g_object_get (G_OBJECT (dialog), "ok-button", &button, NULL);
- gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
- g_object_unref (G_OBJECT (button));
- }
-
- if (data->cancel_label) {
- g_object_get (G_OBJECT (dialog), "cancel-button", &button, NULL);
- gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
- g_object_unref (G_OBJECT (button));
+ if (data->extra_label)
+ {
+ ZENITY_UTIL_ADD_EXTRA_LABELS (dialog)
}
if (data->modal)
@@ -79,23 +65,23 @@ zenity_colorselection (ZenityData *data, ZenityColorData *color_data) {
g_object_set (dialog, "show-editor", !color_data->show_palette, NULL);
- zenity_util_show_dialog (dialog, data->attach);
+ zenity_util_show_dialog (dialog);
if (data->timeout_delay > 0) {
g_timeout_add_seconds (data->timeout_delay,
(GSourceFunc) zenity_util_timeout_handle,
dialog);
}
-
- gtk_main ();
+ zenity_util_gapp_main (GTK_WINDOW(dialog));
}
static void
-zenity_colorselection_dialog_response (
- GtkWidget *widget, int response, gpointer data) {
+zenity_colorselection_dialog_response (GtkWidget *widget, int response, gpointer data)
+{
GdkRGBA color;
- switch (response) {
+ switch (response)
+ {
case GTK_RESPONSE_OK:
zenity_util_exit_code_with_data (ZENITY_OK, zen_data);
gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (widget), &color);
@@ -108,11 +94,12 @@ zenity_colorselection_dialog_response (
default:
if (zen_data->extra_label &&
- response < g_strv_length (zen_data->extra_label))
+ response < (int)g_strv_length (zen_data->extra_label))
printf ("%s\n", zen_data->extra_label[response]);
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
break;
}
-
- gtk_main_quit ();
+ zenity_util_gapp_quit (GTK_WINDOW(widget), zen_data);
}
+
+G_GNUC_END_IGNORE_DEPRECATIONS
diff --git a/src/entry.c b/src/entry.c
index bf3db71..bf94cd4 100644
--- a/src/entry.c
+++ b/src/entry.c
@@ -1,19 +1,22 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* entry.c
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
@@ -21,98 +24,88 @@
* Authors: Glynn Foster <glynn.foster@sun.com>
*/
-#include "config.h"
-
#include "util.h"
#include "zenity.h"
-static void zenity_entry_dialog_response (
- GtkWidget *widget, int response, gpointer data);
+#include <config.h>
+
+static void zenity_entry_dialog_response (GtkWidget *widget, char *rstr, gpointer data);
static GtkWidget *entry;
-static gint n_entries = 0;
+static int n_entries = 0;
static void
-zenity_entry_fill_entries (GSList **entries, const gchar **args) {
- gint i = 0;
-
- while (args[i] != NULL) {
- *entries = g_slist_append (*entries, (gchar *) args[i]);
- i++;
+zenity_entry_fill_entries (GSList **entries, const char **args)
+{
+ for (int i = 0; args[i] != NULL; ++i)
+ {
+ *entries = g_slist_append (*entries, (char *)args[i]);
}
}
static void
-zenity_entry_combo_activate_default (GtkEntry *entry, gpointer window) {
- gtk_window_activate_default (GTK_WINDOW (window));
+zenity_entry_combo_activate_default (GtkEntry *entry, gpointer window)
+{
+ g_signal_emit_by_name (window, "activate-default");
}
void
-zenity_entry (ZenityData *data, ZenityEntryData *entry_data) {
- GtkBuilder *builder = NULL;
+zenity_entry (ZenityData *data, ZenityEntryData *entry_data)
+{
+ g_autoptr(GtkBuilder) builder = NULL;
GtkWidget *dialog;
- GtkWidget *button;
GObject *text;
GSList *entries = NULL;
GSList *tmp;
GObject *vbox;
- builder = zenity_util_load_ui_file ("zenity_entry_dialog", NULL);
+ builder = zenity_util_load_ui_file ("zenity_entry_dialog", "zenity_entry_box", NULL);
- if (builder == NULL) {
+ if (builder == NULL)
+ {
data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
return;
}
- gtk_builder_connect_signals (builder, NULL);
+ dialog = GTK_WIDGET(gtk_builder_get_object (builder,
+ "zenity_entry_dialog"));
- dialog =
- GTK_WIDGET (gtk_builder_get_object (builder, "zenity_entry_dialog"));
-
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_entry_dialog_response),
- data);
+ g_signal_connect (dialog, "response", G_CALLBACK(zenity_entry_dialog_response), data);
if (data->dialog_title)
- gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
+ gtk_window_set_title (GTK_WINDOW(dialog), data->dialog_title);
- zenity_util_set_window_icon (
- dialog, data->window_icon, ZENITY_IMAGE_FULLPATH ("zenity-entry.png"));
+ gtk_window_set_icon_name (GTK_WINDOW(dialog),
+ "insert-text");
if (data->width > -1 || data->height > -1)
- gtk_window_set_default_size (
- GTK_WINDOW (dialog), data->width, data->height);
+ gtk_window_set_default_size (GTK_WINDOW (dialog),
+ data->width, data->height);
if (data->modal)
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
- if (data->extra_label) {
- gint i = 0;
- while (data->extra_label[i] != NULL) {
- gtk_dialog_add_button (
- GTK_DIALOG (dialog), data->extra_label[i], i);
- i++;
- }
+ if (data->extra_label)
+ {
+ ZENITY_UTIL_ADD_EXTRA_LABELS (dialog)
}
- if (data->ok_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_entry_ok_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
+ if (data->ok_label)
+ {
+ ZENITY_UTIL_SETUP_OK_BUTTON_LABEL (dialog);
}
- if (data->cancel_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_entry_cancel_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
+ if (data->cancel_label)
+ {
+ ZENITY_UTIL_SETUP_CANCEL_BUTTON_LABEL (dialog);
}
text = gtk_builder_get_object (builder, "zenity_entry_text");
- if (entry_data->dialog_text)
- gtk_label_set_text_with_mnemonic (
- GTK_LABEL (text), g_strcompress (entry_data->dialog_text));
+ if (entry_data->dialog_text) {
+ gtk_label_set_text_with_mnemonic (GTK_LABEL (text),
+ g_strcompress (entry_data->dialog_text));
+ }
vbox = gtk_builder_get_object (builder, "vbox4");
@@ -120,78 +113,97 @@ zenity_entry (ZenityData *data, ZenityEntryData *entry_data) {
n_entries = g_slist_length (entries);
- if (n_entries > 1) {
+ if (n_entries > 1)
+ {
+ GtkWidget *child;
+
entry = gtk_combo_box_text_new_with_entry ();
+ child = gtk_combo_box_get_child (GTK_COMBO_BOX(entry));
- for (tmp = entries; tmp; tmp = tmp->next) {
- gtk_combo_box_text_append_text (
- GTK_COMBO_BOX_TEXT (entry), tmp->data);
+ for (tmp = entries; tmp; tmp = tmp->next)
+ {
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(entry),
+ tmp->data);
}
- if (entry_data->entry_text) {
- gtk_combo_box_text_prepend_text (
- GTK_COMBO_BOX_TEXT (entry), entry_data->entry_text);
- gtk_combo_box_set_active (GTK_COMBO_BOX (entry), 0);
+ if (entry_data->entry_text)
+ {
+ gtk_combo_box_text_prepend_text (GTK_COMBO_BOX_TEXT(entry),
+ entry_data->entry_text);
+ gtk_combo_box_set_active (GTK_COMBO_BOX(entry), 0);
}
- g_signal_connect (gtk_bin_get_child (GTK_BIN (entry)),
- "activate",
+ g_signal_connect (child, "activate",
G_CALLBACK (zenity_entry_combo_activate_default),
GTK_WINDOW (dialog));
- } else {
+ }
+ else
+ {
+ GtkEntryBuffer *buffer;
+
entry = gtk_entry_new ();
+ buffer = gtk_entry_get_buffer (GTK_ENTRY(entry));
- gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
+ gtk_entry_set_activates_default (GTK_ENTRY(entry), TRUE);
- if (entry_data->entry_text)
- gtk_entry_set_text (GTK_ENTRY (entry), entry_data->entry_text);
+ if (entry_data->entry_text) {
+ gtk_entry_buffer_set_text (buffer, entry_data->entry_text, -1);
+ }
- if (entry_data->hide_text)
- g_object_set (G_OBJECT (entry), "visibility", FALSE, NULL);
+ if (entry_data->hide_text) {
+ gtk_entry_set_visibility (GTK_ENTRY(entry), FALSE);
+ }
}
- gtk_widget_show (entry);
-
- gtk_box_pack_end (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
+ gtk_box_append (GTK_BOX(vbox), entry);
gtk_label_set_mnemonic_widget (GTK_LABEL (text), entry);
- g_object_unref (builder);
-
- zenity_util_show_dialog (dialog, data->attach);
+ zenity_util_show_dialog (dialog);
if (data->timeout_delay > 0) {
g_timeout_add_seconds (data->timeout_delay,
(GSourceFunc) zenity_util_timeout_handle,
dialog);
}
-
- gtk_main ();
+ zenity_util_gapp_main (GTK_WINDOW(dialog));
}
static void
-zenity_entry_dialog_output (void) {
- const gchar *text;
+zenity_entry_dialog_output (void)
+{
+ const char *text;
+
if (n_entries > 1)
- text = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (entry));
+ {
+ text = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(entry));
+ }
else
- text = gtk_entry_get_text (GTK_ENTRY (entry));
+ {
+ GtkEntryBuffer *buffer;
+
+ buffer = gtk_entry_get_buffer (GTK_ENTRY(entry));
+ text = gtk_entry_buffer_get_text (buffer);
+ }
if (text != NULL)
g_print ("%s\n", text);
}
static void
-zenity_entry_dialog_response (GtkWidget *widget, int response, gpointer data) {
+zenity_entry_dialog_response (GtkWidget *widget, char *rstr, gpointer data)
+{
ZenityData *zen_data = data;
+ ZenityExitCode response = zenity_util_parse_dialog_response (rstr);
- switch (response) {
- case GTK_RESPONSE_OK:
+ switch (response)
+ {
+ case ZENITY_OK:
zenity_entry_dialog_output ();
zenity_util_exit_code_with_data (ZENITY_OK, zen_data);
break;
- case GTK_RESPONSE_CANCEL:
+ case ZENITY_CANCEL:
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
break;
@@ -202,10 +214,10 @@ zenity_entry_dialog_response (GtkWidget *widget, int response, gpointer data) {
default:
if (zen_data->extra_label &&
- response < g_strv_length (zen_data->extra_label))
+ response < (int)g_strv_length (zen_data->extra_label))
printf ("%s\n", zen_data->extra_label[response]);
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
break;
}
- gtk_main_quit ();
+ zenity_util_gapp_quit (GTK_WINDOW(widget), zen_data);
}
diff --git a/src/fileselection.c b/src/fileselection.c
index 465f08a..cf6a481 100644
--- a/src/fileselection.c
+++ b/src/fileselection.c
@@ -1,142 +1,119 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* fileselection.c
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
- * Authors: Glynn Foster <glynn.foster@sun.com>
+ * Original Author: Glynn Foster <glynn.foster@sun.com>
*/
-#include "config.h"
-
#include "util.h"
#include "zenity.h"
+
#include <string.h>
+#include <config.h>
+
+/* TODO: port to GtkFileDialog.
+ */
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+
static ZenityData *zen_data;
-static void zenity_fileselection_dialog_response (
- gpointer obj, int response, gpointer data);
+static void zenity_fileselection_dialog_response (GtkWidget *widget, int response, gpointer data);
void
-zenity_fileselection (ZenityData *data, ZenityFileData *file_data) {
- gchar *dir;
- gchar *basename;
+zenity_fileselection (ZenityData *data, ZenityFileData *file_data)
+{
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
-#if GTK_CHECK_VERSION(3, 20, 0)
GtkFileChooserNative *dialog;
-#else
- GtkWidget *dialog;
-#endif
zen_data = data;
if (file_data->directory) {
- if (file_data->save)
- action = GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
- else
- action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
- } else {
- if (file_data->save)
- action = GTK_FILE_CHOOSER_ACTION_SAVE;
+ action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
+ }
+ else if (file_data->save) {
+ action = GTK_FILE_CHOOSER_ACTION_SAVE;
}
-#if GTK_CHECK_VERSION(3, 20, 0)
dialog = gtk_file_chooser_native_new (data->dialog_title,
- NULL, /* TODO: Get parent from xid */
+ NULL, /* parent */
action,
- _ ("_OK"),
- _ ("_Cancel"));
+ _("_OK"),
+ _("_Cancel"));
if (data->modal)
- gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE);
+ gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG(dialog), TRUE);
if (data->extra_label)
g_warning ("Cannot add extra labels to GtkFileChooserNative");
-#else
- dialog = gtk_file_chooser_dialog_new (NULL,
- NULL,
- action,
- _ ("_Cancel"),
- GTK_RESPONSE_CANCEL,
- _ ("_OK"),
- GTK_RESPONSE_ACCEPT,
- NULL);
- if (data->dialog_title)
- gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
+ g_signal_connect (dialog, "response", G_CALLBACK(zenity_fileselection_dialog_response), file_data);
- if (data->modal)
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
- zenity_util_set_window_icon (
- dialog, data->window_icon, ZENITY_IMAGE_FULLPATH ("zenity-file.png"));
+ if (file_data->uri)
+ {
+ if (g_path_is_absolute (file_data->uri) == TRUE)
+ {
+ g_autofree char *dir = g_path_get_dirname (file_data->uri);
+ g_autoptr(GFile) dir_gfile = g_file_new_for_path (dir);
- if (data->extra_label) {
- gint i = 0;
- while (data->extra_label[i] != NULL) {
- gtk_dialog_add_button (
- GTK_DIALOG (dialog), data->extra_label[i], i);
- i++;
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog),
+ dir_gfile,
+ NULL); /* GError */
}
- }
-#endif
-
- gtk_file_chooser_set_do_overwrite_confirmation (
- GTK_FILE_CHOOSER (dialog), file_data->confirm_overwrite);
-
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_fileselection_dialog_response),
- file_data);
-
- if (file_data->uri) {
- dir = g_path_get_dirname (file_data->uri);
-
- if (g_path_is_absolute (file_data->uri) == TRUE)
- gtk_file_chooser_set_current_folder (
- GTK_FILE_CHOOSER (dialog), dir);
- if (file_data->uri[strlen (file_data->uri) - 1] != '/') {
- basename = g_path_get_basename (file_data->uri);
+ if (file_data->uri[strlen (file_data->uri) - 1] != '/')
+ {
if (file_data->save)
- gtk_file_chooser_set_current_name (
- GTK_FILE_CHOOSER (dialog), basename);
+ {
+ g_autofree char *basename = g_path_get_basename (file_data->uri);
+
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog),
+ basename);
+ }
else
- (void) gtk_file_chooser_set_filename (
- GTK_FILE_CHOOSER (dialog), file_data->uri);
- g_free (basename);
+ {
+ g_autoptr(GFile) file = g_file_new_for_uri (file_data->uri);
+
+ gtk_file_chooser_set_file (GTK_FILE_CHOOSER(dialog),
+ file,
+ NULL); /* GError */
+ }
}
- g_free (dir);
}
if (file_data->multi)
- gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), TRUE);
+ gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER(dialog), TRUE);
- if (file_data->filter) {
+ if (file_data->filter)
+ {
/* Filter format: Executables | *.exe *.bat *.com */
- gint filter_i;
-
- for (filter_i = 0; file_data->filter[filter_i]; filter_i++) {
+ for (int filter_i = 0; file_data->filter[filter_i]; filter_i++)
+ {
GtkFileFilter *filter = gtk_file_filter_new ();
- gchar *filter_str = file_data->filter[filter_i];
- gchar **pattern, **patterns;
- gchar *name = NULL;
- gint i;
+ char *filter_str = file_data->filter[filter_i];
+ GStrv pattern;
+ g_auto(GStrv) patterns = NULL;
+ g_autofree char *name = NULL;
+ int i;
/* Set name */
for (i = 0; filter_str[i] != '\0'; i++)
@@ -165,20 +142,10 @@ zenity_fileselection (ZenityData *data, ZenityFileData *file_data) {
for (pattern = patterns; *pattern; pattern++)
gtk_file_filter_add_pattern (filter, *pattern);
- if (name)
- g_free (name);
-
- g_strfreev (patterns);
-
- gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter);
}
}
-
-#if GTK_CHECK_VERSION(3, 20, 0)
gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog));
-#else
- zenity_util_show_dialog (dialog, data->attach);
-#endif
if (data->timeout_delay > 0) {
g_timeout_add_seconds (data->timeout_delay,
@@ -186,39 +153,47 @@ zenity_fileselection (ZenityData *data, ZenityFileData *file_data) {
dialog);
}
- gtk_main ();
+ /* Since a native dialog is not a GtkWindow, we can't use our handy
+ * util function.
+ */
+ gtk_native_dialog_show (GTK_NATIVE_DIALOG(dialog));
+
+ zenity_util_gapp_main (NULL);
}
static void
-zenity_fileselection_dialog_output (
- GtkFileChooser *chooser, ZenityFileData *file_data) {
- GSList *selections, *iter;
- selections = gtk_file_chooser_get_filenames (chooser);
- for (iter = selections; iter != NULL; iter = iter->next) {
- g_print ("%s",
- g_filename_to_utf8 ((gchar *) iter->data, -1, NULL, NULL, NULL));
- g_free (iter->data);
- if (iter->next != NULL)
+zenity_fileselection_dialog_output (GtkFileChooser *chooser,
+ ZenityFileData *file_data)
+{
+ g_autoptr(GListModel) model = gtk_file_chooser_get_files (chooser);
+ guint items = g_list_model_get_n_items (model);
+
+ for (guint i = 0; i < items; ++i)
+ {
+ g_autoptr(GFile) file = g_list_model_get_item (model, i);
+
+ g_print ("%s", g_file_get_path (file));
+
+ if (i != items - 1)
g_print ("%s", file_data->separator);
}
g_print ("\n");
- g_slist_free (selections);
}
static void
-zenity_fileselection_dialog_response (
- gpointer obj, int response, gpointer data) {
+zenity_fileselection_dialog_response (GtkWidget *widget, int response, gpointer data)
+{
ZenityFileData *file_data = data;
+ GtkFileChooser *chooser = GTK_FILE_CHOOSER (widget);
- GtkFileChooser *chooser = GTK_FILE_CHOOSER (obj);
-
- switch (response) {
+ switch (response)
+ {
case GTK_RESPONSE_ACCEPT:
zenity_fileselection_dialog_output (chooser, file_data);
zenity_util_exit_code_with_data (ZENITY_OK, zen_data);
break;
- case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_REJECT:
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
break;
@@ -229,10 +204,13 @@ zenity_fileselection_dialog_response (
default:
if (zen_data->extra_label &&
- response < g_strv_length (zen_data->extra_label))
+ response < (int)g_strv_length (zen_data->extra_label)) {
printf ("%s\n", zen_data->extra_label[response]);
+ }
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
break;
}
- gtk_main_quit ();
+ zenity_util_gapp_quit (NULL, zen_data);
}
+
+G_GNUC_END_IGNORE_DEPRECATIONS
diff --git a/src/forms.c b/src/forms.c
index 15df718..4e4a60e 100644
--- a/src/forms.c
+++ b/src/forms.c
@@ -1,47 +1,54 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* forms.c
*
- * Copyright (C) 2010 Arx Cruz
+ * Copyright © 2010 Arx Cruz
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 121 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
- * Authors: Arx Cruz <arxcruz@gnome.org>
+ * Original Author: Arx Cruz <arxcruz@gnome.org>
*/
-#include "config.h"
#include "util.h"
#include "zenity.h"
+
#include <string.h>
+#include <config.h>
+
static ZenityData *zen_data;
static GSList *selected;
-static void zenity_forms_dialog_response (
- GtkWidget *widget, int response, gpointer data);
+static void zenity_forms_dialog_response (GtkWidget *widget, char *rstr, gpointer data);
static void
zenity_forms_dialog_get_selected (GtkTreeModel *model, GtkTreePath *path_buf,
- GtkTreeIter *iter, GtkTreeView *tree_view) {
- gint n_columns = 0;
- gint i = 0;
- GValue value = {
- 0,
- };
+ GtkTreeIter *iter, gpointer data)
+{
+ int n_columns = 0;
+ GValue value = G_VALUE_INIT;
+ GtkTreeView *tree_view = GTK_TREE_VIEW(data);
+
+ g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
n_columns = gtk_tree_model_get_n_columns (model);
- for (i = 0; i < n_columns; i++) {
+
+ for (int i = 0; i < n_columns; ++i)
+ {
gtk_tree_model_get_value (model, iter, i, &value);
selected = g_slist_append (selected, g_value_dup_string (&value));
g_value_unset (&value);
@@ -49,95 +56,115 @@ zenity_forms_dialog_get_selected (GtkTreeModel *model, GtkTreePath *path_buf,
}
static GtkWidget *
-zenity_forms_create_and_fill_combo (
- ZenityFormsData *forms_data, int combo_number) {
- GtkListStore *list_store;
+zenity_forms_create_and_fill_combo (ZenityFormsData *forms_data,
+ int combo_number)
+{
+ g_autoptr(GtkListStore) list_store = NULL;
GtkWidget *combo_box;
GtkCellRenderer *renderer;
- gchar *combo_values;
list_store = gtk_list_store_new (1, G_TYPE_STRING);
- if (forms_data->combo_values) {
- combo_values =
+ if (forms_data->combo_values)
+ {
+ g_autofree char *combo_values =
g_slist_nth_data (forms_data->combo_values, combo_number);
- if (combo_values) {
- gchar **row_values = g_strsplit_set (combo_values, "|", -1);
- if (row_values) {
- gint i = 0;
+
+ if (combo_values)
+ {
+ char **row_values = g_strsplit_set (combo_values, "|", -1);
+
+ if (row_values)
+ {
+ int i = 0;
GtkTreeIter iter;
- gchar *row = row_values[i];
+ char *row = row_values[i];
- while (row != NULL) {
+ while (row != NULL)
+ {
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter, 0, row, -1);
row = row_values[++i];
}
g_strfreev (row_values);
}
- g_free (combo_values);
}
}
- combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (list_store));
- g_object_unref (G_OBJECT (list_store));
+ combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL(list_store));
renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, TRUE);
- gtk_cell_layout_set_attributes (
- GTK_CELL_LAYOUT (combo_box), renderer, "text", 0, NULL);
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(combo_box),
+ renderer,
+ TRUE); /* gboolean expand */
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT(combo_box), renderer,
+ "text", 0,
+ NULL);
return combo_box;
}
static GtkWidget *
-zenity_forms_create_and_fill_list (
- ZenityFormsData *forms_data, int list_number, gchar *header) {
- GtkListStore *list_store;
+zenity_forms_create_and_fill_list (ZenityFormsData *forms_data,
+ int list_number, char *header)
+{
+ g_autoptr(GtkListStore) list_store = NULL;
GtkWidget *tree_view;
GtkWidget *scrolled_window;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
GType *column_types = NULL;
- gchar *list_values;
- gchar *column_values;
- gint i = 0;
+ int i = 0;
/* If no column names available, default is one */
- gint n_columns = 1;
- gint column_index = 0;
+ int n_columns = 1;
+ int column_index = 0;
tree_view = gtk_tree_view_new ();
- if (forms_data->column_values) {
- int columns_values_count =
- g_slist_length (forms_data->column_values);
+ if (forms_data->column_values)
+ {
+ char *column_values;
+ int columns_values_count = g_slist_length (forms_data->column_values);
int column_number = 0;
+
if (list_number < columns_values_count) {
column_number = list_number;
}
- column_values =
- g_slist_nth_data (forms_data->column_values, column_number);
- if (column_values) {
- gchar **values = g_strsplit_set (column_values, "|", -1);
- if (values) {
+ column_values = g_slist_nth_data (forms_data->column_values,
+ column_number);
+
+ if (column_values)
+ {
+ char **values = g_strsplit_set (column_values, "|", -1);
+
+ if (values)
+ {
n_columns = g_strv_length (values);
column_types = g_new (GType, n_columns);
+
for (i = 0; i < n_columns; i++)
column_types[i] = G_TYPE_STRING;
- for (i = 0; i < n_columns; i++) {
- gchar *column_name = values[i];
+ for (i = 0; i < n_columns; i++)
+ {
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ char *column_name = values[i];
+
renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (
- column_name, renderer, "text", column_index, NULL);
- gtk_tree_view_append_column (
- GTK_TREE_VIEW (tree_view), column);
+ column =
+ gtk_tree_view_column_new_with_attributes (column_name,
+ renderer,
+ "text", column_index,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),
+ column);
column_index++;
}
}
- } else {
+ }
+ else
+ {
/* If no values available, add one with string type*/
column_types = g_new (GType, n_columns);
column_types[0] = G_TYPE_STRING;
@@ -148,18 +175,26 @@ zenity_forms_create_and_fill_list (
gtk_list_store_set_column_types (list_store, n_columns, column_types);
- if (forms_data->list_values) {
- list_values = g_slist_nth_data (forms_data->list_values, list_number);
- if (list_values) {
- gchar **row_values = g_strsplit_set (list_values, "|", -1);
- if (row_values) {
+ if (forms_data->list_values)
+ {
+ g_autofree char *list_values =
+ g_slist_nth_data (forms_data->list_values, list_number);
+
+ if (list_values)
+ {
+ char **row_values = g_strsplit_set (list_values, "|", -1);
+
+ if (row_values)
+ {
GtkTreeIter iter;
- gchar *row = row_values[0];
- gint position = -1;
+ char *row = row_values[0];
+ int position = -1;
i = 0;
- while (row != NULL) {
- if (position >= n_columns || position == -1) {
+ while (row != NULL)
+ {
+ if (position >= n_columns || position == -1)
+ {
position = 0;
gtk_list_store_append (list_store, &iter);
}
@@ -169,34 +204,29 @@ zenity_forms_create_and_fill_list (
}
g_strfreev (row_values);
}
- g_free (list_values);
}
}
- gtk_tree_view_set_model (
- GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (list_store));
- g_object_unref (list_store);
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- // gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW
- // (scrolled_window),
- // GTK_WIDGET (tree_view));
- gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (tree_view));
- gtk_widget_set_size_request (GTK_WIDGET (scrolled_window), -1, 100);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view),
+ GTK_TREE_MODEL (list_store));
gtk_tree_view_set_headers_visible (
GTK_TREE_VIEW (tree_view), forms_data->show_header);
+ scrolled_window = gtk_scrolled_window_new ();
+ gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW(scrolled_window),
+ tree_view);
+ gtk_widget_set_size_request (scrolled_window, -1, 100);
+
return scrolled_window;
}
void
-zenity_forms_dialog (ZenityData *data, ZenityFormsData *forms_data) {
- GtkBuilder *builder = NULL;
+zenity_forms_dialog (ZenityData *data, ZenityFormsData *forms_data)
+{
+ g_autoptr(GtkBuilder) builder = NULL;
GtkWidget *dialog;
GtkWidget *grid;
GtkWidget *text;
- GtkWidget *button;
-
- GSList *tmp;
int list_count = 0;
int combo_count = 0;
@@ -204,49 +234,40 @@ zenity_forms_dialog (ZenityData *data, ZenityFormsData *forms_data) {
zen_data = data;
- builder = zenity_util_load_ui_file ("zenity_forms_dialog", NULL);
+ builder = zenity_util_load_ui_file ("zenity_forms_dialog", "zenity_forms_box", NULL);
if (builder == NULL) {
data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
return;
}
- gtk_builder_connect_signals (builder, NULL);
+ dialog = GTK_WIDGET(gtk_builder_get_object (builder,
+ "zenity_forms_dialog"));
- dialog =
- GTK_WIDGET (gtk_builder_get_object (builder, "zenity_forms_dialog"));
-
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_forms_dialog_response),
- forms_data);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (zenity_forms_dialog_response), forms_data);
if (data->dialog_title)
- gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
-
- if (data->width > -1 || data->height > -1)
- gtk_window_set_default_size (
- GTK_WINDOW (dialog), data->width, data->height);
-
- if (data->extra_label) {
- gint i = 0;
- while (data->extra_label[i] != NULL) {
- gtk_dialog_add_button (
- GTK_DIALOG (dialog), data->extra_label[i], i);
- i++;
- }
+ gtk_window_set_title (GTK_WINDOW(dialog), data->dialog_title);
+
+ if (data->width > -1 || data->height > -1) {
+ gtk_window_set_default_size (GTK_WINDOW(dialog),
+ data->width, data->height);
+ }
+
+ if (data->extra_label)
+ {
+ ZENITY_UTIL_ADD_EXTRA_LABELS (dialog)
}
- if (data->ok_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_forms_ok_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
+ if (data->ok_label)
+ {
+ ZENITY_UTIL_SETUP_OK_BUTTON_LABEL (dialog);
}
- if (data->cancel_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_forms_cancel_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
+ if (data->cancel_label)
+ {
+ ZENITY_UTIL_SETUP_CANCEL_BUTTON_LABEL (dialog);
}
text = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_forms_text"));
@@ -257,37 +278,48 @@ zenity_forms_dialog (ZenityData *data, ZenityFormsData *forms_data) {
grid = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_forms_grid"));
- for (tmp = forms_data->list; tmp; tmp = tmp->next) {
- ZenityFormsValue *zenity_value = (ZenityFormsValue *) tmp->data;
+ i = 0;
+ for (GSList *tmp = forms_data->list;
+ tmp != NULL;
+ tmp = tmp->next)
+ {
+ ZenityFormsValue *zenity_value = tmp->data;
GtkWidget *label;
label = gtk_label_new (zenity_value->option_value);
gtk_widget_set_halign (label, GTK_ALIGN_START);
gtk_grid_attach (GTK_GRID (grid), label, 0, i, 1, 1);
- switch (zenity_value->type) {
+ switch (zenity_value->type)
+ {
case ZENITY_FORMS_ENTRY:
zenity_value->forms_widget = gtk_entry_new ();
break;
+
case ZENITY_FORMS_PASSWORD:
zenity_value->forms_widget = gtk_entry_new ();
- gtk_entry_set_visibility (
- GTK_ENTRY (zenity_value->forms_widget), FALSE);
+ gtk_entry_set_visibility (GTK_ENTRY(zenity_value->forms_widget),
+ FALSE);
break;
+
case ZENITY_FORMS_CALENDAR:
zenity_value->forms_widget = gtk_calendar_new ();
break;
+
case ZENITY_FORMS_LIST:
- zenity_value->forms_widget = zenity_forms_create_and_fill_list (
- forms_data, list_count, zenity_value->option_value);
+ zenity_value->forms_widget =
+ zenity_forms_create_and_fill_list (forms_data,
+ list_count, zenity_value->option_value);
list_count++;
break;
+
case ZENITY_FORMS_COMBO:
zenity_value->forms_widget =
- zenity_forms_create_and_fill_combo (
- forms_data, combo_count);
+ zenity_forms_create_and_fill_combo (forms_data,
+ combo_count);
combo_count++;
break;
+
default:
zenity_value->forms_widget = gtk_entry_new ();
break;
@@ -300,90 +332,98 @@ zenity_forms_dialog (ZenityData *data, ZenityFormsData *forms_data) {
1,
1);
- i++;
+ ++i;
}
- gtk_widget_show_all (GTK_WIDGET (dialog));
+ zenity_util_show_dialog (dialog);
- g_object_unref (builder);
-
- if (data->timeout_delay > 0) {
+ if (data->timeout_delay > 0)
+ {
g_timeout_add_seconds (data->timeout_delay,
(GSourceFunc) zenity_util_timeout_handle,
dialog);
}
-
- gtk_main ();
+ zenity_util_gapp_main (GTK_WINDOW(dialog));
}
static void
-zenity_forms_dialog_output (ZenityFormsData *forms_data) {
+zenity_forms_dialog_output (ZenityFormsData *forms_data)
+{
GSList *tmp, *tmp2;
guint day, year, month;
- GDate *date = NULL;
- gchar time_string[128];
- gchar *combo_value = NULL;
+ g_autoptr(GDate) date = NULL;
+ char time_string[128];
+ g_autofree char *combo_value = NULL;
GtkTreeSelection *selection;
- GtkListStore *list_store;
+ g_autoptr(GtkListStore) list_store = NULL;
GtkTreeIter iter;
- for (tmp = forms_data->list; tmp; tmp = tmp->next) {
- ZenityFormsValue *zenity_value = (ZenityFormsValue *) tmp->data;
- switch (zenity_value->type) {
+ for (tmp = forms_data->list; tmp; tmp = tmp->next)
+ {
+ ZenityFormsValue *zenity_value = tmp->data;
+
+ switch (zenity_value->type)
+ {
case ZENITY_FORMS_PASSWORD:
case ZENITY_FORMS_ENTRY:
g_print ("%s",
- gtk_entry_get_text (
- GTK_ENTRY (zenity_value->forms_widget)));
+ gtk_entry_buffer_get_text (gtk_entry_get_buffer
+ (GTK_ENTRY(zenity_value->forms_widget))));
break;
+
case ZENITY_FORMS_LIST:
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (
- gtk_bin_get_child (GTK_BIN (zenity_value->forms_widget))));
+ selection =
+ gtk_tree_view_get_selection
+ (GTK_TREE_VIEW(gtk_scrolled_window_get_child
+ (GTK_SCROLLED_WINDOW(zenity_value->forms_widget))));
+
gtk_tree_selection_selected_foreach (selection,
- (GtkTreeSelectionForeachFunc)
- zenity_forms_dialog_get_selected,
- GTK_TREE_VIEW (gtk_bin_get_child (
- GTK_BIN (zenity_value->forms_widget))));
+ zenity_forms_dialog_get_selected,
+ GTK_TREE_VIEW(gtk_scrolled_window_get_child
+ (GTK_SCROLLED_WINDOW(zenity_value->forms_widget))));
- for (tmp2 = selected; tmp2; tmp2 = tmp2->next) {
+ for (tmp2 = selected; tmp2; tmp2 = tmp2->next)
+ {
if (tmp->next != NULL) {
- g_print ("%s,", (gchar *) tmp2->data);
+ g_print ("%s,", (char *)tmp2->data);
} else
- g_print ("%s", (gchar *) tmp2->data);
+ g_print ("%s", (char *)tmp2->data);
}
- g_slist_foreach (selected, (GFunc) g_free, NULL);
- selected = NULL;
-
+ g_slist_free_full (g_steal_pointer (&selected), g_free);
break;
+
case ZENITY_FORMS_CALENDAR:
- gtk_calendar_get_date (
- GTK_CALENDAR (zenity_value->forms_widget),
- &day,
- &month,
- &year);
- date = g_date_new_dmy (year, month + 1, day);
- g_date_strftime (
- time_string, 127, forms_data->date_format, date);
+ g_object_get (zenity_value->forms_widget,
+ "day", &day,
+ "month", &month,
+ "year", &year,
+ NULL);
+ date = g_date_new_dmy (day, month + 1, year);
+ g_date_strftime (time_string, sizeof time_string, forms_data->date_format, date);
g_print ("%s", time_string);
break;
+
case ZENITY_FORMS_COMBO:
- if (gtk_combo_box_get_active_iter (
- GTK_COMBO_BOX (zenity_value->forms_widget), &iter)) {
- list_store = GTK_LIST_STORE (gtk_combo_box_get_model (
- GTK_COMBO_BOX (zenity_value->forms_widget)));
- gtk_tree_model_get (GTK_TREE_MODEL (list_store),
+ if (gtk_combo_box_get_active_iter
+ (GTK_COMBO_BOX(zenity_value->forms_widget), &iter))
+ {
+ list_store =
+ GTK_LIST_STORE(gtk_combo_box_get_model
+ (GTK_COMBO_BOX(zenity_value->forms_widget)));
+
+ gtk_tree_model_get (GTK_TREE_MODEL(list_store),
&iter,
0,
&combo_value,
-1);
- g_object_unref (G_OBJECT (list_store));
g_print ("%s", combo_value);
- g_free (combo_value);
- } else
+ }
+ else
g_print (" ");
break;
+
}
if (tmp->next != NULL)
g_print ("%s", forms_data->separator);
@@ -392,16 +432,19 @@ zenity_forms_dialog_output (ZenityFormsData *forms_data) {
}
static void
-zenity_forms_dialog_response (GtkWidget *widget, int response, gpointer data) {
- ZenityFormsData *forms_data = (ZenityFormsData *) data;
-
- switch (response) {
- case GTK_RESPONSE_OK:
+zenity_forms_dialog_response (GtkWidget *widget, char *rstr, gpointer data)
+{
+ ZenityFormsData *forms_data = data;
+ ZenityExitCode response = zenity_util_parse_dialog_response (rstr);
+
+ switch (response)
+ {
+ case ZENITY_OK:
zenity_forms_dialog_output (forms_data);
zenity_util_exit_code_with_data (ZENITY_OK, zen_data);
break;
- case GTK_RESPONSE_CANCEL:
+ case ZENITY_CANCEL:
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
break;
@@ -412,11 +455,10 @@ zenity_forms_dialog_response (GtkWidget *widget, int response, gpointer data) {
default:
if (zen_data->extra_label &&
- response < g_strv_length (zen_data->extra_label))
+ response < (int)g_strv_length (zen_data->extra_label))
printf ("%s\n", zen_data->extra_label[response]);
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
break;
}
-
- gtk_main_quit ();
+ zenity_util_gapp_quit (GTK_WINDOW(widget), zen_data);
}
diff --git a/src/gdialog.in b/src/gdialog.in
deleted file mode 100755
index 2fc4633..0000000
--- a/src/gdialog.in
+++ /dev/null
@@ -1,353 +0,0 @@
-#!@PERL@
-
-# gdialog -> zenity conversion wrapper
-#
-# by Mike Newman <mikegtn@gnome.org>
-#
-# This is all, of course, horrible - but it should translate
-# most commond gdialog types to zenity equivalents. It will mostly drop
-# the pointless and unused (even by gdialog!) size arguments
-# but hopefully will translate all the others.
-#
-# For testing purposes, I've used a couple of the nautilus scripts
-# available at http://g-scripts.sourceforge.net - what is sometimes
-# unclear is what is a gdialog/zenity translation problem, and what is
-# a problem with the original script
-
-my @command = ("zenity"); # the command line we build up to execute
-my $element = ""; # current bit of command line
-my $argn = 0; # counter for walking args
-my $args = $#ARGV + 1; # total number of command line arguments
-my $separator = 0; # set if --separate-output is in use
-
-
-# Additon by: Kevin C. Krinke (kck) <kckrinke@opendoorsoftware.com>
-#
-# gdialog itself supports both the X-Windows interface as well as a console
-# interface. Here's a fix to use regular dialog when appropriate.
-# This should probably be a more advanced test of some sort, but I don't know
-# of any other easy way of detecting and X-Windows environment. If someone does
-# know better, please let me know. So for now this works: "no DISPLAY; no X".
-
-unless (defined $ENV{'DISPLAY'} && length($ENV{'DISPLAY'})) {
-
- # reset the command string
-
- @command = ();
-
- # examine all the available/default paths
-
- my $PATHS = ($ENV{'PATH'}||'/bin:/usr/bin:/usr/local/bin:/opt/bin');
-
- BIN: foreach my $PATH (split(/\:/,$PATHS)) {
-
- if (-x $PATH."/gdialog.real") {
-
- # Some GNU/Linux distributions divert binaries when
- # other packages are installed. If this exists, chances
- # are it's the real gdialog and not the Zenity wrapper.
- # gdialog has full support for the Console medium and
- # as such is the preference over using the "regular"
- # dialog interface.
-
- @command = ($PATH."/gdialog.real");
- last BIN;
-
- } elsif (-x $PATH."/dialog") {
-
- # change the command and skip ahead!
-
- @command = ($PATH."/dialog");
- last BIN;
-
- }
-
-
- }
-
- unless (@command) {
-
- # we didn't find the dialog binary, exit(254) with a message
- # to STDERR.
-
- print STDERR "missing DISPLAY and a console dialog could".
- " not be found.\n";
-
- # exit code 254 is used because 255, 1, 2, 3 are used by Zenity
- # and cDialog. This error, is a very _bad_ error so it's semi-
- # non-standard at 254.
-
- exit(254);
-
- }
-
- # all is well if we've made it this far
-
- # so join the arguments double-quoting things so that proper shell
- # notation is saved.
-
- push @command, @ARGV;
-
- # and fork the process
-
- exec(@command);
-
-}
-
-# Got DISPLAY, has X continue as normal...
-# End Addtition by: KCK
-
-# this just loads the current arg into $element
-
-sub get_arg () {
- $element = $ARGV[$argn];
-}
-
-# walk the command line
-
-ARG: while ($argn < $args) {
-
- get_arg;
-
-# Informational stuff
-
- if ($element eq "--help" || $element eq "--about") {
- print ( "gdialog is a compatibility wrapper around zenity, " .
- "provided to hopefully\nallow older scripts to run. " .
- "If you are reading this message, you should\n" .
- "probably be using zenity directly\n\n" .
- "type: 'zenity --help' or 'man zenity' for more information\n");
- exit (1);
- }
-
-# Section 1 : Args which gdialog expects BEFORE box options
-# --clear, --backtitle have no obvious effect - ignored
-
- if ($element eq "--title") {
-
- # --title argument is almost analogous in gdialog and
- # zenity - so pass it almost entirely as is
-
- $argn++;
- get_arg;
- push @command, "--title=$element";
-
- # keep processing args
- $argn++;
- next ARG;
- }
-
- if ($element eq "--separate-output") {
-
- # set the flag to pring list output line by line
- $separator = 1;
-
- # keep processing args
- $argn++;
- next ARG;
- }
-
-# Section 2 : Box Options and subsequent args
-
- if ($element eq "--msgbox" || $element eq "--infobox") {
-
- # This bit is common to almost all of the dialogs
- # the arg following the dialog type in gdialog is usually
- # equivalent to zenity's --text arg.
-
- $argn++;
- get_arg;
- push @command, "--info", "--text=$element";
-
- # this also happens a lot - gdialog accepted size args
- # for dialog compatability - which it pretty much ignored
- # and we will do the same
-
- $argn+=2;
- last ARG;
- }
-
- if ($element eq "--yesno") {
-
- # this will silently ignore the gdialog option to set
- # the default button in question dialogs - which is
- # highly hig-norant anyway!
-
- $argn++;
- get_arg;
- push @command, "--question", "--text=$element";
- last ARG;
- }
-
- if ($element eq "--inputbox") {
- $argn++;
- get_arg;
- push @command, "--entry", "--text=$element";
-
- # ignore size elements and maybe there is some
- # default text to initialize the entry with?
-
- $argn+=3;
- get_arg;
- push @command, "--entry-text=$element";
- last ARG;
- }
-
- if ($element eq "--textbox") {
- push @command, "--text-info";
-
- # the arg immediately following the dialog type in
- # gdialog is the filename, so pass this to zenity
-
- $argn++;
- get_arg;
- push @command, "--filename=$element";
-
- # width and height matter for this one, so get them
- # and apply the same multipliers as used in gdialog
-
- $argn++;
- get_arg;
- $element = $element * 7;
- push @command, "--height=$element";
- $argn++;
- get_arg;
- $element = $element * 8;
- push @command, "--width=$element";
- last ARG;
- }
-
- if ($element eq "--checklist" || $element eq "--radiolist") {
- $list=$element;
- $argn++;
- get_arg;
-
- # Conveniently, zenity and gdialog use the same names
- # for list types, so pass this to zenity intact along with
- # an untitled column for the check or radio buttons
- # and the 'text' arg as a second column header
-
- push @command, "--list", $list, "--column=''", "--column=''", "--column", $element;
-
- # should output be line by line?
- if ($separator) {
- push @command, "--separator=\n";
- }
-
- # Skip to the first 'item' arg of the list content
- # bypassing height, width and list-height
- # from here args run [tag] [item] [status] ...
-
- $argn += 4;
-
- # Loop over the remainder of the commandline
- # discarding the 'status' args of each item
- # and using the 'item' for display in our second column
- # also pass a fake NULL argument since zenity can't set
- # the status of a row like gdialog can
-
- while ($argn < $args) {
- get_arg;
- push @command, "NULL", $element;
- $argn += 1;
- get_arg;
- push @command, $element;
- $argn += 2;
- }
- last ARG;
- }
-
- if ($element eq "--menu") {
- $list=$element;
- $argn++;
- get_arg;
-
- # a gdialog --menu is just a two column zenity --list
- # Leave the first column blank (not provided)
- # Use the 'text' arg as a second column header
- # FIXME: or should it be the dialog text, or both?
-
- push @command, "--list", "--column", "", "--column", $element;
-
- # Skip to the first 'item' arg of the list content
- # after using height, width and bypassing list-height
- # from here args run [tag] [item] ...
-
- $argn += 1;
-
- get_arg;
- # Height and width in characters to be displayed, so adjust
- # cdialog uses 6 height for non-list, zenity uses ~24 pixels
- # per list entry (default font), and 103 pixels for non-list
- # This appears to be almost exact
- $element = $element*24 - 35;
- push @command, "--height", $element;
-
- $argn += 1;
- get_arg;
- # cdialog uses 6 width for non-list, zenity uses ~7 pixels
- # per character (default font), and 22 pixels for non-list
- # This is not exact, but close enough
- $element = $element*7 - 20;
- push @command, "--width", $element;
-
- $argn += 2;
-
- # Loop over the remainder of the commandline
- # keeping 'tag' args of each item (required to return)
- # and using the 'item' for display in our second column
-
- while ($argn < $args) {
- get_arg;
- push @command, $element;
- $argn += 1;
- }
- last ARG;
- }
-
- if ($element eq "--gauge") {
- $argn++;
- get_arg;
- push @command, "--progress", "--text=$element";
-
- # discard the size args as usually, and see if
- # a percentage value was supplied to initialize the
- # dialog
-
- $argn += 3;
- get_arg;
- if ($element) {
- push @command, "--percentage=$element";
- }
- last ARG;
- }
-
- $argn++;
-}
-
-# save STDOUT and STDERR
-open(ORG_STDOUT, ">&STDOUT");
-open(ORG_STDERR, ">&STDERR");
-
-# redirect STDERR to /dev/null (GTK messages ie:
-# (zenity:637): Gtk-WARNING **: Unable to locate theme engine in module_path: "mist",)
-open(STDERR, ">/dev/null");
-
-# redirect STDOUT to STDERR (gdialog direct output to STDERR by default)
-open(STDOUT, ">&ORG_STDERR");
-
-# execute the constructed zenity command line
-
-# perl doc: The return value of system() is the exit status of the
-#program as returned by the wait() call. To get the actual exit value
-# divide by 256.
-
-my $return = system(@command)/256;
-
-# restore STDOUT and STDERR
-open(STDOUT, ">&ORG_STDOUT");
-open(STDERR, ">&ORG_STDERR");
-close(ORG_STDOUT);
-close(ORG_STDERR);
-
-exit $return;
diff --git a/src/main.c b/src/main.c
index 18b2a72..ec01b41 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,120 +1,163 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* main.c
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
- * Authors: Glynn Foster <glynn.foster@sun.com>
+ * Original Author: Glynn Foster <glynn.foster@sun.com>
*/
-#include <config.h>
-
#include "option.h"
#include "zenity.h"
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <langinfo.h>
-#include <stdlib.h>
-#ifdef HAVE_LOCALE_H
+#include <adwaita.h>
#include <locale.h>
-#endif
+#include <stdlib.h>
-gint
-main (gint argc, gchar **argv) {
- ZenityParsingOptions *results;
- gint retval;
+#include <config.h>
-#ifdef HAVE_LOCALE_H
- setlocale (LC_ALL, "");
-#endif
+typedef struct {
+ int argc;
+ char **argv;
+} ZenityArgs;
- bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- gtk_init (&argc, &argv);
+static void
+command_line_cb (GApplication *app,
+ GApplicationCommandLine *command_line,
+ gpointer user_data)
+{
+ ZenityArgs *args = user_data;
+ ZenityParsingOptions *results;
- results = zenity_option_parse (argc, argv);
+ results = zenity_option_parse (args->argc, args->argv);
- switch (results->mode) {
+ switch (results->mode)
+ {
case MODE_CALENDAR:
zenity_calendar (results->data, results->calendar_data);
break;
+
case MODE_ENTRY:
- results->entry_data->data = (const gchar **) argv + 1;
+ /* allow for a series of tokens (or even a bash array!) to be
+ * passed as arguments so as to auto-populate the entry with
+ * a list of options as a combo-box.
+ */
+ results->entry_data->data = (const char **) args->argv + 1;
zenity_entry (results->data, results->entry_data);
break;
+
case MODE_ERROR:
case MODE_QUESTION:
case MODE_WARNING:
case MODE_INFO:
zenity_msg (results->data, results->msg_data);
break;
+
case MODE_SCALE:
zenity_scale (results->data, results->scale_data);
break;
+
case MODE_FILE:
zenity_fileselection (results->data, results->file_data);
break;
+
case MODE_LIST:
- results->tree_data->data = (const gchar **) argv + 1;
+ results->tree_data->data = (const char **) args->argv + 1;
zenity_tree (results->data, results->tree_data);
break;
-#ifdef HAVE_LIBNOTIFY
+
case MODE_NOTIFICATION:
zenity_notification (results->data, results->notification_data);
break;
-#endif
+
case MODE_PROGRESS:
zenity_progress (results->data, results->progress_data);
break;
+
case MODE_TEXTINFO:
zenity_text (results->data, results->text_data);
break;
+
case MODE_COLOR:
zenity_colorselection (results->data, results->color_data);
break;
+
case MODE_PASSWORD:
zenity_password_dialog (results->data, results->password_data);
break;
+
case MODE_ABOUT:
zenity_about (results->data);
break;
+
case MODE_FORMS:
zenity_forms_dialog (results->data, results->forms_data);
break;
+
case MODE_VERSION:
g_print ("%s\n", VERSION);
break;
+
case MODE_LAST:
g_printerr (_ ("You must specify a dialog type. See 'zenity "
"--help' for details\n"));
- zenity_option_free ();
exit (-1);
+
default:
g_assert_not_reached ();
- zenity_option_free ();
exit (-1);
}
- retval = results->data->exit_code;
+ g_free (args);
+}
+
+static void dummy_log_func (void) { }
+
+int
+main (int argc, char *argv[])
+{
+ ZenityArgs *args;
+ g_autoptr(AdwApplication) app = NULL;
+ int status;
+
+ /* <i18n> */
+ setlocale (LC_ALL, "");
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+ /* </i18n> */
+
+ /* Turn off g_message's from libadwaita - this is to suppress the 'this is
+ * discouraged' message re: mapping dialogs without a transient parent.
+ */
+ g_log_set_handler ("Adwaita", G_LOG_LEVEL_MESSAGE, (GLogFunc)dummy_log_func, NULL);
+
+ args = g_new0 (ZenityArgs, 1);
+ args->argc = argc;
+ args->argv = argv;
+
+ app = adw_application_new (APP_ID, G_APPLICATION_HANDLES_COMMAND_LINE);
+ g_signal_connect (app, "command-line", G_CALLBACK(command_line_cb), args);
- zenity_option_free ();
+ status = g_application_run (G_APPLICATION(app), 0, NULL);
- exit (retval);
+ return status;
}
diff --git a/src/meson.build b/src/meson.build
index 748fe31..2ee1889 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -15,15 +15,27 @@ zenity_sources = [
'scale.c',
'text.c',
'tree.c',
- 'util.c'
+ 'util.c',
]
-zenity_deps = [
- gtk_dep,
- libnotify,
- webkitgtk,
- x11
-]
+zenity_enums = gnome.mkenums_simple('zenity-enums',
+ sources: 'zenity.h',
+)
+
+zenity_res_conf = configuration_data()
+zenity_res_conf.set('resource_base_path', resource_base_path)
+
+zenity_res_in = configure_file(
+ input: 'zenity.gresource.xml.in',
+ output: 'zenity.gresource.xml',
+ configuration: zenity_res_conf
+)
+
+zenity_res = gnome.compile_resources(
+ 'zenity-resources',
+ zenity_res_in,
+ c_name: 'zenity'
+)
zenity_c_args = [
'-DG_LOG_DOMAIN="Zenity"'
@@ -31,21 +43,9 @@ zenity_c_args = [
zenity = executable(
meson.project_name(),
- zenity_sources,
+ zenity_sources + zenity_enums + zenity_res,
include_directories: zenity_root_dir,
- dependencies: zenity_deps,
c_args: zenity_c_args,
+ dependencies: [adw_dep, webkitgtk_dep],
install: true
)
-
-if perl.found()
- configure_file(
- input: 'gdialog.in',
- output: 'gdialog',
- configuration: zenity_conf,
- install_dir: zenity_bindir,
- install: true
- )
-endif
-
-install_data('zenity.ui')
diff --git a/src/msg.c b/src/msg.c
index 9265152..87a5beb 100644
--- a/src/msg.c
+++ b/src/msg.c
@@ -1,7 +1,10 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* msg.c
*
* Copyright (C) 2002 Sun Microsystems, Inc.
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -21,38 +24,17 @@
* Authors: Glynn Foster <glynn.foster@sun.com>
*/
-#include "config.h"
+#include <config.h>
#include "util.h"
#include "zenity.h"
-static void zenity_msg_dialog_response (
- GtkWidget *widget, int response, gpointer data);
-static void
-zenity_msg_construct_question_dialog (
- GtkWidget *dialog, ZenityMsgData *msg_data, ZenityData *data) {
-
- GtkWidget *cancel_button, *ok_button;
-
- cancel_button = gtk_dialog_add_button (
- GTK_DIALOG (dialog), _ ("_No"), GTK_RESPONSE_CANCEL);
- ok_button = gtk_dialog_add_button (
- GTK_DIALOG (dialog), _ ("_Yes"), GTK_RESPONSE_OK);
-
- gtk_widget_grab_focus (
- msg_data->default_cancel ? cancel_button : ok_button);
-
- if (data->cancel_label) {
- gtk_button_set_label (GTK_BUTTON (cancel_button), data->cancel_label);
- }
-
- if (data->ok_label) {
- gtk_button_set_label (GTK_BUTTON (ok_button), data->ok_label);
- }
-}
+static void zenity_msg_dialog_response (GtkWidget *widget, char *rstr, gpointer data);
+/* FIXME - Is this still necessary with gtk4? */
static void
-zenity_label_widget_clipboard_selection (GtkWidget *widget) {
+zenity_label_widget_clipboard_selection (GtkWidget *widget)
+{
/* Workaround hotfix for suspected toolkit issue:
since focus change of the dialog's focussed widget (text)
somehow currently chooses to destroy
@@ -76,52 +58,46 @@ zenity_label_widget_clipboard_selection (GtkWidget *widget) {
}
void
-zenity_msg (ZenityData *data, ZenityMsgData *msg_data) {
- GtkBuilder *builder;
+zenity_msg (ZenityData *data, ZenityMsgData *msg_data)
+{
+ g_autoptr(GtkBuilder) builder;
GtkWidget *dialog;
- GtkWidget *ok_button;
GObject *text;
GObject *image;
- switch (msg_data->mode) {
+ switch (msg_data->mode)
+ {
case ZENITY_MSG_WARNING:
- builder = zenity_util_load_ui_file ("zenity_warning_dialog", NULL);
+ builder = zenity_util_load_ui_file ("zenity_warning_dialog", "zenity_warning_box", NULL);
dialog = GTK_WIDGET (
gtk_builder_get_object (builder, "zenity_warning_dialog"));
text = gtk_builder_get_object (builder, "zenity_warning_text");
image = gtk_builder_get_object (builder, "zenity_warning_image");
- ok_button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_warning_ok_button"));
break;
case ZENITY_MSG_QUESTION:
case ZENITY_MSG_SWITCH:
- builder = zenity_util_load_ui_file ("zenity_question_dialog", NULL);
- dialog = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_question_dialog"));
+ builder = zenity_util_load_ui_file ("zenity_question_dialog", "zenity_question_box", NULL);
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder,
+ "zenity_question_dialog"));
text = gtk_builder_get_object (builder, "zenity_question_text");
image = gtk_builder_get_object (builder, "zenity_question_image");
- ok_button = NULL;
break;
case ZENITY_MSG_ERROR:
- builder = zenity_util_load_ui_file ("zenity_error_dialog", NULL);
- dialog = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_error_dialog"));
+ builder = zenity_util_load_ui_file ("zenity_error_dialog", "zenity_error_box", NULL);
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder,
+ "zenity_error_dialog"));
text = gtk_builder_get_object (builder, "zenity_error_text");
image = gtk_builder_get_object (builder, "zenity_error_image");
- ok_button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_error_ok_button"));
break;
case ZENITY_MSG_INFO:
- builder = zenity_util_load_ui_file ("zenity_info_dialog", NULL);
- dialog = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_info_dialog"));
+ builder = zenity_util_load_ui_file ("zenity_info_dialog", "zenity_info_box", NULL);
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder,
+ "zenity_info_dialog"));
text = gtk_builder_get_object (builder, "zenity_info_text");
image = gtk_builder_get_object (builder, "zenity_info_image");
- ok_button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_info_ok_button"));
break;
default:
@@ -129,18 +105,13 @@ zenity_msg (ZenityData *data, ZenityMsgData *msg_data) {
dialog = NULL;
text = NULL;
image = NULL;
- ok_button = NULL;
g_assert_not_reached ();
break;
}
- if (data->extra_label) {
- gint i = 0;
- while (data->extra_label[i] != NULL) {
- gtk_dialog_add_button (
- GTK_DIALOG (dialog), data->extra_label[i], i);
- i++;
- }
+ if (data->extra_label)
+ {
+ ZENITY_UTIL_ADD_EXTRA_LABELS (dialog)
}
if (builder == NULL) {
@@ -148,89 +119,90 @@ zenity_msg (ZenityData *data, ZenityMsgData *msg_data) {
return;
}
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_msg_dialog_response),
- data);
-
- gtk_builder_connect_signals (builder, NULL);
+ g_signal_connect (dialog, "response", G_CALLBACK(zenity_msg_dialog_response), data);
if (data->dialog_title)
gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
- if (ok_button) {
- if (data->ok_label) {
- gtk_button_set_label (GTK_BUTTON (ok_button), data->ok_label);
- }
+ if (data->ok_label)
+ {
+ ZENITY_UTIL_SETUP_OK_BUTTON_LABEL (dialog)
}
- switch (msg_data->mode) {
+ switch (msg_data->mode)
+ {
case ZENITY_MSG_WARNING:
- zenity_util_set_window_icon_from_icon_name (
- dialog, data->window_icon, "dialog-warning");
+ gtk_window_set_icon_name (GTK_WINDOW(dialog),
+ "dialog-warning");
break;
case ZENITY_MSG_QUESTION:
- zenity_util_set_window_icon_from_icon_name (
- dialog, data->window_icon, "dialog-question");
- zenity_msg_construct_question_dialog (dialog, msg_data, data);
+ gtk_window_set_icon_name (GTK_WINDOW(dialog),
+ "dialog-question");
break;
case ZENITY_MSG_SWITCH:
- zenity_util_set_window_icon_from_icon_name (
- dialog, data->window_icon, "dialog-question");
+ gtk_window_set_icon_name (GTK_WINDOW(dialog),
+ "dialog-question");
break;
case ZENITY_MSG_ERROR:
- zenity_util_set_window_icon_from_icon_name (
- dialog, data->window_icon, "dialog-error");
+ gtk_window_set_icon_name (GTK_WINDOW(dialog),
+ "dialog-error");
break;
case ZENITY_MSG_INFO:
- zenity_util_set_window_icon_from_icon_name (
- dialog, data->window_icon, "dialog-information");
+ gtk_window_set_icon_name (GTK_WINDOW(dialog),
+ "dialog-information");
break;
default:
break;
}
+ if (data->width > -1 || data->height > -1) {
+ gtk_window_set_default_size (GTK_WINDOW(dialog),
+ data->width, data->height);
+ }
- if (data->width > -1 || data->height > -1)
- gtk_window_set_default_size (
- GTK_WINDOW (dialog), data->width, data->height);
-
- if (data->width > -1)
+ if (data->width > -1) {
gtk_widget_set_size_request (GTK_WIDGET (text), data->width, -1);
+ }
else if (!msg_data->ellipsize && !msg_data->no_wrap) {
- /* The magic number 60 is taken from gtk+/gtk/ui/gtkmessagedialog.ui
- with 10 as a minimum width. */
- gtk_label_set_width_chars (GTK_LABEL (text), 10);
- gtk_label_set_max_width_chars (GTK_LABEL (text), 60);
+ /* the magic number 60 is picked from gtk+/gtk/ui/gtkmessagedialog.ui
+ */
+ gtk_label_set_max_width_chars (GTK_LABEL(text), 60);
}
if (data->modal)
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
- if (msg_data->dialog_text) {
- if (msg_data->no_markup)
+ if (msg_data->dialog_text)
+ {
+ if (msg_data->no_markup) {
gtk_label_set_text (GTK_LABEL (text), msg_data->dialog_text);
- else
- gtk_label_set_markup (
- GTK_LABEL (text), g_strcompress (msg_data->dialog_text));
+ }
+ else {
+ gtk_label_set_markup (GTK_LABEL (text),
+ g_strcompress (msg_data->dialog_text));
+ }
zenity_label_widget_clipboard_selection (GTK_WIDGET (text));
}
if (msg_data->ellipsize)
- gtk_label_set_ellipsize (GTK_LABEL (text), PANGO_ALIGN_RIGHT);
+ gtk_label_set_ellipsize (GTK_LABEL (text), PANGO_ELLIPSIZE_END);
if (msg_data->dialog_icon)
- gtk_image_set_from_icon_name (
- GTK_IMAGE (image), msg_data->dialog_icon, GTK_ICON_SIZE_DIALOG);
+ {
+ g_autoptr(GIcon) icon = NULL;
+
+ icon = zenity_util_gicon_from_string (msg_data->dialog_icon);
+ gtk_image_set_from_gicon (GTK_IMAGE (image), icon);
+ }
if (msg_data->no_wrap)
- gtk_label_set_line_wrap (GTK_LABEL (text), FALSE);
+ gtk_label_set_wrap (GTK_LABEL(text), FALSE);
- zenity_util_show_dialog (dialog, data->attach);
+ zenity_util_show_dialog (dialog);
if (data->timeout_delay > 0) {
g_timeout_add_seconds (data->timeout_delay,
@@ -238,30 +210,31 @@ zenity_msg (ZenityData *data, ZenityMsgData *msg_data) {
NULL);
}
- g_object_unref (builder);
-
- gtk_main ();
+ zenity_util_gapp_main (GTK_WINDOW(dialog));
}
static void
-zenity_msg_dialog_response (GtkWidget *widget, int response, gpointer data) {
+zenity_msg_dialog_response (GtkWidget *widget, char *rstr, gpointer data)
+{
ZenityData *zen_data = data;
+ ZenityExitCode response = zenity_util_parse_dialog_response (rstr);
- switch (response) {
- case GTK_RESPONSE_OK:
+ switch (response)
+ {
+ case ZENITY_OK:
zenity_util_exit_code_with_data (ZENITY_OK, zen_data);
break;
- case GTK_RESPONSE_CANCEL:
+ case ZENITY_CANCEL:
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
break;
default:
if (zen_data->extra_label &&
- response < g_strv_length (zen_data->extra_label))
+ response < (int)g_strv_length (zen_data->extra_label))
printf ("%s\n", zen_data->extra_label[response]);
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
break;
}
- gtk_main_quit ();
+ zenity_util_gapp_quit (GTK_WINDOW(widget), zen_data);
}
diff --git a/src/notification.c b/src/notification.c
index eb0e79e..295c1c2 100644
--- a/src/notification.c
+++ b/src/notification.c
@@ -1,8 +1,11 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* notification.c
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
- * Copyright (C) 2006 Christian Persch
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * Copyright © 2006 Christian Persch
+ * Copyright © 2021-2022 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -19,7 +22,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
- * Authors: Glynn Foster <glynn.foster@sun.com>
+ * Original Author: Glynn Foster <glynn.foster@sun.com>
*/
#include <config.h>
@@ -29,184 +32,102 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
-#ifdef HAVE_LIBNOTIFY
-#include <libnotify/notify.h>
#include "util.h"
#include "zenity.h"
#define MAX_HINTS 16
-static char *icon_file;
-static GHashTable *notification_hints;
+static void
+zenity_send_notification (GNotification *notification)
+{
+ g_application_send_notification (g_application_get_default (),
+ "zenity-notification",
+ notification);
+}
-static NotifyNotification *
-zenity_notification_new (gchar *message, gchar *icon_file) {
- NotifyNotification *notif;
- gchar **text;
+static GNotification *
+zenity_notification_new (char *message, char *icon_path)
+{
+ g_autoptr (GNotification) notif;
+ g_auto(GStrv) text = NULL;
+ /* Accept a title and optional body in the form of `my title\nmy body'.
+ * The way this is displayed by the notification system is implementation
+ * defined.
+ */
text = g_strsplit (g_strcompress (message), "\n", 2);
- if (*text == NULL) {
- g_printerr (_ ("Could not parse message\n"));
+ if (*text == NULL)
+ {
+ g_printerr (_("Could not parse message\n"));
return NULL;
}
- notif = notify_notification_new (text[0], /* title */
- text[1], /* summary */
- icon_file);
- g_strfreev (text);
- return notif;
-}
-
-static void
-on_notification_default_action (
- NotifyNotification *n, const char *action, void *user_data) {
- ZenityData *zen_data;
-
- zen_data = (ZenityData *) user_data;
- notify_notification_close (n, NULL);
+ notif = g_notification_new (text[0]); /* title */
- zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
-
- gtk_main_quit ();
-}
-
-static GHashTable *
-zenity_notification_parse_hints_array (gchar **hints) {
- GHashTable *result;
- gchar **pair;
- int i;
+ if (text[1])
+ g_notification_set_body (notif, text[1]);
- result = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ if (icon_path)
+ {
+ g_autoptr(GIcon) icon = NULL;
- for (i = 0; i < g_strv_length (hints); i++) {
- pair = g_strsplit (hints[i], ":", 2);
- g_hash_table_replace (result, g_strdup (pair[0]), g_strdup (pair[1]));
- g_strfreev (pair);
+ icon = zenity_util_gicon_from_string (icon_path);
+ g_notification_set_icon (notif, icon);
}
- if (g_hash_table_size (result) == 0) {
- g_hash_table_unref (result);
- return NULL;
- } else {
- return result;
- }
-}
-static GHashTable *
-zenity_notification_parse_hints (gchar *hints) {
- GHashTable *result;
- gchar **hint_array;
-
- hint_array = g_strsplit (g_strcompress (hints), "\n", MAX_HINTS);
- result = zenity_notification_parse_hints_array (hint_array);
- g_strfreev (hint_array);
- return result;
+ return g_steal_pointer (&notif);
}
static void
-zenity_notification_set_hint (
- gpointer key, gpointer value, gpointer user_data) {
- NotifyNotification *notification;
- gchar *hint_name;
- GVariant *hint_value;
-
- gchar *string_value;
- gboolean boolean_value;
- gint32 int_value;
- guchar byte_value;
-
- hint_name = (gchar *) key;
- string_value = (gchar *) value;
- notification = (NotifyNotification *) user_data;
-
- if ((g_ascii_strcasecmp ("action-icons", hint_name) == 0) ||
- (g_ascii_strcasecmp ("resident", hint_name) == 0) ||
- (g_ascii_strcasecmp ("suppress-sound", hint_name) == 0) ||
- (g_ascii_strcasecmp ("transient", hint_name) == 0)) {
- /* boolean hints */
- if (g_ascii_strcasecmp ("true", string_value) == 0) {
- boolean_value = TRUE;
- } else if (g_ascii_strcasecmp ("false", string_value) == 0) {
- boolean_value = FALSE;
- } else {
- g_printerr (_ ("Invalid value for a boolean typed hint.\nSupported "
- "values are 'true' or 'false'.\n"));
- return;
- }
- hint_value = g_variant_new_boolean (boolean_value);
- } else if ((g_ascii_strcasecmp ("category", hint_name) == 0) ||
- (g_ascii_strcasecmp ("desktop-entry", hint_name) == 0) ||
- (g_ascii_strcasecmp ("image-path", hint_name) == 0) ||
- (g_ascii_strcasecmp ("image_path", hint_name) == 0) ||
- (g_ascii_strcasecmp ("sound-file", hint_name) == 0) ||
- (g_ascii_strcasecmp ("sound-name", hint_name) == 0)) {
- /* string hints */
- hint_value = g_variant_new_string (string_value);
- } else if ((g_ascii_strcasecmp ("image-data", hint_name) == 0) ||
- (g_ascii_strcasecmp ("image_data", hint_name) == 0) ||
- (g_ascii_strcasecmp ("icon-data", hint_name) == 0)) {
- /* (iibiiay) */
- g_printerr (_ ("Unsupported hint. Skipping.\n"));
- return;
- } else if ((g_ascii_strcasecmp ("x", hint_name) == 0) ||
- (g_ascii_strcasecmp ("y", hint_name) == 0)) {
- /* int hints */
- if (string_value == NULL)
- string_value = "";
- int_value = (gint32) g_ascii_strtoll (string_value, NULL, 0);
- hint_value = g_variant_new_int32 (int_value);
- } else if ((g_ascii_strcasecmp ("urgency", hint_name) == 0)) {
- /* byte hints */
- if (string_value == NULL)
- string_value = "";
- byte_value = (guchar) g_ascii_strtoll (string_value, NULL, 0);
- hint_value = g_variant_new_byte (byte_value);
- } else {
- /* unknown hints */
- g_printerr (_ ("Unknown hint name. Skipping.\n"));
- return;
- }
-
- notify_notification_set_hint (notification, hint_name, hint_value);
-}
+on_notification_default_action (GSimpleAction *self,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ ZenityData *zen_data = user_data;
-static void
-zenity_notification_set_hints (
- NotifyNotification *notification, GHashTable *hints) {
- if (hints == NULL) {
- return;
- }
+ zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
- g_hash_table_foreach (hints, zenity_notification_set_hint, notification);
+ zenity_util_gapp_quit (NULL, zen_data);
}
static gboolean
-zenity_notification_handle_stdin (
- GIOChannel *channel, GIOCondition condition, gpointer user_data) {
- if ((condition & G_IO_IN) != 0) {
- GString *string;
- GError *error = NULL;
+zenity_notification_handle_stdin (GIOChannel *channel, GIOCondition condition,
+ gpointer user_data)
+{
+ static char *icon_file;
+
+ if ((condition & G_IO_IN) != 0)
+ {
+ g_autoptr(GString) string = NULL;
+ g_autoptr(GError) error = NULL;
- string = g_string_new (NULL);
while (channel->is_readable == FALSE)
;
+
+ string = g_string_new (NULL);
+
do {
- gint status;
- gchar *command, *value, *colon;
+ int status;
+ g_autofree char *command = NULL;
+ char *value, *colon;
do {
- status = g_io_channel_read_line_string (
- channel, string, NULL, &error);
- while (gdk_events_pending ())
- gtk_main_iteration ();
+ status = g_io_channel_read_line_string (channel, string,
+ NULL, &error);
+
+ while (g_main_context_pending (NULL)) {
+ g_main_context_iteration (NULL, FALSE);
+ }
} while (status == G_IO_STATUS_AGAIN);
- if (status != G_IO_STATUS_NORMAL) {
+ if (status != G_IO_STATUS_NORMAL)
+ {
if (error) {
- g_warning ("zenity_notification_handle_stdin () : %s",
- error->message);
- g_error_free (error);
+ g_warning ("%s: %s",
+ __func__,
+ error->message);
error = NULL;
}
continue;
@@ -214,10 +135,12 @@ zenity_notification_handle_stdin (
zenity_util_strip_newline (string->str);
colon = strchr (string->str, ':');
- if (colon == NULL) {
- g_printerr (_ ("Could not parse command from stdin\n"));
+ if (colon == NULL)
+ {
+ g_printerr (_("Could not parse command from stdin\n"));
continue;
}
+
/* split off the command and value */
command = g_strstrip (g_strndup (string->str, colon - string->str));
@@ -225,69 +148,62 @@ zenity_notification_handle_stdin (
while (*value && g_ascii_isspace (*value))
value++;
- if (!g_ascii_strcasecmp (command, "icon")) {
+ if (! g_ascii_strcasecmp (command, "icon"))
+ {
g_free (icon_file);
icon_file = g_strdup (value);
- } else if (!g_ascii_strcasecmp (command, "hints")) {
- if (notification_hints != NULL) {
- g_hash_table_unref (notification_hints);
- }
- notification_hints = zenity_notification_parse_hints (value);
- } else if (!g_ascii_strcasecmp (command, "message")) {
+ }
+ else if (!g_ascii_strcasecmp (command, "message"))
+ {
/* display a notification bubble */
- if (!g_utf8_validate (value, -1, NULL)) {
+ if (! g_utf8_validate (value, -1, NULL))
+ {
g_warning ("Invalid UTF-8 in input!");
- } else {
- NotifyNotification *notif;
- error = NULL;
+ }
+ else
+ {
+ g_autoptr(GNotification) notif = NULL;
notif = zenity_notification_new (value, icon_file);
+
if (notif == NULL)
continue;
- zenity_notification_set_hints (notif, notification_hints);
-
- notify_notification_show (notif, &error);
- if (error) {
- g_warning (
- "Error showing notification: %s", error->message);
- g_error_free (error);
- error = NULL;
- }
-
- g_object_unref (notif);
+ zenity_send_notification (notif);
}
- } else if (!g_ascii_strcasecmp (command, "tooltip")) {
- if (!g_utf8_validate (value, -1, NULL)) {
+ }
+ else if (! g_ascii_strcasecmp (command, "tooltip"))
+ {
+ if (! g_utf8_validate (value, -1, NULL))
+ {
g_warning ("Invalid UTF-8 in input!");
- } else {
- NotifyNotification *notif;
+ }
+ else
+ {
+ g_autoptr(GNotification) notif = NULL;
+
notif = zenity_notification_new (value, icon_file);
+
if (notif == NULL)
continue;
- zenity_notification_set_hints (notif, notification_hints);
-
- notify_notification_show (notif, &error);
- if (error) {
- g_warning (
- "Error showing notification: %s", error->message);
- g_error_free (error);
- error = NULL;
- }
+ zenity_send_notification (notif);
}
- } else if (!g_ascii_strcasecmp (command, "visible")) {
+ }
+ else if (!g_ascii_strcasecmp (command, "visible"))
+ {
- } else {
+ }
+ else
+ {
g_warning ("Unknown command '%s'", command);
}
- g_free (command);
} while (g_io_channel_get_buffer_condition (channel) == G_IO_IN);
- g_string_free (string, TRUE);
}
- if ((condition & G_IO_HUP) != 0) {
+ if ((condition & G_IO_HUP) != 0)
+ {
g_io_channel_shutdown (channel, TRUE, NULL);
return FALSE;
}
@@ -296,76 +212,59 @@ zenity_notification_handle_stdin (
}
static void
-zenity_notification_listen_on_stdin (ZenityData *data) {
+zenity_notification_listen_on_stdin (ZenityData *data)
+{
GIOChannel *channel;
channel = g_io_channel_unix_new (0);
g_io_channel_set_encoding (channel, NULL, NULL);
g_io_channel_set_flags (channel, G_IO_FLAG_NONBLOCK, NULL);
- g_io_add_watch (
- channel, G_IO_IN | G_IO_HUP, zenity_notification_handle_stdin, data);
+ g_io_add_watch (channel,
+ G_IO_IN | G_IO_HUP,
+ zenity_notification_handle_stdin,
+ data);
}
void
-zenity_notification (
- ZenityData *data, ZenityNotificationData *notification_data) {
- GError *error;
- NotifyNotification *notification;
- GHashTable *notification_hints;
-
- /* create the notification widget */
- if (!notify_is_initted ()) {
- notify_init (_ ("Zenity notification"));
- }
+zenity_notification (ZenityData *data,
+ ZenityNotificationData *notification_data)
+{
+ GNotification *notification;
- if (notification_data->listen) {
+ if (notification_data->listen)
+ {
zenity_notification_listen_on_stdin (data);
- gtk_main ();
- } else {
- if (notification_data->notification_text == NULL) {
+
+ zenity_util_gapp_main (NULL);
+ }
+ else
+ {
+ g_autoptr(GSimpleAction) action = NULL;
+
+ if (notification_data->notification_text == NULL)
exit (1);
- }
notification = zenity_notification_new (
- notification_data->notification_text, data->window_icon);
+ notification_data->notification_text, notification_data->icon);
- if (notification == NULL) {
+ if (notification == NULL)
exit (1);
- }
/* if we aren't listening for changes, then close on default action */
- notify_notification_add_action (notification,
- "default",
- "Do Default Action",
- (NotifyActionCallback) on_notification_default_action,
- data,
- NULL);
+ action = g_simple_action_new ("app.default", NULL);
+ g_signal_connect (action, "activate",
+ G_CALLBACK(on_notification_default_action), data);
- /* set the notification hints for the displayed notification */
- if (notification_data->notification_hints != NULL) {
- notification_hints = zenity_notification_parse_hints_array (
- notification_data->notification_hints);
- zenity_notification_set_hints (notification, notification_hints);
- g_hash_table_unref (notification_hints);
- }
-
- /* Show icon and wait */
- error = NULL;
- if (!notify_notification_show (notification, &error)) {
- if (error != NULL) {
- g_warning ("Error showing notification: %s", error->message);
- g_error_free (error);
- }
- exit (1);
- }
+ g_notification_set_default_action (notification, "app.default");
+
+ zenity_send_notification (notification);
}
if (data->timeout_delay > 0) {
g_timeout_add_seconds (data->timeout_delay,
(GSourceFunc) zenity_util_timeout_handle,
NULL);
- gtk_main ();
+
+ zenity_util_gapp_main (NULL);
}
}
-
-#endif
diff --git a/src/option.c b/src/option.c
index 61df34d..ee58af1 100644
--- a/src/option.c
+++ b/src/option.c
@@ -1,3 +1,5 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* option.h
*
@@ -22,32 +24,32 @@
* Lucas Rocha <lucasr@im.ufba.br>
*/
-#include "config.h"
-
#include "option.h"
#include <stdlib.h>
#include <string.h>
#include <time.h>
+#include <locale.h>
+#include <langinfo.h>
+
+#include <config.h>
/* General Options */
-static gchar *zenity_general_dialog_title;
-static gchar *zenity_general_window_icon;
+static char *zenity_general_dialog_title;
static int zenity_general_width;
static int zenity_general_height;
-static gchar *zenity_general_dialog_text;
-static gchar *zenity_general_dialog_icon;
-static gchar *zenity_general_separator;
+static char *zenity_general_dialog_text;
+static char *zenity_general_icon;
+static char *zenity_general_separator;
static gboolean zenity_general_multiple;
static gboolean zenity_general_editable;
-static gchar *zenity_general_uri;
+static char *zenity_general_uri;
static gboolean zenity_general_dialog_no_wrap;
static gboolean zenity_general_dialog_no_markup;
-static gint zenity_general_timeout_delay;
-static gchar *zenity_general_ok_button;
-static gchar *zenity_general_cancel_button;
-static gchar **zenity_general_extra_buttons;
+static int zenity_general_timeout_delay;
+static char *zenity_general_ok_button;
+static char *zenity_general_cancel_button;
+static char **zenity_general_extra_buttons;
static gboolean zenity_general_modal;
-static guintptr zenity_general_attach;
static gboolean zenity_general_dialog_ellipsize;
/* Calendar Dialog Options */
@@ -55,11 +57,11 @@ static gboolean zenity_calendar_active;
static int zenity_calendar_day;
static int zenity_calendar_month;
static int zenity_calendar_year;
-static gchar *zenity_calendar_date_format;
+static char *zenity_calendar_date_format;
/* Entry Dialog Options */
static gboolean zenity_entry_active;
-static gchar *zenity_entry_entry_text;
+static char *zenity_entry_entry_text;
static gboolean zenity_entry_hide_text;
/* Error Dialog Options */
@@ -72,26 +74,22 @@ static gboolean zenity_info_active;
static gboolean zenity_file_active;
static gboolean zenity_file_directory;
static gboolean zenity_file_save;
-static gboolean zenity_file_confirm_overwrite;
-static gchar **zenity_file_filter;
+static char **zenity_file_filter;
/* List Dialog Options */
static gboolean zenity_list_active;
-static gchar **zenity_list_columns;
+static char **zenity_list_columns;
static gboolean zenity_list_checklist;
static gboolean zenity_list_radiolist;
-static gchar *zenity_list_print_column;
-static gchar *zenity_list_hide_column;
+static char *zenity_list_print_column;
+static char *zenity_list_hide_column;
static gboolean zenity_list_hide_header;
static gboolean zenity_list_imagelist;
static gboolean zenity_list_mid_search;
-#ifdef HAVE_LIBNOTIFY
/* Notification Dialog Options */
static gboolean zenity_notification_active;
static gboolean zenity_notification_listen;
-static gchar **zenity_notification_hints;
-#endif
/* Progress Dialog Options */
static gboolean zenity_progress_active;
@@ -109,14 +107,14 @@ static gboolean zenity_question_switch;
/* Text Dialog Options */
static gboolean zenity_text_active;
-static gchar *zenity_text_font;
-static gchar *zenity_text_checkbox;
+static char *zenity_text_font;
+static char *zenity_text_checkbox;
static gboolean zenity_text_auto_scroll;
#ifdef HAVE_WEBKITGTK
static gboolean zenity_text_enable_html;
static gboolean zenity_text_no_interaction;
-static gchar *zenity_text_url;
+static char *zenity_text_url;
#endif
/* Warning Dialog Options */
@@ -124,16 +122,16 @@ static gboolean zenity_warning_active;
/* Scale Dialog Options */
static gboolean zenity_scale_active;
-static gint zenity_scale_value;
-static gint zenity_scale_min_value;
-static gint zenity_scale_max_value;
-static gint zenity_scale_step;
+static int zenity_scale_value;
+static int zenity_scale_min_value;
+static int zenity_scale_max_value;
+static int zenity_scale_step;
static gboolean zenity_scale_print_partial;
static gboolean zenity_scale_hide_value;
/* Color Selection Dialog Options */
static gboolean zenity_colorsel_active;
-static gchar *zenity_colorsel_color;
+static char *zenity_colorsel_color;
static gboolean zenity_colorsel_show_palette;
/* Password Dialog Options */
@@ -143,251 +141,265 @@ static gboolean zenity_password_show_username;
/* Forms Dialog Options */
static gboolean zenity_forms_active;
static gboolean zenity_forms_show_header;
-static gchar *zenity_forms_date_format;
-// static gchar *zenity_forms_hide_column;
-static gchar **zenity_forms_list_values;
-static gchar **zenity_forms_column_values;
-static gchar **zenity_forms_combo_values;
+static char *zenity_forms_date_format;
+static char **zenity_forms_list_values;
+static char **zenity_forms_column_values;
+static char **zenity_forms_combo_values;
/* Miscelaneus Options */
static gboolean zenity_misc_about;
static gboolean zenity_misc_version;
-static gboolean zenity_forms_callback (const gchar *option_name,
- const gchar *value, gpointer data, GError **error);
-
-static GOptionEntry general_options[] = {{"title",
- '\0',
- 0,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_title,
- N_ ("Set the dialog title"),
- N_ ("TITLE")},
- {"window-icon",
- '\0',
- 0,
- G_OPTION_ARG_FILENAME,
- &zenity_general_window_icon,
- N_ ("Set the window icon"),
- N_ ("ICONPATH")},
- {"width",
- '\0',
- 0,
- G_OPTION_ARG_INT,
- &zenity_general_width,
- N_ ("Set the width"),
- N_ ("WIDTH")},
- {"height",
- '\0',
- 0,
- G_OPTION_ARG_INT,
- &zenity_general_height,
- N_ ("Set the height"),
- N_ ("HEIGHT")},
- {"timeout",
- '\0',
- 0,
- G_OPTION_ARG_INT,
- &zenity_general_timeout_delay,
- N_ ("Set dialog timeout in seconds"),
- /* Timeout for closing the dialog */
- N_ ("TIMEOUT")},
- {"ok-label",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_ok_button,
- N_ ("Set the label of the OK button"),
- N_ ("TEXT")},
- {"cancel-label",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_cancel_button,
- N_ ("Set the label of the Cancel button"),
- N_ ("TEXT")},
- {"extra-button",
- '\0',
- 0,
- G_OPTION_ARG_STRING_ARRAY,
- &zenity_general_extra_buttons,
- N_ ("Add an extra button"),
- N_ ("TEXT")},
- {"modal",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_modal,
- N_ ("Set the modal hint"),
- NULL},
- {"attach",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_INT,
- &zenity_general_attach,
- N_ ("Set the parent window to attach to"),
- N_ ("WINDOW")},
- {NULL}};
+/* DEPRECATED Options */
-static GOptionEntry calendar_options[] = {{"calendar",
- '\0',
- G_OPTION_FLAG_IN_MAIN,
- G_OPTION_ARG_NONE,
- &zenity_calendar_active,
- N_ ("Display calendar dialog"),
- NULL},
- {"text",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_text,
- N_ ("Set the dialog text"),
- N_ ("TEXT")},
- {"day",
- '\0',
- 0,
- G_OPTION_ARG_INT,
- &zenity_calendar_day,
- N_ ("Set the calendar day"),
- N_ ("DAY")},
- {"month",
- '\0',
- 0,
- G_OPTION_ARG_INT,
- &zenity_calendar_month,
- N_ ("Set the calendar month"),
- N_ ("MONTH")},
- {"year",
- '\0',
- 0,
- G_OPTION_ARG_INT,
- &zenity_calendar_year,
- N_ ("Set the calendar year"),
- N_ ("YEAR")},
- {"date-format",
- '\0',
- 0,
- G_OPTION_ARG_STRING,
- &zenity_calendar_date_format,
- N_ ("Set the format for the returned date"),
- N_ ("PATTERN")},
- {NULL}};
+static char *zenity_general_icon_DEPRECATED;
-static GOptionEntry entry_options[] = {{"entry",
- '\0',
- G_OPTION_FLAG_IN_MAIN,
- G_OPTION_ARG_NONE,
- &zenity_entry_active,
- N_ ("Display text entry dialog"),
- NULL},
- {"text",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_text,
- N_ ("Set the dialog text"),
- N_ ("TEXT")},
- {"entry-text",
- '\0',
- 0,
- G_OPTION_ARG_STRING,
- &zenity_entry_entry_text,
- N_ ("Set the entry text"),
- N_ ("TEXT")},
- {"hide-text",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_entry_hide_text,
- N_ ("Hide the entry text"),
- NULL},
- {NULL}};
+static gboolean zenity_forms_callback (const char *option_name,
+ const char *value, gpointer data, GError **error);
-static GOptionEntry error_options[] = {{"error",
- '\0',
- G_OPTION_FLAG_IN_MAIN,
- G_OPTION_ARG_NONE,
- &zenity_error_active,
- N_ ("Display error dialog"),
- NULL},
- {"text",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_text,
- N_ ("Set the dialog text"),
- N_ ("TEXT")},
- {"icon-name",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_icon,
- N_ ("Set the dialog icon"),
- N_ ("ICON-NAME")},
- {"no-wrap",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_no_wrap,
- N_ ("Do not enable text wrapping"),
- NULL},
- {"no-markup",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_no_markup,
- N_ ("Do not enable Pango markup")},
- {"ellipsize",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_ellipsize,
- N_ ("Enable ellipsizing in the dialog text. This fixes the high window "
- "size with long texts")},
- {NULL}};
+static GOptionEntry general_options[] =
+ {{"title",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_title,
+ N_ ("Set the dialog title"),
+ N_ ("TITLE")},
+ {"width",
+ '\0',
+ 0,
+ G_OPTION_ARG_INT,
+ &zenity_general_width,
+ N_ ("Set the width"),
+ N_ ("WIDTH")},
+ {"height",
+ '\0',
+ 0,
+ G_OPTION_ARG_INT,
+ &zenity_general_height,
+ N_ ("Set the height"),
+ N_ ("HEIGHT")},
+ {"timeout",
+ '\0',
+ 0,
+ G_OPTION_ARG_INT,
+ &zenity_general_timeout_delay,
+ N_ ("Set dialog timeout in seconds"),
+ /* Timeout for closing the dialog */
+ N_ ("TIMEOUT")},
+ {"ok-label",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_ok_button,
+ N_ ("Set the label of the OK button"),
+ N_ ("TEXT")},
+ {"cancel-label",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_cancel_button,
+ N_ ("Set the label of the Cancel button"),
+ N_ ("TEXT")},
+ {"extra-button",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING_ARRAY,
+ &zenity_general_extra_buttons,
+ N_ ("Add an extra button"),
+ N_ ("TEXT")},
+ {"modal",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_modal,
+ N_ ("Set the modal hint"),
+ NULL},
+ {NULL}};
-static GOptionEntry info_options[] = {{"info",
- '\0',
- G_OPTION_FLAG_IN_MAIN,
- G_OPTION_ARG_NONE,
- &zenity_info_active,
- N_ ("Display info dialog"),
- NULL},
- {"text",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_text,
- N_ ("Set the dialog text"),
- N_ ("TEXT")},
- {"icon-name",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_icon,
- N_ ("Set the dialog icon"),
- N_ ("ICON-NAME")},
- {"no-wrap",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_no_wrap,
- N_ ("Do not enable text wrapping"),
- NULL},
- {"no-markup",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_no_markup,
- N_ ("Do not enable Pango markup")},
- {"ellipsize",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_ellipsize,
- N_ ("Enable ellipsizing in the dialog text. This fixes the high window "
- "size with long texts")},
- {NULL}};
+static GOptionEntry calendar_options[] =
+ {{"calendar",
+ '\0',
+ G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE,
+ &zenity_calendar_active,
+ N_ ("Display calendar dialog"),
+ NULL},
+ {"text",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_text,
+ N_ ("Set the dialog text"),
+ N_ ("TEXT")},
+ {"day",
+ '\0',
+ 0,
+ G_OPTION_ARG_INT,
+ &zenity_calendar_day,
+ N_ ("Set the calendar day"),
+ N_ ("DAY")},
+ {"month",
+ '\0',
+ 0,
+ G_OPTION_ARG_INT,
+ &zenity_calendar_month,
+ N_ ("Set the calendar month"),
+ N_ ("MONTH")},
+ {"year",
+ '\0',
+ 0,
+ G_OPTION_ARG_INT,
+ &zenity_calendar_year,
+ N_ ("Set the calendar year"),
+ N_ ("YEAR")},
+ {"date-format",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING,
+ &zenity_calendar_date_format,
+ N_ ("Set the format for the returned date"),
+ N_ ("PATTERN")},
+ {NULL}};
+
+static GOptionEntry entry_options[] =
+ {{"entry",
+ '\0',
+ G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE,
+ &zenity_entry_active,
+ N_ ("Display text entry dialog"),
+ NULL},
+ {"text",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_text,
+ N_ ("Set the dialog text"),
+ N_ ("TEXT")},
+ {"entry-text",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING,
+ &zenity_entry_entry_text,
+ N_ ("Set the entry text"),
+ N_ ("TEXT")},
+ {"hide-text",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_entry_hide_text,
+ N_ ("Hide the entry text"),
+ NULL},
+ {NULL}};
+
+static GOptionEntry error_options[] =
+ {{"error",
+ '\0',
+ G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE,
+ &zenity_error_active,
+ N_ ("Display error dialog"),
+ NULL},
+ {"text",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_text,
+ N_ ("Set the dialog text"),
+ N_ ("TEXT")},
+ {"icon",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_icon,
+ N_ ("Set the icon name"),
+ N_ ("ICON-NAME")},
+ {"window-icon",
+ '\0',
+ G_OPTION_FLAG_HIDDEN,
+ G_OPTION_ARG_STRING,
+ &zenity_general_icon_DEPRECATED,
+ N_ ("DEPRECATED; use `--icon`"),
+ N_ ("ICON-NAME")},
+ {"no-wrap",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_no_wrap,
+ N_ ("Do not enable text wrapping"),
+ NULL},
+ {"no-markup",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_no_markup,
+ N_ ("Do not enable Pango markup"),
+ NULL},
+ {"ellipsize",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_ellipsize,
+ N_ ("Enable ellipsizing in the dialog text. "
+ "This fixes the high window "
+ "size with long texts"),
+ NULL},
+ {NULL}};
+
+static GOptionEntry info_options[] =
+ {{"info",
+ '\0',
+ G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE,
+ &zenity_info_active,
+ N_ ("Display info dialog"),
+ NULL},
+ {"text",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_text,
+ N_ ("Set the dialog text"),
+ N_ ("TEXT")},
+ {"icon",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_icon,
+ N_ ("Set the icon name"),
+ N_ ("ICON-NAME")},
+ {"window-icon",
+ '\0',
+ G_OPTION_FLAG_HIDDEN,
+ G_OPTION_ARG_STRING,
+ &zenity_general_icon_DEPRECATED,
+ N_ ("DEPRECATED; use `--icon`"),
+ N_ ("ICON-NAME")},
+ {"no-wrap",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_no_wrap,
+ N_ ("Do not enable text wrapping"),
+ NULL},
+ {"no-markup",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_no_markup,
+ N_ ("Do not enable Pango markup"),
+ NULL},
+ {"ellipsize",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_ellipsize,
+ N_ ("Enable ellipsizing in the dialog text. "
+ "This fixes the high window "
+ "size with long texts"),
+ NULL},
+ {NULL}};
static GOptionEntry file_selection_options[] =
{{"file-selection",
@@ -432,15 +444,7 @@ static GOptionEntry file_selection_options[] =
&zenity_general_separator,
N_ ("Set output separator character"),
N_ ("SEPARATOR")},
- {"confirm-overwrite",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_file_confirm_overwrite,
- N_ ("Confirm file selection if filename already exists"),
- NULL},
- {
- "file-filter",
+ {"file-filter",
'\0',
0,
G_OPTION_ARG_STRING_ARRAY,
@@ -452,255 +456,272 @@ static GOptionEntry file_selection_options[] =
},
{NULL}};
-static GOptionEntry list_options[] = {{"list",
- '\0',
- G_OPTION_FLAG_IN_MAIN,
- G_OPTION_ARG_NONE,
- &zenity_list_active,
- N_ ("Display list dialog"),
- NULL},
- {"text",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_text,
- N_ ("Set the dialog text"),
- N_ ("TEXT")},
- {"column",
- '\0',
- 0,
- G_OPTION_ARG_STRING_ARRAY,
- &zenity_list_columns,
- N_ ("Set the column header"),
- N_ ("COLUMN")},
- {"checklist",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_list_checklist,
- N_ ("Use check boxes for the first column"),
- NULL},
- {"radiolist",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_list_radiolist,
- N_ ("Use radio buttons for the first column"),
- NULL},
- {"imagelist",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_list_imagelist,
- N_ ("Use an image for the first column"),
- NULL},
- {"separator",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_separator,
- N_ ("Set output separator character"),
- N_ ("SEPARATOR")},
- {"multiple",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_multiple,
- N_ ("Allow multiple rows to be selected"),
- NULL},
- {"editable",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_editable,
- N_ ("Allow changes to text"),
- NULL},
- {"print-column",
- '\0',
- 0,
- G_OPTION_ARG_STRING,
- &zenity_list_print_column,
- N_ ("Print a specific column (Default is 1. 'ALL' can be used to print "
- "all columns)"),
- /* Column index number to print out on a list dialog */
- N_ ("NUMBER")},
- {"hide-column",
- '\0',
- 0,
- G_OPTION_ARG_STRING,
- &zenity_list_hide_column,
- N_ ("Hide a specific column"),
- N_ ("NUMBER")},
- {"hide-header",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_list_hide_header,
- N_ ("Hide the column headers"),
- NULL},
- {"mid-search",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_list_mid_search,
- N_ ("Change list default search function searching for text in the "
- "middle, not on the beginning"),
- NULL},
- {NULL}};
-
-#ifdef HAVE_LIBNOTIFY
-static GOptionEntry notification_options[] = {{"notification",
- '\0',
- G_OPTION_FLAG_IN_MAIN,
- G_OPTION_ARG_NONE,
- &zenity_notification_active,
- N_ ("Display notification"),
- NULL},
- {"text",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_text,
- N_ ("Set the notification text"),
- N_ ("TEXT")},
- {"listen",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_notification_listen,
- N_ ("Listen for commands on stdin"),
- NULL},
- {"hint",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING_ARRAY,
- &zenity_notification_hints,
- N_ ("Set the notification hints"),
- N_ ("TEXT")},
- {NULL}};
-
-#endif
+static GOptionEntry list_options[] =
+ {{"list",
+ '\0',
+ G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE,
+ &zenity_list_active,
+ N_ ("Display list dialog"),
+ NULL},
+ {"text",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_text,
+ N_ ("Set the dialog text"),
+ N_ ("TEXT")},
+ {"column",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING_ARRAY,
+ &zenity_list_columns,
+ N_ ("Set the column header"),
+ N_ ("COLUMN")},
+ {"checklist",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_list_checklist,
+ N_ ("Use check boxes for the first column"),
+ NULL},
+ {"radiolist",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_list_radiolist,
+ N_ ("Use radio buttons for the first column"),
+ NULL},
+ {"imagelist",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_list_imagelist,
+ N_ ("Use an image for the first column"),
+ NULL},
+ {"separator",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_separator,
+ N_ ("Set output separator character"),
+ N_ ("SEPARATOR")},
+ {"multiple",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_multiple,
+ N_ ("Allow multiple rows to be selected"),
+ NULL},
+ {"editable",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_editable,
+ N_ ("Allow changes to text"),
+ NULL},
+ {"print-column",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING,
+ &zenity_list_print_column,
+ N_ ("Print a specific column (Default is 1. "
+ "'ALL' can be used to print all columns)"),
+ /* Column index number to print out on a list dialog */
+ N_ ("NUMBER")},
+ {"hide-column",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING,
+ &zenity_list_hide_column,
+ N_ ("Hide a specific column"),
+ N_ ("NUMBER")},
+ {"hide-header",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_list_hide_header,
+ N_ ("Hide the column headers"),
+ NULL},
+ {"mid-search",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_list_mid_search,
+ N_ ("Change list default search function searching for text in the "
+ "middle, not on the beginning"),
+ NULL},
+ {NULL}};
-static GOptionEntry progress_options[] = {
- {"progress",
- '\0',
- G_OPTION_FLAG_IN_MAIN,
- G_OPTION_ARG_NONE,
- &zenity_progress_active,
- N_ ("Display progress indication dialog"),
- NULL},
- {"text",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_text,
- N_ ("Set the dialog text"),
- N_ ("TEXT")},
- {"percentage",
- '\0',
- 0,
- G_OPTION_ARG_INT,
- &zenity_progress_percentage,
- N_ ("Set initial percentage"),
- N_ ("PERCENTAGE")},
- {"pulsate",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_progress_pulsate,
- N_ ("Pulsate progress bar"),
- NULL},
- {"auto-close",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_progress_auto_close,
- /* xgettext: no-c-format */
- N_ ("Dismiss the dialog when 100% has been reached"),
- NULL},
- {"auto-kill",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_progress_auto_kill,
- N_ ("Kill parent process if Cancel button is pressed"),
- NULL},
- {"no-cancel",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_progress_no_cancel,
- N_ ("Hide Cancel button"),
- NULL},
- {"time-remaining",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_progress_time_remaining,
- /* xgettext: no-c-format */
- N_ ("Estimate when progress will reach 100%"),
- NULL},
- {NULL}};
+static GOptionEntry notification_options[] =
+ {{"notification",
+ '\0',
+ G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE,
+ &zenity_notification_active,
+ N_ ("Display notification"),
+ NULL},
+ {"text",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_text,
+ N_ ("Set the notification text"),
+ N_ ("TEXT")},
+ {"icon",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_icon,
+ N_ ("Set the icon name"),
+ N_ ("ICON-NAME")},
+ {"window-icon",
+ '\0',
+ G_OPTION_FLAG_HIDDEN,
+ G_OPTION_ARG_STRING,
+ &zenity_general_icon_DEPRECATED,
+ N_ ("DEPRECATED; use `--icon`"),
+ N_ ("ICON-NAME")},
+ {"listen",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_notification_listen,
+ N_ ("Listen for commands on stdin"),
+ NULL},
+ {NULL}};
-static GOptionEntry question_options[] = {{"question",
- '\0',
- G_OPTION_FLAG_IN_MAIN,
- G_OPTION_ARG_NONE,
- &zenity_question_active,
- N_ ("Display question dialog"),
- NULL},
- {"text",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_text,
- N_ ("Set the dialog text"),
- N_ ("TEXT")},
- {"icon-name",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_icon,
- N_ ("Set the dialog icon"),
- N_ ("ICON-NAME")},
- {"no-wrap",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_no_wrap,
- N_ ("Do not enable text wrapping"),
- NULL},
- {"no-markup",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_no_markup,
- N_ ("Do not enable Pango markup")},
- {"default-cancel",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_question_default_cancel,
- N_ ("Give Cancel button focus by default"),
- NULL},
- {"ellipsize",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_ellipsize,
- N_ ("Enable ellipsizing in the dialog text. This fixes the high window "
- "size with long texts")},
- {"switch",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_question_switch,
- N_ ("Suppress OK and Cancel buttons"),
- NULL},
- {NULL}};
+static GOptionEntry progress_options[] =
+ {{"progress",
+ '\0',
+ G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE,
+ &zenity_progress_active,
+ N_ ("Display progress indication dialog"),
+ NULL},
+ {"text",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_text,
+ N_ ("Set the dialog text"),
+ N_ ("TEXT")},
+ {"percentage",
+ '\0',
+ 0,
+ G_OPTION_ARG_INT,
+ &zenity_progress_percentage,
+ N_ ("Set initial percentage"),
+ N_ ("PERCENTAGE")},
+ {"pulsate",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_progress_pulsate,
+ N_ ("Pulsate progress bar"),
+ NULL},
+ {"auto-close",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_progress_auto_close,
+ /* xgettext: no-c-format */
+ N_ ("Dismiss the dialog when 100% has been reached"),
+ NULL},
+ {"auto-kill",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_progress_auto_kill,
+ N_ ("Kill parent process if Cancel button is pressed"),
+ NULL},
+ {"no-cancel",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_progress_no_cancel,
+ N_ ("Hide Cancel button"),
+ NULL},
+ {"time-remaining",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_progress_time_remaining,
+ /* xgettext: no-c-format */
+ N_ ("Estimate when progress will reach 100%"),
+ NULL},
+ {NULL}};
-static GOptionEntry text_options[] = {
- {"text-info",
+static GOptionEntry question_options[] =
+ {{"question",
+ '\0',
+ G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE,
+ &zenity_question_active,
+ N_ ("Display question dialog"),
+ NULL},
+ {"text",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_text,
+ N_ ("Set the dialog text"),
+ N_ ("TEXT")},
+ {"icon",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_icon,
+ N_ ("Set the icon name"),
+ N_ ("ICON-NAME")},
+ {"window-icon",
+ '\0',
+ G_OPTION_FLAG_HIDDEN,
+ G_OPTION_ARG_STRING,
+ &zenity_general_icon_DEPRECATED,
+ N_ ("DEPRECATED; use `--icon`"),
+ N_ ("ICON-NAME")},
+ {"no-wrap",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_no_wrap,
+ N_ ("Do not enable text wrapping"),
+ NULL},
+ {"no-markup",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_no_markup,
+ N_ ("Do not enable Pango markup"),
+ NULL},
+ {"default-cancel",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_question_default_cancel,
+ N_ ("Give Cancel button focus by default"),
+ NULL},
+ {"ellipsize",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_ellipsize,
+ N_ ("Enable ellipsizing in the dialog text. "
+ "This fixes the high window "
+ "size with long texts"),
+ NULL},
+ {"switch",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_question_switch,
+ N_ ("Suppress OK and Cancel buttons"),
+ NULL},
+ {NULL}};
+
+static GOptionEntry text_options[] =
+ {{"text-info",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
@@ -770,212 +791,225 @@ static GOptionEntry text_options[] = {
NULL},
{NULL}};
-static GOptionEntry warning_options[] = {{"warning",
- '\0',
- G_OPTION_FLAG_IN_MAIN,
- G_OPTION_ARG_NONE,
- &zenity_warning_active,
- N_ ("Display warning dialog"),
- NULL},
- {"text",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_text,
- N_ ("Set the dialog text"),
- N_ ("TEXT")},
- {"icon-name",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_icon,
- N_ ("Set the dialog icon"),
- N_ ("ICON-NAME")},
- {"no-wrap",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_no_wrap,
- N_ ("Do not enable text wrapping"),
- NULL},
- {"no-markup",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_no_markup,
- N_ ("Do not enable Pango markup")},
- {"ellipsize",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_NONE,
- &zenity_general_dialog_ellipsize,
- N_ ("Enable ellipsizing in the dialog text. This fixes the high window "
- "size with long texts")},
- {NULL}};
-
-static GOptionEntry scale_options[] = {{"scale",
- '\0',
- G_OPTION_FLAG_IN_MAIN,
- G_OPTION_ARG_NONE,
- &zenity_scale_active,
- N_ ("Display scale dialog"),
- NULL},
- {"text",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_text,
- N_ ("Set the dialog text"),
- N_ ("TEXT")},
- {"value",
- '\0',
- 0,
- G_OPTION_ARG_INT,
- &zenity_scale_value,
- N_ ("Set initial value"),
- N_ ("VALUE")},
- {"min-value",
- '\0',
- 0,
- G_OPTION_ARG_INT,
- &zenity_scale_min_value,
- N_ ("Set minimum value"),
- N_ ("VALUE")},
- {"max-value",
- '\0',
- 0,
- G_OPTION_ARG_INT,
- &zenity_scale_max_value,
- N_ ("Set maximum value"),
- N_ ("VALUE")},
- {"step",
- '\0',
- 0,
- G_OPTION_ARG_INT,
- &zenity_scale_step,
- N_ ("Set step size"),
- N_ ("VALUE")},
- {"print-partial",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_scale_print_partial,
- N_ ("Print partial values"),
- NULL},
- {"hide-value",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_scale_hide_value,
- N_ ("Hide value"),
- NULL},
- {NULL}};
+static GOptionEntry warning_options[] =
+ {{"warning",
+ '\0',
+ G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE,
+ &zenity_warning_active,
+ N_ ("Display warning dialog"),
+ NULL},
+ {"text",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_text,
+ N_ ("Set the dialog text"),
+ N_ ("TEXT")},
+ {"icon",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_icon,
+ N_ ("Set the icon name"),
+ N_ ("ICON-NAME")},
+ {"window-icon",
+ '\0',
+ G_OPTION_FLAG_HIDDEN,
+ G_OPTION_ARG_STRING,
+ &zenity_general_icon_DEPRECATED,
+ N_ ("DEPRECATED; use `--icon`"),
+ N_ ("ICON-NAME")},
+ {"no-wrap",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_no_wrap,
+ N_ ("Do not enable text wrapping"),
+ NULL},
+ {"no-markup",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_no_markup,
+ N_ ("Do not enable Pango markup"),
+ NULL},
+ {"ellipsize",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_NONE,
+ &zenity_general_dialog_ellipsize,
+ N_ ("Enable ellipsizing in the dialog text. "
+ "This fixes the high window "
+ "size with long texts"),
+ NULL},
+ {NULL}};
+
+static GOptionEntry scale_options[] =
+ {{"scale",
+ '\0',
+ G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE,
+ &zenity_scale_active,
+ N_ ("Display scale dialog"),
+ NULL},
+ {"text",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_text,
+ N_ ("Set the dialog text"),
+ N_ ("TEXT")},
+ {"value",
+ '\0',
+ 0,
+ G_OPTION_ARG_INT,
+ &zenity_scale_value,
+ N_ ("Set initial value"),
+ N_ ("VALUE")},
+ {"min-value",
+ '\0',
+ 0,
+ G_OPTION_ARG_INT,
+ &zenity_scale_min_value,
+ N_ ("Set minimum value"),
+ N_ ("VALUE")},
+ {"max-value",
+ '\0',
+ 0,
+ G_OPTION_ARG_INT,
+ &zenity_scale_max_value,
+ N_ ("Set maximum value"),
+ N_ ("VALUE")},
+ {"step",
+ '\0',
+ 0,
+ G_OPTION_ARG_INT,
+ &zenity_scale_step,
+ N_ ("Set step size"),
+ N_ ("VALUE")},
+ {"print-partial",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_scale_print_partial,
+ N_ ("Print partial values"),
+ NULL},
+ {"hide-value",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_scale_hide_value,
+ N_ ("Hide value"),
+ NULL},
+ {NULL}};
-static GOptionEntry forms_dialog_options[] = {{"forms",
- '\0',
- G_OPTION_FLAG_IN_MAIN,
- G_OPTION_ARG_NONE,
- &zenity_forms_active,
- N_ ("Display forms dialog"),
- NULL},
- {"add-entry",
- '\0',
- 0,
- G_OPTION_ARG_CALLBACK,
- zenity_forms_callback,
- N_ ("Add a new Entry in forms dialog"),
- N_ ("Field name")},
- {"add-password",
- '\0',
- 0,
- G_OPTION_ARG_CALLBACK,
- zenity_forms_callback,
- N_ ("Add a new Password Entry in forms dialog"),
- N_ ("Field name")},
- {"add-calendar",
- '\0',
- 0,
- G_OPTION_ARG_CALLBACK,
- zenity_forms_callback,
- N_ ("Add a new Calendar in forms dialog"),
- N_ ("Calendar field name")},
- {"add-list",
- '\0',
- 0,
- G_OPTION_ARG_CALLBACK,
- zenity_forms_callback,
- N_ ("Add a new List in forms dialog"),
- N_ ("List field and header name")},
- {"list-values",
- '\0',
- 0,
- G_OPTION_ARG_STRING_ARRAY,
- &zenity_forms_list_values,
- N_ ("List of values for List"),
- N_ ("List of values separated by |")},
- {"column-values",
- '\0',
- 0,
- G_OPTION_ARG_STRING_ARRAY,
- &zenity_forms_column_values,
- N_ ("List of values for columns"),
- N_ ("List of values separated by |")},
- {"add-combo",
- '\0',
- 0,
- G_OPTION_ARG_CALLBACK,
- zenity_forms_callback,
- N_ ("Add a new combo box in forms dialog"),
- N_ ("Combo box field name")},
- {"combo-values",
- '\0',
- 0,
- G_OPTION_ARG_STRING_ARRAY,
- &zenity_forms_combo_values,
- N_ ("List of values for combo box"),
- N_ ("List of values separated by |")},
- /* TODO: Implement how to hide specifc column
- {
- "hide-column",
- '\0',
- 0,
- G_OPTION_ARG_STRING,
- &zenity_forms_hide_column,
- N_("Hide a specific column"),
- N_("NUMBER")
- },*/
- {"show-header",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_forms_show_header,
- N_ ("Show the columns header"),
- NULL},
- {"text",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_dialog_text,
- N_ ("Set the dialog text"),
- N_ ("TEXT")},
- {"separator",
- '\0',
- G_OPTION_FLAG_NOALIAS,
- G_OPTION_ARG_STRING,
- &zenity_general_separator,
- N_ ("Set output separator character"),
- N_ ("SEPARATOR")},
- {"date-format",
- '\0',
- 0,
- G_OPTION_ARG_STRING,
- &zenity_forms_date_format,
- N_ ("Set the format for the returned date"),
- N_ ("PATTERN")},
- {NULL}};
+static GOptionEntry forms_dialog_options[] =
+ {{"forms",
+ '\0',
+ G_OPTION_FLAG_IN_MAIN,
+ G_OPTION_ARG_NONE,
+ &zenity_forms_active,
+ N_ ("Display forms dialog"),
+ NULL},
+ {"add-entry",
+ '\0',
+ 0,
+ G_OPTION_ARG_CALLBACK,
+ zenity_forms_callback,
+ N_ ("Add a new Entry in forms dialog"),
+ N_ ("Field name")},
+ {"add-password",
+ '\0',
+ 0,
+ G_OPTION_ARG_CALLBACK,
+ zenity_forms_callback,
+ N_ ("Add a new Password Entry in forms dialog"),
+ N_ ("Field name")},
+ {"add-calendar",
+ '\0',
+ 0,
+ G_OPTION_ARG_CALLBACK,
+ zenity_forms_callback,
+ N_ ("Add a new Calendar in forms dialog"),
+ N_ ("Calendar field name")},
+ {"add-list",
+ '\0',
+ 0,
+ G_OPTION_ARG_CALLBACK,
+ zenity_forms_callback,
+ N_ ("Add a new List in forms dialog"),
+ N_ ("List field and header name")},
+ {"list-values",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING_ARRAY,
+ &zenity_forms_list_values,
+ N_ ("List of values for List"),
+ N_ ("List of values separated by |")},
+ {"column-values",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING_ARRAY,
+ &zenity_forms_column_values,
+ N_ ("List of values for columns"),
+ N_ ("List of values separated by |")},
+ {"add-combo",
+ '\0',
+ 0,
+ G_OPTION_ARG_CALLBACK,
+ zenity_forms_callback,
+ N_ ("Add a new combo box in forms dialog"),
+ N_ ("Combo box field name")},
+ {"combo-values",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING_ARRAY,
+ &zenity_forms_combo_values,
+ N_ ("List of values for combo box"),
+ N_ ("List of values separated by |")},
+ /* TODO: Implement how to hide specifc column
+ {
+ "hide-column",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING,
+ &zenity_forms_hide_column,
+ N_("Hide a specific column"),
+ N_("NUMBER")
+ },*/
+ {"show-header",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_forms_show_header,
+ N_ ("Show the columns header"),
+ NULL},
+ {"text",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_dialog_text,
+ N_ ("Set the dialog text"),
+ N_ ("TEXT")},
+ {"separator",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+ &zenity_general_separator,
+ N_ ("Set output separator character"),
+ N_ ("SEPARATOR")},
+ {"date-format",
+ '\0',
+ 0,
+ G_OPTION_ARG_STRING,
+ &zenity_forms_date_format,
+ N_ ("Set the format for the returned date"),
+ N_ ("PATTERN")},
+ {NULL}};
-static GOptionEntry password_dialog_options[] = {
- {"password",
+static GOptionEntry password_dialog_options[] =
+ {{"password",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
@@ -991,8 +1025,8 @@ static GOptionEntry password_dialog_options[] = {
NULL},
{NULL}};
-static GOptionEntry color_selection_options[] = {
- {"color-selection",
+static GOptionEntry color_selection_options[] =
+ {{"color-selection",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
@@ -1015,28 +1049,29 @@ static GOptionEntry color_selection_options[] = {
NULL},
{NULL}};
-static GOptionEntry miscellaneous_options[] = {{"about",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_misc_about,
- N_ ("About zenity"),
- NULL},
- {"version",
- '\0',
- 0,
- G_OPTION_ARG_NONE,
- &zenity_misc_version,
- N_ ("Print version"),
- NULL},
- {NULL}};
+static GOptionEntry miscellaneous_options[] =
+ {{"about",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_misc_about,
+ N_ ("About zenity"),
+ NULL},
+ {"version",
+ '\0',
+ 0,
+ G_OPTION_ARG_NONE,
+ &zenity_misc_version,
+ N_ ("Print version"),
+ NULL},
+ {NULL}};
static ZenityParsingOptions *results;
static GOptionContext *ctx;
static void
-zenity_option_init (void) {
-
+zenity_option_init (void)
+{
results = g_new0 (ZenityParsingOptions, 1);
/* Initialize the various dialog structures */
@@ -1050,77 +1085,17 @@ zenity_option_init (void) {
results->progress_data = g_new0 (ZenityProgressData, 1);
results->text_data = g_new0 (ZenityTextData, 1);
results->tree_data = g_new0 (ZenityTreeData, 1);
-#ifdef HAVE_LIBNOTIFY
results->notification_data = g_new0 (ZenityNotificationData, 1);
-#endif
results->color_data = g_new0 (ZenityColorData, 1);
results->password_data = g_new0 (ZenityPasswordData, 1);
results->forms_data = g_new0 (ZenityFormsData, 1);
}
-void
-zenity_option_free (void) {
- if (zenity_general_dialog_title)
- g_free (zenity_general_dialog_title);
- if (zenity_general_window_icon)
- g_free (zenity_general_window_icon);
- if (zenity_general_dialog_text)
- g_free (zenity_general_dialog_text);
- if (zenity_general_uri)
- g_free (zenity_general_uri);
- g_free (zenity_general_separator);
- if (zenity_general_ok_button)
- g_free (zenity_general_ok_button);
- if (zenity_general_cancel_button)
- g_free (zenity_general_cancel_button);
- if (zenity_general_extra_buttons)
- g_strfreev (zenity_general_extra_buttons);
-
- if (zenity_calendar_date_format)
- g_free (zenity_calendar_date_format);
-
- if (zenity_forms_date_format)
- g_free (zenity_forms_date_format);
- if (zenity_forms_list_values)
- g_strfreev (zenity_forms_list_values);
- if (zenity_forms_combo_values)
- g_strfreev (zenity_forms_combo_values);
- if (zenity_forms_column_values)
- g_strfreev (zenity_forms_column_values);
- // if (zenity_forms_hide_column)
- // g_free (zenity_forms_hide_column);
- if (zenity_entry_entry_text)
- g_free (zenity_entry_entry_text);
-
- if (zenity_file_filter)
- g_strfreev (zenity_file_filter);
-
- if (zenity_list_columns)
- g_strfreev (zenity_list_columns);
- if (zenity_list_print_column)
- g_free (zenity_list_print_column);
- if (zenity_list_hide_column)
- g_free (zenity_list_hide_column);
-
-#ifdef HAVE_LIBNOTIFY
- if (zenity_notification_hints)
- g_strfreev (zenity_notification_hints);
-#endif
-
- if (zenity_text_font)
- g_free (zenity_text_font);
- if (zenity_text_checkbox)
- g_free (zenity_text_checkbox);
-
- if (zenity_colorsel_color)
- g_free (zenity_colorsel_color);
-
- g_option_context_free (ctx);
-}
-
static void
-zenity_option_set_dialog_mode (gboolean is_active, ZenityDialogMode mode) {
- if (is_active == TRUE) {
+zenity_option_set_dialog_mode (gboolean is_active, ZenityDialogMode mode)
+{
+ if (is_active == TRUE)
+ {
if (results->mode == MODE_LAST)
results->mode = mode;
else
@@ -1128,21 +1103,22 @@ zenity_option_set_dialog_mode (gboolean is_active, ZenityDialogMode mode) {
}
}
-static gchar *
-zenity_option_get_name (GOptionEntry *entries, gpointer arg_data) {
- int i;
-
- for (i = 1; entries[i].long_name != NULL; i++) {
+static char *
+zenity_option_get_name (GOptionEntry *entries, gpointer arg_data)
+{
+ for (int i = 1; entries[i].long_name != NULL; i++)
+ {
if (entries[i].arg_data == arg_data)
- return (gchar *) entries[i].long_name;
+ return (char *)entries[i].long_name;
}
return NULL;
}
/* Forms callback */
static gboolean
-zenity_forms_callback (const gchar *option_name, const gchar *value,
- gpointer data, GError **error) {
+zenity_forms_callback (const char *option_name, const char *value,
+ gpointer data, GError **error)
+{
ZenityFormsValue *forms_value = g_new0 (ZenityFormsValue, 1);
forms_value->option_value = g_strdup (value);
@@ -1167,7 +1143,8 @@ zenity_forms_callback (const gchar *option_name, const gchar *value,
/* Error callback */
static void
zenity_option_error_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_error (NULL, ERROR_SYNTAX);
}
@@ -1175,9 +1152,9 @@ zenity_option_error_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_general_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_general_dialog_title = NULL;
- zenity_general_window_icon = NULL;
zenity_general_width = -1;
zenity_general_height = -1;
zenity_general_dialog_text = NULL;
@@ -1192,14 +1169,14 @@ zenity_general_pre_callback (GOptionContext *context, GOptionGroup *group,
zenity_general_dialog_no_markup = FALSE;
zenity_general_timeout_delay = -1;
zenity_general_modal = FALSE;
- zenity_general_attach = 0;
return TRUE;
}
static gboolean
zenity_calendar_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_calendar_active = FALSE;
zenity_calendar_date_format = NULL;
zenity_calendar_day = -1;
@@ -1211,7 +1188,8 @@ zenity_calendar_pre_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_entry_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_entry_active = FALSE;
zenity_entry_entry_text = NULL;
zenity_entry_hide_text = FALSE;
@@ -1221,7 +1199,8 @@ zenity_entry_pre_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_error_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_error_active = FALSE;
return TRUE;
@@ -1229,7 +1208,8 @@ zenity_error_pre_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_info_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_info_active = FALSE;
return TRUE;
@@ -1237,11 +1217,11 @@ zenity_info_pre_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_file_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_file_active = FALSE;
zenity_file_directory = FALSE;
zenity_file_save = FALSE;
- zenity_file_confirm_overwrite = FALSE;
zenity_file_filter = NULL;
return TRUE;
@@ -1249,7 +1229,8 @@ zenity_file_pre_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_list_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_list_active = FALSE;
zenity_list_columns = NULL;
zenity_list_checklist = FALSE;
@@ -1263,20 +1244,20 @@ zenity_list_pre_callback (GOptionContext *context, GOptionGroup *group,
return TRUE;
}
-#ifdef HAVE_LIBNOTIFY
static gboolean
zenity_notification_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_notification_active = FALSE;
zenity_notification_listen = FALSE;
return TRUE;
}
-#endif
static gboolean
zenity_progress_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_progress_active = FALSE;
zenity_progress_percentage = 0;
zenity_progress_pulsate = FALSE;
@@ -1284,21 +1265,25 @@ zenity_progress_pre_callback (GOptionContext *context, GOptionGroup *group,
zenity_progress_auto_kill = FALSE;
zenity_progress_no_cancel = FALSE;
zenity_progress_time_remaining = FALSE;
+
return TRUE;
}
static gboolean
zenity_question_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_question_active = FALSE;
zenity_question_default_cancel = FALSE;
zenity_question_switch = FALSE;
+
return TRUE;
}
static gboolean
zenity_text_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_text_active = FALSE;
zenity_text_font = NULL;
zenity_text_checkbox = NULL;
@@ -1308,12 +1293,14 @@ zenity_text_pre_callback (GOptionContext *context, GOptionGroup *group,
zenity_text_no_interaction = FALSE;
zenity_text_url = NULL;
#endif
+
return TRUE;
}
static gboolean
zenity_warning_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_warning_active = FALSE;
return TRUE;
@@ -1321,7 +1308,8 @@ zenity_warning_pre_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_scale_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_scale_active = FALSE;
zenity_scale_value = 0;
zenity_scale_min_value = 0;
@@ -1335,7 +1323,8 @@ zenity_scale_pre_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_color_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_colorsel_active = FALSE;
zenity_colorsel_color = NULL;
zenity_colorsel_show_palette = FALSE;
@@ -1345,7 +1334,8 @@ zenity_color_pre_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_password_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_password_active = FALSE;
zenity_password_show_username = FALSE;
@@ -1354,17 +1344,19 @@ zenity_password_pre_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_forms_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_forms_active = FALSE;
zenity_forms_show_header = FALSE;
zenity_forms_date_format = NULL;
- // zenity_forms_hide_column = NULL;
+
return TRUE;
}
static gboolean
zenity_misc_pre_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_misc_about = FALSE;
zenity_misc_version = FALSE;
@@ -1376,9 +1368,9 @@ zenity_misc_pre_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_general_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
results->data->dialog_title = zenity_general_dialog_title;
- results->data->window_icon = zenity_general_window_icon;
results->data->width = zenity_general_width;
results->data->height = zenity_general_height;
results->data->timeout_delay = zenity_general_timeout_delay;
@@ -1386,17 +1378,18 @@ zenity_general_post_callback (GOptionContext *context, GOptionGroup *group,
results->data->cancel_label = zenity_general_cancel_button;
results->data->extra_label = zenity_general_extra_buttons;
results->data->modal = zenity_general_modal;
- results->data->attach = zenity_general_attach;
return TRUE;
}
static gboolean
zenity_calendar_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_calendar_active, MODE_CALENDAR);
- if (results->mode == MODE_CALENDAR) {
+ if (results->mode == MODE_CALENDAR)
+ {
struct tm *t;
time_t current_time;
@@ -1415,73 +1408,98 @@ zenity_calendar_post_callback (GOptionContext *context, GOptionGroup *group,
results->calendar_data->month = zenity_calendar_month;
results->calendar_data->year = zenity_calendar_year;
- if (zenity_calendar_date_format)
+ if (zenity_calendar_date_format) {
results->calendar_data->date_format = zenity_calendar_date_format;
- else
+ } else {
results->calendar_data->date_format =
g_locale_to_utf8 (nl_langinfo (D_FMT), -1, NULL, NULL, NULL);
-
- } else {
- if (zenity_calendar_day > -1)
- zenity_option_error (
- zenity_option_get_name (calendar_options, &zenity_calendar_day),
+ }
+ }
+ else
+ {
+ if (zenity_calendar_day > -1) {
+ zenity_option_error (zenity_option_get_name (calendar_options,
+ &zenity_calendar_day),
ERROR_SUPPORT);
+ }
- if (zenity_calendar_month > -1)
- zenity_option_error (zenity_option_get_name (
- calendar_options, &zenity_calendar_month),
+ if (zenity_calendar_month > -1) {
+ zenity_option_error (zenity_option_get_name (calendar_options,
+ &zenity_calendar_month),
ERROR_SUPPORT);
+ }
- if (zenity_calendar_year > -1)
- zenity_option_error (zenity_option_get_name (
- calendar_options, &zenity_calendar_year),
+ if (zenity_calendar_year > -1) {
+ zenity_option_error (zenity_option_get_name (calendar_options,
+ &zenity_calendar_year),
ERROR_SUPPORT);
+ }
- if (zenity_calendar_date_format)
+ if (zenity_calendar_date_format) {
zenity_option_error (zenity_option_get_name (calendar_options,
- &zenity_calendar_date_format),
+ &zenity_calendar_date_format),
ERROR_SUPPORT);
+ }
}
-
return TRUE;
}
static gboolean
zenity_entry_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_entry_active, MODE_ENTRY);
- if (results->mode == MODE_ENTRY) {
+ if (results->mode == MODE_ENTRY)
+ {
results->entry_data->dialog_text = zenity_general_dialog_text;
results->entry_data->entry_text = zenity_entry_entry_text;
results->entry_data->hide_text = zenity_entry_hide_text;
- } else {
- if (zenity_entry_entry_text)
- zenity_option_error (zenity_option_get_name (
- entry_options, &zenity_entry_entry_text),
+ }
+ else
+ {
+ if (zenity_entry_entry_text) {
+ zenity_option_error (zenity_option_get_name (entry_options,
+ &zenity_entry_entry_text),
ERROR_SUPPORT);
+ }
- if (zenity_entry_hide_text)
- zenity_option_error (
- zenity_option_get_name (entry_options, &zenity_entry_hide_text),
+ if (zenity_entry_hide_text) {
+ zenity_option_error (zenity_option_get_name (entry_options,
+ &zenity_entry_hide_text),
ERROR_SUPPORT);
+ }
}
-
return TRUE;
}
+static void
+show_window_icon_deprecation_warning (void)
+{
+ g_printerr ("Warning: --window-icon is deprecated and will be removed in a "
+ "future version of zenity. Please use --icon instead.\n");
+}
+
static gboolean
zenity_error_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_error_active, MODE_ERROR);
- if (results->mode == MODE_ERROR) {
+ if (results->mode == MODE_ERROR)
+ {
results->msg_data->dialog_text = zenity_general_dialog_text;
- results->msg_data->dialog_icon = zenity_general_dialog_icon;
+ results->msg_data->dialog_icon = zenity_general_icon;
results->msg_data->mode = ZENITY_MSG_ERROR;
results->msg_data->no_wrap = zenity_general_dialog_no_wrap;
results->msg_data->no_markup = zenity_general_dialog_no_markup;
results->msg_data->ellipsize = zenity_general_dialog_ellipsize;
+
+ if (zenity_general_icon_DEPRECATED)
+ {
+ results->msg_data->dialog_icon = zenity_general_icon_DEPRECATED;
+ show_window_icon_deprecation_warning ();
+ }
}
return TRUE;
@@ -1489,16 +1507,24 @@ zenity_error_post_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_info_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_info_active, MODE_INFO);
- if (results->mode == MODE_INFO) {
+ if (results->mode == MODE_INFO)
+ {
results->msg_data->dialog_text = zenity_general_dialog_text;
- results->msg_data->dialog_icon = zenity_general_dialog_icon;
+ results->msg_data->dialog_icon = zenity_general_icon;
results->msg_data->mode = ZENITY_MSG_INFO;
results->msg_data->no_wrap = zenity_general_dialog_no_wrap;
results->msg_data->no_markup = zenity_general_dialog_no_markup;
results->msg_data->ellipsize = zenity_general_dialog_ellipsize;
+
+ if (zenity_general_icon_DEPRECATED)
+ {
+ results->msg_data->dialog_icon = zenity_general_icon_DEPRECATED;
+ show_window_icon_deprecation_warning ();
+ }
}
return TRUE;
@@ -1506,51 +1532,61 @@ zenity_info_post_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_file_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_file_active, MODE_FILE);
- if (results->mode == MODE_FILE) {
+ if (results->mode == MODE_FILE)
+ {
results->file_data->uri = zenity_general_uri;
results->file_data->multi = zenity_general_multiple;
results->file_data->directory = zenity_file_directory;
results->file_data->save = zenity_file_save;
- results->file_data->confirm_overwrite = zenity_file_confirm_overwrite;
results->file_data->separator = zenity_general_separator;
results->file_data->filter = zenity_file_filter;
- } else {
- if (zenity_file_directory)
+ }
+ else
+ {
+ if (zenity_file_directory) {
zenity_option_error (zenity_option_get_name (file_selection_options,
- &zenity_file_directory),
+ &zenity_file_directory),
ERROR_SUPPORT);
+ }
- if (zenity_file_save)
- zenity_option_error (zenity_option_get_name (
- file_selection_options, &zenity_file_save),
+ if (zenity_file_save) {
+ zenity_option_error (zenity_option_get_name (file_selection_options,
+ &zenity_file_save),
ERROR_SUPPORT);
+ }
- if (zenity_file_filter)
+ if (zenity_file_filter) {
zenity_option_error (zenity_option_get_name (file_selection_options,
- &zenity_file_filter),
+ &zenity_file_filter),
ERROR_SUPPORT);
+ }
}
-
return TRUE;
}
static gboolean
zenity_list_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
int i = 0;
- gchar *column;
+ char *column;
zenity_option_set_dialog_mode (zenity_list_active, MODE_LIST);
- if (results->mode == MODE_LIST) {
+ if (results->mode == MODE_LIST)
+ {
results->tree_data->dialog_text = zenity_general_dialog_text;
- if (zenity_list_columns) {
+ if (zenity_list_columns)
+ {
column = zenity_list_columns[0];
- while (column != NULL) {
+
+ while (column != NULL)
+ {
results->tree_data->columns =
g_slist_append (results->tree_data->columns, column);
column = zenity_list_columns[++i];
@@ -1567,7 +1603,9 @@ zenity_list_post_callback (GOptionContext *context, GOptionGroup *group,
results->tree_data->hide_header = zenity_list_hide_header;
results->tree_data->separator = zenity_general_separator;
results->tree_data->mid_search = zenity_list_mid_search;
- } else {
+ }
+ else
+ {
if (zenity_list_columns)
zenity_option_error (
zenity_option_get_name (list_options, &zenity_list_columns),
@@ -1607,39 +1645,47 @@ zenity_list_post_callback (GOptionContext *context, GOptionGroup *group,
zenity_option_get_name (list_options, &zenity_list_mid_search),
ERROR_SUPPORT);
}
-
return TRUE;
}
-#ifdef HAVE_LIBNOTIFY
static gboolean
zenity_notification_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
- zenity_option_set_dialog_mode (
- zenity_notification_active, MODE_NOTIFICATION);
+ gpointer data, GError **error)
+{
+ zenity_option_set_dialog_mode (zenity_notification_active,
+ MODE_NOTIFICATION);
- if (results->mode == MODE_NOTIFICATION) {
+ if (results->mode == MODE_NOTIFICATION)
+ {
results->notification_data->notification_text =
zenity_general_dialog_text;
results->notification_data->listen = zenity_notification_listen;
- results->notification_data->notification_hints =
- zenity_notification_hints;
- } else {
- if (zenity_notification_listen)
+ results->notification_data->icon = zenity_general_icon;
+
+ if (zenity_general_icon_DEPRECATED)
+ {
+ results->notification_data->icon = zenity_general_icon_DEPRECATED;
+ show_window_icon_deprecation_warning ();
+ }
+ }
+ else
+ {
+ if (zenity_notification_listen) {
zenity_option_error (zenity_option_get_name (notification_options,
- &zenity_notification_listen),
+ &zenity_notification_listen),
ERROR_SUPPORT);
+ }
}
-
return TRUE;
}
-#endif
static gboolean
zenity_progress_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_progress_active, MODE_PROGRESS);
- if (results->mode == MODE_PROGRESS) {
+ if (results->mode == MODE_PROGRESS)
+ {
results->progress_data->dialog_text = zenity_general_dialog_text;
results->progress_data->pulsate = zenity_progress_pulsate;
results->progress_data->autoclose = zenity_progress_auto_close;
@@ -1647,48 +1693,58 @@ zenity_progress_post_callback (GOptionContext *context, GOptionGroup *group,
results->progress_data->percentage = zenity_progress_percentage;
results->progress_data->no_cancel = zenity_progress_no_cancel;
results->progress_data->time_remaining = zenity_progress_time_remaining;
- } else {
- if (zenity_progress_pulsate)
+ }
+ else
+ {
+ if (zenity_progress_pulsate) {
zenity_option_error (zenity_option_get_name (progress_options,
- &zenity_progress_pulsate),
+ &zenity_progress_pulsate),
ERROR_SUPPORT);
+ }
- if (zenity_progress_percentage)
+ if (zenity_progress_percentage) {
zenity_option_error (zenity_option_get_name (progress_options,
- &zenity_progress_percentage),
+ &zenity_progress_percentage),
ERROR_SUPPORT);
+ }
- if (zenity_progress_auto_close)
+ if (zenity_progress_auto_close) {
zenity_option_error (zenity_option_get_name (progress_options,
- &zenity_progress_auto_close),
+ &zenity_progress_auto_close),
ERROR_SUPPORT);
+ }
- if (zenity_progress_auto_kill)
+ if (zenity_progress_auto_kill) {
zenity_option_error (zenity_option_get_name (progress_options,
- &zenity_progress_auto_kill),
+ &zenity_progress_auto_kill),
ERROR_SUPPORT);
+ }
- if (zenity_progress_no_cancel)
+ if (zenity_progress_no_cancel) {
zenity_option_error (zenity_option_get_name (progress_options,
- &zenity_progress_no_cancel),
+ &zenity_progress_no_cancel),
ERROR_SUPPORT);
+ }
- if (zenity_progress_time_remaining)
+ if (zenity_progress_time_remaining) {
zenity_option_error (zenity_option_get_name (progress_options,
- &zenity_progress_time_remaining),
+ &zenity_progress_time_remaining),
ERROR_SUPPORT);
+ }
}
-
return TRUE;
}
static gboolean
zenity_question_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_question_active, MODE_QUESTION);
- if (results->mode == MODE_QUESTION) {
+
+ if (results->mode == MODE_QUESTION)
+ {
results->msg_data->dialog_text = zenity_general_dialog_text;
- results->msg_data->dialog_icon = zenity_general_dialog_icon;
+ results->msg_data->dialog_icon = zenity_general_icon;
if (zenity_question_switch)
results->msg_data->mode = ZENITY_MSG_SWITCH;
else
@@ -1697,21 +1753,31 @@ zenity_question_post_callback (GOptionContext *context, GOptionGroup *group,
results->msg_data->no_markup = zenity_general_dialog_no_markup;
results->msg_data->ellipsize = zenity_general_dialog_ellipsize;
results->msg_data->default_cancel = zenity_question_default_cancel;
+
+ if (zenity_general_icon_DEPRECATED)
+ {
+ results->msg_data->dialog_icon = zenity_general_icon_DEPRECATED;
+ show_window_icon_deprecation_warning ();
+ }
}
- if (zenity_question_switch && zenity_general_extra_buttons == NULL)
- zenity_option_error (
- zenity_option_get_name (question_options, &zenity_question_switch),
- ERROR_SYNTAX);
+ if (zenity_question_switch && zenity_general_extra_buttons == NULL)
+ {
+ zenity_option_error (zenity_option_get_name (question_options,
+ &zenity_question_switch),
+ ERROR_SYNTAX);
+ }
return TRUE;
}
static gboolean
zenity_text_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_text_active, MODE_TEXTINFO);
- if (results->mode == MODE_TEXTINFO) {
+ if (results->mode == MODE_TEXTINFO)
+ {
results->text_data->uri = zenity_general_uri;
results->text_data->editable = zenity_general_editable;
results->text_data->no_wrap = zenity_general_dialog_no_wrap;
@@ -1723,16 +1789,20 @@ zenity_text_post_callback (GOptionContext *context, GOptionGroup *group,
results->text_data->no_interaction = zenity_text_no_interaction;
results->text_data->url = zenity_text_url;
#endif
- } else {
- if (zenity_text_font)
- zenity_option_error (
- zenity_option_get_name (text_options, &zenity_text_font),
- ERROR_SUPPORT);
+ }
+ else
+ {
+ if (zenity_text_font) {
+ zenity_option_error (zenity_option_get_name (text_options,
+ &zenity_text_font),
+ ERROR_SUPPORT);
+ }
#ifdef HAVE_WEBKITGTK
- if (zenity_text_enable_html)
- zenity_option_error (
- zenity_option_get_name (text_options, &zenity_text_enable_html),
+ if (zenity_text_enable_html) {
+ zenity_option_error (zenity_option_get_name (text_options,
+ &zenity_text_enable_html),
ERROR_SUPPORT);
+ }
#endif
}
return TRUE;
@@ -1740,16 +1810,24 @@ zenity_text_post_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_warning_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_warning_active, MODE_WARNING);
- if (results->mode == MODE_WARNING) {
+ if (results->mode == MODE_WARNING)
+ {
results->msg_data->dialog_text = zenity_general_dialog_text;
- results->msg_data->dialog_icon = zenity_general_dialog_icon;
+ results->msg_data->dialog_icon = zenity_general_icon;
results->msg_data->mode = ZENITY_MSG_WARNING;
results->msg_data->no_wrap = zenity_general_dialog_no_wrap;
results->msg_data->no_markup = zenity_general_dialog_no_markup;
results->msg_data->ellipsize = zenity_general_dialog_ellipsize;
+
+ if (zenity_general_icon_DEPRECATED)
+ {
+ results->msg_data->dialog_icon = zenity_general_icon_DEPRECATED;
+ show_window_icon_deprecation_warning ();
+ }
}
return TRUE;
@@ -1757,10 +1835,12 @@ zenity_warning_post_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_scale_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_scale_active, MODE_SCALE);
- if (results->mode == MODE_SCALE) {
+ if (results->mode == MODE_SCALE)
+ {
results->scale_data->dialog_text = zenity_general_dialog_text;
results->scale_data->value = zenity_scale_value;
results->scale_data->min_value = zenity_scale_min_value;
@@ -1775,40 +1855,47 @@ zenity_scale_post_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_color_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_colorsel_active, MODE_COLOR);
- if (results->mode == MODE_COLOR) {
+ if (results->mode == MODE_COLOR)
+ {
results->color_data->color = zenity_colorsel_color;
results->color_data->show_palette = zenity_colorsel_show_palette;
- } else {
- if (zenity_colorsel_color)
- zenity_option_error (
- zenity_option_get_name (
- color_selection_options, &zenity_colorsel_color),
- ERROR_SUPPORT);
-
- if (zenity_colorsel_show_palette)
- zenity_option_error (
- zenity_option_get_name (
- color_selection_options, &zenity_colorsel_show_palette),
- ERROR_SUPPORT);
}
+ else
+ {
+ if (zenity_colorsel_color) {
+ zenity_option_error
+ (zenity_option_get_name (color_selection_options,
+ &zenity_colorsel_color),
+ ERROR_SUPPORT);
+ }
+ if (zenity_colorsel_show_palette) {
+ zenity_option_error
+ (zenity_option_get_name (color_selection_options,
+ &zenity_colorsel_show_palette),
+ ERROR_SUPPORT);
+ }
+ }
return TRUE;
}
static gboolean
zenity_forms_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
- gchar *values;
+ gpointer data, GError **error)
+{
+ char *values;
int i = 0;
zenity_option_set_dialog_mode (zenity_forms_active, MODE_FORMS);
- if (results->mode == MODE_FORMS) {
+
+ if (results->mode == MODE_FORMS)
+ {
results->forms_data->dialog_text = zenity_general_dialog_text;
results->forms_data->separator = zenity_general_separator;
- // results->forms_data->hide_column = zenity_forms_hide_column;
results->forms_data->show_header = zenity_forms_show_header;
if (zenity_forms_list_values) {
@@ -1845,7 +1932,9 @@ zenity_forms_post_callback (GOptionContext *context, GOptionGroup *group,
else
results->forms_data->date_format =
g_locale_to_utf8 (nl_langinfo (D_FMT), -1, NULL, NULL, NULL);
- } else {
+ }
+ else
+ {
if (zenity_forms_date_format)
zenity_option_error (zenity_option_get_name (forms_dialog_options,
&zenity_forms_date_format),
@@ -1854,10 +1943,6 @@ zenity_forms_post_callback (GOptionContext *context, GOptionGroup *group,
zenity_option_error (zenity_option_get_name (forms_dialog_options,
&zenity_forms_list_values),
ERROR_SUPPORT);
- // if (zenity_forms_hide_column)
- // zenity_option_error (zenity_option_get_name
- // (forms_dialog_options, &zenity_forms_hide_column),
- // ERROR_SUPPORT);
if (zenity_forms_column_values)
zenity_option_error (zenity_option_get_name (forms_dialog_options,
&zenity_forms_column_values),
@@ -1877,24 +1962,26 @@ zenity_forms_post_callback (GOptionContext *context, GOptionGroup *group,
static gboolean
zenity_password_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_password_active, MODE_PASSWORD);
+
if (results->mode == MODE_PASSWORD) {
results->password_data->username = zenity_password_show_username;
} else {
if (zenity_password_show_username)
- zenity_option_error (
- zenity_option_get_name (
- password_dialog_options, &zenity_password_show_username),
- ERROR_SUPPORT);
+ zenity_option_error
+ (zenity_option_get_name (password_dialog_options,
+ &zenity_password_show_username),
+ ERROR_SUPPORT);
}
-
return TRUE;
}
static gboolean
zenity_misc_post_callback (GOptionContext *context, GOptionGroup *group,
- gpointer data, GError **error) {
+ gpointer data, GError **error)
+{
zenity_option_set_dialog_mode (zenity_misc_about, MODE_ABOUT);
zenity_option_set_dialog_mode (zenity_misc_version, MODE_VERSION);
@@ -1902,7 +1989,8 @@ zenity_misc_post_callback (GOptionContext *context, GOptionGroup *group,
}
static GOptionContext *
-zenity_create_context (void) {
+zenity_create_context (void)
+{
GOptionContext *tmp_ctx;
GOptionGroup *a_group;
@@ -1915,8 +2003,8 @@ zenity_create_context (void) {
NULL,
NULL);
g_option_group_add_entries (a_group, general_options);
- g_option_group_set_parse_hooks (
- a_group, zenity_general_pre_callback, zenity_general_post_callback);
+ g_option_group_set_parse_hooks (a_group,
+ zenity_general_pre_callback, zenity_general_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group (tmp_ctx, a_group);
@@ -1928,8 +2016,8 @@ zenity_create_context (void) {
NULL,
NULL);
g_option_group_add_entries (a_group, calendar_options);
- g_option_group_set_parse_hooks (
- a_group, zenity_calendar_pre_callback, zenity_calendar_post_callback);
+ g_option_group_set_parse_hooks (a_group,
+ zenity_calendar_pre_callback, zenity_calendar_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group (tmp_ctx, a_group);
@@ -1941,15 +2029,15 @@ zenity_create_context (void) {
NULL,
NULL);
g_option_group_add_entries (a_group, entry_options);
- g_option_group_set_parse_hooks (
- a_group, zenity_entry_pre_callback, zenity_entry_post_callback);
+ g_option_group_set_parse_hooks (a_group,
+ zenity_entry_pre_callback, zenity_entry_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group (tmp_ctx, a_group);
/* Adds error option entries */
- a_group = g_option_group_new (
- "error", N_ ("Error options"), N_ ("Show error options"), NULL, NULL);
+ a_group = g_option_group_new ("error",
+ N_ ("Error options"), N_ ("Show error options"), NULL, NULL);
g_option_group_add_entries (a_group, error_options);
g_option_group_set_parse_hooks (
a_group, zenity_error_pre_callback, zenity_error_post_callback);
@@ -1958,8 +2046,8 @@ zenity_create_context (void) {
g_option_context_add_group (tmp_ctx, a_group);
/* Adds info option entries */
- a_group = g_option_group_new (
- "info", N_ ("Info options"), N_ ("Show info options"), NULL, NULL);
+ a_group = g_option_group_new ("info",
+ N_ ("Info options"), N_ ("Show info options"), NULL, NULL);
g_option_group_add_entries (a_group, info_options);
g_option_group_set_parse_hooks (
a_group, zenity_info_pre_callback, zenity_info_post_callback);
@@ -1990,11 +2078,10 @@ zenity_create_context (void) {
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group (tmp_ctx, a_group);
-#ifdef HAVE_LIBNOTIFY
/* Adds notification option entries */
a_group = g_option_group_new ("notification",
- N_ ("Notification icon options"),
- N_ ("Show notification icon options"),
+ N_ ("Notification options"),
+ N_ ("Show notification options"),
NULL,
NULL);
g_option_group_add_entries (a_group, notification_options);
@@ -2004,7 +2091,6 @@ zenity_create_context (void) {
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group (tmp_ctx, a_group);
-#endif
/* Adds progress option entries */
a_group = g_option_group_new ("progress",
@@ -2026,8 +2112,8 @@ zenity_create_context (void) {
NULL,
NULL);
g_option_group_add_entries (a_group, question_options);
- g_option_group_set_parse_hooks (
- a_group, zenity_question_pre_callback, zenity_question_post_callback);
+ g_option_group_set_parse_hooks (a_group,
+ zenity_question_pre_callback, zenity_question_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group (tmp_ctx, a_group);
@@ -2039,15 +2125,15 @@ zenity_create_context (void) {
NULL,
NULL);
g_option_group_add_entries (a_group, warning_options);
- g_option_group_set_parse_hooks (
- a_group, zenity_warning_pre_callback, zenity_warning_post_callback);
+ g_option_group_set_parse_hooks (a_group,
+ zenity_warning_pre_callback, zenity_warning_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group (tmp_ctx, a_group);
/* Adds scale option entries */
- a_group = g_option_group_new (
- "scale", N_ ("Scale options"), N_ ("Show scale options"), NULL, NULL);
+ a_group = g_option_group_new ("scale",
+ N_ ("Scale options"), N_ ("Show scale options"), NULL, NULL);
g_option_group_add_entries (a_group, scale_options);
g_option_group_set_parse_hooks (
a_group, zenity_scale_pre_callback, zenity_scale_post_callback);
@@ -2075,8 +2161,8 @@ zenity_create_context (void) {
NULL,
NULL);
g_option_group_add_entries (a_group, color_selection_options);
- g_option_group_set_parse_hooks (
- a_group, zenity_color_pre_callback, zenity_color_post_callback);
+ g_option_group_set_parse_hooks (a_group,
+ zenity_color_pre_callback, zenity_color_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group (tmp_ctx, a_group);
@@ -2088,8 +2174,8 @@ zenity_create_context (void) {
NULL,
NULL);
g_option_group_add_entries (a_group, password_dialog_options);
- g_option_group_set_parse_hooks (
- a_group, zenity_password_pre_callback, zenity_password_post_callback);
+ g_option_group_set_parse_hooks (a_group,
+ zenity_password_pre_callback, zenity_password_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group (tmp_ctx, a_group);
@@ -2101,8 +2187,8 @@ zenity_create_context (void) {
NULL,
NULL);
g_option_group_add_entries (a_group, forms_dialog_options);
- g_option_group_set_parse_hooks (
- a_group, zenity_forms_pre_callback, zenity_forms_post_callback);
+ g_option_group_set_parse_hooks (a_group,
+ zenity_forms_pre_callback, zenity_forms_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group (tmp_ctx, a_group);
@@ -2114,17 +2200,12 @@ zenity_create_context (void) {
NULL,
NULL);
g_option_group_add_entries (a_group, miscellaneous_options);
- g_option_group_set_parse_hooks (
- a_group, zenity_misc_pre_callback, zenity_misc_post_callback);
+ g_option_group_set_parse_hooks (a_group,
+ zenity_misc_pre_callback, zenity_misc_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group (tmp_ctx, a_group);
- /* Adds gtk option entries */
- a_group = gtk_get_option_group (TRUE);
- g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
- g_option_context_add_group (tmp_ctx, a_group);
-
/* Enable help options */
g_option_context_set_help_enabled (tmp_ctx, TRUE);
g_option_context_set_ignore_unknown_options (tmp_ctx, FALSE);
@@ -2133,28 +2214,31 @@ zenity_create_context (void) {
}
void
-zenity_option_error (gchar *string, ZenityError error) {
- switch (error) {
+zenity_option_error (char *string, ZenityError error)
+{
+ switch (error)
+ {
case ERROR_SYNTAX:
g_printerr (_ ("This option is not available. Please see --help "
"for all possible usages.\n"));
- zenity_option_free ();
exit (-1);
+
case ERROR_SUPPORT:
g_printerr (_ ("--%s is not supported for this dialog\n"), string);
- zenity_option_free ();
exit (-1);
+
case ERROR_DIALOG:
g_printerr (_ ("Two or more dialog options specified\n"));
- zenity_option_free ();
exit (-1);
+
default:
return;
}
}
ZenityParsingOptions *
-zenity_option_parse (gint argc, gchar **argv) {
+zenity_option_parse (int argc, char **argv)
+{
GError *error = NULL;
zenity_option_init ();
diff --git a/src/option.h b/src/option.h
index b495e0e..5da7cfe 100644
--- a/src/option.h
+++ b/src/option.h
@@ -1,7 +1,8 @@
/*
* option.h
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -24,11 +25,9 @@
#define OPTION_H
#include "zenity.h"
+
#include <glib.h>
-#include <langinfo.h>
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
+#include <config.h>
typedef enum {
MODE_CALENDAR,
@@ -42,9 +41,7 @@ typedef enum {
MODE_WARNING,
MODE_SCALE,
MODE_INFO,
-#ifdef HAVE_LIBNOTIFY
MODE_NOTIFICATION,
-#endif
MODE_COLOR,
MODE_PASSWORD,
MODE_FORMS,
@@ -72,18 +69,14 @@ typedef struct {
ZenityProgressData *progress_data;
ZenityTextData *text_data;
ZenityTreeData *tree_data;
-#ifdef HAVE_LIBNOTIFY
ZenityNotificationData *notification_data;
-#endif
ZenityColorData *color_data;
ZenityPasswordData *password_data;
ZenityFormsData *forms_data;
} ZenityParsingOptions;
-void zenity_option_error (gchar *string, ZenityError error);
-
-ZenityParsingOptions *zenity_option_parse (gint argc, gchar **argv);
+void zenity_option_error (char *string, ZenityError error);
-void zenity_option_free (void);
+ZenityParsingOptions *zenity_option_parse (int argc, char **argv);
#endif /* OPTION_H */
diff --git a/src/password.c b/src/password.c
index a5490d3..69dd683 100644
--- a/src/password.c
+++ b/src/password.c
@@ -1,19 +1,22 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* password.c
*
- * Copyright (C) 2010 Arx Cruz
+ * Copyright © 2010 Arx Cruz
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 121 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
@@ -21,153 +24,155 @@
* Authors: Arx Cruz <arxcruz@gmail.com>
*/
-#include "config.h"
#include "util.h"
#include "zenity.h"
+
#include <string.h>
+#include <config.h>
+
static ZenityData *zen_data;
-static void zenity_password_dialog_response (
- GtkWidget *widget, int response, gpointer data);
+static void zenity_password_dialog_response (GtkWidget *widget, char *rstr, gpointer data);
void
-zenity_password_dialog (ZenityData *data, ZenityPasswordData *password_data) {
+zenity_password_dialog (ZenityData *data, ZenityPasswordData *password_data)
+{
+ GtkBuilder *builder;
GtkWidget *dialog;
- GtkWidget *image;
- GtkWidget *hbox;
- GtkWidget *vbox_labels;
- GtkWidget *vbox_entries;
+ GtkWidget *grid;
GtkWidget *label;
+ int pass_row = 0;
+ /* Set global */
zen_data = data;
- dialog = gtk_dialog_new ();
+ builder = zenity_util_load_ui_file ("zenity_password_dialog", "zenity_password_box", NULL);
- if (data->extra_label) {
- gint i = 0;
- while (data->extra_label[i] != NULL) {
- gtk_dialog_add_button (
- GTK_DIALOG (dialog), data->extra_label[i], i);
- i++;
- }
+ if (builder == NULL)
+ {
+ data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
+ return;
}
- gtk_dialog_add_button (GTK_DIALOG (dialog),
- data->cancel_label != NULL ? data->cancel_label : _ ("_Cancel"),
- GTK_RESPONSE_CANCEL);
- gtk_dialog_add_button (GTK_DIALOG (dialog),
- data->ok_label != NULL ? data->ok_label : _ ("_OK"),
- GTK_RESPONSE_OK);
+ dialog = GTK_WIDGET(gtk_builder_get_object (builder,
+ "zenity_password_dialog"));
+
+ if (data->extra_label)
+ {
+ ZENITY_UTIL_ADD_EXTRA_LABELS (dialog)
+ }
- image =
- gtk_image_new_from_icon_name ("dialog-password", GTK_ICON_SIZE_DIALOG);
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
- gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 12);
+ if (data->ok_label) {
+ ZENITY_UTIL_SETUP_OK_BUTTON_LABEL (dialog);
+ }
- /* Checks if username has been passed as a parameter */
- gchar *title_text = _ ("Type your password");
+ if (data->cancel_label)
+ {
+ ZENITY_UTIL_SETUP_CANCEL_BUTTON_LABEL (dialog);
+ }
+ grid = GTK_WIDGET(gtk_builder_get_object (builder,
+ "zenity_password_grid"));
+
+ /* Checks if username has been passed as a parameter */
if (password_data->username)
- title_text = _ ("Type your username and password");
-
- label = gtk_label_new (title_text);
-
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 12);
- gtk_box_pack_start (
- GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
- hbox,
- FALSE,
- TRUE,
- 5);
-
- vbox_labels = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
- vbox_entries = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
-
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
- gtk_box_pack_start (
- GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
- hbox,
- FALSE,
- TRUE,
- 5);
-
- gtk_box_pack_start (GTK_BOX (hbox), vbox_labels, FALSE, TRUE, 12);
- gtk_box_pack_start (GTK_BOX (hbox), vbox_entries, TRUE, TRUE, 12);
-
- if (password_data->username) {
- label = gtk_label_new (_ ("Username:"));
- gtk_box_pack_start (GTK_BOX (vbox_labels), label, TRUE, FALSE, 12);
+ {
+ /* Change the password label to ask for both username and password */
+ label = GTK_WIDGET(gtk_builder_get_object (builder,
+ "zenity_password_title"));
+ gtk_label_set_text (GTK_LABEL(label),
+ _("Type your username and password"));
+
+ /* Add the username label and entry and increment the row for the
+ * password entry so it will be added below the username.
+ */
+ label = gtk_label_new (_("Username:"));
+ gtk_grid_attach (GTK_GRID(grid), label,
+ 0, /* col */
+ 0, /* row */
+ 1, 1); /* width/height by cell. */
+
password_data->entry_username = gtk_entry_new ();
- gtk_box_pack_start (GTK_BOX (vbox_entries),
- password_data->entry_username,
- TRUE,
- TRUE,
- 12);
+ gtk_grid_attach (GTK_GRID(grid), password_data->entry_username,
+ 1,
+ 0,
+ 1, 1);
+
+ ++pass_row;
}
- label = gtk_label_new (_ ("Password:"));
- gtk_box_pack_start (GTK_BOX (vbox_labels), label, TRUE, FALSE, 12);
+ label = gtk_label_new (_("Password:"));
+ gtk_grid_attach (GTK_GRID(grid), label,
+ 0, /* col */
+ pass_row, /* row */
+ 1, 1); /* width/height by cell. */
+
password_data->entry_password = gtk_entry_new ();
- gtk_entry_set_visibility (GTK_ENTRY (password_data->entry_password), FALSE);
- gtk_entry_set_activates_default (
- GTK_ENTRY (password_data->entry_password), TRUE);
- gtk_box_pack_start (
- GTK_BOX (vbox_entries), password_data->entry_password, TRUE, TRUE, 12);
+ gtk_entry_set_visibility (GTK_ENTRY(password_data->entry_password), FALSE);
+ gtk_entry_set_input_purpose (GTK_ENTRY(password_data->entry_password),
+ GTK_INPUT_PURPOSE_PASSWORD);
+ gtk_entry_set_activates_default (GTK_ENTRY(password_data->entry_password),
+ TRUE);
+ gtk_grid_attach (GTK_GRID(grid), password_data->entry_password,
+ 1,
+ pass_row,
+ 1, 1);
if (data->dialog_title)
- gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
+ gtk_window_set_title (GTK_WINDOW(dialog), data->dialog_title);
if (data->modal)
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);
+
+ g_signal_connect (dialog, "response", G_CALLBACK(zenity_password_dialog_response), password_data);
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_password_dialog_response),
- password_data);
- gtk_widget_show_all (
- GTK_WIDGET (gtk_dialog_get_content_area (GTK_DIALOG (dialog))));
- zenity_util_show_dialog (dialog, data->attach);
+ zenity_util_show_dialog (dialog);
- if (data->timeout_delay > 0) {
+ if (data->timeout_delay > 0)
+ {
g_timeout_add_seconds (data->timeout_delay,
(GSourceFunc) zenity_util_timeout_handle,
dialog);
}
- gtk_main ();
+ zenity_util_gapp_main (GTK_WINDOW(dialog));
}
static void
-zenity_password_dialog_response (
- GtkWidget *widget, int response, gpointer data) {
- ZenityPasswordData *password_data = (ZenityPasswordData *) data;
- switch (response) {
- case GTK_RESPONSE_OK:
+zenity_password_dialog_response (GtkWidget *widget, char *rstr, gpointer data)
+{
+ ZenityPasswordData *password_data = data;
+ GtkEntryBuffer *user_buff, *pass_buff;
+ ZenityExitCode response = zenity_util_parse_dialog_response (rstr);
+
+ user_buff = gtk_entry_get_buffer (GTK_ENTRY(password_data->entry_username));
+ pass_buff = gtk_entry_get_buffer (GTK_ENTRY(password_data->entry_password));
+
+ switch (response)
+ {
+ case ZENITY_OK:
zenity_util_exit_code_with_data (ZENITY_OK, zen_data);
- if (password_data->username)
+ if (password_data->username) {
g_print ("%s|%s\n",
- gtk_entry_get_text (
- GTK_ENTRY (password_data->entry_username)),
- gtk_entry_get_text (
- GTK_ENTRY (password_data->entry_password)));
- else
+ gtk_entry_buffer_get_text (user_buff),
+ gtk_entry_buffer_get_text (pass_buff));
+ }
+ else {
g_print ("%s\n",
- gtk_entry_get_text (
- GTK_ENTRY (password_data->entry_password)));
+ gtk_entry_buffer_get_text (pass_buff));
+ }
break;
- case GTK_RESPONSE_CANCEL:
+ case ZENITY_CANCEL:
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
break;
default:
if (zen_data->extra_label &&
- response < g_strv_length (zen_data->extra_label))
+ response < (int)g_strv_length (zen_data->extra_label))
printf ("%s\n", zen_data->extra_label[response]);
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
break;
}
-
- gtk_main_quit ();
+ zenity_util_gapp_quit (GTK_WINDOW(widget), zen_data);
}
diff --git a/src/progress.c b/src/progress.c
index 00bb8aa..cae1a6c 100644
--- a/src/progress.c
+++ b/src/progress.c
@@ -1,30 +1,33 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* progress.c
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
- * Authors: Glynn Foster <glynn.foster@sun.com>
+ * Original Author: Glynn Foster <glynn.foster@sun.com>
*/
-#include "config.h"
#include "util.h"
#include "zenity.h"
+
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
@@ -33,11 +36,13 @@
#include <time.h>
#include <unistd.h>
+#include <config.h>
+
static GtkBuilder *builder;
static ZenityData *zen_data;
static GIOChannel *channel;
-static gint pulsate_timeout = -1;
+static int pulsate_timeout = -1;
static gboolean autokill;
static gboolean no_cancel;
static gboolean auto_close;
@@ -45,17 +50,19 @@ static gboolean auto_close;
gint zenity_progress_timeout (gpointer data);
gint zenity_progress_pulsate_timeout (gpointer data);
-static void zenity_progress_dialog_response (
- GtkWidget *widget, int response, gpointer data);
+static void zenity_progress_dialog_response (GtkWidget *widget, char *rstr, gpointer data);
static gboolean
-zenity_progress_pulsate_progress_bar (gpointer user_data) {
+zenity_progress_pulsate_progress_bar (gpointer user_data)
+{
gtk_progress_bar_pulse (GTK_PROGRESS_BAR (user_data));
+
return TRUE;
}
static void
-zenity_progress_pulsate_stop (void) {
+zenity_progress_pulsate_stop (void)
+{
if (pulsate_timeout > 0) {
g_source_remove (pulsate_timeout);
pulsate_timeout = -1;
@@ -63,34 +70,40 @@ zenity_progress_pulsate_stop (void) {
}
static void
-zenity_progress_pulsate_start (GObject *progress_bar) {
+zenity_progress_pulsate_start (GObject *progress_bar)
+{
if (pulsate_timeout == -1) {
- pulsate_timeout = g_timeout_add (
- 100, zenity_progress_pulsate_progress_bar, progress_bar);
+ pulsate_timeout = g_timeout_add (100,
+ zenity_progress_pulsate_progress_bar, progress_bar);
}
}
static void
-zenity_progress_update_time_remaining (ZenityProgressData *progress_data) {
+zenity_progress_update_time_remaining (ZenityProgressData *progress_data)
+{
static GObject *progress_time = NULL;
static time_t start_time = (time_t) (-1);
float percentage = progress_data->percentage;
if (progress_time == NULL)
- progress_time =
- gtk_builder_get_object (builder, "zenity_progress_time");
+ progress_time = gtk_builder_get_object (builder,
+ "zenity_progress_time");
+
if (start_time == (time_t) (-1) || percentage <= 0.0 ||
- percentage >= 100.0) {
+ percentage >= 100.0)
+ {
start_time = time (NULL);
gtk_label_set_text (GTK_LABEL (progress_time), "");
- } else {
+ }
+ else
+ {
time_t current_time = time (NULL);
time_t elapsed_time = current_time - start_time;
time_t total_time =
(time_t) (100.0 * elapsed_time / progress_data->percentage);
time_t remaining_time = total_time - elapsed_time;
gulong hours, minutes, seconds;
- gchar *remaining_message;
+ g_autofree char *remaining_message = NULL;
seconds = (gulong) (remaining_time % 60);
remaining_time /= 60;
@@ -98,26 +111,33 @@ zenity_progress_update_time_remaining (ZenityProgressData *progress_data) {
remaining_time /= 60;
hours = (gulong) remaining_time;
- remaining_message = g_strdup_printf (
- _ ("Time remaining: %lu:%02lu:%02lu"), hours, minutes, seconds);
+ remaining_message =
+ g_strdup_printf (_("Time remaining: %lu:%02lu:%02lu"),
+ hours, minutes, seconds);
gtk_label_set_text (GTK_LABEL (progress_time), remaining_message);
- g_free (remaining_message);
}
}
static float
-stof(const char* s) {
+stof (const char *s)
+{
float rez = 0, fact = 1;
+
if (*s == '-') {
s++;
fact = -1;
}
- for (int point_seen = 0; *s; s++) {
+
+ for (int point_seen = 0; *s; s++)
+ {
+ int d;
+
if (*s == '.' || *s == ',') {
point_seen = 1;
continue;
}
- int d = *s - '0';
+
+ d = *s - '0';
if (d >= 0 && d <= 9) {
if (point_seen) fact /= 10.0f;
rez = rez * 10.0f + (float)d;
@@ -127,23 +147,25 @@ stof(const char* s) {
}
static gboolean
-zenity_progress_handle_stdin (
- GIOChannel *channel, GIOCondition condition, gpointer data) {
+zenity_progress_handle_stdin (GIOChannel *channel, GIOCondition condition,
+ gpointer data)
+{
static ZenityProgressData *progress_data;
static GObject *progress_bar;
static GObject *progress_label;
+ static GtkWindow *parent;
float percentage = 0.0;
GIOStatus status = G_IO_STATUS_NORMAL;
- progress_data = (ZenityProgressData *) data;
+ progress_data = data;
progress_bar = gtk_builder_get_object (builder, "zenity_progress_bar");
progress_label = gtk_builder_get_object (builder, "zenity_progress_text");
+ parent = GTK_WINDOW(gtk_widget_get_native (GTK_WIDGET(progress_bar)));
- if ((condition & G_IO_IN) != 0) {
- GString *string;
- GError *error = NULL;
-
- string = g_string_new (NULL);
+ if ((condition & G_IO_IN) != 0)
+ {
+ g_autoptr(GString) string = g_string_new (NULL);
+ g_autoptr(GError) error = NULL;
while (channel->is_readable != TRUE)
;
@@ -152,23 +174,24 @@ zenity_progress_handle_stdin (
status = g_io_channel_read_line_string (
channel, string, NULL, &error);
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
+ while (g_main_context_pending (NULL)) {
+ g_main_context_iteration (NULL, FALSE);
+ }
} while (status == G_IO_STATUS_AGAIN);
- if (status != G_IO_STATUS_NORMAL) {
+ if (status != G_IO_STATUS_NORMAL)
+ {
if (error) {
- g_warning (
- "zenity_progress_handle_stdin () : %s", error->message);
- g_error_free (error);
+ g_warning ("%s: %s",
+ __func__, error->message);
error = NULL;
}
continue;
}
- if (!g_ascii_strncasecmp (string->str, "#", 1)) {
- gchar *match;
+ if (! g_ascii_strncasecmp (string->str, "#", 1))
+ {
+ char *match;
/* We have a comment, so let's try to change the label */
match = g_strstr_len (string->str, strlen (string->str), "#");
@@ -176,8 +199,11 @@ zenity_progress_handle_stdin (
gtk_label_set_text (GTK_LABEL (progress_label),
g_strcompress (g_strchomp (g_strchug (match))));
- } else if (g_str_has_prefix (string->str, "pulsate")) {
- gchar *colon, *command, *value;
+ }
+ else if (g_str_has_prefix (string->str, "pulsate"))
+ {
+ char *colon, *value;
+ g_autofree char *command = NULL;
zenity_util_strip_newline (string->str);
@@ -194,45 +220,44 @@ zenity_progress_handle_stdin (
while (*value && g_ascii_isspace (*value))
value++;
- if (!g_ascii_strcasecmp (value, "false")) {
+ if (! g_ascii_strcasecmp (value, "false"))
+ {
zenity_progress_pulsate_stop ();
- gtk_progress_bar_set_fraction (
- GTK_PROGRESS_BAR (progress_bar),
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(progress_bar),
progress_data->percentage / 100.0);
- } else {
+ }
+ else {
zenity_progress_pulsate_start (progress_bar);
}
-
- g_free (command);
- } else {
-
- if (!g_ascii_isdigit (*(string->str)))
+ }
+ else
+ {
+ if (! g_ascii_isdigit (*(string->str)))
continue;
/* Now try to convert the thing to a number */
percentage = CLAMP (stof (string->str), 0, 100);
- gtk_progress_bar_set_fraction (
- GTK_PROGRESS_BAR (progress_bar), percentage / 100.0);
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(progress_bar),
+ percentage / 100.0);
progress_data->percentage = percentage;
if (progress_data->time_remaining == TRUE)
zenity_progress_update_time_remaining (progress_data);
- if (percentage == 100) {
- GObject *button;
+ if (percentage == 100)
+ {
+ adw_message_dialog_set_response_enabled (ADW_MESSAGE_DIALOG(parent), "ok", TRUE);
+ adw_message_dialog_set_default_response (ADW_MESSAGE_DIALOG(parent), "ok");
- button = gtk_builder_get_object (
- builder, "zenity_progress_ok_button");
- gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE);
- gtk_widget_grab_focus (GTK_WIDGET (button));
-
- if (progress_data->autoclose) {
+ if (progress_data->autoclose)
+ {
zen_data->exit_code =
zenity_util_return_exit_code (ZENITY_OK);
- gtk_main_quit ();
+
+ zenity_util_gapp_quit (parent, zen_data);
}
}
}
@@ -240,23 +265,15 @@ zenity_progress_handle_stdin (
} while ((g_io_channel_get_buffer_condition (channel) & G_IO_IN) ==
G_IO_IN &&
status != G_IO_STATUS_EOF);
- g_string_free (string, TRUE);
}
- if ((condition & G_IO_IN) != G_IO_IN || status == G_IO_STATUS_EOF) {
+ if ((condition & G_IO_IN) != G_IO_IN || status == G_IO_STATUS_EOF)
+ {
/* We assume that we are done, so stop the pulsating and de-sensitize
* the buttons */
- GtkWidget *button;
-
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_progress_ok_button"));
- gtk_widget_set_sensitive (button, TRUE);
- gtk_widget_grab_focus (button);
-
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_progress_cancel_button"));
-
- gtk_widget_set_sensitive (button, FALSE);
+ adw_message_dialog_set_response_enabled (ADW_MESSAGE_DIALOG(parent), "ok", TRUE);
+ adw_message_dialog_set_response_enabled (ADW_MESSAGE_DIALOG(parent), "cancel", FALSE);
+ adw_message_dialog_set_default_response (ADW_MESSAGE_DIALOG(parent), "ok");
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), 1.0);
@@ -264,9 +281,10 @@ zenity_progress_handle_stdin (
g_object_unref (builder);
- if (progress_data->autoclose) {
+ if (progress_data->autoclose)
+ {
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
- gtk_main_quit ();
+ zenity_util_gapp_quit (parent, zen_data);
}
g_io_channel_shutdown (channel, TRUE, NULL);
@@ -276,7 +294,8 @@ zenity_progress_handle_stdin (
}
static void
-zenity_progress_read_info (ZenityProgressData *progress_data) {
+zenity_progress_read_info (ZenityProgressData *progress_data)
+{
channel = g_io_channel_unix_new (0);
g_io_channel_set_encoding (channel, NULL, NULL);
g_io_channel_set_flags (channel, G_IO_FLAG_NONBLOCK, NULL);
@@ -287,148 +306,136 @@ zenity_progress_read_info (ZenityProgressData *progress_data) {
/* We need to check the pulsate state here, because, the g_io_add_watch
doesn't call the zenity_progress_handle_stdin function if there's no
input. This fix the Bug 567663 */
- if (progress_data->pulsate) {
+ if (progress_data->pulsate)
+ {
GObject *progress_bar =
gtk_builder_get_object (builder, "zenity_progress_bar");
+
zenity_progress_pulsate_start (progress_bar);
}
}
-static void
-zenity_text_size_allocate (
- GtkWidget *widget, GtkAllocation *allocation, gpointer data) {
- gtk_widget_set_size_request (widget, allocation->width / 2, -1);
-}
-
void
-zenity_progress (ZenityData *data, ZenityProgressData *progress_data) {
+zenity_progress (ZenityData *data, ZenityProgressData *progress_data)
+{
GtkWidget *dialog;
- GtkWidget *button;
GObject *text;
GObject *progress_bar;
- GObject *cancel_button, *ok_button;
zen_data = data;
- builder = zenity_util_load_ui_file ("zenity_progress_dialog", NULL);
+ builder = zenity_util_load_ui_file ("zenity_progress_dialog", "zenity_progress_box", NULL);
if (builder == NULL) {
data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
return;
}
- gtk_builder_connect_signals (builder, NULL);
-
text = gtk_builder_get_object (builder, "zenity_progress_text");
- dialog =
- GTK_WIDGET (gtk_builder_get_object (builder, "zenity_progress_dialog"));
+ dialog = GTK_WIDGET(gtk_builder_get_object (builder,
+ "zenity_progress_dialog"));
progress_bar = gtk_builder_get_object (builder, "zenity_progress_bar");
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_progress_dialog_response),
- data);
+ g_signal_connect (dialog, "response", G_CALLBACK(zenity_progress_dialog_response), data);
if (data->dialog_title)
- gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
+ gtk_window_set_title (GTK_WINDOW(dialog), data->dialog_title);
- zenity_util_set_window_icon (dialog,
- data->window_icon,
- ZENITY_IMAGE_FULLPATH ("zenity-progress.png"));
+ gtk_window_set_icon_name (GTK_WINDOW(dialog),
+ "appointment-soon");
if (data->width > -1 || data->height > -1)
- gtk_window_set_default_size (
- GTK_WINDOW (dialog), data->width, data->height);
-
- if (data->width > -1) {
- gtk_widget_set_size_request (GTK_WIDGET (text), data->width, -1);
- } else {
- g_signal_connect_after (G_OBJECT (text),
- "size-allocate",
- G_CALLBACK (zenity_text_size_allocate),
- data);
- g_signal_connect_after (G_OBJECT (progress_bar),
- "size-allocate",
- G_CALLBACK (zenity_text_size_allocate),
- data);
+ gtk_window_set_default_size (GTK_WINDOW(dialog),
+ data->width, data->height);
+
+ if (data->width > -1)
+ {
+ gtk_widget_set_size_request (GTK_WIDGET(text), data->width, -1);
+ }
+#if 0
+ else
+ {
+ g_signal_connect_after (text, "size-allocate",
+ G_CALLBACK(zenity_text_size_allocate), data);
+
+ g_signal_connect_after (progress_bar, "size-allocate",
+ G_CALLBACK(zenity_text_size_allocate), data);
}
+#endif
if (data->modal)
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
- if (data->extra_label) {
- gint i = 0;
- while (data->extra_label[i] != NULL) {
- gtk_dialog_add_button (
- GTK_DIALOG (dialog), data->extra_label[i], i);
- i++;
- }
+ if (data->extra_label)
+ {
+ ZENITY_UTIL_ADD_EXTRA_LABELS (dialog)
}
if (data->ok_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_progress_ok_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
+ ZENITY_UTIL_SETUP_OK_BUTTON_LABEL (dialog);
}
- if (data->cancel_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_progress_cancel_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
+ if (data->cancel_label)
+ {
+ ZENITY_UTIL_SETUP_CANCEL_BUTTON_LABEL (dialog);
}
- if (progress_data->dialog_text)
- gtk_label_set_markup (
- GTK_LABEL (text), g_strcompress (progress_data->dialog_text));
+ if (progress_data->dialog_text) {
+ gtk_label_set_markup (GTK_LABEL(text),
+ g_strcompress (progress_data->dialog_text));
+ }
- if (progress_data->percentage > -1)
- gtk_progress_bar_set_fraction (
- GTK_PROGRESS_BAR (progress_bar), progress_data->percentage / 100.0);
+ if (progress_data->percentage > -1) {
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(progress_bar),
+ progress_data->percentage / 100.0);
+ }
autokill = progress_data->autokill;
-
auto_close = progress_data->autoclose;
- ok_button = gtk_builder_get_object (builder, "zenity_progress_ok_button");
-
no_cancel = progress_data->no_cancel;
- cancel_button =
- gtk_builder_get_object (builder, "zenity_progress_cancel_button");
- if (no_cancel) {
- gtk_widget_hide (GTK_WIDGET (cancel_button));
- gtk_window_set_deletable (GTK_WINDOW (dialog), FALSE);
+ /* Unlike some other dialogs, this one starts off blank and we need to add
+ * the OK/Cancel buttons depending on the options.
+ */
+ if (no_cancel)
+ gtk_window_set_deletable (GTK_WINDOW(dialog), FALSE);
+ else
+ adw_message_dialog_add_response (ADW_MESSAGE_DIALOG(dialog), "cancel", _("_Cancel"));
+
+ if (!auto_close)
+ {
+ adw_message_dialog_add_response (ADW_MESSAGE_DIALOG(dialog), "ok", _("_OK"));
+ adw_message_dialog_set_response_enabled (ADW_MESSAGE_DIALOG(dialog), "ok", FALSE);
}
- if (no_cancel && auto_close)
- gtk_widget_hide (GTK_WIDGET (ok_button));
-
- zenity_util_show_dialog (dialog, data->attach);
+ zenity_util_show_dialog (dialog);
zenity_progress_read_info (progress_data);
- if (data->timeout_delay > 0) {
+ if (data->timeout_delay > 0)
+ {
g_timeout_add_seconds (data->timeout_delay,
(GSourceFunc) zenity_util_timeout_handle,
NULL);
}
-
- gtk_main ();
+ zenity_util_gapp_main (GTK_WINDOW(dialog));
}
static void
-zenity_progress_dialog_response (
- GtkWidget *widget, int response, gpointer data) {
- switch (response) {
- case GTK_RESPONSE_OK:
+zenity_progress_dialog_response (GtkWidget *widget, char *rstr, gpointer data)
+{
+ ZenityExitCode response = zenity_util_parse_dialog_response (rstr);
+
+ switch (response)
+ {
+ case ZENITY_OK:
zenity_util_exit_code_with_data (ZENITY_OK, zen_data);
break;
- case GTK_RESPONSE_CANCEL:
+ case ZENITY_CANCEL:
/* We do not want to kill the parent process, in order to give the
- user
- the ability to choose the action to be taken. See bug #310824.
- But we want to give people the option to choose this behavior.
- -- Monday 27, March 2006
+ * user the ability to choose the action to be taken. But we want
+ * to give people the option to choose this behavior.
*/
if (autokill) {
kill (getppid (), 1);
@@ -439,12 +446,15 @@ zenity_progress_dialog_response (
case ZENITY_TIMEOUT:
zenity_util_exit_code_with_data (ZENITY_TIMEOUT, zen_data);
break;
+
default:
if (zen_data->extra_label &&
- response < g_strv_length (zen_data->extra_label))
+ response < (int)g_strv_length (zen_data->extra_label))
+ {
printf ("%s\n", zen_data->extra_label[response]);
+ }
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
break;
}
- gtk_main_quit ();
+ zenity_util_gapp_quit (GTK_WINDOW(widget), zen_data);
}
diff --git a/src/scale.c b/src/scale.c
index 42284f5..7ac0f41 100644
--- a/src/scale.c
+++ b/src/scale.c
@@ -1,46 +1,48 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* scale.c
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
- * Authors: Lucas Rocha <lucasr@gnome.org>
+ * Original Author: Lucas Rocha <lucasr@gnome.org>
*/
-#include "config.h"
#include "util.h"
#include "zenity.h"
+#include <config.h>
+
static GtkWidget *scale;
static void zenity_scale_value_changed (GtkWidget *widget, gpointer data);
-static void zenity_scale_dialog_response (
- GtkWidget *widget, int response, gpointer data);
+static void zenity_scale_dialog_response (GtkWidget *widget, char *rstr, gpointer data);
void
-zenity_scale (ZenityData *data, ZenityScaleData *scale_data) {
- GtkBuilder *builder;
+zenity_scale (ZenityData *data, ZenityScaleData *scale_data)
+{
+ g_autoptr(GtkBuilder) builder = NULL;
GtkWidget *dialog;
- GtkWidget *button;
GObject *text;
- builder =
- zenity_util_load_ui_file ("zenity_scale_dialog", "adjustment1", NULL);
+ builder = zenity_util_load_ui_file ("zenity_scale_dialog", "zenity_scale_adjustment", "zenity_scale_box", NULL);
if (builder == NULL) {
data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
@@ -53,108 +55,104 @@ zenity_scale (ZenityData *data, ZenityScaleData *scale_data) {
GTK_WIDGET (gtk_builder_get_object (builder, "zenity_scale_hscale"));
text = gtk_builder_get_object (builder, "zenity_scale_text");
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_scale_dialog_response),
- data);
+ g_signal_connect (dialog, "response", G_CALLBACK(zenity_scale_dialog_response), data);
- if (scale_data->min_value >= scale_data->max_value) {
- g_printerr (_ ("Maximum value must be greater than minimum value.\n"));
+ if (scale_data->min_value >= scale_data->max_value)
+ {
+ g_printerr (_("Maximum value must be greater than minimum value.\n"));
data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
return;
}
if (scale_data->value < scale_data->min_value ||
- scale_data->value > scale_data->max_value) {
+ scale_data->value > scale_data->max_value)
+ {
g_printerr (_ ("Value out of range.\n"));
data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
return;
}
- gtk_builder_connect_signals (builder, NULL);
-
if (data->dialog_title)
gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
- zenity_util_set_window_icon (
- dialog, data->window_icon, ZENITY_IMAGE_FULLPATH ("zenity-scale.png"));
+ gtk_window_set_icon_name (GTK_WINDOW(dialog),
+ "dialog-question");
- if (data->width > -1 || data->height > -1)
- gtk_window_set_default_size (
- GTK_WINDOW (dialog), data->width, data->height);
+ if (data->width > -1 || data->height > -1) {
+ gtk_window_set_default_size (GTK_WINDOW(dialog),
+ data->width, data->height);
+ }
if (data->modal)
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
- if (data->extra_label) {
- gint i = 0;
- while (data->extra_label[i] != NULL) {
- gtk_dialog_add_button (
- GTK_DIALOG (dialog), data->extra_label[i], i);
- i++;
- }
+ gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);
+
+ if (data->extra_label)
+ {
+ ZENITY_UTIL_ADD_EXTRA_LABELS (dialog)
}
- if (data->ok_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_scale_ok_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
+ if (data->ok_label)
+ {
+ ZENITY_UTIL_SETUP_OK_BUTTON_LABEL (dialog);
}
- if (data->cancel_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_scale_cancel_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
+ if (data->cancel_label)
+ {
+ ZENITY_UTIL_SETUP_CANCEL_BUTTON_LABEL (dialog);
}
- if (scale_data->dialog_text)
- gtk_label_set_markup (
- GTK_LABEL (text), g_strcompress (scale_data->dialog_text));
+ if (scale_data->dialog_text) {
+ gtk_label_set_markup (GTK_LABEL (text),
+ g_strcompress (scale_data->dialog_text));
+ }
- gtk_range_set_range (
- GTK_RANGE (scale), scale_data->min_value, scale_data->max_value);
+ gtk_range_set_range (GTK_RANGE (scale),
+ scale_data->min_value, scale_data->max_value);
gtk_range_set_value (GTK_RANGE (scale), scale_data->value);
gtk_range_set_increments (
GTK_RANGE (scale), scale_data->step, scale_data->step);
if (scale_data->print_partial)
- g_signal_connect (G_OBJECT (scale),
- "value-changed",
- G_CALLBACK (zenity_scale_value_changed),
- data);
+ {
+ g_signal_connect (scale, "value-changed",
+ G_CALLBACK(zenity_scale_value_changed), data);
+ }
if (scale_data->hide_value)
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
- zenity_util_show_dialog (dialog, data->attach);
+ zenity_util_show_dialog (dialog);
- if (data->timeout_delay > 0) {
+ if (data->timeout_delay > 0)
+ {
g_timeout_add_seconds (data->timeout_delay,
(GSourceFunc) zenity_util_timeout_handle,
dialog);
}
- g_object_unref (builder);
-
- gtk_main ();
+ zenity_util_gapp_main (GTK_WINDOW(dialog));
}
static void
-zenity_scale_value_changed (GtkWidget *widget, gpointer data) {
- g_print ("%.0f\n", gtk_range_get_value (GTK_RANGE (widget)));
+zenity_scale_value_changed (GtkWidget *widget, gpointer data)
+{
+ g_print ("%.0f\n", gtk_range_get_value (GTK_RANGE(widget)));
}
static void
-zenity_scale_dialog_response (GtkWidget *widget, int response, gpointer data) {
+zenity_scale_dialog_response (GtkWidget *widget, char *rstr, gpointer data)
+{
ZenityData *zen_data = data;
+ ZenityExitCode response = zenity_util_parse_dialog_response (rstr);
- switch (response) {
- case GTK_RESPONSE_OK:
+ switch (response)
+ {
+ case ZENITY_OK:
zenity_util_exit_code_with_data (ZENITY_OK, zen_data);
g_print ("%.0f\n", gtk_range_get_value (GTK_RANGE (scale)));
break;
- case GTK_RESPONSE_CANCEL:
+ case ZENITY_CANCEL:
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
break;
@@ -165,10 +163,13 @@ zenity_scale_dialog_response (GtkWidget *widget, int response, gpointer data) {
default:
if (zen_data->extra_label &&
- response < g_strv_length (zen_data->extra_label))
+ response < (int)g_strv_length (zen_data->extra_label))
+ {
printf ("%s\n", zen_data->extra_label[response]);
+ }
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
break;
}
- gtk_main_quit ();
+
+ zenity_util_gapp_quit (GTK_WINDOW(widget), zen_data);
}
diff --git a/src/text.c b/src/text.c
index bbfa421..7c37855 100644
--- a/src/text.c
+++ b/src/text.c
@@ -1,41 +1,45 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* text.c
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
- * Authors: Glynn Foster <glynn.foster@sun.com>
+ * Original Author: Glynn Foster <glynn.foster@sun.com>
*/
-#include "config.h"
#include "util.h"
#include "zenity.h"
+
#include <gio/gio.h>
#ifdef HAVE_WEBKITGTK
#include <webkit2/webkit2.h>
#endif
+#include <config.h>
+
static ZenityTextData *zen_text_data;
-static void zenity_text_dialog_response (
- GtkWidget *widget, int response, gpointer data);
-static void zenity_text_toggle_button (GtkToggleButton *button, gpointer data);
+static void zenity_text_dialog_response (GtkWidget *widget, char *rstr, gpointer data);
+static void zenity_text_toggle_button (GtkCheckButton *button, AdwMessageDialog *dialog);
#ifdef HAVE_WEBKITGTK
static void
@@ -72,7 +76,6 @@ zenity_configure_webkit (WebKitWebView *web_view) {
NULL);
g_object_set (G_OBJECT (settings), "enable-page-cache", FALSE, NULL);
g_object_set (G_OBJECT (settings), "enable-plugins", FALSE, NULL);
- g_object_set (G_OBJECT (settings), "enable-private-browsing", TRUE, NULL);
/*
Stick to defaults
"enforce-96-dpi" gboolean : Read / Write /
@@ -146,53 +149,60 @@ zenity_text_webview_load_changed (
}
}
-#endif
+#endif /* HAVE_WEBKITGTK */
static gboolean
-zenity_text_handle_stdin (
- GIOChannel *channel, GIOCondition condition, gpointer data) {
+zenity_text_handle_stdin (GIOChannel *channel, GIOCondition condition,
+ gpointer data)
+{
+#define BUF_SIZE 1024
static GtkTextBuffer *buffer;
static GtkTextView *text_view;
- gchar buf[1024];
+ char buf[BUF_SIZE];
gsize len;
text_view = GTK_TEXT_VIEW (data);
buffer = gtk_text_view_get_buffer (text_view);
- if ((condition & G_IO_IN) || (condition & (G_IO_IN | G_IO_HUP))) {
- GError *error = NULL;
- gint status;
+ if ((condition & G_IO_IN) || (condition & (G_IO_IN | G_IO_HUP)))
+ {
+ g_autoptr(GError) error = NULL;
+ int status;
while (channel->is_readable != TRUE)
;
do {
- status = g_io_channel_read_chars (channel, buf, 1024, &len, &error);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
+ status = g_io_channel_read_chars (channel, buf, BUF_SIZE,
+ &len, &error);
+ while (g_main_context_pending (NULL)) {
+ g_main_context_iteration (NULL, FALSE);
+ }
} while (status == G_IO_STATUS_AGAIN);
- if (status != G_IO_STATUS_NORMAL) {
+ if (status != G_IO_STATUS_NORMAL)
+ {
if (error) {
- g_warning ("zenity_text_handle_stdin () : %s", error->message);
- g_error_free (error);
+ g_warning ("%s: %s",
+ __func__, error->message);
error = NULL;
}
return FALSE;
}
- if (len > 0) {
+ if (len > 0)
+ {
GtkTextIter end;
- gchar *utftext;
+ g_autofree char *utftext = NULL;
gsize localelen;
gsize utflen;
gtk_text_buffer_get_end_iter (buffer, &end);
- if (!g_utf8_validate (buf, len, NULL)) {
+ if (! g_utf8_validate (buf, len, NULL))
+ {
utftext = g_convert_with_fallback (buf,
len,
"UTF-8",
@@ -202,41 +212,45 @@ zenity_text_handle_stdin (
&utflen,
NULL);
gtk_text_buffer_insert (buffer, &end, utftext, utflen);
- g_free (utftext);
- } else {
+ }
+ else
+ {
gtk_text_buffer_insert (buffer, &end, buf, len);
}
- if (zen_text_data->auto_scroll) {
- GtkTextMark *mark = NULL;
- mark = gtk_text_buffer_get_insert (buffer);
+
+ if (zen_text_data->auto_scroll)
+ {
+ GtkTextMark *mark = gtk_text_buffer_get_insert (buffer);
+
if (mark != NULL)
- gtk_text_view_scroll_to_mark (
- text_view, mark, 0.0, FALSE, 0, 0);
+ {
+ gtk_text_view_scroll_to_mark (text_view, mark,
+ 0.0, FALSE, 0, 0);
+ }
}
}
}
-
return TRUE;
}
static void
-zenity_text_fill_entries_from_stdin (GtkTextView *text_view) {
+zenity_text_fill_entries_from_stdin (GtkTextView *text_view)
+{
GIOChannel *channel;
channel = g_io_channel_unix_new (0);
g_io_channel_set_encoding (channel, "UTF-8", NULL);
g_io_channel_set_flags (channel, G_IO_FLAG_NONBLOCK, NULL);
- g_io_add_watch (
- channel, G_IO_IN | G_IO_HUP, zenity_text_handle_stdin, text_view);
+ g_io_add_watch (channel,
+ G_IO_IN | G_IO_HUP, zenity_text_handle_stdin, text_view);
}
void
-zenity_text (ZenityData *data, ZenityTextData *text_data) {
- GtkBuilder *builder;
+zenity_text (ZenityData *data, ZenityTextData *text_data)
+{
+ g_autoptr(GtkBuilder) builder = NULL;
GtkWidget *dialog;
- GtkWidget *ok_button;
GtkWidget *checkbox;
- GtkWidget *cancel_button;
GObject *text_view;
GtkTextBuffer *text_buffer;
@@ -245,41 +259,31 @@ zenity_text (ZenityData *data, ZenityTextData *text_data) {
GtkWidget *web_kit;
GtkWidget *scrolled_window;
GtkTextIter start_iter, end_iter;
- gchar *content;
+ g_autofree char *content = NULL;
#endif
+
zen_text_data = text_data;
- builder =
- zenity_util_load_ui_file ("zenity_text_dialog", "textbuffer1", NULL);
+ builder = zenity_util_load_ui_file ("zenity_text_dialog", "zenity_text_box", NULL);
if (builder == NULL) {
data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
return;
}
- gtk_builder_connect_signals (builder, NULL);
-
- dialog =
- GTK_WIDGET (gtk_builder_get_object (builder, "zenity_text_dialog"));
+ dialog = GTK_WIDGET(gtk_builder_get_object (builder,
+ "zenity_text_dialog"));
- ok_button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_text_close_button"));
- cancel_button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_text_cancel_button"));
- checkbox =
- GTK_WIDGET (gtk_builder_get_object (builder, "zenity_text_checkbox"));
+ checkbox = GTK_WIDGET(gtk_builder_get_object (builder,
+ "zenity_text_checkbox"));
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_text_dialog_response),
- data);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK(zenity_text_dialog_response), data);
if (data->dialog_title)
- gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
-
- zenity_util_set_window_icon (
- dialog, data->window_icon, ZENITY_IMAGE_FULLPATH ("zenity-text.png"));
+ gtk_window_set_title (GTK_WINDOW(dialog), data->dialog_title);
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE);
+ gtk_window_set_icon_name (GTK_WINDOW(dialog),
+ "accessories-text-editor");
text_buffer = gtk_text_buffer_new (NULL);
text_view = gtk_builder_get_object (builder, "zenity_text_view");
@@ -289,13 +293,24 @@ zenity_text (ZenityData *data, ZenityTextData *text_data) {
if (text_data->no_wrap)
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view), GTK_WRAP_NONE);
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
- if (text_data->font) {
- PangoFontDescription *fontDesc =
- pango_font_description_from_string (text_data->font);
- gtk_widget_override_font (GTK_WIDGET (text_view), fontDesc);
+ if (text_data->font)
+ {
+ PangoFontDescription *desc;
+ GtkStyleContext *context;
+ GtkCssProvider *provider;
+ g_autofree char *css_str = NULL;
+
+ desc = pango_font_description_from_string (text_data->font);
+ css_str = zenity_util_pango_font_description_to_css (desc);
+
+ provider = gtk_css_provider_new ();
+ gtk_css_provider_load_from_data (provider, css_str, -1);
+
+ context = gtk_widget_get_style_context (GTK_WIDGET(text_view));
+ gtk_style_context_add_provider (context,
+ GTK_STYLE_PROVIDER(provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
-G_GNUC_END_IGNORE_DEPRECATIONS
if (text_data->uri)
zenity_util_fill_file_buffer (text_buffer, text_data->uri);
@@ -305,46 +320,47 @@ G_GNUC_END_IGNORE_DEPRECATIONS
if (text_data->editable)
zen_text_data->buffer = text_buffer;
- if (data->extra_label) {
- gint i = 0;
- while (data->extra_label[i] != NULL) {
- gtk_dialog_add_button (
- GTK_DIALOG (dialog), data->extra_label[i], i);
- i++;
- }
+ if (data->extra_label)
+ {
+ ZENITY_UTIL_ADD_EXTRA_LABELS (dialog)
}
if (data->ok_label) {
- gtk_button_set_label (GTK_BUTTON (ok_button), data->ok_label);
+ ZENITY_UTIL_SETUP_OK_BUTTON_LABEL (dialog);
}
- if (data->cancel_label) {
- gtk_button_set_label (GTK_BUTTON (cancel_button), data->cancel_label);
+ if (data->cancel_label)
+ {
+ ZENITY_UTIL_SETUP_CANCEL_BUTTON_LABEL (dialog);
}
if (text_data->checkbox) {
- gtk_widget_set_visible (GTK_WIDGET (checkbox), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (ok_button), FALSE);
- gtk_button_set_label (GTK_BUTTON (checkbox), text_data->checkbox);
-
- g_signal_connect (G_OBJECT (checkbox),
- "toggled",
- G_CALLBACK (zenity_text_toggle_button),
- ok_button);
+ gtk_widget_set_visible (GTK_WIDGET(checkbox), TRUE);
+ gtk_check_button_set_label (GTK_CHECK_BUTTON(checkbox), text_data->checkbox);
+ adw_message_dialog_set_response_enabled (ADW_MESSAGE_DIALOG(dialog), "ok", FALSE);
+
+ g_signal_connect (checkbox, "toggled", G_CALLBACK(zenity_text_toggle_button), dialog);
}
if (data->width > -1 || data->height > -1)
- gtk_window_set_default_size (
- GTK_WINDOW (dialog), data->width, data->height);
- else
+ {
+ gtk_window_set_default_size (GTK_WINDOW (dialog),
+ data->width, data->height);
+ }
+ else {
gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 400);
+ }
if (data->modal)
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
#ifdef HAVE_WEBKITGTK
- if (text_data->html) {
- web_kit = webkit_web_view_new ();
+ if (text_data->html)
+ {
+ /* "ephemeral" == private browsing */
+ g_autoptr(WebKitWebContext) wk_context = webkit_web_context_new_ephemeral ();
+
+ web_kit = webkit_web_view_new_with_context (wk_context);
scrolled_window = GTK_WIDGET (
gtk_builder_get_object (builder, "zenity_text_scrolled_window"));
@@ -358,23 +374,19 @@ G_GNUC_END_IGNORE_DEPRECATIONS
webkit_web_view_load_uri (
WEBKIT_WEB_VIEW (web_kit), text_data->url);
} else {
- gchar *cwd;
- gchar *dirname;
- gchar *dirname_uri;
+ g_autofree char *cwd = NULL;
+ g_autofree char *dirname = NULL;
+ g_autofree char *dirname_uri = NULL;
dirname = text_data->uri ? g_path_get_dirname (text_data->uri)
: g_strdup ("/");
cwd = g_get_current_dir ();
dirname_uri = g_strconcat ("file://", cwd, "/", dirname, "/", NULL);
- g_free (cwd);
- g_free (dirname);
gtk_text_buffer_get_start_iter (text_buffer, &start_iter);
gtk_text_buffer_get_end_iter (text_buffer, &end_iter);
content = gtk_text_buffer_get_text (
text_buffer, &start_iter, &end_iter, TRUE);
webkit_web_view_load_html (
WEBKIT_WEB_VIEW (web_kit), content, dirname_uri);
- g_free (dirname_uri);
- g_free (content);
}
// We don't want user to click on links and navigate to another page.
@@ -385,51 +397,51 @@ G_GNUC_END_IGNORE_DEPRECATIONS
G_CALLBACK (zenity_text_webview_load_changed),
NULL);
- gtk_widget_destroy (GTK_WIDGET (text_view));
- gtk_container_add (GTK_CONTAINER (scrolled_window), web_kit);
- gtk_widget_show (GTK_WIDGET (web_kit));
+ gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW(scrolled_window), web_kit);
}
-#endif
-
- zenity_util_show_dialog (dialog, data->attach);
+#endif /* HAVE_WEBKITGTK */
- g_object_unref (builder);
+ zenity_util_show_dialog (dialog);
- if (data->timeout_delay > 0) {
+ if (data->timeout_delay > 0)
+ {
g_timeout_add_seconds (data->timeout_delay,
(GSourceFunc) zenity_util_timeout_handle,
dialog);
}
-
- gtk_main ();
+ zenity_util_gapp_main (GTK_WINDOW(dialog));
}
static void
-zenity_text_toggle_button (GtkToggleButton *button, gpointer data) {
- GtkWidget *ok_button = (GtkWidget *) data;
- gtk_widget_set_sensitive (
- GTK_WIDGET (ok_button), gtk_toggle_button_get_active (button));
+zenity_text_toggle_button (GtkCheckButton *button, AdwMessageDialog *dialog)
+{
+ adw_message_dialog_set_response_enabled (dialog, "ok", gtk_check_button_get_active (button));
}
static void
-zenity_text_dialog_output (ZenityData *zen_data) {
- if (zen_text_data->editable) {
+zenity_text_dialog_output (ZenityData *zen_data)
+{
+ if (zen_text_data->editable)
+ {
GtkTextIter start, end;
- gchar *text;
+ g_autofree char *text = NULL;
+
gtk_text_buffer_get_bounds (zen_text_data->buffer, &start, &end);
- text =
- gtk_text_buffer_get_text (zen_text_data->buffer, &start, &end, 0);
+ text = gtk_text_buffer_get_text (zen_text_data->buffer,
+ &start, &end, 0);
g_print ("%s", text);
- g_free (text);
}
}
static void
-zenity_text_dialog_response (GtkWidget *widget, int response, gpointer data) {
+zenity_text_dialog_response (GtkWidget *widget, char *rstr, gpointer data)
+{
ZenityData *zen_data = data;
+ ZenityExitCode response = zenity_util_parse_dialog_response (rstr);
- switch (response) {
- case GTK_RESPONSE_CLOSE:
+ switch (response)
+ {
+ case ZENITY_OK:
zenity_text_dialog_output (zen_data);
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
break;
@@ -439,12 +451,18 @@ zenity_text_dialog_response (GtkWidget *widget, int response, gpointer data) {
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_TIMEOUT);
break;
+ case ZENITY_CANCEL:
+ zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
+ break;
+
default:
if (zen_data->extra_label &&
- response < g_strv_length (zen_data->extra_label))
+ response < (int)g_strv_length (zen_data->extra_label))
+ {
printf ("%s\n", zen_data->extra_label[response]);
+ }
zenity_util_exit_code_with_data (ZENITY_ESC, zen_data);
break;
}
- gtk_main_quit ();
+ zenity_util_gapp_quit (GTK_WINDOW(widget), zen_data);
}
diff --git a/src/tree.c b/src/tree.c
index 7d98ad2..644274d 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -1,64 +1,67 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* tree.c
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * Copyright © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
- * Authors: Glynn Foster <glynn.foster@sun.com>
+ * Original Authors: Glynn Foster <glynn.foster@sun.com>
* Jonathan Blanford <jrb@redhat.com>
* Kristian Rietveld <kris@gtk.org>
*/
-#include "config.h"
#include "util.h"
#include "zenity.h"
+
#include <stdlib.h>
#include <string.h>
-#define MAX_ELEMENTS_BEFORE_SCROLLING 5
+#include <config.h>
+
#define PRINT_HIDE_COLUMN_SEPARATOR ","
-static GtkBuilder *builder;
+static GtkTreeView *tree_view;
static GSList *selected;
-static gchar *separator;
+static char *separator;
static gboolean print_all_columns = FALSE;
-static gint *print_columns = NULL;
-static gint *hide_columns = NULL;
+static int *print_columns = NULL;
+static int *hide_columns = NULL;
static GIOChannel *channel;
-static int *zenity_tree_extract_column_indexes (char *indexes, gint n_columns);
-static gboolean zenity_tree_column_is_hidden (gint column_index);
-static void zenity_tree_dialog_response (
- GtkWidget *widget, int response, gpointer data);
+static int *zenity_tree_extract_column_indexes (char *indexes, int n_columns);
+static gboolean zenity_tree_column_is_hidden (int column_index);
+static void zenity_tree_dialog_response (GtkWidget *widget, char *rstr, gpointer data);
static void zenity_tree_row_activated (GtkTreeView *tree_view,
GtkTreePath *tree_path, GtkTreeViewColumn *tree_col, gpointer data);
static gboolean
-zenity_tree_dialog_untoggle (
- GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) {
- GValue toggle_value = {
- 0,
- };
+zenity_tree_dialog_untoggle (GtkTreeModel *model, GtkTreePath *path,
+ GtkTreeIter *iter, gpointer data)
+{
+ GValue toggle_value = G_VALUE_INIT;
gtk_tree_model_get_value (model, iter, 0, &toggle_value);
if (g_value_get_boolean (&toggle_value))
gtk_list_store_set (GTK_LIST_STORE (model), iter, 0, FALSE, -1);
+
return FALSE;
}
@@ -73,10 +76,14 @@ check_or_radio_label_activated_cb (GtkTreeView *tree_view,
gboolean value;
/* Because this is a radio list, we should untoggle the previous toggle so
- * that
- * we only have one selection at any given time
+ * that we only have one selection at any given time
*/
+<<<<<<< HEAD
if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (model), "radio")) == 1) {
+=======
+ if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (model), "radio")) == 1)
+ {
+>>>>>>> gtk4-port
gtk_tree_model_foreach (model, zenity_tree_dialog_untoggle, NULL);
}
@@ -89,27 +96,31 @@ check_or_radio_label_activated_cb (GtkTreeView *tree_view,
static void
zenity_load_pixbuf (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
- GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) {
+ GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
+{
static GHashTable *pixbuf_cache = NULL;
GError *error = NULL;
GdkPixbuf *pixbuf;
- gchar *str;
+ g_autofree char *str = NULL;
gtk_tree_model_get (tree_model, iter, 0, &str, -1);
- if (!str)
+ if (! str)
return;
- if (!pixbuf_cache) {
+ if (! pixbuf_cache)
+ {
pixbuf_cache = g_hash_table_new (g_str_hash, g_str_equal);
g_assert (pixbuf_cache);
}
pixbuf = g_hash_table_lookup (pixbuf_cache, str);
- if (!pixbuf) {
+ if (! pixbuf)
+ {
pixbuf = gdk_pixbuf_new_from_file (str, &error);
- if (!pixbuf)
+
+ if (! pixbuf)
g_warning ("Failed to load '%s'", str);
g_hash_table_insert (pixbuf_cache, g_strdup (str), pixbuf);
@@ -117,25 +128,25 @@ zenity_load_pixbuf (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
if (pixbuf)
g_object_set (cell, "pixbuf", pixbuf, NULL);
-
- g_free (str);
}
static gboolean
-zenity_tree_handle_stdin (
- GIOChannel *channel, GIOCondition condition, gpointer data) {
- static GtkTreeView *tree_view;
+zenity_tree_handle_stdin (GIOChannel *channel, GIOCondition condition,
+ gpointer data)
+{
GtkTreeModel *model;
static GtkTreeIter iter;
- static gint column_count = 0;
- static gint row_count = 0;
- static gint n_columns;
+ static int column_count = 0;
+ static int row_count = 0;
+ static int n_columns;
static gboolean editable;
static gboolean toggles;
static gboolean first_time = TRUE;
GIOStatus status = G_IO_STATUS_NORMAL;
- tree_view = GTK_TREE_VIEW (data);
+ /* Make sure global is properly defined */
+ g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), FALSE);
+
n_columns =
GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tree_view), "n_columns"));
editable =
@@ -145,14 +156,16 @@ zenity_tree_handle_stdin (
model = gtk_tree_view_get_model (tree_view);
- if (first_time) {
+ if (first_time)
+ {
first_time = FALSE;
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
}
- if ((condition & G_IO_IN) == G_IO_IN) {
- GString *string;
- GError *error = NULL;
+ if ((condition & G_IO_IN) == G_IO_IN)
+ {
+ g_autoptr(GString) string = NULL;
+ g_autoptr(GError) error = NULL;
string = g_string_new (NULL);
@@ -161,47 +174,55 @@ zenity_tree_handle_stdin (
;
do {
do {
- if (g_io_channel_get_flags (channel) & G_IO_FLAG_IS_READABLE)
- status = g_io_channel_read_line_string (
- channel, string, NULL, &error);
- else
+ if (g_io_channel_get_flags (channel) & G_IO_FLAG_IS_READABLE) {
+ status = g_io_channel_read_line_string (channel,
+ string, NULL, &error);
+ } else {
return FALSE;
+ }
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- // TODO: Find a better way to avoid 100% cpu utilization
+ while (g_main_context_pending (NULL)) {
+ g_main_context_iteration (NULL, FALSE);
+ }
+ /* FIXME: Find a better way to avoid 100% cpu utilization */
g_usleep (10000);
} while (status == G_IO_STATUS_AGAIN);
- if (status != G_IO_STATUS_NORMAL) {
+ if (status != G_IO_STATUS_NORMAL)
+ {
if (error) {
- g_warning (
- "zenity_tree_handle_stdin () : %s", error->message);
- g_error_free (error);
+ g_warning ("%s: %s",
+ __func__, error->message);
error = NULL;
}
continue;
}
- if (column_count == n_columns) {
+ if (column_count == n_columns)
+ {
/* We're starting a new row */
column_count = 0;
row_count++;
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
}
- if (toggles && column_count == 0) {
+ if (toggles && column_count == 0)
+ {
if (strcmp (g_ascii_strdown (
zenity_util_strip_newline (string->str), -1),
"true") == 0)
- gtk_list_store_set (
- GTK_LIST_STORE (model), &iter, column_count, TRUE, -1);
- else
+ {
+ gtk_list_store_set (GTK_LIST_STORE(model),
+ &iter, column_count, TRUE, -1);
+ }
+ else {
gtk_list_store_set (
GTK_LIST_STORE (model), &iter, column_count, FALSE, -1);
- } else {
+ }
+ }
+ else
+ {
gtk_list_store_set (GTK_LIST_STORE (model),
&iter,
column_count,
@@ -210,35 +231,19 @@ zenity_tree_handle_stdin (
}
if (editable) {
- gtk_list_store_set (
- GTK_LIST_STORE (model), &iter, n_columns, TRUE, -1);
- }
-
- if (row_count == MAX_ELEMENTS_BEFORE_SCROLLING) {
- GtkWidget *scrolled_window;
- GtkRequisition rectangle;
-
- gtk_widget_get_preferred_size (
- GTK_WIDGET (tree_view), &rectangle, NULL);
- scrolled_window = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_tree_window"));
- gtk_widget_set_size_request (
- scrolled_window, -1, rectangle.height);
- gtk_scrolled_window_set_policy (
- GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
+ gtk_list_store_set (GTK_LIST_STORE(model),
+ &iter, n_columns, TRUE, -1);
}
column_count++;
} while ((g_io_channel_get_buffer_condition (channel) & G_IO_IN) ==
G_IO_IN &&
- status != G_IO_STATUS_EOF);
- g_string_free (string, TRUE);
+ status != G_IO_STATUS_EOF); /* !do while */
}
- if ((condition & G_IO_IN) != G_IO_IN || status == G_IO_STATUS_EOF) {
+ if ((condition & G_IO_IN) != G_IO_IN || status == G_IO_STATUS_EOF)
+ {
g_io_channel_shutdown (channel, TRUE, NULL);
return FALSE;
}
@@ -246,8 +251,13 @@ zenity_tree_handle_stdin (
}
static void
-zenity_tree_fill_entries_from_stdin (GtkTreeView *tree_view, gint n_columns,
- gboolean toggles, gboolean editable) {
+zenity_tree_fill_entries_from_stdin (GtkTreeView *loc_tv, int n_columns,
+ gboolean toggles, gboolean editable)
+{
+ /* No reason this should fail. Sanity check. */
+ g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
+ g_assert (loc_tv == tree_view);
+
g_object_set_data (
G_OBJECT (tree_view), "n_columns", GINT_TO_POINTER (n_columns));
g_object_set_data (
@@ -258,16 +268,21 @@ zenity_tree_fill_entries_from_stdin (GtkTreeView *tree_view, gint n_columns,
channel = g_io_channel_unix_new (0);
g_io_channel_set_encoding (channel, NULL, NULL);
g_io_channel_set_flags (channel, G_IO_FLAG_NONBLOCK, NULL);
- g_io_add_watch (
- channel, G_IO_IN | G_IO_HUP, zenity_tree_handle_stdin, tree_view);
+ g_io_add_watch (channel,
+ G_IO_IN | G_IO_HUP, zenity_tree_handle_stdin, NULL);
}
static void
-zenity_tree_fill_entries (GtkTreeView *tree_view, const gchar **args,
- gint n_columns, gboolean toggles, gboolean editable) {
+zenity_tree_fill_entries (GtkTreeView *loc_tv, const char **args,
+ int n_columns, gboolean toggles, gboolean editable)
+{
GtkTreeModel *model;
GtkTreeIter iter;
- gint i = 0;
+ int i = 0;
+
+ /* No reason this should fail. Sanity check. */
+ g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
+ g_assert (loc_tv == tree_view);
model = gtk_tree_view_get_model (tree_view);
@@ -275,7 +290,7 @@ zenity_tree_fill_entries (GtkTreeView *tree_view, const gchar **args,
G_OBJECT (tree_view), "n_columns", GINT_TO_POINTER (n_columns));
while (args[i] != NULL) {
- gint j;
+ int j;
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
@@ -294,45 +309,34 @@ zenity_tree_fill_entries (GtkTreeView *tree_view, const gchar **args,
GTK_LIST_STORE (model), &iter, j, args[i + j], -1);
}
- if (editable)
- gtk_list_store_set (
- GTK_LIST_STORE (model), &iter, n_columns, TRUE, -1);
-
- if (i == MAX_ELEMENTS_BEFORE_SCROLLING) {
- GtkWidget *scrolled_window;
- GtkRequisition rectangle;
-
- gtk_widget_get_preferred_size (
- GTK_WIDGET (tree_view), &rectangle, NULL);
- scrolled_window = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_tree_window"));
- gtk_widget_set_size_request (scrolled_window, -1, rectangle.height);
- gtk_scrolled_window_set_policy (
- GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
+ if (editable) {
+ gtk_list_store_set (GTK_LIST_STORE(model),
+ &iter, n_columns, TRUE, -1);
}
-
i += n_columns;
}
}
static gboolean
-zenity_mid_search_func (GtkTreeModel *model, gint column, const gchar *key,
- GtkTreeIter *iter, gpointer search_data) {
- gchar *iter_string = NULL;
+zenity_mid_search_func (GtkTreeModel *model, int column, const char *key,
+ GtkTreeIter *iter, gpointer search_data)
+{
+ char *iter_string = NULL;
+
gtk_tree_model_get (model, iter, column, &iter_string, -1);
+
return !(g_strrstr (g_utf8_strdown (iter_string, -1),
g_utf8_strdown (key, -1)) != NULL);
}
static void
zenity_cell_edited_callback (GtkCellRendererText *cell,
- const gchar *path_string, const gchar *new_text, gpointer data) {
+ const char *path_string, const char *new_text, gpointer data)
+{
GtkTreeModel *model;
- GtkTreePath *path;
+ g_autoptr(GtkTreePath) path = NULL;
GtkTreeIter iter;
- gint column;
+ int column;
model = GTK_TREE_MODEL (data);
path = gtk_tree_path_new_from_string (path_string);
@@ -341,24 +345,22 @@ zenity_cell_edited_callback (GtkCellRendererText *cell,
gtk_tree_model_get_iter (model, &iter, path);
gtk_list_store_set (GTK_LIST_STORE (model), &iter, column, new_text, -1);
-
- gtk_tree_path_free (path);
}
void
-zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
+zenity_tree (ZenityData *data, ZenityTreeData *tree_data)
+{
+ g_autoptr(GtkBuilder) builder = NULL;
GtkWidget *dialog;
- GtkWidget *button;
- GObject *tree_view;
GObject *text;
GtkTreeViewColumn *column;
GtkListStore *model;
GType *column_types;
GSList *tmp;
gboolean first_column = FALSE;
- gint i, column_index, n_columns;
+ int i, column_index, n_columns;
- builder = zenity_util_load_ui_file ("zenity_tree_dialog", NULL);
+ builder = zenity_util_load_ui_file ("zenity_tree_dialog", "zenity_tree_box", NULL);
if (builder == NULL) {
data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
@@ -369,43 +371,44 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
n_columns = g_slist_length (tree_data->columns);
- if (tree_data->print_column) {
+ if (tree_data->print_column)
+ {
if (strcmp (g_ascii_strdown (tree_data->print_column, -1), "all") == 0)
print_all_columns = TRUE;
else
print_columns = zenity_tree_extract_column_indexes (
tree_data->print_column, n_columns);
- } else {
+ }
+ else
+ {
print_columns = g_new (gint, 2);
print_columns[0] = (tree_data->radiobox || tree_data->checkbox ? 2 : 1);
print_columns[1] = 0;
}
- if (tree_data->hide_column)
- hide_columns = zenity_tree_extract_column_indexes (
- tree_data->hide_column, n_columns);
+ if (tree_data->hide_column) {
+ hide_columns =
+ zenity_tree_extract_column_indexes (tree_data->hide_column,
+ n_columns);
+ }
if (n_columns == 0) {
- g_printerr (_ ("No column titles specified for List dialog.\n"));
+ g_printerr (_("No column titles specified for List dialog.\n"));
data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
return;
}
- if (tree_data->checkbox + tree_data->radiobox + tree_data->imagebox > 1) {
+ if (tree_data->checkbox + tree_data->radiobox + tree_data->imagebox > 1)
+ {
g_printerr (_ ("You should use only one List dialog type.\n"));
data->exit_code = zenity_util_return_exit_code (ZENITY_ERROR);
return;
}
- gtk_builder_connect_signals (builder, NULL);
-
- dialog =
- GTK_WIDGET (gtk_builder_get_object (builder, "zenity_tree_dialog"));
+ dialog = GTK_WIDGET(gtk_builder_get_object (builder,
+ "zenity_tree_dialog"));
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (zenity_tree_dialog_response),
- data);
+ g_signal_connect (dialog, "response", G_CALLBACK(zenity_tree_dialog_response), data);
if (data->dialog_title)
gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
@@ -413,41 +416,36 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
if (data->modal)
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
- if (data->extra_label) {
- gint i = 0;
- while (data->extra_label[i] != NULL) {
- gtk_dialog_add_button (
- GTK_DIALOG (dialog), data->extra_label[i], i);
- i++;
- }
+ if (data->extra_label)
+ {
+ ZENITY_UTIL_ADD_EXTRA_LABELS (dialog)
}
if (data->ok_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_tree_ok_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
+ ZENITY_UTIL_SETUP_OK_BUTTON_LABEL (dialog)
}
if (data->cancel_label) {
- button = GTK_WIDGET (
- gtk_builder_get_object (builder, "zenity_tree_cancel_button"));
- gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
+ ZENITY_UTIL_SETUP_CANCEL_BUTTON_LABEL (dialog)
}
text = gtk_builder_get_object (builder, "zenity_tree_text");
if (tree_data->dialog_text)
- gtk_label_set_markup (
- GTK_LABEL (text), g_strcompress (tree_data->dialog_text));
+ gtk_label_set_markup (GTK_LABEL(text),
+ g_strcompress (tree_data->dialog_text));
- zenity_util_set_window_icon (
- dialog, data->window_icon, ZENITY_IMAGE_FULLPATH ("zenity-list.png"));
+ gtk_window_set_icon_name (GTK_WINDOW(dialog),
+ "view-sort-ascending");
- if (data->width > -1 || data->height > -1)
- gtk_window_set_default_size (
- GTK_WINDOW (dialog), data->width, data->height);
+ if (data->width > -1 || data->height > -1) {
+ gtk_window_set_default_size (GTK_WINDOW(dialog),
+ data->width, data->height);
+ }
- tree_view = gtk_builder_get_object (builder, "zenity_tree_view");
+ /* Define global tree_view. */
+ tree_view = GTK_TREE_VIEW(gtk_builder_get_object (builder,
+ "zenity_tree_view"));
if (tree_data->radiobox || tree_data->checkbox)
{
@@ -475,7 +473,8 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
else
column_types = g_new (GType, n_columns);
- for (i = 0; i < n_columns; i++) {
+ for (i = 0; i < n_columns; i++)
+ {
/* Have the limitation that the radioboxes and checkboxes are in the
* first column */
if (i == 0 && (tree_data->checkbox || tree_data->radiobox))
@@ -492,7 +491,7 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
else
gtk_list_store_set_column_types (model, n_columns, column_types);
- gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (model));
+ gtk_tree_view_set_model (tree_view, GTK_TREE_MODEL(model));
if (tree_data->radiobox || tree_data->checkbox)
{
@@ -504,19 +503,22 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
{
if (tree_data->multi)
gtk_tree_selection_set_mode (
- gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
+ gtk_tree_view_get_selection (tree_view),
GTK_SELECTION_MULTIPLE);
else
gtk_tree_selection_set_mode (
- gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
+ gtk_tree_view_get_selection (tree_view),
GTK_SELECTION_SINGLE);
}
column_index = 0;
- for (tmp = tree_data->columns; tmp; tmp = tmp->next) {
- if (!first_column) {
- if (tree_data->checkbox || tree_data->radiobox) {
+ for (tmp = tree_data->columns; tmp; tmp = tmp->next)
+ {
+ if (! first_column)
+ {
+ if (tree_data->checkbox || tree_data->radiobox)
+ {
GtkCellRenderer *cell_renderer;
cell_renderer = gtk_cell_renderer_toggle_new ();
@@ -530,22 +532,28 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
column = gtk_tree_view_column_new_with_attributes (
tmp->data, cell_renderer, "active", column_index, NULL);
- } else if (tree_data->imagebox) {
+ }
+ else if (tree_data->imagebox)
+ {
GtkCellRenderer *cell_renderer =
gtk_cell_renderer_pixbuf_new ();
+
column = gtk_tree_view_column_new_with_attributes (
tmp->data, cell_renderer, NULL);
gtk_tree_view_column_set_cell_data_func (
column, cell_renderer, zenity_load_pixbuf, NULL, NULL);
- } else {
- if (tree_data->editable) {
+ }
+ else
+ {
+ if (tree_data->editable)
+ {
GtkCellRenderer *cell_renderer;
cell_renderer = gtk_cell_renderer_text_new ();
- g_signal_connect (G_OBJECT (cell_renderer),
- "edited",
+ g_signal_connect (cell_renderer, "edited",
G_CALLBACK (zenity_cell_edited_callback),
- gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view)));
+ gtk_tree_view_get_model (tree_view));
+
g_object_set_data (G_OBJECT (cell_renderer),
"column",
GINT_TO_POINTER (column_index));
@@ -558,7 +566,9 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
"editable",
n_columns,
NULL);
- } else {
+ }
+ else
+ {
column =
gtk_tree_view_column_new_with_attributes (tmp->data,
gtk_cell_renderer_text_new (),
@@ -574,15 +584,18 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
gtk_tree_view_column_set_visible (column, FALSE);
first_column = TRUE;
- } else {
- if (tree_data->editable) {
+ }
+ else
+ {
+ if (tree_data->editable)
+ {
GtkCellRenderer *cell_renderer;
cell_renderer = gtk_cell_renderer_text_new ();
- g_signal_connect (G_OBJECT (cell_renderer),
- "edited",
+ g_signal_connect (cell_renderer, "edited",
G_CALLBACK (zenity_cell_edited_callback),
- gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view)));
+ gtk_tree_view_get_model (tree_view));
+
g_object_set_data (G_OBJECT (cell_renderer),
"column",
GINT_TO_POINTER (column_index));
@@ -594,7 +607,9 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
"editable",
n_columns,
NULL);
- } else {
+ }
+ else
+ {
column = gtk_tree_view_column_new_with_attributes (tmp->data,
gtk_cell_renderer_text_new (),
"text",
@@ -609,37 +624,43 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
gtk_tree_view_column_set_visible (column, FALSE);
}
- gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
+ gtk_tree_view_append_column (tree_view, column);
column_index++;
}
if (tree_data->hide_header)
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
+ gtk_tree_view_set_headers_visible (tree_view, FALSE);
- if (tree_data->radiobox || tree_data->checkbox) {
- if (tree_data->data && *tree_data->data)
- zenity_tree_fill_entries (GTK_TREE_VIEW (tree_view),
+ if (tree_data->radiobox || tree_data->checkbox)
+ {
+ if (tree_data->data && *tree_data->data) {
+ zenity_tree_fill_entries (tree_view,
tree_data->data,
n_columns,
TRUE,
tree_data->editable);
- else
- zenity_tree_fill_entries_from_stdin (GTK_TREE_VIEW (tree_view),
+ }
+ else {
+ zenity_tree_fill_entries_from_stdin (tree_view,
n_columns,
TRUE,
tree_data->editable);
- } else {
- if (tree_data->data && *tree_data->data)
- zenity_tree_fill_entries (GTK_TREE_VIEW (tree_view),
+ }
+ }
+ else
+ {
+ if (tree_data->data && *tree_data->data) {
+ zenity_tree_fill_entries (tree_view,
tree_data->data,
n_columns,
FALSE,
tree_data->editable);
- else
- zenity_tree_fill_entries_from_stdin (GTK_TREE_VIEW (tree_view),
+ } else {
+ zenity_tree_fill_entries_from_stdin (tree_view,
n_columns,
FALSE,
tree_data->editable);
+ }
}
/* GTK will automatically pick the image column as the search column
@@ -650,13 +671,14 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
1);
}
- zenity_util_show_dialog (dialog, data->attach);
+ zenity_util_show_dialog (dialog);
- if (tree_data->mid_search)
- gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (tree_view),
+ if (tree_data->mid_search) {
+ gtk_tree_view_set_search_equal_func (tree_view,
(GtkTreeViewSearchEqualFunc) zenity_mid_search_func,
model,
NULL);
+ }
if (data->timeout_delay > 0) {
g_timeout_add_seconds (data->timeout_delay,
@@ -664,24 +686,23 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
dialog);
}
- gtk_main ();
-
- g_object_unref (builder);
+ zenity_util_gapp_main (GTK_WINDOW(dialog));
}
static void
zenity_tree_dialog_get_selected (GtkTreeModel *model, GtkTreePath *path_buf,
- GtkTreeIter *iter, GtkTreeView *tree_view) {
- GValue value = {
- 0,
- };
- gint n_columns, i;
+ GtkTreeIter *iter, gpointer user_data)
+{
+ GValue value = G_VALUE_INIT;
+ int n_columns, i;
n_columns =
GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tree_view), "n_columns"));
- if (print_all_columns) {
- for (i = 0; i < n_columns; i++) {
+ if (print_all_columns)
+ {
+ for (i = 0; i < n_columns; i++)
+ {
gtk_tree_model_get_value (model, iter, i, &value);
selected = g_slist_append (selected, g_value_dup_string (&value));
@@ -690,34 +711,35 @@ zenity_tree_dialog_get_selected (GtkTreeModel *model, GtkTreePath *path_buf,
return;
}
- for (i = 0; print_columns[i] != 0; i++) {
+ for (i = 0; print_columns[i] != 0; i++)
+ {
gtk_tree_model_get_value (model, iter, print_columns[i] - 1, &value);
-
selected = g_slist_append (selected, g_value_dup_string (&value));
+
g_value_unset (&value);
}
}
static gboolean
zenity_tree_dialog_toggle_get_selected (GtkTreeModel *model, GtkTreePath *path,
- GtkTreeIter *iter, GtkTreeView *tree_view) {
- GValue toggle_value = {
- 0,
- };
- gint n_columns, i;
+ GtkTreeIter *iter, gpointer user_data)
+{
+ GValue toggle_value = G_VALUE_INIT;
+ int n_columns, i;
n_columns =
GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tree_view), "n_columns"));
gtk_tree_model_get_value (model, iter, 0, &toggle_value);
- if (g_value_get_boolean (&toggle_value)) {
- GValue value = {
- 0,
- };
+ if (g_value_get_boolean (&toggle_value))
+ {
+ GValue value = G_VALUE_INIT;
- if (print_all_columns) {
- for (i = 1; i < n_columns; i++) {
+ if (print_all_columns)
+ {
+ for (i = 1; i < n_columns; i++)
+ {
gtk_tree_model_get_value (model, iter, i, &value);
selected =
@@ -728,7 +750,8 @@ zenity_tree_dialog_toggle_get_selected (GtkTreeModel *model, GtkTreePath *path,
return FALSE;
}
- for (i = 0; print_columns[i] != 0; i++) {
+ for (i = 0; print_columns[i] != 0; i++)
+ {
gtk_tree_model_get_value (
model, iter, print_columns[i] - 1, &value);
@@ -736,59 +759,65 @@ zenity_tree_dialog_toggle_get_selected (GtkTreeModel *model, GtkTreePath *path,
g_value_unset (&value);
}
}
-
g_value_unset (&toggle_value);
return FALSE;
}
static void
-zenity_tree_dialog_output (void) {
- GObject *tree_view;
+zenity_tree_dialog_output (void)
+{
GtkTreeSelection *selection;
GtkTreeModel *model;
- tree_view = gtk_builder_get_object (builder, "zenity_tree_view");
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
+ g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
+
+ model = gtk_tree_view_get_model (tree_view);
if (gtk_tree_model_get_column_type (model, 0) == G_TYPE_BOOLEAN)
+ {
gtk_tree_model_foreach (model,
(GtkTreeModelForeachFunc) zenity_tree_dialog_toggle_get_selected,
- GTK_TREE_VIEW (tree_view));
- else {
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
+ NULL);
+ }
+ else
+ {
+ selection = gtk_tree_view_get_selection (tree_view);
gtk_tree_selection_selected_foreach (selection,
(GtkTreeSelectionForeachFunc) zenity_tree_dialog_get_selected,
- GTK_TREE_VIEW (tree_view));
+ NULL);
}
- GSList *tmp;
- for (tmp = selected; tmp; tmp = tmp->next) {
+ for (GSList *tmp = selected; tmp != NULL; tmp = tmp->next)
+ {
if (tmp->next != NULL) {
- g_print ("%s%s", (gchar *) tmp->data, separator);
- } else
- g_print ("%s\n", (gchar *) tmp->data);
+ g_print ("%s%s", (char *)tmp->data, separator);
+ } else {
+ g_print ("%s\n", (char *)tmp->data);
+ }
}
g_free (print_columns);
g_free (hide_columns);
g_free (separator);
- g_slist_foreach (selected, (GFunc) g_free, NULL);
- selected = NULL;
+ g_slist_free_full (g_steal_pointer (&selected), g_free);
}
static void
-zenity_tree_dialog_response (GtkWidget *widget, int response, gpointer data) {
+zenity_tree_dialog_response (GtkWidget *widget, char *rstr, gpointer data)
+{
ZenityData *zen_data = data;
+ ZenityExitCode response = zenity_util_parse_dialog_response (rstr);
- switch (response) {
- case GTK_RESPONSE_OK:
+ switch (response)
+ {
+ case ZENITY_OK:
zenity_tree_dialog_output ();
zenity_util_exit_code_with_data (ZENITY_OK, zen_data);
break;
- case GTK_RESPONSE_CANCEL:
+ case ZENITY_CANCEL:
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
break;
@@ -799,62 +828,78 @@ zenity_tree_dialog_response (GtkWidget *widget, int response, gpointer data) {
default:
if (zen_data->extra_label &&
- response < g_strv_length (zen_data->extra_label))
+ response < (int)g_strv_length (zen_data->extra_label))
+ {
printf ("%s\n", zen_data->extra_label[response]);
+ }
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
break;
}
if (channel != NULL &&
g_io_channel_get_flags (channel) & G_IO_FLAG_IS_READABLE)
+ {
g_io_channel_shutdown (channel, TRUE, NULL);
+ }
- gtk_main_quit ();
+ zenity_util_gapp_quit (GTK_WINDOW(widget), zen_data);
}
static void
-zenity_tree_row_activated (GtkTreeView *tree_view, GtkTreePath *tree_path,
- GtkTreeViewColumn *tree_col, gpointer data) {
+zenity_tree_row_activated (GtkTreeView *loc_tv, GtkTreePath *tree_path,
+ GtkTreeViewColumn *tree_col, gpointer data)
+{
+ GtkWindow *parent;
ZenityData *zen_data = data;
+ /* No reason this should fail. Sanity check. */
+ g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
+ g_assert (loc_tv == tree_view);
+
zenity_tree_dialog_output ();
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
- gtk_main_quit ();
+
+ parent = GTK_WINDOW(gtk_widget_get_native (GTK_WIDGET(tree_view)));
+
+ zenity_util_gapp_quit (parent, zen_data);
}
static gboolean
-zenity_tree_column_is_hidden (gint column_index) {
- gint i;
-
+zenity_tree_column_is_hidden (int column_index)
+{
if (hide_columns != NULL)
- for (i = 0; hide_columns[i] != 0; i++)
+ {
+ for (int i = 0; hide_columns[i] != 0; i++)
+ {
if (hide_columns[i] == column_index)
return TRUE;
-
+ }
+ }
return FALSE;
}
-static gint *
-zenity_tree_extract_column_indexes (char *indexes, int n_columns) {
- char **tmp;
- gint *result;
- gint i, j, index;
+static int *
+zenity_tree_extract_column_indexes (char *indexes, int n_columns)
+{
+ g_auto(GStrv) tmp;
+ int *result;
+ int i, j, index;
tmp = g_strsplit (indexes, PRINT_HIDE_COLUMN_SEPARATOR, 0);
- result = g_new (gint, 1);
+ result = g_new (int, 1);
- for (j = i = 0; tmp[i] != NULL; i++) {
+ for (j = i = 0; tmp[i] != NULL; i++)
+ {
index = atoi (tmp[i]);
- if (index > 0 && index <= n_columns) {
+ if (index > 0 && index <= n_columns)
+ {
result[j] = index;
j++;
- result = g_renew (gint, result, j + 1);
+ result = g_renew (int, result, j + 1);
}
}
result[j] = 0;
- g_strfreev (tmp);
-
return result;
}
diff --git a/src/util.c b/src/util.c
index 2887fd9..1cc21af 100644
--- a/src/util.c
+++ b/src/util.c
@@ -1,22 +1,25 @@
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
/*
* util.c
*
- * Copyright (C) 2002 Sun Microsystems, Inc.
- * (C) 1999, 2000 Red Hat Inc.
- * (C) 1998 James Henstridge
- * (C) 1995-2002 Free Software Foundation
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * © 1999, 2000 Red Hat Inc.
+ * © 1998 James Henstridge
+ * © 1995-2002 Free Software Foundation
+ * © 2021-2023 Logan Rathbone
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
@@ -27,11 +30,9 @@
* Tom Tromey <tromey@redhat.com>
*/
-#include "config.h"
-
-#include "config.h"
#include "util.h"
#include "zenity.h"
+
#include <errno.h>
#include <locale.h>
#include <stdarg.h>
@@ -39,25 +40,49 @@
#include <stdlib.h>
#include <string.h>
-#ifdef GDK_WINDOWING_X11
-#include <gdk/gdkx.h>
-#endif
+#include "config.h"
#define ZENITY_OK_DEFAULT 0
#define ZENITY_CANCEL_DEFAULT 1
#define ZENITY_ESC_DEFAULT 1
#define ZENITY_ERROR_DEFAULT -1
#define ZENITY_EXTRA_DEFAULT 127
+#define ZENITY_UI_RESOURCE_PATH RESOURCE_BASE_PATH "/zenity.ui"
+
+GIcon *
+zenity_util_gicon_from_string (const char *str)
+{
+ GIcon *icon = NULL;
+ g_autoptr(GFile) icon_file = NULL;
+
+ if (str)
+ {
+ icon_file = g_file_new_for_path (str);
+
+ if (g_file_query_exists (icon_file, NULL))
+ {
+ icon = g_file_icon_new (icon_file);
+ }
+ else
+ {
+ g_debug (_("Icon filename %s not found; trying theme icon."), str);
+ icon = g_themed_icon_new_with_default_fallbacks (str);
+ }
+ }
+
+ return icon;
+}
GtkBuilder *
-zenity_util_load_ui_file (const gchar *root_widget, ...) {
+zenity_util_load_ui_file (const char *root_widget, ...)
+{
va_list args;
- gchar *arg = NULL;
+ char *arg = NULL;
GPtrArray *ptrarray;
GtkBuilder *builder = gtk_builder_new ();
- GError *error = NULL;
- gchar **objects;
- guint result = 0;
+ g_autoptr(GError) error = NULL;
+ char **objects;
+ gboolean result = FALSE;
gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE);
@@ -68,43 +93,43 @@ 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);
/* Enforce terminating NULL */
g_ptr_array_add (ptrarray, NULL);
- objects = (gchar **) g_ptr_array_free (ptrarray, FALSE);
-
- 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, objects, NULL);
- }
+ objects = (char **)g_ptr_array_free (ptrarray, FALSE);
- if (result == 0)
- result = gtk_builder_add_objects_from_file (
- builder, ZENITY_UI_FILE_FULLPATH, objects, &error);
+ result = gtk_builder_add_objects_from_resource (builder,
+ ZENITY_UI_RESOURCE_PATH,
+ (const char **)objects,
+ &error);
g_strfreev (objects);
- if (result == 0) {
- g_warning ("Could not load ui file %s: %s",
- ZENITY_UI_FILE_FULLPATH,
- error->message);
- g_error_free (error);
- g_object_unref (builder);
- return NULL;
+ if (! result) {
+ g_error ("Could not load ui resource %s: %s",
+ ZENITY_UI_RESOURCE_PATH,
+ error->message);
+ }
+
+ /* This should never happen, but if an unexpected error is logged, print
+ * it for debugging purposes. */
+ if (error) {
+ g_debug ("%s: Error generated: %s",
+ __func__, error->message);
}
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);
@@ -121,11 +146,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;
@@ -140,7 +165,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;
@@ -153,7 +178,7 @@ zenity_util_fill_file_buffer (GtkTextBuffer *buffer, const gchar *filename) {
gtk_text_buffer_insert (buffer, &iter, buf, leftover - buf);
remaining = (buf + remaining + count) - leftover;
- memmove (buf, leftover, remaining);
+ memmove(buf, leftover, remaining);
if (remaining > 6 || count < to_read)
break;
@@ -177,79 +202,19 @@ zenity_util_fill_file_buffer (GtkTextBuffer *buffer, const gchar *filename) {
return TRUE;
}
-const gchar *
-zenity_util_icon_name_from_filename (const gchar *filename) {
- if (!filename || !filename[0])
- return "dialog-warning"; /* default */
-
- if (!g_ascii_strcasecmp (filename, "warning"))
- return "dialog-warning";
- if (!g_ascii_strcasecmp (filename, "info"))
- return "dialog-information";
- if (!g_ascii_strcasecmp (filename, "question"))
- return "dialog-question";
- if (!g_ascii_strcasecmp (filename, "error"))
- return "dialog-error";
- return NULL;
-}
-
-void
-zenity_util_set_window_icon_from_file (
- GtkWidget *widget, const gchar *filename) {
- GdkPixbuf *pixbuf;
- const gchar *icon_name;
-
- icon_name = zenity_util_icon_name_from_filename (filename);
- if (icon_name) {
- gtk_window_set_icon_name (GTK_WINDOW (widget), icon_name);
- } else {
- pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
- gtk_window_set_icon (GTK_WINDOW (widget), pixbuf);
- g_object_unref (pixbuf);
- }
-}
-
-void
-zenity_util_set_window_icon (
- GtkWidget *widget, const gchar *filename, const gchar *default_file) {
- GdkPixbuf *pixbuf;
-
- if (filename != NULL) {
- zenity_util_set_window_icon_from_file (widget, filename);
- } else {
- pixbuf = gdk_pixbuf_new_from_file (default_file, NULL);
- if (pixbuf != NULL) {
- gtk_window_set_icon (GTK_WINDOW (widget), pixbuf);
- g_object_unref (pixbuf);
- }
- }
-}
-
-void
-zenity_util_set_window_icon_from_icon_name (
- GtkWidget *widget, const gchar *filename, const gchar *default_icon_name) {
- if (filename != NULL)
- zenity_util_set_window_icon_from_file (widget, filename);
- else
- gtk_window_set_icon_name (GTK_WINDOW (widget), default_icon_name);
-}
-
void
zenity_util_show_help (GError **error) {
- gchar *tmp;
- tmp = g_find_program_in_path ("yelp");
+ g_autofree char *tmp = g_find_program_in_path ("yelp");
- if (tmp) {
- g_free (tmp);
+ if (tmp)
g_spawn_command_line_async ("yelp help:zenity", error);
- }
}
-gint
-zenity_util_return_exit_code (ZenityExitCode value) {
-
- const gchar *env_var = NULL;
- gint retval;
+int
+zenity_util_return_exit_code (ZenityExitCode value)
+{
+ const char *env_var = NULL;
+ int retval;
switch (value) {
@@ -311,108 +276,233 @@ zenity_util_return_exit_code (ZenityExitCode value) {
}
void
-zenity_util_exit_code_with_data (ZenityExitCode value, ZenityData *zen_data) {
+zenity_util_exit_code_with_data (ZenityExitCode value, ZenityData *zen_data)
+{
zen_data->exit_code = zenity_util_return_exit_code (value);
}
-#ifdef GDK_WINDOWING_X11
-
-static Window
-transient_get_xterm (void) {
- const char *wid_str = g_getenv ("WINDOWID");
- if (wid_str) {
- char *wid_str_end;
- int ret;
- Window wid = strtoul (wid_str, &wid_str_end, 10);
- if (*wid_str != '\0' && *wid_str_end == '\0' && wid != 0) {
- XWindowAttributes attrs;
- GdkDisplay *display;
- display = gdk_display_get_default ();
- gdk_x11_display_error_trap_push (display);
- ret = XGetWindowAttributes (
- GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), wid, &attrs);
- if (gdk_x11_display_error_trap_pop (display) != 0 || ret == 0) {
- return None;
- }
- return wid;
+/* This function was written by Matthias Clasen and is included somewhere in
+ * the GTK source tree.. I believe it is also included in libdazzle, but I
+ * didn't want to include a whole dependency just for one function. LGPL, but
+ * credit where credit is due!
+ */
+char *
+zenity_util_pango_font_description_to_css (PangoFontDescription *desc)
+{
+ GString *s;
+ PangoFontMask set;
+
+ s = g_string_new ("* { ");
+
+ set = pango_font_description_get_set_fields (desc);
+ if (set & PANGO_FONT_MASK_FAMILY)
+ {
+ g_string_append (s, "font-family: ");
+ g_string_append (s, pango_font_description_get_family (desc));
+ g_string_append (s, "; ");
+ }
+ if (set & PANGO_FONT_MASK_STYLE)
+ {
+ switch (pango_font_description_get_style (desc))
+ {
+ case PANGO_STYLE_NORMAL:
+ g_string_append (s, "font-style: normal; ");
+ break;
+ case PANGO_STYLE_OBLIQUE:
+ g_string_append (s, "font-style: oblique; ");
+ break;
+ case PANGO_STYLE_ITALIC:
+ g_string_append (s, "font-style: italic; ");
+ break;
}
}
- return None;
-}
+ if (set & PANGO_FONT_MASK_VARIANT)
+ {
+ switch (pango_font_description_get_variant (desc))
+ {
+ case PANGO_VARIANT_NORMAL:
+ g_string_append (s, "font-variant: normal; ");
+ break;
+ case PANGO_VARIANT_SMALL_CAPS:
+ g_string_append (s, "font-variant: small-caps; ");
+ break;
+ default:
+ break;
+ }
+ }
+ if (set & PANGO_FONT_MASK_WEIGHT)
+ {
+ switch (pango_font_description_get_weight (desc))
+ {
+ case PANGO_WEIGHT_THIN:
+ g_string_append (s, "font-weight: 100; ");
+ break;
+ case PANGO_WEIGHT_ULTRALIGHT:
+ g_string_append (s, "font-weight: 200; ");
+ break;
+ case PANGO_WEIGHT_LIGHT:
+ case PANGO_WEIGHT_SEMILIGHT:
+ g_string_append (s, "font-weight: 300; ");
+ break;
+ case PANGO_WEIGHT_BOOK:
+ case PANGO_WEIGHT_NORMAL:
+ g_string_append (s, "font-weight: 400; ");
+ break;
+ case PANGO_WEIGHT_MEDIUM:
+ g_string_append (s, "font-weight: 500; ");
+ break;
+ case PANGO_WEIGHT_SEMIBOLD:
+ g_string_append (s, "font-weight: 600; ");
+ break;
+ case PANGO_WEIGHT_BOLD:
+ g_string_append (s, "font-weight: 700; ");
+ break;
+ case PANGO_WEIGHT_ULTRABOLD:
+ g_string_append (s, "font-weight: 800; ");
+ break;
+ case PANGO_WEIGHT_HEAVY:
+ case PANGO_WEIGHT_ULTRAHEAVY:
+ g_string_append (s, "font-weight: 900; ");
+ break;
+ }
+ }
+ if (set & PANGO_FONT_MASK_STRETCH)
+ {
+ switch (pango_font_description_get_stretch (desc))
+ {
+ case PANGO_STRETCH_ULTRA_CONDENSED:
+ g_string_append (s, "font-stretch: ultra-condensed; ");
+ break;
+ case PANGO_STRETCH_EXTRA_CONDENSED:
+ g_string_append (s, "font-stretch: extra-condensed; ");
+ break;
+ case PANGO_STRETCH_CONDENSED:
+ g_string_append (s, "font-stretch: condensed; ");
+ break;
+ case PANGO_STRETCH_SEMI_CONDENSED:
+ g_string_append (s, "font-stretch: semi-condensed; ");
+ break;
+ case PANGO_STRETCH_NORMAL:
+ g_string_append (s, "font-stretch: normal; ");
+ break;
+ case PANGO_STRETCH_SEMI_EXPANDED:
+ g_string_append (s, "font-stretch: semi-expanded; ");
+ break;
+ case PANGO_STRETCH_EXPANDED:
+ g_string_append (s, "font-stretch: expanded; ");
+ break;
+ case PANGO_STRETCH_EXTRA_EXPANDED:
+ g_string_append (s, "font-stretch: extra-expanded; ");
+ break;
+ case PANGO_STRETCH_ULTRA_EXPANDED:
+ g_string_append (s, "font-stretch: ultra-expanded; ");
+ break;
+ }
+ }
+ if (set & PANGO_FONT_MASK_SIZE)
+ {
+ g_string_append_printf (s, "font-size: %dpt; ",
+ pango_font_description_get_size (desc) / PANGO_SCALE);
+ }
-static void
-transient_x_free (void *ptr) {
- if (ptr)
- XFree (ptr);
-}
+ g_string_append (s, "}");
-static gboolean
-transient_is_toplevel (Window wid) {
- XTextProperty prop;
- Display *dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
- if (!XGetWMName (dpy, wid, &prop))
- return FALSE;
- transient_x_free (prop.value);
- return !!prop.value;
+ return g_string_free (s, FALSE);
}
-/*
- * GNOME Terminal doesn't give us its toplevel window, but the WM needs a
- * toplevel XID for proper stacking. Other terminals work fine without this
- * magic. We can't use GDK here since "xterm" is a foreign window.
- */
+void
+zenity_util_show_dialog (GtkWidget *dialog)
+{
+ gtk_widget_show (dialog);
+}
-static Window
-transient_get_xterm_toplevel (void) {
- Window xterm = transient_get_xterm ();
- Display *dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
- while (xterm != None && !transient_is_toplevel (xterm)) {
- Window root, parent, *children;
- unsigned nchildren;
- XQueryTree (dpy, xterm, &root, &parent, &children, &nchildren);
- transient_x_free (children);
- if (parent == root)
- xterm = None;
- else
- xterm = parent;
+gboolean
+zenity_util_timeout_handle (AdwMessageDialog *dialog)
+{
+ if (dialog) {
+ adw_message_dialog_response (dialog, "timeout");
+ }
+ else {
+ exit (ZENITY_TIMEOUT);
}
- return xterm;
+ return FALSE;
}
-static void
-zenity_util_make_transient (GdkWindow *window, Window parent) {
- Window parent_window = parent;
- if (parent_window == 0)
- parent_window = transient_get_xterm_toplevel ();
- if (parent_window != None) {
- XSetTransientForHint (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
- GDK_WINDOW_XID (window),
- parent_window);
+void
+zenity_util_gapp_main (GtkWindow *window)
+{
+ GApplication *app = g_application_get_default ();
+
+ if (window)
+ {
+ /* As this behaves quite differently if a window is provided vs. not,
+ * let's ensure any window passed is valid.
+ */
+ g_assert (GTK_IS_WINDOW (window));
+
+ gtk_application_add_window (GTK_APPLICATION(app), window);
+ }
+ else {
+ g_application_hold (g_application_get_default ());
}
}
-#endif /* GDK_WINDOWING_X11 */
-
void
-zenity_util_show_dialog (GtkWidget *dialog, guintptr parent) {
- gtk_widget_realize (dialog);
-#ifdef GDK_WINDOWING_X11
- if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
- g_assert (gtk_widget_get_window (dialog));
- zenity_util_make_transient (gtk_widget_get_window (dialog), parent);
+zenity_util_gapp_quit (GtkWindow *window, ZenityData *data)
+{
+ /* This is a bit hack-ish, but GApplication doesn't really allow for
+ * customized exit statuses within that API.
+ */
+ if (data->exit_code != 0)
+ exit (data->exit_code);
+
+ if (window)
+ {
+ g_assert (GTK_IS_WINDOW (window));
+ gtk_window_destroy (window);
+ }
+ else {
+ g_application_release (g_application_get_default ());
}
-#endif
- gtk_widget_show (dialog);
}
-gboolean
-zenity_util_timeout_handle (gpointer data) {
- GtkDialog *dialog = GTK_DIALOG (data);
- if (dialog != NULL)
- gtk_dialog_response (dialog, ZENITY_TIMEOUT);
- else {
- gtk_main_quit ();
- exit (ZENITY_TIMEOUT);
+int
+zenity_util_parse_dialog_response (const char *response)
+{
+ if (g_strcmp0 (response, "ok") == 0 || g_strcmp0 (response, "yes") == 0)
+ {
+ return ZENITY_OK;
}
- return FALSE;
+ else if (g_strcmp0 (response, "cancel") == 0 || g_strcmp0 (response, "no") == 0)
+ {
+ return ZENITY_CANCEL;
+ }
+ else if (g_strcmp0 (response, "timeout") == 0)
+ {
+ return ZENITY_TIMEOUT;
+ }
+ else if (response[0] >= '0' && response[0] <= '9')
+ {
+ /* FIXME - atoi returns 0 on error, so this *could* mean the function
+ * failed - but that would be a programmer error, so we'll leave this
+ * in place.
+ */
+ return atoi (response);
+ }
+ else
+ {
+ return ZENITY_ESC;
+ }
+}
+
+GtkWidget *
+zenity_util_add_button (AdwMessageDialog *dialog, const char *button_text,
+ ZenityExitCode response_id)
+{
+ GtkWidget *w = GTK_WIDGET(dialog);
+ g_autofree char *response_str = g_strdup_printf ("%d", response_id);
+
+ adw_message_dialog_add_response (dialog, response_str, button_text);
+
+ return w;
}
diff --git a/src/util.h b/src/util.h
index 3e5391b..5ea703d 100644
--- a/src/util.h
+++ b/src/util.h
@@ -1,35 +1,74 @@
-#ifndef UTIL_H
-#define UTIL_H
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
+/*
+ * util.h
+ *
+ * Copyright © 2002 Sun Microsystems, Inc.
+ * © 1999, 2000 Red Hat Inc.
+ * © 1998 James Henstridge
+ * © 1995-2002 Free Software Foundation
+ * © 2021-2023 Logan Rathbone
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * Original Authors of util.c (inferring they were the authors of
+ * this file as well):
+ *
+ * Glynn Foster <glynn.foster@sun.com>
+ * Havoc Pennington <hp@redhat.com>
+ * James Henstridge <james@daa.com.au>
+ * Tom Tromey <tromey@redhat.com>
+ */
+
+#pragma once
#include "zenity.h"
#include <gtk/gtk.h>
G_BEGIN_DECLS
-#define ZENITY_UI_FILE_FULLPATH ZENITY_DATADIR "/zenity.ui"
-#define ZENITY_UI_FILE_RELATIVEPATH "./zenity.ui"
-
-#define ZENITY_IMAGE_FULLPATH(filename) (ZENITY_DATADIR "/" filename)
-
-GtkBuilder *zenity_util_load_ui_file (
- const gchar *widget_root, ...) G_GNUC_NULL_TERMINATED;
-gchar *zenity_util_strip_newline (gchar *string);
-gboolean zenity_util_fill_file_buffer (
- GtkTextBuffer *buffer, const gchar *filename);
-const gchar *zenity_util_icon_name_from_filename (const gchar *filename);
-void zenity_util_set_window_icon (
- GtkWidget *widget, const gchar *filename, const gchar *default_file);
-void zenity_util_set_window_icon_from_icon_name (
- GtkWidget *widget, const gchar *filename, const gchar *default_icon_name);
-void zenity_util_set_window_icon_from_file (
- GtkWidget *widget, const gchar *filename);
+#define ZENITY_IMAGE_FULLPATH(filename) (PACKAGE_DATADIR "/" filename)
+
+#define ZENITY_UTIL_ADD_EXTRA_LABELS(DIALOG) \
+ for (int i = 0; data->extra_label[i] != NULL; ++i) { \
+ zenity_util_add_button (ADW_MESSAGE_DIALOG (DIALOG), data->extra_label[i], i); \
+ }
+
+#define ZENITY_UTIL_SETUP_OK_BUTTON_LABEL(DIALOG) \
+ adw_message_dialog_set_response_label (ADW_MESSAGE_DIALOG(DIALOG), "ok", data->ok_label);
+
+#define ZENITY_UTIL_SETUP_CANCEL_BUTTON_LABEL(DIALOG) \
+ adw_message_dialog_set_response_label (ADW_MESSAGE_DIALOG(DIALOG), "cancel", data->cancel_label);
+
+GIcon *zenity_util_gicon_from_string (const char *str);
+GtkBuilder *zenity_util_load_ui_file (const char *widget_root,
+ ...) G_GNUC_NULL_TERMINATED;
+char *zenity_util_strip_newline (char *string);
+gboolean zenity_util_fill_file_buffer (GtkTextBuffer *buffer,
+ 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, guintptr parent);
-
-gboolean zenity_util_timeout_handle (gpointer data);
+void zenity_util_show_dialog (GtkWidget *widget);
+gboolean zenity_util_timeout_handle (AdwMessageDialog *dialog);
+char *zenity_util_pango_font_description_to_css (PangoFontDescription *desc);
+void zenity_util_gapp_main (GtkWindow *window);
+void zenity_util_gapp_quit (GtkWindow *window, ZenityData *data);
+ZenityExitCode zenity_util_parse_dialog_response (const char *response);
+GtkWidget *zenity_util_add_button (AdwMessageDialog *dialog, const char
+ *button_text, ZenityExitCode response_id);
G_END_DECLS
-
-#endif /* UTIL_H */
diff --git a/src/zenity.gresource.xml.in b/src/zenity.gresource.xml.in
new file mode 100644
index 0000000..4671d46
--- /dev/null
+++ b/src/zenity.gresource.xml.in
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- vim:ts=4 sw=4
+-->
+<!--
+ Copyright © 2021-2023 Logan Rathbone <poprocks@gmail.com>
+
+ Zenity is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ Zenity is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with Zenity; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+-->
+
+<gresources>
+ <gresource prefix="@resource_base_path@">
+ <file preprocess="xml-stripblanks" compressed="true">zenity.ui</file>
+ </gresource>
+</gresources>
diff --git a/src/zenity.h b/src/zenity.h
index 404eec7..20cac9f 100644
--- a/src/zenity.h
+++ b/src/zenity.h
@@ -1,47 +1,44 @@
-#ifndef ZENITY_H
-#define ZENITY_H
+/* vim: colorcolumn=80 ts=4 sw=4
+ */
+#pragma once
-#include <gtk/gtk.h>
+#include <adwaita.h>
+#include <glib/gi18n.h>
+
+#include "zenity-enums.h" /* auto-generated by build system */
+
+#include <config.h>
G_BEGIN_DECLS
-#include <libintl.h>
-#define _(String) dgettext (GETTEXT_PACKAGE, String)
-#ifdef gettext_noop
-#define N_(String) gettext_noop (String)
-#else
-#define N_(String) (String)
-#endif
+typedef enum
+{
+ ZENITY_OK = -1,
+ ZENITY_CANCEL = -2,
+ ZENITY_ESC = -3,
+ ZENITY_ERROR = -4,
+ ZENITY_EXTRA = -5,
+ ZENITY_TIMEOUT = -6
+} ZenityExitCode;
typedef struct {
- gchar *dialog_title;
- gchar *window_icon;
- gchar *ok_label;
- gchar *cancel_label;
- gchar **extra_label;
- gint width;
- gint height;
- gint exit_code;
- gint timeout_delay;
+ char *dialog_title;
+ char *ok_label;
+ char *cancel_label;
+ char **extra_label;
+ int width;
+ int height;
+ int exit_code;
+ int timeout_delay;
gboolean modal;
- guintptr attach;
} ZenityData;
-typedef enum {
- ZENITY_OK,
- ZENITY_CANCEL,
- ZENITY_ESC,
- ZENITY_ERROR,
- ZENITY_EXTRA,
- ZENITY_TIMEOUT
-} ZenityExitCode;
-
typedef struct {
- gchar *dialog_text;
- gint day;
- gint month;
- gint year;
- gchar *date_format;
+ char *dialog_text;
+ int day;
+ int month;
+ int year;
+ char *date_format;
} ZenityCalendarData;
typedef enum {
@@ -53,8 +50,8 @@ typedef enum {
} MsgMode;
typedef struct {
- gchar *dialog_text;
- gchar *dialog_icon;
+ char *dialog_text;
+ char *dialog_icon;
MsgMode mode;
gboolean no_wrap;
gboolean no_markup;
@@ -63,35 +60,34 @@ typedef struct {
} ZenityMsgData;
typedef struct {
- gchar *dialog_text;
- gint value;
- gint min_value;
- gint max_value;
- gint step;
+ char *dialog_text;
+ int value;
+ int min_value;
+ int max_value;
+ int step;
gboolean print_partial;
gboolean hide_value;
} ZenityScaleData;
typedef struct {
- gchar *uri;
+ char *uri;
gboolean multi;
gboolean directory;
gboolean save;
- gboolean confirm_overwrite;
- gchar *separator;
- gchar **filter;
+ char *separator;
+ char **filter;
} ZenityFileData;
typedef struct {
- gchar *dialog_text;
- gchar *entry_text;
+ char *dialog_text;
+ char *entry_text;
gboolean hide_text;
- const gchar **data;
+ const char **data;
} ZenityEntryData;
typedef struct {
- gchar *dialog_text;
- gchar *entry_text;
+ char *dialog_text;
+ char *entry_text;
gboolean pulsate;
gboolean autoclose;
gboolean autokill;
@@ -101,46 +97,44 @@ typedef struct {
} ZenityProgressData;
typedef struct {
- gchar *uri;
+ char *uri;
gboolean editable;
gboolean no_wrap;
gboolean auto_scroll;
- gchar *font;
+ char *font;
GtkTextBuffer *buffer;
- gchar *checkbox;
+ char *checkbox;
#ifdef HAVE_WEBKITGTK
gboolean html;
gboolean no_interaction;
- gchar *url;
+ char *url;
#endif
} ZenityTextData;
typedef struct {
- gchar *dialog_text;
+ char *dialog_text;
GSList *columns;
gboolean checkbox;
gboolean radiobox;
gboolean hide_header;
gboolean imagebox;
- gchar *separator;
+ char *separator;
gboolean multi;
gboolean editable;
gboolean mid_search;
- gchar *print_column;
- gchar *hide_column;
- const gchar **data;
+ char *print_column;
+ char *hide_column;
+ const char **data;
} ZenityTreeData;
-#ifdef HAVE_LIBNOTIFY
typedef struct {
- gchar *notification_text;
+ char *notification_text;
gboolean listen;
- gchar **notification_hints;
+ char *icon;
} ZenityNotificationData;
-#endif
typedef struct {
- gchar *color;
+ char *color;
gboolean show_palette;
} ZenityColorData;
@@ -150,10 +144,9 @@ typedef struct {
GSList *list_values;
GSList *column_values;
GSList *combo_values;
- gchar *dialog_text;
- gchar *separator;
- gchar *date_format;
- // gchar *hide_column;
+ char *dialog_text;
+ char *separator;
+ char *date_format;
gboolean show_header;
} ZenityFormsData;
@@ -166,14 +159,14 @@ typedef enum {
} ZenityFormsType;
typedef struct {
- gchar *option_value;
+ char *option_value;
ZenityFormsType type;
GtkWidget *forms_widget;
} ZenityFormsValue;
typedef struct {
gboolean username;
- gchar *password;
+ char *password;
GtkWidget *entry_username;
GtkWidget *entry_password;
} ZenityPasswordData;
@@ -185,10 +178,8 @@ void zenity_entry (ZenityData *data, ZenityEntryData *entry_data);
void zenity_progress (ZenityData *data, ZenityProgressData *progress_data);
void zenity_text (ZenityData *data, ZenityTextData *text_data);
void zenity_tree (ZenityData *data, ZenityTreeData *tree_data);
-#ifdef HAVE_LIBNOTIFY
-void zenity_notification (
- ZenityData *data, ZenityNotificationData *notification_data);
-#endif
+void zenity_notification (ZenityData *data,
+ ZenityNotificationData *notification_data);
void zenity_colorselection (
ZenityData *data, ZenityColorData *notification_data);
@@ -199,5 +190,3 @@ void zenity_password_dialog (
ZenityData *data, ZenityPasswordData *password_data);
void zenity_forms_dialog (ZenityData *data, ZenityFormsData *forms_data);
G_END_DECLS
-
-#endif /* ZENITY_H */
diff --git a/src/zenity.ui b/src/zenity.ui
index c1a367c..f2bb9b4 100644
--- a/src/zenity.ui
+++ b/src/zenity.ui
@@ -1,1155 +1,490 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+
+<!-- vim: ts=2 sw=2
+-->
+
<interface>
- <requires lib="gtk+" version="3.0"/>
- <object class="GtkAdjustment" id="adjustment1">
- <property name="upper">100</property>
- <property name="step_increment">1</property>
- <property name="page_increment">1</property>
- </object>
- <object class="GtkDialog" id="zenity_scale_dialog">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Adjust the scale value</property>
- <property name="default_width">300</property>
- <property name="default_height">100</property>
- <property name="type_hint">dialog</property>
- <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox11">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area11">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="zenity_scale_cancel_button">
- <property name="label" translatable="yes">Cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="zenity_scale_ok_button">
- <property name="label" translatable="yes">OK</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <property name="has_default">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox13">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="zenity_scale_text">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="ypad">4</property>
- <property name="label" translatable="yes">Adjust the scale value</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkScale" id="zenity_scale_hscale">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="adjustment">adjustment1</property>
- <property name="digits">0</property>
- <property name="value_pos">right</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">zenity_scale_cancel_button</action-widget>
- <action-widget response="-5">zenity_scale_ok_button</action-widget>
- </action-widgets>
- </object>
- <object class="GtkTextBuffer" id="textbuffer1"/>
- <object class="GtkDialog" id="zenity_text_dialog">
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Text View</property>
- <property name="window_position">center</property>
- <property name="default_width">300</property>
- <property name="default_height">200</property>
- <property name="type_hint">dialog</property>
- <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox5">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area5">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="zenity_text_cancel_button">
- <property name="label" translatable="yes">Cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="zenity_text_close_button">
- <property name="label" translatable="yes">OK</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">True</property>
- <property name="image_position">right</property>
- <accelerator key="Return" signal="clicked" modifiers="GDK_CONTROL_MASK"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox5">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkScrolledWindow" id="zenity_text_scrolled_window">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="shadow_type">etched-in</property>
- <child>
- <object class="GtkTextView" id="zenity_text_view">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="pixels_above_lines">2</property>
- <property name="pixels_below_lines">2</property>
- <property name="editable">False</property>
- <property name="wrap_mode">word</property>
- <property name="left_margin">2</property>
- <property name="right_margin">2</property>
- <property name="buffer">textbuffer1</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="zenity_text_checkbox">
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="xalign">0.5</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">zenity_text_cancel_button</action-widget>
- <action-widget response="-7">zenity_text_close_button</action-widget>
- </action-widgets>
- </object>
- <object class="GtkDialog" id="zenity_calendar_dialog">
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Calendar selection</property>
- <property name="window_position">center</property>
- <property name="type_hint">dialog</property>
- <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="zenity_calendar_cancel_button">
- <property name="label" translatable="yes">Cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="zenity_calendar_ok_button">
- <property name="label" translatable="yes">OK</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkBox" id="vbox2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="zenity_calendar_text">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Select a date from below.</property>
- <property name="wrap">True</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="zenity_calendar_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">C_alendar:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">zenity_calendar</property>
- <property name="xalign">0</property>
- <accessibility>
- <relation type="label-for" target="zenity_calendar"/>
- </accessibility>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkCalendar" id="zenity_calendar">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">zenity_calendar_cancel_button</action-widget>
- <action-widget response="-5">zenity_calendar_ok_button</action-widget>
- </action-widgets>
- </object>
- <object class="GtkDialog" id="zenity_entry_dialog">
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Add a new entry</property>
- <property name="window_position">center</property>
- <property name="type_hint">dialog</property>
- <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="zenity_entry_cancel_button">
- <property name="label" translatable="yes">Cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="zenity_entry_ok_button">
- <property name="label" translatable="yes">OK</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">6</property>
- <child>
- <object class="GtkBox" id="vbox4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="zenity_entry_text">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_Enter new text:</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">zenity_entry_cancel_button</action-widget>
- <action-widget response="-5">zenity_entry_ok_button</action-widget>
- </action-widgets>
- </object>
- <object class="GtkDialog" id="zenity_error_dialog">
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Error</property>
- <property name="window_position">center</property>
- <property name="type_hint">dialog</property>
- <property name="resizable">false</property>
- <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox7">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">14</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area7">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="zenity_error_ok_button">
- <property name="label" translatable="yes">OK</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox8">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">6</property>
- <child>
- <object class="GtkBox" id="hbox3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkImage" id="zenity_error_image">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">0</property>
- <property name="icon_name">dialog-error</property>
- <property name="icon_size">6</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="zenity_error_text">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">An error has occurred.</property>
- <property name="wrap">True</property>
- <property name="selectable">True</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-5">zenity_error_ok_button</action-widget>
- </action-widgets>
- </object>
- <object class="GtkDialog" id="zenity_forms_dialog">
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="window_position">center</property>
- <property name="type_hint">normal</property>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox12">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area12">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="zenity_forms_cancel_button">
- <property name="label" translatable="yes">Cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="zenity_forms_ok_button">
- <property name="label" translatable="yes">OK</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkFrame" id="frame1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <child>
- <object class="GtkGrid" id="zenity_forms_grid">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_left">12</property>
- <property name="margin_right">6</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">6</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">10</property>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="zenity_forms_text">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Forms dialog</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">zenity_forms_cancel_button</action-widget>
- <action-widget response="-5">zenity_forms_ok_button</action-widget>
- </action-widgets>
- </object>
- <object class="GtkDialog" id="zenity_info_dialog">
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Information</property>
- <property name="window_position">center</property>
- <property name="type_hint">dialog</property>
- <property name="resizable">false</property>
- <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox9">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">14</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="zenity_info_ok_button">
- <property name="label" translatable="yes">OK</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="hbox4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkImage" id="zenity_info_image">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">0</property>
- <property name="icon_name">dialog-information</property>
- <property name="icon_size">6</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="zenity_info_text">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">All updates are complete.</property>
- <property name="wrap">True</property>
- <property name="selectable">True</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-5">zenity_info_ok_button</action-widget>
- </action-widgets>
- </object>
- <object class="GtkDialog" id="zenity_progress_dialog">
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Progress</property>
- <property name="window_position">center</property>
- <property name="type_hint">dialog</property>
- <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox6">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area6">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="zenity_progress_cancel_button">
- <property name="label" translatable="yes">Cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="zenity_progress_ok_button">
- <property name="label" translatable="yes">OK</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox7">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="zenity_progress_text">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Running...</property>
- <property name="wrap">True</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkProgressBar" id="zenity_progress_bar">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="pulse_step">0.10000000149</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="zenity_progress_time">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">zenity_progress_cancel_button</action-widget>
- <action-widget response="-5">zenity_progress_ok_button</action-widget>
- </action-widgets>
- </object>
- <object class="GtkDialog" id="zenity_question_dialog">
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Question</property>
- <property name="window_position">center</property>
- <property name="type_hint">dialog</property>
- <property name="resizable">false</property>
- <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">14</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="zenity_question_button_box">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="hbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkImage" id="zenity_question_image">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="icon_name">dialog-question</property>
- <property name="icon_size">6</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="zenity_question_text">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Are you sure you want to proceed?</property>
- <property name="wrap">True</property>
- <property name="selectable">True</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <object class="GtkDialog" id="zenity_tree_dialog">
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Select items from the list</property>
- <property name="window_position">center</property>
- <property name="default_width">300</property>
- <property name="default_height">196</property>
- <property name="type_hint">dialog</property>
- <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox8">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area8">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="zenity_tree_cancel_button">
- <property name="label" translatable="yes">Cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="zenity_tree_ok_button">
- <property name="label" translatable="yes">OK</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox10">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="zenity_tree_text">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Select items from the list below.</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="zenity_tree_window">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="shadow_type">in</property>
- <property name="expand">True</property>
- <child>
- <object class="GtkTreeView" id="zenity_tree_view">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection1"/>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">zenity_tree_cancel_button</action-widget>
- <action-widget response="-5">zenity_tree_ok_button</action-widget>
- </action-widgets>
- </object>
- <object class="GtkDialog" id="zenity_warning_dialog">
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Warning</property>
- <property name="window_position">center</property>
- <property name="type_hint">dialog</property>
- <property name="resizable">false</property>
- <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">14</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="zenity_warning_ok_button">
- <property name="label" translatable="yes">OK</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="hbox2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkImage" id="zenity_warning_image">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="icon_name">dialog-warning</property>
- <property name="icon_size">6</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="zenity_warning_text">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Are you sure you want to proceed?</property>
- <property name="wrap">True</property>
- <property name="selectable">True</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-5">zenity_warning_ok_button</action-widget>
- </action-widgets>
- </object>
+ <requires lib="gtk" version="4.0"/>
+ <object class="AdwMessageDialog" id="zenity_scale_dialog">
+ <property name="title" translatable="yes">Adjust the scale value</property>
+ <property name="default_width">300</property>
+ <property name="default_height">100</property>
+ <property name="extra-child">zenity_scale_box</property>
+ <responses>
+ <response id="cancel" translatable="yes">_Cancel</response>
+ <response id="ok" translatable="yes">_OK</response>
+ </responses>
+ </object>
+ <object class="GtkAdjustment" id="zenity_scale_adjustment">
+ <property name="upper">100</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkBox" id="zenity_scale_box">
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="zenity_scale_text">
+ <property name="valign">center</property>
+ <property name="vexpand">true</property>
+ <property name="label" translatable="yes">Adjust the scale value</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScale" id="zenity_scale_hscale">
+ <property name="hexpand">true</property>
+ <property name="draw-value">1</property>
+ <property name="adjustment">zenity_scale_adjustment</property>
+ <property name="digits">0</property>
+ <property name="value_pos">right</property>
+ </object>
+ </child>
+ </object>
+ <object class="AdwMessageDialog" id="zenity_text_dialog">
+ <property name="title" translatable="yes">Text View</property>
+ <property name="default_width">300</property>
+ <property name="default_height">200</property>
+ <property name="resizable">true</property>
+ <property name="extra-child">zenity_text_box</property>
+ <responses>
+ <response id="cancel" translatable="yes">_Cancel</response>
+ <response id="ok" translatable="yes">_OK</response>
+ </responses>
+ </object>
+ <object class="GtkBox" id="zenity_text_box">
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkBox" id="vbox5">
+ <property name="hexpand">1</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkScrolledWindow" id="zenity_text_scrolled_window">
+ <property name="vexpand">1</property>
+ <property name="child">
+ <object class="GtkTextView" id="zenity_text_view">
+ <property name="editable">false</property>
+ <property name="wrap_mode">word</property>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="zenity_text_checkbox">
+ <property name="valign">center</property>
+ <property name="visible">0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="AdwMessageDialog" id="zenity_calendar_dialog">
+ <property name="title" translatable="yes">Calendar selection</property>
+ <property name="extra-child">zenity_calendar_box</property>
+ <responses>
+ <response id="cancel" translatable="yes">_Cancel</response>
+ <response id="ok" translatable="yes">_OK</response>
+ </responses>
+ </object>
+ <object class="GtkBox" id="zenity_calendar_box">
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkBox" id="vbox1">
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkBox" id="vbox2">
+ <property name="vexpand">1</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="zenity_calendar_text">
+ <property name="halign">center</property>
+ <property name="label" translatable="yes">Select a date from below.</property>
+ <property name="wrap">1</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="zenity_calendar_label">
+ <property name="valign">center</property>
+ <property name="label" translatable="yes">C_alendar:</property>
+ <property name="use_underline">1</property>
+ <property name="mnemonic_widget">zenity_calendar</property>
+ <property name="xalign">0</property>
+ <accessibility>
+ <property name="label" translatable="yes">Calendar</property>
+ <relation name="labelled-by">zenity_calendar</relation>
+ </accessibility>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCalendar" id="zenity_calendar">
+ <property name="valign">center</property>
+ <property name="vexpand">true</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="AdwMessageDialog" id="zenity_entry_dialog">
+ <property name="title" translatable="yes">Add a new entry</property>
+ <property name="extra-child">zenity_entry_box</property>
+ <responses>
+ <response id="cancel" translatable="yes">_Cancel</response>
+ <response id="ok" translatable="yes">_OK</response>
+ </responses>
+ </object>
+ <object class="GtkBox" id="zenity_entry_box">
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-bottom">12</property>
+ <property name="margin-top">12</property>
+ <child>
+ <object class="GtkBox" id="vbox3">
+ <child>
+ <object class="GtkBox" id="vbox4">
+ <property name="hexpand">1</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="zenity_entry_text">
+ <property name="valign">center</property>
+ <property name="label" translatable="yes">_Enter new text:</property>
+ <property name="use_underline">1</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="AdwMessageDialog" id="zenity_error_dialog">
+ <property name="title" translatable="yes">Error</property>
+ <property name="extra-child">zenity_error_box</property>
+ <responses>
+ <response id="ok" translatable="yes">_OK</response>
+ </responses>
+ </object>
+ <object class="GtkBox" id="zenity_error_box">
+ <property name="spacing">14</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-bottom">12</property>
+ <property name="margin-top">12</property>
+ <child>
+ <object class="GtkBox" id="vbox8">
+ <child>
+ <object class="GtkBox" id="hbox3">
+ <property name="hexpand">1</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="zenity_error_image">
+ <property name="halign">center</property>
+ <property name="icon_name">dialog-error</property>
+ <property name="icon_size">large</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="zenity_error_text">
+ <property name="halign">center</property>
+ <property name="label" translatable="yes">An error has occurred.</property>
+ <property name="wrap">true</property>
+ <property name="selectable">true</property>
+ <property name="can-focus">false</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="AdwMessageDialog" id="zenity_forms_dialog">
+ <property name="extra-child">zenity_forms_box</property>
+ <responses>
+ <response id="cancel" translatable="yes">_Cancel</response>
+ <response id="ok" translatable="yes">_OK</response>
+ </responses>
+ </object>
+ <object class="GtkBox" id="zenity_forms_box">
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="child">
+ <object class="GtkGrid" id="zenity_forms_grid">
+ <property name="margin-start">12</property>
+ <property name="margin-end">6</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">6</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">10</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </property>
+ <child type="label">
+ <object class="GtkLabel" id="zenity_forms_text">
+ <property name="label" translatable="yes">Forms dialog</property>
+ <attributes>
+ <attribute name="weight" value="bold"></attribute>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="AdwMessageDialog" id="zenity_info_dialog">
+ <property name="title" translatable="yes">Information</property>
+ <property name="extra-child">zenity_info_box</property>
+ <responses>
+ <response id="ok" translatable="yes">_OK</response>
+ </responses>
+ </object>
+ <object class="GtkBox" id="zenity_info_box">
+ <property name="spacing">14</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-bottom">12</property>
+ <property name="margin-top">12</property>
+ <child>
+ <object class="GtkBox" id="hbox4">
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="zenity_info_image">
+ <property name="halign">center</property>
+ <property name="icon_name">dialog-information</property>
+ <property name="icon_size">large</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="zenity_info_text">
+ <property name="halign">center</property>
+ <property name="vexpand">true</property>
+ <property name="label" translatable="yes">All updates are complete.</property>
+ <property name="wrap">true</property>
+ <property name="selectable">true</property>
+ <property name="can-focus">false</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="AdwMessageDialog" id="zenity_progress_dialog">
+ <property name="title" translatable="yes">Progress</property>
+ <property name="extra-child">zenity_progress_box</property>
+ </object>
+ <object class="GtkBox" id="zenity_progress_box">
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkBox" id="vbox7">
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="zenity_progress_text">
+ <property name="valign">center</property>
+ <property name="label" translatable="yes">Running...</property>
+ <property name="wrap">1</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkProgressBar" id="zenity_progress_bar">
+ <property name="valign">center</property>
+ <property name="hexpand">true</property>
+ <property name="pulse_step">0.10000000149</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="zenity_progress_time">
+ <property name="valign">center</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="AdwMessageDialog" id="zenity_question_dialog">
+ <property name="title" translatable="yes">Question</property>
+ <property name="extra-child">zenity_question_box</property>
+ <responses>
+ <response id="no" translatable="yes">_No</response>
+ <response id="yes" translatable="yes">_Yes</response>
+ </responses>
+ </object>
+ <object class="GtkBox" id="zenity_question_box">
+ <property name="spacing">14</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-bottom">12</property>
+ <property name="margin-top">12</property>
+ <child>
+ <object class="GtkBox" id="hbox1">
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="zenity_question_image">
+ <property name="icon_name">dialog-question</property>
+ <property name="icon_size">large</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="zenity_question_text">
+ <property name="halign">center</property>
+ <property name="vexpand">true</property>
+ <property name="label" translatable="yes">Are you sure you want to proceed?</property>
+ <property name="wrap">true</property>
+ <property name="selectable">true</property>
+ <property name="can-focus">false</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="AdwMessageDialog" id="zenity_tree_dialog">
+ <property name="title" translatable="yes">Select items from the list</property>
+ <property name="default_width">300</property>
+ <property name="default_height">196</property>
+ <property name="extra-child">zenity_tree_box</property>
+ <property name="resizable">true</property>
+ <responses>
+ <response id="cancel" translatable="yes">_Cancel</response>
+ <response id="ok" translatable="yes">_OK</response>
+ </responses>
+ </object>
+ <object class="GtkBox" id="zenity_tree_box">
+ <child>
+ <object class="GtkBox" id="vbox10">
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="zenity_tree_text">
+ <property name="valign">center</property>
+ <property name="label" translatable="yes">Select items from the list below.</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="zenity_tree_window">
+ <property name="hexpand">1</property>
+ <property name="vexpand">1</property>
+ <property name="child">
+ <object class="GtkTreeView" id="zenity_tree_view">
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection1"/>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="AdwMessageDialog" id="zenity_warning_dialog">
+ <property name="title" translatable="yes">Warning</property>
+ <property name="resizable">false</property>
+ <property name="extra-child">zenity_warning_box</property>
+ <responses>
+ <response id="ok" translatable="yes">_OK</response>
+ </responses>
+ </object>
+ <object class="GtkBox" id="zenity_warning_box">
+ <property name="spacing">14</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-bottom">12</property>
+ <property name="margin-top">12</property>
+ <child>
+ <object class="GtkBox" id="hbox2">
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="zenity_warning_image">
+ <property name="icon_name">dialog-warning</property>
+ <property name="icon_size">large</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="zenity_warning_text">
+ <property name="halign">center</property>
+ <property name="vexpand">true</property>
+ <property name="hexpand">true</property>
+ <property name="label" translatable="yes">Are you sure you want to proceed?</property>
+ <property name="wrap">true</property>
+ <property name="selectable">true</property>
+ <property name="can-focus">false</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="AdwMessageDialog" id="zenity_password_dialog">
+ <property name="title" translatable="yes">Warning</property>
+ <property name="resizable">false</property>
+ <property name="extra-child">zenity_password_box</property>
+ <responses>
+ <response id="cancel" translatable="yes">_Cancel</response>
+ <response id="ok" translatable="yes">_OK</response>
+ </responses>
+ </object>
+ <object class="GtkBox" id="zenity_password_box">
+ <property name="orientation">vertical</property>
+ <property name="spacing">14</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-bottom">12</property>
+ <property name="margin-top">12</property>
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="zenity_password_image">
+ <property name="icon_name">dialog-password</property>
+ <property name="icon_size">large</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="zenity_password_title">
+ <property name="label" translatable="yes">Type your password</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="zenity_password_grid">
+ <property name="column-spacing">12</property>
+ <property name="row-spacing">6</property>
+ </object>
+ </child>
+ </object> <!-- !vbox -->
</interface>