Browse Source

Implemented WindowState for GTK3

pull/884/head
Nikita Tsukanov 9 years ago
parent
commit
f2f30fe006
  1. 21
      src/Gtk/Avalonia.Gtk3/Interop/Native.cs
  2. 41
      src/Gtk/Avalonia.Gtk3/WindowImpl.cs

21
src/Gtk/Avalonia.Gtk3/Interop/Native.cs

@ -156,6 +156,22 @@ namespace Avalonia.Gtk3.Interop
[UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
public delegate IntPtr gdk_window_get_pointer(IntPtr raw, out int x, out int y, out int mask); public delegate IntPtr gdk_window_get_pointer(IntPtr raw, out int x, out int y, out int mask);
[UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
public delegate GdkWindowState gdk_window_get_state(IntPtr window);
[UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
public delegate void gdk_window_iconify(IntPtr window);
[UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
public delegate void gdk_window_deiconify(IntPtr window);
[UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
public delegate void gdk_window_maximize(IntPtr window);
[UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
public delegate void gdk_window_unmaximize(IntPtr window);
[UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
public delegate void gtk_window_set_geometry_hints(GtkWindow window, IntPtr geometry_widget, ref GdkGeometry geometry, GdkWindowHints geom_mask); public delegate void gtk_window_set_geometry_hints(GtkWindow window, IntPtr geometry_widget, ref GdkGeometry geometry, GdkWindowHints geom_mask);
@ -303,6 +319,11 @@ namespace Avalonia.Gtk3.Interop
public static D.gdk_cursor_new GdkCursorNew; public static D.gdk_cursor_new GdkCursorNew;
public static D.gdk_window_get_origin GdkWindowGetOrigin; public static D.gdk_window_get_origin GdkWindowGetOrigin;
public static D.gdk_window_get_pointer GdkWindowGetPointer; public static D.gdk_window_get_pointer GdkWindowGetPointer;
public static D.gdk_window_get_state GdkWindowGetState;
public static D.gdk_window_iconify GdkWindowIconify;
public static D.gdk_window_deiconify GdkWindowDeiconify;
public static D.gdk_window_maximize GdkWindowMaximize;
public static D.gdk_window_unmaximize GdkWindowUnmaximize;
public static D.gdk_window_begin_move_drag GdkWindowBeginMoveDrag; public static D.gdk_window_begin_move_drag GdkWindowBeginMoveDrag;
public static D.gdk_window_begin_resize_drag GdkWindowBeginResizeDrag; public static D.gdk_window_begin_resize_drag GdkWindowBeginResizeDrag;
public static D.gdk_event_request_motions GdkEventRequestMotions; public static D.gdk_event_request_motions GdkEventRequestMotions;

41
src/Gtk/Avalonia.Gtk3/WindowImpl.cs

@ -7,21 +7,42 @@ namespace Avalonia.Gtk3
{ {
class WindowImpl : TopLevelImpl, IWindowImpl class WindowImpl : TopLevelImpl, IWindowImpl
{ {
public WindowState WindowState { get; set; } //STUB public WindowImpl() : base(Native.GtkWindowNew(GtkWindowType.TopLevel))
{
}
public void SetTitle(string title) public void SetTitle(string title)
{ {
using (var t = new Utf8Buffer(title)) using (var t = new Utf8Buffer(title))
Native.GtkWindowSetTitle(GtkWidget, t); Native.GtkWindowSetTitle(GtkWidget, t);
} }
class EmptyDisposable : IDisposable public WindowState WindowState
{ {
public void Dispose() get
{
var state = Native.GdkWindowGetState(Native.GtkWidgetGetWindow(GtkWidget));
if (state.HasFlag(GdkWindowState.Iconified))
return WindowState.Minimized;
if (state.HasFlag(GdkWindowState.Maximized))
return WindowState.Maximized;
return WindowState.Normal;
}
set
{ {
var w = Native.GtkWidgetGetWindow(GtkWidget);
if (value == WindowState.Minimized)
Native.GdkWindowIconify(w);
else if (value == WindowState.Maximized)
Native.GdkWindowMaximize(w);
else
{
Native.GdkWindowUnmaximize(w);
Native.GdkWindowDeiconify(w);
}
} }
} }
public IDisposable ShowDialog() public IDisposable ShowDialog()
{ {
Native.GtkWindowSetModal(GtkWidget, true); Native.GtkWindowSetModal(GtkWidget, true);
@ -33,13 +54,17 @@ namespace Avalonia.Gtk3
public void SetIcon(IWindowIconImpl icon) => Native.GtkWindowSetIcon(GtkWidget, (Pixbuf) icon); public void SetIcon(IWindowIconImpl icon) => Native.GtkWindowSetIcon(GtkWidget, (Pixbuf) icon);
public WindowImpl() : base(Native.GtkWindowNew(GtkWindowType.TopLevel)) public void SetCoverTaskbarWhenMaximized(bool enable)
{ {
//Why do we even have that?
} }
public void SetCoverTaskbarWhenMaximized(bool enable) class EmptyDisposable : IDisposable
{ {
//Why do we even have that? public void Dispose()
{
}
} }
} }
} }

Loading…
Cancel
Save