Add --only-numerical
This commit is contained in:
parent
cdcc55e55f
commit
3dbcdbb34a
30
src/entry.c
30
src/entry.c
@ -21,6 +21,8 @@
|
|||||||
* Authors: Glynn Foster <glynn.foster@sun.com>
|
* Authors: Glynn Foster <glynn.foster@sun.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "zenity.h"
|
#include "zenity.h"
|
||||||
|
|
||||||
@ -45,6 +47,22 @@ zenity_entry_combo_activate_default (GtkEntry *entry, gpointer window) {
|
|||||||
gtk_window_activate_default (GTK_WINDOW (window));
|
gtk_window_activate_default (GTK_WINDOW (window));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
zenity_entry_insert_text_event (GtkEditable *editable, const gchar *text,
|
||||||
|
gint length, gint *position, gpointer data) {
|
||||||
|
int i = 0;
|
||||||
|
if (gtk_editable_get_position (editable) == 0 && text[0] == '-' &&
|
||||||
|
gtk_entry_get_text (GTK_ENTRY (editable))[0] != '-') {
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
for (; i < length; i++) {
|
||||||
|
if (!isdigit (text[i])) {
|
||||||
|
g_signal_stop_emission_by_name (G_OBJECT (editable), "insert-text");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
zenity_entry (ZenityData *data, ZenityEntryData *entry_data) {
|
zenity_entry (ZenityData *data, ZenityEntryData *entry_data) {
|
||||||
GtkBuilder *builder = NULL;
|
GtkBuilder *builder = NULL;
|
||||||
@ -133,6 +151,12 @@ zenity_entry (ZenityData *data, ZenityEntryData *entry_data) {
|
|||||||
"activate",
|
"activate",
|
||||||
G_CALLBACK (zenity_entry_combo_activate_default),
|
G_CALLBACK (zenity_entry_combo_activate_default),
|
||||||
GTK_WINDOW (dialog));
|
GTK_WINDOW (dialog));
|
||||||
|
|
||||||
|
if (entry_data->only_numerical)
|
||||||
|
g_signal_connect (G_OBJECT (gtk_bin_get_child (GTK_BIN (entry))),
|
||||||
|
"insert-text",
|
||||||
|
G_CALLBACK (zenity_entry_insert_text_event),
|
||||||
|
NULL);
|
||||||
} else {
|
} else {
|
||||||
entry = gtk_entry_new ();
|
entry = gtk_entry_new ();
|
||||||
|
|
||||||
@ -143,6 +167,12 @@ zenity_entry (ZenityData *data, ZenityEntryData *entry_data) {
|
|||||||
|
|
||||||
if (entry_data->hide_text)
|
if (entry_data->hide_text)
|
||||||
g_object_set (G_OBJECT (entry), "visibility", FALSE, NULL);
|
g_object_set (G_OBJECT (entry), "visibility", FALSE, NULL);
|
||||||
|
|
||||||
|
if (entry_data->only_numerical)
|
||||||
|
g_signal_connect (G_OBJECT (entry),
|
||||||
|
"insert-text",
|
||||||
|
G_CALLBACK (zenity_entry_insert_text_event),
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_widget_show (entry);
|
gtk_widget_show (entry);
|
||||||
|
15
src/option.c
15
src/option.c
@ -48,6 +48,7 @@ static gboolean zenity_general_modal;
|
|||||||
static gboolean zenity_entry_active;
|
static gboolean zenity_entry_active;
|
||||||
static gchar *zenity_entry_entry_text;
|
static gchar *zenity_entry_entry_text;
|
||||||
static gboolean zenity_entry_hide_text;
|
static gboolean zenity_entry_hide_text;
|
||||||
|
static gboolean zenity_entry_only_numerical;
|
||||||
|
|
||||||
/* List Dialog Options */
|
/* List Dialog Options */
|
||||||
static gboolean zenity_list_active;
|
static gboolean zenity_list_active;
|
||||||
@ -147,6 +148,13 @@ static GOptionEntry entry_options[] = {{"entry",
|
|||||||
&zenity_entry_hide_text,
|
&zenity_entry_hide_text,
|
||||||
"Hide the entry text",
|
"Hide the entry text",
|
||||||
NULL},
|
NULL},
|
||||||
|
{"only-numerical",
|
||||||
|
'\0',
|
||||||
|
0,
|
||||||
|
G_OPTION_ARG_NONE,
|
||||||
|
&zenity_entry_only_numerical,
|
||||||
|
"Only allow numerical input",
|
||||||
|
NULL},
|
||||||
{NULL}};
|
{NULL}};
|
||||||
|
|
||||||
static GOptionEntry list_options[] = {{"list",
|
static GOptionEntry list_options[] = {{"list",
|
||||||
@ -347,6 +355,7 @@ zenity_entry_pre_callback (GOptionContext *context, GOptionGroup *group,
|
|||||||
zenity_entry_active = FALSE;
|
zenity_entry_active = FALSE;
|
||||||
zenity_entry_entry_text = NULL;
|
zenity_entry_entry_text = NULL;
|
||||||
zenity_entry_hide_text = FALSE;
|
zenity_entry_hide_text = FALSE;
|
||||||
|
zenity_entry_only_numerical = FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -394,6 +403,7 @@ zenity_entry_post_callback (GOptionContext *context, GOptionGroup *group,
|
|||||||
results->entry_data->dialog_text = zenity_general_dialog_text;
|
results->entry_data->dialog_text = zenity_general_dialog_text;
|
||||||
results->entry_data->entry_text = zenity_entry_entry_text;
|
results->entry_data->entry_text = zenity_entry_entry_text;
|
||||||
results->entry_data->hide_text = zenity_entry_hide_text;
|
results->entry_data->hide_text = zenity_entry_hide_text;
|
||||||
|
results->entry_data->only_numerical = zenity_entry_only_numerical;
|
||||||
} else {
|
} else {
|
||||||
if (zenity_entry_entry_text)
|
if (zenity_entry_entry_text)
|
||||||
zenity_option_error (zenity_option_get_name (
|
zenity_option_error (zenity_option_get_name (
|
||||||
@ -404,6 +414,11 @@ zenity_entry_post_callback (GOptionContext *context, GOptionGroup *group,
|
|||||||
zenity_option_error (
|
zenity_option_error (
|
||||||
zenity_option_get_name (entry_options, &zenity_entry_hide_text),
|
zenity_option_get_name (entry_options, &zenity_entry_hide_text),
|
||||||
ERROR_SUPPORT);
|
ERROR_SUPPORT);
|
||||||
|
|
||||||
|
if (zenity_entry_only_numerical)
|
||||||
|
zenity_option_error (zenity_option_get_name (entry_options,
|
||||||
|
&zenity_entry_only_numerical),
|
||||||
|
ERROR_SUPPORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -31,6 +31,7 @@ typedef struct {
|
|||||||
gchar *dialog_text;
|
gchar *dialog_text;
|
||||||
gchar *entry_text;
|
gchar *entry_text;
|
||||||
gboolean hide_text;
|
gboolean hide_text;
|
||||||
|
gboolean only_numerical;
|
||||||
const gchar **data;
|
const gchar **data;
|
||||||
} ZenityEntryData;
|
} ZenityEntryData;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user