Пример #1
0
 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));
     }
 }
Пример #2
0
        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);
            }
        }