Abstract the code to support adding and maintaing a tab which can be toggled
authorDarren Worrall <daz@dwuk.net>
Tue, 16 Jun 2009 20:38:57 +0000 (21:38 +0100)
committerDarren Worrall <daz@dwuk.net>
Tue, 16 Jun 2009 20:38:57 +0000 (21:38 +0100)
gwibber/client.py

index 5f6f753..9519f49 100644 (file)
@@ -169,7 +169,7 @@ class GwibberClient(gtk.Window):
     self.tabs.set_scrollable(True)
     self.messages_view = self.add_msg_tab(self.client.receive, _("Messages"), show_icon = "go-home")
     self.add_msg_tab(self.client.responses, _("Replies"), show_icon = "mail-reply-all", add_indicator=True)
-    self.public_view = self.add_msg_tab(self.client.public_timeline, _("Public"), show_icon = "gtk-connect", add_indicator=True, no_show_all=True)
+    self.public_view = self.add_msg_tab(self.client.public_timeline, _("Public"), show_icon = "language-selector", add_indicator=True, can_toggle=True)
 
     saved_position = config.GCONF.get_list("%s/%s" % (config.GCONF_PREFERENCES_DIR, "saved_position"), config.gconf.VALUE_INT)
     if saved_position:
@@ -396,10 +396,11 @@ class GwibberClient(gtk.Window):
       if view:
         self.update([view.get_parent()])
 
-  def add_scrolled_parent(self, view, text, show_close=False, show_icon=None, make_active=False, save=None, no_show_all=False):
+  def add_scrolled_parent(self, view, text, show_close=False, show_icon=None, make_active=False, save=None, can_toggle=False):
     scroll = gtk.ScrolledWindow()
     scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
-    scroll.set_no_show_all(no_show_all)
+    # Tabs that can be toggled (like public timeline) should be excluded from the parent show_all() - they will maintain their own state
+    scroll.set_no_show_all(can_toggle)
     scroll.add(view)
     scroll.saved_query = save
     view.scroll = scroll
@@ -426,13 +427,13 @@ class GwibberClient(gtk.Window):
     btn.connect("clicked", self.on_tab_close, scroll)
     self.on_theme_change()
 
-  def add_msg_tab(self, data_handler, text, show_close=False, show_icon=None, make_active=False, save=None, add_indicator=False, no_show_all=False):
+  def add_msg_tab(self, data_handler, text, show_close=False, show_icon=None, make_active=False, save=None, add_indicator=False, can_toggle=False):
     view = gwui.MessageView(self.preferences["theme"], self)
     view.link_handler = self.on_link_clicked
     view.data_retrieval_handler = data_handler
     view.add_indicator = add_indicator
 
-    self.add_scrolled_parent(view, text, show_close, show_icon, make_active, save, no_show_all)
+    self.add_scrolled_parent(view, text, show_close, show_icon, make_active, save, can_toggle)
     return view
 
   def add_user_tab(self, data_handler, text, show_close=False, show_icon=None, make_active=False, save=None):
@@ -514,11 +515,10 @@ class GwibberClient(gtk.Window):
       if hasattr(self, i):
         getattr(self, i).set_property(
           "visible", self.preferences["show_%s" % i])
-    
-    # Hide the top level 'scroll' widget to hide the tab
-    if hasattr(self, "public_view"):
-      getattr(self, "public_view").scroll.set_property(
-        "visible", self.preferences["show_%s" % "public_view"])
+        # If we have a parent, and if that parent has no_show_all=True, we're dealing with a tab which can be toggled, so set the visible property on the parent to hide it properly as required
+        if hasattr(getattr(self, i), "parent") and getattr(self, i).parent.props.no_show_all:
+            getattr(self, i).parent.set_property(
+              "visible", self.preferences["show_%s" % i])
       
     self.set_property("skip-taskbar-hint",
       self.preferences["hide_taskbar_entry"])
@@ -1126,7 +1126,7 @@ class GwibberClient(gtk.Window):
 
         for tab in self.target_tabs:
           view = tab.get_child()
-          if view and view.get_property("visible"):
+          if view and view.props.visible:
             view.message_store = [m for m in
               view.data_retrieval_handler() if not self.last_clear or m.time > self.last_clear
               and m.time <= mx.DateTime.gmt()]