[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Slow redraws in the debootstrap stage



On Tue, Nov 11, 2003 at 01:41:02PM -0500, Joey Hess wrote:
> Denis Barbier wrote:
> > Could someone please test the attached patch?
> > I cannot test it myself at the moment, but I believe that it eliminates
> > those flashing boxes.
> 
> It seems rather broken. When the hw-detect progress bar was displayed,
> it cleared the screen to blue each time the bar was updated. Then it
> displayed the inside of the dialg box, but not the border. This was very
> slow and very obvious on vmware.

Here is another patch.  I managed to get hw-detect to work directly under
cdebconf and so could test it, but I prefer anyway to have it reviewed.
As the previous one, it only addresses the flashing boxes problem, I
still do not know what to do with resized boxes.

Denis
Index: src/modules/frontend/newt/newt.c
===================================================================
RCS file: /cvs/debian-boot/debian-installer/tools/cdebconf/src/modules/frontend/newt/newt.c,v
retrieving revision 1.40
diff -u -r1.40 newt.c
--- src/modules/frontend/newt/newt.c	8 Nov 2003 22:39:41 -0000	1.40
+++ src/modules/frontend/newt/newt.c	11 Nov 2003 20:56:29 -0000
@@ -901,17 +901,19 @@
     obj->interactive = 1;
     obj->data = calloc(1, sizeof(struct newt_data));
     newtInit();
+    newtCls();
     newtGetScreenSize(&width, &height);
     // Fill the screen so people can shift-pgup properly
     for (i = 0; i < height; i++)
         putchar('\n');
-    newtFinished();
+    newtRefresh();
     return DC_OK;
 }
 
 static int
 newt_shutdown(struct frontend *obj)
 {
+    newtFinished();
     return DC_OK;
 }
 
@@ -926,36 +928,25 @@
 static int
 newt_go(struct frontend *obj)
 {
-    struct newt_data *data = (struct newt_data *)obj->data;
     struct question *q = obj->questions;
-    int i, ret = DC_OK, cleared;
+    int i, ret = DC_OK;
 
-    cleared = 0;
     while (q != NULL) {
         for (i = 0; i < DIM(question_handlers); i++) {
             if (strcmp(q->template->type, question_handlers[i].type) == 0) {
-                if (!cleared && !data->scale_form) {
-                    cleared = 1;
-                    newtInit();
-                    newtCls();
-                }
                 ret = question_handlers[i].handler(obj, q);
                 if (ret == DC_OK)
                     obj->qdb->methods.set(obj->qdb, q);
                 else if (ret == DC_GOBACK && q->prev != NULL)
                     q = q->prev;
-                else {
-                    newtFinished();
+                else
                     return ret;
-                }
                 break;
             }
         }
         if (ret == DC_OK)
             q = q->next;
     }
-    if (cleared && !data->scale_form)
-        newtFinished();
     return DC_OK;
 }
 
@@ -981,8 +972,6 @@
     obj->progress_min = min;
     obj->progress_max = max;
     obj->progress_cur = min;
-    newtInit();
-    newtCls();
     newtGetScreenSize(&width, NULL);
     win_width = width-7;
     newtCenteredWindow(win_width, 5, title);
@@ -1070,7 +1059,6 @@
     if (data->scale_form != NULL) {
         newtFormDestroy(data->scale_form);
         newtPopWindow();
-        newtFinished();
         data->scale_form = data->scale_bar = data->perc_label = data->scale_textbox = NULL;
     }
 }

Reply to: