gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r18561 - in gnunet-gtk: contrib src/fs


From: gnunet
Subject: [GNUnet-SVN] r18561 - in gnunet-gtk: contrib src/fs
Date: Mon, 12 Dec 2011 16:35:53 +0100

Author: grothoff
Date: 2011-12-12 16:35:53 +0100 (Mon, 12 Dec 2011)
New Revision: 18561

Modified:
   gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade
   gnunet-gtk/contrib/gnunet_fs_gtk_search_tab.glade
   gnunet-gtk/src/fs/gnunet-fs-gtk-main_window_view_toggles.c
   gnunet-gtk/src/fs/gnunet-fs-gtk.c
Log:
applying patches from #1759 towards making the GUI nicer; specifically, this 
covers 0004-new-search-bar, 0001-lump-and-tweaks, 2-get-text-from-combo, 
3-do-not-use-new-search-tab, 4-fix-search-tab-label, 1-make-tabs-smaller, 
2-remove-has-entry, 3-revert-get-text-from-combobox

Modified: gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade
===================================================================
--- gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade  2011-12-12 13:58:33 UTC 
(rev 18560)
+++ gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade  2011-12-12 15:35:53 UTC 
(rev 18561)
@@ -2,54 +2,54 @@
 <interface>
   <requires lib="gtk+" version="2.20"/>
   <!-- interface-naming-policy project-wide -->
-  <object class="GtkImage" id="image5">
-    <property name="visible">True</property>
-    <property name="stock">gtk-go-down</property>
-  </object>
-  <object class="GtkImage" id="image4">
-    <property name="visible">True</property>
-    <property name="stock">gtk-find</property>
-  </object>
-  <object class="GtkImage" id="image1">
-    <property name="visible">True</property>
-    <property name="stock">gtk-open</property>
-  </object>
-  <object class="GtkImage" id="image3">
-    <property name="visible">True</property>
-    <property name="stock">gtk-new</property>
-  </object>
-  <object class="GtkImage" id="image2">
-    <property name="visible">True</property>
-    <property name="stock">gtk-go-up</property>
-  </object>
   <object class="GtkWindow" id="GNUNET_GTK_main_window">
+    <property name="can_focus">False</property>
     <property name="title" translatable="yes">gnunet-fs-gtk</property>
     <property name="window_position">center</property>
     <property name="default_width">700</property>
     <property name="default_height">500</property>
     <property name="icon_name">gnunet-gtk</property>
     <signal name="delete-event" handler="GNUNET_GTK_quit_cb" after="yes" 
swapped="no"/>
+    <signal name="realize" handler="GNUNET_GTK_main_window_realize_cb" 
swapped="no"/>
     <child>
       <object class="GtkVBox" id="GNUNET_GTK_main_window_vbox">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <child>
+          <object class="GtkStatusbar" id="GNUNET_GTK_status_bar">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="spacing">2</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
           <object class="GtkMenuBar" id="GNUNET_GTK_main_menu">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
               <object class="GtkMenuItem" 
id="GNUNET_GTK_main_menu_file_sharing">
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
-                <property name="use_action_appearance">False</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_File 
sharing</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
                   <object class="GtkMenu" 
id="GNUNET_GTK_main_menu_file_sharing_box">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkImageMenuItem" 
id="GNUNET_GTK_main_menu_file_create_pseudonym">
                         <property name="label" translatable="yes">_Create 
pseudonym</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" 
translatable="yes">Create a pseudonym for publishing content.  Note that you 
can also publish content anonymously (without using a pseudonym).</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="accel_path">&lt;gnunet-fs-gtk&gt;/File 
sharing/Create pseudonym</property>
                         <property name="use_underline">True</property>
                         <property name="image">image3</property>
@@ -61,8 +61,9 @@
                     <child>
                       <object class="GtkImageMenuItem" 
id="GNUNET_GTK_main_menu_file_advertise_pseudonym">
                         <property name="label" translatable="yes">_Advertise 
Pseudonym</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
-                        <property name="use_action_appearance">False</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="image">image6</property>
                         <property name="use_stock">False</property>
@@ -72,9 +73,10 @@
                     <child>
                       <object class="GtkImageMenuItem" 
id="GNUNET_GTK_main_menu_file_publish">
                         <property name="label" 
translatable="yes">_Publish</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" 
translatable="yes">Publish files or directories on GNUnet</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="accel_path">&lt;gnunet-fs-gtk&gt;/File 
sharing/Publish</property>
                         <property name="use_underline">True</property>
                         <property name="image">image2</property>
@@ -85,16 +87,18 @@
                     </child>
                     <child>
                       <object class="GtkSeparatorMenuItem" 
id="GNUNET_GTK_main_menu_file_sep1">
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
-                        <property name="use_action_appearance">False</property>
+                        <property name="can_focus">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" 
id="GNUNET_GTK_main_menu_file_search">
                         <property name="label" 
translatable="yes">_Search</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" 
translatable="yes">Search GNUnet for files</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="accel_path">&lt;gnunet-fs-gtk&gt;/File 
sharing/Search</property>
                         <property name="use_underline">True</property>
                         <property name="image">image4</property>
@@ -105,16 +109,18 @@
                     </child>
                     <child>
                       <object class="GtkSeparatorMenuItem" 
id="GNUNET_GTK_main_menu_file_sep2">
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
-                        <property name="use_action_appearance">False</property>
+                        <property name="can_focus">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" 
id="GNUNET_GTK_main_menu_file_download_uri">
                         <property name="label" 
translatable="yes">_Download</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" 
translatable="yes">Download a file or directory with a known URI.</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="accel_path">&lt;gnunet-fs-gtk&gt;/File 
sharing/Download</property>
                         <property name="use_underline">True</property>
                         <property name="image">image5</property>
@@ -126,9 +132,10 @@
                     <child>
                       <object class="GtkImageMenuItem" 
id="GNUNET_GTK_main_menu_file_open_gnunet_directory">
                         <property name="label" translatable="yes">_Open GNUnet 
directory</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" translatable="yes">Use 
this option to browse a GNUnet directory file that has been previously 
downloaded.</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="accel_path">&lt;gnunet-fs-gtk&gt;/File 
sharing/Open directory</property>
                         <property name="use_underline">True</property>
                         <property name="image">image1</property>
@@ -139,16 +146,18 @@
                     </child>
                     <child>
                       <object class="GtkSeparatorMenuItem" 
id="GNUNET_GTK_main_menu_file_sep3">
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
-                        <property name="use_action_appearance">False</property>
+                        <property name="can_focus">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" 
id="GNUNET_GTK_main_menu_file_quit">
                         <property name="label">gtk-quit</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" translatable="yes">Exit 
