static void eject_action_cb (GSimpleAction *action, GVariant *parameter, gpointer data) { RBRemovableMediaManager *mgr = RB_REMOVABLE_MEDIA_MANAGER (data); RBRemovableMediaManagerPrivate *priv = GET_PRIVATE (mgr); RBDisplayPage *page; g_object_get (priv->shell, "selected-page", &page, NULL); if (RB_IS_DEVICE_SOURCE (page)) { rb_device_source_eject (RB_DEVICE_SOURCE (page)); } }
static void rb_removable_media_manager_dispose (GObject *object) { RBRemovableMediaManager *mgr = RB_REMOVABLE_MEDIA_MANAGER (object); RBRemovableMediaManagerPrivate *priv = GET_PRIVATE (mgr); if (priv->volume_monitor != NULL) { g_signal_handler_disconnect (priv->volume_monitor, priv->mount_added_id); g_signal_handler_disconnect (priv->volume_monitor, priv->mount_pre_unmount_id); g_signal_handler_disconnect (priv->volume_monitor, priv->mount_removed_id); g_signal_handler_disconnect (priv->volume_monitor, priv->volume_added_id); g_signal_handler_disconnect (priv->volume_monitor, priv->volume_removed_id); priv->mount_added_id = 0; priv->mount_pre_unmount_id = 0; priv->mount_removed_id = 0; priv->volume_added_id = 0; priv->volume_removed_id = 0; g_object_unref (priv->volume_monitor); priv->volume_monitor = NULL; } #if defined(HAVE_GUDEV) if (priv->gudev_client != NULL) { g_signal_handler_disconnect (priv->gudev_client, priv->uevent_id); priv->uevent_id = 0; g_object_unref (priv->gudev_client); priv->gudev_client = NULL; } #endif if (priv->sources) { g_list_free (priv->sources); priv->sources = NULL; } if (priv->page_changed_id != 0) { g_signal_handler_disconnect (priv->shell, priv->page_changed_id); priv->page_changed_id = 0; } G_OBJECT_CLASS (rb_removable_media_manager_parent_class)->dispose (object); }
static void rb_removable_media_manager_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { RBRemovableMediaManagerPrivate *priv = GET_PRIVATE (object); switch (prop_id) { case PROP_SOURCE: { GtkAction *action; gboolean can_eject; priv->selected_source = g_value_get_object (value); /* make 'eject' command sensitive if the source can be ejected. */ action = gtk_action_group_get_action (priv->actiongroup, "RemovableSourceEject"); can_eject = rb_removable_media_manager_source_can_eject (RB_REMOVABLE_MEDIA_MANAGER (object)); gtk_action_set_sensitive (action, can_eject); break; } case PROP_SHELL: { GtkUIManager *uimanager; priv->shell = g_value_get_object (value); g_object_get (priv->shell, "ui-manager", &uimanager, NULL); rb_removable_media_manager_set_uimanager (RB_REMOVABLE_MEDIA_MANAGER (object), uimanager); g_object_unref (uimanager); break; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void rb_removable_media_manager_constructed (GObject *object) { RBRemovableMediaManager *mgr = RB_REMOVABLE_MEDIA_MANAGER (object); RBRemovableMediaManagerPrivate *priv = GET_PRIVATE (mgr); GApplication *app; GActionEntry actions[] = { { "check-devices", check_devices_action_cb }, { "removable-media-eject", eject_action_cb } }; RB_CHAIN_GOBJECT_METHOD (rb_removable_media_manager_parent_class, constructed, object); app = g_application_get_default (); g_action_map_add_action_entries (G_ACTION_MAP (app), actions, G_N_ELEMENTS (actions), mgr); priv->page_changed_id = g_signal_connect (priv->shell, "notify::selected-page", G_CALLBACK (page_changed_cb), mgr); }
static void check_devices_action_cb (GSimpleAction *action, GVariant *parameter, gpointer data) { rb_removable_media_manager_scan (RB_REMOVABLE_MEDIA_MANAGER (data)); }