Commit 9a623e77 authored by Canek Peláez's avatar Canek Peláez
Browse files

application-window: Use search bar.

parent 94172f03
Loading
Loading
Loading
Loading
+36 −0
Original line number Original line Diff line number Diff line
@@ -5,6 +5,12 @@ namespace Example {


        [GtkChild]
        [GtkChild]
        private Gtk.Stack stack;
        private Gtk.Stack stack;
        [GtkChild]
        private Gtk.ToggleButton search;
        [GtkChild]
        private Gtk.SearchBar searchbar;
        [GtkChild]
        private Gtk.SearchEntry searchentry;


        private GLib.Settings settings;
        private GLib.Settings settings;


@@ -15,6 +21,9 @@ namespace Example {


            settings.bind ("transition", stack, "transition-type",
            settings.bind ("transition", stack, "transition-type",
                           GLib.SettingsBindFlags.DEFAULT);
                           GLib.SettingsBindFlags.DEFAULT);

            search.bind_property ("active", searchbar, "search-mode-enabled",
                                  GLib.BindingFlags.BIDIRECTIONAL);
        }
        }


        public void open (GLib.File file) {
        public void open (GLib.File file) {
@@ -46,6 +55,33 @@ namespace Example {
                GLib.warning ("There was an error loading '%s': %s",
                GLib.warning ("There was an error loading '%s': %s",
                              basename, e.message);
                              basename, e.message);
            }
            }

            search.sensitive = true;
        }

        [GtkCallback]
        public void visible_child_changed () {
        }

        [GtkCallback]
        public void search_text_changed () {
            var text = searchentry.get_text ();

            if (text == "")
                return;

            var tab = stack.get_visible_child () as Gtk.Bin;
            var view = tab.get_child () as Gtk.TextView;
            var buffer = view.get_buffer ();

            /* Very simple-minded search implementation */
            Gtk.TextIter start, match_start, match_end;
            buffer.get_start_iter (out start);
            if (start.forward_search (text, Gtk.TextSearchFlags.CASE_INSENSITIVE,
                                      out match_start, out match_end, null)) {
                buffer.select_range (match_start, match_end);
                view.scroll_to_iter (match_start, 0.0, false, 0.0, 0.0);
            }
        }
        }
    }
    }
}
}