gnunet-fs-gtk.  Active file-sharing operations will resume upon 
restart.</property>
-                        <property name="use_action_appearance">False</property>
                         <property 
name="accel_path">&lt;gnunet-fs-gtk&gt;/Quit</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
@@ -163,17 +172,20 @@
             <child>
               <object class="GtkMenuItem" id="GNUNET_GTK_main_menu_edit">
                 <property name="use_action_appearance">False</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_Edit</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
                   <object class="GtkMenu" id="GNUNET_GTK_main_menu_edit_box">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkImageMenuItem" 
id="GNUNET_GTK_main_menu_edit_preferences">
                         <property name="label">gtk-preferences</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" translatable="yes">Edit 
the system configuration.</property>
-                        <property name="use_action_appearance">False</property>
                         <property 
name="accel_path">&lt;gnunet-fs-gtk&gt;/Edit/Preferences</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
@@ -185,18 +197,21 @@
             </child>
             <child>
               <object class="GtkMenuItem" id="GNUNET_GTK_main_menu_view">
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
-                <property name="use_action_appearance">False</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_View</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
                   <object class="GtkMenu" id="GNUNET_GTK_main_menu_view_box">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkCheckMenuItem" 
id="GNUNET_GTK_main_menu_view_metadata">
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" translatable="yes">Show 
meta data in main window</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="label" 
translatable="yes">Metadata</property>
                         <property name="use_underline">True</property>
                         <property name="active">True</property>
@@ -205,34 +220,50 @@
                     </child>
                     <child>
                       <object class="GtkCheckMenuItem" 
id="GNUNET_GTK_main_menu_view_preview">
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" translatable="yes">Show 
preview (when available)</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="label" 
translatable="yes">Preview</property>
                         <property name="use_underline">True</property>
                         <property name="active">True</property>
                         <signal name="toggled" 
handler="GNUNET_GTK_main_menu_view_preview_toggled_cb" swapped="no"/>
                       </object>
                     </child>
+                    <child>
+                      <object class="GtkCheckMenuItem" 
id="GNUNET_GTK_main_menu_search_preview">
+                        <property name="use_action_appearance">False</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="tooltip_text" translatable="yes">Show 
search box in main window</property>
+                        <property name="label" 
translatable="yes">Search</property>
+                        <property name="use_underline">True</property>
+                        <property name="active">True</property>
+                        <signal name="toggled" 
handler="GNUNET_GTK_main_menu_view_search_toggled_cb" swapped="no"/>
+                      </object>
+                    </child>
                   </object>
                 </child>
               </object>
             </child>
             <child>
               <object class="GtkMenuItem" id="GNUNET_GTK_main_menu_help">
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
-                <property name="use_action_appearance">False</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_Help</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
                   <object class="GtkMenu" id="GNUNET_GTK_main_menu_help_abou">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkImageMenuItem" 
id="GNUNET_GTK_main_menu_help_about">
                         <property name="label">gtk-about</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" 
translatable="yes">Display information about this version of 
gnunet-fs-gtk</property>
-                        <property name="use_action_appearance">False</property>
                         <property 
name="accel_path">&lt;gnunet-fs-gtk&gt;/Help/About</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
@@ -252,11 +283,13 @@
         </child>
         <child>
           <object class="GtkToolbar" id="GNUNET_GTK_main_window_toolbar">
+            <property name="can_focus">False</property>
             <property name="toolbar_style">icons</property>
             <child>
               <object class="GtkToolButton" id="GNUNET_GTK_toolbar_search">
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
-                <property name="use_action_appearance">False</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_Search</property>
                 <property name="use_underline">True</property>
                 <property name="stock_id">gtk-find</property>
@@ -274,13 +307,246 @@
           </packing>
         </child>
         <child>
+          <object class="GtkHBox" id="main_window_search_hbox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="border_width">3</property>
+            <property name="spacing">4</property>
+            <child>
+              <object class="GtkLabel" id="main_window_search_namespace_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Namespace:</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" 
id="main_window_search_selected_namespace_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label">&lt;none&gt;</property>
+                <property name="single_line_mode">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" 
id="main_window_search_namespace_combobox_alignment">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xscale">0</property>
+                <property name="yscale">0</property>
+                <child>
+                  <object class="GtkToggleButton" 
id="main_window_search_namespace_dropdown_button">
+                    <property name="use_action_appearance">False</property>
+                    <property name="width_request">21</property>
+                    <property name="height_request">21</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="events">GDK_ENTER_NOTIFY_MASK | 
GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK</property>
+                    <property name="image_position">right</property>
+                    <signal name="toggled" 
handler="main_window_search_namespace_dropdown_button_toggled_cb" swapped="no"/>
+                    <signal name="enter-notify-event" 
handler="main_window_search_namespace_dropdown_button_enter_notify_event_cb" 
swapped="no"/>
+                    <signal name="leave-notify-event" 
handler="namespace_selector_window_leave_notify_event_cb" swapped="no"/>
+                    <child>
+                      <object class="GtkArrow" id="arrow1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="arrow_type">down</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <object class="GtkAlignment" 
id="main_window_search_button_alignment">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="yscale">0</property>
+                <child>
+                  <object class="GtkButton" id="main_window_search_button">
+                    <property name="label" translatable="yes">Find:</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <signal name="clicked" 
handler="main_window_search_button_clicked_cb" swapped="no"/>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">4</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="main_window_search_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="invisible_char">●</property>
+                <property name="invisible_char_set">True</property>
+                <property name="primary_icon_stock">gtk-find</property>
+                <property name="primary_icon_activatable">True</property>
+                <property name="secondary_icon_activatable">False</property>
+                <property name="primary_icon_sensitive">True</property>
+                <property name="secondary_icon_sensitive">True</property>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">5</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="main_window_search_anonymity_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Anonymity:</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" 
id="main_window_search_anonymity_combobox_alignment">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="yscale">0</property>
+                <child>
+                  <object class="GtkComboBox" 
id="main_window_search_anonymity_combobox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property 
name="model">main_window_search_anonymity_liststore</property>
+                    <property name="active">1</property>
+                    <child>
+                      <object class="GtkCellRendererText" 
id="main_window_search_anonymity_combobox_renderer"/>
+                      <attributes>
+                        <attribute name="foreground">2</attribute>
+                        <attribute name="text">0</attribute>
+                      </attributes>
+                    </child>
+                    <child>
+                      <object class="GtkCellRendererText" 
id="main_window_search_anonymity_combobox_renerer_level"/>
+                      <attributes>
+                        <attribute name="text">1</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="main_window_search_mime_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Type:</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">8</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" 
id="main_window_search_mime_combobox_alignment">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="yscale">0</property>
+                <child>
+                  <object class="GtkComboBox" 
id="main_window_search_mime_combobox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property 
name="model">main_window_search_mime_liststore</property>
+                    <property name="active">0</property>
+                    <child>
+                      <object class="GtkCellRendererText" 
id="main_window_search_mime_renderer_description"/>
+                      <attributes>
+                        <attribute name="text">1</attribute>
+                      </attributes>
+                    </child>
+                    <child>
+                      <object class="GtkCellRendererText" 
id="main_window_search_mime_renderer_type">
+                        <property name="visible">False</property>
+                      </object>
+                      <attributes>
+                        <attribute name="text">0</attribute>
+                      </attributes>
+                    </child>
+                    <child>
+                      <object class="GtkCellRendererText" 
id="main_window_search_mime_renderer_extension"/>
+                      <attributes>
+                        <attribute name="text">2</attribute>
+                      </attributes>
+                    </child>
+                    <child>
+                      <object class="GtkCellRendererText" 
id="main_window_search_mime_renderer_lossyness">
+                        <property name="visible">False</property>
+                      </object>
+                      <attributes>
+                        <attribute name="text">3</attribute>
+                      </attributes>
+                    </child>
+                    <child>
+                      <object class="GtkCellRendererText" 
id="main_window_search_mime_renderer_freedom">
+                        <property name="visible">False</property>
+                      </object>
+                      <attributes>
+                        <attribute name="text">4</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">9</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+        <child>
           <object class="GtkHBox" id="GNUNET_GTK_main_window_hbox">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
               <object class="GtkNotebook" id="GNUNET_GTK_main_window_notebook">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="scrollable">True</property>
