> It needs to work under X11 as well before I'd consider integrating the > feature. BTW, another detail is: does this property mean "stay above > every other GUI window", or "stay above the current Emacs frame", or > "stay above all other frames owned by this Emacs process"? > > The latter seems more useful. The former is probably what your > code does. In X11, there's a feature which could do something like > the 2nd option, which is to mark a frame as being "transient", in which > case most window managers will try to keep it "above its parent window", > at least if that transient window is sufficiently small. > > > Stefan Yes, my code does the one "stay above every other GUI window". That is the easiest way. I did try to implement the 2nd option ("stay above the current Emacs frame") too by using the existing frame parameter "parent-id". Something like: In proc w32_createwindow: if (f->output_data.w32->parent_desc != FRAME_X_DISPLAY_INFO (f)->root_window) { long style; SetWindowLong (hwnd, GWL_HWNDPARENT, (long)f->output_data.w32->parent_desc); style = GetWindowLong (hwnd, GWL_STYLE); style &= ~(WS_MINIMIZEBOX); SetWindowLong (hwnd, GWL_STYLE, style); } Comment out the following line in x-create-frame: /* f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window;*/ And also something need to be taken care in Fdelete_frame. It works. But sometimes it has problem in redisplaying the parent window (parent window is not painted sometimes). And the child frame (window) doesn't have icon/button in the windows taskbar too. In GTK+, there is a API to do the 2nd option: gtk_window_set_transient_for. In Windows, this API actually is implemented by calling SetWindowLong with GWL_HWNDPARENT too. But the MSDN says: You must not call SetWindowLong with the GWL_HWNDPARENT index to change the parent of a child window. Instead, use the SetParent function. But SetParent is not what we need. Don't know a way to do the 3rd option ("stay above all other frames owned by this Emacs process") yet :-(