Files
gnucash/borrowed/gwengui-gtk3/w_lineedit.c
Robert Fewell 3f7d70ace3 Error for lineedit when setting text
Critical errors were logged when trying to set the gtkentry text when
value is null, test for this before setting entry text.
2018-03-31 17:08:53 +01:00

226 lines
6.2 KiB
C

/***************************************************************************
begin : Sun May 16 2010
copyright : (C) 2010 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
static GWENHYWFAR_CB
int Gtk3Gui_WLineEdit_SetIntProperty(GWEN_WIDGET *w,
GWEN_DIALOG_PROPERTY prop,
int index,
int value,
int doSignal) {
GtkWidget *g;
g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_DIALOG_WIDGET_REAL));
assert(g);
switch(prop) {
case GWEN_DialogProperty_Enabled:
gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE);
return 0;
case GWEN_DialogProperty_Focus:
gtk_widget_grab_focus(GTK_WIDGET(g));
return 0;
case GWEN_DialogProperty_Width:
case GWEN_DialogProperty_Height:
/* just ignore these for now */
return 0;
default:
break;
}
DBG_WARN(GWEN_LOGDOMAIN,
"Function is not appropriate for this type of widget (%s)",
GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
return GWEN_ERROR_INVALID;
}
static GWENHYWFAR_CB
int Gtk3Gui_WLineEdit_GetIntProperty(GWEN_WIDGET *w,
GWEN_DIALOG_PROPERTY prop,
int index,
int defaultValue) {
GtkWidget *g;
g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_DIALOG_WIDGET_REAL));
assert(g);
switch(prop) {
case GWEN_DialogProperty_Enabled:
return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0;
case GWEN_DialogProperty_Focus:
return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0;
return 0;
case GWEN_DialogProperty_Width:
case GWEN_DialogProperty_Height:
/* just ignore these for now */
return 0;
default:
break;
}
DBG_WARN(GWEN_LOGDOMAIN,
"Function is not appropriate for this type of widget (%s)",
GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
return defaultValue;
}
static GWENHYWFAR_CB
int Gtk3Gui_WLineEdit_SetCharProperty(GWEN_WIDGET *w,
GWEN_DIALOG_PROPERTY prop,
int index,
const char *value,
int doSignal) {
GtkWidget *g;
g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_DIALOG_WIDGET_REAL));
assert(g);
switch(prop) {
case GWEN_DialogProperty_Value:
if (value && *value)
gtk_entry_set_text(GTK_ENTRY(g), value);
return 0;
default:
break;
}
DBG_WARN(GWEN_LOGDOMAIN,
"Function is not appropriate for this type of widget (%s)",
GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
return GWEN_ERROR_INVALID;
}
static GWENHYWFAR_CB
const char* Gtk3Gui_WLineEdit_GetCharProperty(GWEN_WIDGET *w,
GWEN_DIALOG_PROPERTY prop,
int index,
const char *defaultValue) {
GtkWidget *g;
g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_DIALOG_WIDGET_REAL));
assert(g);
switch(prop) {
case GWEN_DialogProperty_Value:
return gtk_entry_get_text(GTK_ENTRY(g));
default:
break;
}
DBG_WARN(GWEN_LOGDOMAIN,
"Function is not appropriate for this type of widget (%s)",
GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
return defaultValue;
}
static void Gtk3Gui_WLineEdit_Deleted_text_handler(GtkEntryBuffer *entrybuffer,
guint arg1,
guint arg2,
gpointer data) {
GWEN_WIDGET *w;
int rv;
w=data;
assert(w);
rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
GWEN_DialogEvent_TypeValueChanged,
GWEN_Widget_GetName(w));
if (rv==GWEN_DialogEvent_ResultAccept)
Gtk3Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1);
else if (rv==GWEN_DialogEvent_ResultReject)
Gtk3Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0);
}
static void Gtk3Gui_WLineEdit_Inserted_text_handler(GtkEntryBuffer *entrybuffer,
guint arg1,
gchar *arg2,
guint arg3,
gpointer data) {
GWEN_WIDGET *w;
int rv;
w=data;
assert(w);
rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
GWEN_DialogEvent_TypeValueChanged,
GWEN_Widget_GetName(w));
if (rv==GWEN_DialogEvent_ResultAccept)
Gtk3Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1);
else if (rv==GWEN_DialogEvent_ResultReject)
Gtk3Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0);
}
static int Gtk3Gui_WLineEdit_Setup(GWEN_WIDGET *w) {
GtkWidget *g;
const char *s;
uint32_t flags;
GWEN_WIDGET *wParent;
gulong deleted_text_handler_id;
gulong inserted_text_handler_id;
gboolean text_is_visible;
flags=GWEN_Widget_GetFlags(w);
text_is_visible = (flags & GWEN_WIDGET_FLAGS_PASSWORD) == 0;
wParent=GWEN_Widget_Tree_GetParent(w);
s=GWEN_Widget_GetText(w, 0);
/* create widget */
g=gtk_entry_new();
if (s && *s)
gtk_entry_set_text(GTK_ENTRY(g), s);
gtk_entry_set_visibility(GTK_ENTRY(g), text_is_visible);
GWEN_Widget_SetImplData(w, GTK3_DIALOG_WIDGET_REAL, (void*) g);
GWEN_Widget_SetImplData(w, GTK3_DIALOG_WIDGET_CONTENT, (void*) g);
GWEN_Widget_SetSetIntPropertyFn(w, Gtk3Gui_WLineEdit_SetIntProperty);
GWEN_Widget_SetGetIntPropertyFn(w, Gtk3Gui_WLineEdit_GetIntProperty);
GWEN_Widget_SetSetCharPropertyFn(w, Gtk3Gui_WLineEdit_SetCharProperty);
GWEN_Widget_SetGetCharPropertyFn(w, Gtk3Gui_WLineEdit_GetCharProperty);
deleted_text_handler_id=g_signal_connect(gtk_entry_get_buffer(GTK_ENTRY(g)),
"deleted-text",
G_CALLBACK (Gtk3Gui_WLineEdit_Deleted_text_handler),
w);
inserted_text_handler_id=g_signal_connect(gtk_entry_get_buffer(GTK_ENTRY(g)),
"inserted-text",
G_CALLBACK (Gtk3Gui_WLineEdit_Inserted_text_handler),
w);
if (wParent)
GWEN_Widget_AddChildGuiWidget(wParent, w);
return 0;
}