qemacs-commit
[Top][All Lists]
Advanced

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

[Qemacs-commit] qemacs qe.h qe.c


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs qe.h qe.c
Date: Fri, 24 Jan 2014 01:30:55 +0000

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        14/01/24 01:30:55

Modified files:
        .              : qe.h qe.c 

Log message:
        pass pointer to pointer to edit_close

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.h?cvsroot=qemacs&r1=1.130&r2=1.131
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.c?cvsroot=qemacs&r1=1.134&r2=1.135

Patches:
Index: qe.h
===================================================================
RCS file: /sources/qemacs/qemacs/qe.h,v
retrieving revision 1.130
retrieving revision 1.131
diff -u -b -r1.130 -r1.131
--- qe.h        24 Jan 2014 00:46:26 -0000      1.130
+++ qe.h        24 Jan 2014 01:30:54 -0000      1.131
@@ -1612,11 +1612,11 @@
 void do_find_window(EditState *s, int key);
 
 /* window handling */
-void edit_close(EditState *s);
+void edit_close(EditState **sp);
 EditState *edit_new(EditBuffer *b,
                     int x1, int y1, int width, int height, int flags);
 void edit_detach(EditState *s);
-EditState *check_window(EditState *s);
+EditState *check_window(EditState **sp);
 EditState *edit_find(EditBuffer *b);
 void do_refresh(EditState *s);
 // should take direction argument

Index: qe.c
===================================================================
RCS file: /sources/qemacs/qemacs/qe.c,v
retrieving revision 1.134
retrieving revision 1.135
diff -u -b -r1.134 -r1.135
--- qe.c        24 Jan 2014 00:46:26 -0000      1.134
+++ qe.c        24 Jan 2014 01:30:54 -0000      1.135
@@ -4721,22 +4721,25 @@
 /* close the edit window. If it is active, find another active
    window. If the buffer is only referenced by this window, then save
    in the buffer all the window state so that it can be recovered. */
-void edit_close(EditState *s)
+void edit_close(EditState **sp)
 {
+    if (*sp) {
+        EditState *s = *sp;
     QEmacsState *qs = s->qe_state;
     EditState **ps;
 
     /* save current state for later window reattachment */
     switch_to_buffer(s, NULL);
 
-    /* free from window list */
+        /* detach from window list */
     ps = &qs->first_window;
     while (*ps != NULL) {
-        if (*ps == s)
+            if (*ps == s) {
+                *ps = s->next_window;
             break;
+            }
         ps = &(*ps)->next_window;
     }
-    *ps = (*ps)->next_window;
 
     /* if active window, select another active window */
     if (qs->active_window == s)
@@ -4745,7 +4748,8 @@
     qe_free(&s->mode_data);
     qe_free(&s->prompt);
     qe_free(&s->line_shadow);
-    qe_free(&s);
+        qe_free(sp);
+    }
 }
 
 static const char *file_completion_ignore_extensions =
@@ -4902,10 +4906,9 @@
      * completion_popup_window or close it.
      */
     /* check completion window */
-    completion_popup_window = check_window(completion_popup_window);
+    check_window(&completion_popup_window);
     if (completion_popup_window && qs->last_cmd_func == qs->this_cmd_func) {
-        edit_close(completion_popup_window);
-        completion_popup_window = NULL;
+        edit_close(&completion_popup_window);
         do_refresh(s);
         return;
     }
@@ -4962,8 +4965,7 @@
             }
         } else {
             if (completion_popup_window) {
-                edit_close(completion_popup_window);
-                completion_popup_window = NULL;
+                edit_close(&completion_popup_window);
                 do_refresh(s);
             }
         }
@@ -5121,8 +5123,8 @@
     /* remove completion popup if present */
     /* CG: assuming completion_popup_window != s */
     if (cw) {
-        edit_close(cw);
-        completion_popup_window = cw = NULL;
+        edit_close(&completion_popup_window);
+        cw = NULL;
         do_refresh(s);
     }
 
@@ -5136,10 +5138,11 @@
     }
 
     s->b->flags |= BF_TRANSIENT;
-    edit_close(s);
+    /* Close the minibuffer window */
+    edit_close(&s);
 
     /* restore active window */
-    qs->active_window = check_window(minibuffer_saved_active);
+    qs->active_window = check_window(&minibuffer_saved_active);
     minibuffer_saved_active = NULL;
 
     /* force status update */
@@ -5235,17 +5238,19 @@
 /* XXX: incorrect to save it. Should use a safer method */
 static EditState *popup_saved_active;
 
-/* Verify that window still exists, return argument or NULL */
-EditState *check_window(EditState *s)
+/* Verify that window still exists, return argument or NULL,
+ * update handle if window is invalid.
+ */
+EditState *check_window(EditState **sp)
 {
     QEmacsState *qs = &qe_state;
     EditState *e;
 
     for (e = qs->first_window; e != NULL; e = e->next_window) {
-        if (e == s)
-            break;
-    }
+        if (e == *sp)
     return e;
+    }
+    return *sp = NULL;
 }
 
 /* less like mode */
@@ -5253,10 +5258,11 @@
 {
     QEmacsState *qs = s->qe_state;
 
+    /* XXX: ony do this for a popup? */
     s->b->flags |= BF_TRANSIENT;
-    edit_close(s);
+    edit_close(&s);
 
-    qs->active_window = check_window(popup_saved_active);
+    qs->active_window = check_window(&popup_saved_active);
     popup_saved_active = NULL;
 
     do_refresh(qs->active_window);
@@ -5310,8 +5316,9 @@
         if (e->minibuf)
             continue;
         if (e->x2 <= width) {
-            edit_close(e);
-        } else if (e->x1 < width) {
+            edit_close(&e);
+        } else
+        if (e->x1 < width) {
             e->x1 = width;
         }
     }
@@ -6636,7 +6643,7 @@
     }
     if (qs->active_window == s)
         qs->active_window = e ? e : qs->first_window;
-    edit_close(s);
+    edit_close(&s);
     if (qs->first_window)
         do_refresh(qs->first_window);
 }
@@ -6649,7 +6656,7 @@
     for (e = qs->first_window; e != NULL; e = e1) {
         e1 = e->next_window;
         if (!e->minibuf && e != s)
-            edit_close(e);
+            edit_close(&e);
     }
     /* resize to whole screen */
     s->y1 = 0;
@@ -8072,7 +8079,7 @@
         }
         while (qs->first_window) {
             EditState *e = qs->first_window;
-            edit_close(e);
+            edit_close(&e);
         }
         while (qs->first_buffer) {
             EditBuffer *b = qs->first_buffer;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]