+                <property name="tab_border">0</property>
+                <property name="tab_hborder">0</property>
+                <property name="tab_vborder">0</property>
                 <signal name="switch-page" 
handler="GNUNET_GTK_main_window_notebook_switch_page_cb" after="yes" 
swapped="no"/>
               </object>
               <packing>
@@ -292,6 +558,7 @@
             <child>
               <object class="GtkVSeparator" 
id="GNUNET_GTK_main_window_separator">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -302,12 +569,14 @@
             <child>
               <object class="GtkVBox" id="GNUNET_GTK_main_window_extras_vbox">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <child>
                   <object class="GtkImage" 
id="GNUNET_GTK_main_window_preview_image">
                     <property name="width_request">128</property>
                     <property name="height_request">128</property>
                     <property name="visible">True</property>
                     <property name="sensitive">False</property>
+                    <property name="can_focus">False</property>
                     <property name="has_tooltip">True</property>
                     <property name="tooltip_text" translatable="yes">Thumbnail 
associated with the currently selected content</property>
                     <property name="pixel_size">256</property>
@@ -389,21 +658,9 @@
           <packing>
             <property name="expand">True</property>
             <property name="fill">True</property>
-            <property name="position">3</property>
+            <property name="position">4</property>
           </packing>
         </child>
-        <child>
-          <object class="GtkStatusbar" id="GNUNET_GTK_status_bar">
-            <property name="visible">True</property>
-            <property name="spacing">2</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
       </object>
     </child>
   </object>
@@ -419,6 +676,38 @@
       <column type="gchararray"/>
     </columns>
   </object>
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+    <property name="page_size">10</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustment2">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+    <property name="page_size">10</property>
+  </object>
+  <object class="GtkImage" id="image3">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-new</property>
+  </object>
+  <object class="GtkImage" id="image4">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-find</property>
+  </object>
+  <object class="GtkImage" id="image5">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-go-down</property>
+  </object>
+  <object class="GtkImage" id="image6">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-index</property>
+  </object>
   <object class="GtkListStore" id="GNUNET_GTK_peer_info_list_store">
     <columns>
       <!-- column-name peer_identity -->
@@ -433,22 +722,6 @@
       <column type="guint64"/>
     </columns>
   </object>
-  <object class="GtkImage" id="image6">
-    <property name="visible">True</property>
-    <property name="stock">gtk-index</property>
-  </object>
-  <object class="GtkAdjustment" id="adjustment1">
-    <property name="upper">100</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-    <property name="page_size">10</property>
-  </object>
-  <object class="GtkAdjustment" id="adjustment2">
-    <property name="upper">100</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-    <property name="page_size">10</property>
-  </object>
   <object class="GtkAdjustment" id="adjustment3">
     <property name="upper">100</property>
     <property name="step_increment">1</property>
@@ -461,4 +734,172 @@
     <property name="page_increment">10</property>
     <property name="page_size">10</property>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-open</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-go-up</property>
