public WindowBaseImpl(GtkWindow gtkWidget) { GtkWidget = gtkWidget; Disposables.Add(gtkWidget); _framebuffer = new FramebufferManager(this); _imContext = Native.GtkImMulticontextNew(); Disposables.Add(_imContext); Native.GtkWidgetSetEvents(gtkWidget, 0xFFFFFE); Disposables.Add(Signal.Connect <Native.D.signal_commit>(_imContext, "commit", OnCommit)); Connect <Native.D.signal_widget_draw>("draw", OnDraw); Connect <Native.D.signal_generic>("realize", OnRealized); ConnectEvent("configure-event", OnConfigured); ConnectEvent("button-press-event", OnButton); ConnectEvent("button-release-event", OnButton); ConnectEvent("motion-notify-event", OnMotion); ConnectEvent("scroll-event", OnScroll); ConnectEvent("window-state-event", OnStateChanged); ConnectEvent("key-press-event", OnKeyEvent); ConnectEvent("key-release-event", OnKeyEvent); ConnectEvent("leave-notify-event", OnLeaveNotifyEvent); Connect <Native.D.signal_generic>("destroy", OnDestroy); Native.GtkWidgetRealize(gtkWidget); _lastSize = ClientSize; GlibTimeout.Add(0, 16, () => { Invalidate(default(Rect)); return(true); }); if (Gtk3Platform.UseDeferredRendering) { Native.GtkWidgetSetDoubleBuffered(gtkWidget, false); _gcHandle = GCHandle.Alloc(this); Native.GtkWidgetAddTickCallback(GtkWidget, PinnedStaticCallback, GCHandle.ToIntPtr(_gcHandle), IntPtr.Zero); } }
public async Task <string> ShowFolderDialogAsync(OpenFolderDialog dialog, GtkWindow parent, Action <GtkFileChooser> modify = null) { var res = await ShowDialog(dialog.Title, parent, GtkFileChooserAction.SelectFolder, false, dialog.InitialDirectory, modify); return(res?.FirstOrDefault()); }
public Task <string[]> ShowFileDialogAsync(FileDialog dialog, GtkWindow parent, Action <GtkFileChooser> modify = null) { return(ShowDialog(dialog.Title, parent, dialog is OpenFileDialog ? GtkFileChooserAction.Open : GtkFileChooserAction.Save, (dialog as OpenFileDialog)?.AllowMultiple ?? false, Path.Combine(string.IsNullOrEmpty(dialog.InitialDirectory) ? "" : dialog.InitialDirectory, string.IsNullOrEmpty(dialog.InitialFileName) ? "" : dialog.InitialFileName), modify)); }
public WindowBaseImpl(GtkWindow gtkWidget) { GtkWidget = gtkWidget; _framebuffer = new FramebufferManager(this); _imContext = Native.GtkImMulticontextNew(); Disposables.Add(_imContext); Native.GtkWidgetSetEvents(gtkWidget, 0xFFFFFE); Disposables.Add(Signal.Connect <Native.D.signal_commit>(_imContext, "commit", OnCommit)); Disposables.Add(EventManager.ConnectEvents(this)); Native.GtkWidgetRealize(gtkWidget); GdkWindowHandle = this.Handle.Handle; _lastSize = ClientSize; }
public WindowBaseImpl(GtkWindow gtkWidget) { GtkWidget = gtkWidget; var glf = AvaloniaLocator.Current.GetService <IWindowingPlatformGlFeature>() as EglGlPlatformFeature; if (glf != null) { _egl = new EglGlPlatformSurface((EglDisplay)glf.Display, glf.DeferredContext, this); } else { _framebuffer = new FramebufferManager(this); } _imContext = Native.GtkImMulticontextNew(); Disposables.Add(_imContext); Native.GtkWidgetSetEvents(gtkWidget, 0xFFFFFE); Disposables.Add(Signal.Connect <Native.D.signal_commit>(_imContext, "commit", OnCommit)); Connect <Native.D.signal_widget_draw>("draw", OnDraw); Connect <Native.D.signal_generic>("realize", OnRealized); ConnectEvent("configure-event", OnConfigured); ConnectEvent("button-press-event", OnButton); ConnectEvent("button-release-event", OnButton); ConnectEvent("motion-notify-event", OnMotion); ConnectEvent("scroll-event", OnScroll); ConnectEvent("window-state-event", OnStateChanged); ConnectEvent("key-press-event", OnKeyEvent); ConnectEvent("key-release-event", OnKeyEvent); ConnectEvent("leave-notify-event", OnLeaveNotifyEvent); ConnectEvent("delete-event", OnClosingEvent); Connect <Native.D.signal_generic>("destroy", OnDestroy); Native.GtkWidgetRealize(gtkWidget); GdkWindowHandle = this.Handle.Handle; _lastSize = ClientSize; if (_egl != null) { Native.GtkWidgetSetDoubleBuffered(gtkWidget, false); } else if (Gtk3Platform.UseDeferredRendering) { Native.GtkWidgetSetDoubleBuffered(gtkWidget, false); _gcHandle = GCHandle.Alloc(this); _tickCallback = Native.GtkWidgetAddTickCallback(GtkWidget, PinnedStaticCallback, GCHandle.ToIntPtr(_gcHandle), IntPtr.Zero); } }
public TopLevelImpl(GtkWindow gtkWidget) { GtkWidget = gtkWidget; Disposables.Add(gtkWidget); _framebuffer = new FramebufferManager(this); _imContext = Native.GtkImMulticontextNew(); Disposables.Add(_imContext); Native.GtkWidgetSetEvents(gtkWidget, 0xFFFFFE); Disposables.Add(Signal.Connect <Native.D.signal_commit>(_imContext, "commit", OnCommit)); Connect <Native.D.signal_widget_draw>("draw", OnDraw); Connect <Native.D.signal_generic>("realize", OnRealized); ConnectEvent("configure-event", OnConfigured); ConnectEvent("button-press-event", OnButton); ConnectEvent("button-release-event", OnButton); ConnectEvent("motion-notify-event", OnMotion); ConnectEvent("scroll-event", OnScroll); ConnectEvent("window-state-event", OnStateChanged); ConnectEvent("key-press-event", OnKeyEvent); ConnectEvent("key-release-event", OnKeyEvent); Connect <Native.D.signal_generic>("destroy", OnDestroy); Native.GtkWidgetRealize(gtkWidget); _lastSize = ClientSize; }
public unsafe static Task <string[]> ShowDialog(string title, GtkWindow parent, GtkFileChooserAction action, bool multiselect, string initialFileName, Action <GtkFileChooser> modify) { GtkFileChooser dlg; parent = parent ?? GtkWindow.Null; using (var name = new Utf8Buffer(title)) dlg = Native.GtkFileChooserDialogNew(name, parent, action, IntPtr.Zero); modify?.Invoke(dlg); if (multiselect) { Native.GtkFileChooserSetSelectMultiple(dlg, true); } Native.GtkWindowSetModal(dlg, true); var tcs = new TaskCompletionSource <string[]>(); List <IDisposable> disposables = null; Action dispose = () => { // ReSharper disable once PossibleNullReferenceException foreach (var d in disposables) { d.Dispose(); } disposables.Clear(); }; disposables = new List <IDisposable> { Signal.Connect <Native.D.signal_generic>(dlg, "close", delegate { tcs.TrySetResult(null); dispose(); return(false); }), Signal.Connect <Native.D.signal_dialog_response>(dlg, "response", (_, resp, __) => { string[] result = null; if (resp == GtkResponseType.Accept) { var rlst = new List <string>(); var gs = Native.GtkFileChooserGetFilenames(dlg); var cgs = gs; while (cgs != null) { if (cgs->Data != IntPtr.Zero) { rlst.Add(Utf8Buffer.StringFromPtr(cgs->Data)); } cgs = cgs->Next; } Native.GSlistFree(gs); result = rlst.ToArray(); } Native.GtkWidgetHide(dlg); dispose(); tcs.TrySetResult(result); return(false); }), dlg }; using (var open = new Utf8Buffer("Open")) Native.GtkDialogAddButton(dlg, open, GtkResponseType.Accept); using (var open = new Utf8Buffer("Cancel")) Native.GtkDialogAddButton(dlg, open, GtkResponseType.Cancel); if (initialFileName != null) { using (var fn = new Utf8Buffer(initialFileName)) Native.GtkFileChooserSetFilename(dlg, fn); } Native.GtkWindowPresent(dlg); return(tcs.Task); }
public void SetModal(bool isModal) { GtkWindow.gtk_window_set_modal(Handle, isModal); }
public void SetDefaultSize(int width, int height) { GtkWindow.gtk_window_set_default_size(_instance, 200, 200); }
/// <summary> /// Creates a new Window, which is a toplevel window that can contain other widgets. /// Nearly always, the type of the window should be WindowType.TopLevel. If you’re /// implementing something like a popup menu from scratch (which is a bad idea, just use /// GtkMenu), you might use WindowType.Popup. WindowType.Popup is not for dialogs, though in /// some other toolkits dialogs are called “popups”. In GTK+, WindowType.Popup means a /// pop-up menu or pop-up tooltip. On X11, popup windows are not controlled by the window /// manager. /// If you simply want an undecorated window (no window borders), use /// Window.SetDecorated(), don’t use WindowType.Popup. /// All top-level windows created by new Window(WindowType type) are stored in an /// internal top-level window list. This list can be obtained from Window.ListToplevels(). /// Due to Gtk+ keeping a reference to the window internally, Window() does not return a /// reference to the caller. /// To delete a Window, call Widget.Destroy(). /// </summary> /// <param name="type">The type of window to create.</param> public Window(WindowType type) { _instance = GtkWindow.gtk_window_new(type); }