Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Components/Windows/GtkWin32Interop.cs')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components/Windows/GtkWin32Interop.cs118
1 files changed, 118 insertions, 0 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/Windows/GtkWin32Interop.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/Windows/GtkWin32Interop.cs
new file mode 100644
index 0000000000..49fcec4936
--- /dev/null
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components/Windows/GtkWin32Interop.cs
@@ -0,0 +1,118 @@
+//
+// GtkWin32Interop.cs
+//
+// Author:
+// Marius Ungureanu <marius.ungureanu@xamarin.com>
+//
+// Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+#if WIN32
+using System;
+using System.Runtime.InteropServices;
+using System.Windows.Input;
+
+namespace MonoDevelop.Components.Windows
+{
+ public static class GtkWin32Interop
+ {
+ internal const string LIBGDK = "libgdk-win32-2.0-0.dll";
+ internal const string USER32 = "user32.dll";
+
+ public enum ExtendedWindowStyles
+ {
+ // Hides it from alt-tab.
+ WS_EX_TOOLWINDOW = 0x80,
+ }
+
+ public enum GWLParameter
+ {
+ // Sets a new extended style.
+ GWL_EXSTYLE = -20,
+
+ // Sets a new application handle instance.
+ GWL_HINSTANCE = -6,
+
+ // Sets a new window handle as the parent.
+ GWL_HWNDPARENT = -8,
+
+ // Sets a new identifier of the window.
+ GWL_ID = -12,
+
+ // Sets a new window style.
+ GWL_STYLE = -16,
+
+ // Sets a new user data associated with the window. Initially zero.
+ GWL_USERDATA = -21,
+
+ // Sets a new address of the window procedure.
+ GWL_WNDPROC = -4,
+ }
+
+ [DllImport (LIBGDK, CallingConvention = CallingConvention.Cdecl)]
+ static extern IntPtr gdk_win32_window_get_impl_hwnd (IntPtr window);
+
+ public static IntPtr HWndGet (Gdk.Window window)
+ {
+ return gdk_win32_window_get_impl_hwnd (window.Handle);
+ }
+
+ [DllImport (USER32, EntryPoint="SetWindowLongPtr")]
+ static extern IntPtr SetWindowLongPtr64 (IntPtr hWnd, int nIndex, IntPtr dwNewLong);
+
+ [DllImport(USER32, EntryPoint="SetWindowLong")]
+ static extern IntPtr SetWindowLongPtr32 (IntPtr hWnd, int nIndex, IntPtr dwNewLong);
+
+ public static IntPtr SetWindowLongPtr (IntPtr hWnd, int nIndex, IntPtr dwNewLong)
+ {
+ if (IntPtr.Size == 4)
+ return SetWindowLongPtr32 (hWnd, nIndex, dwNewLong);
+ return SetWindowLongPtr64 (hWnd, nIndex, dwNewLong);
+ }
+
+ [DllImport (USER32, EntryPoint="GetWindowLongPtr")]
+ static extern IntPtr GetWindowLongPtr64 (IntPtr hWnd, int nIndex);
+
+ [DllImport(USER32, EntryPoint="GetWindowLong")]
+ static extern IntPtr GetWindowLongPtr32 (IntPtr hWnd, int nIndex);
+
+ public static IntPtr GetWindowLongPtr (IntPtr hWnd, int nIndex)
+ {
+ if (IntPtr.Size == 4)
+ return GetWindowLongPtr32 (hWnd, nIndex);
+ return GetWindowLongPtr64 (hWnd, nIndex);
+ }
+
+ internal static Gdk.EventKey ConvertKeyEvent (ModifierKeys mod, Key key)
+ {
+ var state = Gdk.ModifierType.None;
+ if ((mod & ModifierKeys.Control) != 0)
+ state |= Gdk.ModifierType.ControlMask;
+ if ((mod & ModifierKeys.Shift) != 0)
+ state |= Gdk.ModifierType.ShiftMask;
+ if ((mod & ModifierKeys.Windows) != 0)
+ state |= Gdk.ModifierType.MetaMask;
+ if ((mod & ModifierKeys.Alt) != 0)
+ state |= Gdk.ModifierType.Mod1Mask;
+
+ return GtkUtil.CreateKeyEventFromKeyCode ((ushort)KeyInterop.VirtualKeyFromKey (key), state, Gdk.EventType.KeyPress, Ide.IdeApp.Workbench.RootWindow.GdkWindow);
+ }
+ }
+}
+#endif