+  </object>
+  <object class="GtkImage" id="image7">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-index</property>
+  </object>
+  <object class="GtkImage" id="image8">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-index</property>
+  </object>
+  <object class="GtkImage" id="image9">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-index</property>
+  </object>
+  <object class="GtkListStore" id="main_window_search_anonymity_liststore">
+    <columns>
+      <!-- column-name Name -->
+      <column type="gchararray"/>
+      <!-- column-name Level -->
+      <column type="guint"/>
+      <!-- column-name Color -->
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes">None</col>
+        <col id="1">0</col>
+        <col id="2" translatable="yes">#AAAA00000000</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Normal</col>
+        <col id="1">1</col>
+        <col id="2" translatable="yes">#000000000000</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Paranoid</col>
+        <col id="1">10</col>
+        <col id="2" translatable="yes">#0000AAAA0000</col>
+      </row>
+    </data>
+  </object>
+  <object class="GtkListStore" id="main_window_search_mime_liststore">
+    <columns>
+      <!-- column-name MIME -->
+      <column type="gchararray"/>
+      <!-- column-name Type -->
+      <column type="gchararray"/>
+      <!-- column-name Extension -->
+      <column type="gchararray"/>
+      <!-- column-name Lossyness -->
+      <column type="gchararray"/>
+      <!-- column-name Freedom -->
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0"> </col>
+        <col id="1" translatable="yes">Any</col>
+        <col id="2" translatable="yes"> </col>
+        <col id="3" translatable="yes"> </col>
+        <col id="4" translatable="yes"> </col>
+      </row>
+      <row>
+        <col id="0">plain/text</col>
+        <col id="1" translatable="yes">Text</col>
+        <col id="2">txt</col>
+        <col id="3" translatable="yes">N/A</col>
+        <col id="4" translatable="yes">N/A</col>
+      </row>
+      <row>
+        <col id="0">application/zip</col>
+        <col id="1" translatable="yes">Zip</col>
+        <col id="2">zip</col>
+        <col id="3" translatable="yes">lossless</col>
+        <col id="4" translatable="yes">free</col>
+      </row>
+      <row>
+        <col id="0">audio/mpeg</col>
+        <col id="1" translatable="yes">MPEG audio</col>
+        <col id="2">mp3, mp2, mpeg</col>
+        <col id="3" translatable="yes">lossy</col>
+        <col id="4" translatable="yes">non-free</col>
+      </row>
+    </data>
+  </object>
+  <object class="GtkSizeGroup" id="enties_and_comboboxes_sizegroup">
+    <property name="mode">vertical</property>
+    <widgets>
+      <widget name="main_window_search_entry"/>
+      <widget name="main_window_search_anonymity_combobox"/>
+      <widget name="main_window_search_mime_combobox"/>
+    </widgets>
+  </object>
+  <object class="GtkTreeStore" id="main_window_search_namespace_treestore">
+    <columns>
+      <!-- column-name Name -->
+      <column type="gchararray"/>
+      <!-- column-name Key -->
+      <column type="gpointer"/>
+      <!-- column-name KeyTextual -->
+      <column type="gchararray"/>
+      <!-- column-name Tooltip -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
+  <object class="GtkWindow" id="namespace_selector_window">
+    <property name="can_focus">False</property>
+    <property name="events">GDK_LEAVE_NOTIFY_MASK | 
GDK_STRUCTURE_MASK</property>
+    <property name="type">popup</property>
+    <property name="resizable">False</property>
+    <property name="type_hint">dropdown-menu</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="urgency_hint">True</property>
+    <property name="decorated">False</property>
+    <property name="deletable">False</property>
+    <property name="transient_for">GNUNET_GTK_main_window</property>
+    <property name="mnemonics_visible">False</property>
+    <signal name="leave-notify-event" 
handler="namespace_selector_window_leave_notify_event_cb" swapped="no"/>
+    <signal name="enter-notify-event" 
handler="main_window_search_namespace_dropdown_button_enter_notify_event_cb" 
swapped="no"/>
+    <child>
+      <object class="GtkTreeView" id="namespace_selector_treeview">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property 
name="model">main_window_search_namespace_treestore</property>
+        <property name="headers_clickable">False</property>
+        <property name="search_column">0</property>
+        <property name="hover_expand">True</property>
+        <property name="tooltip_column">3</property>
+        <signal name="cursor-changed" 
handler="namespace_selector_treeview_cursor_changed_cb" swapped="no"/>
+        <child>
+          <object class="GtkTreeViewColumn" id="name_column">
+            <property name="sizing">autosize</property>
+            <property name="title" translatable="yes">Name</property>
+            <child>
+              <object class="GtkCellRendererText" 
id="namespace_selector_name_column_text_cell"/>
+              <attributes>
+                <attribute name="text">0</attribute>
+              </attributes>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkTreeViewColumn" id="key_column">
+            <property name="sizing">autosize</property>
+            <property name="title" translatable="yes">Key</property>
+            <child>
+              <object class="GtkCellRendererText" 
id="namespace_selector_key_column_text_cell"/>
+              <attributes>
+                <attribute name="text">2</attribute>
+              </attributes>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
 </interface>

Modified: gnunet-gtk/contrib/gnunet_fs_gtk_search_tab.glade
===================================================================
--- gnunet-gtk/contrib/gnunet_fs_gtk_search_tab.glade   2011-12-12 13:58:33 UTC 
(rev 18560)
+++ gnunet-gtk/contrib/gnunet_fs_gtk_search_tab.glade   2011-12-12 15:35:53 UTC 
(rev 18561)
@@ -35,140 +35,167 @@
     </columns>
   </object>
   <object class="GtkWindow" id="_search_result_frame_window">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
     <property name="title">You should never see this</property>
-                   <child>
-                      <object class="GtkScrolledWindow" 
id="_search_frame_scrolled_window">
-                        <property name="height_request">100</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="hscrollbar_policy">automatic</property>
-                        <property name="vscrollbar_policy">automatic</property>
-
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="focus_on_map">False</property>
+    <property name="decorated">False</property>
+    <property name="deletable">False</property>
     <child>
-      <object class="GtkTreeView" id="_search_result_frame">
+      <object class="GtkScrolledWindow" id="_search_frame_scrolled_window">
+        <property name="height_request">100</property>
         <property name="visible">True</property>
         <property name="can_focus">True</property>
-        <property 
name="model">GNUNET_GTK_file_sharing_result_tree_store</property>
-        <property name="reorderable">True</property>
-        <property name="enable_grid_lines">horizontal</property>
-        <property name="enable_tree_lines">True</property>
+        <property name="hscrollbar_policy">automatic</property>
+        <property name="vscrollbar_policy">automatic</property>
         <child>
-          <object class="GtkTreeViewColumn" 
id="search_result_description_column">
-            <property name="resizable">True</property>
-            <property name="sizing">autosize</property>
-            <property name="title" translatable="yes">Description</property>
-            <property name="expand">True</property>
-            <property name="clickable">True</property>
+          <object class="GtkTreeView" id="_search_result_frame">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property 
name="model">GNUNET_GTK_file_sharing_result_tree_store</property>
             <property name="reorderable">True</property>
-            <property name="sort_indicator">True</property>
-            <property name="sort_column_id">6</property>
+            <property name="enable_grid_lines">horizontal</property>
+            <property name="enable_tree_lines">True</property>
             <child>
-              <object class="GtkCellRendererProgress" 
id="search_result_description_renderer"/>
-              <attributes>
-                <attribute name="cell-background">8</attribute>
-                <attribute name="text">6</attribute>
-                <attribute name="value">5</attribute>
-              </attributes>
+              <object class="GtkTreeViewColumn" 
id="search_result_description_column">
+                <property name="resizable">True</property>
+                <property name="sizing">autosize</property>
+                <property name="title" 
translatable="yes">Description</property>
+                <property name="expand">True</property>
+                <property name="clickable">True</property>
+                <property name="reorderable">True</property>
+                <property name="sort_indicator">True</property>
+                <property name="sort_column_id">6</property>
+                <child>
+                  <object class="GtkCellRendererProgress" 
id="search_result_description_renderer"/>
+                  <attributes>
+                    <attribute name="cell-background">8</attribute>
+                    <attribute name="text">6</attribute>
+                    <attribute name="value">5</attribute>
+                  </attributes>
+                </child>
+              </object>
             </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkTreeViewColumn" id="search_result_mime_column">
-            <property name="sizing">autosize</property>
-            <property name="title" translatable="yes">Format</property>
-            <property name="clickable">True</property>
-            <property name="reorderable">True</property>
-            <property name="sort_indicator">True</property>
-            <property name="sort_column_id">10</property>
             <child>
