--------------------------------------|
            | Revealer                            |
            | |-----------------------------------|
            | | Frame                             |
            | | |---------------------------------|
            | | | HBox                            |
            | | | |---| |-------| |----| |------| |
            | | | | x | | Entry | |Prev| | Next | |
            | | | |---| |-------| |----| |------| |
            --------------------------------------|

def _add_search_box(self):
        """ --------------------------------------|
            | Revealer                            |
            | |-----------------------------------|
            | | Frame                             |
            | | |---------------------------------|
            | | | HBox                            |
            | | | |---| |-------| |----| |------| |
            | | | | x | | Entry | |Prev| | Next | |
            | | | |---| |-------| |----| |------| |
            --------------------------------------|
        """
        self.search_revealer = Gtk.Revealer()
        self.search_frame = Gtk.Frame(name='search-frame')
        self.search_box = Gtk.HBox()

        # Search
        self.search_close_btn = Gtk.Button()
        self.search_close_btn.set_can_focus(False)
        close_icon = Gio.ThemedIcon(name='window-close-symbolic')
        close_image = Gtk.Image.new_from_gicon(close_icon, Gtk.IconSize.BUTTON)
        self.search_close_btn.set_image(close_image)
        self.search_entry = Gtk.SearchEntry()
        self.search_prev_btn = Gtk.Button()
        self.search_prev_btn.set_can_focus(False)
        prev_icon = Gio.ThemedIcon(name='go-up-symbolic')
        prev_image = Gtk.Image.new_from_gicon(prev_icon, Gtk.IconSize.BUTTON)
        self.search_prev_btn.set_image(prev_image)
        self.search_next_btn = Gtk.Button()
        self.search_next_btn.set_can_focus(False)
        next_icon = Gio.ThemedIcon(name='go-down-symbolic')
        next_image = Gtk.Image.new_from_gicon(next_icon, Gtk.IconSize.BUTTON)
        self.search_next_btn.set_image(next_image)

        # Pack into box
        self.search_box.pack_start(self.search_close_btn, False, False, 0)
        self.search_box.pack_start(self.search_entry, False, False, 0)
        self.search_box.pack_start(self.search_prev_btn, False, False, 0)
        self.search_box.pack_start(self.search_next_btn, False, False, 0)

        # Add into frame
        self.search_frame.add(self.search_box)

        # Frame
        self.search_frame.set_margin_end(12)
        self.search_frame.get_style_context().add_class('background')
        css_provider = Gtk.CssProvider()
        css_provider.load_from_data(
            b'#search-frame border {'
            b'    padding: 5px 5px 5px 5px;'
            b'    border: none;'
            b'}'
        )
        Gtk.StyleContext.add_provider_for_screen(
            Gdk.Screen.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
        )

        # Add to revealer
        self.search_revealer.add(self.search_frame)
        self.search_revealer.set_transition_duration(500)
        self.search_revealer.set_transition_type(Gtk.RevealerTransitionType.CROSSFADE)
        self.search_revealer.set_valign(Gtk.Align.END)
        self.search_revealer.set_halign(Gtk.Align.END)

        # Welcome to the overlay
        self.add_overlay(self.search_revealer)

        # Events
        self.search_entry.connect('key-press-event', self.on_search_entry_keypress)
        self.search_entry.connect('changed', self.set_search)
        self.search_entry.connect('activate', self.do_search)
        self.search_entry.connect('focus-in-event', self.on_search_entry_focus_in)
        self.search_entry.connect('focus-out-event', self.on_search_entry_focus_out)
        self.search_next_btn.connect('clicked', self.on_search_next_clicked)
        self.search_prev_btn.connect('clicked', self.on_search_prev_clicked)
        self.search_close_btn.connect('clicked', self.close_search_box)
        self.search_prev = True