[vte] vteapp: Add search



commit 2184b99ecd9cb5a9c84cbf0d3aa960855a92ae20
Author: Christian Persch <chpe gnome org>
Date:   Tue Sep 22 19:58:32 2015 +0200

    vteapp: Add search
    
    And also port to using gtk templates.

 src/Makefile.am       |    2 +
 src/app.gresource.xml |    1 +
 src/app.ui            |  178 +++++++++++++++++++----------------
 src/app.vala          |  156 ++++++++++++++++++++++++++++---
 src/search-popover.ui |  249 +++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 492 insertions(+), 94 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index eba172a..27909df 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -271,6 +271,7 @@ nodist_vte_ VTE_API_MAJOR_VERSION@_ VTE_API_MINOR_VERSION@_SOURCES = \
        $(NULL)
 
 vte_ VTE_API_MAJOR_VERSION@_ VTE_API_MINOR_VERSION@_VALAFLAGS = \
+       --target-glib=2.38 \
        --vapidir=. \
        --girdir=. \
        --pkg=posix \
@@ -309,6 +310,7 @@ CLEANFILES += \
 EXTRA_DIST += \
         app.gresource.xml \
        app.ui \
+       search-popover.ui \
        $(NULL)
 
 appresources.c: app.gresource.xml Makefile $(shell $(GLIB_COMPILE_RESOURCES) --generate-dependencies 
--sourcedir $(srcdir) $(srcdir)/app.gresource.xml)
diff --git a/src/app.gresource.xml b/src/app.gresource.xml
index 5c1d086..9095d32 100644
--- a/src/app.gresource.xml
+++ b/src/app.gresource.xml
@@ -18,5 +18,6 @@
 <gresources>
   <gresource prefix="/org/gnome/vte/test/app">
     <file alias="ui/window.ui" compressed="true" preprocess="xml-stripblanks">app.ui</file>
+    <file alias="ui/search-popover.ui" compressed="true" 
preprocess="xml-stripblanks">search-popover.ui</file>
   </gresource>
 </gresources>
diff --git a/src/app.ui b/src/app.ui
index f3cc4f8..c538df1 100644
--- a/src/app.ui
+++ b/src/app.ui
@@ -1,106 +1,124 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.16.0 on Fri Apr 18 10:59:58 2014 -->
+<!-- Generated with glade 3.19.0 -->
 <interface>
-  <!-- interface-requires gtk+ 3.10 -->
-  <object class="GtkBox" id="main-box">
-    <property name="visible">True</property>
+  <requires lib="gtk+" version="3.10"/>
+  <template class="TestWindow" parent="GtkApplicationWindow">
     <property name="can_focus">False</property>
-    <property name="orientation">vertical</property>
     <child>
-      <object class="GtkToolbar" id="toolbar">
+      <object class="GtkBox" id="main_box">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
         <child>
-          <object class="GtkToolButton" id="copy-toolbutton">
+          <object class="GtkToolbar" id="toolbar">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Copy</property>
-            <property name="action_name">win.copy</property>
-            <property name="label" translatable="yes">Copy</property>
-            <property name="icon_name">edit-copy</property>
+            <child>
+              <object class="GtkToolButton" id="copy_toolbutton">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="tooltip_text" translatable="yes">Copy</property>
+                <property name="action_name">win.copy</property>
+                <property name="label" translatable="yes">Copy</property>
+                <property name="icon_name">edit-copy-symbolic</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="homogeneous">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkToolButton" id="paste_toolbutton">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="tooltip_text" translatable="yes">Paste</property>
+                <property name="action_name">win.paste</property>
+                <property name="label" translatable="yes">Paste</property>
+                <property name="icon_name">edit-paste-symbolic</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="homogeneous">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkToolButton" id="reset_toolbutton">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="tooltip_text" translatable="yes">Reset (use Ctrl to reset and 
clear)</property>
+                <property name="action_name">win.reset</property>
+                <property name="label" translatable="yes">Reset</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="homogeneous">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkToggleToolButton" id="input_enabled_toolbutton">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="tooltip_text" translatable="yes">Toggle input enabled setting</property>
+                <property name="is_important">True</property>
+                <property name="action_name">win.input-enabled</property>
+                <property name="label" translatable="yes">Input</property>
+                <property name="icon_name">input-keyboard</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="homogeneous">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkToggleToolButton" id="search_toolbutton">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Search</property>
+                <property name="use_underline">True</property>
+                <property name="icon_name">edit-find-symbolic</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="homogeneous">True</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
-            <property name="homogeneous">False</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkToolButton" id="paste-toolbutton">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Paste</property>
-            <property name="action_name">win.paste</property>
-            <property name="label" translatable="yes">Paste</property>
-            <property name="icon_name">edit-paste</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">False</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkToolButton" id="reset-toolbutton">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Reset (use Ctrl to reset and clear)</property>
-            <property name="action_name">win.reset</property>
-            <property name="label" translatable="yes">Reset</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">False</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkToggleToolButton" id="input-enabled-toolbutton">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Toggle input enabled setting</property>
-            <property name="is_important">True</property>
-            <property name="action_name">win.input-enabled</property>
-            <property name="label" translatable="yes">Input</property>
-            <property name="icon_name">input-keyboard</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
           </packing>
         </child>
