static void disconnect_view (GtkSourceMap *map) { GtkSourceMapPrivate *priv; GtkAdjustment *vadj; priv = gtk_source_map_get_instance_private (map); if (priv->view == NULL) { return; } disconnect_buffer (map); if (priv->buffer_binding != NULL) { g_object_remove_weak_pointer (G_OBJECT (priv->buffer_binding), (gpointer *)&priv->buffer_binding); g_binding_unbind (priv->buffer_binding); priv->buffer_binding = NULL; } if (priv->indent_width_binding != NULL) { g_object_remove_weak_pointer (G_OBJECT (priv->indent_width_binding), (gpointer *)&priv->indent_width_binding); g_binding_unbind (priv->indent_width_binding); priv->indent_width_binding = NULL; } if (priv->tab_width_binding != NULL) { g_object_remove_weak_pointer (G_OBJECT (priv->tab_width_binding), (gpointer *)&priv->tab_width_binding); g_binding_unbind (priv->tab_width_binding); priv->tab_width_binding = NULL; } if (priv->view_notify_buffer_handler != 0) { g_signal_handler_disconnect (priv->view, priv->view_notify_buffer_handler); priv->view_notify_buffer_handler = 0; } vadj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (priv->view)); if (vadj != NULL) { g_signal_handler_disconnect (vadj, priv->view_vadj_value_changed_handler); priv->view_vadj_value_changed_handler = 0; g_signal_handler_disconnect (vadj, priv->view_vadj_notify_upper_handler); priv->view_vadj_notify_upper_handler = 0; } g_object_remove_weak_pointer (G_OBJECT (priv->view), (gpointer *)&priv->view); priv->view = NULL; }
void gb_view_stack_set_active_view (GbViewStack *self, GtkWidget *active_view) { g_return_if_fail (GB_IS_VIEW_STACK (self)); g_return_if_fail (!active_view || GB_IS_VIEW (active_view)); if (self->destroyed) return; if (self->active_view != active_view) { if (self->active_view) { if (self->title_binding) g_binding_unbind (self->title_binding); ide_clear_weak_pointer (&self->title_binding); if (self->modified_binding) g_binding_unbind (self->modified_binding); ide_clear_weak_pointer (&self->modified_binding); gtk_label_set_label (self->title_label, NULL); ide_clear_weak_pointer (&self->active_view); gtk_widget_hide (GTK_WIDGET (self->controls_stack)); } if (active_view) { GtkWidget *controls; GBinding *binding; GActionGroup *group; ide_set_weak_pointer (&self->active_view, active_view); if (active_view != gtk_stack_get_visible_child (self->stack)) gtk_stack_set_visible_child (self->stack, active_view); self->focus_history = g_list_remove (self->focus_history, active_view); self->focus_history = g_list_prepend (self->focus_history, active_view); binding = g_object_bind_property (active_view, "title", self->title_label, "label", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); ide_set_weak_pointer (&self->title_binding, binding); binding = g_object_bind_property (active_view, "modified", self->modified_label, "visible", G_BINDING_SYNC_CREATE); ide_set_weak_pointer (&self->modified_binding, binding); controls = gb_view_get_controls (GB_VIEW (active_view)); if (controls) { gtk_stack_set_visible_child (self->controls_stack, controls); gtk_widget_show (GTK_WIDGET (self->controls_stack)); } group = gtk_widget_get_action_group (active_view, "view"); if (group) gtk_widget_insert_action_group (GTK_WIDGET (self), "view", group); gb_view_stack_move_top_list_row (self, GB_VIEW (active_view)); } g_object_notify_by_pspec (G_OBJECT (self), gParamSpecs [PROP_ACTIVE_VIEW]); } }