void SourceEditor::enableFolding() { if (!foldingEnabled()) { m_foldsData.resize(lineCount()); GtkSourceView *view = gtkSourceView(); GtkSourceGutter *gutter = gtk_source_view_get_gutter(view, GTK_TEXT_WINDOW_LEFT); m_foldsRenderer = gtk_source_gutter_renderer_pixbuf_new(); gtk_source_gutter_insert(gutter, m_foldsRenderer, FOLD_POSITION); g_signal_connect(m_foldsRenderer, "activate", G_CALLBACK(activateFold), this); g_signal_connect(m_foldsRenderer, "query-activatable", G_CALLBACK(queryFoldActivatable), this); g_signal_connect(m_foldsRenderer, "query-data", G_CALLBACK(queryFoldData), this); gtk_source_gutter_renderer_set_alignment_mode( m_foldsRenderer, GTK_SOURCE_GUTTER_RENDERER_ALIGNMENT_MODE_FIRST); gtk_source_gutter_renderer_set_size(m_foldsRenderer, measureLineHeight(view) - 2); } }
static void ide_source_map_init (IdeSourceMap *self) { GtkSourceGutter *gutter; gtk_widget_add_events (GTK_WIDGET (self), GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); /* Buffer */ self->buffer_signals = dzl_signal_group_new (IDE_TYPE_BUFFER); dzl_signal_group_connect_object (self->buffer_signals, "line-flags-changed", G_CALLBACK (ide_source_map__buffer_line_flags_changed), self, G_CONNECT_SWAPPED); /* View */ self->view_signals = dzl_signal_group_new (GTK_SOURCE_TYPE_VIEW); dzl_signal_group_connect_object (self->view_signals, "notify::buffer", G_CALLBACK (ide_source_map__view_notify_buffer), self, G_CONNECT_SWAPPED); dzl_signal_group_connect_object (self->view_signals, "enter-notify-event", G_CALLBACK (ide_source_map__enter_notify_event), self, G_CONNECT_SWAPPED); dzl_signal_group_connect_object (self->view_signals, "leave-notify-event", G_CALLBACK (ide_source_map__leave_notify_event), self, G_CONNECT_SWAPPED); dzl_signal_group_connect_object (self->view_signals, "motion-notify-event", G_CALLBACK (ide_source_map__motion_notify_event), self, G_CONNECT_SWAPPED); dzl_signal_group_connect_object (self->view_signals, "scroll-event", G_CALLBACK (ide_source_map__scroll_event), self, G_CONNECT_SWAPPED); g_signal_connect_object (self, "notify::view", G_CALLBACK (ide_source_map__view_changed), self, G_CONNECT_SWAPPED); gutter = gtk_source_view_get_gutter (GTK_SOURCE_VIEW (self), GTK_TEXT_WINDOW_LEFT); self->line_renderer = g_object_new (IDE_TYPE_LINE_CHANGE_GUTTER_RENDERER, "size", 2, "visible", TRUE, NULL); gtk_source_gutter_insert (gutter, self->line_renderer, 0); g_signal_connect_object (self, "enter-notify-event", G_CALLBACK (ide_source_map__enter_notify_event), self, G_CONNECT_SWAPPED); g_signal_connect_object (self, "leave-notify-event", G_CALLBACK (ide_source_map__leave_notify_event), self, G_CONNECT_SWAPPED); g_signal_connect_object (self, "motion-notify-event", G_CALLBACK (ide_source_map__motion_notify_event), self, G_CONNECT_SWAPPED); g_signal_connect_object (self, "scroll-event", G_CALLBACK (ide_source_map__scroll_event), self, G_CONNECT_SWAPPED); }