static void ide_editor_frame_update_ruler (IdeEditorFrame *self) { const gchar *mode_display_name; const gchar *mode_name; GtkTextBuffer *buffer; gboolean visible = FALSE; g_assert (IDE_IS_EDITOR_FRAME (self)); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->source_view)); if (!IDE_IS_BUFFER (buffer)) return; /* update line/column text */ if (self->show_ruler) { g_autofree gchar *text = NULL; guint ln = 0; guint col = 0; ide_source_view_get_visual_position (self->source_view, &ln, &col); text = g_strdup_printf (_("Line %u, Column %u"), ln + 1, col + 1); nautilus_floating_bar_set_primary_label (self->floating_bar, text); visible = TRUE; } else { nautilus_floating_bar_set_primary_label (self->floating_bar, NULL); } /* update current mode */ mode_display_name = ide_source_view_get_mode_display_name (self->source_view); gtk_label_set_label (self->mode_name_label, mode_display_name); gtk_widget_set_visible (GTK_WIDGET (self->mode_name_label), !!mode_display_name); if (mode_display_name != NULL) visible = TRUE; /* * Update overwrite label. * * XXX: Hack for 3.18 to ensure we don't have "OVR Replace" in vim mode. */ mode_name = ide_source_view_get_mode_name (self->source_view); if (ide_source_view_get_overwrite (self->source_view) && !ide_str_equal0 (mode_name, "vim-replace")) { gtk_widget_set_visible (GTK_WIDGET (self->overwrite_label), TRUE); visible = TRUE; } else { gtk_widget_set_visible (GTK_WIDGET (self->overwrite_label), FALSE); } if (gtk_widget_get_visible (GTK_WIDGET (self->mode_name_label))) visible = TRUE; if (ide_buffer_get_busy (IDE_BUFFER (buffer))) { nautilus_floating_bar_set_show_spinner (self->floating_bar, TRUE); visible = TRUE; } else { nautilus_floating_bar_set_show_spinner (self->floating_bar, FALSE); } /* we don't fade while hiding because we likely won't have * any text labels set anyway. */ if (!visible && gtk_widget_get_visible (GTK_WIDGET (self->floating_bar))) gtk_widget_hide (GTK_WIDGET (self->floating_bar)); else if (visible && !gtk_widget_get_visible (GTK_WIDGET (self->floating_bar))) gtk_widget_show (GTK_WIDGET (self->floating_bar)); }
static void ide_source_view_movement_match_search_char (Movement *mv, gboolean is_next_direction) { GtkTextIter insert; GtkTextIter limit; gboolean is_forward; gboolean is_till; gboolean is_inclusive_mode; gboolean is_selection_positive; const gchar *mode_name; limit = insert = mv->insert; is_forward = (mv->command == 'f' || mv->command == 't'); is_till = (mv->command == 't' || mv->command == 'T'); mode_name = ide_source_view_get_mode_name (mv->self); is_inclusive_mode = (g_str_has_prefix (mode_name, "vim-visual") || g_str_has_prefix (mode_name, "vim-normal-c") || g_str_has_prefix (mode_name, "vim-normal-d")); is_selection_positive = (gtk_text_iter_compare (&insert, &mv->selection) >= 0); if (mv->modifier == 0) return; if ((is_forward && is_next_direction) || (!is_forward && !is_next_direction)) { /* We search to the right */ gtk_text_iter_forward_to_line_end (&limit); if (is_till) gtk_text_iter_forward_char (&insert); if (is_inclusive_mode && is_selection_positive) gtk_text_iter_backward_char (&insert); if (gtk_text_iter_forward_find_char (&insert, find_char, GUINT_TO_POINTER (mv->modifier), &limit)) { if (is_till) gtk_text_iter_backward_char (&insert); is_selection_positive = (gtk_text_iter_compare (&insert, &mv->selection) >= 0); if (is_inclusive_mode && is_selection_positive) gtk_text_iter_forward_char (&insert); mv->insert = insert; } } else { /* We search to the left */ gtk_text_iter_set_line_offset (&limit, 0); if (is_till) gtk_text_iter_backward_char (&insert); if (is_inclusive_mode && is_selection_positive) gtk_text_iter_backward_char (&insert); if (gtk_text_iter_backward_find_char (&insert, find_char, GUINT_TO_POINTER (mv->modifier), &limit)) { if (is_till) gtk_text_iter_forward_char (&insert); is_selection_positive = (gtk_text_iter_compare (&insert, &mv->selection) >= 0); if (is_inclusive_mode && is_selection_positive) gtk_text_iter_forward_char (&insert); mv->insert = insert; } } }