summaryrefslogblamecommitdiff
path: root/saedit/search.h
blob: eacdc5604d8c5ec215952197814445e3e3120b14 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13












                                           






















                                                                                    
                 

 
                                      
                    

                   

                          
 
                                                  
                                             



                                                                        

                                                      
                                                                 
 
                          
                                                        

                     



                                         
                              
 
/*=======================================*\
|  ____                         ____      |
| /    \         /\            |          |
| \____         /  \           |____      |
|      \       /____\          |          |
| \____/prite /      \nimation |____ditor |
|                                         |
|      Copyleft Vasily_Makarov 2011       |
|                                         |
\*=======================================*/

GtkWidget *find_entry;

static gboolean find_text() {
  gboolean found;
  gchar *text = gtk_entry_get_text(find_entry);

  GtkTextIter m_start, m_end, start;
  gtk_text_buffer_get_selection_bounds(source_buffer, NULL, &start);
  found = gtk_source_iter_forward_search(&start, text, 0, &m_start, &m_end, NULL);

  if (!found) {
    gtk_text_buffer_get_start_iter(source_buffer, &start);
    found = gtk_source_iter_forward_search(&start, text, 0, &m_start, &m_end, NULL);
  }
  if (found) {
    gtk_text_buffer_place_cursor(source_buffer, &m_start);
    gtk_text_buffer_move_mark_by_name(source_buffer, "selection_bound", &m_end);
    gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (source_view),
                                  gtk_text_buffer_get_insert (source_buffer),
                                  0.25,
                                  FALSE,
                                  0.0,
                                  0.0);
    return TRUE;
  } else
    return FALSE;
}

static GtkWidget *show_find_dialog() {
  GtkWidget *dialog;
  GtkWidget *vbox;
  GtkWidget *entry;
  GtkWidget *content_area;
  GtkWidget *label;

  dialog = gtk_dialog_new_with_buttons (_("Find"),
                                         win,
                                         GTK_DIALOG_DESTROY_WITH_PARENT,
                                         GTK_STOCK_FIND,
                                         GTK_RESPONSE_NONE,
                                         NULL);
  gtk_widget_set_size_request(dialog, 240, 80);
  gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
  content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));

  entry = gtk_entry_new();
  gtk_container_add(GTK_CONTAINER(content_area), entry);
  find_entry = entry;

  g_signal_connect(dialog,
                   "response",
                   G_CALLBACK(find_text),
                   NULL);
  gtk_widget_show_all(dialog);
}