Re: sawfish + xinerama dropping / unmapping windows



I'm slowly trying to figure this out. The bug is very annoying,
occurs virtually always. Not rarely. Impossible to open stuff,
because it disappears. :)

I added single line in src/windows.c remove_window() (see below for
full function code):

   fprintf(stderr,"deleting window, is it destroyed? - %d \n",(int)(destroyed));


And I see a very simple pattern of those messages:

 - when a window is unmapped legally (when it *should* be unmapped),
   because I simply closed something I get this message twice:

     deleting window, is it destroyed? - 1
     deleting window, is it destroyed? - 0

   For each single window close operation: two messages.

 - when a window is unmapped, when it shouldn't be, I get only ONE
   message:

     deleting window, is it destroyed? - 1


So - we have something to start with. Now I'm trying to figure out,
what to do next.

=================

Full function code in src/windows.c:

void
remove_window (Lisp_Window *w, bool destroyed, bool from_error)
{
    DB(("remove_window (%s, %s)\n",
	rep_STR(w->name), destroyed ? "destroyed" : "not-destroyed"));

fprintf(stderr,"deleting window, is it destroyed? - %d \n",(int)(destroyed));

    if (w->id != 0)
    {
	if (!destroyed && !from_error)
	{
	    grab_window_events (w, FALSE);
	    remove_window_frame (w);

	    /* Restore original border width of the client */
	    XSetWindowBorderWidth (dpy, w->id, w->attr.border_width);
	}

	if (!from_error)
	    destroy_window_frame (w, FALSE);

	if (!WINDOW_IS_GONE_P (w))
	    remove_from_stacking_list (w);

	if (!from_error)
	    focus_off_window (w);

	w->id = 0;
	pending_destroys++;

	/* gc will do the rest... */
    }
    else if (w->frame != 0 && !from_error)
	destroy_window_frame (w, FALSE);
}



-- 
Janek Kozicki                                                         |


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