diff console/libgnt/gntentry.c @ 13882:5c750626eaa5

[gaim-migrate @ 16362] New widget GntTextView. It's really simple as it is. But it 'works'. committer: Tailor Script <tailor@pidgin.im>
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Wed, 28 Jun 2006 00:17:35 +0000
parents 0d0ab1e39d0a
children 9d66969a2e32
line wrap: on
line diff
--- a/console/libgnt/gntentry.c	Tue Jun 27 21:55:47 2006 +0000
+++ b/console/libgnt/gntentry.c	Wed Jun 28 00:17:35 2006 +0000
@@ -29,8 +29,12 @@
 gnt_entry_size_request(GntWidget *widget)
 {
 	GntEntry *entry = GNT_ENTRY(widget);
-	widget->priv.height = 1;
-	widget->priv.width = 20;
+
+	if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_MAPPED))
+	{
+		widget->priv.height = 1;
+		widget->priv.width = 20;
+	}
 }
 
 static void
@@ -41,6 +45,13 @@
 	DEBUG;
 }
 
+static void
+entry_redraw(GntWidget *widget)
+{
+	gnt_entry_draw(widget);
+	gnt_widget_queue_update(widget);
+}
+
 static gboolean
 gnt_entry_key_pressed(GntWidget *widget, const char *text)
 {
@@ -52,21 +63,21 @@
 		{
 			memmove(entry->cursor, entry->cursor + 1, entry->end - entry->cursor + 1);
 			entry->end--;
-			gnt_entry_draw(widget);
+			entry_redraw(widget);
 		}
 		else if (strcmp(text + 1, GNT_KEY_LEFT) == 0 && entry->cursor > entry->start)
 		{
 			entry->cursor--;
 			if (entry->cursor < entry->scroll)
 				entry->scroll--;
-			gnt_entry_draw(widget);
+			entry_redraw(widget);
 		}
 		else if (strcmp(text + 1, GNT_KEY_RIGHT) == 0 && entry->cursor < entry->end)
 		{
 			entry->cursor++;
 			if (entry->cursor - entry->scroll > widget->priv.width)
 				entry->scroll++;
-			gnt_entry_draw(widget);
+			entry_redraw(widget);
 		}
 		/* XXX: handle other keys, like home/end, and ctrl+ goodness */
 	}
@@ -106,7 +117,8 @@
 				if (entry->cursor - entry->scroll > widget->priv.width)
 					entry->scroll++;
 			}
-			gnt_entry_draw(widget);
+			entry_redraw(widget);
+			return TRUE;
 		}
 		else
 		{
@@ -120,7 +132,7 @@
 				if (entry->scroll > entry->start)
 					entry->scroll--;
 
-				gnt_entry_draw(widget);
+				entry_redraw(widget);
 			}
 		}
 	}
@@ -233,7 +245,8 @@
 	entry->scroll = entry->start + scroll;
 	entry->cursor = entry->end - cursor;
 
-	/* XXX: redraw if necessary? */
+	if (GNT_WIDGET_IS_FLAG_SET(GNT_WIDGET(entry), GNT_WIDGET_MAPPED))
+		entry_redraw(GNT_WIDGET(entry));
 }
 
 void gnt_entry_set_max(GntEntry *entry, int max)
@@ -247,3 +260,16 @@
 	/* XXX: Check the existing string to make sure the flags are respected? */
 }
 
+const char *gnt_entry_get_text(GntEntry *entry)
+{
+	return entry->start;
+}
+
+void gnt_entry_clear(GntEntry *entry)
+{
+	gnt_entry_set_text(entry, NULL);
+	entry->scroll = entry->cursor = entry->end = entry->start;
+	entry_redraw(GNT_WIDGET(entry));
+}
+
+