From 9d45ca5ecd002616f4dce6a60621a976d9b100d0 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Wed, 6 May 2015 23:18:34 -0400 Subject: [PATCH] Implemented read-only uiEntries on GTK+. --- unix/entry.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/unix/entry.c b/unix/entry.c index 340fc793..098a73e6 100644 --- a/unix/entry.c +++ b/unix/entry.c @@ -5,6 +5,7 @@ struct entry { uiEntry e; GtkWidget *widget; GtkEntry *entry; + GtkEditable *editable; void (*onChanged)(uiEntry *, void *); void *onChangedData; }; @@ -50,6 +51,24 @@ static void entryOnChanged(uiEntry *ee, void (*f)(uiEntry *, void *), void *data e->onChangedData = data; } +static int entryReadOnly(uiEntry *ee) +{ + struct entry *e = (struct entry *) ee; + + return gtk_editable_get_editable(e->editable) == FALSE; +} + +static void entrySetReadOnly(uiEntry *ee, int readonly) +{ + struct entry *e = (struct entry *) ee; + gboolean editable; + + editable = TRUE; + if (readonly) + editable = FALSE; + gtk_editable_set_editable(e->editable, editable); +} + uiEntry *uiNewEntry(void) { struct entry *e; @@ -62,6 +81,7 @@ uiEntry *uiNewEntry(void) e->widget = GTK_WIDGET(uiControlHandle(uiControl(e))); e->entry = GTK_ENTRY(e->widget); + e->editable = GTK_EDITABLE(e->widget); g_signal_connect(e->widget, "changed", G_CALLBACK(onChanged), e); e->onChanged = defaultOnChanged; @@ -69,6 +89,8 @@ uiEntry *uiNewEntry(void) uiEntry(e)->Text = entryText; uiEntry(e)->SetText = entrySetText; uiEntry(e)->OnChanged = entryOnChanged; + uiEntry(e)->ReadOnly = entryReadOnly; + uiEntry(e)->SetReadOnly = entrySetReadOnly; return uiEntry(e); }