-              <object class="GtkCellRendererText" 
id="search_result_mime_renderer"/>
-              <attributes>
-                <attribute name="background">8</attribute>
-                <attribute name="text">10</attribute>
-              </attributes>
+              <object class="GtkTreeViewColumn" id="search_result_mime_column">
+                <property name="sizing">autosize</property>
+                <property name="title" translatable="yes">Format</property>
+                <property name="clickable">True</property>
+                <property name="reorderable">True</property>
+                <property name="sort_indicator">True</property>
+                <property name="sort_column_id">10</property>
+                <child>
+                  <object class="GtkCellRendererText" 
id="search_result_mime_renderer"/>
+                  <attributes>
+                    <attribute name="background">8</attribute>
+                    <attribute name="text">10</attribute>
+                  </attributes>
+                </child>
+              </object>
             </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkTreeViewColumn" id="search_result_size_column">
-            <property name="sizing">autosize</property>
-            <property name="title" translatable="yes">Size</property>
-            <property name="reorderable">True</property>
-            <property name="sort_indicator">True</property>
-            <property name="sort_column_id">2</property>
             <child>
-              <object class="GtkCellRendererProgress" 
id="search_result_size_renderer"/>
-              <attributes>
-                <attribute name="cell-background">8</attribute>
-                <attribute name="text">2</attribute>
-                <attribute name="value">4</attribute>
-              </attributes>
+              <object class="GtkTreeViewColumn" id="search_result_size_column">
+                <property name="sizing">autosize</property>
+                <property name="title" translatable="yes">Size</property>
+                <property name="reorderable">True</property>
+                <property name="sort_indicator">True</property>
+                <property name="sort_column_id">2</property>
+                <child>
+                  <object class="GtkCellRendererProgress" 
id="search_result_size_renderer"/>
+                  <attributes>
+                    <attribute name="cell-background">8</attribute>
+                    <attribute name="text">2</attribute>
+                    <attribute name="value">4</attribute>
+                  </attributes>
+                </child>
+              </object>
             </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkTreeViewColumn" 
id="search_result_applicability_column">
-            <property name="sizing">autosize</property>
-            <property name="title">#</property>
-            <property name="reorderable">True</property>
-            <property name="sort_indicator">True</property>
-            <property name="sort_order">descending</property>
-            <property name="sort_column_id">11</property>
             <child>
-              <object class="GtkCellRendererText" 
id="search_result_applicability_renderer"/>
-              <attributes>
-                <attribute name="background">8</attribute>
-                <attribute name="text">11</attribute>
-              </attributes>
+              <object class="GtkTreeViewColumn" 
id="search_result_applicability_column">
+                <property name="sizing">autosize</property>
+                <property name="title">#</property>
+                <property name="reorderable">True</property>
+                <property name="sort_indicator">True</property>
+                <property name="sort_order">descending</property>
+                <property name="sort_column_id">11</property>
+                <child>
+                  <object class="GtkCellRendererText" 
id="search_result_applicability_renderer"/>
+                  <attributes>
+                    <attribute name="background">8</attribute>
+                    <attribute name="text">11</attribute>
+                  </attributes>
+                </child>
+              </object>
             </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkTreeViewColumn" id="search_result_preview_column">
-            <property name="min_width">128</property>
-            <property name="max_width">128</property>
-            <property name="title" translatable="yes">Preview</property>
-            <property name="reorderable">True</property>
             <child>
-              <object class="GtkCellRendererPixbuf" 
id="search_result_preview_renderer"/>
-              <attributes>
-                <attribute name="pixbuf">3</attribute>
-              </attributes>
+              <object class="GtkTreeViewColumn" 
id="search_result_preview_column">
+                <property name="min_width">128</property>
+                <property name="max_width">128</property>
+                <property name="title" translatable="yes">Preview</property>
+                <property name="reorderable">True</property>
+                <child>
+                  <object class="GtkCellRendererPixbuf" 
id="search_result_preview_renderer"/>
+                  <attributes>
+                    <attribute name="pixbuf">3</attribute>
+                  </attributes>
+                </child>
+              </object>
             </child>
           </object>
         </child>
       </object>
     </child>
   </object>
-    </child>
-  </object>
   <object class="GtkWindow" id="_search_result_label_window">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <property name="title" translatable="yes">You shouldn't see this 
also</property>
+    <property name="type_hint">dock</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="focus_on_map">False</property>
+    <property name="decorated">False</property>
+    <property name="deletable">False</property>
     <child>
       <object class="GtkHBox" id="_search_result_label_hbox">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="border_width">5</property>
         <child>
           <object class="GtkLabel" id="_search_result_label_window_label">
             <property name="height_request">30</property>
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="label" translatable="yes">query</property>
           </object>
           <packing>
-            <property name="fill">False</property>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="padding">5</property>
             <property name="position">0</property>
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="_search_result_label_play_button">
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_action_appearance">False</property>
+          <object class="GtkAlignment" 
id="_search_result_label_play_button_alignment">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xscale">0</property>
+            <property name="yscale">0</property>
             <child>
-              <object class="GtkImage" id="play_icon_stock_image">
-                <property name="visible">True</property>
-                <property name="stock">gtk-media-play</property>
-                <property name="icon-size">2</property>
+              <object class="GtkButton" id="_search_result_label_play_button">
+                <property name="use_action_appearance">False</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <child>
+                  <object class="GtkImage" id="play_icon_stock_image">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="stock">gtk-media-play</property>
+                    <property name="icon-size">2</property>
+                  </object>
+                </child>
               </object>
             </child>
           </object>
@@ -179,16 +206,25 @@
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="_search_result_label_pause_button">
+          <object class="GtkAlignment" 
id="_search_result_label_pause_button_alignment">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_action_appearance">False</property>
+            <property name="can_focus">False</property>
+            <property name="xscale">0</property>
+            <property name="yscale">0</property>
             <child>
-              <object class="GtkImage" id="pause_icon_stock_image">
+              <object class="GtkButton" id="_search_result_label_pause_button">
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
-                <property name="stock">gtk-media-pause</property>
-                <property name="icon-size">2</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <child>
+                  <object class="GtkImage" id="pause_icon_stock_image">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="stock">gtk-media-pause</property>
+                    <property name="icon-size">2</property>
+                  </object>
+                </child>
               </object>
             </child>
           </object>
@@ -199,15 +235,24 @@
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="_search_result_label_clear_button">
+          <object class="GtkAlignment" 
id="_search_result_label_clear_button_alignment">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_action_appearance">False</property>
+            <property name="can_focus">False</property>
+            <property name="xscale">0</property>
+            <property name="yscale">0</property>
             <child>
