static void bt_cmd_pattern_get_property (GObject * const object, const guint property_id, GValue * const value, GParamSpec * const pspec) { const BtCmdPattern *const self = BT_CMD_PATTERN (object); return_if_disposed (); switch (property_id) { case CMD_PATTERN_SONG: g_value_set_object (value, self->priv->song); break; case CMD_PATTERN_NAME: g_value_set_string (value, self->priv->name); break; case CMD_PATTERN_MACHINE: g_value_set_object (value, self->priv->machine); break; case CMD_PATTERN_COMMAND: g_value_set_enum (value, self->priv->cmd); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void bt_edit_application_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) { BtEditApplication *self = BT_EDIT_APPLICATION (object); return_if_disposed (); switch (property_id) { case EDIT_APPLICATION_SONG: #ifdef USE_DEBUG if (G_OBJECT_REF_COUNT (self->priv->song) != 1) { GST_DEBUG ("old song: %" G_OBJECT_REF_COUNT_FMT, G_OBJECT_LOG_REF_COUNT (self->priv->song)); } #endif g_object_try_unref (self->priv->song); self->priv->song = BT_SONG (g_value_dup_object (value)); GST_DEBUG ("new song: %" G_OBJECT_REF_COUNT_FMT, G_OBJECT_LOG_REF_COUNT (self->priv->song)); break; case EDIT_APPLICATION_UNSAVED: self->priv->unsaved = g_value_get_boolean (value); GST_INFO ("set the unsaved flag to %d for the song", self->priv->unsaved); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void bt_cmd_pattern_set_property (GObject * const object, const guint property_id, const GValue * const value, GParamSpec * const pspec) { BtCmdPattern *const self = BT_CMD_PATTERN (object); return_if_disposed (); switch (property_id) { case CMD_PATTERN_SONG: self->priv->song = BT_SONG (g_value_get_object (value)); g_object_try_weak_ref (self->priv->song); //GST_DEBUG("set the song for pattern: %p",self->priv->song); break; case CMD_PATTERN_NAME: g_free (self->priv->name); self->priv->name = g_value_dup_string (value); GST_DEBUG ("set the display name for the pattern: '%s'", self->priv->name); break; case CMD_PATTERN_MACHINE: self->priv->machine = BT_MACHINE (g_value_get_object (value)); g_object_try_weak_ref (self->priv->machine); break; case CMD_PATTERN_COMMAND: self->priv->cmd = g_value_get_enum (value); GST_DEBUG ("set the cmd for the pattern: %d", self->priv->cmd); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void bt_main_pages_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) { BtMainPages *self = BT_MAIN_PAGES (object); return_if_disposed (); switch (property_id) { case MAIN_PAGES_MACHINES_PAGE: g_value_set_object (value, self->priv->machines_page); break; case MAIN_PAGES_PATTERNS_PAGE: g_value_set_object (value, self->priv->patterns_page); break; case MAIN_PAGES_SEQUENCE_PAGE: g_value_set_object (value, self->priv->sequence_page); break; case MAIN_PAGES_WAVES_PAGE: g_value_set_object (value, self->priv->waves_page); break; case MAIN_PAGES_INFO_PAGE: g_value_set_object (value, self->priv->info_page); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void bt_settings_dialog_dispose (GObject * object) { BtSettingsDialog *self = BT_SETTINGS_DIALOG (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; GST_DEBUG ("!!!! self=%p", self); g_object_unref (self->priv->app); G_OBJECT_CLASS (bt_settings_dialog_parent_class)->dispose (object); }
static void bt_cmd_pattern_dispose (GObject * const object) { const BtCmdPattern *const self = BT_CMD_PATTERN (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; g_object_try_weak_unref (self->priv->machine); g_object_try_weak_unref (self->priv->song); G_OBJECT_CLASS (bt_cmd_pattern_parent_class)->dispose (object); }
static void bt_main_pages_dispose (GObject * object) { BtMainPages *self = BT_MAIN_PAGES (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; GST_DEBUG ("!!!! self=%p", self); g_object_unref (self->priv->app); // this disposes the pages for us G_OBJECT_CLASS (bt_main_pages_parent_class)->dispose (object); }
static void bt_crash_recover_dialog_dispose (GObject * object) { BtCrashRecoverDialog *self = BT_CRASH_RECOVER_DIALOG (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; GST_DEBUG ("!!!! self=%p", self); g_object_unref (self->priv->app); G_OBJECT_CLASS (bt_crash_recover_dialog_parent_class)->dispose (object); }
static void bt_song_info_get_property (GObject * const object, const guint property_id, GValue * const value, GParamSpec * const pspec) { const BtSongInfo *const self = BT_SONG_INFO (object); return_if_disposed (); switch (property_id) { case SONG_INFO_SONG: g_value_set_object (value, self->priv->song); break; case SONG_INFO_TAGLIST: g_value_set_pointer (value, gst_tag_list_copy (self->priv->taglist)); break; case SONG_INFO_FILE_NAME: g_value_set_string (value, self->priv->file_name); break; case SONG_INFO_INFO: g_value_set_string (value, self->priv->info); break; case SONG_INFO_NAME: g_value_set_string (value, self->priv->name); break; case SONG_INFO_GENRE: g_value_set_string (value, self->priv->genre); break; case SONG_INFO_AUTHOR: g_value_set_string (value, self->priv->author); break; case SONG_INFO_BPM: g_value_set_ulong (value, self->priv->beats_per_minute); break; case SONG_INFO_TPB: g_value_set_ulong (value, self->priv->ticks_per_beat); break; case SONG_INFO_BARS: g_value_set_ulong (value, self->priv->bars); break; case SONG_INFO_CREATE_DTS: g_value_set_string (value, self->priv->create_dts); break; case SONG_INFO_CHANGE_DTS: g_value_set_string (value, self->priv->change_dts); break; case SONG_INFO_TICK_DURATION: g_value_set_uint64 (value, self->priv->tick_duration); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void btic_device_dispose (GObject * const object) { const BtIcDevice *const self = BTIC_DEVICE (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; GST_DEBUG ("!!!! self=%p", self); GST_DEBUG (" chaining up"); G_OBJECT_CLASS (btic_device_parent_class)->dispose (object); GST_DEBUG (" done"); }
static void bt_song_info_dispose (GObject * const object) { const BtSongInfo *const self = BT_SONG_INFO (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; GST_DEBUG ("!!!! self=%p", self); g_object_try_weak_unref (self->priv->song); gst_tag_list_unref (self->priv->taglist); G_OBJECT_CLASS (bt_song_info_parent_class)->dispose (object); }
static void bt_settings_dialog_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) { BtSettingsDialog *self = BT_SETTINGS_DIALOG (object); return_if_disposed (); switch (property_id) { case PROP_PAGE: select_page (self, g_value_get_enum (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void bt_crash_recover_dialog_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) { BtCrashRecoverDialog *self = BT_CRASH_RECOVER_DIALOG (object); return_if_disposed (); switch (property_id) { case CRASH_RECOVER_DIALOG_ENTRIES: self->priv->entries = g_value_get_pointer (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void bt_wavelevel_dispose (GObject * const object) { const BtWavelevel *const self = BT_WAVELEVEL (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; GST_DEBUG ("!!!! self=%p", self); g_object_try_weak_unref (self->priv->song); g_object_try_weak_unref (self->priv->wave); G_OBJECT_CLASS (bt_wavelevel_parent_class)->dispose (object); }
static void btic_control_dispose (GObject * const object) { const BtIcControl *const self = BTIC_CONTROL (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; GST_DEBUG ("!!!! self=%p", self); g_object_try_weak_unref (self->priv->device); GST_DEBUG (" chaining up"); G_OBJECT_CLASS (btic_control_parent_class)->dispose (object); GST_DEBUG (" done"); }
static void bt_main_page_info_dispose (GObject * object) { BtMainPageInfo *self = BT_MAIN_PAGE_INFO (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; GST_DEBUG ("!!!! self=%p", self); g_object_try_unref (self->priv->song_info); g_object_unref (self->priv->app); GST_DEBUG (" chaining up"); G_OBJECT_CLASS (bt_main_page_info_parent_class)->dispose (object); }
static void bt_settings_page_interaction_controller_set_property (GObject * const object, const guint property_id, const GValue * const value, GParamSpec * const pspec) { BtSettingsPageInteractionController *self = BT_SETTINGS_PAGE_INTERACTION_CONTROLLER (object); return_if_disposed (); switch (property_id) { case PROP_DEVICE: select_device (self, BTIC_DEVICE (g_value_get_object (value))); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void bt_wavetable_set_property (GObject * const object, const guint property_id, const GValue * const value, GParamSpec * const pspec) { const BtWavetable *const self = BT_WAVETABLE (object); return_if_disposed (); switch (property_id) { case WAVETABLE_SONG: self->priv->song = BT_SONG (g_value_get_object (value)); g_object_try_weak_ref (self->priv->song); //GST_DEBUG("set the song for wavetable: %p",self->priv->song); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void bt_playback_controller_socket_dispose (GObject * object) { BtPlaybackControllerSocket *self = BT_PLAYBACK_CONTROLLER_SOCKET (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; GST_DEBUG ("!!!! self=%p", self); g_object_try_weak_unref (self->priv->gain); g_object_try_weak_unref (self->priv->sequence); g_object_try_weak_unref (self->priv->song_info); g_object_try_weak_unref (self->priv->app); master_connection_close (self); G_OBJECT_CLASS (bt_playback_controller_socket_parent_class)->dispose (object); }
static void btic_device_set_property (GObject * const object, const guint property_id, const GValue * const value, GParamSpec * const pspec) { const BtIcDevice *const self = BTIC_DEVICE (object); return_if_disposed (); switch (property_id) { case DEVICE_UDI: self->priv->udi = g_value_dup_string (value); break; case DEVICE_NAME: self->priv->name = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void btic_midi_device_get_property (GObject * const object, const guint property_id, GValue * const value, GParamSpec * const pspec) { const BtIcMidiDevice *const self = BTIC_MIDI_DEVICE (object); return_if_disposed (); switch (property_id) { case DEVICE_DEVNODE: g_value_set_string (value, self->priv->devnode); break; case DEVICE_CONTROLCHANGE: g_value_set_string (value, self->priv->control_change); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void bt_edit_application_dispose (GObject * object) { BtEditApplication *self = BT_EDIT_APPLICATION (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; /* This should destroy the window as this is a child of the app. * Problem 1: On the other hand, this *NEVER* gets called as long as the window keeps its * strong reference to the app. * Solution 1: Only use weak refs when reffing upstream objects */ GST_DEBUG ("!!!! self=%p", self); if (self->priv->song) { GST_INFO ("song: %" G_OBJECT_REF_COUNT_FMT, G_OBJECT_LOG_REF_COUNT (self->priv->song)); bt_song_stop (self->priv->song); g_object_unref (self->priv->song); self->priv->song = NULL; } if (self->priv->main_window) { GST_INFO ("main_window: %" G_OBJECT_REF_COUNT_FMT, G_OBJECT_LOG_REF_COUNT (self->priv->main_window)); //main-menu.c::on_menu_quit_activate gtk_widget_destroy (GTK_WIDGET (self->priv->main_window)); } GST_DEBUG (" more unrefs"); g_object_try_unref (self->priv->ui_resources); g_object_try_unref (self->priv->pbc_socket); g_object_try_unref (self->priv->pbc_ic); g_object_try_unref (self->priv->ic_registry); g_object_try_unref (self->priv->change_log); g_object_try_unref (self->priv->audio_session); GST_DEBUG (" chaining up"); G_OBJECT_CLASS (bt_edit_application_parent_class)->dispose (object); GST_DEBUG (" done"); }
static void bt_settings_page_interaction_controller_dispose (GObject * object) { BtSettingsPageInteractionController *self = BT_SETTINGS_PAGE_INTERACTION_CONTROLLER (object); return_if_disposed (); self->priv->dispose_has_run = TRUE; GST_DEBUG ("!!!! self=%p", self); if (self->priv->device) { stop_device (self); } g_object_unref (self->priv->app); G_OBJECT_CLASS (bt_settings_page_interaction_controller_parent_class)->dispose (object); }
static void btic_control_set_property (GObject * const object, const guint property_id, const GValue * const value, GParamSpec * const pspec) { const BtIcControl *const self = BTIC_CONTROL (object); return_if_disposed (); switch (property_id) { case CONTROL_DEVICE: self->priv->device = BTIC_DEVICE (g_value_get_object (value)); g_object_try_weak_ref (self->priv->device); break; case CONTROL_NAME:{ gchar *new_name = g_value_dup_string (value); if (!self->priv->name) { self->priv->name = new_name; GST_DEBUG ("setting initial name '%s'!", self->priv->name); } else { if (BTIC_IS_LEARN (self->priv->device)) { gchar *old_name = self->priv->name; self->priv->name = new_name; GST_DEBUG ("updating name '%s'!", self->priv->name); btic_learn_store_controller_map (BTIC_LEARN (self->priv->device)); g_free (old_name); } else { GST_WARNING ("can't change control name '%s'!", self->priv->name); g_free (new_name); } } break; } case CONTROL_ID: self->priv->id = g_value_get_uint (value); break; case CONTROL_BOUND: self->priv->bound = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void btic_device_get_property (GObject * const object, const guint property_id, GValue * const value, GParamSpec * const pspec) { const BtIcDevice *const self = BTIC_DEVICE (object); return_if_disposed (); switch (property_id) { case DEVICE_UDI: g_value_set_string (value, self->priv->udi); break; case DEVICE_NAME: g_value_set_string (value, self->priv->name); break; case DEVICE_CONTROLS: g_value_set_pointer (value, g_list_copy (self->priv->controls)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void bt_wavetable_get_property (GObject * const object, const guint property_id, GValue * const value, GParamSpec * const pspec) { const BtWavetable *const self = BT_WAVETABLE (object); return_if_disposed (); switch (property_id) { case WAVETABLE_SONG: g_value_set_object (value, self->priv->song); break; case WAVETABLE_WAVES: g_value_set_pointer (value, g_list_copy (self->priv->waves)); break; case WAVETABLE_MISSING_WAVES: g_value_set_pointer (value, self->priv->missing_waves); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void bt_settings_dialog_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) { BtSettingsDialog *self = BT_SETTINGS_DIALOG (object); return_if_disposed (); switch (property_id) { case PROP_PAGE: g_value_set_enum (value, self->priv->page); break; case PROP_PAGE_WIDGET: switch (self->priv->page) { case BT_SETTINGS_PAGE_AUDIO_DEVICES: g_value_set_object (value, self->priv->audiodevices_page); break; case BT_SETTINGS_PAGE_DIRECTORIES: g_value_set_object (value, self->priv->directories_page); break; case BT_SETTINGS_PAGE_INTERACTION_CONTROLLER: g_value_set_object (value, self->priv->interaction_controller_page); break; case BT_SETTINGS_PAGE_PLAYBACK_CONTROLLER: g_value_set_object (value, self->priv->playback_controller_page); break; case BT_SETTINGS_PAGE_SHORTCUTS: g_value_set_object (value, self->priv->shortcuts_page); break; case BT_SETTINGS_PAGE_UI: g_value_set_object (value, self->priv->ui_page); break; default: g_assert_not_reached (); break; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void on_settings_list_cursor_changed (GtkTreeView * treeview, gpointer user_data) { BtSettingsDialog *self = BT_SETTINGS_DIALOG (user_data); GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; return_if_disposed (); GST_INFO ("settings list cursor changed"); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->settings_list)); if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gulong id; gtk_tree_model_get (model, &iter, COL_ID, &id, -1); GST_INFO ("selected entry id %lu", id); gtk_notebook_set_current_page (self->priv->settings_pages, id); self->priv->page = id; g_object_notify ((gpointer) self, "page"); } }
static void bt_edit_application_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) { BtEditApplication *self = BT_EDIT_APPLICATION (object); return_if_disposed (); switch (property_id) { case EDIT_APPLICATION_SONG: g_value_set_object (value, self->priv->song); break; case EDIT_APPLICATION_MAIN_WINDOW: g_value_set_object (value, self->priv->main_window); break; case EDIT_APPLICATION_IC_REGISTRY: g_value_set_object (value, self->priv->ic_registry); break; case EDIT_APPLICATION_UNSAVED: g_value_set_boolean (value, self->priv->unsaved); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void btic_control_get_property (GObject * const object, const guint property_id, GValue * const value, GParamSpec * const pspec) { const BtIcControl *const self = BTIC_CONTROL (object); return_if_disposed (); switch (property_id) { case CONTROL_DEVICE: g_value_set_object (value, self->priv->device); break; case CONTROL_NAME: g_value_set_string (value, self->priv->name); break; case CONTROL_ID: g_value_set_uint (value, self->priv->id); break; case CONTROL_BOUND: g_value_set_boolean (value, self->priv->bound); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }