summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xgui.py33
-rw-r--r--iw/language_gui.py4
-rw-r--r--iw/language_support_gui.py5
-rw-r--r--iw/mouse_gui.py4
-rw-r--r--iw/package_gui.py33
-rw-r--r--iw/xconfig_gui.py6
6 files changed, 84 insertions, 1 deletions
diff --git a/gui.py b/gui.py
index 2ffef865c..1f2ecbaf2 100755
--- a/gui.py
+++ b/gui.py
@@ -75,6 +75,39 @@ if iutil.getArch() == 'sparc':
elif iutil.getArch() == 's390':
stepToClass["bootloader"] = ("zipl_gui", "ZiplWindow")
+
+#
+# HACK to make treeview work
+#
+
+def setupTreeViewFixupIdleHandler(view, store):
+ id = {}
+ id["id"] = gtk.idle_add(scrollToIdleHandler, (view, store, id))
+
+def scrollToIdleHandler((view, store, iddict)):
+ if not view or not store or not iddict:
+ return
+
+ try:
+ id = iddict["id"]
+ except:
+ return
+
+ selection = view.get_selection()
+ if not selection:
+ return
+
+ model, iter = selection.get_selected()
+ if not iter:
+ return
+
+ path = store.get_path(iter)
+ col = view.get_column(0)
+ view.scroll_to_cell(path, col, gtk.TRUE, 0.5, 0.5)
+
+ if id:
+ gtk.idle_remove(id)
+
# setup globals
def processEvents():
gtk.gdk.flush()
diff --git a/iw/language_gui.py b/iw/language_gui.py
index c2d5b28fd..540cf6abf 100644
--- a/iw/language_gui.py
+++ b/iw/language_gui.py
@@ -16,6 +16,8 @@ import gtk
from iw_gui import *
from rhpl.translate import _, N_
+from gui import setupTreeViewFixupIdleHandler
+
class LanguageWindow (InstallWindow):
windowTitle = N_("Language Selection")
@@ -98,6 +100,8 @@ class LanguageWindow (InstallWindow):
sw.set_policy (gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
sw.add (self.listView)
+ setupTreeViewFixupIdleHandler(self.listView, self.listStore)
+
mainBox.pack_start (hbox, gtk.FALSE, gtk.FALSE, 10)
mainBox.pack_start (sw, gtk.TRUE, gtk.TRUE)
diff --git a/iw/language_support_gui.py b/iw/language_support_gui.py
index 65ca1847e..066eb7792 100644
--- a/iw/language_support_gui.py
+++ b/iw/language_support_gui.py
@@ -18,6 +18,8 @@ from iw_gui import *
from flags import flags
from rhpl.translate import _, N_
+from gui import setupTreeViewFixupIdleHandler
+
class LanguageSupportWindow (InstallWindow):
windowTitle = _("Additional Language Support")
htmlTag = "langsupport"
@@ -239,4 +241,7 @@ class LanguageSupportWindow (InstallWindow):
store = self.languageList.get_model()
+ setupTreeViewFixupIdleHandler(self.languageList, store)
+
+
return vbox
diff --git a/iw/mouse_gui.py b/iw/mouse_gui.py
index ec53c0f74..1cb742118 100644
--- a/iw/mouse_gui.py
+++ b/iw/mouse_gui.py
@@ -20,6 +20,8 @@ from re import *
from rhpl.translate import _, N_
from flags import flags
+from gui import setupTreeViewFixupIdleHandler
+
class MouseWindow(InstallWindow):
windowTitle = N_("Mouse Configuration")
htmlTag = "mouse"
@@ -245,6 +247,8 @@ class MouseWindow(InstallWindow):
box.pack_start(sw)
label.set_mnemonic_widget(self.mouseview)
+ setupTreeViewFixupIdleHandler(self.mouseview, self.mousestore)
+
# then the port list
frame = gtk.Frame()
frame.set_shadow_type(gtk.SHADOW_IN)
diff --git a/iw/package_gui.py b/iw/package_gui.py
index 41ba01191..de2a35d69 100644
--- a/iw/package_gui.py
+++ b/iw/package_gui.py
@@ -929,7 +929,29 @@ class PackageSelectionWindow (InstallWindow):
self.setCompCountLabel(comp, count)
return
-
+
+ def focusIdleHandler(self, data):
+ if not self.needToFocus:
+ return
+
+ if self.scrolledWindow is None:
+ return
+
+ vadj = self.scrolledWindow.get_vadjustment()
+ swmin = vadj.lower
+ swmax = vadj.upper
+ pagesize = vadj.page_size
+ curval = vadj.get_value()
+
+ self.scrolledWindow.get_vadjustment().set_value(swmax-pagesize)
+
+ if self.idleid is not None:
+ gtk.idle_remove(self.idleid)
+
+ self.idleid = None
+ self.needToFocus = 0
+
+
def getScreen(self, comps, langSupport, instClass, dispatch):
@@ -1102,13 +1124,22 @@ class PackageSelectionWindow (InstallWindow):
topbox.set_focus_hadjustment(sw.get_hadjustment())
topbox.set_focus_vadjustment(sw.get_vadjustment())
+ # save so we can scrfoll if needed
+ self.scrolledWindow = sw
+ self.needToFocus = 0
+
# if special case we do things a little differently
if minimalActive:
self.setComponentsSensitive(minimalComp, 0)
sw.set_focus_child(minimalCB)
+ self.needToFocus = 1
elif everythingActive:
self.setComponentsSensitive(everythingComp, 0)
sw.set_focus_child(everythingCB)
+ self.needToFocus = 1
+
+ if self.needToFocus:
+ self.idleid = gtk.idle_add(self.focusIdleHandler, None)
# pack rest of screen
hbox = gtk.HBox (gtk.FALSE, 5)
diff --git a/iw/xconfig_gui.py b/iw/xconfig_gui.py
index 6e00cadea..8dc361d20 100644
--- a/iw/xconfig_gui.py
+++ b/iw/xconfig_gui.py
@@ -30,6 +30,8 @@ from rhpl.videocard import Videocard_blacklist
from desktop import ENABLE_DESKTOP_CHOICE
+from gui import setupTreeViewFixupIdleHandler
+
ddc_monitor_string = _("DDC Probed Monitor")
unprobed_monitor_string = _("Unprobed Monitor")
@@ -737,6 +739,8 @@ class MonitorWindow (InstallWindow):
synctable.attach(align, 3, 4, 1, 2)
box.pack_start (synctable, gtk.FALSE, gtk.FALSE)
+
+ setupTreeViewFixupIdleHandler(self.monitorview, self.monitorstore)
return box
@@ -1069,4 +1073,6 @@ class XConfigWindow (InstallWindow):
self.probedMem = self.videocard.primaryCard(useProbed=1).getVideoRam()
self.setCurrent(self.currentCard, self.currentMem)
+ setupTreeViewFixupIdleHandler(self.cardview, self.cardstore)
+
return self.topbox