-              <object class="GtkImage" id="clear_icon_stock_image">
+              <object class="GtkButton" id="_search_result_label_clear_button">
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
-                <property name="stock">gtk-clear</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <child>
+                  <object class="GtkImage" id="clear_icon_stock_image">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="stock">gtk-clear</property>
+                  </object>
+                </child>
               </object>
             </child>
           </object>
@@ -219,17 +264,26 @@
           </packing>
         </child>
         <child>
-          <object class="GtkButton" id="_search_result_label_close_button">
+          <object class="GtkAlignment" 
id="_search_result_label_close_button_alignment">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_action_appearance">False</property>
-            <property name="relief">half</property>
+            <property name="can_focus">False</property>
+            <property name="xscale">0</property>
+            <property name="yscale">0</property>
             <child>
-              <object class="GtkImage" id="close_icon_stock_image">
+              <object class="GtkButton" id="_search_result_label_close_button">
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
-                <property name="stock">gtk-close</property>
-                <property name="icon-size">2</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="relief">half</property>
+                <child>
+                  <object class="GtkImage" id="close_icon_stock_image">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="stock">gtk-close</property>
+                    <property name="icon-size">2</property>
+                  </object>
+                </child>
               </object>
             </child>
           </object>
@@ -242,4 +296,13 @@
       </object>
     </child>
   </object>
+  <object class="GtkSizeGroup" id="_search_result_label_buttons_size_group">
+    <property name="mode">both</property>
+    <widgets>
+      <widget name="_search_result_label_play_button"/>
+      <widget name="_search_result_label_pause_button"/>
+      <widget name="_search_result_label_clear_button"/>
+      <widget name="_search_result_label_close_button"/>
+    </widgets>
+  </object>
 </interface>

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk-main_window_view_toggles.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk-main_window_view_toggles.c  2011-12-12 
13:58:33 UTC (rev 18560)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk-main_window_view_toggles.c  2011-12-12 
15:35:53 UTC (rev 18561)
@@ -71,5 +71,14 @@
                "GNUNET_GTK_main_menu_view_metadata");
 }
 
+/**
+ * Preview view is toggled.
+ */
+void
+GNUNET_GTK_main_menu_view_search_toggled_cb (GtkWidget * dummy, gpointer data)
+{
+  toggle_view ("main_window_search_hbox",
+               "GNUNET_GTK_main_menu_search_preview");
+}
 
 /* end of gnunet-fs-gtk-main_window_view_toggles.c */

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk.c   2011-12-12 13:58:33 UTC (rev 18560)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk.c   2011-12-12 15:35:53 UTC (rev 18561)
@@ -46,6 +46,7 @@
  */
 static struct EXTRACTOR_PluginList *plugins;
 
