private void HandleClientMessage(X11.XClientMessageEvent clientMessage, Dispatcher d) { if (clientMessage.message_type == WM_PROTOCOL) { Services.Logger.LogWindowingSystemEvent("Having client message WM_PROTOCOL."); //It might not work with other Window Managers then //Openbox. Maybe it WM_DELETE_PROTOCOL should be also //checked in clientMessage.data. d.Invoke(() => DestroyWindow(clientMessage.window)); } }
private void WakeUp() { Services.Logger.LogWindowingSystemEvent("Received wake up call."); if (!_windows.Any()) { Services.Logger.LogWindowingSystemEvent("No windows to wake. Request skipped."); return; } var connection = Xlib.XOpenDisplay(null); IntPtr ev = Marshal.AllocHGlobal(24 * sizeof(long)); try { var msg = new X11.XClientMessageEvent() { message_type = X11.Atom.None, window = _windows[0].XWindow, display = connection, type = (int)X11.Event.ClientMessage, format = 32 }; Marshal.StructureToPtr(msg, ev, false); X11.Status status = Xlib.XSendEvent(connection, _windows[0].XWindow, true, 0, ev); Services.Logger.LogWindowingSystemEvent("Message to XOrg sent. Status - {0}", status); } finally { Marshal.FreeHGlobal(ev); Xlib.XCloseDisplay(connection); } }