diff console/libgnt/gntbox.c @ 13980:c9509bd42d7a

[gaim-migrate @ 16542] Show the mail-notification checkbox in the account-dialog only if the prpl has support for it. committer: Tailor Script <tailor@pidgin.im>
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Sun, 23 Jul 2006 02:03:19 +0000
parents 8b2306c64efa
children 7573bd40a190
line wrap: on
line diff
--- a/console/libgnt/gntbox.c	Sun Jul 23 01:10:06 2006 +0000
+++ b/console/libgnt/gntbox.c	Sun Jul 23 02:03:19 2006 +0000
@@ -89,6 +89,8 @@
 
 	for (iter = box->list; iter; iter = iter->next)
 	{
+		if (GNT_WIDGET_IS_FLAG_SET(GNT_WIDGET(iter->data), GNT_WIDGET_INVISIBLE))
+			continue;
 		gnt_widget_set_position(GNT_WIDGET(iter->data), curx, cury);
 		gnt_widget_get_size(GNT_WIDGET(iter->data), &w, &h);
 		if (box->vertical)
@@ -217,6 +219,7 @@
 static GntWidget *
 find_focusable_widget(GntBox *box)
 {
+	/* XXX: Make sure the widget is visible? */
 	if (box->focus == NULL && GNT_WIDGET(box)->parent == NULL)
 		g_list_foreach(box->list, add_to_focus, box);
 
@@ -229,11 +232,17 @@
 static void
 find_next_focus(GntBox *box)
 {
-	GList *iter = g_list_find(box->focus, box->active);
-	if (iter && iter->next)
-		box->active = iter->next->data;
-	else if (box->focus)
-		box->active = box->focus->data;
+	gpointer last = box->active;
+	do
+	{
+		GList *iter = g_list_find(box->focus, box->active);
+		if (iter && iter->next)
+			box->active = iter->next->data;
+		else if (box->focus)
+			box->active = box->focus->data;
+		if (!GNT_WIDGET_IS_FLAG_SET(box->active, GNT_WIDGET_INVISIBLE))
+			break;
+	} while (box->active != last);
 }
 
 static gboolean
@@ -564,6 +573,9 @@
 		int height, width;
 		int x, y;
 
+		if (GNT_WIDGET_IS_FLAG_SET(w, GNT_WIDGET_INVISIBLE))
+			continue;
+
 		if (GNT_IS_BOX(w))
 			gnt_box_sync_children(GNT_BOX(w));