From d3973b8fadea1247d758dea89fc7ac111a24bcbc Mon Sep 17 00:00:00 2001 From: Daniel Fox Date: Tue, 31 Dec 2024 14:18:04 -0800 Subject: [PATCH 1/3] Set the paste button in the GTK dialog as default --- src/apprt/gtk/ClipboardConfirmationWindow.zig | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/apprt/gtk/ClipboardConfirmationWindow.zig b/src/apprt/gtk/ClipboardConfirmationWindow.zig index a04271497..cfa29f378 100644 --- a/src/apprt/gtk/ClipboardConfirmationWindow.zig +++ b/src/apprt/gtk/ClipboardConfirmationWindow.zig @@ -89,6 +89,8 @@ fn init( const view = try PrimaryView.init(self, data); self.view = view; c.gtk_window_set_child(@ptrCast(window), view.root); + _ = c.gtk_widget_grab_focus(view.buttons.confirm_button); + c.gtk_widget_show(window); // Block the main window from input. @@ -104,6 +106,7 @@ fn gtkDestroy(_: *c.GtkWidget, ud: ?*anyopaque) callconv(.C) void { const PrimaryView = struct { root: *c.GtkWidget, text: *c.GtkTextView, + buttons: ButtonsView, pub fn init(root: *ClipboardConfirmation, data: []const u8) !PrimaryView { // All our widgets @@ -135,7 +138,7 @@ const PrimaryView = struct { c.gtk_text_view_set_right_margin(@ptrCast(text), 8); c.gtk_text_view_set_monospace(@ptrCast(text), 1); - return .{ .root = view.root, .text = @ptrCast(text) }; + return .{ .root = view.root, .text = @ptrCast(text), .buttons = buttons }; } /// Returns the GtkTextBuffer for the data that was unsafe. @@ -158,6 +161,7 @@ const PrimaryView = struct { const ButtonsView = struct { root: *c.GtkWidget, + confirm_button: *c.GtkWidget, pub fn init(root: *ClipboardConfirmation) !ButtonsView { const cancel_text, const confirm_text = switch (root.pending_req) { @@ -172,7 +176,7 @@ const ButtonsView = struct { errdefer c.g_object_unref(confirm_button); // TODO: Focus on the paste button - // c.gtk_widget_grab_focus(confirm_button); + _ = c.gtk_widget_grab_focus(confirm_button); // Create our view const view = try View.init(&.{ @@ -198,7 +202,7 @@ const ButtonsView = struct { c.G_CONNECT_DEFAULT, ); - return .{ .root = view.root }; + return .{ .root = view.root, .confirm_button = confirm_button }; } fn gtkCancelClick(_: *c.GtkWidget, ud: ?*anyopaque) callconv(.C) void { From 4fb253a3001b0d142acff69d126d5d030c4f2537 Mon Sep 17 00:00:00 2001 From: Daniel Fox Date: Fri, 3 Jan 2025 11:38:19 -0800 Subject: [PATCH 2/3] Expose clipboard cancel button and focus it --- src/apprt/gtk/ClipboardConfirmationWindow.zig | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/apprt/gtk/ClipboardConfirmationWindow.zig b/src/apprt/gtk/ClipboardConfirmationWindow.zig index cfa29f378..e0960a0db 100644 --- a/src/apprt/gtk/ClipboardConfirmationWindow.zig +++ b/src/apprt/gtk/ClipboardConfirmationWindow.zig @@ -89,7 +89,7 @@ fn init( const view = try PrimaryView.init(self, data); self.view = view; c.gtk_window_set_child(@ptrCast(window), view.root); - _ = c.gtk_widget_grab_focus(view.buttons.confirm_button); + _ = c.gtk_widget_grab_focus(view.buttons.cancel_button); c.gtk_widget_show(window); @@ -162,6 +162,7 @@ const PrimaryView = struct { const ButtonsView = struct { root: *c.GtkWidget, confirm_button: *c.GtkWidget, + cancel_button: *c.GtkWidget, pub fn init(root: *ClipboardConfirmation) !ButtonsView { const cancel_text, const confirm_text = switch (root.pending_req) { @@ -175,9 +176,6 @@ const ButtonsView = struct { const confirm_button = c.gtk_button_new_with_label(confirm_text); errdefer c.g_object_unref(confirm_button); - // TODO: Focus on the paste button - _ = c.gtk_widget_grab_focus(confirm_button); - // Create our view const view = try View.init(&.{ .{ .name = "cancel", .widget = cancel_button }, @@ -202,7 +200,7 @@ const ButtonsView = struct { c.G_CONNECT_DEFAULT, ); - return .{ .root = view.root, .confirm_button = confirm_button }; + return .{ .root = view.root, .confirm_button = confirm_button, .cancel_button = cancel_button }; } fn gtkCancelClick(_: *c.GtkWidget, ud: ?*anyopaque) callconv(.C) void { From d79a02db4424d3b0b11800a6ff6e437552945b52 Mon Sep 17 00:00:00 2001 From: Daniel Fox Date: Mon, 6 Jan 2025 09:25:42 -0800 Subject: [PATCH 3/3] Add destructive/suggested action classes --- src/apprt/gtk/ClipboardConfirmationWindow.zig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/apprt/gtk/ClipboardConfirmationWindow.zig b/src/apprt/gtk/ClipboardConfirmationWindow.zig index e0960a0db..cf417b668 100644 --- a/src/apprt/gtk/ClipboardConfirmationWindow.zig +++ b/src/apprt/gtk/ClipboardConfirmationWindow.zig @@ -176,6 +176,9 @@ const ButtonsView = struct { const confirm_button = c.gtk_button_new_with_label(confirm_text); errdefer c.g_object_unref(confirm_button); + c.gtk_widget_add_css_class(confirm_button, "destructive-action"); + c.gtk_widget_add_css_class(cancel_button, "suggested-action"); + // Create our view const view = try View.init(&.{ .{ .name = "cancel", .widget = cancel_button },