Browse code

Enhanced auto-refresh functionnality.

Previously, update only worked on files passed as command-line
arguments. This patch extends the feature to files opened from the menu.

- update method now is in the widget class, where it can benefit from
the openfilename variable. It also reuses the widget's reload method.

- the gobject timeout now happens whether or not a file was passed in
the command line.

Signed-off-by: José Fonseca <jose.r.fonseca@gmail.com>

F.Kirchner authored on 27/11/2011 23:15:50 • José Fonseca committed on 27/11/2011 23:19:14
Showing 1 changed files

  • xdot.py index a3dcb4d..f6cc15d 100755
... ...
@@ -1430,6 +1430,9 @@ class DotWidget(gtk.DrawingArea):
1430 1430
         self.connect("size-allocate", self.on_area_size_allocate)
1431 1431
 
1432 1432
         self.connect('key-press-event', self.on_key_press_event)
1433
+        self.last_mtime = None
1434
+
1435
+        gobject.timeout_add(1000, self.update)
1433 1436
 
1434 1437
         self.x, self.y = 0.0, 0.0
1435 1438
         self.zoom_ratio = 1.0
... ...
@@ -1465,7 +1468,8 @@ class DotWidget(gtk.DrawingArea):
1465 1468
             return None
1466 1469
         return xdotcode
1467 1470
 
1468
-    def set_dotcode(self, dotcode, filename='<stdin>'):
1471
+    def set_dotcode(self, dotcode, filename=None):
1472
+        self.openfilename = None
1469 1473
         if isinstance(dotcode, unicode):
1470 1474
             dotcode = dotcode.encode('utf8')
1471 1475
         xdotcode = self.run_filter(dotcode)
... ...
@@ -1482,6 +1486,10 @@ class DotWidget(gtk.DrawingArea):
1482 1486
             dialog.destroy()
1483 1487
             return False
1484 1488
         else:
1489
+            if filename is None:
1490
+                self.last_mtime = None
1491
+            else:
1492
+                self.last_mtime = os.stat(filename).st_mtime
1485 1493
             self.openfilename = filename
1486 1494
             return True
1487 1495
 
... ...
@@ -1500,6 +1508,14 @@ class DotWidget(gtk.DrawingArea):
1500 1508
             except IOError:
1501 1509
                 pass
1502 1510
 
1511
+    def update(self):
1512
+        if self.openfilename is not None:
1513
+            current_mtime = os.stat(self.openfilename).st_mtime
1514
+            if current_mtime != self.last_mtime:
1515
+                self.last_mtime = current_mtime
1516
+                self.reload()
1517
+        return True
1518
+
1503 1519
     def do_expose_event(self, event):
1504 1520
         cr = self.window.cairo_create()
1505 1521
 
... ...
@@ -1749,6 +1765,8 @@ class DotWindow(gtk.Window):
1749 1765
     </ui>
1750 1766
     '''
1751 1767
 
1768
+    base_title = 'Dot Viewer'
1769
+
1752 1770
     def __init__(self):
1753 1771
         gtk.Window.__init__(self)
1754 1772
 
... ...
@@ -1756,7 +1774,7 @@ class DotWindow(gtk.Window):
1756 1774
 
1757 1775
         window = self
1758 1776
 
1759
-        window.set_title('Dot Viewer')
1777
+        window.set_title(self.base_title)
1760 1778
         window.set_default_size(512, 512)
1761 1779
         vbox = gtk.VBox()
1762 1780
         window.add(vbox)
... ...
@@ -1800,30 +1818,24 @@ class DotWindow(gtk.Window):
1800 1818
 
1801 1819
         self.show_all()
1802 1820
 
1803
-    def update(self, filename):
1804
-        import os
1805
-        if not hasattr(self, "last_mtime"):
1806
-            self.last_mtime = None
1807
-
1808
-        current_mtime = os.stat(filename).st_mtime
1809
-        if current_mtime != self.last_mtime:
1810
-            self.last_mtime = current_mtime
1811
-            self.open_file(filename)
1812
-
1813
-        return True
1814
-
1815 1821
     def set_filter(self, filter):
1816 1822
         self.widget.set_filter(filter)
1817 1823
 
1818
-    def set_dotcode(self, dotcode, filename='<stdin>'):
1824
+    def set_dotcode(self, dotcode, filename=None):
1819 1825
         if self.widget.set_dotcode(dotcode, filename):
1820
-            self.set_title(os.path.basename(filename) + ' - Dot Viewer')
1826
+            self.update_title(filename)
1821 1827
             self.widget.zoom_to_fit()
1822 1828
 
1823
-    def set_xdotcode(self, xdotcode, filename='<stdin>'):
1829
+    def set_xdotcode(self, xdotcode, filename=None):
1824 1830
         if self.widget.set_xdotcode(xdotcode):
1825
-            self.set_title(os.path.basename(filename) + ' - Dot Viewer')
1831
+            self.update_title(filename)
1826 1832
             self.widget.zoom_to_fit()
1833
+        
1834
+    def update_title(self, filename=None):
1835
+        if filename is None:
1836
+            self.set_title(self.base_title)
1837
+        else:
1838
+            self.set_title(os.path.basename(filename) + ' - ' + self.base_title)
1827 1839
 
1828 1840
     def open_file(self, filename):
1829 1841
         try:
... ...
@@ -1834,7 +1846,7 @@ class DotWindow(gtk.Window):
1834 1846
             dlg = gtk.MessageDialog(type=gtk.MESSAGE_ERROR,
1835 1847
                                     message_format=str(ex),
1836 1848
                                     buttons=gtk.BUTTONS_OK)
1837
-            dlg.set_title('Dot Viewer')
1849
+            dlg.set_title(self.base_title)
1838 1850
             dlg.run()
1839 1851
             dlg.destroy()
1840 1852
 
... ...
@@ -1893,7 +1905,6 @@ def main():
1893 1905
             win.set_dotcode(sys.stdin.read())
1894 1906
         else:
1895 1907
             win.open_file(args[0])
1896
-            gobject.timeout_add(1000, win.update, args[0])
1897 1908
     gtk.main()
1898 1909
 
1899 1910