245
245
template = open(template_path).read()
246
246
template = Template(template, lookup=TemplateLookup(directories=lookup_paths))
247
247
content = template.render(theme=util.get_theme_colors(), resources=resources, _=_, **kwargs)
249
# Avoid navigation redraw crashes
250
if isinstance(self, Navigation) and not self.get_property("visible"):
249
253
self.load_html_string(content, "file://%s/" % os.path.dirname(template_path))
327
331
self.splitter.add1(self.navigation_scroll)
328
332
self.splitter.add2(layout)
330
self.splitter.set_position(40)
334
self.splitter.set_position(self.model.settings["sidebar_splitter"])
335
self.handle_splitter_position_change(self.model.settings["sidebar_splitter"])
331
336
self.splitter.connect("notify", self.on_splitter_drag)
333
338
self.pack_start(self.splitter, True)
340
def handle_splitter_position_change(self, pos):
341
if pos < 70 and self.navigation.tree_enabled:
342
#self.navigation_scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
343
self.navigation_scroll.set_shadow_type(gtk.SHADOW_NONE)
344
self.navigation.tree_enabled = False
345
self.navigation.render()
347
if pos > 70 and not self.navigation.tree_enabled:
348
#self.navigation_scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
349
self.navigation_scroll.set_shadow_type(gtk.SHADOW_IN)
350
self.navigation.tree_enabled = True
351
self.navigation.render()
353
if pos < 30 and not self.navigation.small_icons:
354
self.navigation.small_icons = True
355
self.navigation.render()
357
if pos > 30 and self.navigation.small_icons:
358
self.navigation.small_icons = False
359
self.navigation.render()
362
self.splitter.set_position(25)
335
364
def on_splitter_drag(self, pane, ev):
336
365
if ev.name == 'position':
337
366
pos = pane.get_position()
367
self.handle_splitter_position_change(pos)
339
if pos < 70 and self.navigation.tree_enabled:
340
#self.navigation_scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
341
self.navigation_scroll.set_shadow_type(gtk.SHADOW_NONE)
342
self.navigation.tree_enabled = False
343
self.navigation.render()
345
if pos > 70 and not self.navigation.tree_enabled:
346
#self.navigation_scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
347
self.navigation_scroll.set_shadow_type(gtk.SHADOW_IN)
348
self.navigation.tree_enabled = True
349
self.navigation.render()
351
if pos < 30 and not self.navigation.small_icons:
352
self.navigation.small_icons = True
353
self.navigation.render()
355
if pos > 30 and self.navigation.small_icons:
356
self.navigation.small_icons = False
357
self.navigation.render()
360
self.splitter.set_position(25)
362
369
def on_stream_closed(self, widget, id, kind):
363
370
self.emit("stream-closed", id, kind)
431
438
def on_action(self, widget, uri, cmd, query):
432
439
self.emit("action", uri, cmd, query)
434
def new_stream(self, state=None):
441
def new_stream(self, state={"stream": "messages", "account": None}):
435
442
item = MultiStreamPane(self.model)
436
443
item.set_property("width-request", 350)
437
444
item.connect("search", self.on_search)
842
850
def set_overlay_text(self, text):
843
851
self.pango_overlay.set_markup(self.overlay_text % (self.overlay_color, text))
853
def on_size_allocate(self, *args):
854
if self.drawable: self.drawable.show()
845
856
def expose_view(self, window, event):
846
857
if not self.drawable:
847
858
self.drawable = self.get_window(gtk.TEXT_WINDOW_TEXT)
848
859
self.pango_overlay = self.create_pango_layout("")
849
860
self.set_overlay_text(140)
851
862
gc = self.drawable.new_gc()
852
863
ww, wh = self.drawable.get_size()
853
864
tw, th = self.pango_overlay.get_pixel_size()
854
self.drawable.draw_layout(gc, ww - tw, wh - th, self.pango_overlay)
865
self.drawable.draw_layout(gc, ww - tw - 2, wh - th, self.pango_overlay)
856
867
def on_text_changed(self, w):
857
868
chars = self.get_char_count()