-      </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">0</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkBox" id="terminal-box">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <child>
-          <placeholder/>
-        </child>
         <child>
-          <object class="GtkScrollbar" id="scrollbar">
+          <object class="GtkBox" id="terminal_box">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="orientation">vertical</property>
-            <property name="restrict_to_fill_level">False</property>
-            <property name="fill_level">0</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <object class="GtkScrollbar" id="scrollbar">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
+                <property name="restrict_to_fill_level">False</property>
+                <property name="fill_level">0</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="pack_type">end</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
           </object>
           <packing>
-            <property name="expand">False</property>
+            <property name="expand">True</property>
             <property name="fill">True</property>
-            <property name="pack_type">end</property>
             <property name="position">1</property>
           </packing>
         </child>
       </object>
-      <packing>
-        <property name="expand">True</property>
-        <property name="fill">True</property>
-        <property name="position">1</property>
-      </packing>
     </child>
-  </object>
+  </template>
 </interface>
diff --git a/src/app.vala b/src/app.vala
index e102e46..f329e90 100644
--- a/src/app.vala
+++ b/src/app.vala
@@ -19,12 +19,130 @@
 namespace Test
 {
 
+[GtkTemplate (ui = "/org/gnome/vte/test/app/ui/search-popover.ui")]
+class SearchPopover : Gtk.Popover
+{
+  public Vte.Terminal terminal { get; construct set; }
+
+  [GtkChild] private Gtk.SearchEntry search_entry;
+  [GtkChild] private Gtk.Button search_prev_button;
+  [GtkChild] private Gtk.Button search_next_button;
+  [GtkChild] private Gtk.Button close_button;
+  [GtkChild] private Gtk.ToggleButton  match_case_checkbutton;
+  [GtkChild] private Gtk.ToggleButton entire_word_checkbutton;
+  [GtkChild] private Gtk.ToggleButton regex_checkbutton;
+  [GtkChild] private Gtk.ToggleButton wrap_around_checkbutton;
+  [GtkChild] private Gtk.Button reveal_button;
+  [GtkChild] private Gtk.Revealer revealer;
+
+  private GLib.RegexCompileFlags regex_flags = 0;
+  private GLib.Regex? regex = null;
+
+  public SearchPopover(Vte.Terminal term,
+                       Gtk.Widget relative_to)
+  {
+    Object(relative_to: relative_to, terminal: term);
+
+    close_button.clicked.connect(() => { hide(); });
+    reveal_button.bind_property("active", revealer, "reveal-child");
+
+    search_entry.next_match.connect(() => { search(false); });
+    search_entry.previous_match.connect(() => { search(true); });
+    search_entry.search_changed.connect(() => { update_regex(); });
+
+    search_next_button.clicked.connect(() => { search(false); });
+    search_prev_button.clicked.connect(() => { search(true); });
+
+    match_case_checkbutton.toggled.connect(() => { update_regex(); });
+    entire_word_checkbutton.toggled.connect(() => { update_regex(); });
+    regex_checkbutton.toggled.connect(() => { update_regex(); });
+
+    wrap_around_checkbutton.toggled.connect(() => {
+        terminal.search_set_wrap_around(wrap_around_checkbutton.active);
+      });
+
+    update_sensitivity();
+  }
+
+  private void update_sensitivity()
+  {
+    bool can_search = regex != null;
+
+    search_prev_button.set_sensitive(can_search);
+    search_next_button.set_sensitive(can_search);
+  }
+
+  private void update_regex()
+  {
+    GLib.RegexCompileFlags flags;
+    string search_text;
+    string pattern;
+
+    search_text = search_entry.get_text();
+    flags = GLib.RegexCompileFlags.OPTIMIZE;
+
+    if (!match_case_checkbutton.active)
+      flags |= GLib.RegexCompileFlags.CASELESS;
+
+    if (regex_checkbutton.active) {
+      pattern = search_text;
+      flags |= GLib.RegexCompileFlags.MULTILINE;
+    } else {
+      pattern = GLib.Regex.escape_string(search_text);
+    }
+
+    if (entire_word_checkbutton.active)
+      pattern = "\\b" + pattern + "\\b";
+
+    if (regex != null &&
+        regex_flags == flags &&
+        pattern == regex.get_pattern())
+      return;
+
+    regex_flags = flags;
+    if (search_text.length != 0) {
+      try {
+        regex = new GLib.Regex(pattern, flags, 0);
+      } catch (Error e) {
+        regex = null;
+      }
+    } else {
+      regex = null;
+    }
+
+    terminal.search_set_gregex(regex, 0);
+    update_sensitivity();
+  }
+
+  private void search(bool backward)
+  {
+    if (regex == null)
+      return;
+
+    if (backward)
+      terminal.search_find_previous();
+    else
+      terminal.search_find_next();
+  }
+
+} /* class SearchPopover */
+
+[GtkTemplate (ui = "/org/gnome/vte/test/app/ui/window.ui")]
 class Window : Gtk.ApplicationWindow
 {
+  [GtkChild] private Gtk.Toolbar toolbar;
+  [GtkChild] private Gtk.Scrollbar scrollbar;
+  [GtkChild] private Gtk.Box terminal_box;
+  /* [GtkChild] private Gtk.ToolButton copy_toolbutton; */
+  /* [GtkChild] private Gtk.ToolButton paste_toolbutton; */
+  /* [GtkChild] private Gtk.ToolButton reset_toolbutton; */
+  /* [GtkChild] private Gtk.ToggleToolButton input_enabled_toolbutton; */
+  [GtkChild] private Gtk.ToggleToolButton search_toolbutton;
+
   private Vte.Terminal terminal;
-  private Gtk.Scrollbar scrollbar;
   private Gtk.Clipboard clipboard;
   private GLib.Pid child_pid;
+  private SearchPopover? search_popover;
 
   private string[] builtin_dingus = {
     
"(((gopher|news|telnet|nntp|file|http|ftp|https)://)|(www|ftp)[-A-Za-z0-9]*\\.)[-A-Za-z0-9\\.]+(:[0-9]*)?",
@@ -35,7 +153,8 @@ class Window : Gtk.ApplicationWindow
     { "copy",        action_copy_cb            },
     { "copy-match",  action_copy_match_cb, "s" },
     { "paste",       action_paste_cb           },
-    { "reset",       action_reset_cb           }
+    { "reset",       action_reset_cb           },
+    { "find",        action_find_cb            }
   };
 
   public Window(App app)
@@ -64,20 +183,13 @@ class Window : Gtk.ApplicationWindow
       app_paintable = true;
     }
 
-    var ui = new Gtk.Builder.from_resource("/org/gnome/vte/test/app/ui/window.ui");
-    add(ui.get_object("main-box") as Gtk.Widget);
-
-    var box = ui.get_object("terminal-box") as Gtk.Box;
-
-    if (App.Options.no_toolbar) {
-      var toolbar = ui.get_object("toolbar") as Gtk.Widget;
+    if (App.Options.no_toolbar)
       toolbar.hide();
-    }
 
-    terminal = new Vte.Terminal();
+    search_toolbutton.toggled.connect(search_toolbutton_toggled_cb);
 
-    /* Connect scrollbar */
-    scrollbar = ui.get_object("scrollbar") as Gtk.Scrollbar;
+    /* Create terminal and connect scrollbar */
+    terminal = new Vte.Terminal();
     scrollbar.set_adjustment(terminal.get_vadjustment());
 
     /* Signals */
@@ -150,7 +262,7 @@ class Window : Gtk.ApplicationWindow
     add_action(new GLib.PropertyAction ("input-enabled", terminal, "input-enabled"));
 
     /* Done! */
-    box.pack_start(terminal);
+    terminal_box.pack_start(terminal);
     terminal.show();
 
     update_paste_sensitivity();
@@ -359,6 +471,22 @@ class Window : Gtk.ApplicationWindow
     terminal.reset(true, clear);
   }
 
