Browse Source

Merge branch '2333_hangup_after_exit'

* 2333_hangup_after_exit:
  Ticket #2333: MC hangs after exit
Andrew Borodin 14 years ago
parent
commit
4a52b64088
2 changed files with 13 additions and 7 deletions
  1. 12 6
      src/dialog.c
  2. 1 1
      src/dialog.h

+ 12 - 6
src/dialog.c

@@ -106,17 +106,20 @@ widget_erase (Widget * w)
 
 /* Clean the dialog area, draw the frame and the title */
 void
-common_dialog_repaint (struct Dlg_head *h)
+common_dialog_repaint (Dlg_head *h)
 {
     int space;
 
+    if (h->state != DLG_ACTIVE)
+        return;
+
     space = (h->flags & DLG_COMPACT) ? 0 : 1;
 
     tty_setcolor (DLG_NORMALC (h));
     dlg_erase (h);
     draw_box (h, space, space, h->lines - 2 * space, h->cols - 2 * space, FALSE);
 
-    if (h->title)
+    if (h->title != NULL)
     {
         tty_setcolor (DLG_HOT_NORMALC (h));
         dlg_move (h, space, (h->cols - str_term_width1 (h->title)) / 2);
@@ -317,7 +320,7 @@ dlg_set_default_colors (void)
 void
 dlg_erase (Dlg_head * h)
 {
-    if (h != NULL)
+    if ((h != NULL) && (h->state == DLG_ACTIVE))
         tty_fill_region (h->y, h->x, h->lines, h->cols, ' ');
 }
 
@@ -458,7 +461,7 @@ dlg_focus (Dlg_head * h)
 {
     /* cannot focus disabled widget ... */
 
-    if (h->current != NULL)
+    if ((h->current != NULL) && (h->state == DLG_ACTIVE))
     {
         Widget *current = (Widget *) h->current->data;
 
@@ -478,7 +481,7 @@ dlg_unfocus (Dlg_head * h)
 {
     /* ... but can unfocus disabled widget */
 
-    if (h->current != NULL)
+    if ((h->current != NULL) && (h->state == DLG_ACTIVE))
     {
         Widget *current = (Widget *) h->current->data;
 
@@ -649,7 +652,7 @@ update_cursor (Dlg_head * h)
 {
     GList *p = h->current;
 
-    if (p != NULL)
+    if ((p != NULL) && (h->state == DLG_ACTIVE))
     {
         Widget *w;
 
@@ -683,6 +686,9 @@ update_cursor (Dlg_head * h)
 void
 dlg_redraw (Dlg_head * h)
 {
+    if (h->state != DLG_ACTIVE)
+        return;
+
     if (h->winch_pending)
     {
         h->winch_pending = FALSE;

+ 1 - 1
src/dialog.h

@@ -253,7 +253,7 @@ void init_widget (Widget * w, int y, int x, int lines, int cols,
 cb_ret_t default_dlg_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data);
 
 /* Default paint routine for dialogs */
-void common_dialog_repaint (struct Dlg_head *h);
+void common_dialog_repaint (Dlg_head *h);
 
 #define widget_move(w, _y, _x) tty_gotoyx (((Widget *)(w))->y + _y, ((Widget *)(w))->x + _x)
 #define dlg_move(h, _y, _x) tty_gotoyx (((Dlg_head *)(h))->y + _y, ((Dlg_head *)(h))->x + _x)