+guint namespace_selector_window_leave_timeout_source = 0;
 
 /**
  * Return handle for file-sharing operations.
@@ -129,45 +130,390 @@
 GNUNET_GTK_main_menu_file_search_activate_cb (GtkWidget * dummy, gpointer 
data);
 
 
+void
+main_window_search_namespace_dropdown_button_toggled_cb (GtkToggleButton 
*togglebutton,
+                                                        gpointer user_data)
+{
+  gboolean active;
+  GtkBuilder *builder = GTK_BUILDER (user_data);
+  GtkWidget *namespace_selector_window;
+  namespace_selector_window = GTK_WIDGET (gtk_builder_get_object (builder, 
"namespace_selector_window"));
+  g_object_get (G_OBJECT (togglebutton), "active", &active, NULL);
+  if (active)
+  {
+    GtkAllocation togglebutton_allocation;
+    GdkWindow *main_window_gdk;
+    gint mwg_x, mwg_y, tgb_x, tgb_y, popup_x, popup_y;
+
+    gtk_widget_get_allocation (GTK_WIDGET (togglebutton), 
&togglebutton_allocation);
+
+    main_window_gdk = gtk_widget_get_window (GTK_WIDGET (togglebutton));
+
+    gdk_window_get_origin (main_window_gdk, &mwg_x, &mwg_y);
+
+    /* FIXME: this might become a problem in other window managers,
+     * where reference point is not in the top-left corner.
+     * We want to show the window below the button.
+     */
+    tgb_x = mwg_x + togglebutton_allocation.x;
+    tgb_y = mwg_y + togglebutton_allocation.y;
+    popup_x = tgb_x;
+    popup_y = tgb_y + togglebutton_allocation.height;
+
+    gtk_window_move (GTK_WINDOW (namespace_selector_window), popup_x, popup_y);
+
+    gtk_widget_show (namespace_selector_window);
+  }
+  else
+    gtk_widget_hide (namespace_selector_window);
+}
+
+gboolean
+namespace_selector_window_leave_timeout_cb (gpointer user_data)
+{
+  GtkToggleButton *toggle_button = GTK_TOGGLE_BUTTON (user_data);
+  /* This will eventually hide the namespace selector */
+  gtk_toggle_button_set_active (toggle_button, FALSE);
+  return FALSE;
+}
+
+gboolean
+main_window_search_namespace_dropdown_button_enter_notify_event_cb (
+    GtkWidget *widget, GdkEvent *event, gpointer user_data)
+{
+  if (namespace_selector_window_leave_timeout_source > 0)
+    g_source_remove (namespace_selector_window_leave_timeout_source);
+  return FALSE;
+}
+
+
+gboolean
+namespace_selector_window_leave_notify_event_cb (GtkWidget *widget,
+    GdkEvent  *event, gpointer user_data)
+{
+  GtkBuilder *builder;
+  GtkToggleButton *toggle_button;
+  guint timeout_id;
+
+  builder = GTK_BUILDER (user_data);
+
+  toggle_button = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, 
"main_window_search_namespace_dropdown_button"));
+
+  /* Place a timeout to hide the window. It will be cancelled if the cursor
+   * enters the namespace selector window or the toggle button within 100ms.
+   */
+  timeout_id = g_timeout_add (100, 
&namespace_selector_window_leave_timeout_cb, toggle_button);
+  if (namespace_selector_window_leave_timeout_source > 0)
+    g_source_remove (namespace_selector_window_leave_timeout_source);
+  namespace_selector_window_leave_timeout_source = timeout_id;
+
+  return FALSE;
+}
+
+gboolean
+GNUNET_GTK_get_tree_string (GtkTreeView *treeview, GtkTreePath *treepath,
+    guint column, gchar **value)
+{
+  gboolean ok;
+  GtkTreeModel *model;
+
+  model = gtk_tree_view_get_model (treeview);
+  if (!model)
+    return FALSE;
+
+  GtkTreeIter iter;
+  ok = gtk_tree_model_get_iter (model, &iter, treepath);
+  if (!ok)
+    return FALSE;
+
+  *value = NULL;
+  gtk_tree_model_get (model, &iter, column, value, -1);
+  if (*value == NULL)
+    return FALSE;
+  return TRUE;
+}
+
+gboolean
+get_selected_anonymity_level (GtkBuilder *builder, guint *p_level)
+{
+  GtkComboBox *combo;
+  GtkTreeIter iter;
+  GtkTreeModel *model;
+  guint level;
+
+  combo = GTK_COMBO_BOX(gtk_builder_get_object (builder,
+      "main_window_search_anonymity_combobox"));
+  if (!combo)
+    return FALSE;
+
+  if (!gtk_combo_box_get_active_iter (combo, &iter))
+    return FALSE;
+
+  model = gtk_combo_box_get_model (combo);
+  if (!model)
+    return FALSE;
+
+  gtk_tree_model_get (model, &iter, 1, &level, -1);
+  if (p_level)
+    *p_level = level;
+  return TRUE;
+}
+
+gboolean
+get_selected_namespace_treepath_iter_model_widget (GtkBuilder *builder,
+    GtkTreePath **p_treepath, GtkTreeIter *p_iter, GtkTreeModel **p_model,
+    GtkWidget **p_widget)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel *model;
+  GList *selected;
+  GtkTreePath *treepath;
+  GtkWidget *widget;
+
+  widget = GTK_WIDGET (gtk_builder_get_object (builder, 
"namespace_selector_treeview"));
+  if (!widget)
+    return FALSE;
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
+  if (!selection || !model)
+    return FALSE;
+
+  selected = gtk_tree_selection_get_selected_rows (selection, NULL);
+  if (!selected)
+    return FALSE;
+  if (selected->data == NULL)
+  {
+    g_list_foreach (selected, (GFunc) gtk_tree_path_free, NULL);
+    g_list_free (selected);
+    return FALSE;
+  }
+  /* Free everything except the first path, keep it */
+  treepath = (GtkTreePath *) selected->data;
+  selected = g_list_remove (selected, selected->data);
+  g_list_foreach (selected, (GFunc) gtk_tree_path_free, NULL);
+  g_list_free (selected);
+
+  if (p_iter && !gtk_tree_model_get_iter (model, p_iter, treepath))
+  {
+    gtk_tree_path_free (treepath);
+    return FALSE;
+  }
+  *p_treepath = treepath;
+  if (p_model)
+    *p_model = model;
+  if (p_widget)
+    *p_widget = widget;
+  return TRUE;
+}
+
+void
+namespace_selector_treeview_cursor_changed_cb (GtkWidget *widget,
+    gpointer user_data)
+{
+  GtkBuilder *builder;
+  GtkToggleButton *toggle_button;
+  GtkLabel *sel_namespace_label;
+  gchar *value;
+  GtkTreePath *treepath;
+
+  builder = GTK_BUILDER (user_data);
+
+  if (!get_selected_namespace_treepath_iter_model_widget (builder, &treepath, 
NULL, NULL, NULL))
+    return;
+
+  toggle_button = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, 
"main_window_search_namespace_dropdown_button"));
+  if (!toggle_button)
+    return;
+
+  sel_namespace_label = GTK_LABEL (gtk_builder_get_object (builder, 
"main_window_search_selected_namespace_label"));
+  if (!sel_namespace_label)
+    return;
+
+  if (GNUNET_GTK_get_tree_string (GTK_TREE_VIEW (widget), treepath, 0,
+      &value))
+    gtk_label_set_text (sel_namespace_label, value);
+
+  gtk_tree_path_free (treepath);
+
+  /* This will eventually hide the namespace selector */
+  gtk_toggle_button_set_active (toggle_button, FALSE);
+}
+
+void
+main_window_search_button_clicked_cb (GtkButton *button, gpointer user_data)
+{
+  GtkBuilder *builder;
+  GtkTreePath *namespace_treepath = NULL;
+  GtkTreeModel *namespace_model = NULL;
+  GtkComboBox *mime_combo;
+  GtkTreeModel *mime_model;
+  GtkEntry *query_entry;
+  guint anonymity_level;
+  GtkTreeIter iter;
+  const char *entry_keywords;
+  gchar *keywords;
+  gchar *mime_keyword;
+
+  GNUNET_HashCode *nsid = NULL;
+  struct GNUNET_FS_Uri *uri;
+  char *emsg;
+
+  builder = GTK_BUILDER (user_data);
+
+  if (!get_selected_anonymity_level (builder, &anonymity_level))
+    return;
+
+  mime_combo = GTK_COMBO_BOX (GNUNET_FS_GTK_get_main_window_object
+      ("main_window_search_mime_combobox"));
+  mime_model = gtk_combo_box_get_model (mime_combo);
+  if (mime_model && gtk_combo_box_get_active_iter (mime_combo, &iter))
+  {
+    mime_keyword = NULL;
+    gtk_tree_model_get (mime_model, &iter, 0, &mime_keyword, -1);
+  }
+
+  get_selected_namespace_treepath_iter_model_widget (builder,
+      &namespace_treepath, &iter, &namespace_model, NULL);
+
+  query_entry = GTK_ENTRY (gtk_builder_get_object (builder,
+      "main_window_search_entry"));
+
+  entry_keywords = gtk_entry_get_text (query_entry);
+  if (mime_keyword != NULL)
+  {
+    keywords = g_strdup_printf ("%s %s", entry_keywords, mime_keyword);
+    g_free (mime_keyword);
+  }
+  else
+    keywords = g_strdup (entry_keywords);
+  if (namespace_treepath != NULL)
+    gtk_tree_model_get (namespace_model, &iter, 1, &nsid, -1);
+  if (nsid != NULL)
+  {
+    uri = GNUNET_FS_uri_sks_create_from_nsid (nsid, keywords);
+    GNUNET_assert (uri != NULL);
+  }
+  else
+  {
+    emsg = NULL;
+    uri = GNUNET_FS_uri_ksk_create (keywords, &emsg);
+    if (uri == NULL)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+          _("Invalid keyword string `%s': %s"), keywords, emsg);
+      GNUNET_free_non_null (emsg);
+      return;
+    }
+  }
+  GNUNET_FS_search_start (GNUNET_FS_GTK_get_fs_handle (), uri,
+      anonymity_level, GNUNET_FS_SEARCH_OPTION_NONE, NULL);
+
+  g_free (keywords);
+  GNUNET_FS_uri_destroy (uri);
+}
+
 /**
- * Add the tab with the 'new' icon for starting a search.
+ * Add pseudonym data to tree store
+ *
+ * @param cls closure (the 'GtkListStore')
+ * @param pseudonym hash code of public key of pseudonym
+ * @param md meta data known about the pseudonym
+ * @param rating the local rating of the pseudonym
+ * @return GNUNET_OK to continue iteration, GNUNET_SYSERR to abort
  */