+  private void action_find_cb()
+  {
+    search_toolbutton.active = true;
+  }
+
+  private void search_toolbutton_toggled_cb()
+  {
+    if (search_toolbutton.active && search_popover == null) {
+      search_popover = new SearchPopover(terminal, search_toolbutton);
+      search_popover.closed.connect(() => { search_toolbutton.set_active(false); });
+    }
+
+    if (search_popover.visible != search_toolbutton.active)
+      search_popover.set_visible(search_toolbutton.active);
+  }
+
   private bool button_press_event_cb(Gtk.Widget widget, Gdk.EventButton event)
   {
     if (event.button != 3)
diff --git a/src/search-popover.ui b/src/search-popover.ui
new file mode 100644
index 0000000..429e371
--- /dev/null
+++ b/src/search-popover.ui
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.19.0 -->
+<interface>
+  <requires lib="gtk+" version="3.16"/>
+  <template class="TestSearchPopover" parent="GtkPopover">
+    <property name="can_focus">False</property>
+    <property name="transitions_enabled">False</property>
+    <child>
+      <object class="GtkBox" id="box1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_left">12</property>
+        <property name="margin_right">12</property>
+        <property name="margin_top">12</property>
+        <property name="margin_bottom">12</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkBox" id="box2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="spacing">18</property>
+            <child>
+              <object class="GtkBox" id="box4">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkSearchEntry" id="search_entry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="activates_default">True</property>
+                    <property name="width_chars">30</property>
+                    <property name="primary_icon_name">edit-find-symbolic</property>
+                    <property name="primary_icon_activatable">False</property>
+                    <property name="primary_icon_sensitive">False</property>
+                    <property name="placeholder_text" translatable="yes">Search</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="search_prev_button">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="tooltip_text" translatable="yes">Search for previous 
occurrence</property>
+                    <property name="focus_on_click">False</property>
+                    <child>
+                      <object class="GtkImage" id="image2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="icon_name">go-up-symbolic</property>
+                        <property name="use_fallback">True</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="search_next_button">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="can_default">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="tooltip_text" translatable="yes">Search for next occurrence</property>
+                    <property name="focus_on_click">False</property>
+                    <child>
+                      <object class="GtkImage" id="image3">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="icon_name">go-down-symbolic</property>
+                        <property name="use_fallback">True</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <style>
+                  <class name="linked"/>
+                </style>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkToggleButton" id="reveal_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Toggle search options</property>
+                <property name="focus_on_click">False</property>
+                <child>
+                  <object class="GtkImage" id="image1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="icon_name">view-context-menu-symbolic</property>
+                    <property name="use_fallback">True</property>
+                  </object>
+                </child>
+                <accessibility>
+                  <relation type="controller-for" target="revealer"/>
+                </accessibility>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="close_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="focus_on_click">False</property>
+                <child>
+                  <object class="GtkImage" id="image4">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="icon_name">window-close-symbolic</property>
+                    <property name="use_fallback">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRevealer" id="revealer">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="transition_type">none</property>
+            <child>
+              <object class="GtkBox" id="box3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_top">18</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkCheckButton" id="match_case_checkbutton">
+                    <property name="label" translatable="yes">_Match case</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="xalign">0</property>
+                    <property name="yalign">0.49000000953674316</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="entire_word_checkbutton">
+                    <property name="label" translatable="yes">Match _entire word only</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="regex_checkbutton">
+                    <property name="label" translatable="yes">Match as _regular expression</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="wrap_around_checkbutton">
+                    <property name="label" translatable="yes">_Wrap around</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="focus_on_click">False</property>
+                    <property name="xalign">0</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]