static gboolean gb_vim_jump_to_line (GtkSourceView *source_view, const gchar *command, const gchar *options, GError **error) { GtkTextBuffer *buffer; gboolean extend_selection; gint line; if (!IDE_IS_SOURCE_VIEW (source_view)) return TRUE; if (!int32_parse (&line, options, 0, G_MAXINT32, "line number", error)) return FALSE; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (source_view)); extend_selection = gtk_text_buffer_get_has_selection (buffer); ide_source_view_set_count (IDE_SOURCE_VIEW (source_view), line); g_signal_emit_by_name (source_view, "movement", IDE_SOURCE_VIEW_MOVEMENT_NTH_LINE, extend_selection, TRUE, TRUE); g_signal_emit_by_name (source_view, "save-insert-mark"); return TRUE; }
static gboolean ide_source_map__enter_notify_event (IdeSourceMap *self, GdkEventCrossing *event, GtkWidget *widget) { g_assert (IDE_IS_SOURCE_MAP (self)); g_assert (event != NULL); g_assert (GTK_IS_WIDGET (widget)); /* We use this same method for both the view and self, * so if we are hovering our map, keep track of it. */ if (IDE_IS_SOURCE_MAP (widget)) self->in_map = TRUE; if (IDE_IS_SOURCE_VIEW (widget)) self->in_view = TRUE; if (self->show_map == FALSE) { self->show_map = TRUE; g_signal_emit (self, signals [SHOW_MAP], 0); } return GDK_EVENT_PROPAGATE; }
void gb_beautifier_process_launch_async (GbBeautifierWorkbenchAddin *self, IdeSourceView *source_view, GtkTextIter *begin, GtkTextIter *end, GbBeautifierConfigEntry *entry, GAsyncReadyCallback callback, GCancellable *cancellable, gpointer user_data) { GtkTextBuffer *buffer; ProcessState *state; g_autoptr(GTask) task = NULL; const gchar *lang_id; g_assert (GB_IS_BEAUTIFIER_WORKBENCH_ADDIN (self)); g_assert (IDE_IS_SOURCE_VIEW (source_view)); g_assert (!cancellable || G_IS_CANCELLABLE (cancellable)); g_assert (entry != NULL); g_assert (callback != NULL); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (source_view)); lang_id = gb_beautifier_helper_get_lang_id (self, source_view); if (begin == NULL) gtk_text_buffer_get_start_iter (buffer, begin); if (end == NULL) gtk_text_buffer_get_end_iter (buffer, begin); g_assert (gtk_text_iter_get_buffer (begin) == buffer); g_assert (gtk_text_iter_get_buffer (end) == buffer); state = g_slice_new0 (ProcessState); state->self = self; state->source_view = source_view; gtk_text_iter_order (begin, end); state->text = gtk_text_buffer_get_text (buffer, begin, end, FALSE); state->begin_mark = gtk_text_buffer_create_mark (buffer, NULL, begin, TRUE); state->end_mark = gtk_text_buffer_create_mark (buffer, NULL, end, FALSE); state->command = entry->command; state->lang_id = g_strdup (lang_id); if (G_IS_FILE (entry->config_file)) state->config_file = g_file_dup (entry->config_file); if (entry->command_args != NULL) state->command_args = command_args_copy (entry->command_args); task = g_task_new (self, cancellable, callback, user_data); g_task_set_source_tag (task, gb_beautifier_process_launch_async); g_task_set_task_data (task, state, process_state_free); gb_beautifier_helper_create_tmp_file_async (self, state->text, create_tmp_file_cb, cancellable, g_steal_pointer (&task)); }
static void gbp_retab_editor_page_addin_action (GSimpleAction *action, GVariant *variant, gpointer user_data) { GbpRetabEditorPageAddin *self = user_data; IdeSourceView *source_view; GtkTextBuffer *buffer; IdeCompletion *completion; guint tab_width; gint start_line; gint end_line; gint indent; GtkTextIter begin; GtkTextIter end; gboolean editable; gboolean to_spaces; g_assert (GBP_IS_RETAB_EDITOR_PAGE_ADDIN (self)); g_assert (G_IS_SIMPLE_ACTION (action)); buffer = GTK_TEXT_BUFFER (ide_editor_page_get_buffer (self->editor_view)); source_view = ide_editor_page_get_view (self->editor_view); g_assert (IDE_IS_SOURCE_VIEW (source_view)); editable = gtk_text_view_get_editable (GTK_TEXT_VIEW (source_view)); completion = ide_source_view_get_completion (IDE_SOURCE_VIEW (source_view)); tab_width = gtk_source_view_get_tab_width(GTK_SOURCE_VIEW (source_view)); to_spaces = gtk_source_view_get_insert_spaces_instead_of_tabs(GTK_SOURCE_VIEW (source_view)); if (!editable) return; gtk_text_buffer_get_selection_bounds (buffer, &begin, &end); gtk_text_iter_order (&begin, &end); if (!gtk_text_iter_equal (&begin, &end) && gtk_text_iter_starts_line (&end)) gtk_text_iter_backward_char (&end); start_line = gtk_text_iter_get_line (&begin); end_line = gtk_text_iter_get_line (&end); ide_completion_block_interactive (completion); gtk_text_buffer_begin_user_action (buffer); for (gint line = start_line; line <= end_line; ++line) { indent = get_buffer_range_indent (buffer, line, to_spaces); if (indent > 0) gbp_retab_editor_page_addin_retab (buffer, line, tab_width, indent, to_spaces); } gtk_text_buffer_end_user_action (buffer); ide_completion_unblock_interactive (completion); }
static gboolean gb_vim_command_cprevious (GtkSourceView *source_view, const gchar *command, const gchar *options, GError **error) { if (IDE_IS_SOURCE_VIEW (source_view)) g_signal_emit_by_name (source_view, "move-error", GTK_DIR_UP); return TRUE; }
void ide_editor_view_addin_unload_source_view (IdeEditorViewAddin *self, IdeSourceView *source_view) { g_return_if_fail (IDE_IS_EDITOR_VIEW_ADDIN (self)); g_return_if_fail (IDE_IS_SOURCE_VIEW (source_view)); if (IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->unload_source_view) IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->unload_source_view (self, source_view); }
static void ide_editor_spell_widget_set_view (IdeEditorSpellWidget *self, IdeSourceView *view) { g_return_if_fail (IDE_IS_EDITOR_SPELL_WIDGET (self)); g_return_if_fail (IDE_IS_SOURCE_VIEW (view)); ide_set_weak_pointer (&self->view, view); if (GSPELL_IS_NAVIGATOR (self->navigator)) g_clear_object (&self->navigator); self->navigator = ide_editor_spell_navigator_new (GTK_TEXT_VIEW (view)); }
static gboolean gb_vim_set_scrolloff (GtkSourceView *source_view, const gchar *key, const gchar *value, GError **error) { gint scroll_offset = 0; if (!int32_parse (&scroll_offset, value, 0, G_MAXINT32, "scroll size", error)) return FALSE; if (IDE_IS_SOURCE_VIEW (source_view)) g_object_set (source_view, "scroll-offset", scroll_offset, NULL); return TRUE; }
static void ide_editor_frame__drag_data_received (IdeEditorFrame *self, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint timestamp, GtkWidget *widget) { gchar **uri_list; g_return_if_fail (IDE_IS_SOURCE_VIEW (widget)); switch (info) { case TARGET_URI_LIST: uri_list = ide_dnd_get_uri_list (selection_data); if (uri_list) { GVariantBuilder *builder; GVariant *variant; guint i; builder = g_variant_builder_new (G_VARIANT_TYPE_STRING_ARRAY); for (i = 0; uri_list [i]; i++) g_variant_builder_add (builder, "s", uri_list [i]); variant = g_variant_builder_end (builder); g_variant_builder_unref (builder); g_strfreev (uri_list); /* * request that we get focus first so the workbench will deliver the * document to us in the case it is not already open */ gtk_widget_grab_focus (GTK_WIDGET (self)); ide_widget_action (GTK_WIDGET (self), "workbench", "open-uri-list", variant); } gtk_drag_finish (context, TRUE, FALSE, timestamp); break; default: break; } }
static gboolean gb_vim_command_sort (GtkSourceView *source_view, const gchar *command, const gchar *options, GError **error) { if (IDE_IS_SOURCE_VIEW (source_view)) { g_signal_emit_by_name (source_view, "sort", FALSE, FALSE); g_signal_emit_by_name (source_view, "clear-selection"); g_signal_emit_by_name (source_view, "set-mode", NULL, IDE_SOURCE_VIEW_MODE_TYPE_PERMANENT); } return TRUE; }
static gboolean gb_vim_command_nohl (GtkSourceView *source_view, const gchar *command, const gchar *options, GError **error) { if (IDE_IS_SOURCE_VIEW (source_view)) { GtkSourceSearchContext *context = NULL; g_object_get (source_view, "search-context", &context, NULL); g_object_set (context, "highlight", FALSE, NULL); g_clear_object (&context); } return TRUE; }
static void ide_source_view_movements_get_selection (Movement *mv) { GtkTextBuffer *buffer; GtkTextMark *mark; g_assert (mv); g_assert (IDE_IS_SOURCE_VIEW (mv->self)); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (mv->self)); mark = gtk_text_buffer_get_insert (buffer); gtk_text_buffer_get_iter_at_mark (buffer, &mv->insert, mark); mark = gtk_text_buffer_get_selection_bound (buffer); gtk_text_buffer_get_iter_at_mark (buffer, &mv->selection, mark); }
static void ide_editor_frame__source_view_focus_location (IdeEditorFrame *self, IdeSourceLocation *location, IdeSourceView *source_view) { IdeWorkbench *workbench; IdePerspective *editor; g_assert (IDE_IS_EDITOR_FRAME (self)); g_assert (location != NULL); g_assert (IDE_IS_SOURCE_VIEW (source_view)); workbench = ide_widget_get_workbench (GTK_WIDGET (self)); editor = ide_workbench_get_perspective_by_name (workbench, "editor"); ide_editor_perspective_focus_location (IDE_EDITOR_PERSPECTIVE (editor), location); }
static gboolean ide_editor_frame__source_view_focus_in_event (IdeEditorFrame *self, GdkEventKey *event, IdeSourceView *source_view) { GtkTextBuffer *buffer; g_assert (IDE_IS_EDITOR_FRAME (self)); g_assert (IDE_IS_SOURCE_VIEW (source_view)); gtk_revealer_set_reveal_child (self->search_revealer, FALSE); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (source_view)); if (IDE_IS_BUFFER (buffer)) ide_buffer_check_for_volume_change (IDE_BUFFER (buffer)); return FALSE; }
static void ide_source_view_movements_select_range (Movement *mv) { GtkTextBuffer *buffer; GtkTextMark *mark; g_assert (mv); g_assert (IDE_IS_SOURCE_VIEW (mv->self)); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (mv->self)); if (mv->extend_selection) gtk_text_buffer_select_range (buffer, &mv->insert, &mv->selection); else gtk_text_buffer_select_range (buffer, &mv->insert, &mv->insert); mark = gtk_text_buffer_get_insert (buffer); gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (mv->self), mark); }
static void ide_editor_view_request_documentation (IdeEditorView *self, IdeSourceView *source_view) { g_autofree gchar *word = NULL; IdeBuffer *buffer; GtkTextMark *mark; GtkTextIter iter; g_assert (IDE_IS_EDITOR_VIEW (self)); g_assert (IDE_IS_SOURCE_VIEW (source_view)); buffer = IDE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (source_view))); mark = gtk_text_buffer_get_insert (GTK_TEXT_BUFFER (buffer)); gtk_text_buffer_get_iter_at_mark (GTK_TEXT_BUFFER (buffer), &iter, mark); word = ide_buffer_get_word_at_iter (buffer, &iter); g_signal_emit (self, signals [REQUEST_DOCUMENTATION], 0, word); }
static gboolean ide_editor_spell_widget__key_press_event_cb (IdeEditorSpellWidget *self, GdkEventKey *event) { g_assert (IDE_IS_SOURCE_VIEW (self->view)); g_assert (event != NULL); switch (event->keyval) { case GDK_KEY_Escape: ide_widget_action (GTK_WIDGET (self->view), "frame", "show-spellcheck", g_variant_new_int32 (0)); return GDK_EVENT_STOP; default: break; } return GDK_EVENT_PROPAGATE; }
static void ide_editor_frame_actions_spellcheck (GSimpleAction *action, GVariant *variant, gpointer user_data) { IdeEditorFrame *self = user_data; IdeWorkbench *workbench; IdePerspective *editor; gboolean state; g_assert (IDE_IS_EDITOR_FRAME (self)); state = !!g_variant_get_int32 (variant); if (state == TRUE) { if (IDE_IS_SOURCE_VIEW (self->source_view) && NULL != (workbench = ide_widget_get_workbench (GTK_WIDGET (self))) && NULL != (editor = ide_workbench_get_perspective_by_name (workbench, "editor"))) ide_editor_perspective_show_spellchecker (IDE_EDITOR_PERSPECTIVE (editor), self->source_view); } else gtk_widget_grab_focus (GTK_WIDGET (self->source_view)); }
static gboolean ide_source_map__leave_notify_event (IdeSourceMap *self, GdkEventCrossing *event, GtkWidget *widget) { g_assert (IDE_IS_SOURCE_MAP (self)); g_assert (event != NULL); g_assert (GTK_IS_WIDGET (widget)); /* We use this same method for both the view and self, * so if we are hovering our map, keep track of it. */ if (IDE_IS_SOURCE_MAP (widget)) self->in_map = FALSE; if (IDE_IS_SOURCE_VIEW (widget)) self->in_view = FALSE; ide_source_map_show_map_and_queue_fade (self); return GDK_EVENT_PROPAGATE; }
static gboolean ide_editor_view__focus_in_event (IdeEditorView *self, GdkEvent *event, IdeSourceView *source_view) { g_assert (IDE_IS_EDITOR_VIEW (self)); g_assert (IDE_IS_SOURCE_VIEW (source_view)); if (self->last_focused_frame && self->last_focused_frame->source_view == source_view) return FALSE; if (self->frame2 && self->frame2->source_view == source_view) { self->last_focused_frame = self->frame2; g_object_weak_ref (G_OBJECT (self->frame2), ide_editor_view__focused_frame_weak_notify, self); } else { g_object_weak_unref (G_OBJECT (self->frame2), ide_editor_view__focused_frame_weak_notify, self); self->last_focused_frame = self->frame1; } return FALSE; }
void _ide_source_view_apply_movement (IdeSourceView *self, IdeSourceViewMovement movement, gboolean extend_selection, gboolean exclusive, guint count, gunichar command, gunichar modifier, gunichar search_char, gint *target_offset) { Movement mv = { 0 }; GtkTextBuffer *buffer; GtkTextMark *insert; gsize i; g_return_if_fail (IDE_IS_SOURCE_VIEW (self)); #ifdef IDE_ENABLE_TRACE { GEnumValue *enum_value; GEnumClass *enum_class; enum_class = g_type_class_ref (IDE_TYPE_SOURCE_VIEW_MOVEMENT); enum_value = g_enum_get_value (enum_class, movement); IDE_TRACE_MSG ("movement(%s, extend_selection=%s, exclusive=%s, count=%u)", enum_value->value_nick, extend_selection ? "YES" : "NO", exclusive ? "YES" : "NO", count); g_type_class_unref (enum_class); } #endif buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self)); insert = gtk_text_buffer_get_insert (buffer); mv.self = self; mv.target_offset = target_offset; mv.type = movement; mv.extend_selection = extend_selection; mv.exclusive = exclusive; mv.count = count; mv.ignore_select = FALSE; mv.ignore_target_offset = FALSE; mv.command = command; mv.modifier = modifier; ide_source_view_movements_get_selection (&mv); switch (movement) { case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_OFFSET: gtk_text_iter_backward_chars (&mv.insert, MAX (1, mv.count)); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_OFFSET: gtk_text_iter_forward_chars (&mv.insert, MAX (1, mv.count)); break; case IDE_SOURCE_VIEW_MOVEMENT_NTH_CHAR: ide_source_view_movements_nth_char (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_CHAR: ide_source_view_movements_previous_char (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_CHAR: ide_source_view_movements_next_char (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_FIRST_CHAR: ide_source_view_movements_first_char (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_FIRST_NONSPACE_CHAR: ide_source_view_movements_first_nonspace_char (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_MIDDLE_CHAR: ide_source_view_movements_middle_char (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_LAST_CHAR: ide_source_view_movements_last_char (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_FULL_WORD_START: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_previous_full_word_start (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_FULL_WORD_START: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_next_full_word_start (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_FULL_WORD_END: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_previous_full_word_end (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_FULL_WORD_END: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_next_full_word_end (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_SUB_WORD_START: gtk_text_iter_backward_visible_word_starts (&mv.insert, MAX (1, mv.count)); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_SUB_WORD_START: if (!gtk_text_iter_forward_visible_word_ends (&mv.insert, MAX (1, mv.count))) gtk_text_iter_forward_to_line_end (&mv.insert); break; case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_WORD_START: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_previous_word_start (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_WORD_START: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_next_word_start (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_WORD_END: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_previous_word_end (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_WORD_END: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_next_word_end (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_SENTENCE_START: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_sentence_start (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_SENTENCE_END: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_sentence_end (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_PARAGRAPH_START: for (i = MAX (1, mv.count); i > 0; i--) { mv.exclusive = exclusive && i == 1; ide_source_view_movements_paragraph_start (&mv); } break; case IDE_SOURCE_VIEW_MOVEMENT_PARAGRAPH_END: for (i = MAX (1, mv.count); i > 0; i--) { mv.exclusive = exclusive && i == 1; ide_source_view_movements_paragraph_end (&mv); } break; case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_LINE: mv.ignore_target_offset = TRUE; mv.ignore_select = TRUE; for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_previous_line (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_LINE: mv.ignore_target_offset = TRUE; mv.ignore_select = TRUE; for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_next_line (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_FIRST_LINE: ide_source_view_movements_first_line (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_NTH_LINE: ide_source_view_movements_nth_line (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_LAST_LINE: ide_source_view_movements_last_line (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_LINE_PERCENTAGE: ide_source_view_movements_line_percentage (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_LINE_CHARS: ide_source_view_movements_line_chars (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_LINE_END: ide_source_view_movements_line_end (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_HALF_PAGE_UP: case IDE_SOURCE_VIEW_MOVEMENT_HALF_PAGE_DOWN: case IDE_SOURCE_VIEW_MOVEMENT_PAGE_UP: case IDE_SOURCE_VIEW_MOVEMENT_PAGE_DOWN: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_move_page (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_SCREEN_DOWN: case IDE_SOURCE_VIEW_MOVEMENT_SCREEN_UP: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_scroll (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_SCREEN_TOP: ide_source_view_movements_screen_top (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_SCREEN_MIDDLE: ide_source_view_movements_screen_middle (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_SCREEN_BOTTOM: ide_source_view_movements_screen_bottom (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_MATCH_SPECIAL: ide_source_view_movements_match_special (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_TOP: case IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_CENTER: case IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_BOTTOM: ide_source_view_movements_scroll_center (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_UNMATCHED_BRACE: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_previous_unmatched (&mv, '{', '}'); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_UNMATCHED_BRACE: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_next_unmatched (&mv, '}', '{'); break; case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_UNMATCHED_PAREN: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_previous_unmatched (&mv, '(', ')'); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_UNMATCHED_PAREN: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_next_unmatched (&mv, ')', '('); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_MATCH_MODIFIER: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_next_match_modifier (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_MATCH_MODIFIER: for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movements_previous_match_modifier (&mv); break; case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_MATCH_SEARCH_CHAR: mv.modifier = search_char; for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movement_match_search_char (&mv, FALSE); break; case IDE_SOURCE_VIEW_MOVEMENT_NEXT_MATCH_SEARCH_CHAR: mv.modifier = search_char; for (i = MAX (1, mv.count); i > 0; i--) ide_source_view_movement_match_search_char (&mv, TRUE); break; default: g_return_if_reached (); } if (!mv.ignore_select) ide_source_view_movements_select_range (&mv); if (!mv.ignore_target_offset) *target_offset = gtk_text_iter_get_line_offset (&mv.insert); if (!mv.ignore_scroll_to_insert) ide_source_view_scroll_mark_onscreen (self, insert, TRUE, 0.5, 0.5); }
static void ide_editor_view_actions_source_view_notify (IdeSourceView *source_view, GParamSpec *pspec, GActionMap *actions) { g_autoptr(GVariant) param = NULL; GtkSourceView *gsv; GAction *action = NULL; g_assert (IDE_IS_SOURCE_VIEW (source_view)); g_assert (pspec != NULL); g_assert (G_IS_ACTION_MAP (actions)); gsv = GTK_SOURCE_VIEW (source_view); if (g_str_equal (pspec->name, "show-line-numbers")) { gboolean show_line_numbers; action = g_action_map_lookup_action (actions, "show-line-numbers"); show_line_numbers = gtk_source_view_get_show_line_numbers (gsv); param = g_variant_new_boolean (show_line_numbers); } else if (g_str_equal (pspec->name, "show-right-margin")) { gboolean show_right_margin; action = g_action_map_lookup_action (actions, "show-right-margin"); show_right_margin = gtk_source_view_get_show_right_margin (gsv); param = g_variant_new_boolean (show_right_margin); } else if (g_str_equal (pspec->name, "highlight-current-line")) { gboolean highlight_current_line; action = g_action_map_lookup_action (actions, "highlight-current-line"); g_object_get (gsv, "highlight-current-line", &highlight_current_line, NULL); param = g_variant_new_boolean (highlight_current_line); } else if (g_str_equal (pspec->name, "auto-indent")) { gboolean auto_indent; action = g_action_map_lookup_action (actions, "auto-indent"); g_object_get (source_view, "auto-indent", &auto_indent, NULL); param = g_variant_new_boolean (auto_indent); } else if (g_str_equal (pspec->name, "tab-width")) { guint tab_width; action = g_action_map_lookup_action (actions, "tab-width"); g_object_get (source_view, "tab-width", &tab_width, NULL); param = g_variant_new_int32 (tab_width); } else if (g_str_equal (pspec->name, "insert-spaces-instead-of-tabs")) { gboolean use_spaces; action = g_action_map_lookup_action (actions, "use-spaces"); g_object_get (source_view, "insert-spaces-instead-of-tabs", &use_spaces, NULL); param = g_variant_new_boolean (use_spaces); } else if (g_str_equal (pspec->name, "smart-backspace")) { gboolean smart_backspace; action = g_action_map_lookup_action (actions, "smart-backspace"); g_object_get (source_view, "smart-backspace", &smart_backspace, NULL); param = g_variant_new_boolean (smart_backspace); } if (action && param) { g_simple_action_set_state (G_SIMPLE_ACTION (action), param); param = NULL; } }
static void ide_editor_spell_widget_constructed (GObject *object) { IdeEditorSpellWidget *self = (IdeEditorSpellWidget *)object; GspellTextBuffer *spell_buffer; g_assert (IDE_IS_SOURCE_VIEW (self->view)); self->buffer = IDE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->view))); ide_buffer_set_spell_checking (self->buffer, TRUE); self->spellchecking_status = TRUE; spell_buffer = gspell_text_buffer_get_from_gtk_text_buffer (GTK_TEXT_BUFFER (self->buffer)); self->checker = gspell_text_buffer_get_spell_checker (spell_buffer); ide_editor_spell_dict_set_checker (self->dict, self->checker); self->spellchecker_language = gspell_checker_get_language (self->checker); gspell_language_chooser_set_language (GSPELL_LANGUAGE_CHOOSER (self->language_chooser_button), self->spellchecker_language); g_signal_connect_swapped (self->navigator, "notify::words-counted", G_CALLBACK (ide_editor_spell_widget__words_counted_cb), self); g_signal_connect_swapped (self->word_entry, "changed", G_CALLBACK (ide_editor_spell_widget__word_entry_changed_cb), self); g_signal_connect_swapped (self->word_entry, "populate-popup", G_CALLBACK (ide_editor_spell_widget__populate_popup_cb), self); g_signal_connect_swapped (self->ignore_button, "clicked", G_CALLBACK (ide_editor_spell_widget__ignore_button_clicked_cb), self); g_signal_connect_swapped (self->ignore_all_button, "clicked", G_CALLBACK (ide_editor_spell_widget__ignore_all_button_clicked_cb), self); g_signal_connect_swapped (self->change_button, "clicked", G_CALLBACK (ide_editor_spell_widget__change_button_clicked_cb), self); g_signal_connect_swapped (self->change_all_button, "clicked", G_CALLBACK (ide_editor_spell_widget__change_all_button_clicked_cb), self); g_signal_connect_swapped (self->suggestions_box, "row-selected", G_CALLBACK (ide_editor_spell_widget__row_selected_cb), self); g_signal_connect_swapped (self->suggestions_box, "row-activated", G_CALLBACK (ide_editor_spell_widget__row_activated_cb), self); g_signal_connect_swapped (self, "key-press-event", G_CALLBACK (ide_editor_spell_widget__key_press_event_cb), self); g_signal_connect_swapped (self->highlight_switch, "state-set", G_CALLBACK (ide_editor_spell_widget__highlight_switch_toggled_cb), self); g_signal_connect_object (self->language_chooser_button, "notify::language", G_CALLBACK (ide_editor_spell_widget__language_notify_cb), self, G_CONNECT_SWAPPED); g_signal_connect_swapped (self->dict_add_button, "clicked", G_CALLBACK (ide_editor_spell_widget__add_button_clicked_cb), self); g_signal_connect_swapped (self->dict_word_entry, "changed", G_CALLBACK (ide_editor_spell_widget__dict_word_entry_changed_cb), self); self->placeholder = gtk_label_new (NULL); gtk_widget_set_visible (self->placeholder, TRUE); gtk_list_box_set_placeholder (self->suggestions_box, self->placeholder); /* Due to the change of focus between the view and the spellchecker widget, * we need to start checking only when the widget is mapped, * so the view can keep the selection on the first word. */ g_signal_connect_object (self, "map", G_CALLBACK (ide_editor_spell__widget_mapped_cb), NULL, G_CONNECT_AFTER); g_signal_connect_swapped (self->dict, "loaded", G_CALLBACK (ide_editor_spell_widget__dict__loaded_cb), self); g_signal_connect_object (self->word_label, "notify::label", G_CALLBACK (ide_editor_spell_widget__word_label_notify_cb), self, G_CONNECT_SWAPPED); }