From d2e8d43565bcd116b28cd1eafb50108dbc5bd70d Mon Sep 17 00:00:00 2001 From: wurstsalat Date: Sun, 28 Mar 2021 23:27:55 +0200 Subject: [PATCH] [preview] Change hover and click handling --- url_image_preview/preview.css | 11 ++ url_image_preview/preview.ui | 189 +++++++++++++++---------- url_image_preview/url_image_preview.py | 87 ++++++------ 3 files changed, 162 insertions(+), 125 deletions(-) diff --git a/url_image_preview/preview.css b/url_image_preview/preview.css index 01bed75..52d24f9 100644 --- a/url_image_preview/preview.css +++ b/url_image_preview/preview.css @@ -6,6 +6,17 @@ margin: 5px; background-color: @theme_unfocused_base_color; } +.preview-image-button, +.preview-image-button:hover { + padding: 0px; + border: none; + transition: none; + -gtk-icon-effect: none; + -gtk-icon-shadow: none; + background-image: none; + text-shadow: none; + box-shadow: none; +} .preview-button { border: 1px solid @borders; } diff --git a/url_image_preview/preview.ui b/url_image_preview/preview.ui index 489e972..6dd9494 100644 --- a/url_image_preview/preview.ui +++ b/url_image_preview/preview.ui @@ -1,19 +1,31 @@ - + True - False + False vertical 3 - + True - False + False start + - + + True + True + False + none + + + + + @@ -25,20 +37,86 @@ True - False + False 6 + + + True + False + end + + + + True + True + False + Save as... + + + True + False + document-save-as-symbolic + + + + + + + + False + True + end + 0 + + + + + True + False + end + + + + True + True + False + Open folder + + + True + False + folder-symbolic + + + + + + + + False + True + end + 1 + + True - False + False vertical True - False + False True end - True + True 0 - False True - end - 0 - - - - - True - True - False - Open folder - end - - - True - False - folder-symbolic - - - - - - False - True - end - 1 - - - - - True - True - False - Download - end - none - - - True - False - folder-download-symbolic - - - - - - False - True - end + end 3 @@ -156,7 +189,7 @@ False True - end + end 2 diff --git a/url_image_preview/url_image_preview.py b/url_image_preview/url_image_preview.py index bf2cbfe..489cc08 100644 --- a/url_image_preview/url_image_preview.py +++ b/url_image_preview/url_image_preview.py @@ -103,13 +103,6 @@ def get_previewable_mime_types(): )) -def change_cursor(widget, event): - if event.type == Gdk.EventType.ENTER_NOTIFY: - widget.get_window().set_cursor(get_cursor('default')) - else: - widget.get_window().set_cursor(get_cursor('text')) - - PREVIEWABLE_MIME_TYPES = get_previewable_mime_types() mime_types = set(MIME_TYPES) # Merge both: if it’s a previewable image, it should be allowed @@ -557,33 +550,22 @@ class UrlImagePreviewPlugin(GajimPlugin): icon = self._get_icon_for_mime_type(preview.mime_type) image = Gtk.Image.new_from_gicon(icon, Gtk.IconSize.DIALOG) - def _on_realize(box): - box.get_window().set_cursor(get_cursor('pointer')) - path = self.local_file_path('preview.ui') ui = get_builder(path) + ui.connect_signals(self) - ui.download_button.set_no_show_all(True) - ui.download_button.connect('enter-notify-event', change_cursor) - ui.download_button.connect('leave-notify-event', change_cursor) ui.download_button.connect('clicked', self._on_download, preview) - - ui.save_as_button.set_no_show_all(True) - ui.save_as_button.connect('enter-notify-event', change_cursor) - ui.save_as_button.connect('leave-notify-event', change_cursor) ui.save_as_button.connect('clicked', self._on_save_as, preview) - - ui.open_folder_button.set_no_show_all(True) - ui.open_folder_button.connect('enter-notify-event', change_cursor) - ui.open_folder_button.connect('leave-notify-event', change_cursor) ui.open_folder_button.connect('clicked', self._on_open_folder, preview) - ui.event_box.set_tooltip_text(preview.filename) - ui.event_box.add(image) - ui.event_box.connect('realize', _on_realize) - ui.event_box.connect('button-press-event', - self._on_button_press_event, - preview) + ui.image_button.add(image) + ui.image_button.set_tooltip_text(preview.filename) + ui.image_button.connect('clicked', + self._on_image_button_clicked, + preview) + ui.image_button.connect('button_press_event', + self._on_button_press_event, + preview) ui.preview_box.show_all() @@ -595,14 +577,15 @@ class UrlImagePreviewPlugin(GajimPlugin): location = split_geo_uri(preview.uri) ui.file_size.set_text(_('Lat: %s Lon: %s') % ( location.lat, location.lon)) - ui.event_box.set_tooltip_text(_('Location at Lat: %s Lon: %s') % ( - location.lat, location.lon)) - ui.event_box.set_halign(Gtk.Align.CENTER) + ui.image_button.set_tooltip_text( + _('Location at Lat: %s Lon: %s') % ( + location.lat, location.lon)) + ui.image_event_box.set_halign(Gtk.Align.CENTER) ui.preview_box.set_size_request(160, -1) return ui.preview_box if preview.is_previewable and preview.orig_exists(): - ui.event_box.set_halign(Gtk.Align.CENTER) + ui.image_event_box.set_halign(Gtk.Align.CENTER) else: image.set_property('pixel-size', 64) @@ -727,14 +710,13 @@ class UrlImagePreviewPlugin(GajimPlugin): else: open_uri(preview.uri) - def _on_button_press_event(self, _image, event, preview): - if event.type == Gdk.EventType.BUTTON_PRESS and event.button == 1: - # Left click - action = self.config['LEFTCLICK_ACTION'] - method = getattr(self, '_on_%s' % action) - method(event, preview) + def _on_image_button_clicked(self, _button, preview): + action = self.config['LEFTCLICK_ACTION'] + method = getattr(self, '_on_%s' % action) + method(None, preview) - elif event.type == Gdk.EventType.BUTTON_PRESS and event.button == 3: + def _on_button_press_event(self, _button, event, preview): + if event.type == Gdk.EventType.BUTTON_PRESS and event.button == 3: # Right klick menu = self._get_context_menu(preview) menu.popup_at_pointer(event) @@ -745,7 +727,7 @@ class UrlImagePreviewPlugin(GajimPlugin): has_audio = False discoverer = GstPbutils.Discoverer() try: - info = discoverer.discover_uri(f'file://{str(file_path)}') + info = discoverer.discover_uri(f'file://{file_path}') has_audio = bool(info.get_audio_streams()) except GLib.Error as err: log.error('Error while reading %s: %s', str(file_path), err) @@ -755,6 +737,10 @@ class UrlImagePreviewPlugin(GajimPlugin): str(file_path)) return has_audio + @staticmethod + def _on_realize(event_box): + event_box.get_window().set_cursor(get_cursor('pointer')) + class Preview: def __init__(self, uri, urlparts, orig_path, thumb_path, @@ -852,22 +838,25 @@ class AudioWidget(Gtk.Box): 'media-playback-start-symbolic', Gtk.IconSize.BUTTON) play_button.add(self._play_icon) + play_button.connect('clicked', self._on_play_clicked) + event_box = Gtk.EventBox() + event_box.connect('realize', self._on_realize) + event_box.add(play_button) + self.add(event_box) + self._seek_bar = Gtk.Scale( orientation=Gtk.Orientation.HORIZONTAL) self._seek_bar.set_range(0.0, 1.0) self._seek_bar.set_hexpand(True) self._seek_bar.set_value_pos(Gtk.PositionType.RIGHT) - self._seek_bar.connect('enter-notify-event', change_cursor) - self._seek_bar.connect('leave-notify-event', change_cursor) self._seek_bar.connect('change-value', self._on_seek) self._seek_bar.connect( 'format-value', self._format_audio_timestamp) - play_button.connect('enter-notify-event', change_cursor) - play_button.connect('leave-notify-event', change_cursor) - play_button.connect('clicked', self._on_play_clicked) + event_box = Gtk.EventBox() + event_box.connect('realize', self._on_realize) + event_box.add(self._seek_bar) + self.add(event_box) - self.add(play_button) - self.add(self._seek_bar) self.connect('destroy', self._on_destroy) self.show_all() @@ -876,7 +865,7 @@ class AudioWidget(Gtk.Box): if self._playbin is None: return self._playbin.set_property( - 'uri', f'file://{str(file_path)}') + 'uri', f'file://{file_path}') state_return = self._playbin.set_state(Gst.State.PAUSED) if state_return == Gst.StateChangeReturn.FAILURE: return @@ -953,3 +942,7 @@ class AudioWidget(Gtk.Box): if i_hours > 0: return f'{i_hours:d}:{i_minutes:02d}:{i_seconds:02d}' return f'{i_minutes:d}:{i_seconds:02d}' + + @staticmethod + def _on_realize(event_box): + event_box.get_window().set_cursor(get_cursor('pointer'))