Revision: 1301 http://svn.sourceforge.net/geany/?rev=1301&view=rev Author: ntrel Date: 2007-02-17 09:39:10 -0800 (Sat, 17 Feb 2007)
Log Message: ----------- Add Mark button as a Find All option in the Find dialog.
Modified Paths: -------------- trunk/ChangeLog trunk/src/search.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-02-17 16:59:36 UTC (rev 1300) +++ trunk/ChangeLog 2007-02-17 17:39:10 UTC (rev 1301) @@ -3,6 +3,8 @@ * src/ui_utils.c: Scroll Compiler and Messages window in view when using Next Error or Next Message. + * src/search.c: + Add Mark button as a Find All option in the Find dialog.
2007-02-16 Nick Treleaven nick.treleaven@btinternet.com
Modified: trunk/src/search.c =================================================================== --- trunk/src/search.c 2007-02-17 16:59:36 UTC (rev 1300) +++ trunk/src/search.c 2007-02-17 17:39:10 UTC (rev 1301) @@ -344,12 +344,12 @@ exp = gtk_expander_new(_("Find All")); bbox = gtk_hbutton_box_new();
-#if 0 button = gtk_button_new_with_mnemonic(_("_Mark")); + gtk_tooltips_set_tip(tooltips, button, + _("Mark all matches in the current document."), NULL); gtk_container_add(GTK_CONTAINER(bbox), button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(send_find_dialog_response), GINT_TO_POINTER(GEANY_RESPONSE_MARK)); -#endif // not implemented yet
button = gtk_button_new_with_mnemonic(_("In Sessi_on")); gtk_container_add(GTK_CONTAINER(bbox), button); @@ -770,6 +770,31 @@ }
+static gint search_mark(gint idx, const gchar *search_text, gint flags) +{ + gint pos, line, count = 0; + struct TextToFind ttf; + + g_return_val_if_fail(DOC_IDX_VALID(idx), 0); + + ttf.chrg.cpMin = 0; + ttf.chrg.cpMax = sci_get_length(doc_list[idx].sci); + ttf.lpstrText = (gchar *)search_text; + while (1) + { + pos = sci_find_text(doc_list[idx].sci, flags, &ttf); + if (pos == -1) break; + + line = sci_get_line_from_position(doc_list[idx].sci, pos); + sci_set_marker_at_line(doc_list[idx].sci, line, TRUE, 1); + + ttf.chrg.cpMin = ttf.chrgText.cpMax + 1; + count++; + } + return count; +} + + static void on_find_entry_activate(GtkEntry *entry, gpointer user_data) { @@ -824,25 +849,30 @@ { case GEANY_RESPONSE_FIND: case GEANY_RESPONSE_FIND_PREVIOUS: - document_find_text(idx, search_data.text, search_data.flags, - (response == GEANY_RESPONSE_FIND_PREVIOUS), TRUE); - check_close = FALSE; - if (app->pref_main_suppress_search_dialogs) - check_close = TRUE; - break; + document_find_text(idx, search_data.text, search_data.flags, + (response == GEANY_RESPONSE_FIND_PREVIOUS), TRUE); + check_close = FALSE; + if (app->pref_main_suppress_search_dialogs) + check_close = TRUE; + break;
case GEANY_RESPONSE_FIND_IN_FILE: - search_find_usage(search_data.text, search_data.flags, FALSE); - break; + search_find_usage(search_data.text, search_data.flags, FALSE); + break;
case GEANY_RESPONSE_FIND_IN_SESSION: - search_find_usage(search_data.text, search_data.flags, TRUE); - break; + search_find_usage(search_data.text, search_data.flags, TRUE); + break;
case GEANY_RESPONSE_MARK: - // TODO - break; + { + gint idx = document_get_cur_idx();
+ if (DOC_IDX_VALID(idx)) + search_mark(idx, search_data.text, search_data.flags); + break; + } + // Note: we can get GTK_RESPONSE_DELETE_EVENT responses when ESC is pressed } if (check_close) @@ -1318,3 +1348,5 @@ g_free(text); } } + +
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.