static void notify_buffer_cb (GtkTextView *text_view, GParamSpec *pspec, IdeLineChangeGutterRenderer *self) { disconnect_buffer (self); connect_buffer (self); }
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; }
static void disconnect_view (IdeLineChangeGutterRenderer *self) { disconnect_buffer (self); if (self->text_view && self->text_view_notify_buffer) { g_signal_handler_disconnect (self->text_view, self->text_view_notify_buffer); self->text_view_notify_buffer = 0; g_clear_weak_pointer (&self->text_view); } }
static void gtk_source_map_destroy (GtkWidget *widget) { GtkSourceMap *map = GTK_SOURCE_MAP (widget); GtkSourceMapPrivate *priv; priv = gtk_source_map_get_instance_private (map); disconnect_buffer (map); disconnect_view (map); g_clear_object (&priv->css_provider); g_clear_pointer (&priv->font_desc, pango_font_description_free); GTK_WIDGET_CLASS (gtk_source_map_parent_class)->destroy (widget); }
static void view_notify_buffer (GtkSourceMap *map, GParamSpec *pspec, GtkSourceView *view) { GtkSourceMapPrivate *priv; GtkTextBuffer *buffer; priv = gtk_source_map_get_instance_private (map); if (priv->buffer != NULL) { disconnect_buffer (map); } buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); if (buffer != NULL) { connect_buffer (map, buffer); } }