summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2011-09-11 04:17:17 +0200
committerFlorent Le Coz <louiz@louiz.org>2011-09-11 04:17:17 +0200
commit362ff75e3239110b596429fd142487add12e08a4 (patch)
tree0b405cd9ebe8b9a6edb5fdfcbb64e73a42fb59d8
parent1a485318bfc1a3db4cd970785029eeb8b03bf0b3 (diff)
downloadpoezio-362ff75e3239110b596429fd142487add12e08a4.tar.gz
poezio-362ff75e3239110b596429fd142487add12e08a4.tar.bz2
poezio-362ff75e3239110b596429fd142487add12e08a4.tar.xz
poezio-362ff75e3239110b596429fd142487add12e08a4.zip
fixes crashes on too small size (except on the /configure tab, but that’s an other issue)
fixes #2186
-rw-r--r--src/tabs.py18
-rw-r--r--src/windows.py8
2 files changed, 22 insertions, 4 deletions
diff --git a/src/tabs.py b/src/tabs.py
index af4de010..d2145d54 100644
--- a/src/tabs.py
+++ b/src/tabs.py
@@ -14,7 +14,7 @@ Windows are displayed, resized, etc
"""
MIN_WIDTH = 50
-MIN_HEIGHT = 16
+MIN_HEIGHT = 22
import logging
log = logging.getLogger(__name__)
@@ -83,6 +83,10 @@ class Tab(object):
@staticmethod
def resize(scr):
Tab.size = (Tab.height, Tab.width) = scr.getmaxyx()
+ if Tab.height < MIN_HEIGHT or Tab.width < MIN_WIDTH:
+ Tab.visible = False
+ else:
+ Tab.visible = True
def complete_commands(self, the_input):
"""
@@ -666,6 +670,8 @@ class MucTab(ChatTab):
"""
Resize the whole window. i.e. all its sub-windows
"""
+ if not self.visible:
+ return
text_width = (self.width//10)*9
self.topic_win.resize(1, self.width, 0, 0)
self.v_separator.resize(self.height-3, 1, 1, 9*(self.width//10))
@@ -1015,7 +1021,7 @@ class PrivateTab(ChatTab):
self.core.close_tab()
def resize(self):
- if self.core.information_win_size >= self.height-3:
+ if self.core.information_win_size >= self.height-3 or not self.visible:
return
self.text_win.resize(self.height-3-self.core.information_win_size, self.width, 0, 0)
self.text_win.rebuild_everything(self._room)
@@ -1164,6 +1170,8 @@ class RosterInfoTab(Tab):
self.resize()
def resize(self):
+ if not self.visible:
+ return
roster_width = self.width//2
info_width = self.width-roster_width-1
self.v_separator.resize(self.height-2, 1, 0, roster_width)
@@ -1519,7 +1527,7 @@ class ConversationTab(ChatTab):
self.core.close_tab()
def resize(self):
- if self.core.information_win_size >= self.height-3:
+ if self.core.information_win_size >= self.height-3 or not self.visible:
return
self.text_win.resize(self.height-4-self.core.information_win_size, self.width, 1, 0)
self.text_win.rebuild_everything(self._room)
@@ -1638,6 +1646,8 @@ class MucListTab(Tab):
self.input.refresh()
def resize(self):
+ if not self.visible:
+ return
self.upper_message.resize(1, self.width, 0, 0)
column_size = {'node-part': (self.width-5)//4,
'name': (self.width-5)//4*3,
@@ -1766,6 +1776,8 @@ class SimpleTextTab(Tab):
self.core.close_tab()
def resize(self):
+ if not self.visible:
+ return
self.text_win.resize(self.height-2, self.width, 0, 0)
self.tab_win.resize(1, self.width, self.height-2, 0)
self.input.resize(1, self.width, self.height-1, 0)
diff --git a/src/windows.py b/src/windows.py
index 7d138ad2..5b673c21 100644
--- a/src/windows.py
+++ b/src/windows.py
@@ -93,6 +93,12 @@ class Win(object):
except:
pass
+ def move(self, y, x):
+ try:
+ self._win.move(y, x)
+ except:
+ self._win.move(0, 0)
+
def addstr_colored(self, text, y=None, x=None):
"""
Write a string on the window, setting the
@@ -105,7 +111,7 @@ class Win(object):
one of 'u', 'b', 'c[0-9]'
"""
if y is not None and x is not None:
- self._win.move(y, x)
+ self.move(y, x)
next_attr_char = text.find('\x19')
while next_attr_char != -1:
if next_attr_char + 1 < len(text):