diff --git a/mainwindow.ui b/mainwindow.ui
index 23a2fa7..29b0e96 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -11,7 +11,7 @@
-
+
0
0
@@ -88,7 +88,10 @@
0
- Qt::ScrollBarAlwaysOn
+ Qt::ScrollBarAsNeeded
+
+
+ Qt::ScrollBarAsNeeded
true
diff --git a/qubesmanager/main.py b/qubesmanager/main.py
index 8fa7b39..e8fbf27 100755
--- a/qubesmanager/main.py
+++ b/qubesmanager/main.py
@@ -562,7 +562,6 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow):
self.connect(self.table, SIGNAL("itemSelectionChanged()"), self.table_selection_changed)
- cur_pos = self.pos()
self.table.setColumnWidth(0, self.column_width)
self.setSizeIncrement(QtCore.QSize(200, 30))
self.centralwidget.setSizeIncrement(QtCore.QSize(200, 30))
@@ -572,9 +571,15 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow):
self.sort_by_cpu = None
self.sort_by_state = None
+ self.screen_number = -1
+ self.screen_changed = False
+
+ self.frame_width = 0
+ self.frame_height = 0
+
self.fill_table()
- self.move(cur_pos)
-
+ self.move(self.x(), 0)
+
self.table.setColumnHidden( self.columns_indices["NetVM"], True)
self.actionNetVM.setChecked(False)
self.table.setColumnHidden( self.columns_indices["CPU Graph"], True)
@@ -632,41 +637,69 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow):
def show(self):
super(VmManagerWindow, self).show()
- self.set_table_geom_height()
- self.set_table_geom_width()
+ self.screen_number = app.desktop().screenNumber(self)
- def set_table_geom_height(self):
- minH = self.table.horizontalHeader().height() +\
- 2*self.table.frameWidth()
+ def set_table_geom_size(self):
- #All this sizing is kind of magic, so change it only if you have to
- #or if you know what you're doing :)
-
- n = self.table.rowCount();
- maxH = minH
- if n >= self.min_visible_rows:
- minH += self.min_visible_rows*self.row_height
- maxH += n*self.row_height
- else:
- minH += n*self.row_height
- maxH = minH
-
- self.centralwidget.setMinimumHeight(minH)
- self.centralwidget.setMaximumHeight(maxH)
+ desktop_width = app.desktop().availableGeometry(self).width() - self.frame_width # might be wrong...
+ desktop_height = app.desktop().availableGeometry(self).height() - self.frame_height # might be wrong...
+ desktop_height -= self.row_height #UGLY! to somehow ommit taskbar...
+
+ W = self.table.horizontalHeader().length() +\
+ self.table.verticalScrollBar().width() +\
+ 2*self.table.frameWidth() +1
+
+ H = self.table.horizontalHeader().height() +\
+ 2*self.table.frameWidth()
mainwindow_to_add = 0
+
+ available_space = desktop_height
if self.menubar.isVisible():
- mainwindow_to_add += self.menubar.height() + self.menubar.contentsMargins().top() + self.menubar.contentsMargins().bottom()
+ menubar_height = self.menubar.height() + self.menubar.contentsMargins().top() + self.menubar.contentsMargins().bottom()
+ available_space -= menubar_height
+ mainwindow_to_add += menubar_height
if self.toolbar.isVisible():
- mainwindow_to_add += self.toolbar.height() + self.toolbar.contentsMargins().top() + self.toolbar.contentsMargins().bottom()
-
- maxH += mainwindow_to_add
- minH += mainwindow_to_add
+ toolbar_height = self.toolbar.height() + self.toolbar.contentsMargins().top() + self.toolbar.contentsMargins().bottom()
+ available_space -= toolbar_height
+ mainwindow_to_add += toolbar_height
+ if W >= desktop_width:
+ available_space -= self.table.horizontalScrollBar().height()
+ H += self.table.horizontalScrollBar().height()
+ default_rows = int(available_space/self.row_height)
- desktop_height = app.desktop().availableGeometry().height() - 2*self.row_height
+ n = self.table.rowCount();
+
+ if n > default_rows:
+ H += default_rows*self.row_height
+ self.table.verticalScrollBar().show()
+ else:
+ H += n*self.row_height
+ self.table.verticalScrollBar().hide()
+ W -= self.table.verticalScrollBar().width()
- self.setMaximumHeight(min(desktop_height, maxH))
- self.setMinimumHeight(minH)
+ W = min(desktop_width, W)
+
+ self.centralwidget.setFixedHeight(H)
+
+ H += mainwindow_to_add
+
+ self.setMaximumHeight(H)
+ self.setMinimumHeight(H)
+
+ self.table.setFixedWidth(W)
+ self.centralwidget.setFixedWidth(W)
+ # don't change the following two lines to setFixedWidth!
+ self.setMaximumWidth(W)
+ self.setMinimumWidth(W)
+
+
+ def moveEvent(self, event):
+ super(VmManagerWindow, self).moveEvent(event)
+ screen_number = app.desktop().screenNumber(self)
+ if self.screen_number != screen_number:
+ self.screen_changed = True
+ self.screen_number = screen_number
def get_vms_list(self):
@@ -731,6 +764,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow):
# When calling update_table() directly, always use out_of_schedule=True!
def update_table(self, out_of_schedule=False):
+
update_devs = self.update_block_devices() or out_of_schedule
if manager_window.isVisible():
some_vms_have_changed_power_state = False
@@ -741,13 +775,19 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow):
some_vms_have_changed_power_state = True
reload_table = self.reload_table
- if self.reload_table or ((not self.show_inactive_vms) and some_vms_have_changed_power_state):
+
+ if self.screen_changed == True:
+ reload_table = True
+ self.screen_changed = False
+
+
+ if reload_table or ((not self.show_inactive_vms) and some_vms_have_changed_power_state):
self.fill_table()
- self.set_table_geom_height()
- self.set_table_geom_width()
+ self.set_table_geom_size()
update_devs=True
- elif self.sort_by_state != None and some_vms_have_changed_power_state:
+
+ if self.sort_by_state != None and some_vms_have_changed_power_state:
self.table.sortItems(self.columns_indices["State"], self.sort_by_state)
blk_visible = None
@@ -801,18 +841,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow):
self.counter += 1
QTimer.singleShot (self.update_interval, self.update_table)
- def set_table_geom_width(self):
-
- table_width = self.table.horizontalHeader().length() +\
- self.table.verticalScrollBar().width() + \
- 2*self.table.frameWidth() + 1
-
- self.table.setFixedWidth( table_width )
- self.centralwidget.setFixedWidth(table_width)
- # don't change the following two lines to setFixedWidth!
- self.setMaximumWidth(table_width)
- self.setMinimumWidth(table_width)
-
+
def update_block_devices(self):
res, msg = self.blk_manager.update()
if msg != None and len(msg) > 0:
@@ -1185,7 +1214,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow):
self.show_inactive_vms = self.action_showallvms.isChecked()
self.mark_table_for_update()
self.update_table(out_of_schedule = True)
- self.set_table_geom_height()
+ self.set_table_geom_size()
@pyqtSlot(name='on_action_editfwrules_triggered')
def action_editfwrules_triggered(self):
@@ -1212,7 +1241,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow):
def showhide_menubar(self, checked):
self.menuWidget().setVisible(checked)
- self.set_table_geom_height()
+ self.set_table_geom_size()
if not checked:
self.context_menu.addAction(self.action_menubar)
else:
@@ -1221,7 +1250,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow):
def showhide_toolbar(self, checked):
self.toolbar.setVisible(checked)
- self.set_table_geom_height()
+ self.set_table_geom_size()
if not checked:
self.context_menu.addAction(self.action_toolbar)
else:
@@ -1230,7 +1259,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow):
def showhide_column(self, col_num, show):
self.table.setColumnHidden( col_num, not show)
- self.set_table_geom_width()
+ self.set_table_geom_size()
def on_actionState_toggled(self, checked):
self.showhide_column( self.columns_indices['State'], checked)
@@ -1448,6 +1477,17 @@ def toggle_manager():
manager_window.hide()
else:
manager_window.show()
+ while manager_window.frameSize().width() - manager_window.width() == 0:
+ app.processEvents()
+ time.sleep(0.05)
+ manager_window.frame_width = manager_window.frameSize().width() - manager_window.width()
+ manager_window.frame_height = manager_window.frameSize().height() - manager_window.height()
+
+ print manager_window.frame_width, " x ", manager_window.frame_height
+ manager_window.frame_width += 50 # UGLY! a silly tweak that worksforme...
+
+ manager_window.set_table_geom_size()
+
manager_window.update_table(True)
def exit_app():