[banshee] [NotificationArea] Indent with spaces in X11NotificationArea.cs
- From: Bertrand Lorentz <blorentz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee] [NotificationArea] Indent with spaces in X11NotificationArea.cs
- Date: Sun, 20 Jun 2010 18:45:32 +0000 (UTC)
commit 2bc97ca03e7680d0c5d147f947fb81857f7cbda9
Author: Bertrand Lorentz <bertrand lorentz gmail com>
Date: Sun Jun 20 19:14:03 2010 +0200
[NotificationArea] Indent with spaces in X11NotificationArea.cs
.../X11NotificationArea.cs | 934 ++++++++++----------
1 files changed, 467 insertions(+), 467 deletions(-)
---
diff --git a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationArea.cs b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationArea.cs
index fd2febf..4519e37 100644
--- a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationArea.cs
+++ b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationArea.cs
@@ -44,473 +44,473 @@ using Gdk;
public class X11NotificationArea : Plug
{
- private uint stamp;
- private Orientation orientation;
-
- private IntPtr selection_atom;
- private IntPtr manager_atom;
- private IntPtr system_tray_opcode_atom;
- private IntPtr orientation_atom;
- private IntPtr message_data_atom;
- private IntPtr manager_window;
- private FilterFunc filter;
-
- public X11NotificationArea (string name)
- {
- Title = name;
- Init ();
- }
-
- public X11NotificationArea (string name, Gdk.Screen screen)
- {
- Title = name;
- Screen = screen;
- Init ();
- }
-
- [DllImport ("libc")]
- private static extern IntPtr memcpy (ref XClientMessageEvent.DataUnion dest, IntPtr src, IntPtr len);
-
- public uint SendMessage (uint timeout, string message)
- {
- if (manager_window == IntPtr.Zero) {
- return 0;
- }
-
- byte[] arr = System.Text.Encoding.UTF8.GetBytes (message);
- IntPtr unmanaged_arr = Marshal.AllocHGlobal (arr.Length);
- Marshal.Copy (arr, 0, unmanaged_arr, arr.Length);
-
- SendManagerMessage (SystemTrayMessage.BeginMessage, (IntPtr) Id, timeout, (uint) arr.Length, ++stamp);
-
- gdk_error_trap_push ();
-
- for (int index = 0; index < message.Length; index += 20) {
- XClientMessageEvent ev = new XClientMessageEvent ();
-
- IntPtr display = gdk_x11_display_get_xdisplay (Display.Handle);
-
- ev.type = XEventName.ClientMessage;
- ev.window = (IntPtr) Id;
- ev.format = 8;
- ev.message_type = message_data_atom;
-
- int len = Math.Min (arr.Length - index, 20);
- memcpy (ref ev.data, (IntPtr)((int)unmanaged_arr + index), (IntPtr)len);
-
- XSendEvent (display, manager_window, false, (IntPtr) EventMask.StructureNotifyMask, ref ev);
- XSync (display, false);
- }
-
- gdk_error_trap_pop ();
-
- return stamp;
- }
-
- public void CancelMessage (uint id)
- {
- if (id == 0) {
- return;
- }
-
- SendManagerMessage (SystemTrayMessage.CancelMessage, (IntPtr) Id, id, 0, 0);
- }
-
- private void Init ()
- {
- stamp = 1;
- orientation = Orientation.Horizontal;
- AddEvents ((int)EventMask.PropertyChangeMask);
- filter = new FilterFunc (ManagerFilter);
- }
-
- [GLib.ConnectBefore]
- private void TransparentExposeEvent (object obj, Gtk.ExposeEventArgs args)
- {
- Gtk.Widget widget = (Gtk.Widget)obj;
- Gdk.Rectangle area = args.Event.Area;
-
- widget.GdkWindow.ClearArea (area.X, area.Y, area.Width, area.Height);
- }
-
- private void MakeTransparentAgain (object obj, Gtk.StyleSetArgs args)
- {
- Gtk.Widget widget = (Gtk.Widget)obj;
-
- widget.GdkWindow.SetBackPixmap (null, true);
- }
-
- private void MakeTransparent (object obj, EventArgs args)
- {
- Gtk.Widget widget = (Gtk.Widget)obj;
- if (widget.IsNoWindow || widget.IsAppPaintable)
- return;
-
- widget.AppPaintable = true;
- widget.DoubleBuffered = false;
- widget.GdkWindow.SetBackPixmap (null, true);
- widget.ExposeEvent += TransparentExposeEvent;
- widget.StyleSet += MakeTransparentAgain;
- }
-
- protected override void OnRealized ()
- {
- base.OnRealized ();
- MakeTransparent (this, EventArgs.Empty);
- Display display = Screen.Display;
- IntPtr xdisplay = gdk_x11_display_get_xdisplay (display.Handle);
- selection_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_S" + Screen.Number.ToString (), false);
- manager_atom = XInternAtom (xdisplay, "MANAGER", false);
- system_tray_opcode_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_OPCODE", false);
- orientation_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_ORIENTATION", false);
- message_data_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_MESSAGE_DATA", false);
- UpdateManagerWindow (false);
- SendDockRequest ();
- Screen.RootWindow.AddFilter (filter);
- }
-
- protected override void OnAdded (Gtk.Widget child)
- {
- child.Realized += MakeTransparent;
- base.OnAdded (child);
- }
-
- protected override void OnUnrealized ()
- {
- if (manager_window != IntPtr.Zero) {
- Gdk.Window gdkwin = Gdk.Window.ForeignNewForDisplay (Display, (uint)manager_window);
- if (gdkwin != null) {
- gdkwin.RemoveFilter (filter);
- }
- }
-
- Screen.RootWindow.RemoveFilter (filter);
- base.OnUnrealized ();
- }
-
- private void UpdateManagerWindow (bool dock_if_realized)
- {
- if(Handle == IntPtr.Zero || Display == null || Display.Handle == IntPtr.Zero) {
- return;
- }
-
- IntPtr xdisplay = gdk_x11_display_get_xdisplay (Display.Handle);
-
- if (manager_window != IntPtr.Zero) {
- return;
- }
-
- XGrabServer (xdisplay);
-
- manager_window = XGetSelectionOwner (xdisplay, selection_atom);
- if (manager_window != IntPtr.Zero) {
- XSelectInput (xdisplay, manager_window, (IntPtr) (EventMask.StructureNotifyMask | EventMask.PropertyChangeMask));
- }
-
- XUngrabServer (xdisplay);
- XFlush (xdisplay);
-
- if (manager_window != IntPtr.Zero) {
- Gdk.Window gdkwin = Gdk.Window.ForeignNewForDisplay (Display, (uint)manager_window);
- if (gdkwin != null) {
- gdkwin.AddFilter (filter);
- }
-
- if (dock_if_realized && IsRealized) {
- SendDockRequest ();
- }
-
- GetOrientationProperty ();
- }
- }
-
- private void SendDockRequest ()
- {
- SendManagerMessage (SystemTrayMessage.RequestDock, manager_window, Id, 0, 0);
- }
-
- private void SendManagerMessage (SystemTrayMessage message, IntPtr window, uint data1, uint data2, uint data3)
- {
- XClientMessageEvent ev = new XClientMessageEvent ();
- IntPtr display;
-
- ev.type = XEventName.ClientMessage;
- ev.window = window;
- ev.message_type = system_tray_opcode_atom;
- ev.format = 32;
- ev.data.ptr1 = (IntPtr)gdk_x11_get_server_time (GdkWindow.Handle);
- ev.data.ptr2 = (IntPtr)message;
- ev.data.ptr3 = (IntPtr)data1;
- ev.data.ptr4 = (IntPtr)data2;
- ev.data.ptr5 = (IntPtr)data3;
-
- display = gdk_x11_display_get_xdisplay (Display.Handle);
- gdk_error_trap_push ();
- XSendEvent (display, manager_window, false, (IntPtr) EventMask.NoEventMask, ref ev);
- XSync (display, false);
- gdk_error_trap_pop ();
- }
-
- private FilterReturn ManagerFilter (IntPtr xevent, Event evnt)
- {
- XAnyEvent xev = (XAnyEvent) Marshal.PtrToStructure (xevent, typeof(XAnyEvent));
-
- if (xev.type == XEventName.ClientMessage){
- XClientMessageEvent xclient = (XClientMessageEvent) Marshal.PtrToStructure (xevent, typeof(XClientMessageEvent));
-
- if (xclient.message_type == manager_atom && xclient.data.ptr2 == selection_atom) {
- UpdateManagerWindow (true);
- return FilterReturn.Continue;
- }
- }
-
- if (xev.window == manager_window) {
- if (xev.type == XEventName.PropertyNotify){
- XPropertyEvent xproperty = (XPropertyEvent) Marshal.PtrToStructure (xevent, typeof(XPropertyEvent));
- if (xproperty.atom == orientation_atom) {
- GetOrientationProperty();
- return FilterReturn.Continue;
- }
- }
-
- if (xev.type == XEventName.DestroyNotify) {
- ManagerWindowDestroyed();
- }
- }
-
- return FilterReturn.Continue;
- }
-
- private void ManagerWindowDestroyed ()
- {
- if (manager_window != IntPtr.Zero) {
- Gdk.Window gdkwin = Gdk.Window.ForeignNewForDisplay (Display, (uint) manager_window);
-
- if (gdkwin != null) {
- gdkwin.RemoveFilter (filter);
- }
-
- manager_window = IntPtr.Zero;
- UpdateManagerWindow (true);
- }
- }
-
- private void GetOrientationProperty ()
- {
- IntPtr display;
- IntPtr type;
- int format;
- IntPtr prop_return;
- IntPtr nitems, bytes_after;
- int error, result;
-
- if (manager_window == IntPtr.Zero) {
- return;
- }
-
- display = gdk_x11_display_get_xdisplay (Display.Handle);
-
- gdk_error_trap_push ();
- type = IntPtr.Zero;
-
- result = XGetWindowProperty (display, manager_window, orientation_atom, (IntPtr) 0,
- (IntPtr) System.Int32.MaxValue, false, (IntPtr) XAtom.Cardinal, out type, out format,
- out nitems, out bytes_after, out prop_return);
-
- error = gdk_error_trap_pop ();
-
- if (error != 0 || result != 0) {
- return;
- }
-
- if (type == (IntPtr) XAtom.Cardinal) {
- orientation = ((SystemTrayOrientation) Marshal.ReadInt32 (prop_return) == SystemTrayOrientation.Horz)
- ? Orientation.Horizontal
- : Orientation.Vertical;
- }
-
- if (prop_return != IntPtr.Zero) {
- XFree (prop_return);
- }
- }
-
- [DllImport ("libgdk-x11-2.0.so.0")]
- private static extern IntPtr gdk_x11_display_get_xdisplay (IntPtr display);
-
- [DllImport ("libgdk-x11-2.0.so.0")]
- private static extern int gdk_x11_get_server_time (IntPtr window);
-
- [DllImport ("libgdk-x11-2.0.so.0")]
- private static extern void gdk_error_trap_push ();
-
- [DllImport ("libgdk-x11-2.0.so.0")]
- private static extern int gdk_error_trap_pop ();
-
- [DllImport ("libX11.so.6")]
- private extern static IntPtr XInternAtom(IntPtr display, string atom_name, bool only_if_exists);
-
- [DllImport ("libX11.so.6")]
- private extern static void XGrabServer (IntPtr display);
-
- [DllImport ("libX11.so.6")]
- private extern static void XUngrabServer (IntPtr display);
-
- [DllImport ("libX11.so.6")]
- private extern static int XFlush (IntPtr display);
-
- [DllImport ("libX11.so.6")]
- private extern static int XSync (IntPtr display, bool discard);
-
- [DllImport ("libX11.so.6")]
- private extern static int XFree (IntPtr display);
-
- [DllImport ("libX11.so.6")]
- private extern static IntPtr XGetSelectionOwner (IntPtr display, IntPtr atom);
-
- [DllImport ("libX11.so.6")]
- private extern static IntPtr XSelectInput (IntPtr display, IntPtr window, IntPtr mask);
-
- [DllImport ("libX11.so.6")]
- private extern static int XSendEvent (IntPtr display, IntPtr window, bool propagate, IntPtr event_mask,
- ref XClientMessageEvent send_event);
-
- [DllImport ("libX11.so.6")]
- private extern static int XGetWindowProperty (IntPtr display, IntPtr w, IntPtr property, IntPtr long_offset,
- IntPtr long_length, bool deleteProp, IntPtr req_type,
- out IntPtr actual_type_return, out int actual_format_return,
- out IntPtr nitems_return, out IntPtr bytes_after_return,
- out IntPtr prop_return);
-
- [Flags]
- private enum EventMask {
- NoEventMask = 0,
- KeyPressMask = 1 << 0,
- KeyReleaseMask = 1 << 1,
- ButtonPressMask = 1 << 2,
- ButtonReleaseMask = 1 << 3,
- EnterWindowMask = 1 << 4,
- LeaveWindowMask = 1 << 5,
- PointerMotionMask = 1 << 6,
- PointerMotionHintMask = 1 << 7,
- Button1MotionMask = 1 << 8,
- Button2MotionMask = 1 << 9,
- Button3MotionMask = 1 << 10,
- Button4MotionMask = 1 << 11,
- Button5MotionMask = 1 << 12,
- ButtonMotionMask = 1 << 13,
- KeymapStateMask = 1 << 14,
- ExposureMask = 1 << 15,
- VisibilityChangeMask = 1 << 16,
- StructureNotifyMask = 1 << 17,
- ResizeRedirectMask = 1 << 18,
- SubstructureNotifyMask = 1 << 19,
- SubstructureRedirectMask = 1 << 20,
- FocusChangeMask = 1 << 21,
- PropertyChangeMask = 1 << 22,
- ColormapChangeMask = 1 << 23,
- OwnerGrabButtonMask = 1 << 24
- }
-
- private enum SystemTrayMessage {
- RequestDock = 0,
- BeginMessage = 1,
- CancelMessage = 2
- }
-
- private enum SystemTrayOrientation {
- Horz = 0,
- Vert = 1
- }
-
- private enum XEventName {
- KeyPress = 2,
- KeyRelease = 3,
- ButtonPress = 4,
- ButtonRelease = 5,
- MotionNotify = 6,
- EnterNotify = 7,
- LeaveNotify = 8,
- FocusIn = 9,
- FocusOut = 10,
- KeymapNotify = 11,
- Expose = 12,
- GraphicsExpose = 13,
- NoExpose = 14,
- VisibilityNotify = 15,
- CreateNotify = 16,
- DestroyNotify = 17,
- UnmapNotify = 18,
- MapNotify = 19,
- MapRequest = 20,
- ReparentNotify = 21,
- ConfigureNotify = 22,
- ConfigureRequest = 23,
- GravityNotify = 24,
- ResizeRequest = 25,
- CirculateNotify = 26,
- CirculateRequest = 27,
- PropertyNotify = 28,
- SelectionClear = 29,
- SelectionRequest = 30,
- SelectionNotify = 31,
- ColormapNotify = 32,
- ClientMessage = 33,
- MappingNotify = 34,
- TimerNotify = 100,
- LASTEvent
- }
-
- private enum XAtom {
- Cardinal = 6,
- LASTAtom
- }
-
- [StructLayout(LayoutKind.Sequential)]
- private struct XAnyEvent
- {
- internal XEventName type;
- internal IntPtr serial;
- internal bool send_event;
- internal IntPtr display;
- internal IntPtr window;
- }
-
- [StructLayout(LayoutKind.Sequential)]
- private struct XPropertyEvent
- {
- internal XEventName type;
- internal IntPtr serial;
- internal bool send_event;
- internal IntPtr display;
- internal IntPtr window;
- internal IntPtr atom;
- internal IntPtr time;
- internal int state;
- }
-
- [StructLayout(LayoutKind.Sequential)]
- private struct XClientMessageEvent
- {
- internal XEventName type;
- internal IntPtr serial;
- internal bool send_event;
- internal IntPtr display;
- internal IntPtr window;
- internal IntPtr message_type;
- internal int format;
-
- [StructLayout(LayoutKind.Sequential)]
- internal struct DataUnion
- {
- internal IntPtr ptr1;
- internal IntPtr ptr2;
- internal IntPtr ptr3;
- internal IntPtr ptr4;
- internal IntPtr ptr5;
- }
-
- internal DataUnion data;
- }
+ private uint stamp;
+ private Orientation orientation;
+
+ private IntPtr selection_atom;
+ private IntPtr manager_atom;
+ private IntPtr system_tray_opcode_atom;
+ private IntPtr orientation_atom;
+ private IntPtr message_data_atom;
+ private IntPtr manager_window;
+ private FilterFunc filter;
+
+ public X11NotificationArea (string name)
+ {
+ Title = name;
+ Init ();
+ }
+
+ public X11NotificationArea (string name, Gdk.Screen screen)
+ {
+ Title = name;
+ Screen = screen;
+ Init ();
+ }
+
+ [DllImport ("libc")]
+ private static extern IntPtr memcpy (ref XClientMessageEvent.DataUnion dest, IntPtr src, IntPtr len);
+
+ public uint SendMessage (uint timeout, string message)
+ {
+ if (manager_window == IntPtr.Zero) {
+ return 0;
+ }
+
+ byte[] arr = System.Text.Encoding.UTF8.GetBytes (message);
+ IntPtr unmanaged_arr = Marshal.AllocHGlobal (arr.Length);
+ Marshal.Copy (arr, 0, unmanaged_arr, arr.Length);
+
+ SendManagerMessage (SystemTrayMessage.BeginMessage, (IntPtr) Id, timeout, (uint) arr.Length, ++stamp);
+
+ gdk_error_trap_push ();
+
+ for (int index = 0; index < message.Length; index += 20) {
+ XClientMessageEvent ev = new XClientMessageEvent ();
+
+ IntPtr display = gdk_x11_display_get_xdisplay (Display.Handle);
+
+ ev.type = XEventName.ClientMessage;
+ ev.window = (IntPtr) Id;
+ ev.format = 8;
+ ev.message_type = message_data_atom;
+
+ int len = Math.Min (arr.Length - index, 20);
+ memcpy (ref ev.data, (IntPtr)((int)unmanaged_arr + index), (IntPtr)len);
+
+ XSendEvent (display, manager_window, false, (IntPtr) EventMask.StructureNotifyMask, ref ev);
+ XSync (display, false);
+ }
+
+ gdk_error_trap_pop ();
+
+ return stamp;
+ }
+
+ public void CancelMessage (uint id)
+ {
+ if (id == 0) {
+ return;
+ }
+
+ SendManagerMessage (SystemTrayMessage.CancelMessage, (IntPtr) Id, id, 0, 0);
+ }
+
+ private void Init ()
+ {
+ stamp = 1;
+ orientation = Orientation.Horizontal;
+ AddEvents ((int)EventMask.PropertyChangeMask);
+ filter = new FilterFunc (ManagerFilter);
+ }
+
+ [GLib.ConnectBefore]
+ private void TransparentExposeEvent (object obj, Gtk.ExposeEventArgs args)
+ {
+ Gtk.Widget widget = (Gtk.Widget)obj;
+ Gdk.Rectangle area = args.Event.Area;
+
+ widget.GdkWindow.ClearArea (area.X, area.Y, area.Width, area.Height);
+ }
+
+ private void MakeTransparentAgain (object obj, Gtk.StyleSetArgs args)
+ {
+ Gtk.Widget widget = (Gtk.Widget)obj;
+
+ widget.GdkWindow.SetBackPixmap (null, true);
+ }
+
+ private void MakeTransparent (object obj, EventArgs args)
+ {
+ Gtk.Widget widget = (Gtk.Widget)obj;
+ if (widget.IsNoWindow || widget.IsAppPaintable)
+ return;
+
+ widget.AppPaintable = true;
+ widget.DoubleBuffered = false;
+ widget.GdkWindow.SetBackPixmap (null, true);
+ widget.ExposeEvent += TransparentExposeEvent;
+ widget.StyleSet += MakeTransparentAgain;
+ }
+
+ protected override void OnRealized ()
+ {
+ base.OnRealized ();
+ MakeTransparent (this, EventArgs.Empty);
+ Display display = Screen.Display;
+ IntPtr xdisplay = gdk_x11_display_get_xdisplay (display.Handle);
+ selection_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_S" + Screen.Number.ToString (), false);
+ manager_atom = XInternAtom (xdisplay, "MANAGER", false);
+ system_tray_opcode_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_OPCODE", false);
+ orientation_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_ORIENTATION", false);
+ message_data_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_MESSAGE_DATA", false);
+ UpdateManagerWindow (false);
+ SendDockRequest ();
+ Screen.RootWindow.AddFilter (filter);
+ }
+
+ protected override void OnAdded (Gtk.Widget child)
+ {
+ child.Realized += MakeTransparent;
+ base.OnAdded (child);
+ }
+
+ protected override void OnUnrealized ()
+ {
+ if (manager_window != IntPtr.Zero) {
+ Gdk.Window gdkwin = Gdk.Window.ForeignNewForDisplay (Display, (uint)manager_window);
+ if (gdkwin != null) {
+ gdkwin.RemoveFilter (filter);
+ }
+ }
+
+ Screen.RootWindow.RemoveFilter (filter);
+ base.OnUnrealized ();
+ }
+
+ private void UpdateManagerWindow (bool dock_if_realized)
+ {
+ if(Handle == IntPtr.Zero || Display == null || Display.Handle == IntPtr.Zero) {
+ return;
+ }
+
+ IntPtr xdisplay = gdk_x11_display_get_xdisplay (Display.Handle);
+
+ if (manager_window != IntPtr.Zero) {
+ return;
+ }
+
+ XGrabServer (xdisplay);
+
+ manager_window = XGetSelectionOwner (xdisplay, selection_atom);
+ if (manager_window != IntPtr.Zero) {
+ XSelectInput (xdisplay, manager_window, (IntPtr) (EventMask.StructureNotifyMask | EventMask.PropertyChangeMask));
+ }
+
+ XUngrabServer (xdisplay);
+ XFlush (xdisplay);
+
+ if (manager_window != IntPtr.Zero) {
+ Gdk.Window gdkwin = Gdk.Window.ForeignNewForDisplay (Display, (uint)manager_window);
+ if (gdkwin != null) {
+ gdkwin.AddFilter (filter);
+ }
+
+ if (dock_if_realized && IsRealized) {
+ SendDockRequest ();
+ }
+
+ GetOrientationProperty ();
+ }
+ }
+
+ private void SendDockRequest ()
+ {
+ SendManagerMessage (SystemTrayMessage.RequestDock, manager_window, Id, 0, 0);
+ }
+
+ private void SendManagerMessage (SystemTrayMessage message, IntPtr window, uint data1, uint data2, uint data3)
+ {
+ XClientMessageEvent ev = new XClientMessageEvent ();
+ IntPtr display;
+
+ ev.type = XEventName.ClientMessage;
+ ev.window = window;
+ ev.message_type = system_tray_opcode_atom;
+ ev.format = 32;
+ ev.data.ptr1 = (IntPtr)gdk_x11_get_server_time (GdkWindow.Handle);
+ ev.data.ptr2 = (IntPtr)message;
+ ev.data.ptr3 = (IntPtr)data1;
+ ev.data.ptr4 = (IntPtr)data2;
+ ev.data.ptr5 = (IntPtr)data3;
+
+ display = gdk_x11_display_get_xdisplay (Display.Handle);
+ gdk_error_trap_push ();
+ XSendEvent (display, manager_window, false, (IntPtr) EventMask.NoEventMask, ref ev);
+ XSync (display, false);
+ gdk_error_trap_pop ();
+ }
+
+ private FilterReturn ManagerFilter (IntPtr xevent, Event evnt)
+ {
+ XAnyEvent xev = (XAnyEvent) Marshal.PtrToStructure (xevent, typeof(XAnyEvent));
+
+ if (xev.type == XEventName.ClientMessage){
+ XClientMessageEvent xclient = (XClientMessageEvent) Marshal.PtrToStructure (xevent, typeof(XClientMessageEvent));
+
+ if (xclient.message_type == manager_atom && xclient.data.ptr2 == selection_atom) {
+ UpdateManagerWindow (true);
+ return FilterReturn.Continue;
+ }
+ }
+
+ if (xev.window == manager_window) {
+ if (xev.type == XEventName.PropertyNotify){
+ XPropertyEvent xproperty = (XPropertyEvent) Marshal.PtrToStructure (xevent, typeof(XPropertyEvent));
+ if (xproperty.atom == orientation_atom) {
+ GetOrientationProperty();
+ return FilterReturn.Continue;
+ }
+ }
+
+ if (xev.type == XEventName.DestroyNotify) {
+ ManagerWindowDestroyed();
+ }
+ }
+
+ return FilterReturn.Continue;
+ }
+
+ private void ManagerWindowDestroyed ()
+ {
+ if (manager_window != IntPtr.Zero) {
+ Gdk.Window gdkwin = Gdk.Window.ForeignNewForDisplay (Display, (uint) manager_window);
+
+ if (gdkwin != null) {
+ gdkwin.RemoveFilter (filter);
+ }
+
+ manager_window = IntPtr.Zero;
+ UpdateManagerWindow (true);
+ }
+ }
+
+ private void GetOrientationProperty ()
+ {
+ IntPtr display;
+ IntPtr type;
+ int format;
+ IntPtr prop_return;
+ IntPtr nitems, bytes_after;
+ int error, result;
+
+ if (manager_window == IntPtr.Zero) {
+ return;
+ }
+
+ display = gdk_x11_display_get_xdisplay (Display.Handle);
+
+ gdk_error_trap_push ();
+ type = IntPtr.Zero;
+
+ result = XGetWindowProperty (display, manager_window, orientation_atom, (IntPtr) 0,
+ (IntPtr) System.Int32.MaxValue, false, (IntPtr) XAtom.Cardinal, out type, out format,
+ out nitems, out bytes_after, out prop_return);
+
+ error = gdk_error_trap_pop ();
+
+ if (error != 0 || result != 0) {
+ return;
+ }
+
+ if (type == (IntPtr) XAtom.Cardinal) {
+ orientation = ((SystemTrayOrientation) Marshal.ReadInt32 (prop_return) == SystemTrayOrientation.Horz)
+ ? Orientation.Horizontal
+ : Orientation.Vertical;
+ }
+
+ if (prop_return != IntPtr.Zero) {
+ XFree (prop_return);
+ }
+ }
+
+ [DllImport ("libgdk-x11-2.0.so.0")]
+ private static extern IntPtr gdk_x11_display_get_xdisplay (IntPtr display);
+
+ [DllImport ("libgdk-x11-2.0.so.0")]
+ private static extern int gdk_x11_get_server_time (IntPtr window);
+
+ [DllImport ("libgdk-x11-2.0.so.0")]
+ private static extern void gdk_error_trap_push ();
+
+ [DllImport ("libgdk-x11-2.0.so.0")]
+ private static extern int gdk_error_trap_pop ();
+
+ [DllImport ("libX11.so.6")]
+ private extern static IntPtr XInternAtom(IntPtr display, string atom_name, bool only_if_exists);
+
+ [DllImport ("libX11.so.6")]
+ private extern static void XGrabServer (IntPtr display);
+
+ [DllImport ("libX11.so.6")]
+ private extern static void XUngrabServer (IntPtr display);
+
+ [DllImport ("libX11.so.6")]
+ private extern static int XFlush (IntPtr display);
+
+ [DllImport ("libX11.so.6")]
+ private extern static int XSync (IntPtr display, bool discard);
+
+ [DllImport ("libX11.so.6")]
+ private extern static int XFree (IntPtr display);
+
+ [DllImport ("libX11.so.6")]
+ private extern static IntPtr XGetSelectionOwner (IntPtr display, IntPtr atom);
+
+ [DllImport ("libX11.so.6")]
+ private extern static IntPtr XSelectInput (IntPtr display, IntPtr window, IntPtr mask);
+
+ [DllImport ("libX11.so.6")]
+ private extern static int XSendEvent (IntPtr display, IntPtr window, bool propagate, IntPtr event_mask,
+ ref XClientMessageEvent send_event);
+
+ [DllImport ("libX11.so.6")]
+ private extern static int XGetWindowProperty (IntPtr display, IntPtr w, IntPtr property, IntPtr long_offset,
+ IntPtr long_length, bool deleteProp, IntPtr req_type,
+ out IntPtr actual_type_return, out int actual_format_return,
+ out IntPtr nitems_return, out IntPtr bytes_after_return,
+ out IntPtr prop_return);
+
+ [Flags]
+ private enum EventMask {
+ NoEventMask = 0,
+ KeyPressMask = 1 << 0,
+ KeyReleaseMask = 1 << 1,
+ ButtonPressMask = 1 << 2,
+ ButtonReleaseMask = 1 << 3,
+ EnterWindowMask = 1 << 4,
+ LeaveWindowMask = 1 << 5,
+ PointerMotionMask = 1 << 6,
+ PointerMotionHintMask = 1 << 7,
+ Button1MotionMask = 1 << 8,
+ Button2MotionMask = 1 << 9,
+ Button3MotionMask = 1 << 10,
+ Button4MotionMask = 1 << 11,
+ Button5MotionMask = 1 << 12,
+ ButtonMotionMask = 1 << 13,
+ KeymapStateMask = 1 << 14,
+ ExposureMask = 1 << 15,
+ VisibilityChangeMask = 1 << 16,
+ StructureNotifyMask = 1 << 17,
+ ResizeRedirectMask = 1 << 18,
+ SubstructureNotifyMask = 1 << 19,
+ SubstructureRedirectMask = 1 << 20,
+ FocusChangeMask = 1 << 21,
+ PropertyChangeMask = 1 << 22,
+ ColormapChangeMask = 1 << 23,
+ OwnerGrabButtonMask = 1 << 24
+ }
+
+ private enum SystemTrayMessage {
+ RequestDock = 0,
+ BeginMessage = 1,
+ CancelMessage = 2
+ }
+
+ private enum SystemTrayOrientation {
+ Horz = 0,
+ Vert = 1
+ }
+
+ private enum XEventName {
+ KeyPress = 2,
+ KeyRelease = 3,
+ ButtonPress = 4,
+ ButtonRelease = 5,
+ MotionNotify = 6,
+ EnterNotify = 7,
+ LeaveNotify = 8,
+ FocusIn = 9,
+ FocusOut = 10,
+ KeymapNotify = 11,
+ Expose = 12,
+ GraphicsExpose = 13,
+ NoExpose = 14,
+ VisibilityNotify = 15,
+ CreateNotify = 16,
+ DestroyNotify = 17,
+ UnmapNotify = 18,
+ MapNotify = 19,
+ MapRequest = 20,
+ ReparentNotify = 21,
+ ConfigureNotify = 22,
+ ConfigureRequest = 23,
+ GravityNotify = 24,
+ ResizeRequest = 25,
+ CirculateNotify = 26,
+ CirculateRequest = 27,
+ PropertyNotify = 28,
+ SelectionClear = 29,
+ SelectionRequest = 30,
+ SelectionNotify = 31,
+ ColormapNotify = 32,
+ ClientMessage = 33,
+ MappingNotify = 34,
+ TimerNotify = 100,
+ LASTEvent
+ }
+
+ private enum XAtom {
+ Cardinal = 6,
+ LASTAtom
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ private struct XAnyEvent
+ {
+ internal XEventName type;
+ internal IntPtr serial;
+ internal bool send_event;
+ internal IntPtr display;
+ internal IntPtr window;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ private struct XPropertyEvent
+ {
+ internal XEventName type;
+ internal IntPtr serial;
+ internal bool send_event;
+ internal IntPtr display;
+ internal IntPtr window;
+ internal IntPtr atom;
+ internal IntPtr time;
+ internal int state;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ private struct XClientMessageEvent
+ {
+ internal XEventName type;
+ internal IntPtr serial;
+ internal bool send_event;
+ internal IntPtr display;
+ internal IntPtr window;
+ internal IntPtr message_type;
+ internal int format;
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct DataUnion
+ {
+ internal IntPtr ptr1;
+ internal IntPtr ptr2;
+ internal IntPtr ptr3;
+ internal IntPtr ptr4;
+ internal IntPtr ptr5;
+ }
+
+ internal DataUnion data;
+ }
}
#pragma warning restore 0169, 0414
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]