Skip to content

Commit

Permalink
Hide iconview when changing window width
Browse files Browse the repository at this point in the history
This will make it possible to do smooth width changes even
if there are a large number of pages in iconview.
  • Loading branch information
kbengs committed May 8, 2021
1 parent cbf06bb commit 482292b
Showing 1 changed file with 36 additions and 3 deletions.
39 changes: 36 additions & 3 deletions pdfarranger/pdfarranger.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,8 @@ def __init__(self, *args, **kwargs):
self.drag_path = None
self.drag_pos = Gtk.IconViewDropPosition.DROP_RIGHT
self.sb_timeout_id = None
self.window_width_old = 0
self.set_iv_visible_id = None

# Clipboard for cut copy paste
self.clipboard_default = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
Expand Down Expand Up @@ -411,6 +413,8 @@ def do_activate(self):
self.window.connect('focus_in_event', self.window_focus_in_out_event)
self.window.connect('focus_out_event', self.window_focus_in_out_event)
self.window.connect('configure_event', self.window_configure_event)
self.window.connect('button_release_event', self.window_button_release_event)
self.window.connect('enter_notify_event', self.window_enter_notify_event)

if hasattr(GLib, "unix_signal_add"):
GLib.unix_signal_add(GLib.PRIORITY_DEFAULT, signal.SIGINT, self.close_application)
Expand Down Expand Up @@ -577,11 +581,39 @@ def vscrollbar_value_changed(self, _vscrollbar):
"""Render when vertical scrollbar value has changed."""
self.silent_render()

def window_configure_event(self, _window, _event):
"""Render when window size has changed."""
def window_configure_event(self, _window, event):
"""Handle window size and position changes."""
if self.window_width_old not in [0, event.width]:
if self.set_iv_visible_id:
GObject.source_remove(self.set_iv_visible_id)
self.set_iv_visible_id = GObject.timeout_add(1500, self.set_iconview_visible)
self.iconview.set_visible(False)
self.window_width_old = event.width
if len(self.model) > 1: # Don't trigger extra render after first page is inserted
self.silent_render()

def window_button_release_event(self, _window, event):
"""Mouse button release on window."""
if event.button == 1:
self.set_iconview_visible(timeout=False)

def window_enter_notify_event(self, _window, _event):
"""Mouse pointer enter window."""
if os.name == 'nt':
# In Windows this is triggered when dragging window edge. Instead the release event
# is usually triggered when releasing button.
return
self.set_iconview_visible(timeout=False)

def set_iconview_visible(self, timeout=True):
if timeout:
self.set_iv_visible_id = None
if not self.iconview.get_visible():
self.update_iconview_geometry()
self.scroll_to_selection()
GObject.idle_add(self.iconview.set_visible, True)
self.iconview.grab_focus()

def set_export_file(self, file):
if file != self.export_file:
self.export_file = file
Expand Down Expand Up @@ -671,7 +703,8 @@ def get_visible_range2(self):

def on_window_size_request(self, _window):
"""Main Window resize."""
self.update_iconview_geometry()
if self.iconview.get_visible():
self.update_iconview_geometry()

def update_iconview_geometry(self):
"""Set iconview cell size, margins, number of columns and spacing."""
Expand Down

0 comments on commit 482292b

Please sign in to comment.