diff --git a/src/apprt/gtk/ClipboardConfirmationWindow.zig b/src/apprt/gtk/ClipboardConfirmationWindow.zig index ff20342fe..d967fd06f 100644 --- a/src/apprt/gtk/ClipboardConfirmationWindow.zig +++ b/src/apprt/gtk/ClipboardConfirmationWindow.zig @@ -25,7 +25,8 @@ dialog: *DialogType, data: [:0]u8, core_surface: *CoreSurface, pending_req: apprt.ClipboardRequest, -content_revealer: *gtk.Revealer, +text_view: *gtk.TextView, +text_view_scroll: *gtk.ScrolledWindow, reveal_button_widget: *gtk.Widget, hide_button_widget: *gtk.Widget, @@ -85,9 +86,10 @@ fn init( defer builder.deinit(); const dialog = builder.getObject(DialogType, "clipboard_confirmation_window").?; - const content_revealer = builder.getObject(gtk.Revealer, "content_revealer").?; - const reveal_button: *gtk.Button = builder.getObject(gtk.Button, "reveal_button").?; - const hide_button: *gtk.Button = builder.getObject(gtk.Button, "hide_button").?; + const text_view = builder.getObject(gtk.TextView, "text_view").?; + const reveal_button = builder.getObject(gtk.Button, "reveal_button").?; + const hide_button = builder.getObject(gtk.Button, "hide_button").?; + const text_view_scroll = builder.getObject(gtk.ScrolledWindow, "text_view_scroll").?; const copy = try app.core_app.alloc.dupeZ(u8, data); errdefer app.core_app.alloc.free(copy); @@ -97,22 +99,37 @@ fn init( .data = copy, .core_surface = core_surface, .pending_req = request, - .content_revealer = content_revealer, + .text_view = text_view, + .text_view_scroll = text_view_scroll, .reveal_button_widget = gobject.ext.cast(gtk.Widget, reveal_button).?, .hide_button_widget = gobject.ext.cast(gtk.Widget, hide_button).?, }; - const text_view = builder.getObject(gtk.TextView, "text_view").?; const buffer = gtk.TextBuffer.new(null); errdefer buffer.unref(); buffer.insertAtCursor(copy.ptr, @intCast(copy.len)); text_view.setBuffer(buffer); if (is_secure_input) { - content_revealer.setRevealChild(@intFromBool(false)); + gobject.ext.as(gtk.Widget, text_view_scroll).setSensitive(@intFromBool(false)); + gobject.ext.as(gtk.Widget, self.text_view).addCssClass("blurred"); + self.reveal_button_widget.setVisible(@intFromBool(true)); - _ = gtk.Button.signals.clicked.connect(reveal_button, *ClipboardConfirmation, gtkRevealButtonClicked, self, .{}); - _ = gtk.Button.signals.clicked.connect(hide_button, *ClipboardConfirmation, gtkHideButtonClicked, self, .{}); + + _ = gtk.Button.signals.clicked.connect( + reveal_button, + *ClipboardConfirmation, + gtkRevealButtonClicked, + self, + .{}, + ); + _ = gtk.Button.signals.clicked.connect( + hide_button, + *ClipboardConfirmation, + gtkHideButtonClicked, + self, + .{}, + ); } switch (DialogType) { @@ -172,13 +189,17 @@ fn gtkResponse(_: *DialogType, response: [*:0]u8, self: *ClipboardConfirmation) } fn gtkRevealButtonClicked(_: *gtk.Button, self: *ClipboardConfirmation) callconv(.C) void { - self.content_revealer.setRevealChild(@intFromBool(true)); + gobject.ext.as(gtk.Widget, self.text_view_scroll).setSensitive(@intFromBool(true)); + gobject.ext.as(gtk.Widget, self.text_view).removeCssClass("blurred"); + self.hide_button_widget.setVisible(@intFromBool(true)); self.reveal_button_widget.setVisible(@intFromBool(false)); } fn gtkHideButtonClicked(_: *gtk.Button, self: *ClipboardConfirmation) callconv(.C) void { - self.content_revealer.setRevealChild(@intFromBool(false)); + gobject.ext.as(gtk.Widget, self.text_view_scroll).setSensitive(@intFromBool(false)); + gobject.ext.as(gtk.Widget, self.text_view).addCssClass("blurred"); + self.hide_button_widget.setVisible(@intFromBool(false)); self.reveal_button_widget.setVisible(@intFromBool(true)); } diff --git a/src/apprt/gtk/style.css b/src/apprt/gtk/style.css index 75d020a06..ecaef6b33 100644 --- a/src/apprt/gtk/style.css +++ b/src/apprt/gtk/style.css @@ -63,3 +63,13 @@ window.ssd.no-border-radius { margin: 0; padding: 0; } + +.clipboard-content-view { + filter: blur(0px); + transition: filter 0.3s ease; +} + +.clipboard-content-view.blurred { + filter: blur(5px); + transition: filter 0.3s ease; +} diff --git a/src/apprt/gtk/ui/1.5/ccw-osc-52-read.blp b/src/apprt/gtk/ui/1.5/ccw-osc-52-read.blp index d894059da..25353e801 100644 --- a/src/apprt/gtk/ui/1.5/ccw-osc-52-read.blp +++ b/src/apprt/gtk/ui/1.5/ccw-osc-52-read.blp @@ -36,23 +36,22 @@ Adw.AlertDialog clipboard_confirmation_window { label: _("Hide Potentially Sensitive Content"); } - Revealer content_revealer { - reveal-child: true; - transition-type: slide_down; + ScrolledWindow text_view_scroll { + width-request: 500; + height-request: 250; - ScrolledWindow { - width-request: 500; - height-request: 250; + TextView text_view { + cursor-visible: false; + editable: false; + monospace: true; + top-margin: 8; + left-margin: 8; + bottom-margin: 8; + right-margin: 8; - TextView text_view { - cursor-visible: false; - editable: false; - monospace: true; - top-margin: 8; - left-margin: 8; - bottom-margin: 8; - right-margin: 8; - } + styles [ + "clipboard-content-view" + ] } } }; diff --git a/src/apprt/gtk/ui/1.5/ccw-osc-52-write.blp b/src/apprt/gtk/ui/1.5/ccw-osc-52-write.blp index a51a9cc2c..1c4e740e4 100644 --- a/src/apprt/gtk/ui/1.5/ccw-osc-52-write.blp +++ b/src/apprt/gtk/ui/1.5/ccw-osc-52-write.blp @@ -36,23 +36,22 @@ Adw.AlertDialog clipboard_confirmation_window { label: _("Hide Potentially Sensitive Content"); } - Revealer content_revealer { - reveal-child: true; - transition-type: slide_down; + ScrolledWindow text_view_scroll { + width-request: 500; + height-request: 250; - ScrolledWindow { - width-request: 500; - height-request: 250; + TextView text_view { + cursor-visible: false; + editable: false; + monospace: true; + top-margin: 8; + left-margin: 8; + bottom-margin: 8; + right-margin: 8; - TextView text_view { - cursor-visible: false; - editable: false; - monospace: true; - top-margin: 8; - left-margin: 8; - bottom-margin: 8; - right-margin: 8; - } + styles [ + "clipboard-content-view" + ] } } }; diff --git a/src/apprt/gtk/ui/1.5/ccw-paste.blp b/src/apprt/gtk/ui/1.5/ccw-paste.blp index 771c99058..395556f3d 100644 --- a/src/apprt/gtk/ui/1.5/ccw-paste.blp +++ b/src/apprt/gtk/ui/1.5/ccw-paste.blp @@ -36,23 +36,22 @@ Adw.AlertDialog clipboard_confirmation_window { label: _("Hide Potentially Sensitive Content"); } - Revealer content_revealer { - reveal-child: true; - transition-type: slide_down; + ScrolledWindow text_view_scroll { + width-request: 500; + height-request: 250; - ScrolledWindow { - width-request: 500; - height-request: 250; + TextView text_view { + cursor-visible: false; + editable: false; + monospace: true; + top-margin: 8; + left-margin: 8; + bottom-margin: 8; + right-margin: 8; - TextView text_view { - cursor-visible: false; - editable: false; - monospace: true; - top-margin: 8; - left-margin: 8; - bottom-margin: 8; - right-margin: 8; - } + styles [ + "clipboard-content-view" + ] } } };