[simple-scan/gnome-3-4: 9/25] Disconnect signals when objects are unreferenced



commit 2adf2e8153d44b191191456bd4c635cb915224a5
Author: Robert Ancell <robert ancell canonical com>
Date:   Fri Mar 22 09:36:41 2013 +1300

    Disconnect signals when objects are unreferenced

 src/book-view.vala |   20 ++++++++++++++++++++
 src/book.vala      |   15 +++++++++++++++
 src/page-view.vala |    9 +++++++++
 src/ui.vala        |   12 ++++++++++++
 4 files changed, 56 insertions(+), 0 deletions(-)
---
diff --git a/src/book-view.vala b/src/book-view.vala
index 3acd14e..7c86d61 100644
--- a/src/book-view.vala
+++ b/src/book-view.vala
@@ -85,6 +85,23 @@ public class BookView : Gtk.VBox
         drawing_area.show ();
     }
 
+    ~BookView ()
+    {
+        book.page_added.disconnect (add_cb);
+        book.page_removed.disconnect (remove_cb);
+        book.reordered.disconnect (reorder_cb);
+        book.cleared.disconnect (clear_cb);
+        drawing_area.configure_event.disconnect (configure_cb);
+        drawing_area.draw.disconnect (draw_cb);
+        drawing_area.motion_notify_event.disconnect (motion_cb);
+        drawing_area.key_press_event.disconnect (key_cb);
+        drawing_area.button_press_event.disconnect (button_cb);
+        drawing_area.button_release_event.disconnect (button_cb);
+        drawing_area.focus_in_event.disconnect (focus_cb);
+        drawing_area.focus_out_event.disconnect (focus_cb);
+        adjustment.value_changed.disconnect (scroll_cb);
+    }
+
     private PageView get_nth_page (int n)
     {
         Page page = book.get_page (n);
@@ -221,6 +238,9 @@ public class BookView : Gtk.VBox
             selected_page = null;
         }
 
+        var page_view = page_data.lookup (page);
+        page_view.changed.disconnect (page_view_changed_cb);
+        page_view.size_changed.disconnect (page_view_size_changed_cb);
         page_data.remove (page);
 
         select_page_view (new_selection);
diff --git a/src/book.vala b/src/book.vala
index 76a1901..21e488e 100644
--- a/src/book.vala
+++ b/src/book.vala
@@ -23,10 +23,25 @@ public class Book
 
     public Book ()
     {
+        pages = new List<Page> ();
+    }
+
+    ~Book ()
+    {
+        foreach (var page in pages)
+        {
+            page.pixels_changed.disconnect (page_changed_cb);
+            page.crop_changed.disconnect (page_changed_cb);
+        }
     }
 
     public void clear ()
     {
+        foreach (var page in pages)
+        {
+            page.pixels_changed.disconnect (page_changed_cb);
+            page.crop_changed.disconnect (page_changed_cb);
+        }
         pages = null;
         cleared ();
     }
diff --git a/src/page-view.vala b/src/page-view.vala
index 97bcaf0..245dbac 100644
--- a/src/page-view.vala
+++ b/src/page-view.vala
@@ -80,6 +80,15 @@ public class PageView
         page.scan_direction_changed.connect (scan_direction_changed_cb);
     }
 
+    ~PageView ()
+    {
+        page.pixels_changed.disconnect (page_pixels_changed_cb);
+        page.size_changed.disconnect (page_size_changed_cb);
+        page.crop_changed.disconnect (page_overlay_changed_cb);
+        page.scan_line_changed.disconnect (page_overlay_changed_cb);
+        page.scan_direction_changed.disconnect (scan_direction_changed_cb);
+    }
+
     public Page get_page ()
     {
         return page;
diff --git a/src/ui.vala b/src/ui.vala
index db19d77..5443aa9 100644
--- a/src/ui.vala
+++ b/src/ui.vala
@@ -101,6 +101,12 @@ public class SimpleScan
         load ();
     }
 
+    ~UserInterface ()
+    {
+        book.page_removed.disconnect (page_removed_cb);
+        book.page_added.disconnect (page_added_cb);
+    }
+
     private bool find_scan_device (string device, out Gtk.TreeIter iter)
     {
         bool have_iter = false;
@@ -424,6 +430,7 @@ public class SimpleScan
 
         settings.set_string ("save-directory", save_dialog.get_current_folder ());
 
+        file_type_view.get_selection ().changed.disconnect (on_file_type_changed);
         save_dialog.destroy ();
         save_dialog = null;
 
@@ -1044,6 +1051,8 @@ public class SimpleScan
         {
             warning ("Error printing: %s", e.message);
         }
+
+        print.draw_page.disconnect (draw_page);
     }
 
     [CCode (cname = "G_MODULE_EXPORT help_contents_menuitem_activate_cb", instance_pos = -1)]
@@ -1197,6 +1206,9 @@ public class SimpleScan
 
     private void page_removed_cb (Book book, Page page)
     {
+        page.size_changed.disconnect (page_size_changed_cb);
+        page.scan_direction_changed.disconnect (page_scan_direction_changed_cb);
+
         /* If this is the last page add a new blank one */
         if (book.get_n_pages () == 1)
             add_default_page ();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]