mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix hiding and showing book details panel changes its size by a pixel or two. Fixes #1906149 [Book Detail panel becomes narrower when open and closed a number of times.](https://bugs.launchpad.net/calibre/+bug/1906149)
This commit is contained in:
parent
597c40a602
commit
bbe90a3cb2
@ -1056,12 +1056,14 @@ class LayoutButton(QToolButton):
|
|||||||
class Splitter(QSplitter):
|
class Splitter(QSplitter):
|
||||||
|
|
||||||
state_changed = pyqtSignal(object)
|
state_changed = pyqtSignal(object)
|
||||||
|
reapply_sizes = pyqtSignal(object)
|
||||||
|
|
||||||
def __init__(self, name, label, icon, initial_show=True,
|
def __init__(self, name, label, icon, initial_show=True,
|
||||||
initial_side_size=120, connect_button=True,
|
initial_side_size=120, connect_button=True,
|
||||||
orientation=Qt.Orientation.Horizontal, side_index=0, parent=None,
|
orientation=Qt.Orientation.Horizontal, side_index=0, parent=None,
|
||||||
shortcut=None, hide_handle_on_single_panel=True):
|
shortcut=None, hide_handle_on_single_panel=True):
|
||||||
QSplitter.__init__(self, parent)
|
QSplitter.__init__(self, parent)
|
||||||
|
self.reapply_sizes.connect(self.setSizes, type=Qt.ConnectionType.QueuedConnection)
|
||||||
self.hide_handle_on_single_panel = hide_handle_on_single_panel
|
self.hide_handle_on_single_panel = hide_handle_on_single_panel
|
||||||
if hide_handle_on_single_panel:
|
if hide_handle_on_single_panel:
|
||||||
self.state_changed.connect(self.update_handle_width)
|
self.state_changed.connect(self.update_handle_width)
|
||||||
@ -1151,7 +1153,8 @@ class Splitter(QSplitter):
|
|||||||
def side_index_size(self, val):
|
def side_index_size(self, val):
|
||||||
if self.count() < 2:
|
if self.count() < 2:
|
||||||
return
|
return
|
||||||
if val == 0 and not self.is_side_index_hidden:
|
side_index_hidden = self.is_side_index_hidden
|
||||||
|
if val == 0 and not side_index_hidden:
|
||||||
self.save_state()
|
self.save_state()
|
||||||
sizes = list(self.sizes())
|
sizes = list(self.sizes())
|
||||||
for i in range(len(sizes)):
|
for i in range(len(sizes)):
|
||||||
@ -1159,10 +1162,17 @@ class Splitter(QSplitter):
|
|||||||
self.setSizes(sizes)
|
self.setSizes(sizes)
|
||||||
sizes = list(self.sizes())
|
sizes = list(self.sizes())
|
||||||
total = sum(sizes)
|
total = sum(sizes)
|
||||||
|
total_needs_adjustment = self.hide_handle_on_single_panel and side_index_hidden
|
||||||
|
if total_needs_adjustment:
|
||||||
|
total -= self.original_handle_width
|
||||||
for i in range(len(sizes)):
|
for i in range(len(sizes)):
|
||||||
sizes[i] = val if i == self.side_index else total-val
|
sizes[i] = val if i == self.side_index else total-val
|
||||||
self.setSizes(sizes)
|
self.setSizes(sizes)
|
||||||
self.initialize()
|
self.initialize()
|
||||||
|
if total_needs_adjustment:
|
||||||
|
# the handle visibility and therefore size distribution will change
|
||||||
|
# when the event loop ticks
|
||||||
|
self.reapply_sizes.emit(sizes)
|
||||||
|
|
||||||
def do_resize(self, *args):
|
def do_resize(self, *args):
|
||||||
orig = self.desired_side_size
|
orig = self.desired_side_size
|
||||||
|
Loading…
x
Reference in New Issue
Block a user