l3afpad/src/hlight.c
2011-12-12 21:35:35 +08:00

89 lines
2.4 KiB
C

/*
* L3afpad - GTK+ based simple text editor
* Copyright (C) 2004-2005 Tarot Osuji
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <string.h>
#include "l3afpad.h"
//#include <gtk/gtk.h>
static gboolean searched_flag = FALSE;
static void cb_changed(GtkTextBuffer *buffer)
{
GtkTextIter start, end;
gtk_text_buffer_get_bounds(buffer, &start, &end);
// gtk_text_buffer_remove_tag_by_name(buffer,
// "searched", &start, &end);
gtk_text_buffer_remove_all_tags(buffer, &start, &end);
g_signal_handlers_block_by_func(G_OBJECT(buffer),
G_CALLBACK(cb_changed), NULL);
searched_flag = FALSE;
}
static void cb_paste_clipboard(void)
{
gchar *text;
text = gtk_clipboard_wait_for_text(
gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));
if (text) {
gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD),
text, -1);
g_free(text);
}
}
gboolean hlight_check_searched(void)
{
return searched_flag;
}
gboolean hlight_toggle_searched(GtkTextBuffer *buffer)
{
if (!searched_flag) {
g_signal_handlers_unblock_by_func(G_OBJECT(buffer),
G_CALLBACK(cb_changed), NULL);
searched_flag = TRUE;
} else {
g_signal_handlers_block_by_func(G_OBJECT(buffer),
G_CALLBACK(cb_changed), NULL);
searched_flag = FALSE;
}
return searched_flag;
}
void hlight_init(GtkTextBuffer *buffer)
{
gtk_text_buffer_create_tag(buffer, "searched",
"background", "yellow",
"foreground", "black",
NULL);
gtk_text_buffer_create_tag(buffer, "replaced",
"background", "cyan",
"foreground", "black",
NULL);
g_signal_connect(G_OBJECT(buffer), "changed",
G_CALLBACK(cb_changed), NULL);
g_signal_handlers_block_by_func(G_OBJECT(buffer),
G_CALLBACK(cb_changed), NULL);
g_signal_connect(G_OBJECT(pub->mw->view), "paste-clipboard",
G_CALLBACK(cb_paste_clipboard), NULL);
}