-static void
-add_new_tab ()
+static int
+add_namespace_to_ts (void *cls, const GNUNET_HashCode * pseudonym,
+    const struct GNUNET_CONTAINER_MetaData *md, int rating)
 {
-  GtkNotebook *notebook;
-  GtkWindow *sf;
-  gint pages;
+  GtkTreeStore *ts = cls;
+  char *root;
+  char *ns_name;
+  GNUNET_HashCode *nsid;
+  char *description;
+  char *uris;
+  char *emsg;
+  struct GNUNET_FS_Uri *uri;
+  GtkTreeIter iter;
+
+  ns_name =
+      GNUNET_PSEUDONYM_id_to_name (GNUNET_FS_GTK_get_configuration (),
+                                   pseudonym);
+  nsid = GNUNET_malloc (sizeof (GNUNET_HashCode));
+  *nsid = *pseudonym;
+  root = NULL;
+  uris = GNUNET_CONTAINER_meta_data_get_by_type (md, EXTRACTOR_METATYPE_URI);
+  if (uris != NULL)
+  {
+    emsg = NULL;
+    uri = GNUNET_FS_uri_parse (uris, &emsg);
+    if (uri == NULL)
+      GNUNET_free (emsg);
+    root = GNUNET_FS_uri_sks_get_content_id (uri);
+    GNUNET_FS_uri_destroy (uri);
+  }
+  description =
+      GNUNET_CONTAINER_meta_data_get_first_by_types (md,
+                                                     EXTRACTOR_METATYPE_TITLE,
+                                                     
EXTRACTOR_METATYPE_BOOK_TITLE,
+                                                     
EXTRACTOR_METATYPE_DESCRIPTION,
+                                                     
EXTRACTOR_METATYPE_SUMMARY,
+                                                     EXTRACTOR_METATYPE_ALBUM,
+                                                     
EXTRACTOR_METATYPE_COMMENT,
+                                                     
EXTRACTOR_METATYPE_SUBJECT,
+                                                     
EXTRACTOR_METATYPE_KEYWORDS,
+                                                     -1);
+  gtk_tree_store_insert_with_values (ts, &iter, NULL, G_MAXINT, 0, ns_name, 1,
+      nsid, 2, root, 3, description, -1);
+  GNUNET_free (ns_name);
+  GNUNET_free_non_null (root);
+  GNUNET_free_non_null (description);
+  return GNUNET_OK;
+}
+
+void
+GNUNET_GTK_main_window_realize_cb (GtkWidget *widget, gpointer user_data)
+{
+  GtkTreeIter iter;
+  GtkTreeView *namespace_tree;
+  GtkTreeStore *namespace_treestore;
   GtkBuilder *builder;
-  GtkWidget *label;
-  GtkWidget *frame;
+  GtkWidget *namespace_selector_window;
 
-  builder =
-      GNUNET_GTK_get_new_builder ("gnunet_fs_gtk_main_tab_new_frame.glade");
+  builder = GTK_BUILDER (user_data);
 
-  /* load frame */
-  sf = GTK_WINDOW (gtk_builder_get_object (builder, "_main_tab_new_frame"));
-  label = gtk_bin_get_child (GTK_BIN (sf));
-  g_object_ref (G_OBJECT (label));
-  gtk_container_remove (GTK_CONTAINER (sf), label);
-  gtk_widget_destroy (GTK_WIDGET (sf));
-  g_object_unref (builder);
-  g_signal_connect (G_OBJECT (label), "clicked",
-                    G_CALLBACK (&GNUNET_GTK_main_menu_file_search_activate_cb),
-                    NULL);
+  namespace_treestore = GTK_TREE_STORE (GNUNET_FS_GTK_get_main_window_object
+      ("main_window_search_namespace_treestore"));
+  namespace_tree = GTK_TREE_VIEW (GNUNET_FS_GTK_get_main_window_object
+      ("namespace_selector_treeview"));
 
-  notebook =
-      GTK_NOTEBOOK (GNUNET_FS_GTK_get_main_window_object
-                    ("GNUNET_GTK_main_window_notebook"));
-  pages = gtk_notebook_get_n_pages (notebook);
-  frame = gtk_label_new ("");
-  gtk_widget_show (frame);
-  gtk_notebook_append_page (notebook, frame, label);
-  gtk_notebook_set_current_page (notebook, pages);
-  gtk_widget_show (GTK_WIDGET (notebook));
+  gtk_tree_store_insert_with_values (namespace_treestore, &iter, NULL,
+      G_MAXINT, 0, "Any", 1, NULL, 2, "", 3,
+      "Do not search in any particular namespace", -1);
+  GNUNET_PSEUDONYM_list_all (GNUNET_FS_GTK_get_configuration (),
+                             &add_namespace_to_ts, namespace_treestore);
+
+  /* FIXME: read currently selected namespace from somewhere instead of 
selecting 0th item */
+  if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (namespace_treestore), 
&iter))
+  {
+    gchar *value;
+    GtkLabel *sel_namespace_label;
+    GtkTreePath *treepath = gtk_tree_path_new_first ();
+    gtk_tree_selection_select_iter (gtk_tree_view_get_selection (
+        namespace_tree), &iter);
+    sel_namespace_label = GTK_LABEL (gtk_builder_get_object (builder, 
"main_window_search_selected_namespace_label"));
+    if (GNUNET_GTK_get_tree_string (namespace_tree, treepath, 0, &value))
+      gtk_label_set_text (sel_namespace_label, value);
+    gtk_tree_path_free (treepath);
+  }
+
+  /* How the window (to trigger certain events) and immediately hide it */
+  namespace_selector_window = GTK_WIDGET (gtk_builder_get_object (builder, 
"namespace_selector_window"));
+  gtk_widget_show (namespace_selector_window);
+  gtk_widget_hide (namespace_selector_window);
+
 }
 
-
 /**
  * Actual main function run right after GNUnet's scheduler
  * is initialized.  Initializes up GTK and Glade.
@@ -201,7 +547,8 @@
                         GNUNET_FS_OPTIONS_END);
   if (fs != NULL)
   {
-    add_new_tab ();
+    /* Searches are now started from the search bar */
+    /* add_new_tab (); */
   }
   else
   {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]