[gnome-system-monitor] Disks tab improvements (bgo #704838)



commit 3018f5a1ff3da1615cef0f8117901e74cfd31f2b
Author: Stefano Facchini <stefano facchini gmail com>
Date:   Thu Jul 25 03:28:26 2013 +0300

    Disks tab improvements (bgo #704838)

 src/disks.cpp       |   55 +++++++++++++++++++++++++++++++++++++++++++++++---
 src/disks.h         |   10 ++++----
 src/interface.cpp   |   14 ++----------
 src/procman-app.cpp |   32 +---------------------------
 4 files changed, 61 insertions(+), 50 deletions(-)
---
diff --git a/src/disks.cpp b/src/disks.cpp
index 6d2e795..58cb393 100644
--- a/src/disks.cpp
+++ b/src/disks.cpp
@@ -213,12 +213,24 @@ add_disk(GtkListStore *list, const glibtop_mountentry *entry, bool show_all_fs)
                        -1);
 }
 
+static void
+mount_changed (GVolumeMonitor *monitor, GMount *mount, ProcmanApp *app)
+{
+    disks_update(app);
+}
 
+static gboolean
+cb_timeout (gpointer data)
+{
+    ProcmanApp *app = (ProcmanApp *) data;
+    disks_update (app);
+
+    return G_SOURCE_CONTINUE;
+}
 
-int
-cb_update_disks(gpointer data)
+void
+disks_update(ProcmanApp *app)
 {
-    ProcmanApp *app = static_cast<ProcmanApp *>(data);
     GtkListStore *list;
     glibtop_mountentry * entries;
     glibtop_mountlist mountlist;
@@ -234,10 +246,44 @@ cb_update_disks(gpointer data)
         add_disk(list, &entries[i], app->config.show_all_fs);
 
     g_free(entries);
+}
+
+static void
+init_volume_monitor (ProcmanApp *app)
+{
+    GVolumeMonitor *monitor = g_volume_monitor_get ();
 
-    return TRUE;
+    g_signal_connect (monitor, "mount-added", G_CALLBACK (mount_changed), app);
+    g_signal_connect (monitor, "mount-changed", G_CALLBACK (mount_changed), app);
+    g_signal_connect (monitor, "mount-removed", G_CALLBACK (mount_changed), app);
 }
 
+void
+disks_freeze (ProcmanApp *app)
+{
+  if (app->disk_timeout) {
+      g_source_remove (app->disk_timeout);
+      app->disk_timeout = 0;
+  }
+}
+
+void
+disks_thaw (ProcmanApp *app)
+{
+  if (app->disk_timeout)
+      return;
+
+  app->disk_timeout = g_timeout_add (app->config.disks_update_interval,
+                                     cb_timeout,
+                                     app);
+}
+
+void
+disks_reset_timeout (ProcmanApp *app)
+{
+    disks_freeze (app);
+    disks_thaw (app);
+}
 
 static void
 cb_disk_columns_changed(GtkTreeView *treeview, gpointer data)
@@ -299,6 +345,7 @@ create_disk_view(ProcmanApp *app, GtkBuilder *builder)
     GtkCellRenderer *cell;
     guint i;
 
+    init_volume_monitor (app);
     const gchar * const titles[] = {
         N_("Device"),
         N_("Directory"),
diff --git a/src/disks.h b/src/disks.h
index d3acf47..3c4ab26 100644
--- a/src/disks.h
+++ b/src/disks.h
@@ -3,10 +3,10 @@
 
 #include "procman-app.h"
 
-void
-create_disk_view(ProcmanApp *app, GtkBuilder *builder);
-
-int
-cb_update_disks(gpointer procdata);
+void create_disk_view(ProcmanApp *app, GtkBuilder *builder);
 
+void disks_update (ProcmanApp *app);
+void disks_freeze (ProcmanApp *app);
+void disks_thaw (ProcmanApp *app);
+void disks_reset_timeout (ProcmanApp *app);
 #endif /* H_GNOME_SYSTEM_MONITOR_DISKLIST_1123719137 */
diff --git a/src/interface.cpp b/src/interface.cpp
index c9945e1..51322cf 100644
--- a/src/interface.cpp
+++ b/src/interface.cpp
@@ -502,18 +502,10 @@ update_page_activities (ProcmanApp *app)
     }
 
     if (current_page == PROCMAN_TAB_DISKS) {
-        cb_update_disks (app);
-
-        if (!app->disk_timeout) {
-            app->disk_timeout = g_timeout_add (app->config.disks_update_interval,
-                                               cb_update_disks,
-                                               app);
-        }
+               disks_update (app);
+               disks_thaw (app);
     } else {
-        if (app->disk_timeout) {
-            g_source_remove (app->disk_timeout);
-            app->disk_timeout = 0;
-        }
+               disks_freeze (app);
     }
 }
 
diff --git a/src/procman-app.cpp b/src/procman-app.cpp
index 5a17fa1..02b971b 100644
--- a/src/procman-app.cpp
+++ b/src/procman-app.cpp
@@ -18,26 +18,6 @@
 #include "disks.h"
 
 static void
-mount_changed(const Glib::RefPtr<Gio::Mount>&, ProcmanApp *app)
-{
-    cb_update_disks(app);
-}
-
-
-static void
-init_volume_monitor(ProcmanApp *app)
-{
-    using namespace Gio;
-    using namespace Glib;
-
-    RefPtr<VolumeMonitor> monitor = VolumeMonitor::get();
-
-    monitor->signal_mount_added().connect(sigc::bind<ProcmanApp *>(sigc::ptr_fun(&mount_changed), app));
-    monitor->signal_mount_changed().connect(sigc::bind<ProcmanApp *>(sigc::ptr_fun(&mount_changed), app));
-    monitor->signal_mount_removed().connect(sigc::bind<ProcmanApp *>(sigc::ptr_fun(&mount_changed), app));
-}
-
-static void
 cb_show_dependencies_changed (GSettings *settings, const gchar *key, gpointer data)
 {
     ProcmanApp *app = static_cast<ProcmanApp *>(data);
@@ -121,13 +101,7 @@ timeouts_changed_cb (GSettings *settings, const gchar *key, gpointer data)
         app->config.disks_update_interval =
             MAX (app->config.disks_update_interval, 1000);
 
-        if(app->disk_timeout) {
-            g_source_remove (app->disk_timeout);
-            app->disk_timeout = \
-                g_timeout_add (app->config.disks_update_interval,
-                               cb_update_disks,
-                               app);
-        }
+        disks_reset_timeout (app);
     }
     else {
         g_assert_not_reached();
@@ -221,7 +195,7 @@ show_all_fs_changed_cb (GSettings *settings, const gchar *key, gpointer data)
 
     app->config.show_all_fs = g_settings_get_boolean (settings, key);
 
-    cb_update_disks (app);
+    disks_update (app);
 }
 
 void
@@ -680,8 +654,6 @@ void ProcmanApp::on_startup()
 
     create_main_window (this);
 
-    init_volume_monitor (this);
-
     add_accelerator ("<Alt>1", "win.show-page", g_variant_new_int32 (PROCMAN_TAB_PROCESSES));
     add_accelerator ("<Alt>2", "win.show-page", g_variant_new_int32 (PROCMAN_TAB_RESOURCES));
     add_accelerator ("<Alt>3", "win.show-page", g_variant_new_int32 (PROCMAN_TAB_DISKS));


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